<?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>175752</bug_id>
          
          <creation_ts>2017-08-19 10:28:34 -0700</creation_ts>
          <short_desc>Factor :before/:after render tree mutations into a RenderTreeUpdater helper class</short_desc>
          <delta_ts>2017-08-28 05:27:28 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1340402</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-19 10:28:34 -0700</bug_when>
    <thetext>Move render tree mutation code out from PseudoElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340407</commentid>
    <comment_count>1</comment_count>
      <attachid>318586</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-19 10:36:31 -0700</bug_when>
    <thetext>Created attachment 318586
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340419</commentid>
    <comment_count>2</comment_count>
      <attachid>318586</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2017-08-19 14:00:04 -0700</bug_when>
    <thetext>Comment on attachment 318586
patch

r=me

Thought: Maybe RenderTreeUpdater could have a RenderView&amp; getter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340468</commentid>
    <comment_count>3</comment_count>
      <attachid>318598</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-20 01:59:38 -0700</bug_when>
    <thetext>Created attachment 318598
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340470</commentid>
    <comment_count>4</comment_count>
      <attachid>318598</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-20 02:42:12 -0700</bug_when>
    <thetext>Comment on attachment 318598
patch

Clearing flags on attachment: 318598

Committed r220956: &lt;http://trac.webkit.org/changeset/220956&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340471</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-20 02:42:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342814</commentid>
    <comment_count>6</comment_count>
      <attachid>318598</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-08-28 05:23:17 -0700</bug_when>
    <thetext>Comment on attachment 318598
patch

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

&gt; Source/WebCore/style/RenderTreeUpdater.cpp:350
&gt; -    FlowThreadController&amp; flowThreadController = element.document().renderView()-&gt;flowThreadController();
&gt; +    FlowThreadController&amp; flowThreadController = renderView().flowThreadController();

This doesn&apos;t build (with CSS regions enabled), because this is a static function, so there&apos;s not this to call renderView().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342815</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-28 05:27:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/34108878&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318586</attachid>
            <date>2017-08-19 10:36:31 -0700</date>
            <delta_ts>2017-08-20 01:59:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rendertreeupdater-generated-content.patch</filename>
            <type>text/plain</type>
            <size>27903</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE3LTA4LTE5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgOmJlZm9yZS86YWZ0
