<?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>92976</bug_id>
          
          <creation_ts>2012-08-02 04:51:49 -0700</creation_ts>
          <short_desc>Move number localization code in LocaleICU.cpp to new class</short_desc>
          <delta_ts>2012-08-06 02:02:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>93085</blocked>
    
    <blocked>93236</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>haraken</cc>
    
    <cc>morrita</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>685224</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-02 04:51:49 -0700</bug_when>
    <thetext>Move number localization code in LocaleICU.cpp to new class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685226</commentid>
    <comment_count>1</comment_count>
      <attachid>156041</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-02 04:55:49 -0700</bug_when>
    <thetext>Created attachment 156041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685238</commentid>
    <comment_count>2</comment_count>
      <attachid>156041</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-02 05:20:58 -0700</bug_when>
    <thetext>Comment on attachment 156041
Patch

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

r- due to a wrong copyright.

&gt; Source/WebCore/platform/text/NumberLocalizer.cpp:2
&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.

2012

&gt; Source/WebCore/platform/text/NumberLocalizer.h:13
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS&apos;&apos; AND

Please use Google&apos;s copyright.

&gt; Source/WebCore/platform/text/NumberLocalizer.h:54
&gt; +    String m_positivePrefix;
&gt; +    String m_positiveSuffix;
&gt; +    String m_negativePrefix;
&gt; +    String m_negativeSuffix;
&gt; +    bool m_hasNumberLocalizerData;

It looks a bit buggy to set these values one by one in the initialization method of a sub class (i.e. LocaleICU::initializeNumberLocalizerData()).

How about implementing NumberLocalizer::initializeNumberLocalizerData(String positivePrefix, String positiveSuffix, ...) that sets all data and flips m_hasNumberLocalizerData? LocaleICU::initializeNumberLocalizerData() can call NumberLocalizer::initializeNumberLocalizerData().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685242</commentid>
    <comment_count>3</comment_count>
      <attachid>156041</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-02 05:25:55 -0700</bug_when>
    <thetext>Comment on attachment 156041
Patch

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

&gt;&gt; Source/WebCore/platform/text/NumberLocalizer.cpp:2
&gt;&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.
&gt; 
&gt; 2012

This is the copyright header of the original code. We should not replace it.
But we should add 2012 because I added some code.

&gt;&gt; Source/WebCore/platform/text/NumberLocalizer.h:13
&gt;&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS&apos;&apos; AND
&gt; 
&gt; Please use Google&apos;s copyright.

This is our standard copyright header. Please read a recent thread in our internal mail list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685255</commentid>
    <comment_count>4</comment_count>
      <attachid>156041</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-02 05:37:47 -0700</bug_when>
    <thetext>Comment on attachment 156041
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/text/NumberLocalizer.h:13
&gt;&gt;&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS&apos;&apos; AND
&gt;&gt; 
&gt;&gt; Please use Google&apos;s copyright.
&gt; 
&gt; This is our standard copyright header. Please read a recent thread in our internal mail list.

Thanks for clarification. Makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685279</commentid>
    <comment_count>5</comment_count>
      <attachid>156059</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-02 06:08:12 -0700</bug_when>
    <thetext>Created attachment 156059
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685293</commentid>
    <comment_count>6</comment_count>
      <attachid>156059</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-02 06:19:58 -0700</bug_when>
    <thetext>Comment on attachment 156059
Patch 2

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        No new tests. This is just a refactoring.

This patch is not a trivial refactoring. It would be better to list up a couple of existing tests that cover this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685447</commentid>
    <comment_count>7</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-02 08:54:21 -0700</bug_when>
    <thetext>Committed r124459: &lt;http://trac.webkit.org/changeset/124459&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156041</attachid>
            <date>2012-08-02 04:55:49 -0700</date>
            <delta_ts>2012-08-02 06:08:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92976-20120802205530.patch</filename>
            <type>text/plain</type>
            <size>18942</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NmYjFlMmY5OWQzYWJi
