<?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>133020</bug_id>
          
          <creation_ts>2014-05-16 18:37:39 -0700</creation_ts>
          <short_desc>[wk2] RemoteLayerBackingStore front buffers should be purgeable when unparented</short_desc>
          <delta_ts>2014-05-26 23:15:51 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1009906</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-16 18:37:39 -0700</bug_when>
    <thetext>And also purgeable front buffers for unparented layers, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009915</commentid>
    <comment_count>1</comment_count>
      <attachid>231613</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-16 18:51:39 -0700</bug_when>
    <thetext>Created attachment 231613
preliminary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010420</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-20 00:29:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/16521736&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010423</commentid>
    <comment_count>3</comment_count>
      <attachid>231755</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-20 00:39:15 -0700</bug_when>
    <thetext>Created attachment 231755
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010505</commentid>
    <comment_count>4</comment_count>
      <attachid>231755</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-05-20 09:06:53 -0700</bug_when>
    <thetext>Comment on attachment 231755
patch

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

&gt; Source/WebKit2/Shared/mac/RemoteLayerBackingStore.mm:389
&gt; +            if (isVolatile)
&gt; +                m_frontBuffer.surface-&gt;clearGraphicsContext();

I was confused briefly by the &quot;clearGraphicsContext&quot; terminology, interpreting it as &quot;paint the clear color into the graphics context&quot;, but it&apos;s really removeGraphicsContext() right?

&gt; Source/WebKit2/Shared/mac/RemoteLayerBackingStoreCollection.mm:61
&gt; +    if (!m_unparentedBackingStore.contains(backingStore))
&gt; +        return;
&gt; +    m_liveBackingStore.add(backingStore);
&gt; +    m_unparentedBackingStore.remove(backingStore);

Can&apos;t this be done with just one hash lookup in m_unparentedBackingStore.contains?

&gt; Source/WebKit2/Shared/mac/RemoteLayerBackingStoreCollection.mm:72
&gt; +    if (!backingStore.setBufferVolatility(RemoteLayerBackingStore::BufferType::SecondaryBack, true))
&gt; +        successfullyMadeBackingStoreVolatile = false;
&gt; +    if (!backingStore.setBufferVolatility(RemoteLayerBackingStore::BufferType::Back, true))
&gt; +        successfullyMadeBackingStoreVolatile = false;
&gt; +    if (!backingStore.layer()-&gt;superlayer()) {

Would prefer blank lines between these statements.

&gt; Source/WebKit2/Shared/mac/RemoteLayerBackingStoreCollection.mm:100
&gt; +    if (m_unparentedBackingStore.contains(backingStore))
&gt; +        return;
&gt; +    m_unparentedBackingStore.add(backingStore);

Same.

&gt; Source/WebKit2/Shared/mac/RemoteLayerBackingStoreCollection.mm:118
&gt; +        successfullyMadeBackingStoreVolatile |= markBackingStoreVolatile(*backingStore, now);

Don&apos;t you want &amp;= ?  successfullyMadeBackingStoreVolatile starts off true so |= won&apos;t do anything.

&gt; Source/WebKit2/Shared/mac/RemoteLayerBackingStoreCollection.mm:121
&gt; +        successfullyMadeBackingStoreVolatile |= markBackingStoreVolatileImmediately(*backingStore);

Same.

&gt; Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm:106
&gt; +    // Drop the contents of any layers which were unparented; the Web process will re-send
&gt; +    // the backing store in the commit that reparents them.
&gt; +    for (auto&amp; layerOrView : m_layers.values()) {
&gt; +        CALayer *layer = asLayer(layerOrView.get());
&gt; +        if (layer.superlayer)
&gt; +            continue;
&gt; +        layer.contents = nullptr;
&gt; +    }

How should we handle disconnected subtrees? Or do we only care about this for tiles? Seems odd to consider all layers here when it&apos;s really just about tiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010513</commentid>
    <comment_count>5</comment_count>
      <attachid>231755</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-20 09:23:47 -0700</bug_when>
    <thetext>Comment on attachment 231755
patch

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

&gt;&gt; Source/WebKit2/Shared/mac/RemoteLayerBackingStore.mm:389
&gt;&gt; +                m_frontBuffer.surface-&gt;clearGraphicsContext();
&gt; 
&gt; I was confused briefly by the &quot;clearGraphicsContext&quot; terminology, interpreting it as &quot;paint the clear color into the graphics context&quot;, but it&apos;s really removeGraphicsContext() right?

Indeed it is.

&gt;&gt; Source/WebKit2/Shared/mac/RemoteLayerBackingStoreCollection.mm:61
&gt;&gt; +    m_unparentedBackingStore.remove(backingStore);
&gt; 
&gt; Can&apos;t this be done with just one hash lookup in m_unparentedBackingStore.contains?

Sure!

&gt;&gt; Source/WebKit2/Shared/mac/RemoteLayerBackingStoreCollection.mm:118
&gt;&gt; +        successfullyMadeBackingStoreVolatile |= markBackingStoreVolatile(*backingStore, now);
&gt; 
&gt; Don&apos;t you want &amp;= ?  successfullyMadeBackingStoreVolatile starts off true so |= won&apos;t do anything.

Indeed, good call. It would be nice if there were a way to assert that this was working correctly, but I don&apos;t think it&apos;s possible.

&gt;&gt; Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm:106
&gt;&gt; +    }
&gt; 
&gt; How should we handle disconnected subtrees? Or do we only care about this for tiles? Seems odd to consider all layers here when it&apos;s really just about tiles.

Why would this just be about tiles? This code (the purgeable front buffers of unparented layers bit) ought to work for all layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010587</commentid>
    <comment_count>6</comment_count>
      <attachid>231783</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-20 12:27:35 -0700</bug_when>
    <thetext>Created attachment 231783
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010916</commentid>
    <comment_count>7</comment_count>
      <attachid>231865</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-22 00:24:05 -0700</bug_when>
    <thetext>Created attachment 231865
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011890</commentid>
    <comment_count>8</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-26 23:15:43 -0700</bug_when>
    <thetext>I landed just the purgeable front buffers bit without swapping aggressive tile retention on, because I have some concerns which will be addressed in another bug, but multiple patches are blocked on purgeable front buffers.

http://trac.webkit.org/changeset/169370</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231613</attachid>
            <date>2014-05-16 18:51:39 -0700</date>
            <delta_ts>2014-05-20 00:39:15 -0700</delta_ts>
            <desc>preliminary</desc>
            <filename>agg.diff</filename>
            <type>text/plain</type>
            <size>15377</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCmluZGV4IGZhMDhi
MDAuLmZmOTA4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJl
bmNlc1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3Rv
cmUuaApAQCAtNzUsNiArNzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICNkZWZpbmUgREVGQVVM
VF9NRURJQV9QTEFZQkFDS19BTExPV1NfSU5MSU5FIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfTUVE
SUFfUExBWUJBQ0tfUkVRVUlSRVNfVVNFUl9HRVNUVVJFIHRydWUKICNkZWZpbmUgREVGQVVMVF9U
RU1QT1JBUllfVElMRV9DT0hPUlRfUkVURU5USU9OX0VOQUJMRUQgZmFsc2UKKyNkZWZpbmUgREVG
QVVMVF9BR0dSRVNTSVZFX1RJTEVfUkVURU5USU9OX0VOQUJMRUQgdHJ1ZQogI2Vsc2UKICNkZWZp
bmUgREVGQVVMVF9GUkFNRV9GTEFUVEVOSU5HX0VOQUJMRUQgZmFsc2UKICNkZWZpbmUgREVGQVVM
VF9TSE9VTERfUFJJTlRfQkFDS0dST1VORFMgZmFsc2UKQEAgLTg2LDYgKzg3LDcgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiAjZGVmaW5lIERFRkFVTFRfTUVESUFfUExBWUJBQ0tfQUxMT1dTX0lOTElO
RSB0cnVlCiAjZGVmaW5lIERFRkFVTFRfTUVESUFfUExBWUJBQ0tfUkVRVUlSRVNfVVNFUl9HRVNU
VVJFIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfVEVNUE9SQVJZX1RJTEVfQ09IT1JUX1JFVEVOVElP
Tl9FTkFCTEVEIHRydWUKKyNkZWZpbmUgREVGQVVMVF9BR0dSRVNTSVZFX1RJTEVfUkVURU5USU9O
X0VOQUJMRUQgZmFsc2UKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0o
SU9TX1NJTVVMQVRPUikKQEAgLTE4OCw3ICsxOTAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAg
ICBtYWNybyhQREZQbHVnaW5FbmFibGVkLCBwZGZQbHVnaW5FbmFibGVkLCBCb29sLCBib29sLCBE
RUZBVUxUX1BERlBMVUdJTl9FTkFCTEVEKSBcCiAgICAgbWFjcm8oVXNlc0VuY29kaW5nRGV0ZWN0
b3IsIHVzZXNFbmNvZGluZ0RldGVjdG9yLCBCb29sLCBib29sLCBmYWxzZSkgXAogICAgIG1hY3Jv
KFRleHRBdXRvc2l6aW5nRW5hYmxlZCwgdGV4dEF1dG9zaXppbmdFbmFibGVkLCBCb29sLCBib29s
LCBmYWxzZSkgXAotICAgIG1hY3JvKEFnZ3Jlc3NpdmVUaWxlUmV0ZW50aW9uRW5hYmxlZCwgYWdn
cmVzc2l2ZVRpbGVSZXRlbnRpb25FbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSkgXAorICAgIG1h
Y3JvKEFnZ3Jlc3NpdmVUaWxlUmV0ZW50aW9uRW5hYmxlZCwgYWdncmVzc2l2ZVRpbGVSZXRlbnRp
b25FbmFibGVkLCBCb29sLCBib29sLCBERUZBVUxUX0FHR1JFU1NJVkVfVElMRV9SRVRFTlRJT05f
RU5BQkxFRCkgXAogICAgIG1hY3JvKFRlbXBvcmFyeVRpbGVDb2hvcnRSZXRlbnRpb25FbmFibGVk
LCB0ZW1wb3JhcnlUaWxlQ29ob3J0UmV0ZW50aW9uRW5hYmxlZCwgQm9vbCwgYm9vbCwgREVGQVVM
VF9URU1QT1JBUllfVElMRV9DT0hPUlRfUkVURU5USU9OX0VOQUJMRUQpIFwKICAgICBtYWNybyhR
VEtpdEVuYWJsZWQsIGlzUVRLaXRFbmFibGVkLCBCb29sLCBib29sLCB0cnVlKSBcCiAgICAgbWFj
cm8oTG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQsIGxvZ3NQYWdlTWVzc2Fn
ZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSkgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbSBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KaW5k
ZXggNmMwZWE0OS4uM2I5NWRiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCkBAIC0yMDEsNiArMjAxLDkgQEAgYm9vbCBS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZGlzcGxheSgpCiAKICAgICBtX2xhc3REaXNwbGF5VGlt
ZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogCisgICAgaWYgKG1fY29udGV4
dCkKKyAgICAgICAgbV9jb250ZXh0LT5iYWNraW5nU3RvcmVXaWxsQmVEaXNwbGF5ZWQodGhpcyk7
CisKICAgICAvLyBNYWtlIHRoZSBwcmV2aW91cyBmcm9udCBidWZmZXIgbm9uLXZvbGF0aWxlIGVh
cmx5LCBzbyB0aGF0IHdlIGNhbiBkaXJ0eSB0aGUgd2hvbGUgbGF5ZXIgaWYgaXQgY29tZXMgYmFj
ayBlbXB0eS4KICAgICBzZXRCdWZmZXJWb2xhdGlsaXR5KEJ1ZmZlclR5cGU6OkZyb250LCBmYWxz
ZSk7CiAKQEAgLTM4Miw2ICszODUsOCBAQCBib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpz
ZXRCdWZmZXJWb2xhdGlsaXR5KEJ1ZmZlclR5cGUgdHlwZSwgYm9vbCBpc1ZvbGF0aQogICAgIHN3
aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBCdWZmZXJUeXBlOjpGcm9udDoKICAgICAgICAgaWYgKG1f
ZnJvbnRCdWZmZXIuc3VyZmFjZSAmJiBtX2Zyb250QnVmZmVyLmlzVm9sYXRpbGUgIT0gaXNWb2xh
dGlsZSkgeworICAgICAgICAgICAgaWYgKGlzVm9sYXRpbGUpCisgICAgICAgICAgICAgICAgbV9m
cm9udEJ1ZmZlci5zdXJmYWNlLT5jbGVhckdyYXBoaWNzQ29udGV4dCgpOwogICAgICAgICAgICAg
aWYgKCFpc1ZvbGF0aWxlIHx8ICFtX2Zyb250QnVmZmVyLnN1cmZhY2UtPmlzSW5Vc2UoKSkgewog
ICAgICAgICAgICAgICAgIElPU3VyZmFjZTo6U3VyZmFjZVN0YXRlIHByZXZpb3VzU3RhdGUgPSBt
X2Zyb250QnVmZmVyLnN1cmZhY2UtPnNldElzVm9sYXRpbGUoaXNWb2xhdGlsZSk7CiAgICAgICAg
ICAgICAgICAgbV9mcm9udEJ1ZmZlci5pc1ZvbGF0aWxlID0gaXNWb2xhdGlsZTsKQEAgLTM5NSw2
ICs0MDAsOCBAQCBib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpzZXRCdWZmZXJWb2xhdGls
aXR5KEJ1ZmZlclR5cGUgdHlwZSwgYm9vbCBpc1ZvbGF0aQogICAgICAgICBicmVhazsKICAgICBj
YXNlIEJ1ZmZlclR5cGU6OkJhY2s6CiAgICAgICAgIGlmIChtX2JhY2tCdWZmZXIuc3VyZmFjZSAm
JiBtX2JhY2tCdWZmZXIuaXNWb2xhdGlsZSAhPSBpc1ZvbGF0aWxlKSB7CisgICAgICAgICAgICBp
ZiAoaXNWb2xhdGlsZSkKKyAgICAgICAgICAgICAgICBtX2JhY2tCdWZmZXIuc3VyZmFjZS0+Y2xl
YXJHcmFwaGljc0NvbnRleHQoKTsKICAgICAgICAgICAgIGlmICghaXNWb2xhdGlsZSB8fCAhbV9i
YWNrQnVmZmVyLnN1cmZhY2UtPmlzSW5Vc2UoKSkgewogICAgICAgICAgICAgICAgIG1fYmFja0J1
ZmZlci5zdXJmYWNlLT5zZXRJc1ZvbGF0aWxlKGlzVm9sYXRpbGUpOwogICAgICAgICAgICAgICAg
IG1fYmFja0J1ZmZlci5pc1ZvbGF0aWxlID0gaXNWb2xhdGlsZTsKQEAgLTQwNCw2ICs0MTEsOCBA
QCBib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpzZXRCdWZmZXJWb2xhdGlsaXR5KEJ1ZmZl
clR5cGUgdHlwZSwgYm9vbCBpc1ZvbGF0aQogICAgICAgICBicmVhazsKICAgICBjYXNlIEJ1ZmZl
clR5cGU6OlNlY29uZGFyeUJhY2s6CiAgICAgICAgIGlmIChtX3NlY29uZGFyeUJhY2tCdWZmZXIu
c3VyZmFjZSAmJiBtX3NlY29uZGFyeUJhY2tCdWZmZXIuaXNWb2xhdGlsZSAhPSBpc1ZvbGF0aWxl
KSB7CisgICAgICAgICAgICBpZiAoaXNWb2xhdGlsZSkKKyAgICAgICAgICAgICAgICBtX3NlY29u
ZGFyeUJhY2tCdWZmZXIuc3VyZmFjZS0+Y2xlYXJHcmFwaGljc0NvbnRleHQoKTsKICAgICAgICAg
ICAgIGlmICghaXNWb2xhdGlsZSB8fCAhbV9zZWNvbmRhcnlCYWNrQnVmZmVyLnN1cmZhY2UtPmlz
SW5Vc2UoKSkgewogICAgICAgICAgICAgICAgIG1fc2Vjb25kYXJ5QmFja0J1ZmZlci5zdXJmYWNl
LT5zZXRJc1ZvbGF0aWxlKGlzVm9sYXRpbGUpOwogICAgICAgICAgICAgICAgIG1fc2Vjb25kYXJ5
QmFja0J1ZmZlci5pc1ZvbGF0aWxlID0gaXNWb2xhdGlsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlv
bi5oCmluZGV4IDNiOGVlNzcuLmY2ZGFkN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaApA
QCAtNDUsMTcgKzQ1LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGJhY2tpbmdTdG9yZVdhc0NyZWF0
ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqKTsKICAgICB2b2lkIGJhY2tpbmdTdG9yZVdpbGxC
ZURlc3Ryb3llZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSopOwogCi0gICAgdm9pZCBwdXJnZWFi
aWxpdHlUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29s
bGVjdGlvbj4mKTsKKyAgICB2b2lkIGJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXllZChSZW1vdGVM
YXllckJhY2tpbmdTdG9yZSopOworICAgIHZvaWQgYmFja2luZ1N0b3JlTGF5ZXJXYXNVbnBhcmVu
dGVkKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlKik7CiAKLSAgICB2b2lkIHNjaGVkdWxlUHVyZ2Vh
YmlsaXR5VGltZXIoKTsKKyAgICB2b2lkIHZvbGF0aWxpdHlUaW1lckZpcmVkKFdlYkNvcmU6OlRp
bWVyPFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbj4mKTsKKworICAgIHZvaWQgc2No
ZWR1bGVWb2xhdGlsaXR5VGltZXIoKTsKKworICAgIGNvbnN0IEhhc2hTZXQ8UmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUqPiYgbGl2ZUJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZUJh
Y2tpbmdTdG9yZTsgfQogCiBwcml2YXRlOgogICAgIEhhc2hTZXQ8UmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmUqPiBtX2xpdmVCYWNraW5nU3RvcmU7Ci0KLSAgICB2b2lkIG1hcmtJbmFjdGl2ZUJhY2tp
bmdTdG9yZVB1cmdlYWJsZSgpOworICAgIEhhc2hTZXQ8UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUq
PiBtX3VucGFyZW50ZWRCYWNraW5nU3RvcmU7CiAKICAgICBSZW1vdGVMYXllclRyZWVDb250ZXh0
KiBtX2NvbnRleHQ7Ci0gICAgV2ViQ29yZTo6VGltZXI8UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVD
b2xsZWN0aW9uPiBtX3B1cmdlYWJpbGl0eVRpbWVyOworICAgIFdlYkNvcmU6OlRpbWVyPFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbj4gbV92b2xhdGlsaXR5VGltZXI7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ubW0KaW5kZXggMTRm
YTk5Mi4uOTFlNzE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1v
dGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ubW0KQEAgLTMwLDE1ICsz
MCwxNSBAQAogI2ltcG9ydCAiUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaCIKICNpbXBvcnQgIlJl
bW90ZUxheWVyVHJlZUNvbnRleHQuaCIKIAotY29uc3Qgc3RkOjpjaHJvbm86OnNlY29uZHMgcHVy
Z2VhYmxlQmFja2luZ1N0b3JlQWdlVGhyZXNob2xkID0gMV9zOwotY29uc3Qgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcyBwdXJnZWFibGVTZWNvbmRhcnlCYWNraW5nU3RvcmVBZ2VUaHJlc2hvbGQg
PSAyMDBfbXM7Ci1jb25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHB1cmdlYWJpbGl0eVRp
bWVySW50ZXJ2YWwgPSAyMDBfbXM7Citjb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25kcyB2b2xhdGls
ZUJhY2tpbmdTdG9yZUFnZVRocmVzaG9sZCA9IDFfczsKK2NvbnN0IHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMgdm9sYXRpbGVTZWNvbmRhcnlCYWNraW5nU3RvcmVBZ2VUaHJlc2hvbGQgPSAyMDBf
bXM7Citjb25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHZvbGF0aWxpdHlUaW1lckludGVy
dmFsID0gMjAwX21zOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmVDb2xsZWN0aW9uOjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24oUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dCogY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAg
ICwgbV9wdXJnZWFiaWxpdHlUaW1lcih0aGlzLCAmUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xs
ZWN0aW9uOjpwdXJnZWFiaWxpdHlUaW1lckZpcmVkKQorICAgICwgbV92b2xhdGlsaXR5VGltZXIo
dGhpcywgJlJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6dm9sYXRpbGl0eVRpbWVy
RmlyZWQpCiB7CiB9CiAKQEAgLTUwLDQxICs1MCw4NiBAQCB2b2lkIFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlQ29sbGVjdGlvbjo6YmFja2luZ1N0b3JlV2FzQ3JlYXRlZChSZW1vdGVMYXllckJhY2tp
bgogdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmJhY2tpbmdTdG9yZVdp
bGxCZURlc3Ryb3llZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQogewog
ICAgIG1fbGl2ZUJhY2tpbmdTdG9yZS5yZW1vdmUoYmFja2luZ1N0b3JlKTsKKyAgICBtX3VucGFy
ZW50ZWRCYWNraW5nU3RvcmUucmVtb3ZlKGJhY2tpbmdTdG9yZSk7CiB9CiAKLXZvaWQgUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpwdXJnZWFiaWxpdHlUaW1lckZpcmVkKFdlYkNv
cmU6OlRpbWVyPFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbj4mKQordm9pZCBSZW1v
dGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXll
ZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQogewotICAgIGF1dG8gbm93
ID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7Ci0gICAgYm9vbCBoYWRSZWNlbnRs
eVBhaW50ZWRCYWNraW5nU3RvcmUgPSBmYWxzZTsKLSAgICBib29sIHN1Y2Nlc3NmdWxseU1hZGVC
YWNraW5nU3RvcmVQdXJnZWFibGUgPSB0cnVlOworICAgIGlmICghbV91bnBhcmVudGVkQmFja2lu
Z1N0b3JlLmNvbnRhaW5zKGJhY2tpbmdTdG9yZSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2xp
dmVCYWNraW5nU3RvcmUuYWRkKGJhY2tpbmdTdG9yZSk7CisgICAgbV91bnBhcmVudGVkQmFja2lu
Z1N0b3JlLnJlbW92ZShiYWNraW5nU3RvcmUpOworfQogCi0gICAgZm9yIChjb25zdCBhdXRvJiBi
YWNraW5nU3RvcmUgOiBtX2xpdmVCYWNraW5nU3RvcmUpIHsKLSAgICAgICAgaWYgKG5vdyAtIGJh
Y2tpbmdTdG9yZS0+bGFzdERpc3BsYXlUaW1lKCkgPCBwdXJnZWFibGVCYWNraW5nU3RvcmVBZ2VU
aHJlc2hvbGQpIHsKLSAgICAgICAgICAgIGhhZFJlY2VudGx5UGFpbnRlZEJhY2tpbmdTdG9yZSA9
IHRydWU7CitzdGF0aWMgYm9vbCBtYXJrQmFja2luZ1N0b3JlVm9sYXRpbGVJbW1lZGlhdGVseShS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlKQoreworICAgIGJvb2wgc3VjY2Vz
c2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxlID0gdHJ1ZTsKKworICAgIGlmICghYmFja2lu
Z1N0b3JlLnNldEJ1ZmZlclZvbGF0aWxpdHkoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OkJ1ZmZl
clR5cGU6OlNlY29uZGFyeUJhY2ssIHRydWUpKQorICAgICAgICBzdWNjZXNzZnVsbHlNYWRlQmFj
a2luZ1N0b3JlVm9sYXRpbGUgPSBmYWxzZTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZS5zZXRCdWZm
ZXJWb2xhdGlsaXR5KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpCdWZmZXJUeXBlOjpCYWNrLCB0
cnVlKSkKKyAgICAgICAgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxlID0gZmFs
c2U7CisgICAgaWYgKCFiYWNraW5nU3RvcmUubGF5ZXIoKS0+c3VwZXJsYXllcigpKSB7CisgICAg
ICAgIGlmICghYmFja2luZ1N0b3JlLnNldEJ1ZmZlclZvbGF0aWxpdHkoUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmU6OkJ1ZmZlclR5cGU6OkZyb250LCB0cnVlKSkKKyAgICAgICAgICAgIHN1Y2Nlc3Nm
dWxseU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSA9IGZhbHNlOworICAgIH0KIAotICAgICAgICAg
ICAgaWYgKG5vdyAtIGJhY2tpbmdTdG9yZS0+bGFzdERpc3BsYXlUaW1lKCkgPj0gcHVyZ2VhYmxl
U2Vjb25kYXJ5QmFja2luZ1N0b3JlQWdlVGhyZXNob2xkKQotICAgICAgICAgICAgICAgIGJhY2tp
bmdTdG9yZS0+c2V0QnVmZmVyVm9sYXRpbGl0eShSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6QnVm
ZmVyVHlwZTo6U2Vjb25kYXJ5QmFjaywgdHJ1ZSk7CisgICAgcmV0dXJuIHN1Y2Nlc3NmdWxseU1h
ZGVCYWNraW5nU3RvcmVWb2xhdGlsZTsKK30KIAotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KK3N0YXRpYyBib29sIG1hcmtCYWNraW5nU3RvcmVWb2xhdGlsZShSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1l
X3BvaW50IG5vdykKK3sKKyAgICBpZiAobm93IC0gYmFja2luZ1N0b3JlLmxhc3REaXNwbGF5VGlt
ZSgpIDwgdm9sYXRpbGVCYWNraW5nU3RvcmVBZ2VUaHJlc2hvbGQpIHsKKyAgICAgICAgaWYgKG5v
dyAtIGJhY2tpbmdTdG9yZS5sYXN0RGlzcGxheVRpbWUoKSA+PSB2b2xhdGlsZVNlY29uZGFyeUJh
Y2tpbmdTdG9yZUFnZVRocmVzaG9sZCkKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZS5zZXRCdWZm
ZXJWb2xhdGlsaXR5KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpCdWZmZXJUeXBlOjpTZWNvbmRh
cnlCYWNrLCB0cnVlKTsKIAotICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGxheWVyIGlzIHVucGFy
ZW50ZWQsIHdlIHNob3VsZCBtYWtlIGFsbCBidWZmZXJzIHZvbGF0aWxlLgotICAgICAgICBpZiAo
IWJhY2tpbmdTdG9yZS0+c2V0QnVmZmVyVm9sYXRpbGl0eShSZW1vdGVMYXllckJhY2tpbmdTdG9y
ZTo6QnVmZmVyVHlwZTo6U2Vjb25kYXJ5QmFjaywgdHJ1ZSkpCi0gICAgICAgICAgICBzdWNjZXNz
ZnVsbHlNYWRlQmFja2luZ1N0b3JlUHVyZ2VhYmxlID0gZmFsc2U7Ci0gICAgICAgIGlmICghYmFj
a2luZ1N0b3JlLT5zZXRCdWZmZXJWb2xhdGlsaXR5KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpC
dWZmZXJUeXBlOjpCYWNrLCB0cnVlKSkKLSAgICAgICAgICAgIHN1Y2Nlc3NmdWxseU1hZGVCYWNr
aW5nU3RvcmVQdXJnZWFibGUgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
KyAgICAKKyAgICBtYXJrQmFja2luZ1N0b3JlVm9sYXRpbGVJbW1lZGlhdGVseShiYWNraW5nU3Rv
cmUpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlQ29sbGVjdGlvbjo6YmFja2luZ1N0b3JlTGF5ZXJXYXNVbnBhcmVudGVkKFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCit7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9y
ZS0+bGF5ZXIoKSk7CisKKyAgICBpZiAobV91bnBhcmVudGVkQmFja2luZ1N0b3JlLmNvbnRhaW5z
KGJhY2tpbmdTdG9yZSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3VucGFyZW50ZWRCYWNraW5n
U3RvcmUuYWRkKGJhY2tpbmdTdG9yZSk7CisgICAgbV9saXZlQmFja2luZ1N0b3JlLnJlbW92ZShi
YWNraW5nU3RvcmUpOworCisgICAgLy8gSWYgYSBsYXllciB3aXRoIGJhY2tpbmcgc3RvcmUgaXMg
cmVtb3ZlZCBmcm9tIHRoZSB0cmVlLCBtYXJrIGl0IGFzIGhhdmluZyBjaGFuZ2VkIGJhY2tpbmcg
c3RvcmUsIHNvIHRoYXQKKyAgICAvLyBvbiB0aGUgY29tbWl0IHdoaWNoIHJldHVybnMgaXQgdG8g
dGhlIHRyZWUsIHdlIHNlcmlhbGl6ZSB0aGUgYmFja2luZyBzdG9yZSAoZGVzcGl0ZSBwb3NzaWJs
eSBub3QgcGFpbnRpbmcpLgorICAgIGJhY2tpbmdTdG9yZS0+bGF5ZXIoKS0+cHJvcGVydGllcygp
Lm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6QmFja2lu
Z1N0b3JlQ2hhbmdlZCk7CisKKyAgICAvLyBOb3QgYWxsIG9mIHRoZXNlIHdpbGwgc3VjY2VlZCwg
YmVjYXVzZSB0aGUgdW5wYXJlbnRpbmcgY29tbWl0IGhhc24ndCBtYWRlIGl0IHRvIHRoZSBVSSBw
cm9jZXNzIHlldC4KKyAgICAvLyBUaGUgdm9sYXRpbGl0eSB0aW1lciB3aWxsIGZpbmlzaCBtYXJr
aW5nIHRoZSByZW1haW5pbmcgYnVmZmVycyBsYXRlci4KKyAgICBtYXJrQmFja2luZ1N0b3JlVm9s
YXRpbGVJbW1lZGlhdGVseSgqYmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZUNvbGxlY3Rpb246OnZvbGF0aWxpdHlUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVy
PFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbj4mKQoreworICAgIGJvb2wgc3VjY2Vz
c2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxlID0gdHJ1ZTsKKworICAgIGF1dG8gbm93ID0g
c3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBi
YWNraW5nU3RvcmUgOiBtX2xpdmVCYWNraW5nU3RvcmUpCisgICAgICAgIHN1Y2Nlc3NmdWxseU1h
ZGVCYWNraW5nU3RvcmVWb2xhdGlsZSB8PSBtYXJrQmFja2luZ1N0b3JlVm9sYXRpbGUoKmJhY2tp
bmdTdG9yZSwgbm93KTsKKworICAgIGZvciAoY29uc3QgYXV0byYgYmFja2luZ1N0b3JlIDogbV91
bnBhcmVudGVkQmFja2luZ1N0b3JlKQorICAgICAgICBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0
b3JlVm9sYXRpbGUgfD0gbWFya0JhY2tpbmdTdG9yZVZvbGF0aWxlSW1tZWRpYXRlbHkoKmJhY2tp
bmdTdG9yZSk7CiAKLSAgICBpZiAoIWhhZFJlY2VudGx5UGFpbnRlZEJhY2tpbmdTdG9yZSAmJiBz
dWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlUHVyZ2VhYmxlKQotICAgICAgICBtX3B1cmdlYWJp
bGl0eVRpbWVyLnN0b3AoKTsKKyAgICBpZiAoc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZv
bGF0aWxlKQorICAgICAgICBtX3ZvbGF0aWxpdHlUaW1lci5zdG9wKCk7CiB9CiAKLXZvaWQgUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpzY2hlZHVsZVB1cmdlYWJpbGl0eVRpbWVy
KCkKK3ZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpzY2hlZHVsZVZvbGF0
aWxpdHlUaW1lcigpCiB7Ci0gICAgaWYgKG1fcHVyZ2VhYmlsaXR5VGltZXIuaXNBY3RpdmUoKSkK
KyAgICBpZiAobV92b2xhdGlsaXR5VGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9wdXJnZWFiaWxpdHlUaW1lci5zdGFydFJlcGVhdGluZyhwdXJnZWFiaWxpdHlUaW1l
ckludGVydmFsKTsKKyAgICBtX3ZvbGF0aWxpdHlUaW1lci5zdGFydFJlcGVhdGluZyh2b2xhdGls
aXR5VGltZXJJbnRlcnZhbCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVIb3N0Lm1tIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVIb3N0Lm1tCmluZGV4
IDgyMzlhNTUuLjdkNzBkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvUmVtb3RlTGF5ZXJUcmVlSG9zdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1JlbW90ZUxheWVyVHJlZUhvc3QubW0KQEAgLTk2LDYgKzk2LDE1IEBAIGJvb2wgUmVtb3Rl
TGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJUcmVlKGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uJiB0cmFuCiAgICAgZm9yIChhdXRvJiBkZXN0cm95ZWRMYXllciA6IHRyYW5zYWN0aW9u
LmRlc3Ryb3llZExheWVycygpKQogICAgICAgICBsYXllcldpbGxCZVJlbW92ZWQoZGVzdHJveWVk
TGF5ZXIpOwogCisgICAgLy8gRHJvcCB0aGUgY29udGVudHMgb2YgYW55IGxheWVycyB3aGljaCB3
ZXJlIHVucGFyZW50ZWQ7IHRoZSBXZWIgcHJvY2VzcyB3aWxsIHJlLXNlbmQKKyAgICAvLyB0aGUg
YmFja2luZyBzdG9yZSBpbiB0aGUgY29tbWl0IHRoYXQgcmVwYXJlbnRzIHRoZW0uCisgICAgZm9y
IChhdXRvJiBsYXllck9yVmlldyA6IG1fbGF5ZXJzLnZhbHVlcygpKSB7CisgICAgICAgIENBTGF5
ZXIgKmxheWVyID0gYXNMYXllcihsYXllck9yVmlldy5nZXQoKSk7CisgICAgICAgIGlmIChsYXll
ci5zdXBlcmxheWVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGxheWVyLmNvbnRl
bnRzID0gbnVsbHB0cjsKKyAgICB9CisKICAgICByZXR1cm4gcm9vdExheWVyQ2hhbmdlZDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1v
dGVMYXllclRyZWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQuaAppbmRleCA0ZGQ1Mjg0Li5lYTlmNDA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVy
VHJlZUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1JlbW90ZUxheWVyVHJlZUNvbnRleHQuaApAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGJhY2tpbmdTdG9yZVdhc0NyZWF0ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqKTsK
ICAgICB2b2lkIGJhY2tpbmdTdG9yZVdpbGxCZURlc3Ryb3llZChSZW1vdGVMYXllckJhY2tpbmdT
dG9yZSopOworICAgIHZvaWQgYmFja2luZ1N0b3JlV2lsbEJlRGlzcGxheWVkKFJlbW90ZUxheWVy
QmFja2luZ1N0b3JlKik7CiAKICAgICBMYXllckhvc3RpbmdNb2RlIGxheWVySG9zdGluZ01vZGUo
KSBjb25zdCB7IHJldHVybiBtX3dlYlBhZ2UtPmxheWVySG9zdGluZ01vZGUoKTsgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVy
VHJlZUNvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Jl
bW90ZUxheWVyVHJlZUNvbnRleHQubW0KaW5kZXggNGNiMTBhOS4uY2YyOWViOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVD
b250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVt
b3RlTGF5ZXJUcmVlQ29udGV4dC5tbQpAQCAtODYsNiArODYsMTEgQEAgdm9pZCBSZW1vdGVMYXll
clRyZWVDb250ZXh0OjpiYWNraW5nU3RvcmVXaWxsQmVEZXN0cm95ZWQoUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmUKICAgICBtX2JhY2tpbmdTdG9yZUNvbGxlY3Rpb24uYmFja2luZ1N0b3JlV2lsbEJl
RGVzdHJveWVkKGJhY2tpbmdTdG9yZSk7CiB9CiAKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4
dDo6YmFja2luZ1N0b3JlV2lsbEJlRGlzcGxheWVkKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlKiBi
YWNraW5nU3RvcmUpCit7CisgICAgbV9iYWNraW5nU3RvcmVDb2xsZWN0aW9uLmJhY2tpbmdTdG9y
ZVdpbGxCZURpc3BsYXllZChiYWNraW5nU3RvcmUpOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NMYXllcj4gUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6Y3JlYXRlR3JhcGhpY3NMYXllcihH
cmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8R3JhcGhpY3NMYXllckNBUmVtb3RlPihjbGllbnQsIHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWEubW0KaW5kZXggOWY1ZjdjMS4uODc4Y2Y2OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Jl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCkBAIC0yODMsOCArMjgzLDE5IEBAIHZvaWQgUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKCkKICAgICAgICAgbGF5ZXItPmRp
ZENvbW1pdCgpOwogICAgIH0KIAorICAgIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlv
biYgYmFja2luZ1N0b3JlQ29sbGVjdGlvbiA9IG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+YmFj
a2luZ1N0b3JlQ29sbGVjdGlvbigpOworCisgICAgVmVjdG9yPFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlKj4gdW5wYXJlbnRlZEJhY2tpbmdTdG9yZTsKKyAgICBmb3IgKGF1dG8mIGJhY2tpbmdTdG9y
ZSA6IGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ubGl2ZUJhY2tpbmdTdG9yZSgpKSB7CisgICAgICAg
IFBsYXRmb3JtQ0FMYXllclJlbW90ZSogbGF5ZXIgPSBiYWNraW5nU3RvcmUtPmxheWVyKCk7Cisg
ICAgICAgIGlmIChsYXllciAmJiAhbGF5ZXItPnN1cGVybGF5ZXIoKSkKKyAgICAgICAgICAgIHVu
cGFyZW50ZWRCYWNraW5nU3RvcmUuYXBwZW5kKGJhY2tpbmdTdG9yZSk7CisgICAgfQorICAgIGZv
ciAoYXV0byYgYmFja2luZ1N0b3JlIDogdW5wYXJlbnRlZEJhY2tpbmdTdG9yZSkKKyAgICAgICAg
YmFja2luZ1N0b3JlQ29sbGVjdGlvbi5iYWNraW5nU3RvcmVMYXllcldhc1VucGFyZW50ZWQoYmFj
a2luZ1N0b3JlKTsKKwogICAgIGlmIChoYWRBbnlDaGFuZ2VkQmFja2luZ1N0b3JlKQotICAgICAg
ICBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQtPmJhY2tpbmdTdG9yZUNvbGxlY3Rpb24oKS5zY2hl
ZHVsZVB1cmdlYWJpbGl0eVRpbWVyKCk7CisgICAgICAgIGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24u
c2NoZWR1bGVWb2xhdGlsaXR5VGltZXIoKTsKIAogICAgIFJlZlB0cjxCYWNraW5nU3RvcmVGbHVz
aGVyPiBiYWNraW5nU3RvcmVGbHVzaGVyID0gQmFja2luZ1N0b3JlRmx1c2hlcjo6Y3JlYXRlKFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCksIHN0ZDo6bW92ZShj
b21taXRFbmNvZGVyKSwgc3RkOjptb3ZlKGNvbnRleHRzVG9GbHVzaCkpOwogICAgIG1fcGVuZGlu
Z0JhY2tpbmdTdG9yZUZsdXNoZXIgPSBiYWNraW5nU3RvcmVGbHVzaGVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231755</attachid>
            <date>2014-05-20 00:39:15 -0700</date>
            <delta_ts>2014-05-20 12:27:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>agg.diff</filename>
            <type>text/plain</type>
            <size>19215</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwMTkwM2VkLi5hZmFkY2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIg
QEAKKzIwMTQtMDUtMjAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW3drMl0gRW5hYmxlIGFnZ3Jlc3NpdmUgdGlsZSByZXRlbnRpb24gYW5kIHB1cmdl
YWJsZSBmcm9udCBidWZmZXJzIG9uIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDIwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNjUyMTcz
Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNo
YXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmg6CisgICAgICAgIFR1cm4gb24gYWdncmVzc2l2ZSB0
aWxlIHJldGVudGlvbiBieSBkZWZhdWx0IG9uIGlPUy4KKworICAgICAgICAqIFNoYXJlZC9tYWMv
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVy
QmFja2luZ1N0b3JlOjpkaXNwbGF5KToKKyAgICAgICAgTGV0IHRoZSBjb250ZXh0IGtub3cgd2hl
bmV2ZXIgYSBSZW1vdGVMYXllckJhY2tpbmdTdG9yZSBpcyBkaXNwbGF5ZWQsIHNvIHRoYXQKKyAg
ICAgICAgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uIGNhbiAoaWYgbmVlZGVkKSBu
b3RlIHRoYXQgdGhlIGJhY2tpbmcgc3RvcmUKKyAgICAgICAgaXMgYWN0aXZlIG9uY2UgYWdhaW4g
KGJlY2F1c2Ugd2Ugb25seSBkaXNwbGF5IHBhcmVudGVkIGJhY2tpbmcgc3RvcmUpLgorCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpzZXRCdWZmZXJWb2xhdGlsaXR5
KToKKyAgICAgICAgRW5zdXJlIHRoYXQgd2UgbmV2ZXIgaGF2ZSBsaXZlIGNvbnRleHRzIGF0dGFj
aGVkIHRvIGFueSBidWZmZXJzIHdoZW4KKyAgICAgICAgbWFya2luZyB0aGVtIHZvbGF0aWxlLCBi
ZWNhdXNlIGNoZWNraW5nIGlzSW5Vc2UoKSB3aXRoIGxpdmUgY29udGV4dHMgaXMgZnV0aWxlLgor
CisgICAgICAgICogU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24u
aDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjps
aXZlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2lu
Z1N0b3JlQ29sbGVjdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmVDb2xsZWN0aW9uOjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmJhY2tpbmdT
dG9yZVdpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlQ29sbGVjdGlvbjo6YmFja2luZ1N0b3JlV2lsbEJlRGlzcGxheWVkKToKKyAgICAgICAg
KFdlYktpdDo6bWFya0JhY2tpbmdTdG9yZVZvbGF0aWxlSW1tZWRpYXRlbHkpOgorICAgICAgICAo
V2ViS2l0OjptYXJrQmFja2luZ1N0b3JlVm9sYXRpbGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmJhY2tpbmdTdG9yZUxheWVyV2FzVW5wYXJl
bnRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlv
bjo6dm9sYXRpbGl0eVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZUNvbGxlY3Rpb246OnNjaGVkdWxlVm9sYXRpbGl0eVRpbWVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpwdXJnZWFiaWxpdHlU
aW1lckZpcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmVDb2xsZWN0aW9uOjpzY2hlZHVsZVB1cmdlYWJpbGl0eVRpbWVyKTogRGVsZXRlZC4KKyAg
ICAgICAgUmVuYW1lIHB1cmdlYWJsZS0+dm9sYXRpbGUgZm9yIGFjY3VyYWN5LgorICAgICAgICBL
ZWVwIHRyYWNrIG9mIHR3byBzZXRzIG9mIGJhY2tpbmcgc3RvcmU6IHRob3NlIHdoaWNoIGFyZSBh
Y3RpdmUvcGFyZW50ZWQsIGFuZAorICAgICAgICB0aG9zZSB3aGljaCBhcmUgbm90LiBCYWNraW5n
IHN0b3JlIGlzIG1vdmVkIHRvIHRoZSBpbmFjdGl2ZSBzZXQgYWZ0ZXIgYnVpbGRpbmcKKyAgICAg
ICAgdGhlIHRyYW5zYWN0aW9uIGluIHdoaWNoIGl0cyBvd25pbmcgbGF5ZXIgaXMgdW5wYXJlbnRl
ZC4KKyAgICAgICAgV2hlbiBiYWNraW5nIHN0b3JlIGlzIHVucGFyZW50ZWQsIHRyeSB0byBtYXJr
IGl0IHZvbGF0aWxlIGltbWVkaWF0ZWx5LiBBbHNvLAorICAgICAgICBtYXJrIHRoZSBiYWNraW5n
IHN0b3JlIHByb3BlcnR5IGFzIGRpcnR5IG9uIHRoZSBvd25pbmcgbGF5ZXIgc28gdGhhdCB3aGVu
CisgICAgICAgIHNhaWQgbGF5ZXIgaXMgcmVwYXJlbnRlZCwgd2UgZW5jb2RlIHRoZSBiYWNraW5n
IHN0b3JlIGluIHRoZSBjb21taXQgdGhhdCByZXBhcmVudHMgaXQsCisgICAgICAgIGFzIHRoZSBV
SSBwcm9jZXNzIHdpbGwgdGhyb3cgYXdheSBpdHMgcmVmZXJlbmNlIHRvIHRoZSBiYWNraW5nIHN0
b3JlIHdoZW4KKyAgICAgICAgdGhlIGxheWVyIGlzIHVucGFyZW50ZWQuCisgICAgICAgIE1hcmsg
dGhlIGZyb250IGJ1ZmZlcnMgb2YgdW5wYXJlbnRlZCBsYXllcnMgYXMgdm9sYXRpbGUsIGluIGFk
ZGl0aW9uIHRvIHRoZSBvdGhlcnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1JlbW90ZUxh
eWVyVHJlZUhvc3QubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZUhvc3Q6OnVw
ZGF0ZUxheWVyVHJlZSk6CisgICAgICAgIEFmdGVyIGNvbW1pdHRpbmcgYSBsYXllciB0cmVlIHVw
ZGF0ZSwgbG9vayB0aHJvdWdoIGFsbCBvZiBvdXIgbGF5ZXJzLCBhbmQKKyAgICAgICAgZHJvcCB0
aGUgY29udGVudHMgb24gYW55IHVucGFyZW50ZWQgbGF5ZXJzLiBPdGhlcndpc2UsIHRoZSBVSSBw
cm9jZXNzIHdvdWxkCisgICAgICAgIGhvbGQgYSAndXNlJyBvbiB0aGUgSU9TdXJmYWNlLCBhbmQg
cHJldmVudCB0aGUgV2ViIHByb2Nlc3MgZnJvbSBtYXJraW5nIGl0IHZvbGF0aWxlLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1t
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVDb250ZXh0OjpiYWNraW5nU3RvcmVX
aWxsQmVEaXNwbGF5ZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhOjpmbHVzaExheWVycyk6CisgICAgICAgIEluZm9ybSBSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZUNvbGxlY3Rpb24gb2YgYW55IGJhY2tpbmcgc3RvcmUgd2hvc2Ugb3duaW5nIGxh
eWVyCisgICAgICAgIHdhcyB1bnBhcmVudGVkIGluIHRoaXMgY29tbWl0LgorCiAyMDE0LTA1LTE5
ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YktpdDIvaU9TOiBwYXJlbnRlZCB2aWV3IHNob3VsZCBiZSBjb25zaWRlcmVkIGhpZGRlbiBpZiBh
cHAgaXMgYmFja2dyb3VuZGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
UHJlZmVyZW5jZXNTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2Vz
U3RvcmUuaAppbmRleCBlMzBjMjY1Li5kYzgyOTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKQEAgLTc1LDYgKzc1LDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAjZGVmaW5lIERFRkFVTFRfTUVESUFfUExBWUJBQ0tfQUxMT1dTX0lOTElORSBmYWxzZQog
I2RlZmluZSBERUZBVUxUX01FRElBX1BMQVlCQUNLX1JFUVVJUkVTX1VTRVJfR0VTVFVSRSB0cnVl
CiAjZGVmaW5lIERFRkFVTFRfVEVNUE9SQVJZX1RJTEVfQ09IT1JUX1JFVEVOVElPTl9FTkFCTEVE
IGZhbHNlCisjZGVmaW5lIERFRkFVTFRfQUdHUkVTU0lWRV9USUxFX1JFVEVOVElPTl9FTkFCTEVE
IHRydWUKICNlbHNlCiAjZGVmaW5lIERFRkFVTFRfRlJBTUVfRkxBVFRFTklOR19FTkFCTEVEIGZh
bHNlCiAjZGVmaW5lIERFRkFVTFRfU0hPVUxEX1BSSU5UX0JBQ0tHUk9VTkRTIGZhbHNlCkBAIC04
Niw2ICs4Nyw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogI2RlZmluZSBERUZBVUxUX01FRElBX1BM
QVlCQUNLX0FMTE9XU19JTkxJTkUgdHJ1ZQogI2RlZmluZSBERUZBVUxUX01FRElBX1BMQVlCQUNL
X1JFUVVJUkVTX1VTRVJfR0VTVFVSRSBmYWxzZQogI2RlZmluZSBERUZBVUxUX1RFTVBPUkFSWV9U
SUxFX0NPSE9SVF9SRVRFTlRJT05fRU5BQkxFRCB0cnVlCisjZGVmaW5lIERFRkFVTFRfQUdHUkVT
U0lWRV9USUxFX1JFVEVOVElPTl9FTkFCTEVEIGZhbHNlCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KElPUykgJiYgIVBMQVRGT1JNKElPU19TSU1VTEFUT1IpCkBAIC0xODcsNyArMTg5LDcgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiAgICAgbWFjcm8oUERGUGx1Z2luRW5hYmxlZCwgcGRmUGx1Z2luRW5h
YmxlZCwgQm9vbCwgYm9vbCwgREVGQVVMVF9QREZQTFVHSU5fRU5BQkxFRCkgXAogICAgIG1hY3Jv
KFVzZXNFbmNvZGluZ0RldGVjdG9yLCB1c2VzRW5jb2RpbmdEZXRlY3RvciwgQm9vbCwgYm9vbCwg
ZmFsc2UpIFwKICAgICBtYWNybyhUZXh0QXV0b3NpemluZ0VuYWJsZWQsIHRleHRBdXRvc2l6aW5n
RW5hYmxlZCwgQm9vbCwgYm9vbCwgZmFsc2UpIFwKLSAgICBtYWNybyhBZ2dyZXNzaXZlVGlsZVJl
dGVudGlvbkVuYWJsZWQsIGFnZ3Jlc3NpdmVUaWxlUmV0ZW50aW9uRW5hYmxlZCwgQm9vbCwgYm9v
bCwgZmFsc2UpIFwKKyAgICBtYWNybyhBZ2dyZXNzaXZlVGlsZVJldGVudGlvbkVuYWJsZWQsIGFn
Z3Jlc3NpdmVUaWxlUmV0ZW50aW9uRW5hYmxlZCwgQm9vbCwgYm9vbCwgREVGQVVMVF9BR0dSRVNT
SVZFX1RJTEVfUkVURU5USU9OX0VOQUJMRUQpIFwKICAgICBtYWNybyhUZW1wb3JhcnlUaWxlQ29o
b3J0UmV0ZW50aW9uRW5hYmxlZCwgdGVtcG9yYXJ5VGlsZUNvaG9ydFJldGVudGlvbkVuYWJsZWQs
IEJvb2wsIGJvb2wsIERFRkFVTFRfVEVNUE9SQVJZX1RJTEVfQ09IT1JUX1JFVEVOVElPTl9FTkFC
TEVEKSBcCiAgICAgbWFjcm8oUVRLaXRFbmFibGVkLCBpc1FUS2l0RW5hYmxlZCwgQm9vbCwgYm9v
bCwgdHJ1ZSkgXAogICAgIG1hY3JvKExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFi
bGVkLCBsb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCwgQm9vbCwgYm9vbCwg
ZmFsc2UpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVy
QmFja2luZ1N0b3JlLm1tCmluZGV4IDZjMGVhNDkuLjNiOTVkYmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQpAQCAtMjAx
LDYgKzIwMSw5IEBAIGJvb2wgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRpc3BsYXkoKQogCiAg
ICAgbV9sYXN0RGlzcGxheVRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsK
IAorICAgIGlmIChtX2NvbnRleHQpCisgICAgICAgIG1fY29udGV4dC0+YmFja2luZ1N0b3JlV2ls
bEJlRGlzcGxheWVkKHRoaXMpOworCiAgICAgLy8gTWFrZSB0aGUgcHJldmlvdXMgZnJvbnQgYnVm
ZmVyIG5vbi12b2xhdGlsZSBlYXJseSwgc28gdGhhdCB3ZSBjYW4gZGlydHkgdGhlIHdob2xlIGxh
eWVyIGlmIGl0IGNvbWVzIGJhY2sgZW1wdHkuCiAgICAgc2V0QnVmZmVyVm9sYXRpbGl0eShCdWZm
ZXJUeXBlOjpGcm9udCwgZmFsc2UpOwogCkBAIC0zODIsNiArMzg1LDggQEAgYm9vbCBSZW1vdGVM
YXllckJhY2tpbmdTdG9yZTo6c2V0QnVmZmVyVm9sYXRpbGl0eShCdWZmZXJUeXBlIHR5cGUsIGJv
b2wgaXNWb2xhdGkKICAgICBzd2l0Y2godHlwZSkgewogICAgIGNhc2UgQnVmZmVyVHlwZTo6RnJv
bnQ6CiAgICAgICAgIGlmIChtX2Zyb250QnVmZmVyLnN1cmZhY2UgJiYgbV9mcm9udEJ1ZmZlci5p
c1ZvbGF0aWxlICE9IGlzVm9sYXRpbGUpIHsKKyAgICAgICAgICAgIGlmIChpc1ZvbGF0aWxlKQor
ICAgICAgICAgICAgICAgIG1fZnJvbnRCdWZmZXIuc3VyZmFjZS0+Y2xlYXJHcmFwaGljc0NvbnRl
eHQoKTsKICAgICAgICAgICAgIGlmICghaXNWb2xhdGlsZSB8fCAhbV9mcm9udEJ1ZmZlci5zdXJm
YWNlLT5pc0luVXNlKCkpIHsKICAgICAgICAgICAgICAgICBJT1N1cmZhY2U6OlN1cmZhY2VTdGF0
ZSBwcmV2aW91c1N0YXRlID0gbV9mcm9udEJ1ZmZlci5zdXJmYWNlLT5zZXRJc1ZvbGF0aWxlKGlz
Vm9sYXRpbGUpOwogICAgICAgICAgICAgICAgIG1fZnJvbnRCdWZmZXIuaXNWb2xhdGlsZSA9IGlz
Vm9sYXRpbGU7CkBAIC0zOTUsNiArNDAwLDggQEAgYm9vbCBSZW1vdGVMYXllckJhY2tpbmdTdG9y
ZTo6c2V0QnVmZmVyVm9sYXRpbGl0eShCdWZmZXJUeXBlIHR5cGUsIGJvb2wgaXNWb2xhdGkKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBCdWZmZXJUeXBlOjpCYWNrOgogICAgICAgICBpZiAobV9i
YWNrQnVmZmVyLnN1cmZhY2UgJiYgbV9iYWNrQnVmZmVyLmlzVm9sYXRpbGUgIT0gaXNWb2xhdGls
ZSkgeworICAgICAgICAgICAgaWYgKGlzVm9sYXRpbGUpCisgICAgICAgICAgICAgICAgbV9iYWNr
QnVmZmVyLnN1cmZhY2UtPmNsZWFyR3JhcGhpY3NDb250ZXh0KCk7CiAgICAgICAgICAgICBpZiAo
IWlzVm9sYXRpbGUgfHwgIW1fYmFja0J1ZmZlci5zdXJmYWNlLT5pc0luVXNlKCkpIHsKICAgICAg
ICAgICAgICAgICBtX2JhY2tCdWZmZXIuc3VyZmFjZS0+c2V0SXNWb2xhdGlsZShpc1ZvbGF0aWxl
KTsKICAgICAgICAgICAgICAgICBtX2JhY2tCdWZmZXIuaXNWb2xhdGlsZSA9IGlzVm9sYXRpbGU7
CkBAIC00MDQsNiArNDExLDggQEAgYm9vbCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6c2V0QnVm
ZmVyVm9sYXRpbGl0eShCdWZmZXJUeXBlIHR5cGUsIGJvb2wgaXNWb2xhdGkKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBCdWZmZXJUeXBlOjpTZWNvbmRhcnlCYWNrOgogICAgICAgICBpZiAobV9z
ZWNvbmRhcnlCYWNrQnVmZmVyLnN1cmZhY2UgJiYgbV9zZWNvbmRhcnlCYWNrQnVmZmVyLmlzVm9s
YXRpbGUgIT0gaXNWb2xhdGlsZSkgeworICAgICAgICAgICAgaWYgKGlzVm9sYXRpbGUpCisgICAg
ICAgICAgICAgICAgbV9zZWNvbmRhcnlCYWNrQnVmZmVyLnN1cmZhY2UtPmNsZWFyR3JhcGhpY3ND
b250ZXh0KCk7CiAgICAgICAgICAgICBpZiAoIWlzVm9sYXRpbGUgfHwgIW1fc2Vjb25kYXJ5QmFj
a0J1ZmZlci5zdXJmYWNlLT5pc0luVXNlKCkpIHsKICAgICAgICAgICAgICAgICBtX3NlY29uZGFy
eUJhY2tCdWZmZXIuc3VyZmFjZS0+c2V0SXNWb2xhdGlsZShpc1ZvbGF0aWxlKTsKICAgICAgICAg
ICAgICAgICBtX3NlY29uZGFyeUJhY2tCdWZmZXIuaXNWb2xhdGlsZSA9IGlzVm9sYXRpbGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0
b3JlQ29sbGVjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllckJh
Y2tpbmdTdG9yZUNvbGxlY3Rpb24uaAppbmRleCAzYjhlZTc3Li5mNmRhZDdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVj
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmVDb2xsZWN0aW9uLmgKQEAgLTQ1LDE3ICs0NSwyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBi
YWNraW5nU3RvcmVXYXNDcmVhdGVkKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlKik7CiAgICAgdm9p
ZCBiYWNraW5nU3RvcmVXaWxsQmVEZXN0cm95ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqKTsK
IAotICAgIHZvaWQgcHVyZ2VhYmlsaXR5VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxSZW1vdGVM
YXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24+Jik7CisgICAgdm9pZCBiYWNraW5nU3RvcmVXaWxs
QmVEaXNwbGF5ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqKTsKKyAgICB2b2lkIGJhY2tpbmdT
dG9yZUxheWVyV2FzVW5wYXJlbnRlZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSopOwogCi0gICAg
dm9pZCBzY2hlZHVsZVB1cmdlYWJpbGl0eVRpbWVyKCk7CisgICAgdm9pZCB2b2xhdGlsaXR5VGlt
ZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24+
Jik7CisKKyAgICB2b2lkIHNjaGVkdWxlVm9sYXRpbGl0eVRpbWVyKCk7CisKKyAgICBjb25zdCBI
YXNoU2V0PFJlbW90ZUxheWVyQmFja2luZ1N0b3JlKj4mIGxpdmVCYWNraW5nU3RvcmUoKSBjb25z
dCB7IHJldHVybiBtX2xpdmVCYWNraW5nU3RvcmU7IH0KIAogcHJpdmF0ZToKICAgICBIYXNoU2V0
PFJlbW90ZUxheWVyQmFja2luZ1N0b3JlKj4gbV9saXZlQmFja2luZ1N0b3JlOwotCi0gICAgdm9p
ZCBtYXJrSW5hY3RpdmVCYWNraW5nU3RvcmVQdXJnZWFibGUoKTsKKyAgICBIYXNoU2V0PFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlKj4gbV91bnBhcmVudGVkQmFja2luZ1N0b3JlOwogCiAgICAgUmVt
b3RlTGF5ZXJUcmVlQ29udGV4dCogbV9jb250ZXh0OwotICAgIFdlYkNvcmU6OlRpbWVyPFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbj4gbV9wdXJnZWFiaWxpdHlUaW1lcjsKKyAgICBX
ZWJDb3JlOjpUaW1lcjxSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24+IG1fdm9sYXRp
bGl0eVRpbWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5t
bSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xs
ZWN0aW9uLm1tCmluZGV4IDE0ZmE5OTIuLjkxZTcxNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0
aW9uLm1tCkBAIC0zMCwxNSArMzAsMTUgQEAKICNpbXBvcnQgIlJlbW90ZUxheWVyQmFja2luZ1N0
b3JlLmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVDb250ZXh0LmgiCiAKLWNvbnN0IHN0ZDo6
Y2hyb25vOjpzZWNvbmRzIHB1cmdlYWJsZUJhY2tpbmdTdG9yZUFnZVRocmVzaG9sZCA9IDFfczsK
LWNvbnN0IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgcHVyZ2VhYmxlU2Vjb25kYXJ5QmFja2lu
Z1N0b3JlQWdlVGhyZXNob2xkID0gMjAwX21zOwotY29uc3Qgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyBwdXJnZWFiaWxpdHlUaW1lckludGVydmFsID0gMjAwX21zOworY29uc3Qgc3RkOjpjaHJv
bm86OnNlY29uZHMgdm9sYXRpbGVCYWNraW5nU3RvcmVBZ2VUaHJlc2hvbGQgPSAxX3M7Citjb25z
dCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHZvbGF0aWxlU2Vjb25kYXJ5QmFja2luZ1N0b3Jl
QWdlVGhyZXNob2xkID0gMjAwX21zOworY29uc3Qgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB2
b2xhdGlsaXR5VGltZXJJbnRlcnZhbCA9IDIwMF9tczsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6UmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmVDb2xsZWN0aW9uKFJlbW90ZUxheWVyVHJlZUNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX2Nv
bnRleHQoY29udGV4dCkKLSAgICAsIG1fcHVyZ2VhYmlsaXR5VGltZXIodGhpcywgJlJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6cHVyZ2VhYmlsaXR5VGltZXJGaXJlZCkKKyAgICAs
IG1fdm9sYXRpbGl0eVRpbWVyKHRoaXMsICZSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rp
b246OnZvbGF0aWxpdHlUaW1lckZpcmVkKQogewogfQogCkBAIC01MCw0MSArNTAsODYgQEAgdm9p
ZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmJhY2tpbmdTdG9yZVdhc0NyZWF0
ZWQoUmVtb3RlTGF5ZXJCYWNraW4KIHZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0
aW9uOjpiYWNraW5nU3RvcmVXaWxsQmVEZXN0cm95ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUq
IGJhY2tpbmdTdG9yZSkKIHsKICAgICBtX2xpdmVCYWNraW5nU3RvcmUucmVtb3ZlKGJhY2tpbmdT
dG9yZSk7CisgICAgbV91bnBhcmVudGVkQmFja2luZ1N0b3JlLnJlbW92ZShiYWNraW5nU3RvcmUp
OwogfQogCi12b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6cHVyZ2VhYmls
aXR5VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxl
Y3Rpb24+JikKK3ZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpiYWNraW5n
U3RvcmVXaWxsQmVEaXNwbGF5ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9y
ZSkKIHsKLSAgICBhdXRvIG5vdyA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwot
ICAgIGJvb2wgaGFkUmVjZW50bHlQYWludGVkQmFja2luZ1N0b3JlID0gZmFsc2U7Ci0gICAgYm9v
bCBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlUHVyZ2VhYmxlID0gdHJ1ZTsKKyAgICBpZiAo
IW1fdW5wYXJlbnRlZEJhY2tpbmdTdG9yZS5jb250YWlucyhiYWNraW5nU3RvcmUpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9saXZlQmFja2luZ1N0b3JlLmFkZChiYWNraW5nU3RvcmUpOworICAg
IG1fdW5wYXJlbnRlZEJhY2tpbmdTdG9yZS5yZW1vdmUoYmFja2luZ1N0b3JlKTsKK30KIAotICAg
IGZvciAoY29uc3QgYXV0byYgYmFja2luZ1N0b3JlIDogbV9saXZlQmFja2luZ1N0b3JlKSB7Ci0g
ICAgICAgIGlmIChub3cgLSBiYWNraW5nU3RvcmUtPmxhc3REaXNwbGF5VGltZSgpIDwgcHVyZ2Vh
YmxlQmFja2luZ1N0b3JlQWdlVGhyZXNob2xkKSB7Ci0gICAgICAgICAgICBoYWRSZWNlbnRseVBh
aW50ZWRCYWNraW5nU3RvcmUgPSB0cnVlOworc3RhdGljIGJvb2wgbWFya0JhY2tpbmdTdG9yZVZv
bGF0aWxlSW1tZWRpYXRlbHkoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkK
K3sKKyAgICBib29sIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSA9IHRydWU7
CisKKyAgICBpZiAoIWJhY2tpbmdTdG9yZS5zZXRCdWZmZXJWb2xhdGlsaXR5KFJlbW90ZUxheWVy
QmFja2luZ1N0b3JlOjpCdWZmZXJUeXBlOjpTZWNvbmRhcnlCYWNrLCB0cnVlKSkKKyAgICAgICAg
c3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxlID0gZmFsc2U7CisgICAgaWYgKCFi
YWNraW5nU3RvcmUuc2V0QnVmZmVyVm9sYXRpbGl0eShSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6
QnVmZmVyVHlwZTo6QmFjaywgdHJ1ZSkpCisgICAgICAgIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5n
U3RvcmVWb2xhdGlsZSA9IGZhbHNlOworICAgIGlmICghYmFja2luZ1N0b3JlLmxheWVyKCktPnN1
cGVybGF5ZXIoKSkgeworICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS5zZXRCdWZmZXJWb2xhdGls
aXR5KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpCdWZmZXJUeXBlOjpGcm9udCwgdHJ1ZSkpCisg
ICAgICAgICAgICBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGUgPSBmYWxzZTsK
KyAgICB9CiAKLSAgICAgICAgICAgIGlmIChub3cgLSBiYWNraW5nU3RvcmUtPmxhc3REaXNwbGF5
VGltZSgpID49IHB1cmdlYWJsZVNlY29uZGFyeUJhY2tpbmdTdG9yZUFnZVRocmVzaG9sZCkKLSAg
ICAgICAgICAgICAgICBiYWNraW5nU3RvcmUtPnNldEJ1ZmZlclZvbGF0aWxpdHkoUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmU6OkJ1ZmZlclR5cGU6OlNlY29uZGFyeUJhY2ssIHRydWUpOworICAgIHJl
dHVybiBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGU7Cit9CiAKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9CitzdGF0aWMgYm9vbCBtYXJrQmFja2luZ1N0b3JlVm9s
YXRpbGUoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgc3RkOjpjaHJvbm86
OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBub3cpCit7CisgICAgaWYgKG5vdyAtIGJhY2tpbmdT
dG9yZS5sYXN0RGlzcGxheVRpbWUoKSA8IHZvbGF0aWxlQmFja2luZ1N0b3JlQWdlVGhyZXNob2xk
KSB7CisgICAgICAgIGlmIChub3cgLSBiYWNraW5nU3RvcmUubGFzdERpc3BsYXlUaW1lKCkgPj0g
dm9sYXRpbGVTZWNvbmRhcnlCYWNraW5nU3RvcmVBZ2VUaHJlc2hvbGQpCisgICAgICAgICAgICBi
YWNraW5nU3RvcmUuc2V0QnVmZmVyVm9sYXRpbGl0eShSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6
QnVmZmVyVHlwZTo6U2Vjb25kYXJ5QmFjaywgdHJ1ZSk7CiAKLSAgICAgICAgLy8gRklYTUU6IElm
IHRoZSBsYXllciBpcyB1bnBhcmVudGVkLCB3ZSBzaG91bGQgbWFrZSBhbGwgYnVmZmVycyB2b2xh
dGlsZS4KLSAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUtPnNldEJ1ZmZlclZvbGF0aWxpdHkoUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmU6OkJ1ZmZlclR5cGU6OlNlY29uZGFyeUJhY2ssIHRydWUpKQot
ICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVB1cmdlYWJsZSA9IGZhbHNl
OwotICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS0+c2V0QnVmZmVyVm9sYXRpbGl0eShSZW1vdGVM
YXllckJhY2tpbmdTdG9yZTo6QnVmZmVyVHlwZTo6QmFjaywgdHJ1ZSkpCi0gICAgICAgICAgICBz
dWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlUHVyZ2VhYmxlID0gZmFsc2U7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CisgICAgCisgICAgbWFya0JhY2tpbmdTdG9yZVZvbGF0aWxlSW1t
ZWRpYXRlbHkoYmFja2luZ1N0b3JlKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmJhY2tpbmdTdG9yZUxheWVyV2Fz
VW5wYXJlbnRlZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQoreworICAg
IEFTU0VSVChiYWNraW5nU3RvcmUtPmxheWVyKCkpOworCisgICAgaWYgKG1fdW5wYXJlbnRlZEJh
Y2tpbmdTdG9yZS5jb250YWlucyhiYWNraW5nU3RvcmUpKQorICAgICAgICByZXR1cm47CisgICAg
bV91bnBhcmVudGVkQmFja2luZ1N0b3JlLmFkZChiYWNraW5nU3RvcmUpOworICAgIG1fbGl2ZUJh
Y2tpbmdTdG9yZS5yZW1vdmUoYmFja2luZ1N0b3JlKTsKKworICAgIC8vIElmIGEgbGF5ZXIgd2l0
aCBiYWNraW5nIHN0b3JlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZSwgbWFyayBpdCBhcyBoYXZp
bmcgY2hhbmdlZCBiYWNraW5nIHN0b3JlLCBzbyB0aGF0CisgICAgLy8gb24gdGhlIGNvbW1pdCB3
aGljaCByZXR1cm5zIGl0IHRvIHRoZSB0cmVlLCB3ZSBzZXJpYWxpemUgdGhlIGJhY2tpbmcgc3Rv
cmUgKGRlc3BpdGUgcG9zc2libHkgbm90IHBhaW50aW5nKS4KKyAgICBiYWNraW5nU3RvcmUtPmxh
eWVyKCktPnByb3BlcnRpZXMoKS5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb246OkJhY2tpbmdTdG9yZUNoYW5nZWQpOworCisgICAgLy8gTm90IGFsbCBvZiB0
aGVzZSB3aWxsIHN1Y2NlZWQsIGJlY2F1c2UgdGhlIHVucGFyZW50aW5nIGNvbW1pdCBoYXNuJ3Qg
bWFkZSBpdCB0byB0aGUgVUkgcHJvY2VzcyB5ZXQuCisgICAgLy8gVGhlIHZvbGF0aWxpdHkgdGlt
ZXIgd2lsbCBmaW5pc2ggbWFya2luZyB0aGUgcmVtYWluaW5nIGJ1ZmZlcnMgbGF0ZXIuCisgICAg
bWFya0JhY2tpbmdTdG9yZVZvbGF0aWxlSW1tZWRpYXRlbHkoKmJhY2tpbmdTdG9yZSk7Cit9CisK
K3ZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjp2b2xhdGlsaXR5VGltZXJG
aXJlZChXZWJDb3JlOjpUaW1lcjxSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24+JikK
K3sKKyAgICBib29sIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSA9IHRydWU7
CisKKyAgICBhdXRvIG5vdyA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOworICAg
IGZvciAoY29uc3QgYXV0byYgYmFja2luZ1N0b3JlIDogbV9saXZlQmFja2luZ1N0b3JlKQorICAg
ICAgICBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGUgfD0gbWFya0JhY2tpbmdT
dG9yZVZvbGF0aWxlKCpiYWNraW5nU3RvcmUsIG5vdyk7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGJhY2tpbmdTdG9yZSA6IG1fdW5wYXJlbnRlZEJhY2tpbmdTdG9yZSkKKyAgICAgICAgc3VjY2Vz
c2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxlIHw9IG1hcmtCYWNraW5nU3RvcmVWb2xhdGls
ZUltbWVkaWF0ZWx5KCpiYWNraW5nU3RvcmUpOwogCi0gICAgaWYgKCFoYWRSZWNlbnRseVBhaW50
ZWRCYWNraW5nU3RvcmUgJiYgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVB1cmdlYWJsZSkK
LSAgICAgICAgbV9wdXJnZWFiaWxpdHlUaW1lci5zdG9wKCk7CisgICAgaWYgKHN1Y2Nlc3NmdWxs
eU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSkKKyAgICAgICAgbV92b2xhdGlsaXR5VGltZXIuc3Rv
cCgpOwogfQogCi12b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6c2NoZWR1
bGVQdXJnZWFiaWxpdHlUaW1lcigpCit2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVj
dGlvbjo6c2NoZWR1bGVWb2xhdGlsaXR5VGltZXIoKQogewotICAgIGlmIChtX3B1cmdlYWJpbGl0
eVRpbWVyLmlzQWN0aXZlKCkpCisgICAgaWYgKG1fdm9sYXRpbGl0eVRpbWVyLmlzQWN0aXZlKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHVyZ2VhYmlsaXR5VGltZXIuc3RhcnRSZXBlYXRp
bmcocHVyZ2VhYmlsaXR5VGltZXJJbnRlcnZhbCk7CisgICAgbV92b2xhdGlsaXR5VGltZXIuc3Rh
cnRSZXBlYXRpbmcodm9sYXRpbGl0eVRpbWVySW50ZXJ2YWwpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3Rl
TGF5ZXJUcmVlSG9zdC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5
ZXJUcmVlSG9zdC5tbQppbmRleCA4MjM5YTU1Li43ZDcwZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZUhvc3QubW0KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVIb3N0Lm1tCkBAIC05Niw2ICs5
NiwxNSBAQCBib29sIFJlbW90ZUxheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVyVHJlZShjb25zdCBS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYgdHJhbgogICAgIGZvciAoYXV0byYgZGVzdHJveWVk
TGF5ZXIgOiB0cmFuc2FjdGlvbi5kZXN0cm95ZWRMYXllcnMoKSkKICAgICAgICAgbGF5ZXJXaWxs
QmVSZW1vdmVkKGRlc3Ryb3llZExheWVyKTsKIAorICAgIC8vIERyb3AgdGhlIGNvbnRlbnRzIG9m
IGFueSBsYXllcnMgd2hpY2ggd2VyZSB1bnBhcmVudGVkOyB0aGUgV2ViIHByb2Nlc3Mgd2lsbCBy
ZS1zZW5kCisgICAgLy8gdGhlIGJhY2tpbmcgc3RvcmUgaW4gdGhlIGNvbW1pdCB0aGF0IHJlcGFy
ZW50cyB0aGVtLgorICAgIGZvciAoYXV0byYgbGF5ZXJPclZpZXcgOiBtX2xheWVycy52YWx1ZXMo
KSkgeworICAgICAgICBDQUxheWVyICpsYXllciA9IGFzTGF5ZXIobGF5ZXJPclZpZXcuZ2V0KCkp
OworICAgICAgICBpZiAobGF5ZXIuc3VwZXJsYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBsYXllci5jb250ZW50cyA9IG51bGxwdHI7CisgICAgfQorCiAgICAgcmV0dXJuIHJv
b3RMYXllckNoYW5nZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKaW5kZXggNGRk
NTI4NC4uZWE5ZjQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKQEAgLTUwLDYgKzUw
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBiYWNraW5nU3RvcmVXYXNDcmVhdGVkKFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlKik7CiAgICAgdm9pZCBiYWNraW5nU3RvcmVXaWxsQmVEZXN0cm95ZWQo
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqKTsKKyAgICB2b2lkIGJhY2tpbmdTdG9yZVdpbGxCZURp
c3BsYXllZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSopOwogCiAgICAgTGF5ZXJIb3N0aW5nTW9k
ZSBsYXllckhvc3RpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQYWdlLT5sYXllckhvc3Rp
bmdNb2RlKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tCmluZGV4IDRjYjEwYTku
LmNmMjllYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0KQEAgLTg2LDYgKzg2LDEx
IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6YmFja2luZ1N0b3JlV2lsbEJlRGVzdHJv
eWVkKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlCiAgICAgbV9iYWNraW5nU3RvcmVDb2xsZWN0aW9u
LmJhY2tpbmdTdG9yZVdpbGxCZURlc3Ryb3llZChiYWNraW5nU3RvcmUpOwogfQogCit2b2lkIFJl
bW90ZUxheWVyVHJlZUNvbnRleHQ6OmJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXllZChSZW1vdGVM
YXllckJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQoreworICAgIG1fYmFja2luZ1N0b3JlQ29s
bGVjdGlvbi5iYWNraW5nU3RvcmVXaWxsQmVEaXNwbGF5ZWQoYmFja2luZ1N0b3JlKTsKK30KKwog
c3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmNy
ZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCYgY2xpZW50KQogewogICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdyYXBoaWNzTGF5ZXJDQVJlbW90ZT4oY2xpZW50LCB0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCmluZGV4IDlmNWY3YzEuLjg3
OGNmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQpAQCAtMjgzLDgg
KzI4MywxOSBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpmbHVzaExheWVycygp
CiAgICAgICAgIGxheWVyLT5kaWRDb21taXQoKTsKICAgICB9CiAKKyAgICBSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZUNvbGxlY3Rpb24mIGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24gPSBtX3JlbW90ZUxh
eWVyVHJlZUNvbnRleHQtPmJhY2tpbmdTdG9yZUNvbGxlY3Rpb24oKTsKKworICAgIFZlY3RvcjxS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZSo+IHVucGFyZW50ZWRCYWNraW5nU3RvcmU7CisgICAgZm9y
IChhdXRvJiBiYWNraW5nU3RvcmUgOiBiYWNraW5nU3RvcmVDb2xsZWN0aW9uLmxpdmVCYWNraW5n
U3RvcmUoKSkgeworICAgICAgICBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqIGxheWVyID0gYmFja2lu
Z1N0b3JlLT5sYXllcigpOworICAgICAgICBpZiAobGF5ZXIgJiYgIWxheWVyLT5zdXBlcmxheWVy
KCkpCisgICAgICAgICAgICB1bnBhcmVudGVkQmFja2luZ1N0b3JlLmFwcGVuZChiYWNraW5nU3Rv
cmUpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGJhY2tpbmdTdG9yZSA6IHVucGFyZW50ZWRCYWNr
aW5nU3RvcmUpCisgICAgICAgIGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uYmFja2luZ1N0b3JlTGF5
ZXJXYXNVbnBhcmVudGVkKGJhY2tpbmdTdG9yZSk7CisKICAgICBpZiAoaGFkQW55Q2hhbmdlZEJh
Y2tpbmdTdG9yZSkKLSAgICAgICAgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0LT5iYWNraW5nU3Rv
cmVDb2xsZWN0aW9uKCkuc2NoZWR1bGVQdXJnZWFiaWxpdHlUaW1lcigpOworICAgICAgICBiYWNr
aW5nU3RvcmVDb2xsZWN0aW9uLnNjaGVkdWxlVm9sYXRpbGl0eVRpbWVyKCk7CiAKICAgICBSZWZQ
dHI8QmFja2luZ1N0b3JlRmx1c2hlcj4gYmFja2luZ1N0b3JlRmx1c2hlciA9IEJhY2tpbmdTdG9y
ZUZsdXNoZXI6OmNyZWF0ZShXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLCBzdGQ6Om1vdmUoY29tbWl0RW5jb2RlciksIHN0ZDo6bW92ZShjb250ZXh0c1RvRmx1
c2gpKTsKICAgICBtX3BlbmRpbmdCYWNraW5nU3RvcmVGbHVzaGVyID0gYmFja2luZ1N0b3JlRmx1
c2hlcjsK
</data>
<flag name="review"
          id="256214"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231783</attachid>
            <date>2014-05-20 12:27:35 -0700</date>
            <delta_ts>2014-05-22 00:24:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>agg.diff</filename>
            <type>text/plain</type>
            <size>23037</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZmE1NWI2Li4wYjQxNGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTQtMDUtMjAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW3drMl0gRW5hYmxlIGFnZ3Jlc3NpdmUgdGlsZSByZXRlbnRpb24gYW5kIHB1cmdl