ZXIgcmVuZGVyIHRyZWUgbXV0YXRpb25zIGludG8gYSBSZW5kZXJUcmVlVXBkYXRlciBoZWxwZXIg
Y2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NTc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmUgY29kZSB0aGF0IGNvbnN0cnVjdHMgZ2VuZXJhdGVkIGNvbnRlbnQgcmVuZGVyZXJzIG91dCBm
cm9tIFBzZXVkb0VsZW1lbnQuCisgICAgICAgIEFsc28gcmVmYWN0b3IgdGhlIHJlbGF0ZWQgY29k
ZSBmcm9tIFJlbmRlclRyZWVVcGRhdGVyIG1haW4gY2xhc3MgaW50bworICAgICAgICBSZW5kZXJU
cmVlVXBkYXRlcjo6R2VuZXJhdGVkQ29udGVudCBoZWxwZXIgY2xhc3MuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL1BzZXVkb0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHNldWRvRWxlbWVudDo6cmVzb2x2ZUN1c3Rv
bVN0eWxlKTogRGVsZXRlZC4KKworICAgICAgICAgICAgTm90IG5lZWRlZCBhbnltb3JlLgorCisg
ICAgICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50OjpkaWRBdHRhY2hSZW5kZXJlcnMpOiBEZWxl
dGVkLgorCisgICAgICAgICAgICBNb3ZlcyB0byBjcmVhdGVDb250ZW50UmVuZGVyZXJzIGluIEdl
bmVyYXRlZENvbnRlbnQuCisKKyAgICAgICAgKFdlYkNvcmU6OlBzZXVkb0VsZW1lbnQ6OmRpZFJl
Y2FsY1N0eWxlKTogRGVsZXRlZC4KKworICAgICAgICAgICAgTW92ZXMgdG8gdXBkYXRlU3R5bGVG
b3JDb250ZW50UmVuZGVyZXJzIGluIEdlbmVyYXRlZENvbnRlbnQuCisKKyAgICAgICAgKiBkb20v
UHNldWRvRWxlbWVudC5oOgorICAgICAgICAqIHN0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjpSZW5kZXJUcmVlVXBkYXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6flJlbmRlclRyZWVVcGRhdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjpjb21taXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OnVwZGF0ZUJlZm9yZURlc2NlbmRhbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjp1cGRhdGVBZnRlckRlc2NlbmRh
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6Om5lZWRzUHNldWRvRWxlbWVudCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6dXBkYXRlQmVmb3JlT3JBZnRlclBz
ZXVkb0VsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0
ZXI6OnVwZGF0ZVF1b3Rlc1VwVG8pOiBEZWxldGVkLgorCisgICAgICAgICAgICBRdW90ZXMgYW5k
IG90aGVyIDpiZWZvcmUvOmFmdGVyIHN1cHBvcnQgbW92ZXMgdG8gR2VuZXJhdGVkQ29udGVudCBo
ZWxwd2UuCisKKyAgICAgICAgKiBzdHlsZS9SZW5kZXJUcmVlVXBkYXRlci5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OmdlbmVyYXRlZENvbnRlbnQpOgorICAgICAgICAq
IHN0eWxlL1JlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQ6OkdlbmVy
YXRlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OkdlbmVy
YXRlZENvbnRlbnQ6OnVwZGF0ZUJlZm9yZVBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQ6OnVwZGF0ZUFmdGVyUHNldWRv
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6R2VuZXJhdGVk
Q29udGVudDo6dXBkYXRlUmVtYWluaW5nUXVvdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRyZWVVcGRhdGVyOjpHZW5lcmF0ZWRDb250ZW50Ojp1cGRhdGVRdW90ZXNVcFRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUNvbnRlbnRSZW5kZXJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
dXBkYXRlU3R5bGVGb3JDb250ZW50UmVuZGVyZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRyZWVVcGRhdGVyOjpHZW5lcmF0ZWRDb250ZW50Ojp1cGRhdGVQc2V1ZG9FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjpHZW5lcmF0ZWRDb250ZW50OjpuZWVk
c1BzZXVkb0VsZW1lbnQpOgorICAgICAgICAqIHN0eWxlL1JlbmRlclRyZWVVcGRhdGVyR2VuZXJh
dGVkQ29udGVudC5oOiBBZGRlZC4KKwogMjAxNy0wOC0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFtNYWNdIENoYW5nZSB1aW50OF90KiB0byBWZWN0b3I8dWludDhf
dD4gdHlwZSBpbiBhbGwgY3J5cHRvIGFsZ29yaXRobSBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyMDkxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNzk2LDYgKzI3OTYsNyBAQCBzZXQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgc3R5bGUvUmVuZGVyVHJlZVBvc2l0aW9uLmNwcAogICAgIHN0eWxlL1Jl
bmRlclRyZWVVcGRhdGVyLmNwcAogICAgIHN0eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0
ZXIuY3BwCisgICAgc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcAog
ICAgIHN0eWxlL1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwCiAgICAgc3R5bGUvU3R5bGVD
aGFuZ2UuY3BwCiAgICAgc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIyMDkxNikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjc5NSw2ICs2Nzk1LDggQEAKIAkJRTQ4RTMz
MkMxRjQ3MDM3QzAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODI4NDA5MUY0NDU5
NTYwMDg2M0FDMyAvKiBSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmggKi87IH07CiAJCUU0
OEUzMzJEMUY0NzAzODAwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OEUzMzJBMUY0
NkM5ODAwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcCAqLzsgfTsKIAkJ
RTQ4RTMzMkUxRjQ3MDM4MDAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OEUzMzI4MUY0
NkM5N0YwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmggKi87IH07CisJCUU0
OEUzMzMxMUY0NzQzNzAwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRl
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4
RTMzMkYxRjQ3NDM2NTAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVu
dC5jcHAgKi87IH07CisJCUU0OEUzMzMyMUY0NzQzNzMwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBk
YXRlckdlbmVyYXRlZENvbnRlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0OEUzMzMwMUY0NzQzNjcwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBkYXRl
ckdlbmVyYXRlZENvbnRlbnQuaCAqLzsgfTsKIAkJRTQ5MTZGRjcxOTVERjZBMDAwNUFCMzQ5IC8q
IExheWVyRmx1c2hUaHJvdHRsZVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDkxNkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRo
cm90dGxlU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFNDk0NkVBRTE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OTQ2RUFDMTU2
RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuY3BwICovOyB9OwogCQlFNDk0NkVBRjE1
NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDk0NkVBRDE1NkU2NEREMDBEMzI5N0YgLyogU3R5
bGVSdWxlSW1wb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTE1NDEwLDYgKzE1NDEyLDggQEAKIAkJRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4
IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2ltcGxlTGluZUxheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDhFMzMy
ODFGNDZDOTdGMDBCQUIwRUYgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0OEUzMzJBMUY0NkM5ODAwMEJBQjBFRiAvKiBS
ZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFNDhFMzMyRjFGNDc0MzY1MDBCQUIwRUYgLyogUmVuZGVyVHJlZVVwZGF0
ZXJHZW5lcmF0ZWRDb250ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUU0OEUzMzMwMUY0NzQzNjcwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBk
YXRlckdlbmVyYXRlZENvbnRlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0OTE2RkY2MTk1REY2QTAwMDVBQjM0OSAvKiBMYXllckZsdXNoVGhyb3R0bGVT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXllckZsdXNoVGhyb3R0
bGVTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDk0NkVBQzE1NkU2NERE
MDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0eWxlUnVsZUltcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0OTQ2RUFEMTU2RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSdWxlSW1wb3J0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDkyMiw2ICsyNDkyNiw4IEBACiAJCQkJRTQ2MTgwMjgx
QzhBMDZDRDAwMjZDMDJDIC8qIFJlbmRlclRyZWVVcGRhdGVyLmggKi8sCiAJCQkJRTQ4Mjg0MDYx
RjQ0NTk0QjAwODYzQUMzIC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwICovLAog
CQkJCUU0ODI4NDA5MUY0NDU5NTYwMDg2M0FDMyAvKiBSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0
dGVyLmggKi8sCisJCQkJRTQ4RTMzMkYxRjQ3NDM2NTAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRh
dGVyR2VuZXJhdGVkQ29udGVudC5jcHAgKi8sCisJCQkJRTQ4RTMzMzAxRjQ3NDM2NzAwQkFCMEVG
IC8qIFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oICovLAogCQkJCUU0OEUzMzJB
MUY0NkM5ODAwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcCAqLywKIAkJ
CQlFNDhFMzMyODFGNDZDOTdGMDBCQUIwRUYgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5o
ICovLAogCQkJCUU0MDFFMEE1MUMzQzBDRjcwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5jcHAgKi8s
CkBAIC0yOTQ2MSw2ICsyOTQ2Nyw3IEBACiAJCQkJRkQ0NUE5NEYxNzVEM0YzRTAwQzIxRUM4IC8q
IFNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDQ1QTk1QjE3NUQ0MUVFMDBDMjFFQzggLyog
U2hhcGVJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ0NUE5NTIxNzVEM0YzRTAwQzIx
RUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCUU0OEUzMzMyMUY0
NzQzNzMwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTRBOTU0RTBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVkQnVm
ZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEgLyogU2hh
cmVkVGltZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzExMTIsNiArMzExMTksNyBAQAogCQkJCTlC
RDRFOTFBMUM0NjJDRkMwMDUwNjVCQyAvKiBDdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjJDRDMyNTkxMTU3RTU3QzAwNjNCMEE3IC8qIEN1c3RvbUV2ZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTIwMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFz
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDhFMzMzMTFGNDc0MzcwMDBCQUIwRUYgLyogUmVu
ZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
QkM2QTIzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTdCQzZBMjcxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ29udGV4dC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTQ1NkYxODE2NzdENzRFMDA1RURERjkgLyogRGF0YWJh
c2VNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bz
ZXVkb0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9F
bGVtZW50LmNwcAkocmV2aXNpb24gMjIwOTE2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BzZXVk
b0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw1MCArNzgsOSBAQCB2b2lkIFBzZXVk
b0VsZW1lbnQ6OmNsZWFySG9zdEVsZW1lbnQoKQogICAgIG1faG9zdEVsZW1lbnQgPSBudWxscHRy
OwogfQogCi1zdGQ6Om9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gUHNldWRvRWxlbWVudDo6cmVzb2x2
ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVy
U3R5bGUqKQotewotICAgIGF1dG8qIHN0eWxlID0gbV9ob3N0RWxlbWVudC0+cmVuZGVyZXIoKS0+
Z2V0Q2FjaGVkUHNldWRvU3R5bGUobV9wc2V1ZG9JZCwgJnBhcmVudFN0eWxlKTsKLSAgICBpZiAo
IXN0eWxlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiBFbGVtZW50
U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKCpzdHlsZSkpOwotfQotCi12b2lkIFBzZXVkb0Vs
ZW1lbnQ6OmRpZEF0dGFjaFJlbmRlcmVycygpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogcmVuZGVy
ZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0
eWxlKCkuaGFzRmxvd0Zyb20oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgQVNTRVJUKHN0eWxlLmNvbnRl
bnREYXRhKCkpOwotCi0gICAgZm9yIChjb25zdCBDb250ZW50RGF0YSogY29udGVudCA9IHN0eWxl
LmNvbnRlbnREYXRhKCk7IGNvbnRlbnQ7IGNvbnRlbnQgPSBjb250ZW50LT5uZXh0KCkpIHsKLSAg
ICAgICAgYXV0byBjaGlsZCA9IGNvbnRlbnQtPmNyZWF0ZUNvbnRlbnRSZW5kZXJlcihkb2N1bWVu
dCgpLCBzdHlsZSk7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aXNDaGlsZEFsbG93ZWQoKmNoaWxk
LCBzdHlsZSkpCi0gICAgICAgICAgICByZW5kZXJlci0+YWRkQ2hpbGQoY2hpbGQubGVha1B0cigp
KTsKLSAgICB9Ci19Ci0KIGJvb2wgUHNldWRvRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIHBzZXVkb0VsZW1lbnRSZW5kZXJl
cklzTmVlZGVkKCZzdHlsZSk7CiB9CiAKLXZvaWQgUHNldWRvRWxlbWVudDo6ZGlkUmVjYWxjU3R5
bGUoU3R5bGU6OkNoYW5nZSkKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIFRoZSByZW5kZXJlcnMgaW5zaWRlIHBzZXVkbyBlbGVtZW50cyBhcmUgYW5v
bnltb3VzIHNvIHRoZXkgZG9uJ3QgZ2V0IG5vdGlmaWVkIG9mIHJlY2FsY1N0eWxlIGFuZCBtdXN0
IGhhdmUKLSAgICAvLyB0aGUgc3R5bGUgcHJvcGFnYXRlZCBkb3dud2FyZCBtYW51YWxseSBzaW1p
bGFyIHRvIFJlbmRlck9iamVjdDo6cHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuLgot
ICAgIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyID0gKnRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgZm9y
IChSZW5kZXJPYmplY3QqIGNoaWxkID0gcmVuZGVyZXIubmV4dEluUHJlT3JkZXIoJnJlbmRlcmVy
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRJblByZU9yZGVyKCZyZW5kZXJlcikpIHsKLSAg
ICAgICAgLy8gV2Ugb25seSBtYW5hZ2UgdGhlIHN0eWxlIGZvciB0aGUgZ2VuZXJhdGVkIGNvbnRl
bnQgd2hpY2ggbXVzdCBiZSBpbWFnZXMgb3IgdGV4dC4KLSAgICAgICAgaWYgKCFpczxSZW5kZXJJ
bWFnZT4oKmNoaWxkKSAmJiAhaXM8UmVuZGVyUXVvdGU+KCpjaGlsZCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgYXV0byBjcmVhdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRl
U3R5bGVJbmhlcml0aW5nRnJvbVBzZXVkb1N0eWxlKHJlbmRlcmVyLnN0eWxlKCkpOwotICAgICAg
ICBkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqY2hpbGQpLnNldFN0eWxlKFdURk1vdmUoY3JlYXRl
ZFN0eWxlKSk7Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1BzZXVkb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
UHNldWRvRWxlbWVudC5oCShyZXZpc2lvbiAyMjA5MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
UHNldWRvRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0Miw2IEBAIHB1YmxpYzoK
ICAgICBFbGVtZW50KiBob3N0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdEVsZW1lbnQ7
IH0KICAgICB2b2lkIGNsZWFySG9zdEVsZW1lbnQoKTsKIAotICAgIHN0ZDo6b3B0aW9uYWw8RWxl
bWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVjYWxjU3R5
bGUoU3R5bGU6OkNoYW5nZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNv
bnN0IFJlbmRlclN0eWxlJikgb3ZlcnJpZGU7CiAKICAgICAvLyBBcyBwZXIgaHR0cDovL2Rldi53
My5vcmcvY3Nzd2cvY3NzMy1yZWdpb25zLyNmbG93LWludG8sIHBzZXVkby1lbGVtZW50cyBzdWNo
IGFzIDo6Zmlyc3QtbGluZSwgOjpmaXJzdC1sZXR0ZXIsIDo6YmVmb3JlIG9yIDo6YWZ0ZXIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHJldmlzaW9u
IDIyMDkxNikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOCBAQAogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3Jl
ZW4uaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlck5hbWVk
Rmxvd1RocmVhZC5oIgotI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VHJlZVVwZGF0ZXJGaXJzdExldHRlci5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyR2Vu
ZXJhdGVkQ29udGVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaCIK
ICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVUcmVlUmVzb2x2ZXIu
aCIKQEAgLTgyLDkgKzgyLDEzIEBAIFJlbmRlclRyZWVVcGRhdGVyOjpQYXJlbnQ6OlBhcmVudChF
bGVtZW4KIHsKIH0KIAotCiBSZW5kZXJUcmVlVXBkYXRlcjo6UmVuZGVyVHJlZVVwZGF0ZXIoRG9j
dW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fZ2Vu
ZXJhdGVkQ29udGVudChzdGQ6Om1ha2VfdW5pcXVlPEdlbmVyYXRlZENvbnRlbnQ+KCp0aGlzKSkK
K3sKK30KKworUmVuZGVyVHJlZVVwZGF0ZXI6On5SZW5kZXJUcmVlVXBkYXRlcigpCiB7CiB9CiAK
QEAgLTEyOSwxMSArMTMzLDcgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6Y29tbWl0KHN0ZDo6
dW5pcQogICAgIGZvciAoYXV0byogcm9vdCA6IGZpbmRSZW5kZXJpbmdSb290cygqbV9zdHlsZVVw
ZGF0ZSkpCiAgICAgICAgIHVwZGF0ZVJlbmRlclRyZWUoKnJvb3QpOwogCi0gICAgaWYgKG1fZG9j
dW1lbnQucmVuZGVyVmlldygpLT5oYXNRdW90ZXNOZWVkaW5nVXBkYXRlKCkpIHsKLSAgICAgICAg
dXBkYXRlUXVvdGVzVXBUbyhudWxscHRyKTsKLSAgICAgICAgbV9wcmV2aW91c1VwZGF0ZWRRdW90
ZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fZG9jdW1lbnQucmVuZGVyVmlldygpLT5zZXRIYXNRdW90
ZXNOZWVkaW5nVXBkYXRlKGZhbHNlKTsKLSAgICB9CisgICAgZ2VuZXJhdGVkQ29udGVudCgpLnVw
ZGF0ZVJlbWFpbmluZ1F1b3RlcygpOwogCiAgICAgbV9zdHlsZVVwZGF0ZSA9IG51bGxwdHI7CiB9
CkBAIC0yNDcsMTIgKzI0NywxMiBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpwb3BQYXJlbnRz
VG9EZXB0CiAKIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnVwZGF0ZUJlZm9yZURlc2NlbmRhbnRz
KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgdXBkYXRlQmVmb3JlT3JBZnRlclBzZXVkb0VsZW1l
bnQoZWxlbWVudCwgQkVGT1JFKTsKKyAgICBnZW5lcmF0ZWRDb250ZW50KCkudXBkYXRlQmVmb3Jl
UHNldWRvRWxlbWVudChlbGVtZW50KTsKIH0KIAogdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dXBk
YXRlQWZ0ZXJEZXNjZW5kYW50cyhFbGVtZW50JiBlbGVtZW50LCBTdHlsZTo6Q2hhbmdlIHN0eWxl
Q2hhbmdlKQogewotICAgIHVwZGF0ZUJlZm9yZU9yQWZ0ZXJQc2V1ZG9FbGVtZW50KGVsZW1lbnQs
IEFGVEVSKTsKKyAgICBnZW5lcmF0ZWRDb250ZW50KCkudXBkYXRlQWZ0ZXJQc2V1ZG9FbGVtZW50
KGVsZW1lbnQpOwogCiAgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKQEAgLTUxOCw3NSArNTE4LDYgQEAgdm9pZCBSZW5kZXJUcmVlVXBk
YXRlcjo6aW52YWxpZGF0ZVdoaXRlcwogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgbmVlZHNQc2V1
ZG9FbGVtZW50KEVsZW1lbnQmIGN1cnJlbnQsIFBzZXVkb0lkIHBzZXVkb0lkKQotewotICAgIGlm
ICghY3VycmVudC5yZW5kZXJlcigpIHx8ICFjdXJyZW50LnJlbmRlcmVyKCktPmNhbkhhdmVHZW5l
cmF0ZWRDaGlsZHJlbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGN1cnJlbnQu
aXNQc2V1ZG9FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXBzZXVk
b0VsZW1lbnRSZW5kZXJlcklzTmVlZGVkKGN1cnJlbnQucmVuZGVyZXIoKS0+Z2V0Q2FjaGVkUHNl
dWRvU3R5bGUocHNldWRvSWQpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp1cGRhdGVCZWZvcmVPckFmdGVyUHNl
dWRvRWxlbWVudChFbGVtZW50JiBjdXJyZW50LCBQc2V1ZG9JZCBwc2V1ZG9JZCkKLXsKLSAgICBQ
c2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gcHNldWRvSWQgPT0gQkVGT1JFID8gY3VycmVu
dC5iZWZvcmVQc2V1ZG9FbGVtZW50KCkgOiBjdXJyZW50LmFmdGVyUHNldWRvRWxlbWVudCgpOwot
Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gcHNldWRvRWxlbWVudCA/IHBzZXVkb0VsZW1lbnQt
PnJlbmRlcmVyKCkgOiBudWxscHRyKQotICAgICAgICByZW5kZXJUcmVlUG9zaXRpb24oKS5pbnZh
bGlkYXRlTmV4dFNpYmxpbmcoKnJlbmRlcmVyKTsKLQotICAgIGJvb2wgbmVlZHNQc2V1ZG9FbGVt
ZW50ID0gV2ViQ29yZTo6bmVlZHNQc2V1ZG9FbGVtZW50KGN1cnJlbnQsIHBzZXVkb0lkKTsKLSAg
ICBpZiAoIW5lZWRzUHNldWRvRWxlbWVudCkgewotICAgICAgICBpZiAocHNldWRvRWxlbWVudCkg
ewotICAgICAgICAgICAgaWYgKHBzZXVkb0lkID09IEJFRk9SRSkKLSAgICAgICAgICAgICAgICBj
dXJyZW50LmNsZWFyQmVmb3JlUHNldWRvRWxlbWVudCgpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGN1cnJlbnQuY2xlYXJBZnRlclBzZXVkb0VsZW1lbnQoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPFBzZXVkb0VsZW1lbnQ+IG5l
d1BzZXVkb0VsZW1lbnQ7Ci0gICAgaWYgKCFwc2V1ZG9FbGVtZW50KSB7Ci0gICAgICAgIG5ld1Bz
ZXVkb0VsZW1lbnQgPSBQc2V1ZG9FbGVtZW50OjpjcmVhdGUoY3VycmVudCwgcHNldWRvSWQpOwot
ICAgICAgICBwc2V1ZG9FbGVtZW50ID0gbmV3UHNldWRvRWxlbWVudC5nZXQoKTsKLSAgICB9Ci0K
LSAgICBhdXRvIG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKCpjdXJyZW50LnJlbmRl
cmVyKCktPmdldENhY2hlZFBzZXVkb1N0eWxlKHBzZXVkb0lkLCAmY3VycmVudC5yZW5kZXJlcigp
LT5zdHlsZSgpKSk7Ci0KLSAgICBhdXRvIGVsZW1lbnRVcGRhdGUgPSBTdHlsZTo6VHJlZVJlc29s
dmVyOjpjcmVhdGVBbmltYXRlZEVsZW1lbnRVcGRhdGUoV1RGTW92ZShuZXdTdHlsZSksICpwc2V1
ZG9FbGVtZW50LCBTdHlsZTo6Tm9DaGFuZ2UpOwotCi0gICAgaWYgKGVsZW1lbnRVcGRhdGUuY2hh
bmdlID09IFN0eWxlOjpOb0NoYW5nZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG5ld1Bz
ZXVkb0VsZW1lbnQpIHsKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwc2V1ZG9F
bGVtZW50Q3JlYXRlZChtX2RvY3VtZW50LnBhZ2UoKSwgKm5ld1BzZXVkb0VsZW1lbnQpOwotICAg
ICAgICBpZiAocHNldWRvSWQgPT0gQkVGT1JFKQotICAgICAgICAgICAgY3VycmVudC5zZXRCZWZv
cmVQc2V1ZG9FbGVtZW50KG5ld1BzZXVkb0VsZW1lbnQucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnQuc2V0QWZ0ZXJQc2V1ZG9FbGVtZW50KG5ld1Bz
ZXVkb0VsZW1lbnQucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0gICAgdXBkYXRlRWxlbWVu
dFJlbmRlcmVyKCpwc2V1ZG9FbGVtZW50LCBlbGVtZW50VXBkYXRlKTsKLQotICAgIGF1dG8qIHBz
ZXVkb1JlbmRlcmVyID0gcHNldWRvRWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXBzZXVk
b1JlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZWxlbWVudFVwZGF0ZS5jaGFu
Z2UgPT0gU3R5bGU6OkRldGFjaCkKLSAgICAgICAgcHNldWRvRWxlbWVudC0+ZGlkQXR0YWNoUmVu
ZGVyZXJzKCk7Ci0gICAgZWxzZQotICAgICAgICBwc2V1ZG9FbGVtZW50LT5kaWRSZWNhbGNTdHls
ZShlbGVtZW50VXBkYXRlLmNoYW5nZSk7Ci0KLSAgICBpZiAobV9kb2N1bWVudC5yZW5kZXJWaWV3
KCktPmhhc1F1b3Rlc05lZWRpbmdVcGRhdGUoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGNoaWxk
IDogZGVzY2VuZGFudHNPZlR5cGU8UmVuZGVyUXVvdGU+KCpwc2V1ZG9SZW5kZXJlcikpCi0gICAg
ICAgICAgICB1cGRhdGVRdW90ZXNVcFRvKCZjaGlsZCk7Ci0gICAgfQotICAgIGlmIChpczxSZW5k
ZXJMaXN0SXRlbT4oKnBzZXVkb1JlbmRlcmVyKSkKLSAgICAgICAgTGlzdEl0ZW06OnVwZGF0ZU1h
cmtlcihkb3duY2FzdDxSZW5kZXJMaXN0SXRlbT4oKnBzZXVkb1JlbmRlcmVyKSk7Ci19Ci0KIHZv
aWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKEVsZW1lbnQmIHJvb3QsIFRl
YXJkb3duVHlwZSB0ZWFyZG93blR5cGUpCiB7CiAgICAgV2lkZ2V0SGllcmFyY2h5VXBkYXRlc1N1
c3BlbnNpb25TY29wZSBzdXNwZW5kV2lkZ2V0SGllcmFyY2h5VXBkYXRlczsKQEAgLTY0MiwyMiAr
NTczLDYgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRvd25SZW5kZXJlcgogICAgIHRl
eHQuc2V0UmVuZGVyZXIobnVsbHB0cik7CiB9CiAKLXZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnVw
ZGF0ZVF1b3Rlc1VwVG8oUmVuZGVyUXVvdGUqIGxhc3RRdW90ZSkKLXsKLSAgICBhdXRvIHF1b3Rl
UmVuZGVyZXJzID0gZGVzY2VuZGFudHNPZlR5cGU8UmVuZGVyUXVvdGU+KCptX2RvY3VtZW50LnJl
bmRlclZpZXcoKSk7Ci0gICAgYXV0byBpdCA9IG1fcHJldmlvdXNVcGRhdGVkUXVvdGUgPyArK3F1
b3RlUmVuZGVyZXJzLmF0KCptX3ByZXZpb3VzVXBkYXRlZFF1b3RlKSA6IHF1b3RlUmVuZGVyZXJz
LmJlZ2luKCk7Ci0gICAgYXV0byBlbmQgPSBxdW90ZVJlbmRlcmVycy5lbmQoKTsKLSAgICBmb3Ig
KDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGF1dG8mIHF1b3RlID0gKml0OwotICAgICAg
ICAvLyBRdW90ZSBjaGFyYWN0ZXIgZGVwZW5kcyBvbiBxdW90ZSBkZXB0aCBzbyB3ZSBjaGFpbiB0
aGUgdXBkYXRlcy4KLSAgICAgICAgcXVvdGUudXBkYXRlUmVuZGVyZXIobV9wcmV2aW91c1VwZGF0
ZWRRdW90ZSk7Ci0gICAgICAgIG1fcHJldmlvdXNVcGRhdGVkUXVvdGUgPSAmcXVvdGU7Ci0gICAg
ICAgIGlmICgmcXVvdGUgPT0gbGFzdFF1b3RlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBBU1NFUlQoIWxhc3RRdW90ZSk7Ci19Ci0KICNpZiBQTEFURk9STShJT1MpCiBzdGF0aWMg
RVZpc2liaWxpdHkgZWxlbWVudEltcGxpY2l0VmlzaWJpbGl0eShjb25zdCBFbGVtZW50JiBlbGVt
ZW50KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlci5oCShy
ZXZpc2lvbiAyMjA5MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTMgQEAgY2xhc3MgQ29udGFpbmVyTm9k
ZTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBS
ZW5kZXJRdW90ZTsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgVGV4dDsKIAogY2xhc3MgUmVu
ZGVyVHJlZVVwZGF0ZXIgewogcHVibGljOgogICAgIFJlbmRlclRyZWVVcGRhdGVyKERvY3VtZW50
Jik7CisgICAgflJlbmRlclRyZWVVcGRhdGVyKCk7CiAKICAgICB2b2lkIGNvbW1pdChzdGQ6OnVu
aXF1ZV9wdHI8Y29uc3QgU3R5bGU6OlVwZGF0ZT4pOwogCkBAIC01NSw2ICs1NSw4IEBAIHB1Ymxp
YzoKICAgICBjbGFzcyBMaXN0SXRlbTsKIAogcHJpdmF0ZToKKyAgICBjbGFzcyBHZW5lcmF0ZWRD
b250ZW50OworCiAgICAgdm9pZCB1cGRhdGVSZW5kZXJUcmVlKENvbnRhaW5lck5vZGUmIHJvb3Qp
OwogICAgIHZvaWQgdXBkYXRlVGV4dFJlbmRlcmVyKFRleHQmLCBjb25zdCBTdHlsZTo6VGV4dFVw
ZGF0ZSopOwogICAgIHZvaWQgdXBkYXRlRWxlbWVudFJlbmRlcmVyKEVsZW1lbnQmLCBjb25zdCBT
dHlsZTo6RWxlbWVudFVwZGF0ZSYpOwpAQCAtNjIsNyArNjQsNiBAQCBwcml2YXRlOgogICAgIHZv
aWQgaW52YWxpZGF0ZVdoaXRlc3BhY2VPbmx5VGV4dFNpYmxpbmdzQWZ0ZXJBdHRhY2hJZk5lZWRl
ZChOb2RlJik7CiAgICAgdm9pZCB1cGRhdGVCZWZvcmVEZXNjZW5kYW50cyhFbGVtZW50Jik7CiAg
ICAgdm9pZCB1cGRhdGVBZnRlckRlc2NlbmRhbnRzKEVsZW1lbnQmLCBTdHlsZTo6Q2hhbmdlKTsK
LSAgICB2b2lkIHVwZGF0ZUJlZm9yZU9yQWZ0ZXJQc2V1ZG9FbGVtZW50KEVsZW1lbnQmLCBQc2V1
ZG9JZCk7CiAKICAgICBzdHJ1Y3QgUGFyZW50IHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCB7
IG51bGxwdHIgfTsKQEAgLTc1LDE5ICs3NiwyMCBAQCBwcml2YXRlOgogICAgIFBhcmVudCYgcGFy
ZW50KCkgeyByZXR1cm4gbV9wYXJlbnRTdGFjay5sYXN0KCk7IH0KICAgICBSZW5kZXJUcmVlUG9z
aXRpb24mIHJlbmRlclRyZWVQb3NpdGlvbigpOwogCisgICAgR2VuZXJhdGVkQ29udGVudCYgZ2Vu
ZXJhdGVkQ29udGVudCgpIHsgcmV0dXJuICptX2dlbmVyYXRlZENvbnRlbnQ7IH0KKwogICAgIHZv
aWQgcHVzaFBhcmVudChFbGVtZW50JiwgU3R5bGU6OkNoYW5nZSk7CiAgICAgdm9pZCBwb3BQYXJl
bnQoKTsKICAgICB2b2lkIHBvcFBhcmVudHNUb0RlcHRoKHVuc2lnbmVkIGRlcHRoKTsKIAotICAg
IHZvaWQgdXBkYXRlUXVvdGVzVXBUbyhSZW5kZXJRdW90ZSopOwotCiAgICAgRG9jdW1lbnQmIG1f
ZG9jdW1lbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IFN0eWxlOjpVcGRhdGU+IG1fc3R5
bGVVcGRhdGU7CiAKICAgICBWZWN0b3I8UGFyZW50PiBtX3BhcmVudFN0YWNrOwogCiAgICAgSGFz
aFNldDxUZXh0Kj4gbV9pbnZhbGlkYXRlZFdoaXRlc3BhY2VPbmx5VGV4dFNpYmxpbmdzOwotICAg
IFJlbmRlclF1b3RlKiBtX3ByZXZpb3VzVXBkYXRlZFF1b3RlIHsgbnVsbHB0ciB9OworCisgICAg
c3RkOjp1bmlxdWVfcHRyPEdlbmVyYXRlZENvbnRlbnQ+IG1fZ2VuZXJhdGVkQ29udGVudDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1Jl
bmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVy
YXRlZENvbnRlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyR2Vu
ZXJhdGVkQ29udGVudC5oIgorCisjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCisj
aW5jbHVkZSAiUmVuZGVyRGVzY2VuZGFudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyRWxl
bWVudC5oIgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyUXVvdGUu
aCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVV
cGRhdGVyTGlzdEl0ZW0uaCIKKyNpbmNsdWRlICJTdHlsZVRyZWVSZXNvbHZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclRyZWVVcGRhdGVyOjpHZW5lcmF0ZWRDb250ZW50OjpH
ZW5lcmF0ZWRDb250ZW50KFJlbmRlclRyZWVVcGRhdGVyJiB1cGRhdGVyKQorICAgIDogbV91cGRh
dGVyKHVwZGF0ZXIpCit7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENv
bnRlbnQ6OnVwZGF0ZUJlZm9yZVBzZXVkb0VsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKK3sKKyAg
ICB1cGRhdGVQc2V1ZG9FbGVtZW50KGVsZW1lbnQsIEJFRk9SRSk7Cit9CisKK3ZvaWQgUmVuZGVy
VHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQ6OnVwZGF0ZUFmdGVyUHNldWRvRWxlbWVudChF
bGVtZW50JiBlbGVtZW50KQoreworICAgIHVwZGF0ZVBzZXVkb0VsZW1lbnQoZWxlbWVudCwgQUZU
RVIpOworfQorCit2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpHZW5lcmF0ZWRDb250ZW50Ojp1cGRh
dGVSZW1haW5pbmdRdW90ZXMoKQoreworICAgIGlmICghbV91cGRhdGVyLm1fZG9jdW1lbnQucmVu
ZGVyVmlldygpLT5oYXNRdW90ZXNOZWVkaW5nVXBkYXRlKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICB1cGRhdGVRdW90ZXNVcFRvKG51bGxwdHIpOworICAgIG1fcHJldmlvdXNVcGRhdGVkUXVvdGUg
PSBudWxscHRyOworICAgIG1fdXBkYXRlci5tX2RvY3VtZW50LnJlbmRlclZpZXcoKS0+c2V0SGFz
UXVvdGVzTmVlZGluZ1VwZGF0ZShmYWxzZSk7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6
OkdlbmVyYXRlZENvbnRlbnQ6OnVwZGF0ZVF1b3Rlc1VwVG8oUmVuZGVyUXVvdGUqIGxhc3RRdW90
ZSkKK3sKKyAgICBhdXRvIHF1b3RlUmVuZGVyZXJzID0gZGVzY2VuZGFudHNPZlR5cGU8UmVuZGVy
UXVvdGU+KCptX3VwZGF0ZXIubV9kb2N1bWVudC5yZW5kZXJWaWV3KCkpOworICAgIGF1dG8gaXQg
PSBtX3ByZXZpb3VzVXBkYXRlZFF1b3RlID8gKytxdW90ZVJlbmRlcmVycy5hdCgqbV9wcmV2aW91
c1VwZGF0ZWRRdW90ZSkgOiBxdW90ZVJlbmRlcmVycy5iZWdpbigpOworICAgIGF1dG8gZW5kID0g
cXVvdGVSZW5kZXJlcnMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBhdXRvJiBxdW90ZSA9ICppdDsKKyAgICAgICAgLy8gUXVvdGUgY2hhcmFjdGVyIGRlcGVu
ZHMgb24gcXVvdGUgZGVwdGggc28gd2UgY2hhaW4gdGhlIHVwZGF0ZXMuCisgICAgICAgIHF1b3Rl
LnVwZGF0ZVJlbmRlcmVyKG1fcHJldmlvdXNVcGRhdGVkUXVvdGUpOworICAgICAgICBtX3ByZXZp
b3VzVXBkYXRlZFF1b3RlID0gJnF1b3RlOworICAgICAgICBpZiAoJnF1b3RlID09IGxhc3RRdW90
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCFsYXN0UXVvdGUpOwor
fQorCitzdGF0aWMgdm9pZCBjcmVhdGVDb250ZW50UmVuZGVyZXJzKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyKQoreworICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXIuc3R5bGUoKTsKKyAgICBpZiAo
c3R5bGUuaGFzRmxvd0Zyb20oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHN0eWxl
LmNvbnRlbnREYXRhKCkpOworCisgICAgZm9yIChjb25zdCBDb250ZW50RGF0YSogY29udGVudCA9
IHN0eWxlLmNvbnRlbnREYXRhKCk7IGNvbnRlbnQ7IGNvbnRlbnQgPSBjb250ZW50LT5uZXh0KCkp
IHsKKyAgICAgICAgYXV0byBjaGlsZCA9IGNvbnRlbnQtPmNyZWF0ZUNvbnRlbnRSZW5kZXJlcihy
ZW5kZXJlci5kb2N1bWVudCgpLCBzdHlsZSk7CisgICAgICAgIGlmIChyZW5kZXJlci5pc0NoaWxk
QWxsb3dlZCgqY2hpbGQsIHN0eWxlKSkKKyAgICAgICAgICAgIHJlbmRlcmVyLmFkZENoaWxkKGNo
aWxkLmxlYWtQdHIoKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB1cGRhdGVTdHlsZUZvckNv
bnRlbnRSZW5kZXJlcnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCit7CisgICAgZm9yIChhdXRv
KiBjaGlsZCA9IHJlbmRlcmVyLm5leHRJblByZU9yZGVyKCZyZW5kZXJlcik7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0SW5QcmVPcmRlcigmcmVuZGVyZXIpKSB7CisgICAgICAgIC8vIFdlIG9u
bHkgbWFuYWdlIHRoZSBzdHlsZSBmb3IgdGhlIGdlbmVyYXRlZCBjb250ZW50IHdoaWNoIG11c3Qg
YmUgaW1hZ2VzIG9yIHRleHQuCisgICAgICAgIGlmICghaXM8UmVuZGVySW1hZ2U+KCpjaGlsZCkg
JiYgIWlzPFJlbmRlclF1b3RlPigqY2hpbGQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGF1dG8gY3JlYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZVN0eWxlSW5oZXJpdGlu
Z0Zyb21Qc2V1ZG9TdHlsZShyZW5kZXJlci5zdHlsZSgpKTsKKyAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyRWxlbWVudD4oKmNoaWxkKS5zZXRTdHlsZShXVEZNb3ZlKGNyZWF0ZWRTdHlsZSkpOworICAg
IH0KK30KKwordm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6R2VuZXJhdGVkQ29udGVudDo6dXBkYXRl
UHNldWRvRWxlbWVudChFbGVtZW50JiBjdXJyZW50LCBQc2V1ZG9JZCBwc2V1ZG9JZCkKK3sKKyAg
ICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gcHNldWRvSWQgPT0gQkVGT1JFID8gY3Vy
cmVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCkgOiBjdXJyZW50LmFmdGVyUHNldWRvRWxlbWVudCgp
OworCisgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gcHNldWRvRWxlbWVudCA/IHBzZXVkb0VsZW1l
bnQtPnJlbmRlcmVyKCkgOiBudWxscHRyKQorICAgICAgICBtX3VwZGF0ZXIucmVuZGVyVHJlZVBv
c2l0aW9uKCkuaW52YWxpZGF0ZU5leHRTaWJsaW5nKCpyZW5kZXJlcik7CisKKyAgICBpZiAoIW5l
ZWRzUHNldWRvRWxlbWVudChjdXJyZW50LCBwc2V1ZG9JZCkpIHsKKyAgICAgICAgaWYgKHBzZXVk
b0VsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChwc2V1ZG9JZCA9PSBCRUZPUkUpCisgICAgICAg
ICAgICAgICAgY3VycmVudC5jbGVhckJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyZW50LmNsZWFyQWZ0ZXJQc2V1ZG9FbGVtZW50KCk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxQc2V1ZG9F
bGVtZW50PiBuZXdQc2V1ZG9FbGVtZW50OworICAgIGlmICghcHNldWRvRWxlbWVudCkgeworICAg
ICAgICBuZXdQc2V1ZG9FbGVtZW50ID0gUHNldWRvRWxlbWVudDo6Y3JlYXRlKGN1cnJlbnQsIHBz
ZXVkb0lkKTsKKyAgICAgICAgcHNldWRvRWxlbWVudCA9IG5ld1BzZXVkb0VsZW1lbnQuZ2V0KCk7
CisgICAgfQorCisgICAgYXV0byBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cigqY3Vy
cmVudC5yZW5kZXJlcigpLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG9JZCwgJmN1cnJlbnQu
cmVuZGVyZXIoKS0+c3R5bGUoKSkpOworCisgICAgYXV0byBlbGVtZW50VXBkYXRlID0gU3R5bGU6
OlRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKFdURk1vdmUobmV3U3R5
bGUpLCAqcHNldWRvRWxlbWVudCwgU3R5bGU6Ok5vQ2hhbmdlKTsKKworICAgIGlmIChlbGVtZW50
VXBkYXRlLmNoYW5nZSA9PSBTdHlsZTo6Tm9DaGFuZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChuZXdQc2V1ZG9FbGVtZW50KSB7CisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6cHNldWRvRWxlbWVudENyZWF0ZWQobV91cGRhdGVyLm1fZG9jdW1lbnQucGFnZSgpLCAqbmV3
UHNldWRvRWxlbWVudCk7CisgICAgICAgIGlmIChwc2V1ZG9JZCA9PSBCRUZPUkUpCisgICAgICAg
ICAgICBjdXJyZW50LnNldEJlZm9yZVBzZXVkb0VsZW1lbnQobmV3UHNldWRvRWxlbWVudC5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3VycmVudC5zZXRBZnRl
clBzZXVkb0VsZW1lbnQobmV3UHNldWRvRWxlbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9
CisKKyAgICBtX3VwZGF0ZXIudXBkYXRlRWxlbWVudFJlbmRlcmVyKCpwc2V1ZG9FbGVtZW50LCBl
bGVtZW50VXBkYXRlKTsKKworICAgIGF1dG8qIHBzZXVkb1JlbmRlcmVyID0gcHNldWRvRWxlbWVu
dC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXBzZXVkb1JlbmRlcmVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoZWxlbWVudFVwZGF0ZS5jaGFuZ2UgPT0gU3R5bGU6OkRldGFjaCkKKyAgICAg
ICAgY3JlYXRlQ29udGVudFJlbmRlcmVycygqcHNldWRvUmVuZGVyZXIpOworICAgIGVsc2UKKyAg
ICAgICAgdXBkYXRlU3R5bGVGb3JDb250ZW50UmVuZGVyZXJzKCpwc2V1ZG9SZW5kZXJlcik7CisK
KyAgICBpZiAobV91cGRhdGVyLm1fZG9jdW1lbnQucmVuZGVyVmlldygpLT5oYXNRdW90ZXNOZWVk
aW5nVXBkYXRlKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGRlc2NlbmRhbnRzT2ZU
eXBlPFJlbmRlclF1b3RlPigqcHNldWRvUmVuZGVyZXIpKQorICAgICAgICAgICAgdXBkYXRlUXVv
dGVzVXBUbygmY2hpbGQpOworICAgIH0KKyAgICBpZiAoaXM8UmVuZGVyTGlzdEl0ZW0+KCpwc2V1
ZG9SZW5kZXJlcikpCisgICAgICAgIExpc3RJdGVtOjp1cGRhdGVNYXJrZXIoZG93bmNhc3Q8UmVu
ZGVyTGlzdEl0ZW0+KCpwc2V1ZG9SZW5kZXJlcikpOworfQorCitib29sIFJlbmRlclRyZWVVcGRh
dGVyOjpHZW5lcmF0ZWRDb250ZW50OjpuZWVkc1BzZXVkb0VsZW1lbnQoRWxlbWVudCYgY3VycmVu
dCwgUHNldWRvSWQgcHNldWRvSWQpCit7CisgICAgaWYgKCFjdXJyZW50LnJlbmRlcmVyKCkgfHwg
IWN1cnJlbnQucmVuZGVyZXIoKS0+Y2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoY3VycmVudC5pc1BzZXVkb0VsZW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcHNldWRvRWxlbWVudFJlbmRlcmVySXNOZWVkZWQo
Y3VycmVudC5yZW5kZXJlcigpLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG9JZCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVk
Q29udGVudC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRy
ZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29u
c3RhbnRzLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBFbGVtZW50OworY2xhc3MgUmVuZGVyUXVvdGU7CisKK2NsYXNzIFJl
bmRlclRyZWVVcGRhdGVyOjpHZW5lcmF0ZWRDb250ZW50IHsKK3B1YmxpYzoKKyAgICBHZW5lcmF0
ZWRDb250ZW50KFJlbmRlclRyZWVVcGRhdGVyJik7CisKKyAgICB2b2lkIHVwZGF0ZUJlZm9yZVBz
ZXVkb0VsZW1lbnQoRWxlbWVudCYpOworICAgIHZvaWQgdXBkYXRlQWZ0ZXJQc2V1ZG9FbGVtZW50
KEVsZW1lbnQmKTsKKyAgICB2b2lkIHVwZGF0ZVJlbWFpbmluZ1F1b3RlcygpOworCitwcml2YXRl
OgorICAgIHZvaWQgdXBkYXRlUHNldWRvRWxlbWVudChFbGVtZW50JiwgUHNldWRvSWQpOworICAg
IHZvaWQgdXBkYXRlUXVvdGVzVXBUbyhSZW5kZXJRdW90ZSopOworICAgIAorICAgIHN0YXRpYyBi
b29sIG5lZWRzUHNldWRvRWxlbWVudChFbGVtZW50JiwgUHNldWRvSWQpOworCisgICAgUmVuZGVy
VHJlZVVwZGF0ZXImIG1fdXBkYXRlcjsKKyAgICBSZW5kZXJRdW90ZSogbV9wcmV2aW91c1VwZGF0
ZWRRdW90ZSB7IG51bGxwdHIgfTsKK307CisKK30K
</data>
<flag name="review"
          id="338958"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318598</attachid>
            <date>2017-08-20 01:59:38 -0700</date>
            <delta_ts>2017-08-20 02:42:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rendertreeupdater-generated-content-2.patch</filename>
            <type>text/plain</type>
            <size>28396</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE3LTA4LTE5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgOmJlZm9yZS86YWZ0
