<?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>76360</bug_id>
          
          <creation_ts>2012-01-15 21:02:33 -0800</creation_ts>
          <short_desc>webkitpy: make PortFactory.get() fully data-driven</short_desc>
          <delta_ts>2012-01-17 12:33:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</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>
          <dependson>76357</dependson>
          <blocked>76215</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>536347</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-15 21:02:33 -0800</bug_when>
    <thetext>break out from other bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536349</commentid>
    <comment_count>1</comment_count>
      <attachid>122588</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-15 21:06:33 -0800</bug_when>
    <thetext>Created attachment 122588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536378</commentid>
    <comment_count>2</comment_count>
      <attachid>122588</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-15 23:12:00 -0800</bug_when>
    <thetext>Comment on attachment 122588
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/factory.py:63
&gt; +    PORT_CLASSES = (
&gt; +        &apos;chromium_gpu.ChromiumGpuLinuxPort&apos;,
&gt; +        &apos;chromium_gpu.ChromiumGpuMacPort&apos;,
&gt; +        &apos;chromium_gpu.ChromiumGpuWinPort&apos;,
&gt; +        &apos;chromium_linux.ChromiumLinuxPort&apos;,
&gt; +        &apos;chromium_mac.ChromiumMacPort&apos;,
&gt; +        &apos;chromium_win.ChromiumWinPort&apos;,
&gt; +        &apos;dryrun.DryRunPort&apos;,
&gt; +        &apos;efl.EflPort&apos;,
&gt; +        &apos;google_chrome.GoogleChromeLinux32Port&apos;,
&gt; +        &apos;google_chrome.GoogleChromeLinux64Port&apos;,
&gt; +        &apos;google_chrome.GoogleChromeMacPort&apos;,
&gt; +        &apos;google_chrome.GoogleChromeWinPort&apos;,
&gt; +        &apos;gtk.GtkPort&apos;,
&gt; +        &apos;mac.MacPort&apos;,
&gt; +        &apos;mock_drt.MockDRTPort&apos;,
&gt; +        &apos;qt.QtPort&apos;,
&gt; +        &apos;test.TestPort&apos;,
&gt; +        &apos;win.WinPort&apos;,
&gt; +        )

I wonder if the class-lookup model which Command/MultiCommandTool uses would be a better fit than this hard-coded list in factory.py.  Your goal here is to get rid of the big if statement w/o having to import everythign up-front I assume?  Is importing every port from factory.py a problem in practice?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536652</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-16 10:30:08 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 122588 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122588&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/factory.py:63
&gt; &gt; +    PORT_CLASSES = (
&gt; &gt; +        &apos;chromium_gpu.ChromiumGpuLinuxPort&apos;,
&gt; &gt; +        &apos;chromium_gpu.ChromiumGpuMacPort&apos;,
&gt; &gt; +        &apos;chromium_gpu.ChromiumGpuWinPort&apos;,
&gt; &gt; +        &apos;chromium_linux.ChromiumLinuxPort&apos;,
&gt; &gt; +        &apos;chromium_mac.ChromiumMacPort&apos;,
&gt; &gt; +        &apos;chromium_win.ChromiumWinPort&apos;,
&gt; &gt; +        &apos;dryrun.DryRunPort&apos;,
&gt; &gt; +        &apos;efl.EflPort&apos;,
&gt; &gt; +        &apos;google_chrome.GoogleChromeLinux32Port&apos;,
&gt; &gt; +        &apos;google_chrome.GoogleChromeLinux64Port&apos;,
&gt; &gt; +        &apos;google_chrome.GoogleChromeMacPort&apos;,
&gt; &gt; +        &apos;google_chrome.GoogleChromeWinPort&apos;,
&gt; &gt; +        &apos;gtk.GtkPort&apos;,
&gt; &gt; +        &apos;mac.MacPort&apos;,
&gt; &gt; +        &apos;mock_drt.MockDRTPort&apos;,
&gt; &gt; +        &apos;qt.QtPort&apos;,
&gt; &gt; +        &apos;test.TestPort&apos;,
&gt; &gt; +        &apos;win.WinPort&apos;,
&gt; &gt; +        )
&gt; 
&gt; I wonder if the class-lookup model which Command/MultiCommandTool uses would be a better fit than this hard-coded list in factory.py.  Your goal here is to get rid of the big if statement w/o having to import everythign up-front I assume?  Is importing every port from factory.py a problem in practice?

