<?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>62747</bug_id>
          
          <creation_ts>2011-06-15 12:39:22 -0700</creation_ts>
          <short_desc>Try to use fastGetAttribute where possible</short_desc>
          <delta_ts>2011-06-15 18:54:55 -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>SVG</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="Rob Buis">rwlbuis</reporter>
          <assigned_to name="Rob Buis">rwlbuis</assigned_to>
          <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>421508</commentid>
    <comment_count>0</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-06-15 12:39:22 -0700</bug_when>
    <thetext>From the comment in Element.h:

    // Call this to get the value of an attribute that is known not to be the style
    // attribute or one of the SVG animatable attributes.
    bool fastHasAttribute(const QualifiedName&amp;) const;
    const AtomicString&amp; fastGetAttribute(const QualifiedName&amp;) const;

There are places in SVG where we do not need to call getAttribute but can use fastGetAttribute, fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421531</commentid>
    <comment_count>1</comment_count>
      <attachid>97353</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-06-15 13:17:06 -0700</bug_when>
    <thetext>Created attachment 97353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421696</commentid>
    <comment_count>2</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-06-15 18:54:55 -0700</bug_when>
    <thetext>Committed r88989: &lt;http://trac.webkit.org/changeset/88989&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97353</attachid>
            <date>2011-06-15 13:17:06 -0700</date>
            <delta_ts>2011-06-15 17:09:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62747-20110615161724.patch</filename>
            <type>text/plain</type>
            <size>33718</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4OTY5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODEgQEAKKzIwMTEtMDYtMTUgIFJvYiBCdWlz