ZXIgcmVuZGVyIHRyZWUgbXV0YXRpb25zIGludG8gYSBSZW5kZXJUcmVlVXBkYXRlciBoZWxwZXIg
Y2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NTc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCisKKyAgICAgICAgTW92
ZSBjb2RlIHRoYXQgY29uc3RydWN0cyBnZW5lcmF0ZWQgY29udGVudCByZW5kZXJlcnMgb3V0IGZy
b20gUHNldWRvRWxlbWVudC4KKyAgICAgICAgQWxzbyByZWZhY3RvciB0aGUgcmVsYXRlZCBjb2Rl
IGZyb20gUmVuZGVyVHJlZVVwZGF0ZXIgbWFpbiBjbGFzcyBpbnRvCisgICAgICAgIFJlbmRlclRy
ZWVVcGRhdGVyOjpHZW5lcmF0ZWRDb250ZW50IGhlbHBlciBjbGFzcy4KKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vUHNldWRvRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50OjpyZXNvbHZlQ3VzdG9t
U3R5bGUpOiBEZWxldGVkLgorCisgICAgICAgICAgICBOb3QgbmVlZGVkIGFueW1vcmUuCisKKyAg
ICAgICAgKFdlYkNvcmU6OlBzZXVkb0VsZW1lbnQ6OmRpZEF0dGFjaFJlbmRlcmVycyk6IERlbGV0
ZWQuCisKKyAgICAgICAgICAgIE1vdmVzIHRvIGNyZWF0ZUNvbnRlbnRSZW5kZXJlcnMgaW4gR2Vu
ZXJhdGVkQ29udGVudC4KKworICAgICAgICAoV2ViQ29yZTo6UHNldWRvRWxlbWVudDo6ZGlkUmVj
YWxjU3R5bGUpOiBEZWxldGVkLgorCisgICAgICAgICAgICBNb3ZlcyB0byB1cGRhdGVTdHlsZUZv
ckNvbnRlbnRSZW5kZXJlcnMgaW4gR2VuZXJhdGVkQ29udGVudC4KKworICAgICAgICAqIGRvbS9Q
c2V1ZG9FbGVtZW50Lmg6CisgICAgICAgICogc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OlJlbmRlclRyZWVVcGRhdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjp+UmVuZGVyVHJlZVVwZGF0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OmNvbW1pdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6dXBkYXRlQmVmb3JlRGVzY2VuZGFudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OnVwZGF0ZUFmdGVyRGVzY2VuZGFu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6bmVlZHNQc2V1ZG9FbGVtZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjp1cGRhdGVCZWZvcmVPckFmdGVyUHNl
dWRvRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRl
cjo6dXBkYXRlUXVvdGVzVXBUbyk6IERlbGV0ZWQuCisKKyAgICAgICAgICAgIFF1b3RlcyBhbmQg
b3RoZXIgOmJlZm9yZS86YWZ0ZXIgc3VwcG9ydCBtb3ZlcyB0byBHZW5lcmF0ZWRDb250ZW50IGhl
bHB3ZS4KKworICAgICAgICAqIHN0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6Z2VuZXJhdGVkQ29udGVudCk6CisgICAgICAgICog
c3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6R2VuZXJhdGVkQ29udGVudDo6R2VuZXJh
dGVkQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6R2VuZXJh
dGVkQ29udGVudDo6dXBkYXRlQmVmb3JlUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUcmVlVXBkYXRlcjo6R2VuZXJhdGVkQ29udGVudDo6dXBkYXRlQWZ0ZXJQc2V1ZG9F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjpHZW5lcmF0ZWRD
b250ZW50Ojp1cGRhdGVSZW1haW5pbmdRdW90ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQ6OnVwZGF0ZVF1b3Rlc1VwVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlQ29udGVudFJlbmRlcmVycyk6CisgICAgICAgIChXZWJDb3JlOjp1
cGRhdGVTdHlsZUZvckNvbnRlbnRSZW5kZXJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQ6OnVwZGF0ZVBzZXVkb0VsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQ6Om5lZWRz
UHNldWRvRWxlbWVudCk6CisgICAgICAgICogc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0
ZWRDb250ZW50Lmg6IEFkZGVkLgorCiAyMDE3LTA4LTE5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW01hY10gQ2hhbmdlIHVpbnQ4X3QqIHRvIFZlY3Rvcjx1aW50OF90
PiB0eXBlIGluIGFsbCBjcnlwdG8gYWxnb3JpdGhtIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjIwOTE2KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI3OTYsNiArMjc5Niw3IEBAIHNldChXZWJDb3Jl
X1NPVVJDRVMKICAgICBzdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uY3BwCiAgICAgc3R5bGUvUmVu
ZGVyVHJlZVVwZGF0ZXIuY3BwCiAgICAgc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRl
ci5jcHAKKyAgICBzdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwCiAg
ICAgc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5jcHAKICAgICBzdHlsZS9TdHlsZUNo
YW5nZS5jcHAKICAgICBzdHlsZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjIwOTE2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02Nzk1LDYgKzY3OTUsOCBAQAogCQlFNDhFMzMy
QzFGNDcwMzdDMDBCQUIwRUYgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4Mjg0MDkxRjQ0NTk1
NjAwODYzQUMzIC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCAqLzsgfTsKIAkJRTQ4
RTMzMkQxRjQ3MDM4MDAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4RTMzMkExRjQ2
Qzk4MDAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwICovOyB9OwogCQlF
NDhFMzMyRTFGNDcwMzgwMDBCQUIwRUYgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4RTMzMjgxRjQ2
Qzk3RjAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaCAqLzsgfTsKKwkJRTQ4
RTMzMzExRjQ3NDM3MDAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDhF
MzMyRjFGNDc0MzY1MDBCQUIwRUYgLyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50
LmNwcCAqLzsgfTsKKwkJRTQ4RTMzMzIxRjQ3NDM3MzAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRh
dGVyR2VuZXJhdGVkQ29udGVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ4RTMzMzAxRjQ3NDM2NzAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRhdGVy
R2VuZXJhdGVkQ29udGVudC5oICovOyB9OwogCQlFNDkxNkZGNzE5NURGNkEwMDA1QUIzNDkgLyog
TGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0OTE2RkY2MTk1REY2QTAwMDVBQjM0OSAvKiBMYXllckZsdXNoVGhy
b3R0bGVTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUU0OTQ2RUFFMTU2RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5NDZFQUMxNTZF
NjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5jcHAgKi87IH07CiAJCUU0OTQ2RUFGMTU2
RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OTQ2RUFEMTU2RTY0REQwMEQzMjk3RiAvKiBTdHls
ZVJ1bGVJbXBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTU0MTAsNiArMTU0MTIsOCBAQAogCQlFNDg5NDRBMTE4MEI1N0Q4MDBGMTY1RDgg
LyogU2ltcGxlTGluZUxheW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
aW1wbGVMaW5lTGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0OEUzMzI4
MUY0NkM5N0YwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4RTMzMkExRjQ2Qzk4MDAwQkFCMEVGIC8qIFJl
bmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUU0OEUzMzJGMUY0NzQzNjUwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBkYXRl
ckdlbmVyYXRlZENvbnRlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTQ4RTMzMzAxRjQ3NDM2NzAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRh
dGVyR2VuZXJhdGVkQ29udGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTQ5MTZGRjYxOTVERjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheWVyRmx1c2hUaHJvdHRs
ZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0OTQ2RUFDMTU2RTY0REQw
MEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3R5bGVSdWxlSW1wb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQ5NDZFQUQxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJ1bGVJbXBvcnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0OTIyLDYgKzI0OTI2LDggQEAKIAkJCQlFNDYxODAyODFD
OEEwNkNEMDAyNkMwMkMgLyogUmVuZGVyVHJlZVVwZGF0ZXIuaCAqLywKIAkJCQlFNDgyODQwNjFG
NDQ1OTRCMDA4NjNBQzMgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5jcHAgKi8sCiAJ
CQkJRTQ4Mjg0MDkxRjQ0NTk1NjAwODYzQUMzIC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0
ZXIuaCAqLywKKwkJCQlFNDhFMzMyRjFGNDc0MzY1MDBCQUIwRUYgLyogUmVuZGVyVHJlZVVwZGF0
ZXJHZW5lcmF0ZWRDb250ZW50LmNwcCAqLywKKwkJCQlFNDhFMzMzMDFGNDc0MzY3MDBCQUIwRUYg
LyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggKi8sCiAJCQkJRTQ4RTMzMkEx
RjQ2Qzk4MDAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwICovLAogCQkJ
CUU0OEUzMzI4MUY0NkM5N0YwMEJBQjBFRiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmgg
Ki8sCiAJCQkJRTQwMUUwQTUxQzNDMENGNzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmNwcCAqLywK
QEAgLTI5NDYxLDYgKzI5NDY3LDcgQEAKIAkJCQlGRDQ1QTk0RjE3NUQzRjNFMDBDMjFFQzggLyog
U2hhcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZENDVBOTVCMTc1RDQxRUUwMEMyMUVDOCAvKiBT
aGFwZUludGVydmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDQ1QTk1MjE3NUQzRjNFMDBDMjFF
QzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ4RTMzMzIxRjQ3
NDM3MzAwQkFCMEVGIC8qIFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBNEE5NTRFMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZm
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFy
ZWRUaW1lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTExMiw2ICszMTExOSw3IEBACiAJCQkJOUJE
NEU5MUExQzQ2MkNGQzAwNTA2NUJDIC8qIEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk2MkNEMzI1OTExNTdFNTdDMDA2M0IwQTcgLyogQ3VzdG9tRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBMjAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0OEUzMzMxMUY0NzQzNzAwMEJBQjBFRiAvKiBSZW5k
ZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdC
QzZBMjMxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5N0JDNkEyNzE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZFNDU2RjE4MTY3N0Q3NEUwMDVFRERGOSAvKiBEYXRhYmFz
ZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHNl
dWRvRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMjA5MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRv
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDUwICs3OCw5IEBAIHZvaWQgUHNldWRv
RWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCgpCiAgICAgbV9ob3N0RWxlbWVudCA9IG51bGxwdHI7
CiB9CiAKLXN0ZDo6b3B0aW9uYWw8RWxlbWVudFN0eWxlPiBQc2V1ZG9FbGVtZW50OjpyZXNvbHZl
Q3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSopCi17Ci0gICAgYXV0byogc3R5bGUgPSBtX2hvc3RFbGVtZW50LT5yZW5kZXJlcigpLT5n
ZXRDYWNoZWRQc2V1ZG9TdHlsZShtX3BzZXVkb0lkLCAmcGFyZW50U3R5bGUpOwotICAgIGlmICgh
c3R5bGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIEVsZW1lbnRT
dHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKnN0eWxlKSk7Ci19Ci0KLXZvaWQgUHNldWRvRWxl
bWVudDo6ZGlkQXR0YWNoUmVuZGVyZXJzKCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJl
ciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5
bGUoKS5oYXNGbG93RnJvbSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKLSAgICBBU1NFUlQoc3R5bGUuY29udGVu
dERhdGEoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IENvbnRlbnREYXRhKiBjb250ZW50ID0gc3R5bGUu
Y29udGVudERhdGEoKTsgY29udGVudDsgY29udGVudCA9IGNvbnRlbnQtPm5leHQoKSkgewotICAg
ICAgICBhdXRvIGNoaWxkID0gY29udGVudC0+Y3JlYXRlQ29udGVudFJlbmRlcmVyKGRvY3VtZW50
KCksIHN0eWxlKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0NoaWxkQWxsb3dlZCgqY2hpbGQs
IHN0eWxlKSkKLSAgICAgICAgICAgIHJlbmRlcmVyLT5hZGRDaGlsZChjaGlsZC5sZWFrUHRyKCkp
OwotICAgIH0KLX0KLQogYm9vbCBQc2V1ZG9FbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICByZXR1cm4gcHNldWRvRWxlbWVudFJlbmRlcmVy
SXNOZWVkZWQoJnN0eWxlKTsKIH0KIAotdm9pZCBQc2V1ZG9FbGVtZW50OjpkaWRSZWNhbGNTdHls
ZShTdHlsZTo6Q2hhbmdlKQotewotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gVGhlIHJlbmRlcmVycyBpbnNpZGUgcHNldWRvIGVsZW1lbnRzIGFyZSBhbm9u
eW1vdXMgc28gdGhleSBkb24ndCBnZXQgbm90aWZpZWQgb2YgcmVjYWxjU3R5bGUgYW5kIG11c3Qg
aGF2ZQotICAgIC8vIHRoZSBzdHlsZSBwcm9wYWdhdGVkIGRvd253YXJkIG1hbnVhbGx5IHNpbWls
YXIgdG8gUmVuZGVyT2JqZWN0Ojpwcm9wYWdhdGVTdHlsZVRvQW5vbnltb3VzQ2hpbGRyZW4uCi0g
ICAgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIgPSAqdGhpcy0+cmVuZGVyZXIoKTsKLSAgICBmb3Ig
KFJlbmRlck9iamVjdCogY2hpbGQgPSByZW5kZXJlci5uZXh0SW5QcmVPcmRlcigmcmVuZGVyZXIp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dEluUHJlT3JkZXIoJnJlbmRlcmVyKSkgewotICAg
ICAgICAvLyBXZSBvbmx5IG1hbmFnZSB0aGUgc3R5bGUgZm9yIHRoZSBnZW5lcmF0ZWQgY29udGVu
dCB3aGljaCBtdXN0IGJlIGltYWdlcyBvciB0ZXh0LgotICAgICAgICBpZiAoIWlzPFJlbmRlcklt
YWdlPigqY2hpbGQpICYmICFpczxSZW5kZXJRdW90ZT4oKmNoaWxkKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBhdXRvIGNyZWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVT
dHlsZUluaGVyaXRpbmdGcm9tUHNldWRvU3R5bGUocmVuZGVyZXIuc3R5bGUoKSk7Ci0gICAgICAg
IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpjaGlsZCkuc2V0U3R5bGUoV1RGTW92ZShjcmVhdGVk
U3R5bGUpKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vUHNldWRvRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Q
c2V1ZG9FbGVtZW50LmgJKHJldmlzaW9uIDIyMDkxNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Q
c2V1ZG9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQyLDYgQEAgcHVibGljOgog
ICAgIEVsZW1lbnQqIGhvc3RFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9ob3N0RWxlbWVudDsg
fQogICAgIHZvaWQgY2xlYXJIb3N0RWxlbWVudCgpOwogCi0gICAgc3RkOjpvcHRpb25hbDxFbGVt
ZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGlkQXR0YWNoUmVuZGVyZXJzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRSZWNhbGNTdHls
ZShTdHlsZTo6Q2hhbmdlKSBvdmVycmlkZTsKICAgICBib29sIHJlbmRlcmVySXNOZWVkZWQoY29u
c3QgUmVuZGVyU3R5bGUmKSBvdmVycmlkZTsKIAogICAgIC8vIEFzIHBlciBodHRwOi8vZGV2Lncz
Lm9yZy9jc3N3Zy9jc3MzLXJlZ2lvbnMvI2Zsb3ctaW50bywgcHNldWRvLWVsZW1lbnRzIHN1Y2gg
YXMgOjpmaXJzdC1saW5lLCA6OmZpcnN0LWxldHRlciwgOjpiZWZvcmUgb3IgOjphZnRlcgpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcAkocmV2aXNpb24g
MjIwOTE2KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBACiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVl
bi5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTmFtZWRG
bG93VGhyZWFkLmgiCi0jaW5jbHVkZSAiUmVuZGVyUXVvdGUuaCIKICNpbmNsdWRlICJSZW5kZXJU
cmVlVXBkYXRlckZpcnN0TGV0dGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJHZW5l
cmF0ZWRDb250ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVRyZWVSZXNvbHZlci5o
IgpAQCAtODIsOSArODIsMTMgQEAgUmVuZGVyVHJlZVVwZGF0ZXI6OlBhcmVudDo6UGFyZW50KEVs
ZW1lbgogewogfQogCi0KIFJlbmRlclRyZWVVcGRhdGVyOjpSZW5kZXJUcmVlVXBkYXRlcihEb2N1
bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9nZW5l
cmF0ZWRDb250ZW50KHN0ZDo6bWFrZV91bmlxdWU8R2VuZXJhdGVkQ29udGVudD4oKnRoaXMpKQor
eworfQorCitSZW5kZXJUcmVlVXBkYXRlcjo6flJlbmRlclRyZWVVcGRhdGVyKCkKIHsKIH0KIApA
QCAtMTI5LDExICsxMzMsNyBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpjb21taXQoc3RkOjp1
bmlxCiAgICAgZm9yIChhdXRvKiByb290IDogZmluZFJlbmRlcmluZ1Jvb3RzKCptX3N0eWxlVXBk
YXRlKSkKICAgICAgICAgdXBkYXRlUmVuZGVyVHJlZSgqcm9vdCk7CiAKLSAgICBpZiAobV9kb2N1
bWVudC5yZW5kZXJWaWV3KCktPmhhc1F1b3Rlc05lZWRpbmdVcGRhdGUoKSkgewotICAgICAgICB1
cGRhdGVRdW90ZXNVcFRvKG51bGxwdHIpOwotICAgICAgICBtX3ByZXZpb3VzVXBkYXRlZFF1b3Rl
ID0gbnVsbHB0cjsKLSAgICAgICAgbV9kb2N1bWVudC5yZW5kZXJWaWV3KCktPnNldEhhc1F1b3Rl
c05lZWRpbmdVcGRhdGUoZmFsc2UpOwotICAgIH0KKyAgICBnZW5lcmF0ZWRDb250ZW50KCkudXBk
YXRlUmVtYWluaW5nUXVvdGVzKCk7CiAKICAgICBtX3N0eWxlVXBkYXRlID0gbnVsbHB0cjsKIH0K
QEAgLTI0NywxMiArMjQ3LDEyIEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnBvcFBhcmVudHNU
b0RlcHQKIAogdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dXBkYXRlQmVmb3JlRGVzY2VuZGFudHMo
RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICB1cGRhdGVCZWZvcmVPckFmdGVyUHNldWRvRWxlbWVu
dChlbGVtZW50LCBCRUZPUkUpOworICAgIGdlbmVyYXRlZENvbnRlbnQoKS51cGRhdGVCZWZvcmVQ
c2V1ZG9FbGVtZW50KGVsZW1lbnQpOwogfQogCiB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp1cGRh
dGVBZnRlckRlc2NlbmRhbnRzKEVsZW1lbnQmIGVsZW1lbnQsIFN0eWxlOjpDaGFuZ2Ugc3R5bGVD
aGFuZ2UpCiB7Ci0gICAgdXBkYXRlQmVmb3JlT3JBZnRlclBzZXVkb0VsZW1lbnQoZWxlbWVudCwg
QUZURVIpOworICAgIGdlbmVyYXRlZENvbnRlbnQoKS51cGRhdGVBZnRlclBzZXVkb0VsZW1lbnQo
ZWxlbWVudCk7CiAKICAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKICAg
ICBpZiAoIXJlbmRlcmVyKQpAQCAtMzQ3LDcgKzM0Nyw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
RWxlbWVudEZvckZsb3dUaHJlYWQKIHsKICAgICBpZiAoIWVsZW1lbnQuc2hvdWxkTW92ZVRvRmxv
d1RocmVhZChzdHlsZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBGbG93VGhyZWFkQ29udHJvbGxl
ciYgZmxvd1RocmVhZENvbnRyb2xsZXIgPSBlbGVtZW50LmRvY3VtZW50KCkucmVuZGVyVmlldygp
LT5mbG93VGhyZWFkQ29udHJvbGxlcigpOworICAgIEZsb3dUaHJlYWRDb250cm9sbGVyJiBmbG93
VGhyZWFkQ29udHJvbGxlciA9IHJlbmRlclZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxlcigpOwog
ICAgIGZsb3dUaHJlYWRDb250cm9sbGVyLnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1lbnQo
ZWxlbWVudCwgZmxvd1RocmVhZENvbnRyb2xsZXIuZW5zdXJlUmVuZGVyRmxvd1RocmVhZFdpdGhO
YW1lKHN0eWxlLmZsb3dUaHJlYWQoKSkpOwogfQogI2VuZGlmCkBAIC01MTgsNzUgKzUxOCw2IEBA
IHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OmludmFsaWRhdGVXaGl0ZXMKICAgICB9CiB9CiAKLXN0
YXRpYyBib29sIG5lZWRzUHNldWRvRWxlbWVudChFbGVtZW50JiBjdXJyZW50LCBQc2V1ZG9JZCBw
c2V1ZG9JZCkKLXsKLSAgICBpZiAoIWN1cnJlbnQucmVuZGVyZXIoKSB8fCAhY3VycmVudC5yZW5k
ZXJlcigpLT5jYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChjdXJyZW50LmlzUHNldWRvRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFwc2V1ZG9FbGVtZW50UmVuZGVyZXJJc05lZWRlZChjdXJyZW50LnJlbmRl
cmVyKCktPmdldENhY2hlZFBzZXVkb1N0eWxlKHBzZXVkb0lkKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dXBk
YXRlQmVmb3JlT3JBZnRlclBzZXVkb0VsZW1lbnQoRWxlbWVudCYgY3VycmVudCwgUHNldWRvSWQg
cHNldWRvSWQpCi17Ci0gICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudCA9IHBzZXVkb0lk
ID09IEJFRk9SRSA/IGN1cnJlbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpIDogY3VycmVudC5hZnRl
clBzZXVkb0VsZW1lbnQoKTsKLQotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHBzZXVkb0VsZW1l
bnQgPyBwc2V1ZG9FbGVtZW50LT5yZW5kZXJlcigpIDogbnVsbHB0cikKLSAgICAgICAgcmVuZGVy
VHJlZVBvc2l0aW9uKCkuaW52YWxpZGF0ZU5leHRTaWJsaW5nKCpyZW5kZXJlcik7Ci0KLSAgICBi
b29sIG5lZWRzUHNldWRvRWxlbWVudCA9IFdlYkNvcmU6Om5lZWRzUHNldWRvRWxlbWVudChjdXJy
ZW50LCBwc2V1ZG9JZCk7Ci0gICAgaWYgKCFuZWVkc1BzZXVkb0VsZW1lbnQpIHsKLSAgICAgICAg
aWYgKHBzZXVkb0VsZW1lbnQpIHsKLSAgICAgICAgICAgIGlmIChwc2V1ZG9JZCA9PSBCRUZPUkUp
Ci0gICAgICAgICAgICAgICAgY3VycmVudC5jbGVhckJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjdXJyZW50LmNsZWFyQWZ0ZXJQc2V1ZG9F
bGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0
cjxQc2V1ZG9FbGVtZW50PiBuZXdQc2V1ZG9FbGVtZW50OwotICAgIGlmICghcHNldWRvRWxlbWVu
dCkgewotICAgICAgICBuZXdQc2V1ZG9FbGVtZW50ID0gUHNldWRvRWxlbWVudDo6Y3JlYXRlKGN1
cnJlbnQsIHBzZXVkb0lkKTsKLSAgICAgICAgcHNldWRvRWxlbWVudCA9IG5ld1BzZXVkb0VsZW1l
bnQuZ2V0KCk7Ci0gICAgfQotCi0gICAgYXV0byBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9u
ZVB0cigqY3VycmVudC5yZW5kZXJlcigpLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG9JZCwg
JmN1cnJlbnQucmVuZGVyZXIoKS0+c3R5bGUoKSkpOwotCi0gICAgYXV0byBlbGVtZW50VXBkYXRl
ID0gU3R5bGU6OlRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKFdURk1v
dmUobmV3U3R5bGUpLCAqcHNldWRvRWxlbWVudCwgU3R5bGU6Ok5vQ2hhbmdlKTsKLQotICAgIGlm
IChlbGVtZW50VXBkYXRlLmNoYW5nZSA9PSBTdHlsZTo6Tm9DaGFuZ2UpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChuZXdQc2V1ZG9FbGVtZW50KSB7Ci0gICAgICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6cHNldWRvRWxlbWVudENyZWF0ZWQobV9kb2N1bWVudC5wYWdlKCksICpuZXdQ
c2V1ZG9FbGVtZW50KTsKLSAgICAgICAgaWYgKHBzZXVkb0lkID09IEJFRk9SRSkKLSAgICAgICAg
ICAgIGN1cnJlbnQuc2V0QmVmb3JlUHNldWRvRWxlbWVudChuZXdQc2V1ZG9FbGVtZW50LnJlbGVh
c2VOb25OdWxsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyZW50LnNldEFmdGVy
UHNldWRvRWxlbWVudChuZXdQc2V1ZG9FbGVtZW50LnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0K
LQotICAgIHVwZGF0ZUVsZW1lbnRSZW5kZXJlcigqcHNldWRvRWxlbWVudCwgZWxlbWVudFVwZGF0
ZSk7Ci0KLSAgICBhdXRvKiBwc2V1ZG9SZW5kZXJlciA9IHBzZXVkb0VsZW1lbnQtPnJlbmRlcmVy
KCk7Ci0gICAgaWYgKCFwc2V1ZG9SZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGVsZW1lbnRVcGRhdGUuY2hhbmdlID09IFN0eWxlOjpEZXRhY2gpCi0gICAgICAgIHBzZXVkb0Vs
ZW1lbnQtPmRpZEF0dGFjaFJlbmRlcmVycygpOwotICAgIGVsc2UKLSAgICAgICAgcHNldWRvRWxl
bWVudC0+ZGlkUmVjYWxjU3R5bGUoZWxlbWVudFVwZGF0ZS5jaGFuZ2UpOwotCi0gICAgaWYgKG1f
ZG9jdW1lbnQucmVuZGVyVmlldygpLT5oYXNRdW90ZXNOZWVkaW5nVXBkYXRlKCkpIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IGRlc2NlbmRhbnRzT2ZUeXBlPFJlbmRlclF1b3RlPigqcHNl
dWRvUmVuZGVyZXIpKQotICAgICAgICAgICAgdXBkYXRlUXVvdGVzVXBUbygmY2hpbGQpOwotICAg
IH0KLSAgICBpZiAoaXM8UmVuZGVyTGlzdEl0ZW0+KCpwc2V1ZG9SZW5kZXJlcikpCi0gICAgICAg
IExpc3RJdGVtOjp1cGRhdGVNYXJrZXIoZG93bmNhc3Q8UmVuZGVyTGlzdEl0ZW0+KCpwc2V1ZG9S
ZW5kZXJlcikpOwotfQotCiB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVy
cyhFbGVtZW50JiByb290LCBUZWFyZG93blR5cGUgdGVhcmRvd25UeXBlKQogewogICAgIFdpZGdl
dEhpZXJhcmNoeVVwZGF0ZXNTdXNwZW5zaW9uU2NvcGUgc3VzcGVuZFdpZGdldEhpZXJhcmNoeVVw
ZGF0ZXM7CkBAIC02NDIsMjAgKzU3Myw5IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJE
b3duUmVuZGVyZXIKICAgICB0ZXh0LnNldFJlbmRlcmVyKG51bGxwdHIpOwogfQogCi12b2lkIFJl
bmRlclRyZWVVcGRhdGVyOjp1cGRhdGVRdW90ZXNVcFRvKFJlbmRlclF1b3RlKiBsYXN0UXVvdGUp
CitSZW5kZXJWaWV3JiBSZW5kZXJUcmVlVXBkYXRlcjo6cmVuZGVyVmlldygpCiB7Ci0gICAgYXV0
byBxdW90ZVJlbmRlcmVycyA9IGRlc2NlbmRhbnRzT2ZUeXBlPFJlbmRlclF1b3RlPigqbV9kb2N1
bWVudC5yZW5kZXJWaWV3KCkpOwotICAgIGF1dG8gaXQgPSBtX3ByZXZpb3VzVXBkYXRlZFF1b3Rl
ID8gKytxdW90ZVJlbmRlcmVycy5hdCgqbV9wcmV2aW91c1VwZGF0ZWRRdW90ZSkgOiBxdW90ZVJl
bmRlcmVycy5iZWdpbigpOwotICAgIGF1dG8gZW5kID0gcXVvdGVSZW5kZXJlcnMuZW5kKCk7Ci0g
ICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBhdXRvJiBxdW90ZSA9ICppdDsK
LSAgICAgICAgLy8gUXVvdGUgY2hhcmFjdGVyIGRlcGVuZHMgb24gcXVvdGUgZGVwdGggc28gd2Ug
Y2hhaW4gdGhlIHVwZGF0ZXMuCi0gICAgICAgIHF1b3RlLnVwZGF0ZVJlbmRlcmVyKG1fcHJldmlv
dXNVcGRhdGVkUXVvdGUpOwotICAgICAgICBtX3ByZXZpb3VzVXBkYXRlZFF1b3RlID0gJnF1b3Rl
OwotICAgICAgICBpZiAoJnF1b3RlID09IGxhc3RRdW90ZSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgQVNTRVJUKCFsYXN0UXVvdGUpOworICAgIHJldHVybiAqbV9kb2N1bWVudC5y
ZW5kZXJWaWV3KCk7CiB9CiAKICNpZiBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmgJKHJldmlzaW9uIDIyMDkxNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEz
ICszNywxMyBAQCBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBF
bGVtZW50OwogY2xhc3MgTm9kZTsKLWNsYXNzIFJlbmRlclF1b3RlOwogY2xhc3MgUmVuZGVyU3R5
bGU7CiBjbGFzcyBUZXh0OwogCiBjbGFzcyBSZW5kZXJUcmVlVXBkYXRlciB7CiBwdWJsaWM6CiAg
ICAgUmVuZGVyVHJlZVVwZGF0ZXIoRG9jdW1lbnQmKTsKKyAgICB+UmVuZGVyVHJlZVVwZGF0ZXIo
KTsKIAogICAgIHZvaWQgY29tbWl0KHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBTdHlsZTo6VXBkYXRl
Pik7CiAKQEAgLTU1LDYgKzU1LDggQEAgcHVibGljOgogICAgIGNsYXNzIExpc3RJdGVtOwogCiBw
cml2YXRlOgorICAgIGNsYXNzIEdlbmVyYXRlZENvbnRlbnQ7CisKICAgICB2b2lkIHVwZGF0ZVJl
bmRlclRyZWUoQ29udGFpbmVyTm9kZSYgcm9vdCk7CiAgICAgdm9pZCB1cGRhdGVUZXh0UmVuZGVy
ZXIoVGV4dCYsIGNvbnN0IFN0eWxlOjpUZXh0VXBkYXRlKik7CiAgICAgdm9pZCB1cGRhdGVFbGVt
ZW50UmVuZGVyZXIoRWxlbWVudCYsIGNvbnN0IFN0eWxlOjpFbGVtZW50VXBkYXRlJik7CkBAIC02
Miw3ICs2NCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlkYXRlV2hpdGVzcGFjZU9ubHlU
ZXh0U2libGluZ3NBZnRlckF0dGFjaElmTmVlZGVkKE5vZGUmKTsKICAgICB2b2lkIHVwZGF0ZUJl
Zm9yZURlc2NlbmRhbnRzKEVsZW1lbnQmKTsKICAgICB2b2lkIHVwZGF0ZUFmdGVyRGVzY2VuZGFu
dHMoRWxlbWVudCYsIFN0eWxlOjpDaGFuZ2UpOwotICAgIHZvaWQgdXBkYXRlQmVmb3JlT3JBZnRl
clBzZXVkb0VsZW1lbnQoRWxlbWVudCYsIFBzZXVkb0lkKTsKIAogICAgIHN0cnVjdCBQYXJlbnQg
ewogICAgICAgICBFbGVtZW50KiBlbGVtZW50IHsgbnVsbHB0ciB9OwpAQCAtNzUsMTEgKzc2LDEz
IEBAIHByaXZhdGU6CiAgICAgUGFyZW50JiBwYXJlbnQoKSB7IHJldHVybiBtX3BhcmVudFN0YWNr
Lmxhc3QoKTsgfQogICAgIFJlbmRlclRyZWVQb3NpdGlvbiYgcmVuZGVyVHJlZVBvc2l0aW9uKCk7
CiAKKyAgICBHZW5lcmF0ZWRDb250ZW50JiBnZW5lcmF0ZWRDb250ZW50KCkgeyByZXR1cm4gKm1f
Z2VuZXJhdGVkQ29udGVudDsgfQorCiAgICAgdm9pZCBwdXNoUGFyZW50KEVsZW1lbnQmLCBTdHls
ZTo6Q2hhbmdlKTsKICAgICB2b2lkIHBvcFBhcmVudCgpOwogICAgIHZvaWQgcG9wUGFyZW50c1Rv
RGVwdGgodW5zaWduZWQgZGVwdGgpOwogCi0gICAgdm9pZCB1cGRhdGVRdW90ZXNVcFRvKFJlbmRl
clF1b3RlKik7CisgICAgUmVuZGVyVmlldyYgcmVuZGVyVmlldygpOwogCiAgICAgRG9jdW1lbnQm
IG1fZG9jdW1lbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IFN0eWxlOjpVcGRhdGU+IG1f
c3R5bGVVcGRhdGU7CkBAIC04Nyw3ICs5MCw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFBhcmVu
dD4gbV9wYXJlbnRTdGFjazsKIAogICAgIEhhc2hTZXQ8VGV4dCo+IG1faW52YWxpZGF0ZWRXaGl0
ZXNwYWNlT25seVRleHRTaWJsaW5nczsKLSAgICBSZW5kZXJRdW90ZSogbV9wcmV2aW91c1VwZGF0
ZWRRdW90ZSB7IG51bGxwdHIgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHZW5lcmF0ZWRDb250
ZW50PiBtX2dlbmVyYXRlZENvbnRlbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRl
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRh
dGVyR2VuZXJhdGVkQ29udGVudC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
c3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaCIKKworI2luY2x1ZGUg
IkNvbnRlbnREYXRhLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisj
aW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlckRlc2NlbmRhbnRJdGVy
YXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJJbWFn
ZS5oIgorI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmgiCisjaW5jbHVkZSAi
U3R5bGVUcmVlUmVzb2x2ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJUcmVl
VXBkYXRlcjo6R2VuZXJhdGVkQ29udGVudDo6R2VuZXJhdGVkQ29udGVudChSZW5kZXJUcmVlVXBk
YXRlciYgdXBkYXRlcikKKyAgICA6IG1fdXBkYXRlcih1cGRhdGVyKQoreworfQorCit2b2lkIFJl
bmRlclRyZWVVcGRhdGVyOjpHZW5lcmF0ZWRDb250ZW50Ojp1cGRhdGVCZWZvcmVQc2V1ZG9FbGVt
ZW50KEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgdXBkYXRlUHNldWRvRWxlbWVudChlbGVtZW50
LCBCRUZPUkUpOworfQorCit2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpHZW5lcmF0ZWRDb250ZW50
Ojp1cGRhdGVBZnRlclBzZXVkb0VsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICB1cGRh
dGVQc2V1ZG9FbGVtZW50KGVsZW1lbnQsIEFGVEVSKTsKK30KKwordm9pZCBSZW5kZXJUcmVlVXBk
YXRlcjo6R2VuZXJhdGVkQ29udGVudDo6dXBkYXRlUmVtYWluaW5nUXVvdGVzKCkKK3sKKyAgICBp
ZiAoIW1fdXBkYXRlci5yZW5kZXJWaWV3KCkuaGFzUXVvdGVzTmVlZGluZ1VwZGF0ZSgpKQorICAg
ICAgICByZXR1cm47CisgICAgdXBkYXRlUXVvdGVzVXBUbyhudWxscHRyKTsKKyAgICBtX3ByZXZp
b3VzVXBkYXRlZFF1b3RlID0gbnVsbHB0cjsKKyAgICBtX3VwZGF0ZXIucmVuZGVyVmlldygpLnNl
dEhhc1F1b3Rlc05lZWRpbmdVcGRhdGUoZmFsc2UpOworfQorCit2b2lkIFJlbmRlclRyZWVVcGRh
dGVyOjpHZW5lcmF0ZWRDb250ZW50Ojp1cGRhdGVRdW90ZXNVcFRvKFJlbmRlclF1b3RlKiBsYXN0
UXVvdGUpCit7CisgICAgYXV0byBxdW90ZVJlbmRlcmVycyA9IGRlc2NlbmRhbnRzT2ZUeXBlPFJl
bmRlclF1b3RlPihtX3VwZGF0ZXIucmVuZGVyVmlldygpKTsKKyAgICBhdXRvIGl0ID0gbV9wcmV2
aW91c1VwZGF0ZWRRdW90ZSA/ICsrcXVvdGVSZW5kZXJlcnMuYXQoKm1fcHJldmlvdXNVcGRhdGVk
UXVvdGUpIDogcXVvdGVSZW5kZXJlcnMuYmVnaW4oKTsKKyAgICBhdXRvIGVuZCA9IHF1b3RlUmVu
ZGVyZXJzLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgYXV0
byYgcXVvdGUgPSAqaXQ7CisgICAgICAgIC8vIFF1b3RlIGNoYXJhY3RlciBkZXBlbmRzIG9uIHF1
b3RlIGRlcHRoIHNvIHdlIGNoYWluIHRoZSB1cGRhdGVzLgorICAgICAgICBxdW90ZS51cGRhdGVS
ZW5kZXJlcihtX3ByZXZpb3VzVXBkYXRlZFF1b3RlKTsKKyAgICAgICAgbV9wcmV2aW91c1VwZGF0
ZWRRdW90ZSA9ICZxdW90ZTsKKyAgICAgICAgaWYgKCZxdW90ZSA9PSBsYXN0UXVvdGUpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCghbGFzdFF1b3RlKTsKK30KKworc3Rh
dGljIHZvaWQgY3JlYXRlQ29udGVudFJlbmRlcmVycyhSZW5kZXJFbGVtZW50JiByZW5kZXJlcikK
K3sKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLnN0eWxlKCk7CisgICAgaWYgKHN0eWxlLmhh
c0Zsb3dGcm9tKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChzdHlsZS5jb250ZW50
RGF0YSgpKTsKKworICAgIGZvciAoY29uc3QgQ29udGVudERhdGEqIGNvbnRlbnQgPSBzdHlsZS5j
b250ZW50RGF0YSgpOyBjb250ZW50OyBjb250ZW50ID0gY29udGVudC0+bmV4dCgpKSB7CisgICAg
ICAgIGF1dG8gY2hpbGQgPSBjb250ZW50LT5jcmVhdGVDb250ZW50UmVuZGVyZXIocmVuZGVyZXIu
ZG9jdW1lbnQoKSwgc3R5bGUpOworICAgICAgICBpZiAocmVuZGVyZXIuaXNDaGlsZEFsbG93ZWQo
KmNoaWxkLCBzdHlsZSkpCisgICAgICAgICAgICByZW5kZXJlci5hZGRDaGlsZChjaGlsZC5sZWFr
UHRyKCkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdXBkYXRlU3R5bGVGb3JDb250ZW50UmVu
ZGVyZXJzKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQoreworICAgIGZvciAoYXV0byogY2hpbGQg
PSByZW5kZXJlci5uZXh0SW5QcmVPcmRlcigmcmVuZGVyZXIpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dEluUHJlT3JkZXIoJnJlbmRlcmVyKSkgeworICAgICAgICAvLyBXZSBvbmx5IG1hbmFn
ZSB0aGUgc3R5bGUgZm9yIHRoZSBnZW5lcmF0ZWQgY29udGVudCB3aGljaCBtdXN0IGJlIGltYWdl
cyBvciB0ZXh0LgorICAgICAgICBpZiAoIWlzPFJlbmRlckltYWdlPigqY2hpbGQpICYmICFpczxS
ZW5kZXJRdW90ZT4oKmNoaWxkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhdXRv
IGNyZWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVTdHlsZUluaGVyaXRpbmdGcm9tUHNl
dWRvU3R5bGUocmVuZGVyZXIuc3R5bGUoKSk7CisgICAgICAgIGRvd25jYXN0PFJlbmRlckVsZW1l
bnQ+KCpjaGlsZCkuc2V0U3R5bGUoV1RGTW92ZShjcmVhdGVkU3R5bGUpKTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OkdlbmVyYXRlZENvbnRlbnQ6OnVwZGF0ZVBzZXVkb0Vs
ZW1lbnQoRWxlbWVudCYgY3VycmVudCwgUHNldWRvSWQgcHNldWRvSWQpCit7CisgICAgUHNldWRv
RWxlbWVudCogcHNldWRvRWxlbWVudCA9IHBzZXVkb0lkID09IEJFRk9SRSA/IGN1cnJlbnQuYmVm
b3JlUHNldWRvRWxlbWVudCgpIDogY3VycmVudC5hZnRlclBzZXVkb0VsZW1lbnQoKTsKKworICAg
IGlmIChhdXRvKiByZW5kZXJlciA9IHBzZXVkb0VsZW1lbnQgPyBwc2V1ZG9FbGVtZW50LT5yZW5k
ZXJlcigpIDogbnVsbHB0cikKKyAgICAgICAgbV91cGRhdGVyLnJlbmRlclRyZWVQb3NpdGlvbigp
LmludmFsaWRhdGVOZXh0U2libGluZygqcmVuZGVyZXIpOworCisgICAgaWYgKCFuZWVkc1BzZXVk
b0VsZW1lbnQoY3VycmVudCwgcHNldWRvSWQpKSB7CisgICAgICAgIGlmIChwc2V1ZG9FbGVtZW50
KSB7CisgICAgICAgICAgICBpZiAocHNldWRvSWQgPT0gQkVGT1JFKQorICAgICAgICAgICAgICAg
IGN1cnJlbnQuY2xlYXJCZWZvcmVQc2V1ZG9FbGVtZW50KCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgY3VycmVudC5jbGVhckFmdGVyUHNldWRvRWxlbWVudCgpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8UHNldWRvRWxlbWVudD4g
bmV3UHNldWRvRWxlbWVudDsKKyAgICBpZiAoIXBzZXVkb0VsZW1lbnQpIHsKKyAgICAgICAgbmV3
UHNldWRvRWxlbWVudCA9IFBzZXVkb0VsZW1lbnQ6OmNyZWF0ZShjdXJyZW50LCBwc2V1ZG9JZCk7
CisgICAgICAgIHBzZXVkb0VsZW1lbnQgPSBuZXdQc2V1ZG9FbGVtZW50LmdldCgpOworICAgIH0K
KworICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKmN1cnJlbnQucmVu
ZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRvSWQsICZjdXJyZW50LnJlbmRlcmVy
KCktPnN0eWxlKCkpKTsKKworICAgIGF1dG8gZWxlbWVudFVwZGF0ZSA9IFN0eWxlOjpUcmVlUmVz
b2x2ZXI6OmNyZWF0ZUFuaW1hdGVkRWxlbWVudFVwZGF0ZShXVEZNb3ZlKG5ld1N0eWxlKSwgKnBz
ZXVkb0VsZW1lbnQsIFN0eWxlOjpOb0NoYW5nZSk7CisKKyAgICBpZiAoZWxlbWVudFVwZGF0ZS5j
aGFuZ2UgPT0gU3R5bGU6Ok5vQ2hhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobmV3
UHNldWRvRWxlbWVudCkgeworICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnBzZXVk
b0VsZW1lbnRDcmVhdGVkKG1fdXBkYXRlci5tX2RvY3VtZW50LnBhZ2UoKSwgKm5ld1BzZXVkb0Vs
ZW1lbnQpOworICAgICAgICBpZiAocHNldWRvSWQgPT0gQkVGT1JFKQorICAgICAgICAgICAgY3Vy
cmVudC5zZXRCZWZvcmVQc2V1ZG9FbGVtZW50KG5ld1BzZXVkb0VsZW1lbnQucmVsZWFzZU5vbk51
bGwoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN1cnJlbnQuc2V0QWZ0ZXJQc2V1ZG9F
bGVtZW50KG5ld1BzZXVkb0VsZW1lbnQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAg
bV91cGRhdGVyLnVwZGF0ZUVsZW1lbnRSZW5kZXJlcigqcHNldWRvRWxlbWVudCwgZWxlbWVudFVw
ZGF0ZSk7CisKKyAgICBhdXRvKiBwc2V1ZG9SZW5kZXJlciA9IHBzZXVkb0VsZW1lbnQtPnJlbmRl
cmVyKCk7CisgICAgaWYgKCFwc2V1ZG9SZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGVsZW1lbnRVcGRhdGUuY2hhbmdlID09IFN0eWxlOjpEZXRhY2gpCisgICAgICAgIGNyZWF0
ZUNvbnRlbnRSZW5kZXJlcnMoKnBzZXVkb1JlbmRlcmVyKTsKKyAgICBlbHNlCisgICAgICAgIHVw
ZGF0ZVN0eWxlRm9yQ29udGVudFJlbmRlcmVycygqcHNldWRvUmVuZGVyZXIpOworCisgICAgaWYg
KG1fdXBkYXRlci5yZW5kZXJWaWV3KCkuaGFzUXVvdGVzTmVlZGluZ1VwZGF0ZSgpKSB7CisgICAg
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBkZXNjZW5kYW50c09mVHlwZTxSZW5kZXJRdW90ZT4oKnBz
ZXVkb1JlbmRlcmVyKSkKKyAgICAgICAgICAgIHVwZGF0ZVF1b3Rlc1VwVG8oJmNoaWxkKTsKKyAg
ICB9CisgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPigqcHNldWRvUmVuZGVyZXIpKQorICAgICAg
ICBMaXN0SXRlbTo6dXBkYXRlTWFya2VyKGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPigqcHNldWRv
UmVuZGVyZXIpKTsKK30KKworYm9vbCBSZW5kZXJUcmVlVXBkYXRlcjo6R2VuZXJhdGVkQ29udGVu
dDo6bmVlZHNQc2V1ZG9FbGVtZW50KEVsZW1lbnQmIGN1cnJlbnQsIFBzZXVkb0lkIHBzZXVkb0lk
KQoreworICAgIGlmICghY3VycmVudC5yZW5kZXJlcigpIHx8ICFjdXJyZW50LnJlbmRlcmVyKCkt
PmNhbkhhdmVHZW5lcmF0ZWRDaGlsZHJlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGN1cnJlbnQuaXNQc2V1ZG9FbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXBzZXVkb0VsZW1lbnRSZW5kZXJlcklzTmVlZGVkKGN1cnJlbnQucmVuZGVyZXIoKS0+
Z2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRvSWQpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiB0cnVlOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5k
ZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENv
bnRlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgorI2luY2x1ZGUg
IlJlbmRlclRyZWVVcGRhdGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRWxl
bWVudDsKK2NsYXNzIFJlbmRlclF1b3RlOworCitjbGFzcyBSZW5kZXJUcmVlVXBkYXRlcjo6R2Vu
ZXJhdGVkQ29udGVudCB7CitwdWJsaWM6CisgICAgR2VuZXJhdGVkQ29udGVudChSZW5kZXJUcmVl
VXBkYXRlciYpOworCisgICAgdm9pZCB1cGRhdGVCZWZvcmVQc2V1ZG9FbGVtZW50KEVsZW1lbnQm
KTsKKyAgICB2b2lkIHVwZGF0ZUFmdGVyUHNldWRvRWxlbWVudChFbGVtZW50Jik7CisgICAgdm9p
ZCB1cGRhdGVSZW1haW5pbmdRdW90ZXMoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZVBz
ZXVkb0VsZW1lbnQoRWxlbWVudCYsIFBzZXVkb0lkKTsKKyAgICB2b2lkIHVwZGF0ZVF1b3Rlc1Vw
VG8oUmVuZGVyUXVvdGUqKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBuZWVkc1BzZXVkb0VsZW1l
bnQoRWxlbWVudCYsIFBzZXVkb0lkKTsKKworICAgIFJlbmRlclRyZWVVcGRhdGVyJiBtX3VwZGF0
ZXI7CisgICAgUmVuZGVyUXVvdGUqIG1fcHJldmlvdXNVcGRhdGVkUXVvdGUgeyBudWxscHRyIH07
Cit9OworCit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>