At one point in time I was worried that Ports would not necessarily work on all platforms (e.g., you couldn&apos;t import &quot;win&quot; on a Mac) but we eventually decided to make that required to work.

So, I&apos;m not worried about importing everything up front, but I did/do want to get rid of the big if statement, and this approach let me keep everything in one place. It does have the downside that typos might be slightly harder to catch and debug.

An alternative would be to have two lists ... a list of import statements and then the list of class names in PORT_CLASSES. Slightly more redundant and more lines of code, but maybe a bit clearer.

I took a quick look at multicommandtool and see that you&apos;re using something called the __subclasses__ method, which I wasn&apos;t aware of. I&apos;ll look into that some more. I&apos;m a bit leery of accidentally pulling in classes I don&apos;t want in the list (e.g., I&apos;ll have to figure out how to strip out the ChromiumPort and WebKitPort) and/or making things a little less explicit but I&apos;ll definitely try it out to see how it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536683</commentid>
    <comment_count>4</comment_count>
      <attachid>122588</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-16 11:33:09 -0800</bug_when>
    <thetext>Comment on attachment 122588
Patch

I think this is OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536692</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-16 11:56:51 -0800</bug_when>
    <thetext>You can see that the MultiCommandTool architecture also filters out commands based on a self.hidden bool (at least for display in the main --help).  We could use something similar for filtering out ports we wanted to hide.

I&apos;m not certain it&apos;s better than an explicit list, but it does allow the explicit list to be a list of imports in one place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537290</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-17 12:33:10 -0800</bug_when>
    <thetext>Committed r105184: &lt;http://trac.webkit.org/changeset/105184&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122588</attachid>
            <date>2012-01-15 21:06:33 -0800</date>
            <delta_ts>2012-01-16 11:33:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76360-20120115210632.patch</filename>
            <type>text/plain</type>
            <size>10262</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MDM0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTg4N2VjMGRhYmE4NzkyM2ZmZjQ5ZTc0ZWI0ZTJlYzMz