YWJsZSBmcm9udCBidWZmZXJzIG9uIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDIwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNjUyMTcz
Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBv
b2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SU9TdXJmYWNlUG9vbDo6d2lsbEFkZFN1cmZhY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKElPU3Vy
ZmFjZTo6cmVsZWFzZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIFJlbmFtZSBjbGVhckdyYXBo
aWNzQ29udGV4dCB0byByZWxlYXNlR3JhcGhpY3NDb250ZXh0IGZvciBjbGFyaXR5LgorCiAyMDE0
LTA1LTE5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFNjcm9sbGluZyBwYWdlcyB3aXRoIGxhcmdlIFRpbGVkQmFja2luZyBjb250ZW50IGxheWVycyBj
cmVhdGVzIHdheSB0b28gbWFueSB0aWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA3OTc1MTM2
Li4yNWYxYjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMzEzMCw5ICszMTMwLDkgQEAgX19a
TjdXZWJDb3JlMTNJT1N1cmZhY2VQb29sMTFzZXRQb29sU2l6ZUVtCiBfX1pON1dlYkNvcmU5SU9T
dXJmYWNlMTFjcmVhdGVJbWFnZUV2CiBfX1pON1dlYkNvcmU5SU9TdXJmYWNlMTNzZXRJc1ZvbGF0
aWxlRWIKIF9fWk43V2ViQ29yZTlJT1N1cmZhY2UxOGNyZWF0ZUZyb21NYWNoUG9ydEVqTlNfMTBD
b2xvclNwYWNlRQotX19aTjdXZWJDb3JlOUlPU3VyZmFjZTIwY2xlYXJHcmFwaGljc0NvbnRleHRF
dgogX19aTjdXZWJDb3JlOUlPU3VyZmFjZTIxZW5zdXJlR3JhcGhpY3NDb250ZXh0RXYKIF9fWk43
V2ViQ29yZTlJT1N1cmZhY2UyMWVuc3VyZVBsYXRmb3JtQ29udGV4dEV2CitfX1pON1dlYkNvcmU5
SU9TdXJmYWNlMjJyZWxlYXNlR3JhcGhpY3NDb250ZXh0RXYKIF9fWk43V2ViQ29yZTlJT1N1cmZh
Y2U2Y3JlYXRlRU5TXzdJbnRTaXplRU5TXzEwQ29sb3JTcGFjZUUKIF9fWk5LN1dlYkNvcmU5SU9T
dXJmYWNlMTRjcmVhdGVNYWNoUG9ydEV2CiBfX1pOSzdXZWJDb3JlOUlPU3VyZmFjZTdpc0luVXNl
RXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3Vy
ZmFjZVBvb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJm
YWNlUG9vbC5jcHAKaW5kZXggMDUyOWQ2OC4uMGM2MDlhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKQEAgLTgwLDcg
KzgwLDcgQEAgdm9pZCBJT1N1cmZhY2VQb29sOjp3aWxsQWRkU3VyZmFjZShJT1N1cmZhY2UqIHN1
cmZhY2UsIGJvb2wgaW5Vc2UpCiAgICAgQ2FjaGVkU3VyZmFjZURldGFpbHMmIGRldGFpbHMgPSBt
X3N1cmZhY2VEZXRhaWxzLmFkZChzdXJmYWNlLCBDYWNoZWRTdXJmYWNlRGV0YWlscygpKS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgZGV0YWlscy5yZXNldExhc3RVc2VUaW1lKCk7CiAKLSAgICBzdXJm
YWNlLT5jbGVhckdyYXBoaWNzQ29udGV4dCgpOworICAgIHN1cmZhY2UtPnJlbGVhc2VHcmFwaGlj
c0NvbnRleHQoKTsKIAogICAgIHNpemVfdCBzdXJmYWNlQnl0ZXMgPSBzdXJmYWNlLT50b3RhbEJ5
dGVzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLmgKaW5kZXggNGMzMWNhNS4uNTQwYTg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKQEAgLTc1LDcgKzc1LDcg
QEAgcHVibGljOgogCiAgICAgLy8gVGhlIGdyYXBoaWNzIGNvbnRleHQgY2FjaGVkIG9uIHRoZSBz
dXJmYWNlIGNvdW50cyBhcyBhICJ1c2VyIiwgc28gdG8gZ2V0CiAgICAgLy8gYW4gYWNjdXJhdGUg
cmVzdWx0IGZyb20gaXNJblVzZSgpLCBpdCBuZWVkcyB0byBiZSByZWxlYXNlZC4KLSAgICB2b2lk
IGNsZWFyR3JhcGhpY3NDb250ZXh0KCk7CisgICAgdm9pZCByZWxlYXNlR3JhcGhpY3NDb250ZXh0
KCk7CiAKIHByaXZhdGU6CiAgICAgSU9TdXJmYWNlKEludFNpemUsIENvbG9yU3BhY2UpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1t
CmluZGV4IDAxZmUwZWMuLmY2NjAxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KQEAgLTE5MSw3ICsxOTEsNyBAQCBib29s
IElPU3VyZmFjZTo6aXNJblVzZSgpIGNvbnN0CiAgICAgcmV0dXJuIElPU3VyZmFjZUlzSW5Vc2Uo
bV9zdXJmYWNlLmdldCgpKTsKIH0KIAotdm9pZCBJT1N1cmZhY2U6OmNsZWFyR3JhcGhpY3NDb250
ZXh0KCkKK3ZvaWQgSU9TdXJmYWNlOjpyZWxlYXNlR3JhcGhpY3NDb250ZXh0KCkKIHsKICAgICBt
X2dyYXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAgICAgbV9jZ0NvbnRleHQgPSBudWxscHRyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCmluZGV4IDAxOTAzZWQuLmFmYWRjZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBA
QAorMjAxNC0wNS0yMCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbd2syXSBFbmFibGUgYWdncmVzc2l2ZSB0aWxlIHJldGVudGlvbiBhbmQgcHVyZ2Vh
YmxlIGZyb250IGJ1ZmZlcnMgb24gaU9TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzMwMjAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE2NTIxNzM2
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hh
cmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaDoKKyAgICAgICAgVHVybiBvbiBhZ2dyZXNzaXZlIHRp
bGUgcmV0ZW50aW9uIGJ5IGRlZmF1bHQgb24gaU9TLgorCisgICAgICAgICogU2hhcmVkL21hYy9S
ZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmU6OmRpc3BsYXkpOgorICAgICAgICBMZXQgdGhlIGNvbnRleHQga25vdyB3aGVu
ZXZlciBhIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlIGlzIGRpc3BsYXllZCwgc28gdGhhdAorICAg
ICAgICBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24gY2FuIChpZiBuZWVkZWQpIG5v
dGUgdGhhdCB0aGUgYmFja2luZyBzdG9yZQorICAgICAgICBpcyBhY3RpdmUgb25jZSBhZ2FpbiAo
YmVjYXVzZSB3ZSBvbmx5IGRpc3BsYXkgcGFyZW50ZWQgYmFja2luZyBzdG9yZSkuCisKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OnNldEJ1ZmZlclZvbGF0aWxpdHkp
OgorICAgICAgICBFbnN1cmUgdGhhdCB3ZSBuZXZlciBoYXZlIGxpdmUgY29udGV4dHMgYXR0YWNo
ZWQgdG8gYW55IGJ1ZmZlcnMgd2hlbgorICAgICAgICBtYXJraW5nIHRoZW0gdm9sYXRpbGUsIGJl
Y2F1c2UgY2hlY2tpbmcgaXNJblVzZSgpIHdpdGggbGl2ZSBjb250ZXh0cyBpcyBmdXRpbGUuCisK
KyAgICAgICAgKiBTaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5o
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246Omxp
dmVCYWNraW5nU3RvcmUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmVDb2xsZWN0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllckJhY2tpbmdT
dG9yZUNvbGxlY3Rpb246OlJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6YmFja2luZ1N0
b3JlV2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmVDb2xsZWN0aW9uOjpiYWNraW5nU3RvcmVXaWxsQmVEaXNwbGF5ZWQpOgorICAgICAgICAo
V2ViS2l0OjptYXJrQmFja2luZ1N0b3JlVm9sYXRpbGVJbW1lZGlhdGVseSk6CisgICAgICAgIChX
ZWJLaXQ6Om1hcmtCYWNraW5nU3RvcmVWb2xhdGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6YmFja2luZ1N0b3JlTGF5ZXJXYXNVbnBhcmVu
dGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9u
Ojp2b2xhdGlsaXR5VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFj
a2luZ1N0b3JlQ29sbGVjdGlvbjo6c2NoZWR1bGVWb2xhdGlsaXR5VGltZXIpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OnB1cmdlYWJpbGl0eVRp
bWVyRmlyZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllckJhY2tpbmdT
dG9yZUNvbGxlY3Rpb246OnNjaGVkdWxlUHVyZ2VhYmlsaXR5VGltZXIpOiBEZWxldGVkLgorICAg
ICAgICBSZW5hbWUgcHVyZ2VhYmxlLT52b2xhdGlsZSBmb3IgYWNjdXJhY3kuCisgICAgICAgIEtl
ZXAgdHJhY2sgb2YgdHdvIHNldHMgb2YgYmFja2luZyBzdG9yZTogdGhvc2Ugd2hpY2ggYXJlIGFj
dGl2ZS9wYXJlbnRlZCwgYW5kCisgICAgICAgIHRob3NlIHdoaWNoIGFyZSBub3QuIEJhY2tpbmcg
c3RvcmUgaXMgbW92ZWQgdG8gdGhlIGluYWN0aXZlIHNldCBhZnRlciBidWlsZGluZworICAgICAg
ICB0aGUgdHJhbnNhY3Rpb24gaW4gd2hpY2ggaXRzIG93bmluZyBsYXllciBpcyB1bnBhcmVudGVk
LgorICAgICAgICBXaGVuIGJhY2tpbmcgc3RvcmUgaXMgdW5wYXJlbnRlZCwgdHJ5IHRvIG1hcmsg
aXQgdm9sYXRpbGUgaW1tZWRpYXRlbHkuIEFsc28sCisgICAgICAgIG1hcmsgdGhlIGJhY2tpbmcg
c3RvcmUgcHJvcGVydHkgYXMgZGlydHkgb24gdGhlIG93bmluZyBsYXllciBzbyB0aGF0IHdoZW4K
KyAgICAgICAgc2FpZCBsYXllciBpcyByZXBhcmVudGVkLCB3ZSBlbmNvZGUgdGhlIGJhY2tpbmcg
c3RvcmUgaW4gdGhlIGNvbW1pdCB0aGF0IHJlcGFyZW50cyBpdCwKKyAgICAgICAgYXMgdGhlIFVJ
IHByb2Nlc3Mgd2lsbCB0aHJvdyBhd2F5IGl0cyByZWZlcmVuY2UgdG8gdGhlIGJhY2tpbmcgc3Rv
cmUgd2hlbgorICAgICAgICB0aGUgbGF5ZXIgaXMgdW5wYXJlbnRlZC4KKyAgICAgICAgTWFyayB0
aGUgZnJvbnQgYnVmZmVycyBvZiB1bnBhcmVudGVkIGxheWVycyBhcyB2b2xhdGlsZSwgaW4gYWRk
aXRpb24gdG8gdGhlIG90aGVycy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5
ZXJUcmVlSG9zdC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlSG9zdDo6dXBk
YXRlTGF5ZXJUcmVlKToKKyAgICAgICAgQWZ0ZXIgY29tbWl0dGluZyBhIGxheWVyIHRyZWUgdXBk
YXRlLCBsb29rIHRocm91Z2ggYWxsIG9mIG91ciBsYXllcnMsIGFuZAorICAgICAgICBkcm9wIHRo
ZSBjb250ZW50cyBvbiBhbnkgdW5wYXJlbnRlZCBsYXllcnMuIE90aGVyd2lzZSwgdGhlIFVJIHBy
b2Nlc3Mgd291bGQKKyAgICAgICAgaG9sZCBhICd1c2UnIG9uIHRoZSBJT1N1cmZhY2UsIGFuZCBw
cmV2ZW50IHRoZSBXZWIgcHJvY2VzcyBmcm9tIG1hcmtpbmcgaXQgdm9sYXRpbGUuCisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW06
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmJhY2tpbmdTdG9yZVdp
bGxCZURpc3BsYXllZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKToKKyAgICAgICAgSW5mb3JtIFJlbW90ZUxheWVyQmFj
a2luZ1N0b3JlQ29sbGVjdGlvbiBvZiBhbnkgYmFja2luZyBzdG9yZSB3aG9zZSBvd25pbmcgbGF5
ZXIKKyAgICAgICAgd2FzIHVucGFyZW50ZWQgaW4gdGhpcyBjb21taXQuCisKIDIwMTQtMDUtMTkg
IEdhdmluIEJhcnJhY2xvdWdoICA8YmFyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
S2l0Mi9pT1M6IHBhcmVudGVkIHZpZXcgc2hvdWxkIGJlIGNvbnNpZGVyZWQgaGlkZGVuIGlmIGFw
cCBpcyBiYWNrZ3JvdW5kZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQ
cmVmZXJlbmNlc1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNT
dG9yZS5oCmluZGV4IGUzMGMyNjUuLmRjODI5NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYlByZWZlcmVuY2VzU3RvcmUuaApAQCAtNzUsNiArNzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKICNkZWZpbmUgREVGQVVMVF9NRURJQV9QTEFZQkFDS19BTExPV1NfSU5MSU5FIGZhbHNlCiAj
ZGVmaW5lIERFRkFVTFRfTUVESUFfUExBWUJBQ0tfUkVRVUlSRVNfVVNFUl9HRVNUVVJFIHRydWUK
ICNkZWZpbmUgREVGQVVMVF9URU1QT1JBUllfVElMRV9DT0hPUlRfUkVURU5USU9OX0VOQUJMRUQg
ZmFsc2UKKyNkZWZpbmUgREVGQVVMVF9BR0dSRVNTSVZFX1RJTEVfUkVURU5USU9OX0VOQUJMRUQg
dHJ1ZQogI2Vsc2UKICNkZWZpbmUgREVGQVVMVF9GUkFNRV9GTEFUVEVOSU5HX0VOQUJMRUQgZmFs
c2UKICNkZWZpbmUgREVGQVVMVF9TSE9VTERfUFJJTlRfQkFDS0dST1VORFMgZmFsc2UKQEAgLTg2
LDYgKzg3LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAjZGVmaW5lIERFRkFVTFRfTUVESUFfUExB
WUJBQ0tfQUxMT1dTX0lOTElORSB0cnVlCiAjZGVmaW5lIERFRkFVTFRfTUVESUFfUExBWUJBQ0tf
UkVRVUlSRVNfVVNFUl9HRVNUVVJFIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfVEVNUE9SQVJZX1RJ
TEVfQ09IT1JUX1JFVEVOVElPTl9FTkFCTEVEIHRydWUKKyNkZWZpbmUgREVGQVVMVF9BR0dSRVNT
SVZFX1RJTEVfUkVURU5USU9OX0VOQUJMRUQgZmFsc2UKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
SU9TKSAmJiAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKQEAgLTE4Nyw3ICsxODksNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKICAgICBtYWNybyhQREZQbHVnaW5FbmFibGVkLCBwZGZQbHVnaW5FbmFi
bGVkLCBCb29sLCBib29sLCBERUZBVUxUX1BERlBMVUdJTl9FTkFCTEVEKSBcCiAgICAgbWFjcm8o
VXNlc0VuY29kaW5nRGV0ZWN0b3IsIHVzZXNFbmNvZGluZ0RldGVjdG9yLCBCb29sLCBib29sLCBm
YWxzZSkgXAogICAgIG1hY3JvKFRleHRBdXRvc2l6aW5nRW5hYmxlZCwgdGV4dEF1dG9zaXppbmdF
bmFibGVkLCBCb29sLCBib29sLCBmYWxzZSkgXAotICAgIG1hY3JvKEFnZ3Jlc3NpdmVUaWxlUmV0
ZW50aW9uRW5hYmxlZCwgYWdncmVzc2l2ZVRpbGVSZXRlbnRpb25FbmFibGVkLCBCb29sLCBib29s
LCBmYWxzZSkgXAorICAgIG1hY3JvKEFnZ3Jlc3NpdmVUaWxlUmV0ZW50aW9uRW5hYmxlZCwgYWdn
cmVzc2l2ZVRpbGVSZXRlbnRpb25FbmFibGVkLCBCb29sLCBib29sLCBERUZBVUxUX0FHR1JFU1NJ
VkVfVElMRV9SRVRFTlRJT05fRU5BQkxFRCkgXAogICAgIG1hY3JvKFRlbXBvcmFyeVRpbGVDb2hv
cnRSZXRlbnRpb25FbmFibGVkLCB0ZW1wb3JhcnlUaWxlQ29ob3J0UmV0ZW50aW9uRW5hYmxlZCwg
Qm9vbCwgYm9vbCwgREVGQVVMVF9URU1QT1JBUllfVElMRV9DT0hPUlRfUkVURU5USU9OX0VOQUJM
RUQpIFwKICAgICBtYWNybyhRVEtpdEVuYWJsZWQsIGlzUVRLaXRFbmFibGVkLCBCb29sLCBib29s
LCB0cnVlKSBcCiAgICAgbWFjcm8oTG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJs
ZWQsIGxvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkLCBCb29sLCBib29sLCBm
YWxzZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXll
ckJhY2tpbmdTdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUubW0KaW5kZXggNmMwZWE0OS4uZWI3NGFiNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCkBAIC0yMDEs
NiArMjAxLDkgQEAgYm9vbCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZGlzcGxheSgpCiAKICAg
ICBtX2xhc3REaXNwbGF5VGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwog
CisgICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgbV9jb250ZXh0LT5iYWNraW5nU3RvcmVXaWxs
QmVEaXNwbGF5ZWQodGhpcyk7CisKICAgICAvLyBNYWtlIHRoZSBwcmV2aW91cyBmcm9udCBidWZm
ZXIgbm9uLXZvbGF0aWxlIGVhcmx5LCBzbyB0aGF0IHdlIGNhbiBkaXJ0eSB0aGUgd2hvbGUgbGF5
ZXIgaWYgaXQgY29tZXMgYmFjayBlbXB0eS4KICAgICBzZXRCdWZmZXJWb2xhdGlsaXR5KEJ1ZmZl
clR5cGU6OkZyb250LCBmYWxzZSk7CiAKQEAgLTIzNiw3ICsyMzksNyBAQCBib29sIFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlOjpkaXNwbGF5KCkKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwg
LWV4cGFuZGVkU2NhbGVkU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIGRyYXdJbkNvbnRleHQoY29u
dGV4dCwgYmFja0ltYWdlLmdldCgpKTsKIAotICAgICAgICBtX2Zyb250QnVmZmVyLnN1cmZhY2Ut
PmNsZWFyR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIG1fZnJvbnRCdWZmZXIuc3VyZmFjZS0+
cmVsZWFzZUdyYXBoaWNzQ29udGV4dCgpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTM4Miw2ICszODUsOCBAQCBib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpzZXRCdWZm
ZXJWb2xhdGlsaXR5KEJ1ZmZlclR5cGUgdHlwZSwgYm9vbCBpc1ZvbGF0aQogICAgIHN3aXRjaCh0
eXBlKSB7CiAgICAgY2FzZSBCdWZmZXJUeXBlOjpGcm9udDoKICAgICAgICAgaWYgKG1fZnJvbnRC
dWZmZXIuc3VyZmFjZSAmJiBtX2Zyb250QnVmZmVyLmlzVm9sYXRpbGUgIT0gaXNWb2xhdGlsZSkg
eworICAgICAgICAgICAgaWYgKGlzVm9sYXRpbGUpCisgICAgICAgICAgICAgICAgbV9mcm9udEJ1
ZmZlci5zdXJmYWNlLT5yZWxlYXNlR3JhcGhpY3NDb250ZXh0KCk7CiAgICAgICAgICAgICBpZiAo
IWlzVm9sYXRpbGUgfHwgIW1fZnJvbnRCdWZmZXIuc3VyZmFjZS0+aXNJblVzZSgpKSB7CiAgICAg
ICAgICAgICAgICAgSU9TdXJmYWNlOjpTdXJmYWNlU3RhdGUgcHJldmlvdXNTdGF0ZSA9IG1fZnJv
bnRCdWZmZXIuc3VyZmFjZS0+c2V0SXNWb2xhdGlsZShpc1ZvbGF0aWxlKTsKICAgICAgICAgICAg
ICAgICBtX2Zyb250QnVmZmVyLmlzVm9sYXRpbGUgPSBpc1ZvbGF0aWxlOwpAQCAtMzk1LDYgKzQw
MCw4IEBAIGJvb2wgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OnNldEJ1ZmZlclZvbGF0aWxpdHko
QnVmZmVyVHlwZSB0eXBlLCBib29sIGlzVm9sYXRpCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
QnVmZmVyVHlwZTo6QmFjazoKICAgICAgICAgaWYgKG1fYmFja0J1ZmZlci5zdXJmYWNlICYmIG1f
YmFja0J1ZmZlci5pc1ZvbGF0aWxlICE9IGlzVm9sYXRpbGUpIHsKKyAgICAgICAgICAgIGlmIChp
c1ZvbGF0aWxlKQorICAgICAgICAgICAgICAgIG1fYmFja0J1ZmZlci5zdXJmYWNlLT5yZWxlYXNl
R3JhcGhpY3NDb250ZXh0KCk7CiAgICAgICAgICAgICBpZiAoIWlzVm9sYXRpbGUgfHwgIW1fYmFj
a0J1ZmZlci5zdXJmYWNlLT5pc0luVXNlKCkpIHsKICAgICAgICAgICAgICAgICBtX2JhY2tCdWZm
ZXIuc3VyZmFjZS0+c2V0SXNWb2xhdGlsZShpc1ZvbGF0aWxlKTsKICAgICAgICAgICAgICAgICBt
X2JhY2tCdWZmZXIuaXNWb2xhdGlsZSA9IGlzVm9sYXRpbGU7CkBAIC00MDQsNiArNDExLDggQEAg
Ym9vbCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6c2V0QnVmZmVyVm9sYXRpbGl0eShCdWZmZXJU
eXBlIHR5cGUsIGJvb2wgaXNWb2xhdGkKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBCdWZmZXJU
eXBlOjpTZWNvbmRhcnlCYWNrOgogICAgICAgICBpZiAobV9zZWNvbmRhcnlCYWNrQnVmZmVyLnN1
cmZhY2UgJiYgbV9zZWNvbmRhcnlCYWNrQnVmZmVyLmlzVm9sYXRpbGUgIT0gaXNWb2xhdGlsZSkg
eworICAgICAgICAgICAgaWYgKGlzVm9sYXRpbGUpCisgICAgICAgICAgICAgICAgbV9zZWNvbmRh
cnlCYWNrQnVmZmVyLnN1cmZhY2UtPnJlbGVhc2VHcmFwaGljc0NvbnRleHQoKTsKICAgICAgICAg
ICAgIGlmICghaXNWb2xhdGlsZSB8fCAhbV9zZWNvbmRhcnlCYWNrQnVmZmVyLnN1cmZhY2UtPmlz
SW5Vc2UoKSkgewogICAgICAgICAgICAgICAgIG1fc2Vjb25kYXJ5QmFja0J1ZmZlci5zdXJmYWNl
LT5zZXRJc1ZvbGF0aWxlKGlzVm9sYXRpbGUpOwogICAgICAgICAgICAgICAgIG1fc2Vjb25kYXJ5
QmFja0J1ZmZlci5pc1ZvbGF0aWxlID0gaXNWb2xhdGlsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlv
bi5oCmluZGV4IDNiOGVlNzcuLmY2ZGFkN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaApA
QCAtNDUsMTcgKzQ1LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGJhY2tpbmdTdG9yZVdhc0NyZWF0
ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqKTsKICAgICB2b2lkIGJhY2tpbmdTdG9yZVdpbGxC
ZURlc3Ryb3llZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSopOwogCi0gICAgdm9pZCBwdXJnZWFi
aWxpdHlUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29s
bGVjdGlvbj4mKTsKKyAgICB2b2lkIGJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXllZChSZW1vdGVM
YXllckJhY2tpbmdTdG9yZSopOworICAgIHZvaWQgYmFja2luZ1N0b3JlTGF5ZXJXYXNVbnBhcmVu
dGVkKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlKik7CiAKLSAgICB2b2lkIHNjaGVkdWxlUHVyZ2Vh
YmlsaXR5VGltZXIoKTsKKyAgICB2b2lkIHZvbGF0aWxpdHlUaW1lckZpcmVkKFdlYkNvcmU6OlRp
bWVyPFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbj4mKTsKKworICAgIHZvaWQgc2No
ZWR1bGVWb2xhdGlsaXR5VGltZXIoKTsKKworICAgIGNvbnN0IEhhc2hTZXQ8UmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUqPiYgbGl2ZUJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZUJh
Y2tpbmdTdG9yZTsgfQogCiBwcml2YXRlOgogICAgIEhhc2hTZXQ8UmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmUqPiBtX2xpdmVCYWNraW5nU3RvcmU7Ci0KLSAgICB2b2lkIG1hcmtJbmFjdGl2ZUJhY2tp
bmdTdG9yZVB1cmdlYWJsZSgpOworICAgIEhhc2hTZXQ8UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUq
PiBtX3VucGFyZW50ZWRCYWNraW5nU3RvcmU7CiAKICAgICBSZW1vdGVMYXllclRyZWVDb250ZXh0
KiBtX2NvbnRleHQ7Ci0gICAgV2ViQ29yZTo6VGltZXI8UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVD
b2xsZWN0aW9uPiBtX3B1cmdlYWJpbGl0eVRpbWVyOworICAgIFdlYkNvcmU6OlRpbWVyPFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbj4gbV92b2xhdGlsaXR5VGltZXI7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ubW0KaW5kZXggMTRm
YTk5Mi4uODdhYjNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1v
dGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ubW0KQEAgLTMwLDE1ICsz
MCwxNSBAQAogI2ltcG9ydCAiUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaCIKICNpbXBvcnQgIlJl
bW90ZUxheWVyVHJlZUNvbnRleHQuaCIKIAotY29uc3Qgc3RkOjpjaHJvbm86OnNlY29uZHMgcHVy
Z2VhYmxlQmFja2luZ1N0b3JlQWdlVGhyZXNob2xkID0gMV9zOwotY29uc3Qgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcyBwdXJnZWFibGVTZWNvbmRhcnlCYWNraW5nU3RvcmVBZ2VUaHJlc2hvbGQg
PSAyMDBfbXM7Ci1jb25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHB1cmdlYWJpbGl0eVRp
bWVySW50ZXJ2YWwgPSAyMDBfbXM7Citjb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25kcyB2b2xhdGls
ZUJhY2tpbmdTdG9yZUFnZVRocmVzaG9sZCA9IDFfczsKK2NvbnN0IHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMgdm9sYXRpbGVTZWNvbmRhcnlCYWNraW5nU3RvcmVBZ2VUaHJlc2hvbGQgPSAyMDBf
bXM7Citjb25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHZvbGF0aWxpdHlUaW1lckludGVy
dmFsID0gMjAwX21zOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmVDb2xsZWN0aW9uOjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24oUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dCogY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAg
ICwgbV9wdXJnZWFiaWxpdHlUaW1lcih0aGlzLCAmUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xs
ZWN0aW9uOjpwdXJnZWFiaWxpdHlUaW1lckZpcmVkKQorICAgICwgbV92b2xhdGlsaXR5VGltZXIo
dGhpcywgJlJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6dm9sYXRpbGl0eVRpbWVy
RmlyZWQpCiB7CiB9CiAKQEAgLTUwLDQxICs1MCw4OCBAQCB2b2lkIFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlQ29sbGVjdGlvbjo6YmFja2luZ1N0b3JlV2FzQ3JlYXRlZChSZW1vdGVMYXllckJhY2tp
bgogdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmJhY2tpbmdTdG9yZVdp
bGxCZURlc3Ryb3llZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQogewog
ICAgIG1fbGl2ZUJhY2tpbmdTdG9yZS5yZW1vdmUoYmFja2luZ1N0b3JlKTsKKyAgICBtX3VucGFy
ZW50ZWRCYWNraW5nU3RvcmUucmVtb3ZlKGJhY2tpbmdTdG9yZSk7CiB9CiAKLXZvaWQgUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpwdXJnZWFiaWxpdHlUaW1lckZpcmVkKFdlYkNv
cmU6OlRpbWVyPFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbj4mKQordm9pZCBSZW1v
dGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXll
ZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQogewotICAgIGF1dG8gbm93
ID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7Ci0gICAgYm9vbCBoYWRSZWNlbnRs
eVBhaW50ZWRCYWNraW5nU3RvcmUgPSBmYWxzZTsKLSAgICBib29sIHN1Y2Nlc3NmdWxseU1hZGVC
YWNraW5nU3RvcmVQdXJnZWFibGUgPSB0cnVlOworICAgIGF1dG8gYmFja2luZ1N0b3JlSXRlciA9
IG1fdW5wYXJlbnRlZEJhY2tpbmdTdG9yZS5maW5kKGJhY2tpbmdTdG9yZSk7CisgICAgaWYgKGJh
Y2tpbmdTdG9yZUl0ZXIgPT0gbV91bnBhcmVudGVkQmFja2luZ1N0b3JlLmVuZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9saXZlQmFja2luZ1N0b3JlLmFkZChiYWNraW5nU3RvcmUpOworICAg
IG1fdW5wYXJlbnRlZEJhY2tpbmdTdG9yZS5yZW1vdmUoYmFja2luZ1N0b3JlSXRlcik7Cit9CisK
K3N0YXRpYyBib29sIG1hcmtCYWNraW5nU3RvcmVWb2xhdGlsZUltbWVkaWF0ZWx5KFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUpCit7CisgICAgYm9vbCBzdWNjZXNzZnVsbHlN
YWRlQmFja2luZ1N0b3JlVm9sYXRpbGUgPSB0cnVlOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBi
YWNraW5nU3RvcmUgOiBtX2xpdmVCYWNraW5nU3RvcmUpIHsKLSAgICAgICAgaWYgKG5vdyAtIGJh
Y2tpbmdTdG9yZS0+bGFzdERpc3BsYXlUaW1lKCkgPCBwdXJnZWFibGVCYWNraW5nU3RvcmVBZ2VU
aHJlc2hvbGQpIHsKLSAgICAgICAgICAgIGhhZFJlY2VudGx5UGFpbnRlZEJhY2tpbmdTdG9yZSA9
IHRydWU7CisgICAgaWYgKCFiYWNraW5nU3RvcmUuc2V0QnVmZmVyVm9sYXRpbGl0eShSZW1vdGVM
YXllckJhY2tpbmdTdG9yZTo6QnVmZmVyVHlwZTo6U2Vjb25kYXJ5QmFjaywgdHJ1ZSkpCisgICAg
ICAgIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSA9IGZhbHNlOwogCi0gICAg
ICAgICAgICBpZiAobm93IC0gYmFja2luZ1N0b3JlLT5sYXN0RGlzcGxheVRpbWUoKSA+PSBwdXJn
ZWFibGVTZWNvbmRhcnlCYWNraW5nU3RvcmVBZ2VUaHJlc2hvbGQpCi0gICAgICAgICAgICAgICAg
YmFja2luZ1N0b3JlLT5zZXRCdWZmZXJWb2xhdGlsaXR5KFJlbW90ZUxheWVyQmFja2luZ1N0b3Jl
OjpCdWZmZXJUeXBlOjpTZWNvbmRhcnlCYWNrLCB0cnVlKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9y
ZS5zZXRCdWZmZXJWb2xhdGlsaXR5KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpCdWZmZXJUeXBl
OjpCYWNrLCB0cnVlKSkKKyAgICAgICAgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0
aWxlID0gZmFsc2U7CiAKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisgICAgaWYg
KCFiYWNraW5nU3RvcmUubGF5ZXIoKS0+c3VwZXJsYXllcigpKSB7CisgICAgICAgIGlmICghYmFj
a2luZ1N0b3JlLnNldEJ1ZmZlclZvbGF0aWxpdHkoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OkJ1
ZmZlclR5cGU6OkZyb250LCB0cnVlKSkKKyAgICAgICAgICAgIHN1Y2Nlc3NmdWxseU1hZGVCYWNr
aW5nU3RvcmVWb2xhdGlsZSA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBzdWNjZXNzZnVs
bHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGU7Cit9CiAKLSAgICAgICAgLy8gRklYTUU6IElmIHRo
ZSBsYXllciBpcyB1bnBhcmVudGVkLCB3ZSBzaG91bGQgbWFrZSBhbGwgYnVmZmVycyB2b2xhdGls
ZS4KLSAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUtPnNldEJ1ZmZlclZvbGF0aWxpdHkoUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmU6OkJ1ZmZlclR5cGU6OlNlY29uZGFyeUJhY2ssIHRydWUpKQotICAg
ICAgICAgICAgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVB1cmdlYWJsZSA9IGZhbHNlOwot
ICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS0+c2V0QnVmZmVyVm9sYXRpbGl0eShSZW1vdGVMYXll
ckJhY2tpbmdTdG9yZTo6QnVmZmVyVHlwZTo6QmFjaywgdHJ1ZSkpCi0gICAgICAgICAgICBzdWNj
ZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlUHVyZ2VhYmxlID0gZmFsc2U7CitzdGF0aWMgYm9vbCBt
YXJrQmFja2luZ1N0b3JlVm9sYXRpbGUoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmIGJhY2tpbmdT
dG9yZSwgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBub3cpCit7CisgICAg
aWYgKG5vdyAtIGJhY2tpbmdTdG9yZS5sYXN0RGlzcGxheVRpbWUoKSA8IHZvbGF0aWxlQmFja2lu
Z1N0b3JlQWdlVGhyZXNob2xkKSB7CisgICAgICAgIGlmIChub3cgLSBiYWNraW5nU3RvcmUubGFz
dERpc3BsYXlUaW1lKCkgPj0gdm9sYXRpbGVTZWNvbmRhcnlCYWNraW5nU3RvcmVBZ2VUaHJlc2hv
bGQpCisgICAgICAgICAgICBiYWNraW5nU3RvcmUuc2V0QnVmZmVyVm9sYXRpbGl0eShSZW1vdGVM
YXllckJhY2tpbmdTdG9yZTo6QnVmZmVyVHlwZTo6U2Vjb25kYXJ5QmFjaywgdHJ1ZSk7CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICAKKyAgICByZXR1cm4gbWFya0JhY2tpbmdT
dG9yZVZvbGF0aWxlSW1tZWRpYXRlbHkoYmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBSZW1vdGVM
YXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmJhY2tpbmdTdG9yZUxheWVyV2FzVW5wYXJlbnRl
ZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQoreworICAgIEFTU0VSVChi
YWNraW5nU3RvcmUtPmxheWVyKCkpOworCisgICAgYXV0byBiYWNraW5nU3RvcmVJdGVyID0gbV9s
aXZlQmFja2luZ1N0b3JlLmZpbmQoYmFja2luZ1N0b3JlKTsKKyAgICBpZiAoYmFja2luZ1N0b3Jl
SXRlciA9PSBtX2xpdmVCYWNraW5nU3RvcmUuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBt
X3VucGFyZW50ZWRCYWNraW5nU3RvcmUuYWRkKGJhY2tpbmdTdG9yZSk7CisgICAgbV9saXZlQmFj
a2luZ1N0b3JlLnJlbW92ZShiYWNraW5nU3RvcmVJdGVyKTsKKworICAgIC8vIElmIGEgbGF5ZXIg
d2l0aCBiYWNraW5nIHN0b3JlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZSwgbWFyayBpdCBhcyBo
YXZpbmcgY2hhbmdlZCBiYWNraW5nIHN0b3JlLCBzbyB0aGF0CisgICAgLy8gb24gdGhlIGNvbW1p
dCB3aGljaCByZXR1cm5zIGl0IHRvIHRoZSB0cmVlLCB3ZSBzZXJpYWxpemUgdGhlIGJhY2tpbmcg
c3RvcmUgKGRlc3BpdGUgcG9zc2libHkgbm90IHBhaW50aW5nKS4KKyAgICBiYWNraW5nU3RvcmUt
PmxheWVyKCktPnByb3BlcnRpZXMoKS5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb246OkJhY2tpbmdTdG9yZUNoYW5nZWQpOworCisgICAgLy8gTm90IGFsbCBv
ZiB0aGVzZSB3aWxsIHN1Y2NlZWQsIGJlY2F1c2UgdGhlIHVucGFyZW50aW5nIGNvbW1pdCBoYXNu
J3QgbWFkZSBpdCB0byB0aGUgVUkgcHJvY2VzcyB5ZXQuCisgICAgLy8gVGhlIHZvbGF0aWxpdHkg
dGltZXIgd2lsbCBmaW5pc2ggbWFya2luZyB0aGUgcmVtYWluaW5nIGJ1ZmZlcnMgbGF0ZXIuCisg
ICAgbWFya0JhY2tpbmdTdG9yZVZvbGF0aWxlSW1tZWRpYXRlbHkoKmJhY2tpbmdTdG9yZSk7Cit9
CisKK3ZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjp2b2xhdGlsaXR5VGlt
ZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24+
JikKK3sKKyAgICBib29sIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSA9IHRy
dWU7CisKKyAgICBhdXRvIG5vdyA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwor
ICAgIGZvciAoY29uc3QgYXV0byYgYmFja2luZ1N0b3JlIDogbV9saXZlQmFja2luZ1N0b3JlKQor
ICAgICAgICBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGUgJj0gbWFya0JhY2tp
bmdTdG9yZVZvbGF0aWxlKCpiYWNraW5nU3RvcmUsIG5vdyk7CisKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGJhY2tpbmdTdG9yZSA6IG1fdW5wYXJlbnRlZEJhY2tpbmdTdG9yZSkKKyAgICAgICAgc3Vj
Y2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxlICY9IG1hcmtCYWNraW5nU3RvcmVWb2xh
dGlsZUltbWVkaWF0ZWx5KCpiYWNraW5nU3RvcmUpOwogCi0gICAgaWYgKCFoYWRSZWNlbnRseVBh
aW50ZWRCYWNraW5nU3RvcmUgJiYgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVB1cmdlYWJs
ZSkKLSAgICAgICAgbV9wdXJnZWFiaWxpdHlUaW1lci5zdG9wKCk7CisgICAgaWYgKHN1Y2Nlc3Nm
dWxseU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSkKKyAgICAgICAgbV92b2xhdGlsaXR5VGltZXIu
c3RvcCgpOwogfQogCi12b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6c2No
ZWR1bGVQdXJnZWFiaWxpdHlUaW1lcigpCit2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29s
bGVjdGlvbjo6c2NoZWR1bGVWb2xhdGlsaXR5VGltZXIoKQogewotICAgIGlmIChtX3B1cmdlYWJp
bGl0eVRpbWVyLmlzQWN0aXZlKCkpCisgICAgaWYgKG1fdm9sYXRpbGl0eVRpbWVyLmlzQWN0aXZl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHVyZ2VhYmlsaXR5VGltZXIuc3RhcnRSZXBl
YXRpbmcocHVyZ2VhYmlsaXR5VGltZXJJbnRlcnZhbCk7CisgICAgbV92b2xhdGlsaXR5VGltZXIu
c3RhcnRSZXBlYXRpbmcodm9sYXRpbGl0eVRpbWVySW50ZXJ2YWwpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVt
b3RlTGF5ZXJUcmVlSG9zdC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3Rl
TGF5ZXJUcmVlSG9zdC5tbQppbmRleCA4MjM5YTU1Li43ZDcwZDRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZUhvc3QubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVIb3N0Lm1tCkBAIC05Niw2
ICs5NiwxNSBAQCBib29sIFJlbW90ZUxheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVyVHJlZShjb25z
dCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYgdHJhbgogICAgIGZvciAoYXV0byYgZGVzdHJv
eWVkTGF5ZXIgOiB0cmFuc2FjdGlvbi5kZXN0cm95ZWRMYXllcnMoKSkKICAgICAgICAgbGF5ZXJX
aWxsQmVSZW1vdmVkKGRlc3Ryb3llZExheWVyKTsKIAorICAgIC8vIERyb3AgdGhlIGNvbnRlbnRz
IG9mIGFueSBsYXllcnMgd2hpY2ggd2VyZSB1bnBhcmVudGVkOyB0aGUgV2ViIHByb2Nlc3Mgd2ls
bCByZS1zZW5kCisgICAgLy8gdGhlIGJhY2tpbmcgc3RvcmUgaW4gdGhlIGNvbW1pdCB0aGF0IHJl
cGFyZW50cyB0aGVtLgorICAgIGZvciAoYXV0byYgbGF5ZXJPclZpZXcgOiBtX2xheWVycy52YWx1
ZXMoKSkgeworICAgICAgICBDQUxheWVyICpsYXllciA9IGFzTGF5ZXIobGF5ZXJPclZpZXcuZ2V0
KCkpOworICAgICAgICBpZiAobGF5ZXIuc3VwZXJsYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBsYXllci5jb250ZW50cyA9IG51bGxwdHI7CisgICAgfQorCiAgICAgcmV0dXJu
IHJvb3RMYXllckNoYW5nZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKaW5kZXgg
NGRkNTI4NC4uZWE5ZjQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKQEAgLTUwLDYg
KzUwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBiYWNraW5nU3RvcmVXYXNDcmVhdGVkKFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlKik7CiAgICAgdm9pZCBiYWNraW5nU3RvcmVXaWxsQmVEZXN0cm95
ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqKTsKKyAgICB2b2lkIGJhY2tpbmdTdG9yZVdpbGxC
ZURpc3BsYXllZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSopOwogCiAgICAgTGF5ZXJIb3N0aW5n
TW9kZSBsYXllckhvc3RpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQYWdlLT5sYXllckhv
c3RpbmdNb2RlKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tCmluZGV4IDRjYjEw
YTkuLmNmMjllYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0KQEAgLTg2LDYgKzg2
LDExIEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6YmFja2luZ1N0b3JlV2lsbEJlRGVz
dHJveWVkKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlCiAgICAgbV9iYWNraW5nU3RvcmVDb2xsZWN0
aW9uLmJhY2tpbmdTdG9yZVdpbGxCZURlc3Ryb3llZChiYWNraW5nU3RvcmUpOwogfQogCit2b2lk
IFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXllZChSZW1v
dGVMYXllckJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQoreworICAgIG1fYmFja2luZ1N0b3Jl
Q29sbGVjdGlvbi5iYWNraW5nU3RvcmVXaWxsQmVEaXNwbGF5ZWQoYmFja2luZ1N0b3JlKTsKK30K
Kwogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6
OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCYgY2xpZW50KQogewogICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdyYXBoaWNzTGF5ZXJDQVJlbW90ZT4oY2xpZW50LCB0
aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCmluZGV4IDlmNWY3YzEu
Ljg3OGNmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQpAQCAtMjgz
LDggKzI4MywxOSBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpmbHVzaExheWVy
cygpCiAgICAgICAgIGxheWVyLT5kaWRDb21taXQoKTsKICAgICB9CiAKKyAgICBSZW1vdGVMYXll
ckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24mIGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24gPSBtX3JlbW90
ZUxheWVyVHJlZUNvbnRleHQtPmJhY2tpbmdTdG9yZUNvbGxlY3Rpb24oKTsKKworICAgIFZlY3Rv
cjxSZW1vdGVMYXllckJhY2tpbmdTdG9yZSo+IHVucGFyZW50ZWRCYWNraW5nU3RvcmU7CisgICAg
Zm9yIChhdXRvJiBiYWNraW5nU3RvcmUgOiBiYWNraW5nU3RvcmVDb2xsZWN0aW9uLmxpdmVCYWNr
aW5nU3RvcmUoKSkgeworICAgICAgICBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqIGxheWVyID0gYmFj
a2luZ1N0b3JlLT5sYXllcigpOworICAgICAgICBpZiAobGF5ZXIgJiYgIWxheWVyLT5zdXBlcmxh
eWVyKCkpCisgICAgICAgICAgICB1bnBhcmVudGVkQmFja2luZ1N0b3JlLmFwcGVuZChiYWNraW5n
U3RvcmUpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGJhY2tpbmdTdG9yZSA6IHVucGFyZW50ZWRC
YWNraW5nU3RvcmUpCisgICAgICAgIGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uYmFja2luZ1N0b3Jl
TGF5ZXJXYXNVbnBhcmVudGVkKGJhY2tpbmdTdG9yZSk7CisKICAgICBpZiAoaGFkQW55Q2hhbmdl
ZEJhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0LT5iYWNraW5n
U3RvcmVDb2xsZWN0aW9uKCkuc2NoZWR1bGVQdXJnZWFiaWxpdHlUaW1lcigpOworICAgICAgICBi
YWNraW5nU3RvcmVDb2xsZWN0aW9uLnNjaGVkdWxlVm9sYXRpbGl0eVRpbWVyKCk7CiAKICAgICBS
ZWZQdHI8QmFja2luZ1N0b3JlRmx1c2hlcj4gYmFja2luZ1N0b3JlRmx1c2hlciA9IEJhY2tpbmdT
dG9yZUZsdXNoZXI6OmNyZWF0ZShXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLCBzdGQ6Om1vdmUoY29tbWl0RW5jb2RlciksIHN0ZDo6bW92ZShjb250ZXh0c1Rv
Rmx1c2gpKTsKICAgICBtX3BlbmRpbmdCYWNraW5nU3RvcmVGbHVzaGVyID0gYmFja2luZ1N0b3Jl
Rmx1c2hlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231865</attachid>
            <date>2014-05-22 00:24:05 -0700</date>
            <delta_ts>2014-05-25 13:28:08 -0700</delta_ts>
            <desc>patch</desc>
            <filename>agg.diff</filename>
            <type>text/plain</type>
            <size>30524</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4YzQ1YjdjLi44MDVmYTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTQtMDUtMjAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW3drMl0gRW5hYmxlIGFnZ3Jlc3NpdmUgdGlsZSByZXRlbnRpb24gYW5kIHB1cmdl