ICA8cmJ1aXNAcmltLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUcnkgdG8gdXNlIGZhc3RHZXRBdHRyaWJ1dGUgd2hlcmUgcG9zc2libGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNzQ3CisKKyAg
ICAgICAgVXNlIHRoZSBmYXN0IHZlcnNpb25zIG9mIGdldC9oYXNBdHRyaWJ1dGUgd2hlcmUgd2Ug
Y2FuLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGlzIGlzIGEgc2ltcGxlIGNsZWFu
dXAuCisKKyAgICAgICAgKiBzdmcvU1ZHQUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQUVsZW1lbnQ6OnRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBzdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FsdEdseXBoRWxlbWVudDo6Z2x5cGhSZWYpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQWx0R2x5cGhFbGVtZW50Ojpmb3JtYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQWx0R2x5cGhFbGVtZW50OjpnbHlwaEVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdB
bmltYXRlTW90aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90
aW9uRWxlbWVudDo6cm90YXRlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90
aW9uRWxlbWVudDo6YW5pbWF0aW9uUGF0aCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6YW5pbWF0
aW9uTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpjYWxjTW9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjphdHRyaWJ1dGVUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRvVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6YnlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojpmcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNBZGRpdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRpb25FbGVtZW50Ojppc0FjY3VtdWxhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCk6CisgICAgICAgICogc3Zn
L1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6eG1sYmFzZSk6
CisgICAgICAgICogc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZvbnRFbGVtZW50OjplbnN1cmVHbHlwaENhY2hlKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udEZh
Y2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6dW5p
dHNQZXJFbSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnhIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50Ojpob3Jpem9udGFsT3JpZ2lu
WCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6Omhvcml6b250YWxPcmln
aW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRhbEFk
dmFuY2VYKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6dmVydGljYWxP
cmlnaW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6dmVydGljYWxP
cmlnaW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6dmVydGljYWxB
ZHZhbmNlWSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OmFzY2VudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OmRlc2NlbnQpOgorICAgICAg
ICAqIHN2Zy9TVkdGb250RmFjZU5hbWVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZvbnRGYWNlTmFtZUVsZW1lbnQ6OnNyY1ZhbHVlKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udEZh
Y2VVcmlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlVXJpRWxlbWVu
dDo6c3JjVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VVcmlFbGVtZW50Ojps
b2FkRm9udCk6CisgICAgICAgICogc3ZnL1NWR0dseXBoRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZVNWR0dseXBoQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ds
eXBoRWxlbWVudDo6YnVpbGRHZW5lcmljR2x5cGhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0dseXBoRWxlbWVudDo6YnVpbGRHbHlwaElkZW50aWZpZXIpOgorICAgICAgICAqIHN2
Zy9TVkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSEtlcm5FbGVtZW50
OjpidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcik6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y29udGVudFNjcmlwdFR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y29udGVudFN0eWxlVHlwZSk6
CisgICAgICAgICogc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTdHlsZUVsZW1lbnQ6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50
OjptZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OnRpdGxlKToKKyAg
ICAgICAgKiBzdmcvU1ZHVktlcm5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZL
ZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyKToKKyAgICAgICAgKiBzdmcvYW5p
bWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVs
ZW1lbnQ6OnJlc3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OmZpbGwp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnhsaW5rSHJlZik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6ZHVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NN
SUxFbGVtZW50OjpyZXBlYXREdXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6
OnJlcGVhdENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjptYXhWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6bWluVmFsdWUpOgorCiAyMDEx
LTA2LTE1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
RWxlbWVudC5jcHAJKHJldmlzaW9uIDg4OTQwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBQYXNzUmVmUHRyPFNW
R0FFbGVtZW50PiBTVkdBRWxlbWVudDo6Y3JlCiBTdHJpbmcgU1ZHQUVsZW1lbnQ6OnRpdGxlKCkg
Y29uc3QKIHsKICAgICAvLyBJZiB0aGUgeGxpbms6dGl0bGUgaXMgc2V0IChub24tZW1wdHkgc3Ry
aW5nKSwgdXNlIGl0LgotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSBnZXRBdHRyaWJ1
dGUoWExpbmtOYW1lczo6dGl0bGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxl
ID0gZmFzdEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjp0aXRsZUF0dHIpOwogICAgIGlmICghdGl0
bGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdGl0bGU7CiAKQEAgLTIyNyw3ICsyMjcsNyBA
QCB2b2lkIFNWR0FFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2CiAgICAgICAgICAgICAv
LyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2h5IHNldHRpbmcgdGFyZ2V0IHRvICJfc2VsZiIgaXMg
ZXZlcgogICAgICAgICAgICAgLy8gaGVscGZ1bC4KICAgICAgICAgICAgIGlmICh0YXJnZXQuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgIHRhcmdldCA9IChnZXRBdHRyaWJ1dGUoWExpbmtOYW1l
czo6c2hvd0F0dHIpID09ICJuZXciKSA/ICJfYmxhbmsiIDogIl9zZWxmIjsKKyAgICAgICAgICAg
ICAgICB0YXJnZXQgPSAoZmFzdEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpzaG93QXR0cikgPT0g
Im5ldyIpID8gIl9ibGFuayIgOiAiX3NlbGYiOwogCiAgICAgICAgICAgICBoYW5kbGVMaW5rQ2xp
Y2soZXZlbnQsIGRvY3VtZW50KCksIHVybCwgdGFyZ2V0KTsKICAgICAgICAgICAgIHJldHVybjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwCShyZXZpc2lv
biA4ODk0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgU1ZHQWx0R2x5cGhFbGVtZW50Ojpz
ZXRHbHlwaFJlZihjb24KIAogY29uc3QgQXRvbWljU3RyaW5nJiBTVkdBbHRHbHlwaEVsZW1lbnQ6
OmdseXBoUmVmKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpn
bHlwaFJlZkF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpnbHlw
aFJlZkF0dHIpOwogfQogCiB2b2lkIFNWR0FsdEdseXBoRWxlbWVudDo6c2V0Rm9ybWF0KGNvbnN0
IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtODYsNyArODYsNyBAQCB2b2lk
IFNWR0FsdEdseXBoRWxlbWVudDo6c2V0Rm9ybWF0KGNvbnN0CiAKIGNvbnN0IEF0b21pY1N0cmlu
ZyYgU1ZHQWx0R2x5cGhFbGVtZW50Ojpmb3JtYXQoKSBjb25zdAogewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmZvcm1hdEF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmli
dXRlKFNWR05hbWVzOjpmb3JtYXRBdHRyKTsKIH0KIAogYm9vbCBTVkdBbHRHbHlwaEVsZW1lbnQ6
OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSogY2hpbGQpIGNvbnN0CkBAIC0xMDMsNyAr
MTAzLDcgQEAgUmVuZGVyT2JqZWN0KiBTVkdBbHRHbHlwaEVsZW1lbnQ6OmNyZWF0ZQogCiBTVkdH
bHlwaEVsZW1lbnQqIFNWR0FsdEdseXBoRWxlbWVudDo6Z2x5cGhFbGVtZW50KCkgY29uc3QKIHsK
LSAgICBFbGVtZW50KiBlbHQgPSB0cmVlU2NvcGUoKS0+Z2V0RWxlbWVudEJ5SWQoZ2V0VGFyZ2V0
KGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cikpKTsKKyAgICBFbGVtZW50KiBlbHQg
PSB0cmVlU2NvcGUoKS0+Z2V0RWxlbWVudEJ5SWQoZ2V0VGFyZ2V0KGZhc3RHZXRBdHRyaWJ1dGUo
WExpbmtOYW1lczo6aHJlZkF0dHIpKSk7CiAgICAgaWYgKCFlbHQgfHwgIWVsdC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6Z2x5cGhUYWcpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8U1ZHR2x5cGhFbGVtZW50Kj4oZWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gODg5NDApCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OlJvdGF0ZU1v
ZGUgU1ZHQQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBh
dXRvVmFsLCAoImF1dG8iKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNT
dHJpbmcsIGF1dG9SZXZlcnNlLCAoImF1dG8tcmV2ZXJzZSIpKTsKLSAgICBTdHJpbmcgcm90YXRl
ID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpyb3RhdGVBdHRyKTsKKyAgICBTdHJpbmcgcm90YXRl
ID0gZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6cm90YXRlQXR0cik7CiAgICAgaWYgKHJvdGF0
ZSA9PSBhdXRvVmFsKQogICAgICAgICByZXR1cm4gUm90YXRlQXV0bzsKICAgICBpZiAocm90YXRl
ID09IGF1dG9SZXZlcnNlKQpAQCAtMTM4LDcgKzEzOCw3IEBAIFBhdGggU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6OmFuaW1hdGlvblAKICAgICAgICAgICAgIHJldHVybiBwYXRoOwogICAgICAgICB9
CiAgICAgfQotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnBhdGhBdHRyKSkKKyAgICBp
ZiAoZmFzdEhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cGF0aEF0dHIpKQogICAgICAgICByZXR1cm4g
bV9wYXRoOwogICAgIHJldHVybiBQYXRoKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk0MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDcg
KzI2MCw3IEBAIEFuaW1hdGlvbk1vZGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YW5pbWEKICAgICAg
ICAgcmV0dXJuIFRvQW5pbWF0aW9uOwogICAgIGlmICghYW5pbWF0aW9uUGF0aCgpLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIFBhdGhBbmltYXRpb247Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6dmFsdWVzQXR0cikpCisgICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnZhbHVlc0F0dHIpKQogICAgICAgICByZXR1cm4gVmFsdWVzQW5pbWF0aW9uOwogICAgIGlmICgh
dG9WYWx1ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZyb21WYWx1ZSgpLmlzRW1wdHko
KSA/IFRvQW5pbWF0aW9uIDogRnJvbVRvQW5pbWF0aW9uOwpAQCAtMjc1LDcgKzI3NSw3IEBAIENh
bGNNb2RlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGNNb2RlKCkKICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgbGluZWFyLCAoImxpbmVhciIpKTsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgcGFjZWQsICgicGFjZWQiKSk7CiAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHNwbGluZSwgKCJzcGxp
bmUiKSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShTVkdO
YW1lczo6Y2FsY01vZGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZmFz
dEdldEF0dHJpYnV0ZShTVkdOYW1lczo6Y2FsY01vZGVBdHRyKTsKICAgICBpZiAodmFsdWUgPT0g
ZGlzY3JldGUpCiAgICAgICAgIHJldHVybiBDYWxjTW9kZURpc2NyZXRlOwogICAgIGlmICh2YWx1
ZSA9PSBsaW5lYXIpCkBAIC0yOTEsNyArMjkxLDcgQEAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6QXR0
cmlidXRlVHlwZSBTVkdBbgogeyAgICAKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgY3NzLCAoIkNTUyIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IEF0b21pY1N0cmluZywgeG1sLCAoIlhNTCIpKTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjphdHRyaWJ1dGVUeXBlQXR0cik7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmF0dHJp
YnV0ZVR5cGVBdHRyKTsKICAgICBpZiAodmFsdWUgPT0gY3NzKQogICAgICAgICByZXR1cm4gQXR0
cmlidXRlVHlwZUNTUzsKICAgICBpZiAodmFsdWUgPT0geG1sKQpAQCAtMzAxLDMwICszMDEsMzAg
QEAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6QXR0cmlidXRlVHlwZSBTVkdBbgogCiBTdHJpbmcgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6dG9WYWx1ZSgpIGNvbnN0CiB7ICAgIAotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OnRvQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUo
U1ZHTmFtZXM6OnRvQXR0cik7CiB9CiAKIFN0cmluZyBTVkdBbmltYXRpb25FbGVtZW50OjpieVZh
bHVlKCkgY29uc3QKIHsgICAgCi0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShTVkdOYW1lczo6YnlB
dHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6YnlBdHRyKTsKIH0K
IAogU3RyaW5nIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmZyb21WYWx1ZSgpIGNvbnN0CiB7ICAgIAot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmZyb21BdHRyKTsKKyAgICByZXR1cm4g
ZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6ZnJvbUF0dHIpOwogfQogCiBib29sIFNWR0FuaW1h
dGlvbkVsZW1lbnQ6OmlzQWRkaXRpdmUoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgQXRvbWljU3RyaW5nLCBzdW0sICgic3VtIikpOwotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmFkZGl0aXZlQXR0cik7CisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmFk
ZGl0aXZlQXR0cik7CiAgICAgcmV0dXJuIHZhbHVlID09IHN1bSB8fCBhbmltYXRpb25Nb2RlKCkg
PT0gQnlBbmltYXRpb247CiB9CiAKIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNBY2N1bXVs
YXRlZCgpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJp
bmcsIHN1bSwgKCJzdW0iKSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0
dHJpYnV0ZShTVkdOYW1lczo6YWNjdW11bGF0ZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjphY2N1bXVsYXRlQXR0cik7CiAg
ICAgcmV0dXJuIHZhbHVlID09IHN1bSAmJiBhbmltYXRpb25Nb2RlKCkgIT0gVG9BbmltYXRpb247
CiB9CiAKQEAgLTUzMCwxNCArNTMwLDE0IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c3Rh
cnRlZEFjdGl2ZUkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlc2UgdmFsaWRhdGlvbnMg
YXJlIGFwcHJvcHJpYXRlIGZvciBhbGwgYW5pbWF0aW9uIG1vZGVzLgotICAgIGlmIChoYXNBdHRy
aWJ1dGUoU1ZHTmFtZXM6OmtleVBvaW50c0F0dHIpICYmIG1fa2V5UG9pbnRzLnNpemUoKSAhPSBt
X2tleVRpbWVzLnNpemUoKSkKKyAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShTVkdOYW1lczo6a2V5
UG9pbnRzQXR0cikgJiYgbV9rZXlQb2ludHMuc2l6ZSgpICE9IG1fa2V5VGltZXMuc2l6ZSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUgPSB0aGlz
LT5hbmltYXRpb25Nb2RlKCk7CiAgICAgQ2FsY01vZGUgY2FsY01vZGUgPSB0aGlzLT5jYWxjTW9k
ZSgpOwogICAgIGlmIChjYWxjTW9kZSA9PSBDYWxjTW9kZVNwbGluZSkgewogICAgICAgICB1bnNp
Z25lZCBzcGxpbmVzQ291bnQgPSBtX2tleVNwbGluZXMuc2l6ZSgpICsgMTsKLSAgICAgICAgaWYg
KChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmtleVBvaW50c0F0dHIpICYmIG1fa2V5UG9pbnRzLnNp
emUoKSAhPSBzcGxpbmVzQ291bnQpCisgICAgICAgIGlmICgoZmFzdEhhc0F0dHJpYnV0ZShTVkdO
YW1lczo6a2V5UG9pbnRzQXR0cikgJiYgbV9rZXlQb2ludHMuc2l6ZSgpICE9IHNwbGluZXNDb3Vu
dCkKICAgICAgICAgICAgIHx8IChhbmltYXRpb25Nb2RlID09IFZhbHVlc0FuaW1hdGlvbiAmJiBt
X3ZhbHVlcy5zaXplKCkgIT0gc3BsaW5lc0NvdW50KSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC01NTksMTQgKzU1OSwxNCBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0
ZWRBY3RpdmVJCiAgICAgICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBjYWxjdWxhdGVGcm9tQW5kQnlW
YWx1ZXMoU3RyaW5nKCksIGJ5KTsKICAgICBlbHNlIGlmIChhbmltYXRpb25Nb2RlID09IFZhbHVl
c0FuaW1hdGlvbikgewogICAgICAgICBtX2FuaW1hdGlvblZhbGlkID0gbV92YWx1ZXMuc2l6ZSgp
ID4gMQotICAgICAgICAgICAgJiYgKGNhbGNNb2RlID09IENhbGNNb2RlUGFjZWQgfHwgIWhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6a2V5VGltZXNBdHRyKSB8fCBoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OmtleVBvaW50c0F0dHIpIHx8IChtX3ZhbHVlcy5zaXplKCkgPT0gbV9rZXlUaW1lcy5zaXplKCkp
KQorICAgICAgICAgICAgJiYgKGNhbGNNb2RlID09IENhbGNNb2RlUGFjZWQgfHwgIWZhc3RIYXNB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmtleVRpbWVzQXR0cikgfHwgZmFzdEhhc0F0dHJpYnV0ZShTVkdO
YW1lczo6a2V5UG9pbnRzQXR0cikgfHwgKG1fdmFsdWVzLnNpemUoKSA9PSBtX2tleVRpbWVzLnNp
emUoKSkpCiAgICAgICAgICAgICAmJiAoY2FsY01vZGUgPT0gQ2FsY01vZGVEaXNjcmV0ZSB8fCAh
bV9rZXlUaW1lcy5zaXplKCkgfHwgbV9rZXlUaW1lcy5sYXN0KCkgPT0gMSkKICAgICAgICAgICAg
ICYmIChjYWxjTW9kZSAhPSBDYWxjTW9kZVNwbGluZSB8fCAoKG1fa2V5U3BsaW5lcy5zaXplKCkg
JiYgKG1fa2V5U3BsaW5lcy5zaXplKCkgPT0gbV92YWx1ZXMuc2l6ZSgpIC0gMSkpIHx8IG1fa2V5
U3BsaW5lcy5zaXplKCkgPT0gbV9rZXlQb2ludHMuc2l6ZSgpIC0gMSkpCi0gICAgICAgICAgICAm
JiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6a2V5UG9pbnRzQXR0cikgfHwgKG1fa2V5VGltZXMu
c2l6ZSgpID4gMSAmJiBtX2tleVRpbWVzLnNpemUoKSA9PSBtX2tleVBvaW50cy5zaXplKCkpKTsK
KyAgICAgICAgICAgICYmICghZmFzdEhhc0F0dHJpYnV0ZShTVkdOYW1lczo6a2V5UG9pbnRzQXR0
cikgfHwgKG1fa2V5VGltZXMuc2l6ZSgpID4gMSAmJiBtX2tleVRpbWVzLnNpemUoKSA9PSBtX2tl
eVBvaW50cy5zaXplKCkpKTsKICAgICAgICAgaWYgKGNhbGNNb2RlID09IENhbGNNb2RlUGFjZWQg
JiYgbV9hbmltYXRpb25WYWxpZCkKICAgICAgICAgICAgIGNhbGN1bGF0ZUtleVRpbWVzRm9yQ2Fs
Y01vZGVQYWNlZCgpOwogICAgIH0gZWxzZSBpZiAoYW5pbWF0aW9uTW9kZSA9PSBQYXRoQW5pbWF0
aW9uKQotICAgICAgICBtX2FuaW1hdGlvblZhbGlkID0gY2FsY01vZGUgPT0gQ2FsY01vZGVQYWNl
ZCB8fCAhaGFzQXR0cmlidXRlKFNWR05hbWVzOjprZXlQb2ludHNBdHRyKSB8fCAobV9rZXlUaW1l
cy5zaXplKCkgPiAxICYmIG1fa2V5VGltZXMuc2l6ZSgpID09IG1fa2V5UG9pbnRzLnNpemUoKSk7
CisgICAgICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBjYWxjTW9kZSA9PSBDYWxjTW9kZVBhY2VkIHx8
ICFmYXN0SGFzQXR0cmlidXRlKFNWR05hbWVzOjprZXlQb2ludHNBdHRyKSB8fCAobV9rZXlUaW1l
cy5zaXplKCkgPiAxICYmIG1fa2V5VGltZXMuc2l6ZSgpID09IG1fa2V5UG9pbnRzLnNpemUoKSk7
CiB9CiAgICAgCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbihmbG9h
dCBwZXJjZW50LCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gODg5NDApCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3
ICsxMTAsNyBAQCBib29sIFNWR0VsZW1lbnQ6OmlzU3VwcG9ydGVkKFN0cmluZ0ltcGwqCiAKIFN0
cmluZyBTVkdFbGVtZW50Ojp4bWxiYXNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKFhNTE5hbWVzOjpiYXNlQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoWE1M
TmFtZXM6OmJhc2VBdHRyKTsKIH0KIAogdm9pZCBTVkdFbGVtZW50OjpzZXRYbWxiYXNlKGNvbnN0
IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lk
IFNWR0ZvbnRFbGVtZW50OjplbnN1cmVHbHlwaENhY2hlKCkKICAgICBmb3IgKE5vZGUqIGNoaWxk
ID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmdseXBoVGFnKSkgewogICAg
ICAgICAgICAgU1ZHR2x5cGhFbGVtZW50KiBnbHlwaCA9IHN0YXRpY19jYXN0PFNWR0dseXBoRWxl
bWVudCo+KGNoaWxkKTsKLSAgICAgICAgICAgIFN0cmluZyB1bmljb2RlID0gZ2x5cGgtPmdldEF0
dHJpYnV0ZShTVkdOYW1lczo6dW5pY29kZUF0dHIpOworICAgICAgICAgICAgU3RyaW5nIHVuaWNv
ZGUgPSBnbHlwaC0+ZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6dW5pY29kZUF0dHIpOwogICAg
ICAgICAgICAgU1ZHR2x5cGggc3ZnR2x5cGggPSBnbHlwaC0+YnVpbGRHbHlwaElkZW50aWZpZXIo
KTsKICAgICAgICAgICAgIHVuc2lnbmVkIHVuaWNvZGVMZW5ndGggPSB1bmljb2RlLmxlbmd0aCgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkocmV2
aXNpb24gODg5NDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHIKIAogdW5zaWduZWQgU1ZHRm9udEZhY2VFbGVtZW50Ojp1bml0
c1BlckVtKCkgY29uc3QKIHsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0
cmlidXRlKHVuaXRzX3Blcl9lbUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBmYXN0R2V0QXR0cmlidXRlKHVuaXRzX3Blcl9lbUF0dHIpOwogICAgIGlmICh2YWx1ZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBnRGVmYXVsdFVuaXRzUGVyRW07CiAKQEAgLTEzMyw3ICsx
MzMsNyBAQCB1bnNpZ25lZCBTVkdGb250RmFjZUVsZW1lbnQ6OnVuaXRzUGVyRW0oCiAKIGludCBT
VkdGb250RmFjZUVsZW1lbnQ6OnhIZWlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KGNlaWxmKGdldEF0dHJpYnV0ZSh4X2hlaWdodEF0dHIpLnRvRmxvYXQoKSkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGZhc3RHZXRBdHRyaWJ1dGUoeF9oZWln
aHRBdHRyKS50b0Zsb2F0KCkpKTsKIH0KIAogZmxvYXQgU1ZHRm9udEZhY2VFbGVtZW50Ojpob3Jp
em9udGFsT3JpZ2luWCgpIGNvbnN0CkBAIC0xNDQsNyArMTQ0LDcgQEAgZmxvYXQgU1ZHRm9udEZh
Y2VFbGVtZW50Ojpob3Jpem9udGFsT3JpZwogICAgIC8vIFNwZWM6IFRoZSBYLWNvb3JkaW5hdGUg
aW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIG9yaWdpbiBvZiBhIGdseXBoIHRv
IGJlIHVzZWQgd2hlbgogICAgIC8vIGRyYXdpbmcgaG9yaXpvbnRhbGx5IG9yaWVudGVkIHRleHQu
IChOb3RlIHRoYXQgdGhlIG9yaWdpbiBhcHBsaWVzIHRvIGFsbCBnbHlwaHMgaW4gdGhlIGZvbnQu
KQogICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBp
cyBhcyBpZiBhIHZhbHVlIG9mICIwIiB3ZXJlIHNwZWNpZmllZC4KLSAgICByZXR1cm4gbV9mb250
RWxlbWVudC0+Z2V0QXR0cmlidXRlKGhvcml6X29yaWdpbl94QXR0cikudG9GbG9hdCgpOworICAg
IHJldHVybiBtX2ZvbnRFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGhvcml6X29yaWdpbl94QXR0
cikudG9GbG9hdCgpOwogfQogCiBmbG9hdCBTVkdGb250RmFjZUVsZW1lbnQ6Omhvcml6b250YWxP
cmlnaW5ZKCkgY29uc3QKQEAgLTE1NSw3ICsxNTUsNyBAQCBmbG9hdCBTVkdGb250RmFjZUVsZW1l
bnQ6Omhvcml6b250YWxPcmlnCiAgICAgLy8gU3BlYzogVGhlIFktY29vcmRpbmF0ZSBpbiB0aGUg
Zm9udCBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgb3JpZ2luIG9mIGEgZ2x5cGggdG8gYmUgdXNl
ZCB3aGVuCiAgICAgLy8gZHJhd2luZyBob3Jpem9udGFsbHkgb3JpZW50ZWQgdGV4dC4gKE5vdGUg
dGhhdCB0aGUgb3JpZ2luIGFwcGxpZXMgdG8gYWxsIGdseXBocyBpbiB0aGUgZm9udC4pCiAgICAg
Ly8gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlm
IGEgdmFsdWUgb2YgIjAiIHdlcmUgc3BlY2lmaWVkLgotICAgIHJldHVybiBtX2ZvbnRFbGVtZW50
LT5nZXRBdHRyaWJ1dGUoaG9yaXpfb3JpZ2luX3lBdHRyKS50b0Zsb2F0KCk7CisgICAgcmV0dXJu
IG1fZm9udEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoaG9yaXpfb3JpZ2luX3lBdHRyKS50b0Zs
b2F0KCk7CiB9CiAKIGZsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRhbEFkdmFuY2VY
KCkgY29uc3QKQEAgLTE2Niw3ICsxNjYsNyBAQCBmbG9hdCBTVkdGb250RmFjZUVsZW1lbnQ6Omhv
cml6b250YWxBZHZhCiAgICAgLy8gU3BlYzogVGhlIGRlZmF1bHQgaG9yaXpvbnRhbCBhZHZhbmNl
IGFmdGVyIHJlbmRlcmluZyBhIGdseXBoIGluIGhvcml6b250YWwgb3JpZW50YXRpb24uIEdseXBo
CiAgICAgLy8gd2lkdGhzIGFyZSByZXF1aXJlZCB0byBiZSBub24tbmVnYXRpdmUsIGV2ZW4gaWYg
dGhlIGdseXBoIGlzIHR5cGljYWxseSByZW5kZXJlZCByaWdodC10by1sZWZ0LAogICAgIC8vIGFz
IGluIEhlYnJldyBhbmQgQXJhYmljIHNjcmlwdHMuCi0gICAgcmV0dXJuIG1fZm9udEVsZW1lbnQt
PmdldEF0dHJpYnV0ZShob3Jpel9hZHZfeEF0dHIpLnRvRmxvYXQoKTsKKyAgICByZXR1cm4gbV9m
b250RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShob3Jpel9hZHZfeEF0dHIpLnRvRmxvYXQoKTsK
IH0KIAogZmxvYXQgU1ZHRm9udEZhY2VFbGVtZW50Ojp2ZXJ0aWNhbE9yaWdpblgoKSBjb25zdApA
QCAtMTc3LDcgKzE3Nyw3IEBAIGZsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6dmVydGljYWxPcmln
aW4KICAgICAvLyBTcGVjOiBUaGUgZGVmYXVsdCBYLWNvb3JkaW5hdGUgaW4gdGhlIGZvbnQgY29v
cmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIG9yaWdpbiBvZiBhIGdseXBoIHRvIGJlIHVzZWQgd2hlbgog
ICAgIC8vIGRyYXdpbmcgdmVydGljYWxseSBvcmllbnRlZCB0ZXh0LiBJZiB0aGUgYXR0cmlidXRl
IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZQogICAg
IC8vIHdlcmUgc2V0IHRvIGhhbGYgb2YgdGhlIGVmZmVjdGl2ZSB2YWx1ZSBvZiBhdHRyaWJ1dGUg
aG9yaXotYWR2LXguCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IG1fZm9udEVsZW1l
bnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl94QXR0cik7CisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IG1fZm9udEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5f
eEF0dHIpOwogICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBob3Jpem9u
dGFsQWR2YW5jZVgoKSAvIDIuMGY7CiAKQEAgLTE5Miw3ICsxOTIsNyBAQCBmbG9hdCBTVkdGb250
RmFjZUVsZW1lbnQ6OnZlcnRpY2FsT3JpZ2luCiAgICAgLy8gU3BlYzogVGhlIGRlZmF1bHQgWS1j
b29yZGluYXRlIGluIHRoZSBmb250IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBvcmlnaW4gb2Yg
YSBnbHlwaCB0byBiZSB1c2VkIHdoZW4KICAgICAvLyBkcmF3aW5nIHZlcnRpY2FsbHkgb3JpZW50
ZWQgdGV4dC4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlz
IGFzIGlmIHRoZSBhdHRyaWJ1dGUKICAgICAvLyB3ZXJlIHNldCB0byB0aGUgcG9zaXRpb24gc3Bl
Y2lmaWVkIGJ5IHRoZSBmb250J3MgYXNjZW50IGF0dHJpYnV0ZS4gICAgICAgICAgICAgCi0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2
ZXJ0X29yaWdpbl95QXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IG1fZm9u
dEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpOwogICAgIGlmICh2
YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBhc2NlbnQoKTsKIApAQCAtMjA2LDcgKzIw
Niw3IEBAIGZsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6dmVydGljYWxBZHZhbmMKIAogICAgIC8v
IFNwZWM6IFRoZSBkZWZhdWx0IHZlcnRpY2FsIGFkdmFuY2UgYWZ0ZXIgcmVuZGVyaW5nIGEgZ2x5
cGggaW4gdmVydGljYWwgb3JpZW50YXRpb24uIElmIHRoZSBhdHRyaWJ1dGUgaXMKICAgICAvLyBu
b3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgZXF1aXZhbGVudCBvZiBv
bmUgZW0gd2VyZSBzcGVjaWZpZWQgKHNlZSB1bml0cy1wZXItZW0pLiAgICAgICAgICAgICAgICAg
ICAgCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IG1fZm9udEVsZW1lbnQtPmdldEF0
dHJpYnV0ZSh2ZXJ0X2Fkdl95QXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9
IG1fZm9udEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodmVydF9hZHZfeUF0dHIpOwogICAgICAg
IGlmICh2YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAxLjBmOwogCkBAIC0yMTksMTIg
KzIxOSwxMiBAQCBpbnQgU1ZHRm9udEZhY2VFbGVtZW50Ojphc2NlbnQoKSBjb25zdAogICAgIC8v
IHVuYWNjZW50ZWQgaGVpZ2h0IG9mIHRoZSBmb250IHdpdGhpbiB0aGUgZm9udCBjb29yZGluYXRl
IHN5c3RlbS4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLAogICAgIC8vIHRoZSBl
ZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0aGUgZGlmZmVyZW5jZSBi
ZXR3ZWVuIHRoZSB1bml0cy1wZXItZW0gdmFsdWUgYW5kIHRoZQogICAgIC8vIHZlcnQtb3JpZ2lu
LXkgdmFsdWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZvbnQuCi0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhc2NlbnRWYWx1ZSA9IGdldEF0dHJpYnV0ZShhc2NlbnRBdHRyKTsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGFzY2VudFZhbHVlID0gZmFzdEdldEF0dHJpYnV0ZShhc2NlbnRBdHRyKTsK
ICAgICBpZiAoIWFzY2VudFZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4oY2VpbGYoYXNjZW50VmFsdWUudG9GbG9hdCgpKSk7CiAKICAgICBpZiAobV9mb250
RWxlbWVudCkgewotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZlcnRPcmlnaW5ZID0gbV9m
b250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKTsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiB2ZXJ0T3JpZ2luWSA9IG1fZm9udEVsZW1lbnQtPmZhc3RHZXRBdHRy
aWJ1dGUodmVydF9vcmlnaW5feUF0dHIpOwogICAgICAgICBpZiAoIXZlcnRPcmlnaW5ZLmlzRW1w
dHkoKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHVuaXRzUGVyRW0oKSkg
LSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHZlcnRPcmlnaW5ZLnRvRmxvYXQoKSkpOwogICAgIH0K
QEAgLTIzOCw3ICsyMzgsNyBAQCBpbnQgU1ZHRm9udEZhY2VFbGVtZW50OjpkZXNjZW50KCkgY29u
c3QKICAgICAvLyBTcGVjOiBTYW1lIHN5bnRheCBhbmQgc2VtYW50aWNzIGFzIHRoZSAnZGVzY2Vu
dCcgZGVzY3JpcHRvciB3aXRoaW4gYW4gQGZvbnQtZmFjZSBydWxlLiBUaGUgbWF4aW11bQogICAg
IC8vIHVuYWNjZW50ZWQgZGVwdGggb2YgdGhlIGZvbnQgd2l0aGluIHRoZSBmb250IGNvb3JkaW5h
dGUgc3lzdGVtLiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsCiAgICAgLy8gdGhl
IGVmZmVjdCBpcyBhcyBpZiB0aGUgYXR0cmlidXRlIHdlcmUgc2V0IHRvIHRoZSB2ZXJ0LW9yaWdp
bi15IHZhbHVlIGZvciB0aGUgY29ycmVzcG9uZGluZyBmb250LgotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZGVzY2VudFZhbHVlID0gZ2V0QXR0cmlidXRlKGRlc2NlbnRBdHRyKTsKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGRlc2NlbnRWYWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoZGVzY2VudEF0
dHIpOwogICAgIGlmICghZGVzY2VudFZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAvLyAxNCBk
aWZmZXJlbnQgVzNDIFNWRyAxLjEgdGVzdGNhc2VzIHVzZSBhIG5lZ2F0aXZlIGRlc2NlbnQgdmFs
dWUsCiAgICAgICAgIC8vIHdoZXJlIGEgcG9zaXRpdmUgd2FzIG1lYW50IHRvIGJlIHVzZWQgIElu
Y2x1ZGluZzoKQEAgLTI0OCw3ICsyNDgsNyBAQCBpbnQgU1ZHRm9udEZhY2VFbGVtZW50OjpkZXNj
ZW50KCkgY29uc3QKICAgICB9CiAKICAgICBpZiAobV9mb250RWxlbWVudCkgewotICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHZlcnRPcmlnaW5ZID0gbV9mb250RWxlbWVudC0+Z2V0QXR0cmli
dXRlKHZlcnRfb3JpZ2luX3lBdHRyKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2ZXJ0
T3JpZ2luWSA9IG1fZm9udEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0
dHIpOwogICAgICAgICBpZiAoIXZlcnRPcmlnaW5ZLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHZlcnRPcmlnaW5ZLnRvRmxvYXQoKSkpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZU5hbWVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VOYW1lRWxlbWVudC5j
cHAJKHJldmlzaW9uIDg4OTQwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlTmFt
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIFBhc3NSZWZQdHI8
U1ZHRm9udEZhY2VOYW1lRWxlbWVudD4gU1ZHRm8KIAogUGFzc1JlZlB0cjxDU1NGb250RmFjZVNy
Y1ZhbHVlPiBTVkdGb250RmFjZU5hbWVFbGVtZW50OjpzcmNWYWx1ZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2FsKGdldEF0dHJpYnV0ZShTVkdO
YW1lczo6bmFtZUF0dHIpKTsKKyAgICByZXR1cm4gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRl
TG9jYWwoZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6bmFtZUF0dHIpKTsKIH0KIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAJKHJldmlz
aW9uIDg4OTQwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDggKzU1LDggQEAgU1ZHRm9udEZhY2VVcmlFbGVtZW50
Ojp+U1ZHRm9udEZhY2VVcmlFbAogCiBQYXNzUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+IFNW
R0ZvbnRGYWNlVXJpRWxlbWVudDo6c3JjVmFsdWUoKSBjb25zdAogewotICAgIFJlZlB0cjxDU1NG
b250RmFjZVNyY1ZhbHVlPiBzcmMgPSBDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVhdGUoZ2V0QXR0
cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKSk7Ci0gICAgQXRvbWljU3RyaW5nIHZhbHVlKGdl
dEF0dHJpYnV0ZShmb3JtYXRBdHRyKSk7CisgICAgUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+
IHNyYyA9IENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZShmYXN0R2V0QXR0cmlidXRlKFhMaW5r
TmFtZXM6OmhyZWZBdHRyKSk7CisgICAgQXRvbWljU3RyaW5nIHZhbHVlKGZhc3RHZXRBdHRyaWJ1
dGUoZm9ybWF0QXR0cikpOwogICAgIHNyYy0+c2V0Rm9ybWF0KHZhbHVlLmlzRW1wdHkoKSA/ICJz
dmciIDogdmFsdWUpOyAvLyBEZWZhdWx0IGZvcm1hdAogICAgIHJldHVybiBzcmMucmVsZWFzZSgp
OwogfQpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFNWR0ZvbnRGYWNlVXJpRWxlbWVudDo6bG9hZEZv
bnQoKQogICAgIGlmIChtX2NhY2hlZEZvbnQpCiAgICAgICAgIG1fY2FjaGVkRm9udC0+cmVtb3Zl
Q2xpZW50KHRoaXMpOwogCi0gICAgU3RyaW5nIGhyZWYgPSBnZXRBdHRyaWJ1dGUoWExpbmtOYW1l
czo6aHJlZkF0dHIpOworICAgIFN0cmluZyBocmVmID0gZmFzdEdldEF0dHJpYnV0ZShYTGlua05h
bWVzOjpocmVmQXR0cik7CiAgICAgaWYgKCFocmVmLmlzTnVsbCgpKSB7ICAgICAgICAKICAgICAg
ICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gZG9jdW1lbnQo
KS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3QoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaHJlZikpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0dseXBoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0dseXBoRWxlbWVudC5jcHAJKHJldmlzaW9uIDg4OTQwKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0dseXBoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBA
QCB2b2lkIFNWR0dseXBoRWxlbWVudDo6aW5oZXJpdFVuc3BlY2lmaWVkCiAKIHN0YXRpYyBpbmxp
bmUgZmxvYXQgcGFyc2VTVkdHbHlwaEF0dHJpYnV0ZShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJiBuYW1lKQogewotICAgIEF0b21pY1N0cmlu
ZyB2YWx1ZShlbGVtZW50LT5nZXRBdHRyaWJ1dGUobmFtZSkpOworICAgIEF0b21pY1N0cmluZyB2
YWx1ZShlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKG5hbWUpKTsKICAgICBpZiAodmFsdWUuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gU1ZHR2x5cGg6OmluaGVyaXRlZFZhbHVlKCk7CiAKQEAg
LTE0Niw3ICsxNDYsNyBAQCB2b2lkIFNWR0dseXBoRWxlbWVudDo6ZmlsbEF0dHJpYnV0ZVRvUHJv
CiBTVkdHbHlwaCBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2VuZXJpY0dseXBoSWRlbnRpZmllcihj
b25zdCBTVkdFbGVtZW50KiBlbGVtZW50KQogewogICAgIFNWR0dseXBoIGlkZW50aWZpZXI7Ci0g
ICAgaWRlbnRpZmllci5wYXRoRGF0YSA9IHBhcnNlUGF0aERhdGEoZWxlbWVudC0+Z2V0QXR0cmli
dXRlKFNWR05hbWVzOjpkQXR0cikpOworICAgIGlkZW50aWZpZXIucGF0aERhdGEgPSBwYXJzZVBh
dGhEYXRhKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmRBdHRyKSk7CiAgCiAg
ICAgLy8gU3BlYzogVGhlIGhvcml6b250YWwgYWR2YW5jZSBhZnRlciByZW5kZXJpbmcgdGhlIGds
eXBoIGluIGhvcml6b250YWwgb3JpZW50YXRpb24uCiAgICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSBp
cyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBz
ZXQgdG8gdGhlCkBAIC0xNzUsMTEgKzE3NSwxMSBAQCBTVkdHbHlwaCBTVkdHbHlwaEVsZW1lbnQ6
OmJ1aWxkR2VuZXJpY0dsCiBTVkdHbHlwaCBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2x5cGhJZGVu
dGlmaWVyKCkgY29uc3QKIHsKICAgICBTVkdHbHlwaCBpZGVudGlmaWVyKGJ1aWxkR2VuZXJpY0ds
eXBoSWRlbnRpZmllcih0aGlzKSk7Ci0gICAgaWRlbnRpZmllci5nbHlwaE5hbWUgPSBnZXRBdHRy
aWJ1dGUoU1ZHTmFtZXM6OmdseXBoX25hbWVBdHRyKTsKLSAgICBpZGVudGlmaWVyLm9yaWVudGF0
aW9uID0gcGFyc2VPcmllbnRhdGlvbihnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6Om9yaWVudGF0aW9u
QXR0cikpOwotICAgIGlkZW50aWZpZXIuYXJhYmljRm9ybSA9IHBhcnNlQXJhYmljRm9ybShnZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmFyYWJpY19mb3JtQXR0cikpOworICAgIGlkZW50aWZpZXIuZ2x5
cGhOYW1lID0gZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6Z2x5cGhfbmFtZUF0dHIpOworICAg
IGlkZW50aWZpZXIub3JpZW50YXRpb24gPSBwYXJzZU9yaWVudGF0aW9uKGZhc3RHZXRBdHRyaWJ1
dGUoU1ZHTmFtZXM6Om9yaWVudGF0aW9uQXR0cikpOworICAgIGlkZW50aWZpZXIuYXJhYmljRm9y
bSA9IHBhcnNlQXJhYmljRm9ybShmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjphcmFiaWNfZm9y
bUF0dHIpKTsKIAotICAgIFN0cmluZyBsYW5ndWFnZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6
bGFuZ0F0dHIpOworICAgIFN0cmluZyBsYW5ndWFnZSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OmxhbmdBdHRyKTsKICAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSkKICAgICAgICAgaWRl
bnRpZmllci5sYW5ndWFnZXMgPSBwYXJzZURlbGltaXRlZFN0cmluZyhsYW5ndWFnZSwgJywnKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDg4
OTQwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDEwICs2MywxMCBAQCB2b2lkIFNWR0hLZXJuRWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVuCiAKIHZvaWQgU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5n
UGFpcihLZXJuaW5nUGFpclZlY3RvciYga2VybmluZ1BhaXJzKQogewotICAgIFN0cmluZyB1MSA9
IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6dTFBdHRyKTsKLSAgICBTdHJpbmcgZzEgPSBnZXRBdHRy
aWJ1dGUoU1ZHTmFtZXM6OmcxQXR0cik7Ci0gICAgU3RyaW5nIHUyID0gZ2V0QXR0cmlidXRlKFNW
R05hbWVzOjp1MkF0dHIpOwotICAgIFN0cmluZyBnMiA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6
ZzJBdHRyKTsKKyAgICBTdHJpbmcgdTEgPSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjp1MUF0
dHIpOworICAgIFN0cmluZyBnMSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmcxQXR0cik7
CisgICAgU3RyaW5nIHUyID0gZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6dTJBdHRyKTsKKyAg
ICBTdHJpbmcgZzIgPSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpnMkF0dHIpOwogICAgIGlm
ICgodTEuaXNFbXB0eSgpICYmIGcxLmlzRW1wdHkoKSkgfHwgKHUyLmlzRW1wdHkoKSAmJiBnMi5p
c0VtcHR5KCkpKQogICAgICAgICByZXR1cm47CiAKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBTVkdI
S2VybkVsZW1lbnQ6OmJ1aWxkSG9yaXpvbnRhbEtlcgogICAgICAgICAmJiBwYXJzZUdseXBoTmFt
ZShnMiwga2VybmluZ1BhaXIuZ2x5cGhOYW1lMikKICAgICAgICAgJiYgcGFyc2VLZXJuaW5nVW5p
Y29kZVN0cmluZyh1MSwga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMSwga2VybmluZ1BhaXIudW5p
Y29kZU5hbWUxKQogICAgICAgICAmJiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUyLCBrZXJu
aW5nUGFpci51bmljb2RlUmFuZ2UyLCBrZXJuaW5nUGFpci51bmljb2RlTmFtZTIpKSB7Ci0gICAg
ICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmtBdHRyKS5z
dHJpbmcoKS50b0Zsb2F0KCk7CisgICAgICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBmYXN0R2V0
QXR0cmlidXRlKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgpOwogICAgICAgICBr
ZXJuaW5nUGFpcnMuYXBwZW5kKGtlcm5pbmdQYWlyKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk0MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3
IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2MKIGNvbnN0IEF0b21p
Y1N0cmluZyYgU1ZHU1ZHRWxlbWVudDo6Y29udGVudFNjcmlwdFR5cGUoKSBjb25zdAogewogICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBkZWZhdWx0VmFsdWUsICgi
dGV4dC9lY21hc2NyaXB0IikpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbiA9IGdldEF0dHJp
YnV0ZShTVkdOYW1lczo6Y29udGVudFNjcmlwdFR5cGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIG4gPSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpjb250ZW50U2NyaXB0VHlwZUF0
dHIpOwogICAgIHJldHVybiBuLmlzTnVsbCgpID8gZGVmYXVsdFZhbHVlIDogbjsKIH0KIApAQCAt
MTIwLDcgKzEyMCw3IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q29udGVudFNjcmlwdFR5cGUK
IGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHU1ZHRWxlbWVudDo6Y29udGVudFN0eWxlVHlwZSgpIGNv
bnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGRlZmF1
bHRWYWx1ZSwgKCJ0ZXh0L2NzcyIpKTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG4gPSBnZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmNvbnRlbnRTdHlsZVR5cGVBdHRyKTsKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIG4gPSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpjb250ZW50U3R5bGVUeXBl
QXR0cik7CiAgICAgcmV0dXJuIG4uaXNOdWxsKCkgPyBkZWZhdWx0VmFsdWUgOiBuOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gODg5NDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTUsNyArNTUsNyBAQCBQYXNzUmVmUHRyPFNWR1N0eWxlRWxlbWVudD4gU1ZHU3R5bGVF
bGVtCiBjb25zdCBBdG9taWNTdHJpbmcmIFNWR1N0eWxlRWxlbWVudDo6dHlwZSgpIGNvbnN0CiB7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGRlZmF1bHRWYWx1
ZSwgKCJ0ZXh0L2NzcyIpKTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG4gPSBnZXRBdHRyaWJ1
dGUoU1ZHTmFtZXM6OnR5cGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG4gPSBmYXN0
R2V0QXR0cmlidXRlKFNWR05hbWVzOjp0eXBlQXR0cik7CiAgICAgcmV0dXJuIG4uaXNOdWxsKCkg
PyBkZWZhdWx0VmFsdWUgOiBuOwogfQogCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgU1ZHU3R5bGVF
bGVtZW50OjpzZXRUeXBlKGNvbnN0IEF0b20KIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHU3R5bGVF
bGVtZW50OjptZWRpYSgpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBB
dG9taWNTdHJpbmcsIGRlZmF1bHRWYWx1ZSwgKCJhbGwiKSk7Ci0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBuID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjptZWRpYUF0dHIpOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbiA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6Om1lZGlhQXR0cik7CiAg
ICAgcmV0dXJuIG4uaXNOdWxsKCkgPyBkZWZhdWx0VmFsdWUgOiBuOwogfQogCkBAIC03OCw3ICs3
OCw3IEBAIHZvaWQgU1ZHU3R5bGVFbGVtZW50OjpzZXRNZWRpYShjb25zdCBBdG8KIAogU3RyaW5n
IFNWR1N0eWxlRWxlbWVudDo6dGl0bGUoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoU1ZHTmFtZXM6OnRpdGxlQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6OnRpdGxlQXR0cik7CiB9CiAKIHZvaWQgU1ZHU3R5bGVFbGVtZW50OjpzZXRUaXRsZShj
b25zdCBBdG9taWNTdHJpbmcmIHRpdGxlLCBFeGNlcHRpb25Db2RlJiBlYykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwx
MCArNjEsMTAgQEAgdm9pZCBTVkdWS2VybkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbgogCiB2
b2lkIFNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyKEtlcm5pbmdQYWly
VmVjdG9yJiBrZXJuaW5nUGFpcnMpCiB7Ci0gICAgU3RyaW5nIHUxID0gZ2V0QXR0cmlidXRlKFNW
R05hbWVzOjp1MUF0dHIpOwotICAgIFN0cmluZyBnMSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6
ZzFBdHRyKTsKLSAgICBTdHJpbmcgdTIgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnUyQXR0cik7
Ci0gICAgU3RyaW5nIGcyID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpnMkF0dHIpOworICAgIFN0
cmluZyB1MSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnUxQXR0cik7CisgICAgU3RyaW5n
IGcxID0gZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6ZzFBdHRyKTsKKyAgICBTdHJpbmcgdTIg
PSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjp1MkF0dHIpOworICAgIFN0cmluZyBnMiA9IGZh
c3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkg
JiYgZzEuaXNFbXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcyLmlzRW1wdHkoKSkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFNWR1ZLZXJuRWxlbWVudDo6YnVp
bGRWZXJ0aWNhbEtlcm5pCiAgICAgICAgICYmIHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFp
ci5nbHlwaE5hbWUyKQogICAgICAgICAmJiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBr
ZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBrZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCiAgICAg
ICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVS
YW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMikpIHsKLSAgICAgICAga2VybmluZ1BhaXIu
a2VybmluZyA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6a0F0dHIpLnN0cmluZygpLnRvRmxvYXQo
KTsKKyAgICAgICAga2VybmluZ1BhaXIua2VybmluZyA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OmtBdHRyKS5zdHJpbmcoKS50b0Zsb2F0KCk7CiAgICAgICAgIGtlcm5pbmdQYWlycy5hcHBl
bmQoa2VybmluZ1BhaXIpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmlt
YXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4ODk0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9j
dW1lbgogICAgIGZvciAoQ29udGFpbmVyTm9kZSogbiA9IHRoaXM7IG47IG4gPSBuLT5wYXJlbnRO
b2RlKCkpCiAgICAgICAgIEFTU0VSVCghbi0+aXNTVkdTaGFkb3dSb290KCkpOwogI2VuZGlmCi0g
ICAgbV9hdHRyaWJ1dGVOYW1lID0gY29uc3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBnZXRBdHRy
aWJ1dGUoU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKSk7CisgICAgbV9hdHRyaWJ1dGVOYW1l
ID0gY29uc3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVz
OjphdHRyaWJ1dGVOYW1lQXR0cikpOwogICAgIFNWR1NWR0VsZW1lbnQqIG93bmVyID0gb3duZXJT
VkdFbGVtZW50KCk7CiAgICAgaWYgKCFvd25lcikKICAgICAgICAgcmV0dXJuOwpAQCAtMTg0LDcg
KzE4NCw3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW4KICAgICBt
X3RpbWVDb250YWluZXItPnNldERvY3VtZW50T3JkZXJJbmRleGVzRGlydHkoKTsKIAogICAgIC8v
ICJJZiBubyBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgYmVnaW4gdmFsdWUgKGFu
IG9mZnNldC12YWx1ZSBvZiAwKSBtdXN0IGJlIGV2YWx1YXRlZC4iCi0gICAgaWYgKCFoYXNBdHRy
aWJ1dGUoU1ZHTmFtZXM6OmJlZ2luQXR0cikpCisgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKFNW
R05hbWVzOjpiZWdpbkF0dHIpKQogICAgICAgICBtX2JlZ2luVGltZXMuYXBwZW5kKDApOwogCiAg
ICAgaWYgKG1faXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbCkgewpAQCAtMzczLDcgKzM3Myw3IEBA
IHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQKICAgICAgICAgaWYgKCFt
X2NvbmRpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBkaXNjb25uZWN0Q29uZGl0aW9u
cygpOwogICAgICAgICAgICAgbV9jb25kaXRpb25zLmNsZWFyKCk7Ci0gICAgICAgICAgICBwYXJz
ZUJlZ2luT3JFbmQoZ2V0QXR0cmlidXRlKFNWR05hbWVzOjplbmRBdHRyKSwgRW5kKTsKKyAgICAg
ICAgICAgIHBhcnNlQmVnaW5PckVuZChmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjplbmRBdHRy
KSwgRW5kKTsKICAgICAgICAgfQogICAgICAgICBwYXJzZUJlZ2luT3JFbmQoYXR0ci0+dmFsdWUo
KS5zdHJpbmcoKSwgQmVnaW4pOwogICAgICAgICBpZiAoaW5Eb2N1bWVudCgpKQpAQCAtMzgyLDcg
KzM4Miw3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQKICAgICAg
ICAgaWYgKCFtX2NvbmRpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBkaXNjb25uZWN0
Q29uZGl0aW9ucygpOwogICAgICAgICAgICAgbV9jb25kaXRpb25zLmNsZWFyKCk7Ci0gICAgICAg
ICAgICBwYXJzZUJlZ2luT3JFbmQoZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpiZWdpbkF0dHIpLCBC
ZWdpbik7CisgICAgICAgICAgICBwYXJzZUJlZ2luT3JFbmQoZmFzdEdldEF0dHJpYnV0ZShTVkdO
YW1lczo6YmVnaW5BdHRyKSwgQmVnaW4pOwogICAgICAgICB9CiAgICAgICAgIHBhcnNlQmVnaW5P
ckVuZChhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBFbmQpOwogICAgICAgICBpZiAoaW5Eb2N1bWVu
dCgpKQpAQCAtNTIzLDcgKzUyMyw3IEBAIFNWR1NNSUxFbGVtZW50OjpSZXN0YXJ0IFNWR1NNSUxF
bGVtZW50OjoKIHsgICAgCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJp
bmcsIG5ldmVyLCAoIm5ldmVyIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRv
bWljU3RyaW5nLCB3aGVuTm90QWN0aXZlLCAoIndoZW5Ob3RBY3RpdmUiKSk7Ci0gICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6cmVzdGFydEF0dHIp
OworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKFNWR05h
bWVzOjpyZXN0YXJ0QXR0cik7CiAgICAgaWYgKHZhbHVlID09IG5ldmVyKQogICAgICAgICByZXR1
cm4gUmVzdGFydE5ldmVyOwogICAgIGlmICh2YWx1ZSA9PSB3aGVuTm90QWN0aXZlKQpAQCAtNTM0
LDIwICs1MzQsMjAgQEAgU1ZHU01JTEVsZW1lbnQ6OlJlc3RhcnQgU1ZHU01JTEVsZW1lbnQ6Ogog
U1ZHU01JTEVsZW1lbnQ6OkZpbGxNb2RlIFNWR1NNSUxFbGVtZW50OjpmaWxsKCkgY29uc3QKIHsg
ICAKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgZnJlZXplLCAo
ImZyZWV6ZSIpKTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRl
KFNWR05hbWVzOjpmaWxsQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGZh
c3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmZpbGxBdHRyKTsKICAgICByZXR1cm4gdmFsdWUgPT0g
ZnJlZXplID8gRmlsbEZyZWV6ZSA6IEZpbGxSZW1vdmU7CiB9CiAgICAgCiBTdHJpbmcgU1ZHU01J
TEVsZW1lbnQ6OnhsaW5rSHJlZigpIGNvbnN0CiB7ICAgIAotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKFhM
aW5rTmFtZXM6OmhyZWZBdHRyKTsKIH0KICAgICAKIFNNSUxUaW1lIFNWR1NNSUxFbGVtZW50Ojpk
dXIoKSBjb25zdAogeyAgIAogICAgIGlmIChtX2NhY2hlZER1ciAhPSBpbnZhbGlkQ2FjaGVkVGlt
ZSkKICAgICAgICAgcmV0dXJuIG1fY2FjaGVkRHVyOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmR1ckF0dHIpOworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpkdXJBdHRyKTsKICAg
ICBTTUlMVGltZSBjbG9ja1ZhbHVlID0gcGFyc2VDbG9ja1ZhbHVlKHZhbHVlKTsKICAgICByZXR1
cm4gbV9jYWNoZWREdXIgPSBjbG9ja1ZhbHVlIDw9IDAgPyBTTUlMVGltZTo6dW5yZXNvbHZlZCgp
IDogY2xvY2tWYWx1ZTsKIH0KQEAgLTU1Niw3ICs1NTYsNyBAQCBTTUlMVGltZSBTVkdTTUlMRWxl
bWVudDo6cmVwZWF0RHVyKCkgY29uCiB7ICAgIAogICAgIGlmIChtX2NhY2hlZFJlcGVhdER1ciAh
PSBpbnZhbGlkQ2FjaGVkVGltZSkKICAgICAgICAgcmV0dXJuIG1fY2FjaGVkUmVwZWF0RHVyOwot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJl
cGVhdER1ckF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0
cmlidXRlKFNWR05hbWVzOjpyZXBlYXREdXJBdHRyKTsKICAgICBTTUlMVGltZSBjbG9ja1ZhbHVl
ID0gcGFyc2VDbG9ja1ZhbHVlKHZhbHVlKTsKICAgICBtX2NhY2hlZFJlcGVhdER1ciA9IGNsb2Nr
VmFsdWUgPD0gMCA/IFNNSUxUaW1lOjp1bnJlc29sdmVkKCkgOiBjbG9ja1ZhbHVlOwogICAgIHJl
dHVybiBtX2NhY2hlZFJlcGVhdER1cjsKQEAgLTU2Nyw3ICs1NjcsNyBAQCBTTUlMVGltZSBTVkdT
TUlMRWxlbWVudDo6cmVwZWF0Q291bnQoKSBjCiB7ICAgIAogICAgIGlmIChtX2NhY2hlZFJlcGVh
dENvdW50ICE9IGludmFsaWRDYWNoZWRUaW1lKQogICAgICAgICByZXR1cm4gbV9jYWNoZWRSZXBl
YXRDb3VudDsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRlKFNW
R05hbWVzOjpyZXBlYXRDb3VudEF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpyZXBlYXRDb3VudEF0dHIpOwogICAgIGlmICh2
YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CiAK
QEAgLTU4Myw3ICs1ODMsNyBAQCBTTUlMVGltZSBTVkdTTUlMRWxlbWVudDo6bWF4VmFsdWUoKSBj
b25zCiB7ICAgIAogICAgIGlmIChtX2NhY2hlZE1heCAhPSBpbnZhbGlkQ2FjaGVkVGltZSkKICAg
ICAgICAgcmV0dXJuIG1fY2FjaGVkTWF4OwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6Om1heEF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjptYXhBdHRyKTsKICAgICBTTUlM
VGltZSByZXN1bHQgPSBwYXJzZUNsb2NrVmFsdWUodmFsdWUpOwogICAgIHJldHVybiBtX2NhY2hl
ZE1heCA9IChyZXN1bHQuaXNVbnJlc29sdmVkKCkgfHwgcmVzdWx0IDwgMCkgPyBTTUlMVGltZTo6
aW5kZWZpbml0ZSgpIDogcmVzdWx0OwogfQpAQCAtNTkyLDcgKzU5Miw3IEBAIFNNSUxUaW1lIFNW
R1NNSUxFbGVtZW50OjptaW5WYWx1ZSgpIGNvbnMKIHsgICAgCiAgICAgaWYgKG1fY2FjaGVkTWlu
ICE9IGludmFsaWRDYWNoZWRUaW1lKQogICAgICAgICByZXR1cm4gbV9jYWNoZWRNaW47Ci0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6bWluQXR0
cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6Om1pbkF0dHIpOwogICAgIFNNSUxUaW1lIHJlc3VsdCA9IHBhcnNlQ2xvY2tWYWx1ZSh2
YWx1ZSk7CiAgICAgcmV0dXJuIG1fY2FjaGVkTWluID0gKHJlc3VsdC5pc1VucmVzb2x2ZWQoKSB8
fCByZXN1bHQgPCAwKSA/IDAgOiByZXN1bHQ7CiB9Cg==
</data>
<flag name="review"
          id="91278"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>