MDAyYWUyZDk0ZGRmZmJlYWQ0NjYyY2JlNy4uNDFjMjMwNDI3ODk5ZmRiMTlhNmQ0OGVjMDRiNzAx
ZDYzYzA3MzhiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTA4LTAyICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBNb3ZlIG51bWJlciBsb2Nh
bGl6YXRpb24gY29kZSBpbiBMb2NhbGVJQ1UuY3BwIHRvIG5ldyBjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTI5NzYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgbnVtYmVyIGxvY2FsaXphdGlv
biBjb2RlIGJ5IGNoYXJhY3RlciBtYXBwaW5nIGlzIHVzZWZ1bGwgZm9yIG5vbi1JQ1UKKyAgICAg
ICAgcGxhdGZvcm1zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBqdXN0IGEgcmVm
YWN0b3JpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBOdW1iZXJMb2NhbGl6ZXIu
e2NwcCxofS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMb2NhbGVJQ1U6OmluaXRpYWxpemVOdW1iZXJMb2NhbGl6ZXJEYXRhKToKKyAg
ICAgICAgUmVuYW1lZCBmcm9tIGluaXRpYWxpemVEZWNpbWFsRm9ybWF0LgorICAgICAgICAoV2Vi
Q29yZTo6TG9jYWxlSUNVOjpsb2NhbGl6ZWREZWNpbWFsU2VwYXJhdG9yKToKKyAgICAgICAgUmVu
YW1lIGluaXRpYWxpemVEZWNpbWFsRm9ybWF0IHRvIGluaXRpYWxpemVOdW1iZXJMb2NhbGl6ZXJE
YXRhLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmg6CisgICAgICAgIChMb2Nh
bGVJQ1UpOiBSZW1vdmUgc29tZSBtZW1iZXJzLCBhbmQgaW5oZXJpdCBOdW1iZXJMb2NhbGl6ZXIu
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9OdW1iZXJMb2NhbGl6ZXIuY3BwOiBBZGRlZC4gTW92
ZSB0aGUgY29kZSBmcm9tIExvY2FsZUlDVS5jcHAKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TnVtYmVyTG9jYWxpemVyOjp+TnVtYmVyTG9jYWxpemVyKToKKyAgICAgICAg
KFdlYkNvcmU6Ok51bWJlckxvY2FsaXplcjo6Y29udmVydFRvTG9jYWxpemVkTnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6TnVtYmVyTG9jYWxp
emVyOjpkZXRlY3RTaWduQW5kR2V0RGlnaXRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpOdW1i
ZXJMb2NhbGl6ZXI6Om1hdGNoZWREZWNpbWFsU3ltYm9sSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6TnVtYmVyTG9jYWxpemVyOjpjb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcik6CisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9OdW1iZXJMb2NhbGl6ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKE51bWJlckxvY2FsaXplcik6CisgICAgICAgIChXZWJDb3JlOjpOdW1i
ZXJMb2NhbGl6ZXI6Ok51bWJlckxvY2FsaXplcik6CisKIDIwMTItMDgtMDIgIFl1cnkgU2VtaWto
YXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogcmVu
YW1lIHJlcG9ydE1lbW9yeVVzYWdlIHRvIHJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZSBpbiBT
dHlsZVJ1bGVCYXNlIGRlc2NlbmRhbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTAwNTE2ZWM1YmMz
MDgxZmE2ZjY5NmEyNjdmMjg3ZWU3OTFjMmE1OC4uYTg5ZmQyNTFhNzk0NDUxYmE2N2U2ODhkZDgx
ZGI5MzRmYzA5Njc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDQzMSw2ICs0NDMxLDggQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlci5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlcklDVS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL3RleHQvTG9jYWxpemVkTnVtYmVyTm9uZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL3RleHQvTnVtYmVyTG9jYWxpemVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdGV4
dC9OdW1iZXJMb2NhbGl6ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9QYXJzZXJV
dGlsaXRpZXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcAppbmRleCA1MWJhNGFhMzVl
ZWM0NTRkNjFmOTRkMWE2NmJhODg4M2U5MDc5Yjc5Li5iYTQwMmM4ODg0OTBmYmYzN2M4NmI0ZjBh
OTY5NjA2YTE3YzlhYTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L0xvY2FsZUlDVS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJ
Q1UuY3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBMb2NhbGVJQ1U6OnNldERlY2ltYWxUZXh0
QXR0cmlidXRlKFN0cmluZyYgZGVzdGluYXRpb24sIFVOdW1iZXJGb3JtYXRUZXh0QXQKICAgICBk
ZXN0aW5hdGlvbiA9IFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKIH0KIAotdm9pZCBMb2NhbGVJQ1U6
OmluaXRpYWxpemVEZWNpbWFsRm9ybWF0KCkKK3ZvaWQgTG9jYWxlSUNVOjppbml0aWFsaXplTnVt
YmVyTG9jYWxpemVyRGF0YSgpCiB7CiAgICAgaWYgKG1fZGlkQ3JlYXRlRGVjaW1hbEZvcm1hdCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTM5LDEzOCArMTM5LDcgQEAgdm9pZCBMb2NhbGVJQ1U6Omlu
aXRpYWxpemVEZWNpbWFsRm9ybWF0KCkKICAgICBzZXREZWNpbWFsVGV4dEF0dHJpYnV0ZShtX25l
Z2F0aXZlUHJlZml4LCBVTlVNX05FR0FUSVZFX1BSRUZJWCk7CiAgICAgc2V0RGVjaW1hbFRleHRB
dHRyaWJ1dGUobV9uZWdhdGl2ZVN1ZmZpeCwgVU5VTV9ORUdBVElWRV9TVUZGSVgpOwogICAgIEFT
U0VSVCghbV9wb3NpdGl2ZVByZWZpeC5pc0VtcHR5KCkgfHwgIW1fcG9zaXRpdmVTdWZmaXguaXNF
bXB0eSgpIHx8ICFtX25lZ2F0aXZlUHJlZml4LmlzRW1wdHkoKSB8fCAhbV9uZWdhdGl2ZVN1ZmZp
eC5pc0VtcHR5KCkpOwotfQotCi1TdHJpbmcgTG9jYWxlSUNVOjpjb252ZXJ0VG9Mb2NhbGl6ZWRO
dW1iZXIoY29uc3QgU3RyaW5nJiBpbnB1dCkKLXsKLSAgICBpbml0aWFsaXplRGVjaW1hbEZvcm1h
dCgpOwotICAgIGlmICghbV9udW1iZXJGb3JtYXQgfHwgaW5wdXQuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gaW5wdXQ7Ci0KLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBib29sIGlzTmVnYXRp
dmUgPSBmYWxzZTsKLSAgICBVbmljb2RlU3RyaW5nIHVzdHJpbmc7Ci0gICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOwotICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KGlucHV0Lmxlbmd0aCgpKTsK
LQotICAgIGlmIChpbnB1dFswXSA9PSAnLScpIHsKLSAgICAgICAgKytpOwotICAgICAgICBpc05l
Z2F0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQobV9uZWdhdGl2ZVByZWZpeCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fcG9zaXRpdmVQcmVmaXgpOwot
Ci0gICAgZm9yICg7IGkgPCBpbnB1dC5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIHN3aXRjaCAo
aW5wdXRbaV0pIHsKLSAgICAgICAgY2FzZSAnMCc6Ci0gICAgICAgIGNhc2UgJzEnOgotICAgICAg
ICBjYXNlICcyJzoKLSAgICAgICAgY2FzZSAnMyc6Ci0gICAgICAgIGNhc2UgJzQnOgotICAgICAg
ICBjYXNlICc1JzoKLSAgICAgICAgY2FzZSAnNic6Ci0gICAgICAgIGNhc2UgJzcnOgotICAgICAg
ICBjYXNlICc4JzoKLSAgICAgICAgY2FzZSAnOSc6Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZChtX2RlY2ltYWxTeW1ib2xzW2lucHV0W2ldIC0gJzAnXSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSAnLic6Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChtX2RlY2ltYWxT
eW1ib2xzW0RlY2ltYWxTZXBhcmF0b3JJbmRleF0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGJ1aWxkZXIuYXBwZW5kKGlzTmVnYXRpdmUgPyBtX25lZ2F0aXZlU3Vm
Zml4IDogbV9wb3NpdGl2ZVN1ZmZpeCk7Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygp
OwotfQotCi1zdGF0aWMgYm9vbCBtYXRjaGVzKGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQg
cG9zaXRpb24sIGNvbnN0IFN0cmluZyYgcGFydCkKLXsKLSAgICBpZiAocGFydC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChwb3NpdGlvbiArIHBhcnQubGVuZ3RoKCkg
PiB0ZXh0Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBhcnQubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAodGV4dFtwb3Np
dGlvbiArIGldICE9IHBhcnRbaV0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIExvY2FsZUlDVTo6ZGV0ZWN0U2lnbkFuZEdldERp
Z2l0UmFuZ2UoY29uc3QgU3RyaW5nJiBpbnB1dCwgYm9vbCYgaXNOZWdhdGl2ZSwgdW5zaWduZWQm
IHN0YXJ0SW5kZXgsIHVuc2lnbmVkJiBlbmRJbmRleCkKLXsKLSAgICBzdGFydEluZGV4ID0gMDsK
LSAgICBlbmRJbmRleCA9IGlucHV0Lmxlbmd0aCgpOwotICAgIGlmIChtX25lZ2F0aXZlUHJlZml4
LmlzRW1wdHkoKSAmJiBtX25lZ2F0aXZlU3VmZml4LmlzRW1wdHkoKSkgewotICAgICAgICBpZiAo
aW5wdXQuc3RhcnRzV2l0aChtX3Bvc2l0aXZlUHJlZml4KSAmJiBpbnB1dC5lbmRzV2l0aChtX3Bv
c2l0aXZlU3VmZml4KSkgewotICAgICAgICAgICAgaXNOZWdhdGl2ZSA9IGZhbHNlOwotICAgICAg
ICAgICAgc3RhcnRJbmRleCA9IG1fcG9zaXRpdmVQcmVmaXgubGVuZ3RoKCk7Ci0gICAgICAgICAg
ICBlbmRJbmRleCAtPSBtX3Bvc2l0aXZlU3VmZml4Lmxlbmd0aCgpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGlzTmVnYXRpdmUgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChpbnB1dC5zdGFydHNXaXRoKG1fbmVnYXRpdmVQcmVmaXgpICYmIGlucHV0LmVuZHNXaXRoKG1f
bmVnYXRpdmVTdWZmaXgpKSB7Ci0gICAgICAgICAgICBpc05lZ2F0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHN0YXJ0SW5kZXggPSBtX25lZ2F0aXZlUHJlZml4Lmxlbmd0aCgpOwotICAgICAgICAg
ICAgZW5kSW5kZXggLT0gbV9uZWdhdGl2ZVN1ZmZpeC5sZW5ndGgoKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlzTmVnYXRpdmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChpbnB1
dC5zdGFydHNXaXRoKG1fcG9zaXRpdmVQcmVmaXgpICYmIGlucHV0LmVuZHNXaXRoKG1fcG9zaXRp
dmVTdWZmaXgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IG1fcG9zaXRpdmVQcmVm
aXgubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgZW5kSW5kZXggLT0gbV9wb3NpdGl2ZVN1ZmZp
eC5sZW5ndGgoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQg
TG9jYWxlSUNVOjptYXRjaGVkRGVjaW1hbFN5bWJvbEluZGV4KGNvbnN0IFN0cmluZyYgaW5wdXQs
IHVuc2lnbmVkJiBwb3NpdGlvbikKLXsKLSAgICBmb3IgKHVuc2lnbmVkIHN5bWJvbEluZGV4ID0g
MDsgc3ltYm9sSW5kZXggPCBEZWNpbWFsU3ltYm9sc1NpemU7ICsrc3ltYm9sSW5kZXgpIHsKLSAg
ICAgICAgaWYgKG1fZGVjaW1hbFN5bWJvbHNbc3ltYm9sSW5kZXhdLmxlbmd0aCgpICYmIG1hdGNo
ZXMoaW5wdXQsIHBvc2l0aW9uLCBtX2RlY2ltYWxTeW1ib2xzW3N5bWJvbEluZGV4XSkpIHsKLSAg
ICAgICAgICAgIHBvc2l0aW9uICs9IG1fZGVjaW1hbFN5bWJvbHNbc3ltYm9sSW5kZXhdLmxlbmd0
aCgpOwotICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEluZGV4OwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBEZWNpbWFsU3ltYm9sc1NpemU7Ci19Ci0KLVN0cmluZyBMb2NhbGVJQ1U6OmNv
bnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYgbG9jYWxpemVkKQotewotICAg
IGluaXRpYWxpemVEZWNpbWFsRm9ybWF0KCk7Ci0gICAgU3RyaW5nIGlucHV0ID0gbG9jYWxpemVk
LnN0cmlwV2hpdGVTcGFjZSgpOwotICAgIGlmICghbV9udW1iZXJGb3JtYXQgfHwgaW5wdXQuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gaW5wdXQ7Ci0KLSAgICBib29sIGlzTmVnYXRpdmU7Ci0g
ICAgdW5zaWduZWQgc3RhcnRJbmRleDsKLSAgICB1bnNpZ25lZCBlbmRJbmRleDsKLSAgICBpZiAo
IWRldGVjdFNpZ25BbmRHZXREaWdpdFJhbmdlKGlucHV0LCBpc05lZ2F0aXZlLCBzdGFydEluZGV4
LCBlbmRJbmRleCkpIHsKLSAgICAgICAgLy8gSW5wdXQgaXMgYnJva2VuLiBSZXR1cm5pbmcgYW4g
aW52YWxpZCBudW1iZXIgc3RyaW5nLgotICAgICAgICByZXR1cm4gIioiOwotICAgIH0KLQotICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShpbnB1
dC5sZW5ndGgoKSk7Ci0gICAgaWYgKGlzTmVnYXRpdmUpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCItIik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4Oykg
ewotICAgICAgICB1bnNpZ25lZCBzeW1ib2xJbmRleCA9IG1hdGNoZWREZWNpbWFsU3ltYm9sSW5k
ZXgoaW5wdXQsIGkpOwotICAgICAgICBpZiAoc3ltYm9sSW5kZXggPj0gRGVjaW1hbFN5bWJvbHNT
aXplKQotICAgICAgICAgICAgcmV0dXJuICIqIjsKLSAgICAgICAgaWYgKHN5bWJvbEluZGV4ID09
IERlY2ltYWxTZXBhcmF0b3JJbmRleCkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7
Ci0gICAgICAgIGVsc2UgaWYgKHN5bWJvbEluZGV4ID09IEdyb3VwU2VwYXJhdG9ySW5kZXgpIHsK
LSAgICAgICAgICAgIC8vIElnbm9yZSBncm91cCBzZXBhcmF0b3JzLgotCi0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KCcwJyArIHN5
bWJvbEluZGV4KSk7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
bV9oYXNOdW1iZXJMb2NhbGl6ZXJEYXRhID0gdHJ1ZTsKIH0KIAogYm9vbCBMb2NhbGVJQ1U6Omlu
aXRpYWxpemVTaG9ydERhdGVGb3JtYXQoKQpAQCAtNTA0LDcgKzM3Myw3IEBAIHVuc2lnbmVkIExv
Y2FsZUlDVTo6Zmlyc3REYXlPZldlZWsoKQogCiBTdHJpbmcgTG9jYWxlSUNVOjpsb2NhbGl6ZWRE
ZWNpbWFsU2VwYXJhdG9yKCkKIHsKLSAgICBpbml0aWFsaXplRGVjaW1hbEZvcm1hdCgpOworICAg
IGluaXRpYWxpemVOdW1iZXJMb2NhbGl6ZXJEYXRhKCk7CiAgICAgcmV0dXJuIG1fZGVjaW1hbFN5
bWJvbHNbRGVjaW1hbFNlcGFyYXRvckluZGV4XTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvTG9jYWxlSUNVLmgKaW5kZXggYjUwY2Y0NGNmOWU1OTBiNGUyZGRiNmQxODNkOGVhYTU3
NWU2YTUyMi4uMGE3NzQ4MGJmZDgxODE4MDJhYTJkYWYyOTJjZDc4Y2E0MGZmNDAyNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5oCkBAIC0zMiw2ICszMiw3IEBACiAj
ZGVmaW5lIExvY2FsZUlDVV9oCiAKICNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1
ZGUgIk51bWJlckxvY2FsaXplci5oIgogI2luY2x1ZGUgPHVuaWNvZGUvdWRhdC5oPgogI2luY2x1
ZGUgPHVuaWNvZGUvdW51bS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC00MywxNSAr
NDQsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBXZSBzaG91bGQgdXNlIHRoaXMgY2xh
c3Mgb25seSBmb3IgTG9jYWxpemVkTnVtYmVySUNVLmNwcCwgTG9jYWxpemVkRGF0ZUlDVS5jcHAs
CiAvLyBhbmQgTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAuCi1jbGFzcyBMb2NhbGVJQ1Ugewor
Y2xhc3MgTG9jYWxlSUNVIDogcHVibGljIE51bWJlckxvY2FsaXplciB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NPd25QdHI8TG9jYWxlSUNVPiBjcmVhdGUoY29uc3QgY2hhciogbG9jYWxlU3Ry
aW5nKTsKICAgICBzdGF0aWMgTG9jYWxlSUNVKiBjdXJyZW50TG9jYWxlKCk7Ci0gICAgfkxvY2Fs
ZUlDVSgpOworICAgIHZpcnR1YWwgfkxvY2FsZUlDVSgpOwogCi0gICAgLy8gRm9yIExvY2FsaXpl
ZE51bWJlcgotICAgIFN0cmluZyBjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoY29uc3QgU3RyaW5n
Jik7Ci0gICAgU3RyaW5nIGNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYp
OwogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQogICAgIFN0cmlu
ZyBsb2NhbGl6ZWREZWNpbWFsU2VwYXJhdG9yKCk7CiAjZW5kaWYKQEAgLTc4LDcgKzc2LDcgQEAg
cHJpdmF0ZToKICAgICBleHBsaWNpdCBMb2NhbGVJQ1UoY29uc3QgY2hhciopOwogICAgIHZvaWQg
c2V0RGVjaW1hbFN5bWJvbCh1bnNpZ25lZCBpbmRleCwgVU51bWJlckZvcm1hdFN5bWJvbCk7CiAg
ICAgdm9pZCBzZXREZWNpbWFsVGV4dEF0dHJpYnV0ZShTdHJpbmcmLCBVTnVtYmVyRm9ybWF0VGV4
dEF0dHJpYnV0ZSk7Ci0gICAgdm9pZCBpbml0aWFsaXplRGVjaW1hbEZvcm1hdCgpOworICAgIHZp
cnR1YWwgdm9pZCBpbml0aWFsaXplTnVtYmVyTG9jYWxpemVyRGF0YSgpIE9WRVJSSURFOwogCiAg
ICAgYm9vbCBkZXRlY3RTaWduQW5kR2V0RGlnaXRSYW5nZShjb25zdCBTdHJpbmcmIGlucHV0LCBi
b29sJiBpc05lZ2F0aXZlLCB1bnNpZ25lZCYgc3RhcnRJbmRleCwgdW5zaWduZWQmIGVuZEluZGV4
KTsKICAgICB1bnNpZ25lZCBtYXRjaGVkRGVjaW1hbFN5bWJvbEluZGV4KGNvbnN0IFN0cmluZyYg
aW5wdXQsIHVuc2lnbmVkJiBwb3NpdGlvbik7CkBAIC0xMDIsMTcgKzEwMCw2IEBAIHByaXZhdGU6
CiAgICAgQ1N0cmluZyBtX2xvY2FsZTsKICAgICBVTnVtYmVyRm9ybWF0KiBtX251bWJlckZvcm1h
dDsKICAgICBVRGF0ZUZvcm1hdCogbV9zaG9ydERhdGVGb3JtYXQ7Ci0gICAgZW51bSB7Ci0gICAg
ICAgIC8vIDAtOSBmb3IgZGlnaXRzLgotICAgICAgICBEZWNpbWFsU2VwYXJhdG9ySW5kZXggPSAx
MCwKLSAgICAgICAgR3JvdXBTZXBhcmF0b3JJbmRleCA9IDExLAotICAgICAgICBEZWNpbWFsU3lt
Ym9sc1NpemUKLSAgICB9OwotICAgIFN0cmluZyBtX2RlY2ltYWxTeW1ib2xzW0RlY2ltYWxTeW1i
b2xzU2l6ZV07Ci0gICAgU3RyaW5nIG1fcG9zaXRpdmVQcmVmaXg7Ci0gICAgU3RyaW5nIG1fcG9z
aXRpdmVTdWZmaXg7Ci0gICAgU3RyaW5nIG1fbmVnYXRpdmVQcmVmaXg7Ci0gICAgU3RyaW5nIG1f
bmVnYXRpdmVTdWZmaXg7CiAgICAgYm9vbCBtX2RpZENyZWF0ZURlY2ltYWxGb3JtYXQ7CiAgICAg
Ym9vbCBtX2RpZENyZWF0ZVNob3J0RGF0ZUZvcm1hdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9OdW1iZXJMb2NhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9OdW1iZXJMb2NhbGl6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkZDg3ZGQ4ZTZl
MGRiNjQxMTE5MGNmOTZlOTFmY2NiMjk2MTQwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L051bWJlckxvY2FsaXplci5jcHAKQEAgLTAsMCArMSwxNzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTnVtYmVyTG9jYWxpemVyLmgiCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworTnVtYmVyTG9jYWxpemVyOjp+TnVtYmVyTG9jYWxpemVyKCkKK3sKK30KKworU3RyaW5nIE51
bWJlckxvY2FsaXplcjo6Y29udmVydFRvTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYgaW5w
dXQpCit7CisgICAgaW5pdGlhbGl6ZU51bWJlckxvY2FsaXplckRhdGEoKTsKKyAgICBpZiAoIW1f
aGFzTnVtYmVyTG9jYWxpemVyRGF0YSB8fCBpbnB1dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBpbnB1dDsKKworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGJvb2wgaXNOZWdhdGl2ZSA9IGZh
bHNlOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLnJlc2VydmVDYXBh
Y2l0eShpbnB1dC5sZW5ndGgoKSk7CisKKyAgICBpZiAoaW5wdXRbMF0gPT0gJy0nKSB7CisgICAg
ICAgICsraTsKKyAgICAgICAgaXNOZWdhdGl2ZSA9IHRydWU7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKG1fbmVnYXRpdmVQcmVmaXgpOworICAgIH0gZWxzZQorICAgICAgICBidWlsZGVyLmFwcGVu
ZChtX3Bvc2l0aXZlUHJlZml4KTsKKworICAgIGZvciAoOyBpIDwgaW5wdXQubGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICBzd2l0Y2ggKGlucHV0W2ldKSB7CisgICAgICAgIGNhc2UgJzAnOgorICAg
ICAgICBjYXNlICcxJzoKKyAgICAgICAgY2FzZSAnMic6CisgICAgICAgIGNhc2UgJzMnOgorICAg
ICAgICBjYXNlICc0JzoKKyAgICAgICAgY2FzZSAnNSc6CisgICAgICAgIGNhc2UgJzYnOgorICAg
ICAgICBjYXNlICc3JzoKKyAgICAgICAgY2FzZSAnOCc6CisgICAgICAgIGNhc2UgJzknOgorICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQobV9kZWNpbWFsU3ltYm9sc1tpbnB1dFtpXSAtICcwJ10p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy4nOgorICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQobV9kZWNpbWFsU3ltYm9sc1tEZWNpbWFsU2VwYXJhdG9ySW5kZXhdKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBidWlsZGVyLmFwcGVuZChpc05l
Z2F0aXZlID8gbV9uZWdhdGl2ZVN1ZmZpeCA6IG1fcG9zaXRpdmVTdWZmaXgpOworCisgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworc3RhdGljIGJvb2wgbWF0Y2hlcyhjb25zdCBT
dHJpbmcmIHRleHQsIHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIHBhcnQpCit7Cisg
ICAgaWYgKHBhcnQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocG9z
aXRpb24gKyBwYXJ0Lmxlbmd0aCgpID4gdGV4dC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJ0Lmxlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgaWYgKHRleHRbcG9zaXRpb24gKyBpXSAhPSBwYXJ0W2ldKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOdW1iZXJM
b2NhbGl6ZXI6OmRldGVjdFNpZ25BbmRHZXREaWdpdFJhbmdlKGNvbnN0IFN0cmluZyYgaW5wdXQs
IGJvb2wmIGlzTmVnYXRpdmUsIHVuc2lnbmVkJiBzdGFydEluZGV4LCB1bnNpZ25lZCYgZW5kSW5k
ZXgpCit7CisgICAgc3RhcnRJbmRleCA9IDA7CisgICAgZW5kSW5kZXggPSBpbnB1dC5sZW5ndGgo
KTsKKyAgICBpZiAobV9uZWdhdGl2ZVByZWZpeC5pc0VtcHR5KCkgJiYgbV9uZWdhdGl2ZVN1ZmZp
eC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgobV9wb3NpdGl2ZVBy
ZWZpeCkgJiYgaW5wdXQuZW5kc1dpdGgobV9wb3NpdGl2ZVN1ZmZpeCkpIHsKKyAgICAgICAgICAg
IGlzTmVnYXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBtX3Bvc2l0aXZl
UHJlZml4Lmxlbmd0aCgpOworICAgICAgICAgICAgZW5kSW5kZXggLT0gbV9wb3NpdGl2ZVN1ZmZp
eC5sZW5ndGgoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpc05lZ2F0aXZlID0gdHJ1
ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChtX25lZ2F0aXZl
UHJlZml4KSAmJiBpbnB1dC5lbmRzV2l0aChtX25lZ2F0aXZlU3VmZml4KSkgeworICAgICAgICAg
ICAgaXNOZWdhdGl2ZSA9IHRydWU7CisgICAgICAgICAgICBzdGFydEluZGV4ID0gbV9uZWdhdGl2
ZVByZWZpeC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGVuZEluZGV4IC09IG1fbmVnYXRpdmVTdWZm
aXgubGVuZ3RoKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpc05lZ2F0aXZlID0g
ZmFsc2U7CisgICAgICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChtX3Bvc2l0aXZlUHJlZml4
KSAmJiBpbnB1dC5lbmRzV2l0aChtX3Bvc2l0aXZlU3VmZml4KSkgeworICAgICAgICAgICAgICAg
IHN0YXJ0SW5kZXggPSBtX3Bvc2l0aXZlUHJlZml4Lmxlbmd0aCgpOworICAgICAgICAgICAgICAg
IGVuZEluZGV4IC09IG1fcG9zaXRpdmVTdWZmaXgubGVuZ3RoKCk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIE51bWJlckxvY2FsaXplcjo6bWF0Y2hlZERlY2lt
YWxTeW1ib2xJbmRleChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCYgcG9zaXRpb24pCit7
CisgICAgZm9yICh1bnNpZ25lZCBzeW1ib2xJbmRleCA9IDA7IHN5bWJvbEluZGV4IDwgRGVjaW1h
bFN5bWJvbHNTaXplOyArK3N5bWJvbEluZGV4KSB7CisgICAgICAgIGlmIChtX2RlY2ltYWxTeW1i
b2xzW3N5bWJvbEluZGV4XS5sZW5ndGgoKSAmJiBtYXRjaGVzKGlucHV0LCBwb3NpdGlvbiwgbV9k
ZWNpbWFsU3ltYm9sc1tzeW1ib2xJbmRleF0pKSB7CisgICAgICAgICAgICBwb3NpdGlvbiArPSBt
X2RlY2ltYWxTeW1ib2xzW3N5bWJvbEluZGV4XS5sZW5ndGgoKTsKKyAgICAgICAgICAgIHJldHVy
biBzeW1ib2xJbmRleDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRGVjaW1hbFN5bWJv
bHNTaXplOworfQorCitTdHJpbmcgTnVtYmVyTG9jYWxpemVyOjpjb252ZXJ0RnJvbUxvY2FsaXpl
ZE51bWJlcihjb25zdCBTdHJpbmcmIGxvY2FsaXplZCkKK3sKKyAgICBpbml0aWFsaXplTnVtYmVy
TG9jYWxpemVyRGF0YSgpOworICAgIFN0cmluZyBpbnB1dCA9IGxvY2FsaXplZC5zdHJpcFdoaXRl
U3BhY2UoKTsKKyAgICBpZiAoIW1faGFzTnVtYmVyTG9jYWxpemVyRGF0YSB8fCBpbnB1dC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBpbnB1dDsKKworICAgIGJvb2wgaXNOZWdhdGl2ZTsKKyAg
ICB1bnNpZ25lZCBzdGFydEluZGV4OworICAgIHVuc2lnbmVkIGVuZEluZGV4OworICAgIGlmICgh
ZGV0ZWN0U2lnbkFuZEdldERpZ2l0UmFuZ2UoaW5wdXQsIGlzTmVnYXRpdmUsIHN0YXJ0SW5kZXgs
IGVuZEluZGV4KSkgeworICAgICAgICAvLyBJbnB1dCBpcyBicm9rZW4uIFJldHVybmluZyBhbiBp
bnZhbGlkIG51bWJlciBzdHJpbmcuCisgICAgICAgIHJldHVybiAiKiI7CisgICAgfQorCisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KGlucHV0
Lmxlbmd0aCgpKTsKKyAgICBpZiAoaXNOZWdhdGl2ZSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
Ii0iKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7KSB7
CisgICAgICAgIHVuc2lnbmVkIHN5bWJvbEluZGV4ID0gbWF0Y2hlZERlY2ltYWxTeW1ib2xJbmRl
eChpbnB1dCwgaSk7CisgICAgICAgIGlmIChzeW1ib2xJbmRleCA+PSBEZWNpbWFsU3ltYm9sc1Np
emUpCisgICAgICAgICAgICByZXR1cm4gIioiOworICAgICAgICBpZiAoc3ltYm9sSW5kZXggPT0g
RGVjaW1hbFNlcGFyYXRvckluZGV4KQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJy4nKTsK
KyAgICAgICAgZWxzZSBpZiAoc3ltYm9sSW5kZXggPT0gR3JvdXBTZXBhcmF0b3JJbmRleCkgewor
ICAgICAgICAgICAgLy8gSWdub3JlIGdyb3VwIHNlcGFyYXRvcnMuCisKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oJzAnICsgc3lt
Ym9sSW5kZXgpKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9OdW1iZXJMb2NhbGl6
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTnVtYmVyTG9jYWxpemVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWIwNGI1OGYwOGQyYjgyZWMyNTA5ZGFhZGRmNjBhYjU4YTZkZDQ2OQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTnVtYmVyTG9jYWxpemVy
LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAq
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAq
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICovCisKKyNpZm5kZWYgTnVtYmVyTG9j
YWxpemVyX2gKKyNkZWZpbmUgTnVtYmVyTG9jYWxpemVyX2gKKworI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE51bWJlckxvY2Fs
aXplciB7CitwdWJsaWM6CisgICAgU3RyaW5nIGNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihjb25z
dCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgY29udmVydEZyb21Mb2NhbGl6ZWROdW1iZXIoY29uc3Qg
U3RyaW5nJik7CisgICAgdmlydHVhbCB+TnVtYmVyTG9jYWxpemVyKCk7CisKK3Byb3RlY3RlZDoK
KyAgICBOdW1iZXJMb2NhbGl6ZXIoKSA6IG1faGFzTnVtYmVyTG9jYWxpemVyRGF0YShmYWxzZSkg
eyB9CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVOdW1iZXJMb2NhbGl6ZXJEYXRhKCkgPSAw
OworCisgICAgZW51bSB7CisgICAgICAgIC8vIDAtOSBmb3IgZGlnaXRzLgorICAgICAgICBEZWNp
bWFsU2VwYXJhdG9ySW5kZXggPSAxMCwKKyAgICAgICAgR3JvdXBTZXBhcmF0b3JJbmRleCA9IDEx
LAorICAgICAgICBEZWNpbWFsU3ltYm9sc1NpemUKKyAgICB9OworICAgIFN0cmluZyBtX2RlY2lt
YWxTeW1ib2xzW0RlY2ltYWxTeW1ib2xzU2l6ZV07CisgICAgU3RyaW5nIG1fcG9zaXRpdmVQcmVm
aXg7CisgICAgU3RyaW5nIG1fcG9zaXRpdmVTdWZmaXg7CisgICAgU3RyaW5nIG1fbmVnYXRpdmVQ
cmVmaXg7CisgICAgU3RyaW5nIG1fbmVnYXRpdmVTdWZmaXg7CisgICAgYm9vbCBtX2hhc051bWJl
ckxvY2FsaXplckRhdGE7CisKK3ByaXZhdGU6CisgICAgYm9vbCBkZXRlY3RTaWduQW5kR2V0RGln
aXRSYW5nZShjb25zdCBTdHJpbmcmIGlucHV0LCBib29sJiBpc05lZ2F0aXZlLCB1bnNpZ25lZCYg
c3RhcnRJbmRleCwgdW5zaWduZWQmIGVuZEluZGV4KTsKKyAgICB1bnNpZ25lZCBtYXRjaGVkRGVj
aW1hbFN5bWJvbEluZGV4KGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkJiBwb3NpdGlvbik7
Cit9OworCit9CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156059</attachid>
            <date>2012-08-02 06:08:12 -0700</date>
            <delta_ts>2012-08-02 06:19:58 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-92976-20120802220752.patch</filename>
            <type>text/plain</type>
            <size>24749</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NmYjFlMmY5OWQzYWJi