YWJsZSBmcm9udCBidWZmZXJzIG9uIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDIwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNjUyMTcz
Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBv
b2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SU9TdXJmYWNlUG9vbDo6d2lsbEFkZFN1cmZhY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKElPU3Vy
ZmFjZTo6cmVsZWFzZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIFJlbmFtZSBjbGVhckdyYXBo
aWNzQ29udGV4dCB0byByZWxlYXNlR3JhcGhpY3NDb250ZXh0IGZvciBjbGFyaXR5LgorCiAyMDE0
LTA1LTIxICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBV
cGRhdGUgc29tZSBvZiB0aGUgbWVkaWEgY29udHJvbHMgYnV0dG9ucyB0byBiZSBiaWdnZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KaW5kZXggOTliZWI0YS4uYzU4MzRjMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4KQEAgLTMxMzEsOSArMzEzMSw5IEBAIF9fWk43V2ViQ29yZTEzSU9TdXJmYWNlUG9vbDExc2V0
UG9vbFNpemVFbQogX19aTjdXZWJDb3JlOUlPU3VyZmFjZTExY3JlYXRlSW1hZ2VFdgogX19aTjdX
ZWJDb3JlOUlPU3VyZmFjZTEzc2V0SXNWb2xhdGlsZUViCiBfX1pON1dlYkNvcmU5SU9TdXJmYWNl
MThjcmVhdGVGcm9tTWFjaFBvcnRFak5TXzEwQ29sb3JTcGFjZUUKLV9fWk43V2ViQ29yZTlJT1N1
cmZhY2UyMGNsZWFyR3JhcGhpY3NDb250ZXh0RXYKIF9fWk43V2ViQ29yZTlJT1N1cmZhY2UyMWVu
c3VyZUdyYXBoaWNzQ29udGV4dEV2CiBfX1pON1dlYkNvcmU5SU9TdXJmYWNlMjFlbnN1cmVQbGF0
Zm9ybUNvbnRleHRFdgorX19aTjdXZWJDb3JlOUlPU3VyZmFjZTIycmVsZWFzZUdyYXBoaWNzQ29u
dGV4dEV2CiBfX1pON1dlYkNvcmU5SU9TdXJmYWNlNmNyZWF0ZUVOU183SW50U2l6ZUVOU18xMENv
bG9yU3BhY2VFCiBfX1pOSzdXZWJDb3JlOUlPU3VyZmFjZTE0Y3JlYXRlTWFjaFBvcnRFdgogX19a
Tks3V2ViQ29yZTlJT1N1cmZhY2U3aXNJblVzZUV2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCmluZGV4IDA1MjlkNjguLjBj
NjA5YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lP
U3VyZmFjZVBvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0lPU3VyZmFjZVBvb2wuY3BwCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgSU9TdXJmYWNlUG9vbDo6
d2lsbEFkZFN1cmZhY2UoSU9TdXJmYWNlKiBzdXJmYWNlLCBib29sIGluVXNlKQogICAgIENhY2hl
ZFN1cmZhY2VEZXRhaWxzJiBkZXRhaWxzID0gbV9zdXJmYWNlRGV0YWlscy5hZGQoc3VyZmFjZSwg
Q2FjaGVkU3VyZmFjZURldGFpbHMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGRldGFpbHMucmVz
ZXRMYXN0VXNlVGltZSgpOwogCi0gICAgc3VyZmFjZS0+Y2xlYXJHcmFwaGljc0NvbnRleHQoKTsK
KyAgICBzdXJmYWNlLT5yZWxlYXNlR3JhcGhpY3NDb250ZXh0KCk7CiAKICAgICBzaXplX3Qgc3Vy
ZmFjZUJ5dGVzID0gc3VyZmFjZS0+dG90YWxCeXRlcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCmluZGV4IDRjMzFjYTUuLjU0
MGE4N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0lPU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0lPU3VyZmFjZS5oCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRoZSBncmFw
aGljcyBjb250ZXh0IGNhY2hlZCBvbiB0aGUgc3VyZmFjZSBjb3VudHMgYXMgYSAidXNlciIsIHNv
IHRvIGdldAogICAgIC8vIGFuIGFjY3VyYXRlIHJlc3VsdCBmcm9tIGlzSW5Vc2UoKSwgaXQgbmVl
ZHMgdG8gYmUgcmVsZWFzZWQuCi0gICAgdm9pZCBjbGVhckdyYXBoaWNzQ29udGV4dCgpOworICAg
IHZvaWQgcmVsZWFzZUdyYXBoaWNzQ29udGV4dCgpOwogCiBwcml2YXRlOgogICAgIElPU3VyZmFj
ZShJbnRTaXplLCBDb2xvclNwYWNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCAwMWZlMGVjLi5mNjYwMWUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
Lm1tCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBJT1N1cmZhY2U6OmlzSW5Vc2UoKSBjb25zdAog
ICAgIHJldHVybiBJT1N1cmZhY2VJc0luVXNlKG1fc3VyZmFjZS5nZXQoKSk7CiB9CiAKLXZvaWQg
SU9TdXJmYWNlOjpjbGVhckdyYXBoaWNzQ29udGV4dCgpCit2b2lkIElPU3VyZmFjZTo6cmVsZWFz
ZUdyYXBoaWNzQ29udGV4dCgpCiB7CiAgICAgbV9ncmFwaGljc0NvbnRleHQgPSBudWxscHRyOwog
ICAgIG1fY2dDb250ZXh0ID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBhMDdmYzU4Li42NGQwZDc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQgQEAKKzIwMTQtMDUtMjIgIFRpbSBIb3J0b24gIDx0
aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgW3drMl0gRW5hYmxlIGFnZ3Jlc3Np
dmUgdGlsZSByZXRlbnRpb24gYW5kIHB1cmdlYWJsZSBmcm9udCBidWZmZXJzIG9uIGlPUworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDIwCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xNjUyMTczNj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmg6Cisg
ICAgICAgIFR1cm4gb24gYWdncmVzc2l2ZSB0aWxlIHJldGVudGlvbiBieSBkZWZhdWx0IG9uIGlP
Uy4KKworICAgICAgICAqIFNoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW06Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkaXNwbGF5KToKKyAgICAg
ICAgTGV0IHRoZSBjb250ZXh0IGtub3cgd2hlbmV2ZXIgYSBSZW1vdGVMYXllckJhY2tpbmdTdG9y
ZSBpcyBkaXNwbGF5ZWQsIHNvIHRoYXQKKyAgICAgICAgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVD
b2xsZWN0aW9uIGNhbiAoaWYgbmVlZGVkKSBub3RlIHRoYXQgdGhlIGJhY2tpbmcgc3RvcmUKKyAg
ICAgICAgaXMgYWN0aXZlIG9uY2UgYWdhaW4gKGJlY2F1c2Ugd2Ugb25seSBkaXNwbGF5IHBhcmVu
dGVkIGJhY2tpbmcgc3RvcmUpLgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlOjpzZXRCdWZmZXJWb2xhdGlsaXR5KToKKyAgICAgICAgRW5zdXJlIHRoYXQgd2UgbmV2
ZXIgaGF2ZSBsaXZlIGNvbnRleHRzIGF0dGFjaGVkIHRvIGFueSBidWZmZXJzIHdoZW4KKyAgICAg
ICAgbWFya2luZyB0aGVtIHZvbGF0aWxlLCBiZWNhdXNlIGNoZWNraW5nIGlzSW5Vc2UoKSB3aXRo
IGxpdmUgY29udGV4dHMgaXMgZnV0aWxlLgorCisgICAgICAgICogU2hhcmVkL21hYy9SZW1vdGVM
YXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBTaGFyZWQvbWFjL1JlbW90
ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxl
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rp
b246OndpbGxGbHVzaExheWVycyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlQ29sbGVjdGlvbjo6d2lsbENvbW1pdExheWVyVHJlZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6ZGlkRmx1c2hMYXllcnMpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmJhY2tpbmdT
dG9yZVdpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlQ29sbGVjdGlvbjo6YmFja2luZ1N0b3JlV2lsbEJlRGlzcGxheWVkKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjptYXJrQmFja2luZ1N0
b3JlVm9sYXRpbGVJbW1lZGlhdGVseSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFj
a2luZ1N0b3JlQ29sbGVjdGlvbjo6bWFya0JhY2tpbmdTdG9yZVZvbGF0aWxlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpiYWNraW5nU3RvcmVC
ZWNhbWVVbnJlYWNoYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2luZ1N0
b3JlQ29sbGVjdGlvbjo6dm9sYXRpbGl0eVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OnNjaGVkdWxlVm9sYXRpbGl0eVRpbWVy
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpw
dXJnZWFiaWxpdHlUaW1lckZpcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpzY2hlZHVsZVB1cmdlYWJpbGl0eVRpbWVyKTog
RGVsZXRlZC4KKyAgICAgICAgUmVuYW1lIHB1cmdlYWJsZS0+dm9sYXRpbGUgZm9yIGFjY3VyYWN5
LgorICAgICAgICBLZWVwIHRyYWNrIG9mIHR3byBzZXRzIG9mIGJhY2tpbmcgc3RvcmU6IHRob3Nl
IHdoaWNoIGFyZSBhY3RpdmUvcGFyZW50ZWQsIGFuZAorICAgICAgICB0aG9zZSB3aGljaCBhcmUg
bm90LiBCYWNraW5nIHN0b3JlIGlzIG1vdmVkIHRvIHRoZSBpbmFjdGl2ZSBzZXQgYWZ0ZXIgYnVp
bGRpbmcKKyAgICAgICAgdGhlIHRyYW5zYWN0aW9uIGluIHdoaWNoIGl0cyBvd25pbmcgbGF5ZXIg
aXMgdW5wYXJlbnRlZC4KKyAgICAgICAgV2hlbiBiYWNraW5nIHN0b3JlIGlzIHVucGFyZW50ZWQs
IHRyeSB0byBtYXJrIGl0IHZvbGF0aWxlIGltbWVkaWF0ZWx5LiBBbHNvLAorICAgICAgICBtYXJr
IHRoZSBiYWNraW5nIHN0b3JlIHByb3BlcnR5IGFzIGRpcnR5IG9uIHRoZSBvd25pbmcgbGF5ZXIg
c28gdGhhdCB3aGVuCisgICAgICAgIHNhaWQgbGF5ZXIgaXMgcmVwYXJlbnRlZCwgd2UgZW5jb2Rl
IHRoZSBiYWNraW5nIHN0b3JlIGluIHRoZSBjb21taXQgdGhhdCByZXBhcmVudHMgaXQsCisgICAg
ICAgIGFzIHRoZSBVSSBwcm9jZXNzIHdpbGwgdGhyb3cgYXdheSBpdHMgcmVmZXJlbmNlIHRvIHRo
ZSBiYWNraW5nIHN0b3JlIHdoZW4KKyAgICAgICAgdGhlIGxheWVyIGlzIHVucGFyZW50ZWQuIE1h
cmsgdGhlIGZyb250IGJ1ZmZlcnMgb2YgdW5wYXJlbnRlZCBsYXllcnMgYXMgdm9sYXRpbGUsCisg
ICAgICAgIGluIGFkZGl0aW9uIHRvIHRoZSBvdGhlcnMuCisKKyAgICAgICAgKiBTaGFyZWQvbWFj
L1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpsYXllcklEc1dpdGhOZXdseVVucmVhY2hhYmxlQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1t
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OmRlY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpzZXRMYXllcklEc1dp
dGhOZXdseVVucmVhY2hhYmxlQmFja2luZ1N0b3JlKToKKyAgICAgICAgSW5jbHVkZSB0aGUgbGlz
dCBvZiBsYXllcnMgKGJ5IElEKSB3aXRoIGJhY2tpbmcgc3RvcmUgd2hpY2gganVzdCBiZWNhbWUg
dW5yZWFjaGFibGUgaW4gdGhlIHRyYW5zYWN0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9SZW1vdGVMYXllclRyZWVIb3N0Lm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRy
ZWVIb3N0Ojp1cGRhdGVMYXllclRyZWUpOgorICAgICAgICBDbGVhciB0aGUgY29udGVudHMgb2Yg
bGF5ZXJzIHdoaWNoIG5vdyBoYXZlIHVucmVhY2hhYmxlIGJhY2tpbmcgc3RvcmUuCisgICAgICAg
IE90aGVyd2lzZSwgdGhlIFVJIHByb2Nlc3Mgd291bGQgaG9sZCBhICd1c2UnIG9uIHRoZSBJT1N1
cmZhY2UsIGFuZCBwcmV2ZW50CisgICAgICAgIHRoZSBXZWIgcHJvY2VzcyBmcm9tIG1hcmtpbmcg
aXQgdm9sYXRpbGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZUNvbnRleHQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90
ZUxheWVyVHJlZUNvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZUNv
bnRleHQ6OmJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXllZCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKToKKyAgICAgICAg
R2l2ZSBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24gYSBzaG90IGF0IHRoZSBSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbiwKKyAgICAgICAgc28gdGhhdCBpdCBjYW4gZmlsbCBpbiBs
YXllcklEc1dpdGhOZXdseVVucmVhY2hhYmxlQmFja2luZ1N0b3JlLgorICAgICAgICBBbHNvLCBs
ZXQgaXQga25vdyB3aGVuIHRoZSBmbHVzaCBiZWdpbnMgYW5kIGVuZHMsIHNvIHRoYXQgaXQgY2Fu
IGtlZXAgdHJhY2sKKyAgICAgICAgb2Ygd2hpY2ggbGF5ZXJzIHdlcmUgcmVhY2hlZCBpbiB0aGUg
Zmx1c2guCisKIDIwMTQtMDUtMjEgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBPbmx5IGVuYWJsZSBzYW5kYm94IGV4dGVuc2lvbnMgb24gbWFjLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKaW5kZXggZjUyYzY4ZS4uOTVkMjc4
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCkBAIC03
NSw2ICs3NSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogI2RlZmluZSBERUZBVUxUX01FRElBX1BM
QVlCQUNLX0FMTE9XU19JTkxJTkUgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9NRURJQV9QTEFZQkFD
S19SRVFVSVJFU19VU0VSX0dFU1RVUkUgdHJ1ZQogI2RlZmluZSBERUZBVUxUX1RFTVBPUkFSWV9U
SUxFX0NPSE9SVF9SRVRFTlRJT05fRU5BQkxFRCBmYWxzZQorI2RlZmluZSBERUZBVUxUX0FHR1JF
U1NJVkVfVElMRV9SRVRFTlRJT05fRU5BQkxFRCB0cnVlCiAjZWxzZQogI2RlZmluZSBERUZBVUxU
X0ZSQU1FX0ZMQVRURU5JTkdfRU5BQkxFRCBmYWxzZQogI2RlZmluZSBERUZBVUxUX1NIT1VMRF9Q
UklOVF9CQUNLR1JPVU5EUyBmYWxzZQpAQCAtODYsNiArODcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKICNkZWZpbmUgREVGQVVMVF9NRURJQV9QTEFZQkFDS19BTExPV1NfSU5MSU5FIHRydWUKICNk
ZWZpbmUgREVGQVVMVF9NRURJQV9QTEFZQkFDS19SRVFVSVJFU19VU0VSX0dFU1RVUkUgZmFsc2UK
ICNkZWZpbmUgREVGQVVMVF9URU1QT1JBUllfVElMRV9DT0hPUlRfUkVURU5USU9OX0VOQUJMRUQg
dHJ1ZQorI2RlZmluZSBERUZBVUxUX0FHR1JFU1NJVkVfVElMRV9SRVRFTlRJT05fRU5BQkxFRCBm
YWxzZQogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpICYmICFQTEFURk9STShJT1NfU0lNVUxB
VE9SKQpAQCAtMTg3LDcgKzE4OSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIG1hY3JvKFBE
RlBsdWdpbkVuYWJsZWQsIHBkZlBsdWdpbkVuYWJsZWQsIEJvb2wsIGJvb2wsIERFRkFVTFRfUERG
UExVR0lOX0VOQUJMRUQpIFwKICAgICBtYWNybyhVc2VzRW5jb2RpbmdEZXRlY3RvciwgdXNlc0Vu
Y29kaW5nRGV0ZWN0b3IsIEJvb2wsIGJvb2wsIGZhbHNlKSBcCiAgICAgbWFjcm8oVGV4dEF1dG9z
aXppbmdFbmFibGVkLCB0ZXh0QXV0b3NpemluZ0VuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlKSBc
Ci0gICAgbWFjcm8oQWdncmVzc2l2ZVRpbGVSZXRlbnRpb25FbmFibGVkLCBhZ2dyZXNzaXZlVGls
ZVJldGVudGlvbkVuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlKSBcCisgICAgbWFjcm8oQWdncmVz
c2l2ZVRpbGVSZXRlbnRpb25FbmFibGVkLCBhZ2dyZXNzaXZlVGlsZVJldGVudGlvbkVuYWJsZWQs
IEJvb2wsIGJvb2wsIERFRkFVTFRfQUdHUkVTU0lWRV9USUxFX1JFVEVOVElPTl9FTkFCTEVEKSBc
CiAgICAgbWFjcm8oVGVtcG9yYXJ5VGlsZUNvaG9ydFJldGVudGlvbkVuYWJsZWQsIHRlbXBvcmFy
eVRpbGVDb2hvcnRSZXRlbnRpb25FbmFibGVkLCBCb29sLCBib29sLCBERUZBVUxUX1RFTVBPUkFS
WV9USUxFX0NPSE9SVF9SRVRFTlRJT05fRU5BQkxFRCkgXAogICAgIG1hY3JvKFFUS2l0RW5hYmxl
ZCwgaXNRVEtpdEVuYWJsZWQsIEJvb2wsIGJvb2wsIHRydWUpIFwKICAgICBtYWNybyhMb2dzUGFn
ZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCwgbG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVt
Q29uc29sZUVuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQppbmRleCA2YzBlYTQ5
Li5lYjc0YWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxh
eWVyQmFja2luZ1N0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmUubW0KQEAgLTIwMSw2ICsyMDEsOSBAQCBib29sIFJlbW90ZUxheWVy
QmFja2luZ1N0b3JlOjpkaXNwbGF5KCkKIAogICAgIG1fbGFzdERpc3BsYXlUaW1lID0gc3RkOjpj
aHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CiAKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAg
ICBtX2NvbnRleHQtPmJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXllZCh0aGlzKTsKKwogICAgIC8v
IE1ha2UgdGhlIHByZXZpb3VzIGZyb250IGJ1ZmZlciBub24tdm9sYXRpbGUgZWFybHksIHNvIHRo
YXQgd2UgY2FuIGRpcnR5IHRoZSB3aG9sZSBsYXllciBpZiBpdCBjb21lcyBiYWNrIGVtcHR5Lgog
ICAgIHNldEJ1ZmZlclZvbGF0aWxpdHkoQnVmZmVyVHlwZTo6RnJvbnQsIGZhbHNlKTsKIApAQCAt
MjM2LDcgKzIzOSw3IEBAIGJvb2wgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRpc3BsYXkoKQog
ICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtZXhwYW5kZWRTY2FsZWRTaXplLmhlaWdodCgp
KTsKICAgICAgICAgZHJhd0luQ29udGV4dChjb250ZXh0LCBiYWNrSW1hZ2UuZ2V0KCkpOwogCi0g
ICAgICAgIG1fZnJvbnRCdWZmZXIuc3VyZmFjZS0+Y2xlYXJHcmFwaGljc0NvbnRleHQoKTsKKyAg
ICAgICAgbV9mcm9udEJ1ZmZlci5zdXJmYWNlLT5yZWxlYXNlR3JhcGhpY3NDb250ZXh0KCk7CiAK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzgyLDYgKzM4NSw4IEBAIGJvb2wgUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmU6OnNldEJ1ZmZlclZvbGF0aWxpdHkoQnVmZmVyVHlwZSB0eXBl
LCBib29sIGlzVm9sYXRpCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIEJ1ZmZlclR5cGU6
OkZyb250OgogICAgICAgICBpZiAobV9mcm9udEJ1ZmZlci5zdXJmYWNlICYmIG1fZnJvbnRCdWZm
ZXIuaXNWb2xhdGlsZSAhPSBpc1ZvbGF0aWxlKSB7CisgICAgICAgICAgICBpZiAoaXNWb2xhdGls
ZSkKKyAgICAgICAgICAgICAgICBtX2Zyb250QnVmZmVyLnN1cmZhY2UtPnJlbGVhc2VHcmFwaGlj
c0NvbnRleHQoKTsKICAgICAgICAgICAgIGlmICghaXNWb2xhdGlsZSB8fCAhbV9mcm9udEJ1ZmZl
ci5zdXJmYWNlLT5pc0luVXNlKCkpIHsKICAgICAgICAgICAgICAgICBJT1N1cmZhY2U6OlN1cmZh
Y2VTdGF0ZSBwcmV2aW91c1N0YXRlID0gbV9mcm9udEJ1ZmZlci5zdXJmYWNlLT5zZXRJc1ZvbGF0
aWxlKGlzVm9sYXRpbGUpOwogICAgICAgICAgICAgICAgIG1fZnJvbnRCdWZmZXIuaXNWb2xhdGls
ZSA9IGlzVm9sYXRpbGU7CkBAIC0zOTUsNiArNDAwLDggQEAgYm9vbCBSZW1vdGVMYXllckJhY2tp
bmdTdG9yZTo6c2V0QnVmZmVyVm9sYXRpbGl0eShCdWZmZXJUeXBlIHR5cGUsIGJvb2wgaXNWb2xh
dGkKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBCdWZmZXJUeXBlOjpCYWNrOgogICAgICAgICBp
ZiAobV9iYWNrQnVmZmVyLnN1cmZhY2UgJiYgbV9iYWNrQnVmZmVyLmlzVm9sYXRpbGUgIT0gaXNW
b2xhdGlsZSkgeworICAgICAgICAgICAgaWYgKGlzVm9sYXRpbGUpCisgICAgICAgICAgICAgICAg
bV9iYWNrQnVmZmVyLnN1cmZhY2UtPnJlbGVhc2VHcmFwaGljc0NvbnRleHQoKTsKICAgICAgICAg
ICAgIGlmICghaXNWb2xhdGlsZSB8fCAhbV9iYWNrQnVmZmVyLnN1cmZhY2UtPmlzSW5Vc2UoKSkg
ewogICAgICAgICAgICAgICAgIG1fYmFja0J1ZmZlci5zdXJmYWNlLT5zZXRJc1ZvbGF0aWxlKGlz
Vm9sYXRpbGUpOwogICAgICAgICAgICAgICAgIG1fYmFja0J1ZmZlci5pc1ZvbGF0aWxlID0gaXNW
b2xhdGlsZTsKQEAgLTQwNCw2ICs0MTEsOCBAQCBib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3Jl
OjpzZXRCdWZmZXJWb2xhdGlsaXR5KEJ1ZmZlclR5cGUgdHlwZSwgYm9vbCBpc1ZvbGF0aQogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEJ1ZmZlclR5cGU6OlNlY29uZGFyeUJhY2s6CiAgICAgICAg
IGlmIChtX3NlY29uZGFyeUJhY2tCdWZmZXIuc3VyZmFjZSAmJiBtX3NlY29uZGFyeUJhY2tCdWZm
ZXIuaXNWb2xhdGlsZSAhPSBpc1ZvbGF0aWxlKSB7CisgICAgICAgICAgICBpZiAoaXNWb2xhdGls
ZSkKKyAgICAgICAgICAgICAgICBtX3NlY29uZGFyeUJhY2tCdWZmZXIuc3VyZmFjZS0+cmVsZWFz
ZUdyYXBoaWNzQ29udGV4dCgpOwogICAgICAgICAgICAgaWYgKCFpc1ZvbGF0aWxlIHx8ICFtX3Nl
Y29uZGFyeUJhY2tCdWZmZXIuc3VyZmFjZS0+aXNJblVzZSgpKSB7CiAgICAgICAgICAgICAgICAg
bV9zZWNvbmRhcnlCYWNrQnVmZmVyLnN1cmZhY2UtPnNldElzVm9sYXRpbGUoaXNWb2xhdGlsZSk7
CiAgICAgICAgICAgICAgICAgbV9zZWNvbmRhcnlCYWNrQnVmZmVyLmlzVm9sYXRpbGUgPSBpc1Zv
bGF0aWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXll
ckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLmgKaW5kZXggM2I4ZWU3Ny4uODFkMmIxMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdT
dG9yZUNvbGxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxh
eWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5oCkBAIC0zNCw2ICszNCw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTsKIGNsYXNzIFJlbW90ZUxh
eWVyVHJlZUNvbnRleHQ7CitjbGFzcyBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjsKIAogY2xh
c3MgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24pOwpAQCAtNDUsMTcgKzQ2
LDI5IEBAIHB1YmxpYzoKICAgICB2b2lkIGJhY2tpbmdTdG9yZVdhc0NyZWF0ZWQoUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmUqKTsKICAgICB2b2lkIGJhY2tpbmdTdG9yZVdpbGxCZURlc3Ryb3llZChS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZSopOwogCi0gICAgdm9pZCBwdXJnZWFiaWxpdHlUaW1lckZp
cmVkKFdlYkNvcmU6OlRpbWVyPFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbj4mKTsK
KyAgICB2b2lkIGJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXllZChSZW1vdGVMYXllckJhY2tpbmdT
dG9yZSopOworICAgIHZvaWQgYmFja2luZ1N0b3JlQmVjYW1lVW5yZWFjaGFibGUoUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmUqKTsKIAotICAgIHZvaWQgc2NoZWR1bGVQdXJnZWFiaWxpdHlUaW1lcigp
OworICAgIHZvaWQgd2lsbEZsdXNoTGF5ZXJzKCk7CisgICAgdm9pZCB3aWxsQ29tbWl0TGF5ZXJU
cmVlKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJik7CisgICAgdm9pZCBkaWRGbHVzaExheWVy
cygpOworCisgICAgdm9pZCB2b2xhdGlsaXR5VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxSZW1v
dGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24+Jik7CisKKyAgICB2b2lkIHNjaGVkdWxlVm9s
YXRpbGl0eVRpbWVyKCk7CiAKIHByaXZhdGU6Ci0gICAgSGFzaFNldDxSZW1vdGVMYXllckJhY2tp
bmdTdG9yZSo+IG1fbGl2ZUJhY2tpbmdTdG9yZTsKKyAgICBib29sIG1hcmtCYWNraW5nU3RvcmVW
b2xhdGlsZUltbWVkaWF0ZWx5KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlJik7CisgICAgYm9vbCBt
YXJrQmFja2luZ1N0b3JlVm9sYXRpbGUoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmLCBzdGQ6OmNo
cm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG5vdyk7CiAKLSAgICB2b2lkIG1hcmtJbmFj
dGl2ZUJhY2tpbmdTdG9yZVB1cmdlYWJsZSgpOworICAgIEhhc2hTZXQ8UmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmUqPiBtX2xpdmVCYWNraW5nU3RvcmU7CisgICAgSGFzaFNldDxSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZSo+IG1fdW5wYXJlbnRlZEJhY2tpbmdTdG9yZTsKKyAgICBIYXNoU2V0PFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlKj4gbV9yZWFjaGFibGVCYWNraW5nU3RvcmVJbkxhdGVzdEZsdXNo
OwogCiAgICAgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCogbV9jb250ZXh0OwotICAgIFdlYkNvcmU6
OlRpbWVyPFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbj4gbV9wdXJnZWFiaWxpdHlU
aW1lcjsKKyAgICBXZWJDb3JlOjpUaW1lcjxSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rp
b24+IG1fdm9sYXRpbGl0eVRpbWVyOworCisgICAgYm9vbCBtX2luTGF5ZXJGbHVzaDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5tbQppbmRleCAx
NGZhOTkyLi5kMWQ5NTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1Jl
bW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5tbQpAQCAtMzAsMTgg
KzMwLDU0IEBACiAjaW1wb3J0ICJSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oIgogI2ltcG9ydCAi
UmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oIgogCi1jb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBw
dXJnZWFibGVCYWNraW5nU3RvcmVBZ2VUaHJlc2hvbGQgPSAxX3M7Ci1jb25zdCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIHB1cmdlYWJsZVNlY29uZGFyeUJhY2tpbmdTdG9yZUFnZVRocmVzaG9s
ZCA9IDIwMF9tczsKLWNvbnN0IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgcHVyZ2VhYmlsaXR5
VGltZXJJbnRlcnZhbCA9IDIwMF9tczsKK2NvbnN0IHN0ZDo6Y2hyb25vOjpzZWNvbmRzIHZvbGF0
aWxlQmFja2luZ1N0b3JlQWdlVGhyZXNob2xkID0gMV9zOworY29uc3Qgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyB2b2xhdGlsZVNlY29uZGFyeUJhY2tpbmdTdG9yZUFnZVRocmVzaG9sZCA9IDIw
MF9tczsKK2NvbnN0IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdm9sYXRpbGl0eVRpbWVySW50
ZXJ2YWwgPSAyMDBfbXM7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBSZW1vdGVMYXllckJhY2tp
bmdTdG9yZUNvbGxlY3Rpb246OlJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbihSZW1v
dGVMYXllclRyZWVDb250ZXh0KiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0g
ICAgLCBtX3B1cmdlYWJpbGl0eVRpbWVyKHRoaXMsICZSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNv
bGxlY3Rpb246OnB1cmdlYWJpbGl0eVRpbWVyRmlyZWQpCisgICAgLCBtX3ZvbGF0aWxpdHlUaW1l
cih0aGlzLCAmUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjp2b2xhdGlsaXR5VGlt
ZXJGaXJlZCkKKyAgICAsIG1faW5MYXllckZsdXNoKGZhbHNlKQogewogfQogCit2b2lkIFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6d2lsbEZsdXNoTGF5ZXJzKCkKK3sKKyAgICBt
X2luTGF5ZXJGbHVzaCA9IHRydWU7CisgICAgbV9yZWFjaGFibGVCYWNraW5nU3RvcmVJbkxhdGVz
dEZsdXNoLmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0
aW9uOjp3aWxsQ29tbWl0TGF5ZXJUcmVlKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbikKK3sKKyAgICBBU1NFUlQobV9pbkxheWVyRmx1c2gpOworICAgIFZlY3RvcjxXZWJD
b3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IG5ld2x5VW5yZWFjaGFibGVMYXll
cklEczsKKyAgICBmb3IgKGF1dG8mIGJhY2tpbmdTdG9yZSA6IG1fbGl2ZUJhY2tpbmdTdG9yZSkg
eworICAgICAgICBpZiAoIW1fcmVhY2hhYmxlQmFja2luZ1N0b3JlSW5MYXRlc3RGbHVzaC5jb250
YWlucyhiYWNraW5nU3RvcmUpKQorICAgICAgICAgICAgbmV3bHlVbnJlYWNoYWJsZUxheWVySURz
LmFwcGVuZChiYWNraW5nU3RvcmUtPmxheWVyKCktPmxheWVySUQoKSk7CisgICAgfQorCisgICAg
dHJhbnNhY3Rpb24uc2V0TGF5ZXJJRHNXaXRoTmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZShu
ZXdseVVucmVhY2hhYmxlTGF5ZXJJRHMpOworfQorCit2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlQ29sbGVjdGlvbjo6ZGlkRmx1c2hMYXllcnMoKQoreworICAgIG1faW5MYXllckZsdXNoID0g
ZmFsc2U7CisKKyAgICBWZWN0b3I8UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqPiBuZXdseVVucmVh
Y2hhYmxlQmFja2luZ1N0b3JlOworICAgIGZvciAoYXV0byYgYmFja2luZ1N0b3JlIDogbV9saXZl
QmFja2luZ1N0b3JlKSB7CisgICAgICAgIGlmICghbV9yZWFjaGFibGVCYWNraW5nU3RvcmVJbkxh
dGVzdEZsdXNoLmNvbnRhaW5zKGJhY2tpbmdTdG9yZSkpCisgICAgICAgICAgICBuZXdseVVucmVh
Y2hhYmxlQmFja2luZ1N0b3JlLmFwcGVuZChiYWNraW5nU3RvcmUpOworICAgIH0KKworICAgIGZv
ciAoYXV0byYgYmFja2luZ1N0b3JlIDogbmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZSkKKyAg
ICAgICAgYmFja2luZ1N0b3JlQmVjYW1lVW5yZWFjaGFibGUoYmFja2luZ1N0b3JlKTsKKworICAg
IGlmICghbmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZS5pc0VtcHR5KCkpCisgICAgICAgIHNj
aGVkdWxlVm9sYXRpbGl0eVRpbWVyKCk7Cit9CisKIHZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmVDb2xsZWN0aW9uOjpiYWNraW5nU3RvcmVXYXNDcmVhdGVkKFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlKiBiYWNraW5nU3RvcmUpCiB7CiAgICAgbV9saXZlQmFja2luZ1N0b3JlLmFkZChiYWNraW5n
U3RvcmUpOwpAQCAtNTAsNDEgKzg2LDkyIEBAIHZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVD
b2xsZWN0aW9uOjpiYWNraW5nU3RvcmVXYXNDcmVhdGVkKFJlbW90ZUxheWVyQmFja2luCiB2b2lk
IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6YmFja2luZ1N0b3JlV2lsbEJlRGVz
dHJveWVkKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCiB7CiAgICAgbV9s
aXZlQmFja2luZ1N0b3JlLnJlbW92ZShiYWNraW5nU3RvcmUpOworICAgIG1fdW5wYXJlbnRlZEJh
Y2tpbmdTdG9yZS5yZW1vdmUoYmFja2luZ1N0b3JlKTsKIH0KIAotdm9pZCBSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZUNvbGxlY3Rpb246OnB1cmdlYWJpbGl0eVRpbWVyRmlyZWQoV2ViQ29yZTo6VGlt
ZXI8UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uPiYpCit2b2lkIFJlbW90ZUxheWVy
QmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6YmFja2luZ1N0b3JlV2lsbEJlRGlzcGxheWVkKFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCiB7Ci0gICAgYXV0byBub3cgPSBzdGQ6
OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKLSAgICBib29sIGhhZFJlY2VudGx5UGFpbnRl
ZEJhY2tpbmdTdG9yZSA9IGZhbHNlOwotICAgIGJvb2wgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdT
dG9yZVB1cmdlYWJsZSA9IHRydWU7CisgICAgQVNTRVJUKG1faW5MYXllckZsdXNoKTsKKyAgICBt
X3JlYWNoYWJsZUJhY2tpbmdTdG9yZUluTGF0ZXN0Rmx1c2guYWRkKGJhY2tpbmdTdG9yZSk7CisK
KyAgICBhdXRvIGJhY2tpbmdTdG9yZUl0ZXIgPSBtX3VucGFyZW50ZWRCYWNraW5nU3RvcmUuZmlu
ZChiYWNraW5nU3RvcmUpOworICAgIGlmIChiYWNraW5nU3RvcmVJdGVyID09IG1fdW5wYXJlbnRl
ZEJhY2tpbmdTdG9yZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbGl2ZUJhY2tpbmdT
dG9yZS5hZGQoYmFja2luZ1N0b3JlKTsKKyAgICBtX3VucGFyZW50ZWRCYWNraW5nU3RvcmUucmVt
b3ZlKGJhY2tpbmdTdG9yZUl0ZXIpOworfQogCi0gICAgZm9yIChjb25zdCBhdXRvJiBiYWNraW5n
U3RvcmUgOiBtX2xpdmVCYWNraW5nU3RvcmUpIHsKLSAgICAgICAgaWYgKG5vdyAtIGJhY2tpbmdT
dG9yZS0+bGFzdERpc3BsYXlUaW1lKCkgPCBwdXJnZWFibGVCYWNraW5nU3RvcmVBZ2VUaHJlc2hv
bGQpIHsKLSAgICAgICAgICAgIGhhZFJlY2VudGx5UGFpbnRlZEJhY2tpbmdTdG9yZSA9IHRydWU7
Citib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6bWFya0JhY2tpbmdTdG9y
ZVZvbGF0aWxlSW1tZWRpYXRlbHkoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9y
ZSkKK3sKKyAgICBBU1NFUlQoIW1faW5MYXllckZsdXNoKTsKKyAgICBib29sIHN1Y2Nlc3NmdWxs
eU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSA9IHRydWU7CisKKyAgICBpZiAoIWJhY2tpbmdTdG9y
ZS5zZXRCdWZmZXJWb2xhdGlsaXR5KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpCdWZmZXJUeXBl
OjpTZWNvbmRhcnlCYWNrLCB0cnVlKSkKKyAgICAgICAgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdT
dG9yZVZvbGF0aWxlID0gZmFsc2U7CisKKyAgICBpZiAoIWJhY2tpbmdTdG9yZS5zZXRCdWZmZXJW
b2xhdGlsaXR5KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpCdWZmZXJUeXBlOjpCYWNrLCB0cnVl
KSkKKyAgICAgICAgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxlID0gZmFsc2U7
CisKKyAgICBpZiAoIW1fcmVhY2hhYmxlQmFja2luZ1N0b3JlSW5MYXRlc3RGbHVzaC5jb250YWlu
cygmYmFja2luZ1N0b3JlKSkgeworICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS5zZXRCdWZmZXJW
b2xhdGlsaXR5KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpCdWZmZXJUeXBlOjpGcm9udCwgdHJ1
ZSkpCisgICAgICAgICAgICBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGUgPSBm
YWxzZTsKKyAgICB9CiAKLSAgICAgICAgICAgIGlmIChub3cgLSBiYWNraW5nU3RvcmUtPmxhc3RE
aXNwbGF5VGltZSgpID49IHB1cmdlYWJsZVNlY29uZGFyeUJhY2tpbmdTdG9yZUFnZVRocmVzaG9s
ZCkKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmUtPnNldEJ1ZmZlclZvbGF0aWxpdHkoUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmU6OkJ1ZmZlclR5cGU6OlNlY29uZGFyeUJhY2ssIHRydWUpOwor
ICAgIHJldHVybiBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGU7Cit9CiAKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Citib29sIFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlQ29sbGVjdGlvbjo6bWFya0JhY2tpbmdTdG9yZVZvbGF0aWxlKFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlJiBiYWNraW5nU3RvcmUsIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9p
bnQgbm93KQoreworICAgIGlmIChub3cgLSBiYWNraW5nU3RvcmUubGFzdERpc3BsYXlUaW1lKCkg
PCB2b2xhdGlsZUJhY2tpbmdTdG9yZUFnZVRocmVzaG9sZCkgeworICAgICAgICBpZiAobm93IC0g
YmFja2luZ1N0b3JlLmxhc3REaXNwbGF5VGltZSgpID49IHZvbGF0aWxlU2Vjb25kYXJ5QmFja2lu
Z1N0b3JlQWdlVGhyZXNob2xkKQorICAgICAgICAgICAgYmFja2luZ1N0b3JlLnNldEJ1ZmZlclZv
bGF0aWxpdHkoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OkJ1ZmZlclR5cGU6OlNlY29uZGFyeUJh
Y2ssIHRydWUpOwogCi0gICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgbGF5ZXIgaXMgdW5wYXJlbnRl
ZCwgd2Ugc2hvdWxkIG1ha2UgYWxsIGJ1ZmZlcnMgdm9sYXRpbGUuCi0gICAgICAgIGlmICghYmFj
a2luZ1N0b3JlLT5zZXRCdWZmZXJWb2xhdGlsaXR5KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpC
dWZmZXJUeXBlOjpTZWNvbmRhcnlCYWNrLCB0cnVlKSkKLSAgICAgICAgICAgIHN1Y2Nlc3NmdWxs
eU1hZGVCYWNraW5nU3RvcmVQdXJnZWFibGUgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFiYWNraW5n
U3RvcmUtPnNldEJ1ZmZlclZvbGF0aWxpdHkoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OkJ1ZmZl
clR5cGU6OkJhY2ssIHRydWUpKQotICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdT
dG9yZVB1cmdlYWJsZSA9IGZhbHNlOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAg
IAorICAgIHJldHVybiBtYXJrQmFja2luZ1N0b3JlVm9sYXRpbGVJbW1lZGlhdGVseShiYWNraW5n
U3RvcmUpOworfQorCit2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6YmFj
a2luZ1N0b3JlQmVjYW1lVW5yZWFjaGFibGUoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqIGJhY2tp
bmdTdG9yZSkKK3sKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlLT5sYXllcigpKTsKKworICAgIGF1
dG8gYmFja2luZ1N0b3JlSXRlciA9IG1fbGl2ZUJhY2tpbmdTdG9yZS5maW5kKGJhY2tpbmdTdG9y
ZSk7CisgICAgaWYgKGJhY2tpbmdTdG9yZUl0ZXIgPT0gbV9saXZlQmFja2luZ1N0b3JlLmVuZCgp
KQorICAgICAgICByZXR1cm47CisgICAgbV91bnBhcmVudGVkQmFja2luZ1N0b3JlLmFkZChiYWNr
aW5nU3RvcmUpOworICAgIG1fbGl2ZUJhY2tpbmdTdG9yZS5yZW1vdmUoYmFja2luZ1N0b3JlSXRl
cik7CisKKyAgICAvLyBJZiBhIGxheWVyIHdpdGggYmFja2luZyBzdG9yZSBpcyByZW1vdmVkIGZy
b20gdGhlIHRyZWUsIG1hcmsgaXQgYXMgaGF2aW5nIGNoYW5nZWQgYmFja2luZyBzdG9yZSwgc28g
dGhhdAorICAgIC8vIG9uIHRoZSBjb21taXQgd2hpY2ggcmV0dXJucyBpdCB0byB0aGUgdHJlZSwg
d2Ugc2VyaWFsaXplIHRoZSBiYWNraW5nIHN0b3JlIChkZXNwaXRlIHBvc3NpYmx5IG5vdCBwYWlu
dGluZykuCisgICAgYmFja2luZ1N0b3JlLT5sYXllcigpLT5wcm9wZXJ0aWVzKCkubm90ZVByb3Bl
cnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpCYWNraW5nU3RvcmVDaGFu
Z2VkKTsKKworICAgIC8vIFRoaXMgd2lsbCBub3Qgc3VjY2VlZCBpbiBtYXJraW5nIGFsbCBidWZm
ZXJzIGFzIHZvbGF0aWxlLCBiZWNhdXNlIHRoZSBjb21taXQgdW5wYXJlbnRpbmcgdGhlIGxheWVy
IGhhc24ndAorICAgIC8vIG1hZGUgaXQgdG8gdGhlIFVJIHByb2Nlc3MgeWV0LiBUaGUgdm9sYXRp
bGl0eSB0aW1lciB3aWxsIGZpbmlzaCBtYXJraW5nIHRoZSByZW1haW5pbmcgYnVmZmVycyBsYXRl
ci4KKyAgICBtYXJrQmFja2luZ1N0b3JlVm9sYXRpbGVJbW1lZGlhdGVseSgqYmFja2luZ1N0b3Jl
KTsKK30KKwordm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OnZvbGF0aWxp
dHlUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVj
dGlvbj4mKQoreworICAgIGJvb2wgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxl
ID0gdHJ1ZTsKKworICAgIGF1dG8gbm93ID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93
KCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBiYWNraW5nU3RvcmUgOiBtX2xpdmVCYWNraW5nU3Rv
cmUpCisgICAgICAgIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSAmPSBtYXJr
QmFja2luZ1N0b3JlVm9sYXRpbGUoKmJhY2tpbmdTdG9yZSwgbm93KTsKKworICAgIGZvciAoY29u
c3QgYXV0byYgYmFja2luZ1N0b3JlIDogbV91bnBhcmVudGVkQmFja2luZ1N0b3JlKQorICAgICAg
ICBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGUgJj0gbWFya0JhY2tpbmdTdG9y
ZVZvbGF0aWxlSW1tZWRpYXRlbHkoKmJhY2tpbmdTdG9yZSk7CiAKLSAgICBpZiAoIWhhZFJlY2Vu
dGx5UGFpbnRlZEJhY2tpbmdTdG9yZSAmJiBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlUHVy
Z2VhYmxlKQotICAgICAgICBtX3B1cmdlYWJpbGl0eVRpbWVyLnN0b3AoKTsKKyAgICBpZiAoc3Vj
Y2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxlKQorICAgICAgICBtX3ZvbGF0aWxpdHlU
aW1lci5zdG9wKCk7CiB9CiAKLXZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9u
OjpzY2hlZHVsZVB1cmdlYWJpbGl0eVRpbWVyKCkKK3ZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmVDb2xsZWN0aW9uOjpzY2hlZHVsZVZvbGF0aWxpdHlUaW1lcigpCiB7Ci0gICAgaWYgKG1fcHVy
Z2VhYmlsaXR5VGltZXIuaXNBY3RpdmUoKSkKKyAgICBpZiAobV92b2xhdGlsaXR5VGltZXIuaXNB
Y3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wdXJnZWFiaWxpdHlUaW1lci5zdGFy
dFJlcGVhdGluZyhwdXJnZWFiaWxpdHlUaW1lckludGVydmFsKTsKKyAgICBtX3ZvbGF0aWxpdHlU
aW1lci5zdGFydFJlcGVhdGluZyh2b2xhdGlsaXR5VGltZXJJbnRlcnZhbCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9S
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9S
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oCmluZGV4IDJkZjU1ODEuLjkwOGRjZGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uLmgKQEAgLTE2Myw2ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsYXllclByb3Bl
cnRpZXNDaGFuZ2VkKFBsYXRmb3JtQ0FMYXllclJlbW90ZSosIExheWVyUHJvcGVydGllcyYpOwog
ICAgIHZvaWQgc2V0Q3JlYXRlZExheWVycyhWZWN0b3I8TGF5ZXJDcmVhdGlvblByb3BlcnRpZXM+
KTsKICAgICB2b2lkIHNldERlc3Ryb3llZExheWVySURzKFZlY3RvcjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+KTsKKyAgICB2b2lkIHNldExheWVySURzV2l0aE5ld2x5
VW5yZWFjaGFibGVCYWNraW5nU3RvcmUoVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBs
YXRmb3JtTGF5ZXJJRD4pOwogCiAjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVE
CiAgICAgV1RGOjpDU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CkBAIC0xNzMsNiArMTc0LDcg
QEAgcHVibGljOgogCiAgICAgVmVjdG9yPExheWVyQ3JlYXRpb25Qcm9wZXJ0aWVzPiBjcmVhdGVk
TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jcmVhdGVkTGF5ZXJzOyB9CiAgICAgVmVjdG9yPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gZGVzdHJveWVkTGF5ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXN0cm95ZWRMYXllcklEczsgfQorICAgIFZlY3RvcjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IGxheWVySURzV2l0aE5ld2x5VW5yZWFj
aGFibGVCYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2xheWVySURzV2l0aE5ld2x5VW5y
ZWFjaGFibGVCYWNraW5nU3RvcmU7IH0KIAogICAgIFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1DQUxh
eWVyUmVtb3RlPj4mIGNoYW5nZWRMYXllcnMoKSB7IHJldHVybiBtX2NoYW5nZWRMYXllcnM7IH0K
IApAQCAtMjE0LDYgKzIxNiw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPExheWVyQ3JlYXRpb25Q
cm9wZXJ0aWVzPiBtX2NyZWF0ZWRMYXllcnM7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gbV9kZXN0cm95ZWRMYXllcklEczsKICAgICBWZWN0b3I8
V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBtX3ZpZGVvTGF5ZXJJRHNQ
ZW5kaW5nRnVsbHNjcmVlbjsKKyAgICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxh
dGZvcm1MYXllcklEPiBtX2xheWVySURzV2l0aE5ld2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmU7
CiAKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fY29udGVudHNTaXplOwogICAgIFdlYkNvcmU6OkNv
bG9yIG1fcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW0KaW5kZXggMWI4
N2FlNC4uNjg1MzcxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tCkBAIC00NTIsNiArNDUyLDcgQEAgdm9pZCBS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogICAgIAogICAgIGVuY29kZXIgPDwgbV9kZXN0cm95ZWRMYXllcklEczsK
ICAgICBlbmNvZGVyIDw8IG1fdmlkZW9MYXllcklEc1BlbmRpbmdGdWxsc2NyZWVuOworICAgIGVu
Y29kZXIgPDwgbV9sYXllcklEc1dpdGhOZXdseVVucmVhY2hhYmxlQmFja2luZ1N0b3JlOwogCiAg
ICAgZW5jb2RlciA8PCBtX2NvbnRlbnRzU2l6ZTsKICAgICBlbmNvZGVyIDw8IG1fcGFnZUV4dGVu
ZGVkQmFja2dyb3VuZENvbG9yOwpAQCAtNTAzLDYgKzUwNCwxNCBAQCBib29sIFJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFJl
bW90ZUxheQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fdmlkZW9MYXllcklEc1Bl
bmRpbmdGdWxsc2NyZWVuKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQubV9sYXllcklEc1dpdGhOZXdseVVucmVhY2hhYmxlQmFja2luZ1N0
b3JlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvJiBsYXllcklEIDog
cmVzdWx0Lm1fbGF5ZXJJRHNXaXRoTmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZSkgeworICAg
ICAgICBpZiAoIWxheWVySUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9jb250ZW50c1NpemUpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCkBAIC01NTUsNiArNTY0LDExIEBAIHZvaWQgUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb246OnNldERlc3Ryb3llZExheWVySURzKFZlY3RvcjxHcmFwaGljc0xheWVy
OjpQbGF0CiAgICAgbV9kZXN0cm95ZWRMYXllcklEcyA9IHN0ZDo6bW92ZShkZXN0cm95ZWRMYXll
cklEcyk7CiB9CiAKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OnNldExheWVySURz
V2l0aE5ld2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmUoVmVjdG9yPEdyYXBoaWNzTGF5ZXI6OlBs
YXRmb3JtTGF5ZXJJRD4gbGF5ZXJJRHNXaXRoTmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZSkK
K3sKKyAgICBtX2xheWVySURzV2l0aE5ld2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmUgPSBzdGQ6
Om1vdmUobGF5ZXJJRHNXaXRoTmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZSk7Cit9CisKICNp
ZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKIAogY2xhc3MgUmVtb3RlTGF5ZXJU
cmVlVGV4dFN0cmVhbSA6IHB1YmxpYyBUZXh0U3RyZWFtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZUhvc3QubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZUhvc3QubW0KaW5kZXggODIzOWE1NS4uMDY2
ZjVkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXll
clRyZWVIb3N0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5
ZXJUcmVlSG9zdC5tbQpAQCAtOTYsNiArOTYsMTEgQEAgYm9vbCBSZW1vdGVMYXllclRyZWVIb3N0
Ojp1cGRhdGVMYXllclRyZWUoY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mIHRyYW4K
ICAgICBmb3IgKGF1dG8mIGRlc3Ryb3llZExheWVyIDogdHJhbnNhY3Rpb24uZGVzdHJveWVkTGF5
ZXJzKCkpCiAgICAgICAgIGxheWVyV2lsbEJlUmVtb3ZlZChkZXN0cm95ZWRMYXllcik7CiAKKyAg
ICAvLyBEcm9wIHRoZSBjb250ZW50cyBvZiBhbnkgbGF5ZXJzIHdoaWNoIHdlcmUgdW5wYXJlbnRl
ZDsgdGhlIFdlYiBwcm9jZXNzIHdpbGwgcmUtc2VuZAorICAgIC8vIHRoZSBiYWNraW5nIHN0b3Jl
IGluIHRoZSBjb21taXQgdGhhdCByZXBhcmVudHMgdGhlbS4KKyAgICBmb3IgKGF1dG8mIG5ld2x5
VW5yZWFjaGFibGVMYXllcklEIDogdHJhbnNhY3Rpb24ubGF5ZXJJRHNXaXRoTmV3bHlVbnJlYWNo
YWJsZUJhY2tpbmdTdG9yZSgpKQorICAgICAgICBhc0xheWVyKGdldExheWVyKG5ld2x5VW5yZWFj
aGFibGVMYXllcklEKSkuY29udGVudHMgPSBudWxscHRyOworCiAgICAgcmV0dXJuIHJvb3RMYXll
ckNoYW5nZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKaW5kZXggNGRkNTI4NC4u
ZWE5ZjQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKQEAgLTUwLDYgKzUwLDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBiYWNraW5nU3RvcmVXYXNDcmVhdGVkKFJlbW90ZUxheWVyQmFj
a2luZ1N0b3JlKik7CiAgICAgdm9pZCBiYWNraW5nU3RvcmVXaWxsQmVEZXN0cm95ZWQoUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmUqKTsKKyAgICB2b2lkIGJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXll
ZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSopOwogCiAgICAgTGF5ZXJIb3N0aW5nTW9kZSBsYXll
ckhvc3RpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQYWdlLT5sYXllckhvc3RpbmdNb2Rl
KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tCmluZGV4IDRjYjEwYTkuLmNmMjll
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVt
b3RlTGF5ZXJUcmVlQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0KQEAgLTg2LDYgKzg2LDExIEBAIHZv
aWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6YmFja2luZ1N0b3JlV2lsbEJlRGVzdHJveWVkKFJl
bW90ZUxheWVyQmFja2luZ1N0b3JlCiAgICAgbV9iYWNraW5nU3RvcmVDb2xsZWN0aW9uLmJhY2tp
bmdTdG9yZVdpbGxCZURlc3Ryb3llZChiYWNraW5nU3RvcmUpOwogfQogCit2b2lkIFJlbW90ZUxh
eWVyVHJlZUNvbnRleHQ6OmJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXllZChSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQoreworICAgIG1fYmFja2luZ1N0b3JlQ29sbGVjdGlv
bi5iYWNraW5nU3RvcmVXaWxsQmVEaXNwbGF5ZWQoYmFja2luZ1N0b3JlKTsKK30KKwogc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmNyZWF0ZUdy
YXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCYgY2xpZW50KQogewogICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEdyYXBoaWNzTGF5ZXJDQVJlbW90ZT4oY2xpZW50LCB0aGlzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCmluZGV4IDlmNWY3YzEuLjllY2YzMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQpAQCAtMjQ0LDYgKzI0NCw5
IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKCkKIAogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX3BlbmRpbmdCYWNraW5nU3RvcmVGbHVzaGVyIHx8IG1fcGVuZGlu
Z0JhY2tpbmdTdG9yZUZsdXNoZXItPmhhc0ZsdXNoZWQoKSk7CiAKKyAgICBSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZUNvbGxlY3Rpb24mIGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24gPSBtX3JlbW90ZUxh
eWVyVHJlZUNvbnRleHQtPmJhY2tpbmdTdG9yZUNvbGxlY3Rpb24oKTsKKyAgICBiYWNraW5nU3Rv
cmVDb2xsZWN0aW9uLndpbGxGbHVzaExheWVycygpOworCiAgICAgbV93ZWJQYWdlLT5sYXlvdXRJ
Zk5lZWRlZCgpOwogCiAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KEZsb2F0UG9pbnQoKSwgbV92
aWV3U2l6ZSk7CkBAIC0yNTIsOSArMjU1LDEwIEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWE6OmZsdXNoTGF5ZXJzKCkKICAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFt
ZSgpLnZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAg
ICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsK
IAotICAgIC8vIEZJWE1FOiBtaW5pemUgdGhlc2UgdHJhbnNhY3Rpb25zIGlmIG5vdGhpbmcgY2hh
bmdlZC4KKyAgICAvLyBGSVhNRTogTWluaW1pemUgdGhlc2UgdHJhbnNhY3Rpb25zIGlmIG5vdGhp
bmcgY2hhbmdlZC4KICAgICBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiBsYXllclRyYW5zYWN0
aW9uOwogICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+YnVpbGRUcmFuc2FjdGlvbihsYXll
clRyYW5zYWN0aW9uLCAqdG9HcmFwaGljc0xheWVyQ0FSZW1vdGUobV9yb290TGF5ZXIuZ2V0KCkp
LT5wbGF0Zm9ybUNBTGF5ZXIoKSk7CisgICAgYmFja2luZ1N0b3JlQ29sbGVjdGlvbi53aWxsQ29t
bWl0TGF5ZXJUcmVlKGxheWVyVHJhbnNhY3Rpb24pOwogICAgIG1fd2ViUGFnZS0+d2lsbENvbW1p
dExheWVyVHJlZShsYXllclRyYW5zYWN0aW9uKTsKIAogICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yVHJhbnNhY3Rpb24gc2Nyb2xsaW5nVHJhbnNhY3Rpb247CkBAIC0yNjksNiArMjczLDcg
QEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogICAgIGF1
dG8gY29tbWl0RW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8SVBDOjpNZXNzYWdlRW5jb2Rlcj4o
TWVzc2FnZXM6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OkNvbW1pdExheWVyVHJl
ZTo6cmVjZWl2ZXJOYW1lKCksIE1lc3NhZ2VzOjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5OjpDb21taXRMYXllclRyZWU6Om5hbWUoKSwgbV93ZWJQYWdlLT5wYWdlSUQoKSk7CiAgICAg
Y29tbWl0RW5jb2Rlci0+ZW5jb2RlKG1lc3NhZ2UuYXJndW1lbnRzKCkpOwogCisgICAgLy8gRklY
TUU6IE1vdmUgYWxsIGJhY2tpbmcgc3RvcmUgZmx1c2hpbmcgbWFuYWdlbWVudCB0byBSZW1vdGVM
YXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uCiAgICAgYm9vbCBoYWRBbnlDaGFuZ2VkQmFja2lu
Z1N0b3JlID0gZmFsc2U7CiAgICAgVmVjdG9yPFJldGFpblB0cjxDR0NvbnRleHRSZWY+PiBjb250
ZXh0c1RvRmx1c2g7CiAgICAgZm9yIChhdXRvJiBsYXllciA6IGxheWVyVHJhbnNhY3Rpb24uY2hh
bmdlZExheWVycygpKSB7CkBAIC0yODMsOCArMjg4LDEwIEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKCkKICAgICAgICAgbGF5ZXItPmRpZENvbW1pdCgpOwog
ICAgIH0KIAorICAgIGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uZGlkRmx1c2hMYXllcnMoKTsKKwog
ICAgIGlmIChoYWRBbnlDaGFuZ2VkQmFja2luZ1N0b3JlKQotICAgICAgICBtX3JlbW90ZUxheWVy
VHJlZUNvbnRleHQtPmJhY2tpbmdTdG9yZUNvbGxlY3Rpb24oKS5zY2hlZHVsZVB1cmdlYWJpbGl0
eVRpbWVyKCk7CisgICAgICAgIGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uc2NoZWR1bGVWb2xhdGls
aXR5VGltZXIoKTsKIAogICAgIFJlZlB0cjxCYWNraW5nU3RvcmVGbHVzaGVyPiBiYWNraW5nU3Rv
cmVGbHVzaGVyID0gQmFja2luZ1N0b3JlRmx1c2hlcjo6Y3JlYXRlKFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCksIHN0ZDo6bW92ZShjb21taXRFbmNvZGVyKSwg
c3RkOjptb3ZlKGNvbnRleHRzVG9GbHVzaCkpOwogICAgIG1fcGVuZGluZ0JhY2tpbmdTdG9yZUZs
dXNoZXIgPSBiYWNraW5nU3RvcmVGbHVzaGVyOwo=
</data>
<flag name="review"
          id="256327"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>