NGQyYWJiOC4uNDA2ODU5Yzg2MjI4MTEzYTk0MzljODE1NjAxYzBhN2IyOWZjMGYwOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIy
IEBACiAyMDEyLTAxLTE1ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIHdlYmtpdHB5OiBtYWtlIFBvcnRGYWN0b3J5LmdldCgpIGJlIGZ1bGx5IGRhdGEtZHJp
dmVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM2
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFj
dG9yIFBvcnRGYWN0b3J5LmdldCgpIHRvIGJlIGZ1bGx5IGRhdGEtZHJpdmVuLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5OgorICAgICAg
ICAoUG9ydEZhY3RvcnkpOgorICAgICAgICAoUG9ydEZhY3RvcnkuX2RlZmF1bHRfcG9ydCk6Cisg
ICAgICAgIChQb3J0RmFjdG9yeS5nZXQpOgorICAgICAgICAoUG9ydEZhY3RvcnkuZ2V0LmluKToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnlfdW5p
dHRlc3QucHk6CisgICAgICAgIChGYWN0b3J5VGVzdC5hc3NlcnRfcG9ydCk6CisKKzIwMTItMDEt
MTUgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgd2Via2l0
cHk6IGFkZCBkZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUoKSwgY2xlYW4gdXAgcG9ydC5fX2luaXRf
XygpCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM1
NwogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2ZhY3RvcnkucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Zh
Y3RvcnkucHkKaW5kZXggOTc1ZTJkNzQ1NjcwYTE2MjVhZDVhYWM1ZTM2OTlmNjA4MjAyODk1NS4u
ZjAxMjdiMDY3YTY2NWUyOTU4YzNhM2RhNGI2ODFmZWQyZDRhNDYwMSAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQpAQCAtNDEs
MTA1ICs0MSw2MCBAQCBjbGFzcyBCdWlsZGVyT3B0aW9ucyhvYmplY3QpOgogCiAKIGNsYXNzIFBv
cnRGYWN0b3J5KG9iamVjdCk6CisgICAgUE9SVF9DTEFTU0VTID0gKAorICAgICAgICAnY2hyb21p
dW1fZ3B1LkNocm9taXVtR3B1TGludXhQb3J0JywKKyAgICAgICAgJ2Nocm9taXVtX2dwdS5DaHJv
bWl1bUdwdU1hY1BvcnQnLAorICAgICAgICAnY2hyb21pdW1fZ3B1LkNocm9taXVtR3B1V2luUG9y
dCcsCisgICAgICAgICdjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCcsCisgICAgICAg
ICdjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0JywKKyAgICAgICAgJ2Nocm9taXVtX3dpbi5D
aHJvbWl1bVdpblBvcnQnLAorICAgICAgICAnZHJ5cnVuLkRyeVJ1blBvcnQnLAorICAgICAgICAn
ZWZsLkVmbFBvcnQnLAorICAgICAgICAnZ29vZ2xlX2Nocm9tZS5Hb29nbGVDaHJvbWVMaW51eDMy
UG9ydCcsCisgICAgICAgICdnb29nbGVfY2hyb21lLkdvb2dsZUNocm9tZUxpbnV4NjRQb3J0JywK
KyAgICAgICAgJ2dvb2dsZV9jaHJvbWUuR29vZ2xlQ2hyb21lTWFjUG9ydCcsCisgICAgICAgICdn
b29nbGVfY2hyb21lLkdvb2dsZUNocm9tZVdpblBvcnQnLAorICAgICAgICAnZ3RrLkd0a1BvcnQn
LAorICAgICAgICAnbWFjLk1hY1BvcnQnLAorICAgICAgICAnbW9ja19kcnQuTW9ja0RSVFBvcnQn
LAorICAgICAgICAncXQuUXRQb3J0JywKKyAgICAgICAgJ3Rlc3QuVGVzdFBvcnQnLAorICAgICAg
ICAnd2luLldpblBvcnQnLAorICAgICAgICApCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9z
dCk6CiAgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CiAKLSAgICBkZWYgX3BvcnRfbmFtZV9mcm9t
X2FyZ3VtZW50c19hbmRfb3B0aW9ucyhzZWxmLCBwb3J0X25hbWUsIG9wdGlvbnMsIHBsYXRmb3Jt
KToKLSAgICAgICAgaWYgcG9ydF9uYW1lID09ICdjaHJvbWl1bS1ncHUnOgotICAgICAgICAgICAg
aWYgcGxhdGZvcm0uaXNfd2luKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjaHJvbWl1bS1n
cHUtd2luJwotICAgICAgICAgICAgaWYgcGxhdGZvcm0uaXNfbGludXgoKToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJ2Nocm9taXVtLWdwdS1saW51eCcKLSAgICAgICAgICAgIGlmIHBsYXRmb3Jt
LmlzX21hYygpOgotICAgICAgICAgICAgICAgIHJldHVybiAnY2hyb21pdW0tZ3B1LW1hYycKLQot
ICAgICAgICBpZiBwb3J0X25hbWU6Ci0gICAgICAgICAgICByZXR1cm4gcG9ydF9uYW1lCi0KLSAg
ICAgICAgaWYgcGxhdGZvcm0uaXNfd2luKCk6Ci0gICAgICAgICAgICBpZiBvcHRpb25zIGFuZCBo
YXNhdHRyKG9wdGlvbnMsICdjaHJvbWl1bScpIGFuZCBvcHRpb25zLmNocm9taXVtOgotICAgICAg
ICAgICAgICAgIHJldHVybiAnY2hyb21pdW0td2luJwotICAgICAgICAgICAgcmV0dXJuICd3aW4n
Ci0gICAgICAgIGlmIHBsYXRmb3JtLmlzX2xpbnV4KCk6CisgICAgZGVmIF9kZWZhdWx0X3BvcnQo
c2VsZiwgb3B0aW9ucyk6CisgICAgICAgIHBsYXRmb3JtID0gc2VsZi5faG9zdC5wbGF0Zm9ybQor
ICAgICAgICBpZiBvcHRpb25zIGFuZCBoYXNhdHRyKG9wdGlvbnMsICdjaHJvbWl1bScpIGFuZCBv
cHRpb25zLmNocm9taXVtOgorICAgICAgICAgICAgcmV0dXJuICdjaHJvbWl1bS0nICsgcGxhdGZv
cm0ub3NfbmFtZQorICAgICAgICBlbGlmIHBsYXRmb3JtLmlzX2xpbnV4KCk6CiAgICAgICAgICAg
ICByZXR1cm4gJ2Nocm9taXVtLWxpbnV4JwotICAgICAgICBpZiBwbGF0Zm9ybS5pc19tYWMoKToK
LSAgICAgICAgICAgIGlmIG9wdGlvbnMgYW5kIGhhc2F0dHIob3B0aW9ucywgJ2Nocm9taXVtJykg
YW5kIG9wdGlvbnMuY2hyb21pdW06Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjaHJvbWl1bS1t
YWMnCisgICAgICAgIGVsaWYgcGxhdGZvcm0uaXNfbWFjKCk6CiAgICAgICAgICAgICByZXR1cm4g
J21hYycKLQotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCd1bmtub3duIHBvcnQ7
IG9zX25hbWUgPSAiJXMiJyAlIHBsYXRmb3JtLm9zX25hbWUpCisgICAgICAgIGVsaWYgcGxhdGZv
cm0uaXNfd2luKCk6CisgICAgICAgICAgICByZXR1cm4gJ3dpbicKKyAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcigndW5rbm93biBwbGF0Zm9ybTogJXMnICUgcGxhdGZvcm0pCiAKICAg
ICBkZWYgZ2V0KHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsICoqa3dhcmdzKToK
ICAgICAgICAgIiIiUmV0dXJucyBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHRoZSBQb3J0IGludGVy
ZmFjZS4gSWYKICAgICAgICAgcG9ydF9uYW1lIGlzIE5vbmUsIHRoaXMgcm91dGluZSBhdHRlbXB0
cyB0byBndWVzcyBhdCB0aGUgbW9zdAogICAgICAgICBhcHByb3ByaWF0ZSBwb3J0IG9uIHRoaXMg
cGxhdGZvcm0uIiIiCi0gICAgICAgIHBvcnRfdG9fdXNlID0gc2VsZi5fcG9ydF9uYW1lX2Zyb21f
YXJndW1lbnRzX2FuZF9vcHRpb25zKHBvcnRfbmFtZSwgb3B0aW9ucywgc2VsZi5faG9zdC5wbGF0
Zm9ybSkKLSAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lIG9yIHBvcnRfdG9fdXNlCi0gICAg
ICAgIGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ3Rlc3QnKToKLSAgICAgICAgICAgIGltcG9y
dCB0ZXN0Ci0gICAgICAgICAgICBtYWtlciA9IHRlc3QuVGVzdFBvcnQKLSAgICAgICAgZWxpZiBw
b3J0X3RvX3VzZS5zdGFydHN3aXRoKCdkcnlydW4nKToKLSAgICAgICAgICAgIGltcG9ydCBkcnly
dW4KLSAgICAgICAgICAgIG1ha2VyID0gZHJ5cnVuLkRyeVJ1blBvcnQKLSAgICAgICAgZWxpZiBw
b3J0X3RvX3VzZS5zdGFydHN3aXRoKCdtb2NrLScpOgotICAgICAgICAgICAgaW1wb3J0IG1vY2tf
ZHJ0Ci0gICAgICAgICAgICBtYWtlciA9IG1vY2tfZHJ0Lk1vY2tEUlRQb3J0Ci0gICAgICAgIGVs
aWYgcG9ydF90b191c2Uuc3RhcnRzd2l0aCgnbWFjJyk6Ci0gICAgICAgICAgICBpbXBvcnQgbWFj
Ci0gICAgICAgICAgICBtYWtlciA9IG1hYy5NYWNQb3J0Ci0gICAgICAgIGVsaWYgcG9ydF90b191
c2Uuc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgICAgICAgICBpbXBvcnQgd2luCi0gICAgICAgICAg
ICBtYWtlciA9IHdpbi5XaW5Qb3J0Ci0gICAgICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0
aCgnZ3RrJyk6Ci0gICAgICAgICAgICBpbXBvcnQgZ3RrCi0gICAgICAgICAgICBtYWtlciA9IGd0
ay5HdGtQb3J0Ci0gICAgICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0aCgncXQnKToKLSAg
ICAgICAgICAgIGltcG9ydCBxdAotICAgICAgICAgICAgbWFrZXIgPSBxdC5RdFBvcnQKLSAgICAg
ICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdjaHJvbWl1bS1ncHUtbGludXgnKToKLSAg
ICAgICAgICAgIGltcG9ydCBjaHJvbWl1bV9ncHUKLSAgICAgICAgICAgIHBvcnRfbmFtZSA9IHBv
cnRfdG9fdXNlCi0gICAgICAgICAgICBtYWtlciA9IGNocm9taXVtX2dwdS5DaHJvbWl1bUdwdUxp
bnV4UG9ydAotICAgICAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLWdw
dS1tYWMnKToKLSAgICAgICAgICAgIGltcG9ydCBjaHJvbWl1bV9ncHUKLSAgICAgICAgICAgIHBv
cnRfbmFtZSA9IHBvcnRfdG9fdXNlCi0gICAgICAgICAgICBtYWtlciA9IGNocm9taXVtX2dwdS5D
aHJvbWl1bUdwdU1hY1BvcnQKLSAgICAgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdj
aHJvbWl1bS1ncHUtd2luJyk6Ci0gICAgICAgICAgICBpbXBvcnQgY2hyb21pdW1fZ3B1Ci0gICAg
ICAgICAgICBwb3J0X25hbWUgPSBwb3J0X3RvX3VzZQotICAgICAgICAgICAgbWFrZXIgPSBjaHJv
bWl1bV9ncHUuQ2hyb21pdW1HcHVXaW5Qb3J0Ci0gICAgICAgIGVsaWYgcG9ydF90b191c2Uuc3Rh
cnRzd2l0aCgnY2hyb21pdW0tbWFjJyk6Ci0gICAgICAgICAgICBpbXBvcnQgY2hyb21pdW1fbWFj
Ci0gICAgICAgICAgICBwb3J0X25hbWUgPSBwb3J0X3RvX3VzZQotICAgICAgICAgICAgbWFrZXIg
PSBjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0Ci0gICAgICAgIGVsaWYgcG9ydF90b191c2Uu
c3RhcnRzd2l0aCgnY2hyb21pdW0tbGludXgnKToKLSAgICAgICAgICAgIGltcG9ydCBjaHJvbWl1
bV9saW51eAotICAgICAgICAgICAgbWFrZXIgPSBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4
UG9ydAotICAgICAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLXdpbicp
OgotICAgICAgICAgICAgaW1wb3J0IGNocm9taXVtX3dpbgotICAgICAgICAgICAgbWFrZXIgPSBj
aHJvbWl1bV93aW4uQ2hyb21pdW1XaW5Qb3J0Ci0gICAgICAgIGVsaWYgcG9ydF90b191c2UgPT0g
J2dvb2dsZS1jaHJvbWUtbGludXgzMic6Ci0gICAgICAgICAgICBpbXBvcnQgZ29vZ2xlX2Nocm9t
ZQotICAgICAgICAgICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLWxpbnV4LXg4NicKLSAgICAgICAg
ICAgIG1ha2VyID0gZ29vZ2xlX2Nocm9tZS5Hb29nbGVDaHJvbWVMaW51eDMyUG9ydAotICAgICAg
ICBlbGlmIHBvcnRfdG9fdXNlID09ICdnb29nbGUtY2hyb21lLWxpbnV4NjQnOgotICAgICAgICAg
ICAgaW1wb3J0IGdvb2dsZV9jaHJvbWUKLSAgICAgICAgICAgIHBvcnRfbmFtZSA9ICdjaHJvbWl1
bS1saW51eC14ODZfNjQnCi0gICAgICAgICAgICBtYWtlciA9IGdvb2dsZV9jaHJvbWUuR29vZ2xl
Q2hyb21lTGludXg2NFBvcnQKLSAgICAgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdn
b29nbGUtY2hyb21lLXdpbicpOgotICAgICAgICAgICAgaW1wb3J0IGdvb2dsZV9jaHJvbWUKLSAg
ICAgICAgICAgIG1ha2VyID0gZ29vZ2xlX2Nocm9tZS5Hb29nbGVDaHJvbWVXaW5Qb3J0Ci0gICAg
ICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0aCgnZ29vZ2xlLWNocm9tZS1tYWMnKToKLSAg
ICAgICAgICAgIGltcG9ydCBnb29nbGVfY2hyb21lCi0gICAgICAgICAgICBtYWtlciA9IGdvb2ds
ZV9jaHJvbWUuR29vZ2xlQ2hyb21lTWFjUG9ydAotICAgICAgICBlbGlmIHBvcnRfdG9fdXNlLnN0
YXJ0c3dpdGgoJ2VmbCcpOgotICAgICAgICAgICAgaW1wb3J0IGVmbAotICAgICAgICAgICAgbWFr
ZXIgPSBlZmwuRWZsUG9ydAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcigndW5zdXBwb3J0ZWQgcG9ydDogJXMnICUgcG9ydF90b191c2UpCisgICAg
ICAgIHBvcnRfbmFtZSA9IHBvcnRfbmFtZSBvciBzZWxmLl9kZWZhdWx0X3BvcnQob3B0aW9ucykK
IAotICAgICAgICBwb3J0X25hbWUgPSBtYWtlci5kZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUoc2Vs
Zi5faG9zdCwgb3B0aW9ucywgcG9ydF9uYW1lKQotICAgICAgICByZXR1cm4gbWFrZXIoc2VsZi5f
aG9zdCwgcG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMsICoqa3dhcmdzKQorICAgICAgICAjIEZJ
WE1FOiBSZW1vdmUgdGhpcyB3aGVuIHdlIHJlbW92ZSB0aGUgY2hyb21pdW0tZ3B1IHBvcnRzLgor
ICAgICAgICBpZiBwb3J0X25hbWUgPT0gJ2Nocm9taXVtLWdwdSc6CisgICAgICAgICAgICBwb3J0
X25hbWUgPSBwb3J0X25hbWUgKyAnLScgKyBzZWxmLl9ob3N0LnBsYXRmb3JtLm9zX25hbWUKKwor
ICAgICAgICBmb3IgcG9ydF9jbGFzcyBpbiBzZWxmLlBPUlRfQ0xBU1NFUzoKKyAgICAgICAgICAg
IG1vZHVsZV9uYW1lLCBjbGFzc19uYW1lID0gcG9ydF9jbGFzcy5yc3BsaXQoJy4nLCAxKQorICAg
ICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhtb2R1bGVfbmFtZSwgZ2xvYmFscygpLCBsb2Nh
bHMoKSwgW10sIC0xKQorICAgICAgICAgICAgY2xzID0gbW9kdWxlLl9fZGljdF9fW2NsYXNzX25h
bWVdCisgICAgICAgICAgICBpZiBwb3J0X25hbWUuc3RhcnRzd2l0aChjbHMucG9ydF9uYW1lKToK
KyAgICAgICAgICAgICAgICBwb3J0X25hbWUgPSBjbHMuZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1l
KHNlbGYuX2hvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y2xzKHNlbGYuX2hvc3QsIHBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCAqKmt3YXJncykKKyAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigndW5zdXBwb3J0ZWQgcG9ydDogJXMnICUg
cG9ydF9uYW1lKQogCiAgICAgZGVmIGFsbF9wb3J0X25hbWVzKHNlbGYpOgogICAgICAgICAiIiJS
ZXR1cm4gYSBsaXN0IG9mIGFsbCB2YWxpZCwgZnVsbHktc3BlY2lmaWVkLCAicmVhbCIgcG9ydCBu
YW1lcy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvZmFjdG9yeV91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQppbmRleCBiNTY3ZjczYjg5Njg4ZWUwN2I5NmE5
NzBiYmRmYWQ2ZDg3MGYzNzlhLi42MGYzMzNlNzVmZmNlODQ0YTM5YTJiYzMzNWYwYTU2ZGQ5MWEx
OTMxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2ZhY3RvcnlfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5CkBAIC0zMCwxOSArMzAsMTkgQEAgaW1wb3J0
IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlv
bnMKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1v
Y2tTeXN0ZW1Ib3N0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmZhY3RvcnkgaW1w
b3J0IFBvcnRGYWN0b3J5CiAKLWltcG9ydCBjaHJvbWl1bV9ncHUKLWltcG9ydCBjaHJvbWl1bV9s
aW51eAotaW1wb3J0IGNocm9taXVtX21hYwotaW1wb3J0IGNocm9taXVtX3dpbgotaW1wb3J0IGRy
eXJ1bgotaW1wb3J0IGdvb2dsZV9jaHJvbWUKLWltcG9ydCBndGsKLWltcG9ydCBtYWMKLWltcG9y
dCBxdAotaW1wb3J0IHRlc3QKLWltcG9ydCB3aW4KK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnBvcnQgaW1wb3J0IGNocm9taXVtX2dwdQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9y
dCBpbXBvcnQgY2hyb21pdW1fbGludXgKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQg
aW1wb3J0IGNocm9taXVtX21hYworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBv
cnQgY2hyb21pdW1fd2luCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBk
cnlydW4KK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGZhY3RvcnkKK2Zy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGdvb2dsZV9jaHJvbWUKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGd0aworZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMucG9ydCBpbXBvcnQgbWFjCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0
IGltcG9ydCBxdAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgdGVzdAor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgd2luCiAKIAogY2xhc3MgRmFj
dG9yeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNTYsMTAgKzU2LDggQEAgY2xhc3MgRmFj
dG9yeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGFzc2VydF9wb3J0KHNlbGYs
IHBvcnRfbmFtZT1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249Tm9uZSwgb3B0aW9ucz1O
b25lLCBjbHM9Tm9uZSk6CiAgICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChvc19uYW1lPW9z
X25hbWUsIG9zX3ZlcnNpb249b3NfdmVyc2lvbikKLSAgICAgICAgcG9ydCA9IFBvcnRGYWN0b3J5
KGhvc3QpLmdldChwb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucykKLSAgICAgICAgIyBGSVhNRTog
VGhpcyB3aWxsIGZhaWwgdW50aWwgd2UgZmluaXNoIHJlZmFjdG9yaW5nIGZhY3RvcnkucHkuCi0g
ICAgICAgICMgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocG9ydCwgY2xzKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMocG9ydC5fX2NsYXNzX18uX19uYW1lX18sIGNscy5fX25hbWVfXykK
KyAgICAgICAgcG9ydCA9IGZhY3RvcnkuUG9ydEZhY3RvcnkoaG9zdCkuZ2V0KHBvcnRfbmFtZSwg
b3B0aW9ucz1vcHRpb25zKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwb3J0
LCBjbHMpKQogCiAgICAgZGVmIHRlc3RfbWFjKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydF9w
b3J0KHBvcnRfbmFtZT0nbWFjJywgY2xzPW1hYy5NYWNQb3J0KQpAQCAtMTMzLDEwICsxMzEsMTAg
QEAgY2xhc3MgRmFjdG9yeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAg
ICAgICAgICAgIGNscz1jaHJvbWl1bV93aW4uQ2hyb21pdW1XaW5Qb3J0KQogCiAgICAgZGVmIHRl
c3RfdW5rbm93bl9zcGVjaWZpZWQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5v
dEltcGxlbWVudGVkRXJyb3IsIFBvcnRGYWN0b3J5KE1vY2tTeXN0ZW1Ib3N0KCkpLmdldCwgcG9y
dF9uYW1lPSd1bmtub3duJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50
ZWRFcnJvciwgZmFjdG9yeS5Qb3J0RmFjdG9yeShNb2NrU3lzdGVtSG9zdCgpKS5nZXQsIHBvcnRf
bmFtZT0ndW5rbm93bicpCiAKICAgICBkZWYgdGVzdF91bmtub3duX2RlZmF1bHQoc2VsZik6Ci0g
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIFBvcnRGYWN0b3J5
KE1vY2tTeXN0ZW1Ib3N0KG9zX25hbWU9J3ZtcycpKS5nZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGZhY3RvcnkuUG9ydEZhY3RvcnkoTW9ja1N5c3Rl
bUhvc3Qob3NfbmFtZT0ndm1zJykpLmdldCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
Ogo=
</data>
<flag name="review"
          id="123423"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>