MDAyYWUyZDk0ZGRmZmJlYWQ0NjYyY2JlNy4uYmNkMDA4MGRjMTMxZjBiZWYyMDRhZGI5NWE4NmE5
YjgyMzc0OTdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA4LTAyICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBNb3ZlIG51bWJlciBsb2Nh
bGl6YXRpb24gY29kZSBpbiBMb2NhbGVJQ1UuY3BwIHRvIG5ldyBjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTI5NzYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgbnVtYmVyIGxvY2FsaXphdGlv
biBjb2RlIGJ5IGNoYXJhY3RlciBtYXBwaW5nIGlzIHVzZWZ1bGwgZm9yIG5vbi1JQ1UKKyAgICAg
ICAgcGxhdGZvcm1zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBqdXN0IGEgcmVm
YWN0b3JpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBOdW1iZXJMb2NhbGl6ZXIu
e2NwcCxofS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMb2NhbGVJQ1U6OmRlY2ltYWxTeW1ib2wpOgorICAgICAgICBSZW5hbWVkIGZy
b20gc2V0RGVjaW1hbFN5bWJvbC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXN1bHRhbnQK
KyAgICAgICAgc3RyaW5nIGluc3RlYWQgb2Ygc2V0dGluZyBpdCB0byBhIGRhdGEgbWVtYmVyLgor
ICAgICAgICAoV2ViQ29yZTo6TG9jYWxlSUNVOjpkZWNpbWFsVGV4dEF0dHJpYnV0ZSk6CisgICAg
ICAgIFJlbmFtZWQgZnJvbSBzZXREZWNpbWFsVGV4dEF0dHJpYnV0ZWwuIFRoaXMgZnVuY3Rpb24g
cmV0dXJucyB0aGUKKyAgICAgICAgcmVzdWx0YW50IHN0cmluZyBpbnN0ZWFkIG9mIHNldHRpbmcg
aXQgdG8gdGhlIHNwZWNpZmllZCBzdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVJQ1U6
OmluaXRpYWxpemVOdW1iZXJMb2NhbGl6ZXJEYXRhKToKKyAgICAgICAgUmVuYW1lZCBmcm9tIGlu
aXRpYWxpemVEZWNpbWFsRm9ybWF0LgorICAgICAgICBDYWxscyBOdW1iZXJMb2NhaXplcjo6c2V0
TnVtYmVyTG9jYWxpemVyRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZUlDVTo6bG9jYWxp
emVkRGVjaW1hbFNlcGFyYXRvcik6CisgICAgICAgIFJlbmFtZSBpbml0aWFsaXplRGVjaW1hbEZv
cm1hdCB0byBpbml0aWFsaXplTnVtYmVyTG9jYWxpemVyRGF0YS4KKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L0xvY2FsZUlDVS5oOgorICAgICAgICAoTG9jYWxlSUNVKTogUmVtb3ZlIHNvbWUgbWVt
YmVycywgYW5kIGluaGVyaXQgTnVtYmVyTG9jYWxpemVyLgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvTnVtYmVyTG9jYWxpemVyLmNwcDogQWRkZWQuIE1vdmUgdGhlIGNvZGUgZnJvbSBMb2NhbGVJ
Q1UuY3BwCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlckxvY2Fs
aXplcjo6fk51bWJlckxvY2FsaXplcik6CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJMb2NhbGl6
ZXI6OnNldE51bWJlckxvY2FsaXplckRhdGEpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51
bWJlckxvY2FsaXplcjo6Y29udmVydFRvTG9jYWxpemVkTnVtYmVyKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6TnVtYmVyTG9jYWxpemVyOjpkZXRlY3RT
aWduQW5kR2V0RGlnaXRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJMb2NhbGl6ZXI6
Om1hdGNoZWREZWNpbWFsU3ltYm9sSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6TnVtYmVyTG9j
YWxpemVyOjpjb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpO
dW1iZXJMb2NhbGl6ZXI6OmxvY2FsaXplZERlY2ltYWxTZXBhcmF0b3IpOgorICAgICAgICAqIHBs
YXRmb3JtL3RleHQvTnVtYmVyTG9jYWxpemVyLmg6IEFkZGVkLgorICAgICAgICAoTnVtYmVyTG9j
YWxpemVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlckxvY2FsaXplcjo6TnVtYmVyTG9jYWxp
emVyKToKKwogMjAxMi0wOC0wMiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW5hbWUgcmVwb3J0TWVtb3J5VXNhZ2UgdG8g
cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlIGluIFN0eWxlUnVsZUJhc2UgZGVzY2VuZGFudHMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCA5MDA1MTZlYzViYzMwODFmYTZmNjk2YTI2N2YyODdlZTc5MWMy
YTU4Li5hODlmZDI1MWE3OTQ0NTFiYTY3ZTY4OGRkODFkYjkzNGZjMDk2Nzc2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC00NDMxLDYgKzQ0MzEsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQv
TG9jYWxpemVkTnVtYmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvTG9jYWxpemVk
TnVtYmVySUNVLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1i
ZXJOb25lLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9OdW1iZXJMb2NhbGl6ZXIu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L051bWJlckxvY2FsaXplci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L1BhcnNlclV0aWxpdGllcy5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9Mb2NhbGVJQ1UuY3BwCmluZGV4IDUxYmE0YWEzNWVlYzQ1NGQ2MWY5NGQxYTY2YmE4ODgzZTkw
NzliNzkuLjBhYmUxMmNlM2JiZmJkMDNiMWZiMDVjZDYxNTI2MzhlNDQ1ZWExMWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtODEsMzggKzgxLDM4
IEBAIExvY2FsZUlDVSogTG9jYWxlSUNVOjpjdXJyZW50TG9jYWxlKCkKICAgICByZXR1cm4gY3Vy
cmVudExvY2FsZTsKIH0KIAotdm9pZCBMb2NhbGVJQ1U6OnNldERlY2ltYWxTeW1ib2wodW5zaWdu
ZWQgaW5kZXgsIFVOdW1iZXJGb3JtYXRTeW1ib2wgc3ltYm9sKQorU3RyaW5nIExvY2FsZUlDVTo6
ZGVjaW1hbFN5bWJvbChVTnVtYmVyRm9ybWF0U3ltYm9sIHN5bWJvbCkKIHsKICAgICBVRXJyb3JD
b2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICBpbnQzMl90IGJ1ZmZlckxlbmd0aCA9IHVu
dW1fZ2V0U3ltYm9sKG1fbnVtYmVyRm9ybWF0LCBzeW1ib2wsIDAsIDAsICZzdGF0dXMpOwogICAg
IEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSB8fCBzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1df
RVJST1IpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSAmJiBzdGF0dXMgIT0gVV9CVUZGRVJf
T1ZFUkZMT1dfRVJST1IpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKGJ1ZmZlckxlbmd0aCk7CiAgICAgc3RhdHVzID0g
VV9aRVJPX0VSUk9SOwogICAgIHVudW1fZ2V0U3ltYm9sKG1fbnVtYmVyRm9ybWF0LCBzeW1ib2ws
IGJ1ZmZlci5kYXRhKCksIGJ1ZmZlckxlbmd0aCwgJnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVS
RShzdGF0dXMpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9kZWNpbWFsU3ltYm9sc1tpbmRleF0g
PSBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOwogfQogCi12b2lkIExvY2FsZUlDVTo6c2V0RGVj
aW1hbFRleHRBdHRyaWJ1dGUoU3RyaW5nJiBkZXN0aW5hdGlvbiwgVU51bWJlckZvcm1hdFRleHRB
dHRyaWJ1dGUgdGFnKQorU3RyaW5nIExvY2FsZUlDVTo6ZGVjaW1hbFRleHRBdHRyaWJ1dGUoVU51
bWJlckZvcm1hdFRleHRBdHRyaWJ1dGUgdGFnKQogewogICAgIFVFcnJvckNvZGUgc3RhdHVzID0g
VV9aRVJPX0VSUk9SOwogICAgIGludDMyX3QgYnVmZmVyTGVuZ3RoID0gdW51bV9nZXRUZXh0QXR0
cmlidXRlKG1fbnVtYmVyRm9ybWF0LCB0YWcsIDAsIDAsICZzdGF0dXMpOwogICAgIEFTU0VSVChV
X1NVQ0NFU1Moc3RhdHVzKSB8fCBzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOwog
ICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSAmJiBzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1df
RVJST1IpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIFZl
Y3RvcjxVQ2hhcj4gYnVmZmVyKGJ1ZmZlckxlbmd0aCk7CiAgICAgc3RhdHVzID0gVV9aRVJPX0VS
Uk9SOwogICAgIHVudW1fZ2V0VGV4dEF0dHJpYnV0ZShtX251bWJlckZvcm1hdCwgdGFnLCBidWZm
ZXIuZGF0YSgpLCBidWZmZXJMZW5ndGgsICZzdGF0dXMpOwogICAgIEFTU0VSVChVX1NVQ0NFU1Mo
c3RhdHVzKSk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQotICAgICAgICByZXR1cm47Ci0g
ICAgZGVzdGluYXRpb24gPSBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOwogfQogCi12b2lkIExv
Y2FsZUlDVTo6aW5pdGlhbGl6ZURlY2ltYWxGb3JtYXQoKQordm9pZCBMb2NhbGVJQ1U6OmluaXRp
YWxpemVOdW1iZXJMb2NhbGl6ZXJEYXRhKCkKIHsKICAgICBpZiAobV9kaWRDcmVhdGVEZWNpbWFs
Rm9ybWF0KQogICAgICAgICByZXR1cm47CkBAIC0xMjIsMTU1ICsxMjIsMjEgQEAgdm9pZCBMb2Nh
bGVJQ1U6OmluaXRpYWxpemVEZWNpbWFsRm9ybWF0KCkKICAgICBpZiAoIVVfU1VDQ0VTUyhzdGF0
dXMpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXREZWNpbWFsU3ltYm9sKDAsIFVOVU1fWkVS
T19ESUdJVF9TWU1CT0wpOwotICAgIHNldERlY2ltYWxTeW1ib2woMSwgVU5VTV9PTkVfRElHSVRf
U1lNQk9MKTsKLSAgICBzZXREZWNpbWFsU3ltYm9sKDIsIFVOVU1fVFdPX0RJR0lUX1NZTUJPTCk7
Ci0gICAgc2V0RGVjaW1hbFN5bWJvbCgzLCBVTlVNX1RIUkVFX0RJR0lUX1NZTUJPTCk7Ci0gICAg
c2V0RGVjaW1hbFN5bWJvbCg0LCBVTlVNX0ZPVVJfRElHSVRfU1lNQk9MKTsKLSAgICBzZXREZWNp
bWFsU3ltYm9sKDUsIFVOVU1fRklWRV9ESUdJVF9TWU1CT0wpOwotICAgIHNldERlY2ltYWxTeW1i
b2woNiwgVU5VTV9TSVhfRElHSVRfU1lNQk9MKTsKLSAgICBzZXREZWNpbWFsU3ltYm9sKDcsIFVO
VU1fU0VWRU5fRElHSVRfU1lNQk9MKTsKLSAgICBzZXREZWNpbWFsU3ltYm9sKDgsIFVOVU1fRUlH
SFRfRElHSVRfU1lNQk9MKTsKLSAgICBzZXREZWNpbWFsU3ltYm9sKDksIFVOVU1fTklORV9ESUdJ
VF9TWU1CT0wpOwotICAgIHNldERlY2ltYWxTeW1ib2woRGVjaW1hbFNlcGFyYXRvckluZGV4LCBV
TlVNX0RFQ0lNQUxfU0VQQVJBVE9SX1NZTUJPTCk7Ci0gICAgc2V0RGVjaW1hbFN5bWJvbChHcm91
cFNlcGFyYXRvckluZGV4LCBVTlVNX0dST1VQSU5HX1NFUEFSQVRPUl9TWU1CT0wpOwotICAgIHNl
dERlY2ltYWxUZXh0QXR0cmlidXRlKG1fcG9zaXRpdmVQcmVmaXgsIFVOVU1fUE9TSVRJVkVfUFJF
RklYKTsKLSAgICBzZXREZWNpbWFsVGV4dEF0dHJpYnV0ZShtX3Bvc2l0aXZlU3VmZml4LCBVTlVN
X1BPU0lUSVZFX1NVRkZJWCk7Ci0gICAgc2V0RGVjaW1hbFRleHRBdHRyaWJ1dGUobV9uZWdhdGl2
ZVByZWZpeCwgVU5VTV9ORUdBVElWRV9QUkVGSVgpOwotICAgIHNldERlY2ltYWxUZXh0QXR0cmli
dXRlKG1fbmVnYXRpdmVTdWZmaXgsIFVOVU1fTkVHQVRJVkVfU1VGRklYKTsKLSAgICBBU1NFUlQo
IW1fcG9zaXRpdmVQcmVmaXguaXNFbXB0eSgpIHx8ICFtX3Bvc2l0aXZlU3VmZml4LmlzRW1wdHko
KSB8fCAhbV9uZWdhdGl2ZVByZWZpeC5pc0VtcHR5KCkgfHwgIW1fbmVnYXRpdmVTdWZmaXguaXNF
bXB0eSgpKTsKLX0KLQotU3RyaW5nIExvY2FsZUlDVTo6Y29udmVydFRvTG9jYWxpemVkTnVtYmVy
KGNvbnN0IFN0cmluZyYgaW5wdXQpCi17Ci0gICAgaW5pdGlhbGl6ZURlY2ltYWxGb3JtYXQoKTsK
LSAgICBpZiAoIW1fbnVtYmVyRm9ybWF0IHx8IGlucHV0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGlucHV0OwotCi0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgYm9vbCBpc05lZ2F0aXZlID0g
ZmFsc2U7Ci0gICAgVW5pY29kZVN0cmluZyB1c3RyaW5nOwotICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKLSAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShpbnB1dC5sZW5ndGgoKSk7Ci0KLSAg
ICBpZiAoaW5wdXRbMF0gPT0gJy0nKSB7Ci0gICAgICAgICsraTsKLSAgICAgICAgaXNOZWdhdGl2
ZSA9IHRydWU7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fbmVnYXRpdmVQcmVmaXgpOwotICAg
IH0gZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVuZChtX3Bvc2l0aXZlUHJlZml4KTsKLQotICAg
IGZvciAoOyBpIDwgaW5wdXQubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBzd2l0Y2ggKGlucHV0
W2ldKSB7Ci0gICAgICAgIGNhc2UgJzAnOgotICAgICAgICBjYXNlICcxJzoKLSAgICAgICAgY2Fz
ZSAnMic6Ci0gICAgICAgIGNhc2UgJzMnOgotICAgICAgICBjYXNlICc0JzoKLSAgICAgICAgY2Fz
ZSAnNSc6Ci0gICAgICAgIGNhc2UgJzYnOgotICAgICAgICBjYXNlICc3JzoKLSAgICAgICAgY2Fz
ZSAnOCc6Ci0gICAgICAgIGNhc2UgJzknOgotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobV9k
ZWNpbWFsU3ltYm9sc1tpbnB1dFtpXSAtICcwJ10pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgJy4nOgotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobV9kZWNpbWFsU3ltYm9s
c1tEZWNpbWFsU2VwYXJhdG9ySW5kZXhdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBidWlsZGVyLmFwcGVuZChpc05lZ2F0aXZlID8gbV9uZWdhdGl2ZVN1ZmZpeCA6
IG1fcG9zaXRpdmVTdWZmaXgpOwotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0K
LQotc3RhdGljIGJvb2wgbWF0Y2hlcyhjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIHBvc2l0
aW9uLCBjb25zdCBTdHJpbmcmIHBhcnQpCi17Ci0gICAgaWYgKHBhcnQuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAocG9zaXRpb24gKyBwYXJ0Lmxlbmd0aCgpID4gdGV4
dC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBwYXJ0Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHRleHRbcG9zaXRpb24g
KyBpXSAhPSBwYXJ0W2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMb2NhbGVJQ1U6OmRldGVjdFNpZ25BbmRHZXREaWdpdFJh
bmdlKGNvbnN0IFN0cmluZyYgaW5wdXQsIGJvb2wmIGlzTmVnYXRpdmUsIHVuc2lnbmVkJiBzdGFy
dEluZGV4LCB1bnNpZ25lZCYgZW5kSW5kZXgpCi17Ci0gICAgc3RhcnRJbmRleCA9IDA7Ci0gICAg
ZW5kSW5kZXggPSBpbnB1dC5sZW5ndGgoKTsKLSAgICBpZiAobV9uZWdhdGl2ZVByZWZpeC5pc0Vt
cHR5KCkgJiYgbV9uZWdhdGl2ZVN1ZmZpeC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKGlucHV0
LnN0YXJ0c1dpdGgobV9wb3NpdGl2ZVByZWZpeCkgJiYgaW5wdXQuZW5kc1dpdGgobV9wb3NpdGl2
ZVN1ZmZpeCkpIHsKLSAgICAgICAgICAgIGlzTmVnYXRpdmUgPSBmYWxzZTsKLSAgICAgICAgICAg
IHN0YXJ0SW5kZXggPSBtX3Bvc2l0aXZlUHJlZml4Lmxlbmd0aCgpOwotICAgICAgICAgICAgZW5k
SW5kZXggLT0gbV9wb3NpdGl2ZVN1ZmZpeC5sZW5ndGgoKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBpc05lZ2F0aXZlID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoaW5w
dXQuc3RhcnRzV2l0aChtX25lZ2F0aXZlUHJlZml4KSAmJiBpbnB1dC5lbmRzV2l0aChtX25lZ2F0
aXZlU3VmZml4KSkgewotICAgICAgICAgICAgaXNOZWdhdGl2ZSA9IHRydWU7Ci0gICAgICAgICAg
ICBzdGFydEluZGV4ID0gbV9uZWdhdGl2ZVByZWZpeC5sZW5ndGgoKTsKLSAgICAgICAgICAgIGVu
ZEluZGV4IC09IG1fbmVnYXRpdmVTdWZmaXgubGVuZ3RoKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpc05lZ2F0aXZlID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoaW5wdXQuc3Rh
cnRzV2l0aChtX3Bvc2l0aXZlUHJlZml4KSAmJiBpbnB1dC5lbmRzV2l0aChtX3Bvc2l0aXZlU3Vm
Zml4KSkgewotICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBtX3Bvc2l0aXZlUHJlZml4Lmxl
bmd0aCgpOwotICAgICAgICAgICAgICAgIGVuZEluZGV4IC09IG1fcG9zaXRpdmVTdWZmaXgubGVu
Z3RoKCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVkIExvY2Fs
ZUlDVTo6bWF0Y2hlZERlY2ltYWxTeW1ib2xJbmRleChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNp
Z25lZCYgcG9zaXRpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBzeW1ib2xJbmRleCA9IDA7IHN5
bWJvbEluZGV4IDwgRGVjaW1hbFN5bWJvbHNTaXplOyArK3N5bWJvbEluZGV4KSB7Ci0gICAgICAg
IGlmIChtX2RlY2ltYWxTeW1ib2xzW3N5bWJvbEluZGV4XS5sZW5ndGgoKSAmJiBtYXRjaGVzKGlu
cHV0LCBwb3NpdGlvbiwgbV9kZWNpbWFsU3ltYm9sc1tzeW1ib2xJbmRleF0pKSB7Ci0gICAgICAg
ICAgICBwb3NpdGlvbiArPSBtX2RlY2ltYWxTeW1ib2xzW3N5bWJvbEluZGV4XS5sZW5ndGgoKTsK
LSAgICAgICAgICAgIHJldHVybiBzeW1ib2xJbmRleDsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gRGVjaW1hbFN5bWJvbHNTaXplOwotfQotCi1TdHJpbmcgTG9jYWxlSUNVOjpjb252ZXJ0
RnJvbUxvY2FsaXplZE51bWJlcihjb25zdCBTdHJpbmcmIGxvY2FsaXplZCkKLXsKLSAgICBpbml0
aWFsaXplRGVjaW1hbEZvcm1hdCgpOwotICAgIFN0cmluZyBpbnB1dCA9IGxvY2FsaXplZC5zdHJp
cFdoaXRlU3BhY2UoKTsKLSAgICBpZiAoIW1fbnVtYmVyRm9ybWF0IHx8IGlucHV0LmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIGlucHV0OwotCi0gICAgYm9vbCBpc05lZ2F0aXZlOwotICAgIHVu
c2lnbmVkIHN0YXJ0SW5kZXg7Ci0gICAgdW5zaWduZWQgZW5kSW5kZXg7Ci0gICAgaWYgKCFkZXRl
Y3RTaWduQW5kR2V0RGlnaXRSYW5nZShpbnB1dCwgaXNOZWdhdGl2ZSwgc3RhcnRJbmRleCwgZW5k
SW5kZXgpKSB7Ci0gICAgICAgIC8vIElucHV0IGlzIGJyb2tlbi4gUmV0dXJuaW5nIGFuIGludmFs
aWQgbnVtYmVyIHN0cmluZy4KLSAgICAgICAgcmV0dXJuICIqIjsKLSAgICB9Ci0KLSAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkoaW5wdXQubGVu
Z3RoKCkpOwotICAgIGlmIChpc05lZ2F0aXZlKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiLSIp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDspIHsKLSAg
ICAgICAgdW5zaWduZWQgc3ltYm9sSW5kZXggPSBtYXRjaGVkRGVjaW1hbFN5bWJvbEluZGV4KGlu
cHV0LCBpKTsKLSAgICAgICAgaWYgKHN5bWJvbEluZGV4ID49IERlY2ltYWxTeW1ib2xzU2l6ZSkK
LSAgICAgICAgICAgIHJldHVybiAiKiI7Ci0gICAgICAgIGlmIChzeW1ib2xJbmRleCA9PSBEZWNp
bWFsU2VwYXJhdG9ySW5kZXgpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnLicpOwotICAg
ICAgICBlbHNlIGlmIChzeW1ib2xJbmRleCA9PSBHcm91cFNlcGFyYXRvckluZGV4KSB7Ci0gICAg
ICAgICAgICAvLyBJZ25vcmUgZ3JvdXAgc2VwYXJhdG9ycy4KLQotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPignMCcgKyBzeW1ib2xJ
bmRleCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworICAgIFZlY3Rv
cjxTdHJpbmcsIERlY2ltYWxTeW1ib2xzU2l6ZT4gc3ltYm9sczsKKyAgICBzeW1ib2xzLmFwcGVu
ZChkZWNpbWFsU3ltYm9sKFVOVU1fWkVST19ESUdJVF9TWU1CT0wpKTsKKyAgICBzeW1ib2xzLmFw
cGVuZChkZWNpbWFsU3ltYm9sKFVOVU1fT05FX0RJR0lUX1NZTUJPTCkpOworICAgIHN5bWJvbHMu
YXBwZW5kKGRlY2ltYWxTeW1ib2woVU5VTV9UV09fRElHSVRfU1lNQk9MKSk7CisgICAgc3ltYm9s
cy5hcHBlbmQoZGVjaW1hbFN5bWJvbChVTlVNX1RIUkVFX0RJR0lUX1NZTUJPTCkpOworICAgIHN5
bWJvbHMuYXBwZW5kKGRlY2ltYWxTeW1ib2woVU5VTV9GT1VSX0RJR0lUX1NZTUJPTCkpOworICAg
IHN5bWJvbHMuYXBwZW5kKGRlY2ltYWxTeW1ib2woVU5VTV9GSVZFX0RJR0lUX1NZTUJPTCkpOwor
ICAgIHN5bWJvbHMuYXBwZW5kKGRlY2ltYWxTeW1ib2woVU5VTV9TSVhfRElHSVRfU1lNQk9MKSk7
CisgICAgc3ltYm9scy5hcHBlbmQoZGVjaW1hbFN5bWJvbChVTlVNX1NFVkVOX0RJR0lUX1NZTUJP
TCkpOworICAgIHN5bWJvbHMuYXBwZW5kKGRlY2ltYWxTeW1ib2woVU5VTV9FSUdIVF9ESUdJVF9T
WU1CT0wpKTsKKyAgICBzeW1ib2xzLmFwcGVuZChkZWNpbWFsU3ltYm9sKFVOVU1fTklORV9ESUdJ
VF9TWU1CT0wpKTsKKyAgICBzeW1ib2xzLmFwcGVuZChkZWNpbWFsU3ltYm9sKFVOVU1fREVDSU1B
TF9TRVBBUkFUT1JfU1lNQk9MKSk7CisgICAgc3ltYm9scy5hcHBlbmQoZGVjaW1hbFN5bWJvbChV
TlVNX0dST1VQSU5HX1NFUEFSQVRPUl9TWU1CT0wpKTsKKyAgICBBU1NFUlQoc3ltYm9scy5zaXpl
KCkgPT0gRGVjaW1hbFN5bWJvbHNTaXplKTsKKyAgICBzZXROdW1iZXJMb2NhbGl6ZXJEYXRhKHN5
bWJvbHMsIGRlY2ltYWxUZXh0QXR0cmlidXRlKFVOVU1fUE9TSVRJVkVfUFJFRklYKSwgZGVjaW1h
bFRleHRBdHRyaWJ1dGUoVU5VTV9QT1NJVElWRV9TVUZGSVgpLCBkZWNpbWFsVGV4dEF0dHJpYnV0
ZShVTlVNX05FR0FUSVZFX1BSRUZJWCksIGRlY2ltYWxUZXh0QXR0cmlidXRlKFVOVU1fTkVHQVRJ
VkVfU1VGRklYKSk7CiB9CiAKIGJvb2wgTG9jYWxlSUNVOjppbml0aWFsaXplU2hvcnREYXRlRm9y
bWF0KCkKQEAgLTUwMSwxMyArMzY3LDYgQEAgdW5zaWduZWQgTG9jYWxlSUNVOjpmaXJzdERheU9m
V2VlaygpCiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklF
TERTKQotCi1TdHJpbmcgTG9jYWxlSUNVOjpsb2NhbGl6ZWREZWNpbWFsU2VwYXJhdG9yKCkKLXsK
LSAgICBpbml0aWFsaXplRGVjaW1hbEZvcm1hdCgpOwotICAgIHJldHVybiBtX2RlY2ltYWxTeW1i
b2xzW0RlY2ltYWxTZXBhcmF0b3JJbmRleF07Ci19Ci0KIHN0YXRpYyBQYXNzT3duUHRyPFZlY3Rv
cjxTdHJpbmc+ID4gY3JlYXRlRmFsbGJhY2tBTVBNTGFiZWxzKCkKIHsKICAgICBPd25QdHI8VmVj
dG9yPFN0cmluZz4gPiBsYWJlbHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFN0cmluZz4oKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuaAppbmRleCBiNTBjZjQ0Y2Y5ZTU5
MGI0ZTJkZGI2ZDE4M2Q4ZWFhNTc1ZTZhNTIyLi43MGE5OWMzNTc3NDZhNDE3ODhkMDE4ODA2YmRk
YmM0MDYwN2Q0OGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xv
Y2FsZUlDVS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgTG9jYWxlSUNVX2gKIAogI2luY2x1ZGUgIkRhdGVD
b21wb25lbnRzLmgiCisjaW5jbHVkZSAiTnVtYmVyTG9jYWxpemVyLmgiCiAjaW5jbHVkZSA8dW5p
Y29kZS91ZGF0Lmg+CiAjaW5jbHVkZSA8dW5pY29kZS91bnVtLmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KQEAgLTQzLDE4ICs0NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFdl
IHNob3VsZCB1c2UgdGhpcyBjbGFzcyBvbmx5IGZvciBMb2NhbGl6ZWROdW1iZXJJQ1UuY3BwLCBM
b2NhbGl6ZWREYXRlSUNVLmNwcCwKIC8vIGFuZCBMb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNwcC4K
LWNsYXNzIExvY2FsZUlDVSB7CitjbGFzcyBMb2NhbGVJQ1UgOiBwdWJsaWMgTnVtYmVyTG9jYWxp
emVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbGVJQ1U+IGNyZWF0ZShj
b25zdCBjaGFyKiBsb2NhbGVTdHJpbmcpOwogICAgIHN0YXRpYyBMb2NhbGVJQ1UqIGN1cnJlbnRM
b2NhbGUoKTsKLSAgICB+TG9jYWxlSUNVKCk7Ci0KLSAgICAvLyBGb3IgTG9jYWxpemVkTnVtYmVy
Ci0gICAgU3RyaW5nIGNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihjb25zdCBTdHJpbmcmKTsKLSAg
ICBTdHJpbmcgY29udmVydEZyb21Mb2NhbGl6ZWROdW1iZXIoY29uc3QgU3RyaW5nJik7Ci0jaWYg
RU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCi0gICAgU3RyaW5nIGxvY2Fs
aXplZERlY2ltYWxTZXBhcmF0b3IoKTsKLSNlbmRpZgorICAgIHZpcnR1YWwgfkxvY2FsZUlDVSgp
OwogCiAgICAgLy8gRm9yIExvY2FsaXplZERhdGUKICAgICBkb3VibGUgcGFyc2VMb2NhbGl6ZWRE
YXRlKGNvbnN0IFN0cmluZyYpOwpAQCAtNzYsOSArNzAsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsZUlDVT4gY3JlYXRlRm9yQ3VycmVudExvY2FsZSgp
OwogICAgIGV4cGxpY2l0IExvY2FsZUlDVShjb25zdCBjaGFyKik7Ci0gICAgdm9pZCBzZXREZWNp
bWFsU3ltYm9sKHVuc2lnbmVkIGluZGV4LCBVTnVtYmVyRm9ybWF0U3ltYm9sKTsKLSAgICB2b2lk
IHNldERlY2ltYWxUZXh0QXR0cmlidXRlKFN0cmluZyYsIFVOdW1iZXJGb3JtYXRUZXh0QXR0cmli
dXRlKTsKLSAgICB2b2lkIGluaXRpYWxpemVEZWNpbWFsRm9ybWF0KCk7CisgICAgU3RyaW5nIGRl
Y2ltYWxTeW1ib2woVU51bWJlckZvcm1hdFN5bWJvbCk7CisgICAgU3RyaW5nIGRlY2ltYWxUZXh0
QXR0cmlidXRlKFVOdW1iZXJGb3JtYXRUZXh0QXR0cmlidXRlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
aW5pdGlhbGl6ZU51bWJlckxvY2FsaXplckRhdGEoKSBPVkVSUklERTsKIAogICAgIGJvb2wgZGV0
ZWN0U2lnbkFuZEdldERpZ2l0UmFuZ2UoY29uc3QgU3RyaW5nJiBpbnB1dCwgYm9vbCYgaXNOZWdh
dGl2ZSwgdW5zaWduZWQmIHN0YXJ0SW5kZXgsIHVuc2lnbmVkJiBlbmRJbmRleCk7CiAgICAgdW5z
aWduZWQgbWF0Y2hlZERlY2ltYWxTeW1ib2xJbmRleChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNp
Z25lZCYgcG9zaXRpb24pOwpAQCAtMTAyLDE3ICs5Niw2IEBAIHByaXZhdGU6CiAgICAgQ1N0cmlu
ZyBtX2xvY2FsZTsKICAgICBVTnVtYmVyRm9ybWF0KiBtX251bWJlckZvcm1hdDsKICAgICBVRGF0
ZUZvcm1hdCogbV9zaG9ydERhdGVGb3JtYXQ7Ci0gICAgZW51bSB7Ci0gICAgICAgIC8vIDAtOSBm
b3IgZGlnaXRzLgotICAgICAgICBEZWNpbWFsU2VwYXJhdG9ySW5kZXggPSAxMCwKLSAgICAgICAg
R3JvdXBTZXBhcmF0b3JJbmRleCA9IDExLAotICAgICAgICBEZWNpbWFsU3ltYm9sc1NpemUKLSAg
ICB9OwotICAgIFN0cmluZyBtX2RlY2ltYWxTeW1ib2xzW0RlY2ltYWxTeW1ib2xzU2l6ZV07Ci0g
ICAgU3RyaW5nIG1fcG9zaXRpdmVQcmVmaXg7Ci0gICAgU3RyaW5nIG1fcG9zaXRpdmVTdWZmaXg7
Ci0gICAgU3RyaW5nIG1fbmVnYXRpdmVQcmVmaXg7Ci0gICAgU3RyaW5nIG1fbmVnYXRpdmVTdWZm
aXg7CiAgICAgYm9vbCBtX2RpZENyZWF0ZURlY2ltYWxGb3JtYXQ7CiAgICAgYm9vbCBtX2RpZENy
ZWF0ZVNob3J0RGF0ZUZvcm1hdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9OdW1iZXJMb2NhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9OdW1iZXJMb2NhbGl6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2MWQ5YjQxNGY0MjYwNDJlOTgzYWI2
NTlmZGE1NjNiZDg3ZDRkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L051bWJlckxvY2FsaXplci5jcHAKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOdW1iZXJMb2NhbGl6ZXIuaCIKKworI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOdW1i
ZXJMb2NhbGl6ZXI6On5OdW1iZXJMb2NhbGl6ZXIoKQoreworfQorCit2b2lkIE51bWJlckxvY2Fs
aXplcjo6c2V0TnVtYmVyTG9jYWxpemVyRGF0YShjb25zdCBWZWN0b3I8U3RyaW5nLCBEZWNpbWFs
U3ltYm9sc1NpemU+JiBzeW1ib2xzLCBjb25zdCBTdHJpbmcmIHBvc2l0aXZlUHJlZml4LCBjb25z
dCBTdHJpbmcmIHBvc2l0aXZlU3VmZml4LCBjb25zdCBTdHJpbmcmIG5lZ2F0aXZlUHJlZml4LCBj
b25zdCBTdHJpbmcmIG5lZ2F0aXZlU3VmZml4KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc3ltYm9scy5zaXplKCk7ICsraSkgeworICAgICAgICBBU1NFUlQoIXN5bWJvbHNbaV0uaXNF
bXB0eSgpKTsKKyAgICAgICAgbV9kZWNpbWFsU3ltYm9sc1tpXSA9IHN5bWJvbHNbaV07CisgICAg
fQorICAgIG1fcG9zaXRpdmVQcmVmaXggPSBwb3NpdGl2ZVByZWZpeDsKKyAgICBtX3Bvc2l0aXZl
U3VmZml4ID0gcG9zaXRpdmVTdWZmaXg7CisgICAgbV9uZWdhdGl2ZVByZWZpeCA9IG5lZ2F0aXZl
UHJlZml4OworICAgIG1fbmVnYXRpdmVTdWZmaXggPSBuZWdhdGl2ZVN1ZmZpeDsKKyAgICBBU1NF
UlQoIW1fcG9zaXRpdmVQcmVmaXguaXNFbXB0eSgpIHx8ICFtX3Bvc2l0aXZlU3VmZml4LmlzRW1w
dHkoKSB8fCAhbV9uZWdhdGl2ZVByZWZpeC5pc0VtcHR5KCkgfHwgIW1fbmVnYXRpdmVTdWZmaXgu
aXNFbXB0eSgpKTsKKyAgICBtX2hhc051bWJlckxvY2FsaXplckRhdGEgPSB0cnVlOworfQorCitT
dHJpbmcgTnVtYmVyTG9jYWxpemVyOjpjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoY29uc3QgU3Ry
aW5nJiBpbnB1dCkKK3sKKyAgICBpbml0aWFsaXplTnVtYmVyTG9jYWxpemVyRGF0YSgpOworICAg
IGlmICghbV9oYXNOdW1iZXJMb2NhbGl6ZXJEYXRhIHx8IGlucHV0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGlucHV0OworCisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgYm9vbCBpc05lZ2F0
aXZlID0gZmFsc2U7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIucmVz
ZXJ2ZUNhcGFjaXR5KGlucHV0Lmxlbmd0aCgpKTsKKworICAgIGlmIChpbnB1dFswXSA9PSAnLScp
IHsKKyAgICAgICAgKytpOworICAgICAgICBpc05lZ2F0aXZlID0gdHJ1ZTsKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQobV9uZWdhdGl2ZVByZWZpeCk7CisgICAgfSBlbHNlCisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKG1fcG9zaXRpdmVQcmVmaXgpOworCisgICAgZm9yICg7IGkgPCBpbnB1dC5sZW5n
dGgoKTsgKytpKSB7CisgICAgICAgIHN3aXRjaCAoaW5wdXRbaV0pIHsKKyAgICAgICAgY2FzZSAn
MCc6CisgICAgICAgIGNhc2UgJzEnOgorICAgICAgICBjYXNlICcyJzoKKyAgICAgICAgY2FzZSAn
Myc6CisgICAgICAgIGNhc2UgJzQnOgorICAgICAgICBjYXNlICc1JzoKKyAgICAgICAgY2FzZSAn
Nic6CisgICAgICAgIGNhc2UgJzcnOgorICAgICAgICBjYXNlICc4JzoKKyAgICAgICAgY2FzZSAn
OSc6CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChtX2RlY2ltYWxTeW1ib2xzW2lucHV0W2ld
IC0gJzAnXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnLic6CisgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZChtX2RlY2ltYWxTeW1ib2xzW0RlY2ltYWxTZXBhcmF0b3JJbmRl
eF0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJ1aWxkZXIuYXBw
ZW5kKGlzTmVnYXRpdmUgPyBtX25lZ2F0aXZlU3VmZml4IDogbV9wb3NpdGl2ZVN1ZmZpeCk7CisK
KyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitzdGF0aWMgYm9vbCBtYXRjaGVz
KGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgcGFy
dCkKK3sKKyAgICBpZiAocGFydC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmIChwb3NpdGlvbiArIHBhcnQubGVuZ3RoKCkgPiB0ZXh0Lmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcnQubGVuZ3RoKCk7
ICsraSkgeworICAgICAgICBpZiAodGV4dFtwb3NpdGlvbiArIGldICE9IHBhcnRbaV0pCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29s
IE51bWJlckxvY2FsaXplcjo6ZGV0ZWN0U2lnbkFuZEdldERpZ2l0UmFuZ2UoY29uc3QgU3RyaW5n
JiBpbnB1dCwgYm9vbCYgaXNOZWdhdGl2ZSwgdW5zaWduZWQmIHN0YXJ0SW5kZXgsIHVuc2lnbmVk
JiBlbmRJbmRleCkKK3sKKyAgICBzdGFydEluZGV4ID0gMDsKKyAgICBlbmRJbmRleCA9IGlucHV0
Lmxlbmd0aCgpOworICAgIGlmIChtX25lZ2F0aXZlUHJlZml4LmlzRW1wdHkoKSAmJiBtX25lZ2F0
aXZlU3VmZml4LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChtX3Bv
c2l0aXZlUHJlZml4KSAmJiBpbnB1dC5lbmRzV2l0aChtX3Bvc2l0aXZlU3VmZml4KSkgeworICAg
ICAgICAgICAgaXNOZWdhdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAgc3RhcnRJbmRleCA9IG1f
cG9zaXRpdmVQcmVmaXgubGVuZ3RoKCk7CisgICAgICAgICAgICBlbmRJbmRleCAtPSBtX3Bvc2l0
aXZlU3VmZml4Lmxlbmd0aCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGlzTmVnYXRp
dmUgPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKG1f
bmVnYXRpdmVQcmVmaXgpICYmIGlucHV0LmVuZHNXaXRoKG1fbmVnYXRpdmVTdWZmaXgpKSB7Cisg
ICAgICAgICAgICBpc05lZ2F0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBt
X25lZ2F0aXZlUHJlZml4Lmxlbmd0aCgpOworICAgICAgICAgICAgZW5kSW5kZXggLT0gbV9uZWdh
dGl2ZVN1ZmZpeC5sZW5ndGgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlzTmVn
YXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKG1fcG9zaXRp
dmVQcmVmaXgpICYmIGlucHV0LmVuZHNXaXRoKG1fcG9zaXRpdmVTdWZmaXgpKSB7CisgICAgICAg
ICAgICAgICAgc3RhcnRJbmRleCA9IG1fcG9zaXRpdmVQcmVmaXgubGVuZ3RoKCk7CisgICAgICAg
ICAgICAgICAgZW5kSW5kZXggLT0gbV9wb3NpdGl2ZVN1ZmZpeC5sZW5ndGgoKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordW5zaWduZWQgTnVtYmVyTG9jYWxpemVyOjptYXRj
aGVkRGVjaW1hbFN5bWJvbEluZGV4KGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkJiBwb3Np
dGlvbikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHN5bWJvbEluZGV4ID0gMDsgc3ltYm9sSW5kZXgg
PCBEZWNpbWFsU3ltYm9sc1NpemU7ICsrc3ltYm9sSW5kZXgpIHsKKyAgICAgICAgaWYgKG1fZGVj
aW1hbFN5bWJvbHNbc3ltYm9sSW5kZXhdLmxlbmd0aCgpICYmIG1hdGNoZXMoaW5wdXQsIHBvc2l0
aW9uLCBtX2RlY2ltYWxTeW1ib2xzW3N5bWJvbEluZGV4XSkpIHsKKyAgICAgICAgICAgIHBvc2l0
aW9uICs9IG1fZGVjaW1hbFN5bWJvbHNbc3ltYm9sSW5kZXhdLmxlbmd0aCgpOworICAgICAgICAg
ICAgcmV0dXJuIHN5bWJvbEluZGV4OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBEZWNp
bWFsU3ltYm9sc1NpemU7Cit9CisKK1N0cmluZyBOdW1iZXJMb2NhbGl6ZXI6OmNvbnZlcnRGcm9t
TG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYgbG9jYWxpemVkKQoreworICAgIGluaXRpYWxp
emVOdW1iZXJMb2NhbGl6ZXJEYXRhKCk7CisgICAgU3RyaW5nIGlucHV0ID0gbG9jYWxpemVkLnN0
cmlwV2hpdGVTcGFjZSgpOworICAgIGlmICghbV9oYXNOdW1iZXJMb2NhbGl6ZXJEYXRhIHx8IGlu
cHV0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGlucHV0OworCisgICAgYm9vbCBpc05lZ2F0
aXZlOworICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXg7CisgICAgdW5zaWduZWQgZW5kSW5kZXg7Cisg
ICAgaWYgKCFkZXRlY3RTaWduQW5kR2V0RGlnaXRSYW5nZShpbnB1dCwgaXNOZWdhdGl2ZSwgc3Rh
cnRJbmRleCwgZW5kSW5kZXgpKSB7CisgICAgICAgIC8vIElucHV0IGlzIGJyb2tlbi4gUmV0dXJu
aW5nIGFuIGludmFsaWQgbnVtYmVyIHN0cmluZy4KKyAgICAgICAgcmV0dXJuICIqIjsKKyAgICB9
CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNp
dHkoaW5wdXQubGVuZ3RoKCkpOworICAgIGlmIChpc05lZ2F0aXZlKQorICAgICAgICBidWlsZGVy
LmFwcGVuZCgiLSIpOworICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJ
bmRleDspIHsKKyAgICAgICAgdW5zaWduZWQgc3ltYm9sSW5kZXggPSBtYXRjaGVkRGVjaW1hbFN5
bWJvbEluZGV4KGlucHV0LCBpKTsKKyAgICAgICAgaWYgKHN5bWJvbEluZGV4ID49IERlY2ltYWxT
eW1ib2xzU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGlmIChzeW1ib2xJ
bmRleCA9PSBEZWNpbWFsU2VwYXJhdG9ySW5kZXgpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgnLicpOworICAgICAgICBlbHNlIGlmIChzeW1ib2xJbmRleCA9PSBHcm91cFNlcGFyYXRvcklu
ZGV4KSB7CisgICAgICAgICAgICAvLyBJZ25vcmUgZ3JvdXAgc2VwYXJhdG9ycy4KKworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPign
MCcgKyBzeW1ib2xJbmRleCkpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygp
OworfQorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCitTdHJp
bmcgTnVtYmVyTG9jYWxpemVyOjpsb2NhbGl6ZWREZWNpbWFsU2VwYXJhdG9yKCkKK3sKKyAgICBp
bml0aWFsaXplTnVtYmVyTG9jYWxpemVyRGF0YSgpOworICAgIHJldHVybiBtX2RlY2ltYWxTeW1i
b2xzW0RlY2ltYWxTZXBhcmF0b3JJbmRleF07Cit9CisjZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9OdW1iZXJMb2NhbGl6ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvTnVtYmVyTG9jYWxpemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjE4MzFi
MmFlZTQ3MDUxMzZiNDc5Y2VjNTViNTk2NWZmYTZjYmY3YgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTnVtYmVyTG9jYWxpemVyLmgKQEAgLTAsMCArMSw2
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSAorICogREFNQUdFLgorICovCisKKyNpZm5kZWYgTnVtYmVyTG9jYWxpemVyX2gKKyNkZWZp
bmUgTnVtYmVyTG9jYWxpemVyX2gKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE51bWJlckxvY2FsaXplciB7CitwdWJsaWM6
CisgICAgU3RyaW5nIGNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihjb25zdCBTdHJpbmcmKTsKKyAg
ICBTdHJpbmcgY29udmVydEZyb21Mb2NhbGl6ZWROdW1iZXIoY29uc3QgU3RyaW5nJik7CisjaWYg
RU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisgICAgU3RyaW5nIGxvY2Fs
aXplZERlY2ltYWxTZXBhcmF0b3IoKTsKKyNlbmRpZgorICAgIHZpcnR1YWwgfk51bWJlckxvY2Fs
aXplcigpOworCitwcm90ZWN0ZWQ6CisgICAgZW51bSB7CisgICAgICAgIC8vIDAtOSBmb3IgZGln
aXRzLgorICAgICAgICBEZWNpbWFsU2VwYXJhdG9ySW5kZXggPSAxMCwKKyAgICAgICAgR3JvdXBT
ZXBhcmF0b3JJbmRleCA9IDExLAorICAgICAgICBEZWNpbWFsU3ltYm9sc1NpemUKKyAgICB9Owor
CisgICAgTnVtYmVyTG9jYWxpemVyKCkgOiBtX2hhc051bWJlckxvY2FsaXplckRhdGEoZmFsc2Up
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplTnVtYmVyTG9jYWxpemVyRGF0YSgpID0g
MDsKKyAgICB2b2lkIHNldE51bWJlckxvY2FsaXplckRhdGEoY29uc3QgVmVjdG9yPFN0cmluZywg
RGVjaW1hbFN5bWJvbHNTaXplPiYsIGNvbnN0IFN0cmluZyYgcG9zaXRpdmVQcmVmaXgsIGNvbnN0
IFN0cmluZyYgcG9zaXRpdmVTdWZmaXgsIGNvbnN0IFN0cmluZyYgbmVnYXRpdmVQcmVmaXgsIGNv
bnN0IFN0cmluZyYgbmVnYXRpdmVTdWZmaXgpOworCitwcml2YXRlOgorICAgIGJvb2wgZGV0ZWN0
U2lnbkFuZEdldERpZ2l0UmFuZ2UoY29uc3QgU3RyaW5nJiBpbnB1dCwgYm9vbCYgaXNOZWdhdGl2
ZSwgdW5zaWduZWQmIHN0YXJ0SW5kZXgsIHVuc2lnbmVkJiBlbmRJbmRleCk7CisgICAgdW5zaWdu
ZWQgbWF0Y2hlZERlY2ltYWxTeW1ib2xJbmRleChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25l
ZCYgcG9zaXRpb24pOworCisgICAgU3RyaW5nIG1fZGVjaW1hbFN5bWJvbHNbRGVjaW1hbFN5bWJv
bHNTaXplXTsKKyAgICBTdHJpbmcgbV9wb3NpdGl2ZVByZWZpeDsKKyAgICBTdHJpbmcgbV9wb3Np
dGl2ZVN1ZmZpeDsKKyAgICBTdHJpbmcgbV9uZWdhdGl2ZVByZWZpeDsKKyAgICBTdHJpbmcgbV9u
ZWdhdGl2ZVN1ZmZpeDsKKyAgICBib29sIG1faGFzTnVtYmVyTG9jYWxpemVyRGF0YTsKK307CisK
K30KKyNlbmRpZgo=
</data>
<flag name="review"
          id="165663"
          type_id="1"
          status="+"
          setter="haraken"
    />
          </attachment>
      

    </bug>

</bugzilla>