Title: [195685] trunk
Revision
195685
Author
[email protected]
Date
2016-01-27 12:24:37 -0800 (Wed, 27 Jan 2016)

Log Message

Need ability to specify alternate image for AutoFill button in input fields.
https://bugs.webkit.org/show_bug.cgi?id=153116.
rdar://problem/23384854.

Patch by Zhuo Li <[email protected]> on 2016-01-27
Reviewed by Darin Adler.

Source/WebCore:

Add a new AutoFill button that can be shown in <input> elements.

Tests: fast/forms/auto-fill-button/input-contacts-auto-fill-button.html
       fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html

* css/html.css:
(input::-webkit-contacts-auto-fill-button):
(input::-webkit-contacts-auto-fill-button:hover):
(input::-webkit-contacts-auto-fill-button:active):
Add default style rules for the Contacts AutoFill button based on the ones used for
Manual AutoFill button.

* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::setShowAutoFillButton):
* html/HTMLInputElement.h:
(WebCore::HTMLInputElement::autoFillButtonType):
- Replace the boolean parameter with a new parameter to specify the type of the AutoFill button.
- Declare a private variable to keep a record of the type of the current AutoFill
button.
(WebCore::HTMLInputElement::showAutoFillButton): Deleted.

* html/HTMLTextFormControlElement.h:
Declare enum for AutoFill button type.

* html/TextFieldInputType.cpp:
(WebCore::autoFillButtonTypeToAutoFillButtonPseudoClassName):
(WebCore::isAutoFillButtonTypeChanged):
(WebCore::TextFieldInputType::shouldDrawAutoFillButton): None means the AutoFill button is not
enabled.
(WebCore::TextFieldInputType::createAutoFillButton): Only create the AutoFill button
if the type is expected.
(WebCore::TextFieldInputType::updateAutoFillButton):
Handle the case where AutoFill button type changes in the text field.
* html/TextFieldInputType.h:

* testing/Internals.cpp:
(WebCore::stringToAutoFillButtonType): Convert the string to AutoFill button type.
(WebCore::Internals::setShowAutoFillButton): Add a new parameter to specify the type of the AutoFill button.
* testing/Internals.h: Ditto.
* testing/Internals.idl: Ditto.

Source/WebKit2:

* WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
(toAutoFillButtonType): Convert the WebKit AutoFill button type enum to WebCore AutoFill button
type enum.
(WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType): Added to be able to specify
what the AutoFill button type is. None means the AutoFill button is not shown.
(WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled): Deprecate this method.
* WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h: Declare an AutoFill button type enum.
* WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
(WebKit::InjectedBundleNodeHandle::isHTMLInputElementAutoFillButtonEnabled): None means the AutoFill button is not enabled.
(WebKit::InjectedBundleNodeHandle::setHTMLInputElementAutoFillButtonEnabledWithButtonType): Use the new parameter to specify
what the AutoFill button type is.
* WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h: Ditto.

LayoutTests:

* fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-disabled.html: The test API has
another parameter to specify what type the AutoFill button is.
* fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html: Ditto.
* fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt: Added.
* fast/forms/auto-fill-button/input-contacts-auto-fill-button.html: Added.
* fast/forms/auto-fill-button/input-auto-fill-button.html: Ditto.
* fast/forms/auto-fill-button/input-disabled-auto-fill-button.html: Ditto.
* fast/forms/auto-fill-button/input-readonly-non-empty-auto-fill-button.html: Ditto.
* fast/forms/auto-fill-button/mouse-down-input-mouse-release-auto-fill-button.html: Ditto.
* fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes-expected.html: Added.
* fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (195684 => 195685)


--- trunk/LayoutTests/ChangeLog	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/ChangeLog	2016-01-27 20:24:37 UTC (rev 195685)
@@ -1,3 +1,23 @@
+2016-01-27  Zhuo Li  <[email protected]>
+
+        Need ability to specify alternate image for AutoFill button in input fields.
+        https://bugs.webkit.org/show_bug.cgi?id=153116.
+        rdar://problem/23384854.
+
+        Reviewed by Darin Adler.
+
+        * fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-disabled.html: The test API has
+        another parameter to specify what type the AutoFill button is.
+        * fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html: Ditto.
+        * fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt: Added.
+        * fast/forms/auto-fill-button/input-contacts-auto-fill-button.html: Added.
+        * fast/forms/auto-fill-button/input-auto-fill-button.html: Ditto.
+        * fast/forms/auto-fill-button/input-disabled-auto-fill-button.html: Ditto.
+        * fast/forms/auto-fill-button/input-readonly-non-empty-auto-fill-button.html: Ditto.
+        * fast/forms/auto-fill-button/mouse-down-input-mouse-release-auto-fill-button.html: Ditto.
+        * fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes-expected.html: Added.
+        * fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html: Added.
+
 2016-01-26  Ryosuke Niwa  <[email protected]>
 
         Add Node.treeRoot

Modified: trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-disabled.html (195684 => 195685)


--- trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-disabled.html	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-disabled.html	2016-01-27 20:24:37 UTC (rev 195685)
@@ -10,7 +10,7 @@
 var password = document.getElementById("password");
 
 if (window.internals)
-    internals.setShowAutoFillButton(password, true);
+    internals.setShowAutoFillButton(password, "AutoFillButtonTypeCredentials");
 
 function makeFieldDisabledAndNotifyDone()
 {

Modified: trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html (195684 => 195685)


--- trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html	2016-01-27 20:24:37 UTC (rev 195685)
@@ -10,7 +10,7 @@
 var password = document.getElementById("password");
 
 if (window.internals)
-    internals.setShowAutoFillButton(password, true);
+    internals.setShowAutoFillButton(password, "AutoFillButtonTypeCredentials");
 
 function makeFieldReadOnlyAndNotifyDone()
 {

Modified: trunk/LayoutTests/fast/forms/auto-fill-button/input-auto-fill-button.html (195684 => 195685)


--- trunk/LayoutTests/fast/forms/auto-fill-button/input-auto-fill-button.html	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/input-auto-fill-button.html	2016-01-27 20:24:37 UTC (rev 195685)
@@ -1,21 +1,21 @@
 <p>This tests that the AutoFill button renders. It can only be tested in the test tool.</p>
-<div id='container'>
-    <input type='text'>
-    <input type='password'>
+<div id="container">
+    <input type="text">
+    <input type="password">
 </div>
 <script>
 
 if (window.internals) {
     var inputs = document.querySelectorAll("input");
     for (var i = 0; i < inputs.length; ++i)
-        window.internals.setShowAutoFillButton(inputs[i], true);
+        window.internals.setShowAutoFillButton(inputs[i], "AutoFillButtonTypeCredentials");
 
     var dynamicInput = document.createElement("input");
-    window.internals.setShowAutoFillButton(dynamicInput, true);
+    window.internals.setShowAutoFillButton(dynamicInput, "AutoFillButtonTypeCredentials");
     document.querySelector("#container").appendChild(dynamicInput);
 
     var dynamicInput2 = document.createElement("input");
-    window.internals.setShowAutoFillButton(dynamicInput2, true);
+    window.internals.setShowAutoFillButton(dynamicInput2, "AutoFillButtonTypeCredentials");
     document.querySelector("#container").appendChild(dynamicInput2);
     dynamicInput2.setAttribute("type", "password");
 }

Added: trunk/LayoutTests/fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt (0 => 195685)


--- trunk/LayoutTests/fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt	2016-01-27 20:24:37 UTC (rev 195685)
@@ -0,0 +1,57 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x104
+  RenderBlock {HTML} at (0,0) size 800x104
+    RenderBody {BODY} at (8,16) size 784x80
+      RenderBlock {P} at (0,0) size 784x18
+        RenderText {#text} at (0,0) size 598x18
+          text run at (0,0) width 598: "This tests that the Address Book AutoFill button renders. It can only be tested in the test tool."
+      RenderBlock {DIV} at (0,34) size 784x46
+        RenderTextControl {INPUT} at (2,2) size 137x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+          RenderFlexibleBox {DIV} at (3,3) size 131x13
+            RenderBlock {DIV} at (0,0) size 111x13
+        RenderText {#text} at (140,2) size 5x18
+          text run at (140,2) width 5: " "
+        RenderTextControl {INPUT} at (146,2) size 137x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+          RenderFlexibleBox {DIV} at (3,3) size 131x13
+            RenderBlock {DIV} at (0,0) size 111x13
+        RenderText {#text} at (284,2) size 5x18
+          text run at (284,2) width 5: " "
+        RenderTextControl {INPUT} at (290,2) size 138x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+          RenderFlexibleBox {DIV} at (3,3) size 131x13
+            RenderBlock {DIV} at (0,0) size 111x13
+        RenderText {#text} at (429,2) size 5x18
+          text run at (429,2) width 5: " "
+        RenderTextControl {INPUT} at (435,2) size 137x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+          RenderFlexibleBox {DIV} at (3,3) size 131x13
+            RenderBlock {DIV} at (0,0) size 111x13
+        RenderTextControl {INPUT} at (575,2) size 137x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+          RenderFlexibleBox {DIV} at (3,3) size 131x13
+            RenderBlock {DIV} at (0,0) size 111x13
+        RenderTextControl {INPUT} at (2,25) size 137x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+          RenderFlexibleBox {DIV} at (3,3) size 131x13
+            RenderBlock {DIV} at (0,0) size 111x13
+layer at (13,55) size 110x13
+  RenderBlock {DIV} at (0,0) size 111x13
+layer at (157,55) size 110x13
+  RenderBlock {DIV} at (0,0) size 111x13
+layer at (302,55) size 110x13
+  RenderBlock {DIV} at (0,0) size 111x13
+layer at (446,55) size 110x13
+  RenderBlock {DIV} at (0,0) size 111x13
+layer at (586,55) size 110x13
+  RenderBlock {DIV} at (0,0) size 111x13
+layer at (13,78) size 110x13
+  RenderBlock {DIV} at (0,0) size 111x13
+layer at (126,56) size 15x12
+  RenderBlock {DIV} at (113,0) size 16x13 [bgcolor=#000000]
+layer at (271,56) size 15x12
+  RenderBlock {DIV} at (113,0) size 16x13 [bgcolor=#000000]
+layer at (415,56) size 15x12
+  RenderBlock {DIV} at (113,0) size 16x13 [bgcolor=#000000]
+layer at (559,56) size 15x12
+  RenderBlock {DIV} at (113,0) size 16x13 [bgcolor=#000000]
+layer at (700,56) size 15x12
+  RenderBlock {DIV} at (113,0) size 16x13 [bgcolor=#000000]
+layer at (126,79) size 15x12
+  RenderBlock {DIV} at (113,0) size 16x13 [bgcolor=#000000]

Added: trunk/LayoutTests/fast/forms/auto-fill-button/input-contacts-auto-fill-button.html (0 => 195685)


--- trunk/LayoutTests/fast/forms/auto-fill-button/input-contacts-auto-fill-button.html	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/input-contacts-auto-fill-button.html	2016-01-27 20:24:37 UTC (rev 195685)
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<p>This tests that the Address Book AutoFill button renders. It can only be tested in the test tool.</p>
+<div id="container">
+    <input type="text">
+    <input type="text" name="first_name">
+    <input type="text" name="last_name">
+</div>
+<script>
+
+if (window.internals) {
+    var inputs = document.querySelectorAll("input");
+    for (var i = 0; i < inputs.length; ++i)
+        window.internals.setShowAutoFillButton(inputs[i], "AutoFillButtonTypeContacts");
+
+    var dynamicInput = document.createElement("input");
+    window.internals.setShowAutoFillButton(dynamicInput, "AutoFillButtonTypeContacts");
+    document.querySelector("#container").appendChild(dynamicInput);
+
+    var dynamicInput2 = document.createElement("input");
+    window.internals.setShowAutoFillButton(dynamicInput2, "AutoFillButtonTypeContacts");
+    document.querySelector("#container").appendChild(dynamicInput2);
+    dynamicInput2.setAttribute("name", "address");
+
+    var dynamicInput3 = document.createElement("input");
+    window.internals.setShowAutoFillButton(dynamicInput3, "AutoFillButtonTypeContacts");
+    document.querySelector("#container").appendChild(dynamicInput3);
+    dynamicInput3.setAttribute("name", "phone_number");
+}
+</script>
+</html>

Modified: trunk/LayoutTests/fast/forms/auto-fill-button/input-disabled-auto-fill-button.html (195684 => 195685)


--- trunk/LayoutTests/fast/forms/auto-fill-button/input-disabled-auto-fill-button.html	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/input-disabled-auto-fill-button.html	2016-01-27 20:24:37 UTC (rev 195685)
@@ -5,7 +5,7 @@
 <input type="password" id="password" placeholder="disabled" disabled autofocus>
 <script>
 if (window.internals)
-    internals.setShowAutoFillButton(document.getElementById("password"), true);
+    internals.setShowAutoFillButton(document.getElementById("password"), "AutoFillButtonTypeCredentials");
 </script>
 </body>
 </html>

Modified: trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-auto-fill-button.html (195684 => 195685)


--- trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-auto-fill-button.html	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-auto-fill-button.html	2016-01-27 20:24:37 UTC (rev 195685)
@@ -5,7 +5,7 @@
 <input type="password" id="password" placeholder="read only" readonly autofocus>
 <script>
 if (window.internals)
-    internals.setShowAutoFillButton(document.getElementById("password"), true);
+    internals.setShowAutoFillButton(document.getElementById("password"), "AutoFillButtonTypeCredentials");
 </script>
 </body>
 </html>

Modified: trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-non-empty-auto-fill-button.html (195684 => 195685)


--- trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-non-empty-auto-fill-button.html	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-non-empty-auto-fill-button.html	2016-01-27 20:24:37 UTC (rev 195685)
@@ -5,7 +5,7 @@
 <input type="password" id="password" value="read only" readonly autofocus>
 <script>
 if (window.internals)
-    internals.setShowAutoFillButton(document.getElementById("password"), true);
+    internals.setShowAutoFillButton(document.getElementById("password"), "AutoFillButtonTypeCredentials");
 </script>
 </body>
 </html>

Modified: trunk/LayoutTests/fast/forms/auto-fill-button/mouse-down-input-mouse-release-auto-fill-button.html (195684 => 195685)


--- trunk/LayoutTests/fast/forms/auto-fill-button/mouse-down-input-mouse-release-auto-fill-button.html	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/mouse-down-input-mouse-release-auto-fill-button.html	2016-01-27 20:24:37 UTC (rev 195685)
@@ -22,9 +22,9 @@
     if (!window.internals || !window.eventSender)
         return;
 
-    internals.setShowAutoFillButton(password, true);
+    internals.setShowAutoFillButton(password, "AutoFillButtonTypeCredentials");
 
-    var autoFillButton = getElementByPseudoId(internals.shadowRoot(password), "-webkit-auto-fill-button");
+    var autoFillButton = getElementByPseudoId(internals.shadowRoot(password), "-webkit-credentials-auto-fill-button");
     autoFillButton._onclick_ = checkEventAndDone;
 
     eventSender.mouseMoveTo(password.offsetLeft + 10, password.offsetTop + password.offsetHeight / 2);

Added: trunk/LayoutTests/fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes-expected.html (0 => 195685)


--- trunk/LayoutTests/fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes-expected.html	2016-01-27 20:24:37 UTC (rev 195685)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<body>
+<p>This tests that we show the correct AutoFill button when AutoFill button type changes. It can only be tested in the test tool.</p>
+<input id="credentials">
+<input id="contacts">
+<script>
+if (window.internals) {
+    internals.setShowAutoFillButton(document.getElementById("credentials"), "AutoFillButtonTypeContacts");
+    internals.setShowAutoFillButton(document.getElementById("contacts"), "AutoFillButtonTypeCredentials");
+}
+</script>
+</body>
+</html>
\ No newline at end of file

Added: trunk/LayoutTests/fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html (0 => 195685)


--- trunk/LayoutTests/fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html	2016-01-27 20:24:37 UTC (rev 195685)
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<body>
+<p>This tests that we show the correct AutoFill button when AutoFill button type changes. It can only be tested in the test tool.</p>
+<input id="credentials">
+<input id="contacts">
+<script>
+if (window.internals) {
+    internals.setShowAutoFillButton(document.getElementById("credentials"), "AutoFillButtonTypeCredentials");
+    internals.setShowAutoFillButton(document.getElementById("credentials"), "AutoFillButtonTypeContacts");
+
+    internals.setShowAutoFillButton(document.getElementById("contacts"), "AutoFillButtonTypeContacts");
+    internals.setShowAutoFillButton(document.getElementById("contacts"), "AutoFillButtonTypeCredentials");
+}
+</script>
+</body>
+</html>
\ No newline at end of file

Modified: trunk/Source/WebCore/ChangeLog (195684 => 195685)


--- trunk/Source/WebCore/ChangeLog	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/ChangeLog	2016-01-27 20:24:37 UTC (rev 195685)
@@ -1,3 +1,52 @@
+2016-01-27  Zhuo Li  <[email protected]>
+
+        Need ability to specify alternate image for AutoFill button in input fields.
+        https://bugs.webkit.org/show_bug.cgi?id=153116.
+        rdar://problem/23384854.
+
+        Reviewed by Darin Adler.
+
+        Add a new AutoFill button that can be shown in <input> elements.
+
+        Tests: fast/forms/auto-fill-button/input-contacts-auto-fill-button.html
+               fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html
+
+        * css/html.css:
+        (input::-webkit-contacts-auto-fill-button):
+        (input::-webkit-contacts-auto-fill-button:hover):
+        (input::-webkit-contacts-auto-fill-button:active):
+        Add default style rules for the Contacts AutoFill button based on the ones used for
+        Manual AutoFill button.
+
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::setShowAutoFillButton):
+        * html/HTMLInputElement.h:
+        (WebCore::HTMLInputElement::autoFillButtonType):
+        - Replace the boolean parameter with a new parameter to specify the type of the AutoFill button.
+        - Declare a private variable to keep a record of the type of the current AutoFill
+        button.
+        (WebCore::HTMLInputElement::showAutoFillButton): Deleted.
+
+        * html/HTMLTextFormControlElement.h:
+        Declare enum for AutoFill button type.
+
+        * html/TextFieldInputType.cpp:
+        (WebCore::autoFillButtonTypeToAutoFillButtonPseudoClassName):
+        (WebCore::isAutoFillButtonTypeChanged):
+        (WebCore::TextFieldInputType::shouldDrawAutoFillButton): None means the AutoFill button is not
+        enabled.
+        (WebCore::TextFieldInputType::createAutoFillButton): Only create the AutoFill button
+        if the type is expected.
+        (WebCore::TextFieldInputType::updateAutoFillButton):
+        Handle the case where AutoFill button type changes in the text field.
+        * html/TextFieldInputType.h:
+
+        * testing/Internals.cpp:
+        (WebCore::stringToAutoFillButtonType): Convert the string to AutoFill button type.
+        (WebCore::Internals::setShowAutoFillButton): Add a new parameter to specify the type of the AutoFill button.
+        * testing/Internals.h: Ditto.
+        * testing/Internals.idl: Ditto.
+
 2016-01-26  Ryosuke Niwa  <[email protected]>
 
         Add Node.treeRoot

Modified: trunk/Source/WebCore/css/html.css (195684 => 195685)


--- trunk/Source/WebCore/css/html.css	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/css/html.css	2016-01-27 20:24:37 UTC (rev 195685)
@@ -549,7 +549,7 @@
     -webkit-user-select: none;
 }
 
-input::-webkit-auto-fill-button {
+input::-webkit-credentials-auto-fill-button {
     -webkit-mask-image: -webkit-image-set(url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAMCAYAAAC9QufkAAAAAXNSR0IB2cksfwAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAADyWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE1LTA0LTAzVDE2OjA2OjI1PC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNS0wNC0wM1QxNjowMzoxNjwveG1wOkNyZWF0
 ZURhdGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNTwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoz37ZdAAAA5ElEQVQoFY2RsQ5BQRBFd9EgEYXv8QlaEqVGpfUPao3oKXyEQiJI1ERESaGmwnPu2k2QJ2uS82Z2du7s7jyTJInBWnCABeygoXwM6kwN1GELFo7wgOo/4gmFEovzWzyMiTMUlyFYJQT4wlucGko8T90xZv0j/5EusVpCuLr8FPK6NraHPmT8Oks8gI2bKEEOZhAauEJf3PX5Eb4ImpEG2gni0NWJvwdFYRvuoIHeoOUa++56+wpSxb6myf4J6qG5VWCt1ckPvHsksf531HSiDJ1VV9n15eJfJ+YkvWcMF+jFZa+KJ554xIc+jempAAAAAElFTkSuQmCC") 1x, url("data:image/png;base64,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") 2x);
     -webkit-mask-size: 15px 12px;
     width: 15px;
@@ -561,14 +561,34 @@
     -webkit-user-select: none;
 }
 
-input::-webkit-auto-fill-button:hover {
+input::-webkit-credentials-auto-fill-button:hover {
     background-color: rgb(0, 122, 255);
 }
 
-input::-webkit-auto-fill-button:active {
+input::-webkit-credentials-auto-fill-button:active {
     background-color: rgb(0, 60, 219);
 }
 
+input::-webkit-contacts-auto-fill-button {
+    -webkit-mask-image: -webkit-image-set(url("data:image/png;base64,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
 1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMwNjcgNzkuMTU3NzQ3LCAyMDE1LzAzLzMwLTIzOjQwOjQyICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTYtMDEtMTNUMTc6MDk6NDQtMDg6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wMS0xM1QxNzoxMDo0MC0
 wODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDEtMTNUMTc6MTA6NDAtMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPkRpc3BsYXk8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjJjOGZlYmIwLTk3MTQtNDY5ZS1iNjQyLTAyNzY3NzVjZmQzYjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDoyYzhmZWJiMC05NzE0LTQ2OWUtYjY0Mi0wMjc2Nzc1Y2ZkM2I8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDoyYzhmZWJiMC05NzE0LTQ2OWUtYjY0Mi0wMjc2Nzc1Y2ZkM2I8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0
 OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjJjOGZlYmIwLTk3MTQtNDY5ZS1iNjQyLTAyNzY3NzVjZmQzYjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0wMS0xM1QxNzoxMDo0MC0wODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI4PC9leGlmOlBpeGVsWERpbWVuc
 2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI4PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC
 AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
 gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgI
 CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
 AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
 gICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
 CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
 AgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
 gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgC
 iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
 AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
 gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
 CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz63NHXRAAAAIGNIUk0AAG11AABzoAAA/N0AAINkAABw6AAA7GgAADA+AAAQkOTsmeoAAAJ+SURBVHjavJbPa9NgGMefLqOYZGTZWChlmxXyo6E4S6BQKNKuGTnLepTBPHnYxatehP0BPQ7PMsTl0ENPUrDYsk7UDj1IKelcurTDbjsUccWNJfX1JIxqm9e17oHn9D58Pzw/3ud9PQghwLVMJnM3m83eKxaL8bOzM0qSpFoqlcpomvZ6YWHhBEsEIeTqpmlSy8vLzwCgBQCo11mWra6trT3F0XINyOVydwRB2P4bqMdbGxsbqaGB8Xhcx4AhAEDhcDg3FHBvb2+CZdkqLnBmZuazaZrUIM0xtx4TBCHjDpXjOLdt2x4fFDMQSNP0D4Zh3uECKYr6SJLk+ZWBfr//59TUVBsXODs7+3V+fv7iykAAAJ/Pd4ILDAQCB0Pdw1KpJJAkWccdGoZhjN3d3bkrD8309HTb6/VewD8YTdOdoTaNpmmbuBmqqvrCTc+1h6qq5j0ezxFGckdLS0v5kezSZDL50i27RCKh42iN4fRFUZRPbjGRSKSMo4
 UFFEWx5hbD87w5sufJMAyG5/mdfuUMBALvq9UqO7KSSpL0fWVlZbPf+erq6nNZlr+NrKQAAMfHx/5+Z51OZwJXBxtYq9WEfmeGYQSxN4NbzS3L8m5tbS0OehcnJycNXdfjOD309H6iWq3WWKFQWCwWi4lKpRKyLOtWs9mM4Fx8SZJqgiB8CQaDRjQa/RCLxd7+8Xr8Jh8eHo6n0+n7oVAoj7vK3Jzn+Z319fWHl38BgBCCcrk8pyjKq1GBel2W5TelUklACAHU6/Ubo8yqn4uiuL2/v08RHMc90HX9Efxna7fbNzmOOyBs237SaDRCcA3mOM4F0e12H5+envqvA9jtds9/DQCsPB1nqFm3ggAAAABJRU5ErkJggg==") 1x, url("data:image/png;base64,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
 aqpmo7c3vp9sc7Una0fu/1fe1Og52VOz/tEu3q2p2w+0ytZ23tHsM9y+rIOlldz95Jezt+CP2hcZ/Dvm37dfdXHsAB2YHffsz88frB6IMth7wO7TtseXjjEa0jFfVE/Yz6vobchq7G9MbOo+OPtjT5Nh35yfGnXcdMj1Uf1zm+7ITSiYUnBk+WnexvFjf3nso59ahlasud02mnr56ZeKb9bPTZcz+H/3y6Naj15Dm/c8fO+5w/esHrQsNFj4v1be5tR35x/+VIu0d7/SXPS40d3h1NneM6T1wOuHzqSuiVn69GXb14LfZa5/Xk6zdvTLrRdZN/8+mtglsvbpfeHrgz7y7jbsU99XtV9w3v1/zH9j/7uzy6jj8IfdD2MPHhnUe8R89+Lfn1Y/fCxyqPq56YPKl96vL0WE94T8dvX/3W/Uz8bKC3/HeN3zc+t3l++I/AP9r60vq6X0heDL5c8kr/1a7Xbq9b+uP7778pfDPwtuKd/rvd773et35I/fBkYNpH1sd1n2w/NX2O/nx3sHBwUMyVcAEAFAAyOxt4uQtQSQe0OgAlVfn+BQAg5DsjIP8H+Xcs39EAAB7ArkAgeR4Q0wxsbgYs5wHsZiAeQFIgSFfXkWPISrJdXeS52BKA8W5w8JURwGoCPkkGBwc2DQ5+2gFQt4DmYvneBwBMdWCrPgC03VD/x/71XyvrbEVyL+sZAAA4mWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMwNjcgNzkuMTU3NzQ3LCAyMDE1LzAzLzMwLTIzOjQwOjQyICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczp
 yZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTYtMDEtMTNUMTc6MDk6NDAtMDg6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wMS0xM1QxNzoxMToxOS0wODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDEtMTNUMTc6MTE6MTktMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRv
 YmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPkRpc3BsYXk8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjYwYTIyOTY0LTI2OWQtNDYzMC1iOGRmLWMxMmJiMTQzM2E4NTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo2MGEyMjk2NC0yNjlkLTQ2MzAtYjhkZi1jMTJiYjE0MzNhODU8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo2MGEyMjk2NC0yNjlkLTQ2MzAtYjhkZi1jMTJiYjE0MzNhODU8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjYwYTIyOTY0LTI2OWQtNDYzMC1iOGRmLWMxMmJiMTQzM2E4NTwvc3RFdnQ6aW5zdGFuY
 2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0wMS0xM1QxNzoxMToxOS0wODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MTQ0MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0MDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NTY8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgIC
 AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
 gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgI
 CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
 AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
 gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
 CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
 AgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICA
 gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
 CAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC
 AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
 gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgI
 CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
 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") 2x);
+    -webkit-mask-size: 15px 12px;
+    width: 15px;
+    height: 12px;
+    margin-left: 3px;
+    margin-right: 2px;
+    background-color: black;
+    flex: none;
+    -webkit-user-select: none;
+}
+
+input::-webkit-contacts-auto-fill-button:hover {
+    background-color: rgb(0, 122, 255);
+}
+
+input::-webkit-contacts-auto-fill-button:active {
+    background-color: rgb(0, 60, 219);
+}
+
 input::-webkit-caps-lock-indicator {
     -webkit-appearance: caps-lock-indicator;
     content: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="17" height="17"><path fill="black" fill-opacity="0.4" d="M12.5 0.5A 4 4 0 0 1 16.5 4.5L 16.5 12.5A 4 4 0 0 1 12.5 16.5L 4.5 16.5A 4 4 0 0 1 0.5 12.5L 0.5 4.5A 4 4 0 0 1 4.5 0.5L 12.5 0.5M 8.5 2L 4 7L 6.25 7L 6.25 10.25L 10.75 10.25L 10.75 7L 13 7L 8.5 2M 10.75 12L 6.25 12L 6.25 14.25L 10.75 14.25L 10.75 12"/></svg>');

Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (195684 => 195685)


--- trunk/Source/WebCore/html/HTMLInputElement.cpp	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp	2016-01-27 20:24:37 UTC (rev 195685)
@@ -105,7 +105,7 @@
     , m_isActivatedSubmit(false)
     , m_autocomplete(Uninitialized)
     , m_isAutoFilled(false)
-    , m_showAutoFillButton(false)
+    , m_autoFillButtonType(static_cast<uint8_t>(AutoFillButtonType::None))
 #if ENABLE(DATALIST_ELEMENT)
     , m_hasNonEmptyList(false)
 #endif
@@ -1300,12 +1300,12 @@
     setNeedsStyleRecalc();
 }
 
-void HTMLInputElement::setShowAutoFillButton(bool showAutoFillButton)
+void HTMLInputElement::setShowAutoFillButton(AutoFillButtonType autoFillButtonType)
 {
-    if (showAutoFillButton == m_showAutoFillButton)
+    if (static_cast<uint8_t>(autoFillButtonType) == m_autoFillButtonType)
         return;
 
-    m_showAutoFillButton = showAutoFillButton;
+    m_autoFillButtonType = static_cast<uint8_t>(autoFillButtonType);
     m_inputType->updateAutoFillButton();
 }
 

Modified: trunk/Source/WebCore/html/HTMLInputElement.h (195684 => 195685)


--- trunk/Source/WebCore/html/HTMLInputElement.h	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/html/HTMLInputElement.h	2016-01-27 20:24:37 UTC (rev 195685)
@@ -237,8 +237,8 @@
     bool isAutoFilled() const { return m_isAutoFilled; }
     WEBCORE_EXPORT void setAutoFilled(bool = true);
 
-    bool showAutoFillButton() const { return m_showAutoFillButton; }
-    WEBCORE_EXPORT void setShowAutoFillButton(bool);
+    AutoFillButtonType autoFillButtonType() const { return (AutoFillButtonType)m_autoFillButtonType; }
+    WEBCORE_EXPORT void setShowAutoFillButton(AutoFillButtonType);
 
     FileList* files();
     void setFiles(PassRefPtr<FileList>);
@@ -431,7 +431,7 @@
     bool m_isActivatedSubmit : 1;
     unsigned m_autocomplete : 2; // AutoCompleteSetting
     bool m_isAutoFilled : 1;
-    bool m_showAutoFillButton : 1;
+    unsigned m_autoFillButtonType : 2; // AutoFillButtonType;
 #if ENABLE(DATALIST_ELEMENT)
     bool m_hasNonEmptyList : 1;
 #endif

Modified: trunk/Source/WebCore/html/HTMLTextFormControlElement.h (195684 => 195685)


--- trunk/Source/WebCore/html/HTMLTextFormControlElement.h	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/html/HTMLTextFormControlElement.h	2016-01-27 20:24:37 UTC (rev 195685)
@@ -34,6 +34,7 @@
 class TextControlInnerTextElement;
 class VisiblePosition;
 
+enum class AutoFillButtonType : uint8_t { None, Credentials, Contacts };
 enum TextFieldSelectionDirection { SelectionHasNoDirection, SelectionHasForwardDirection, SelectionHasBackwardDirection };
 enum TextFieldEventBehavior { DispatchNoEvent, DispatchChangeEvent, DispatchInputAndChangeEvent };
 

Modified: trunk/Source/WebCore/html/TextFieldInputType.cpp (195684 => 195685)


--- trunk/Source/WebCore/html/TextFieldInputType.cpp	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/html/TextFieldInputType.cpp	2016-01-27 20:24:37 UTC (rev 195685)
@@ -399,6 +399,35 @@
     return string.left(newLength);
 }
 
+static AtomicString autoFillButtonTypeToAutoFillButtonPseudoClassName(AutoFillButtonType autoFillButtonType)
+{
+    AtomicString pseudoClassName;
+    switch (autoFillButtonType) {
+    case AutoFillButtonType::Contacts:
+        pseudoClassName = AtomicString("-webkit-contacts-auto-fill-button", AtomicString::ConstructFromLiteral);
+        break;
+    case AutoFillButtonType::Credentials:
+        pseudoClassName = AtomicString("-webkit-credentials-auto-fill-button", AtomicString::ConstructFromLiteral);
+        break;
+    case AutoFillButtonType::None:
+        ASSERT_NOT_REACHED();
+        break;
+    }
+
+    return pseudoClassName;
+}
+
+static bool isAutoFillButtonTypeChanged(const AtomicString& attribute, AutoFillButtonType autoFillButtonType)
+{
+    if (attribute == "-webkit-contacts-auto-fill-button" && autoFillButtonType != AutoFillButtonType::Contacts)
+        return true;
+
+    if (attribute == "-webkit-credentials-auto-fill-button" && autoFillButtonType != AutoFillButtonType::Credentials)
+        return true;
+
+    return false;
+}
+
 String TextFieldInputType::sanitizeValue(const String& proposedValue) const
 {
     return limitLength(proposedValue.removeCharacters(isASCIILineBreak), HTMLInputElement::maximumLength);
@@ -587,7 +616,7 @@
 
 bool TextFieldInputType::shouldDrawAutoFillButton() const
 {
-    return !element().isDisabledOrReadOnly() && element().showAutoFillButton();
+    return !element().isDisabledOrReadOnly() && element().autoFillButtonType() != AutoFillButtonType::None;
 }
 
 void TextFieldInputType::autoFillButtonElementWasClicked()
@@ -613,12 +642,15 @@
     element().userAgentShadowRoot()->appendChild(*m_container, IGNORE_EXCEPTION);
 }
 
-void TextFieldInputType::createAutoFillButton()
+void TextFieldInputType::createAutoFillButton(AutoFillButtonType autoFillButtonType)
 {
     ASSERT(!m_autoFillButton);
 
+    if (autoFillButtonType == AutoFillButtonType::None)
+        return;
+
     m_autoFillButton = AutoFillButtonElement::create(element().document(), *this);
-    m_autoFillButton->setPseudo(AtomicString("-webkit-auto-fill-button", AtomicString::ConstructFromLiteral));
+    m_autoFillButton->setPseudo(autoFillButtonTypeToAutoFillButtonPseudoClassName(autoFillButtonType));
     m_container->appendChild(*m_autoFillButton, IGNORE_EXCEPTION);
 }
 
@@ -629,8 +661,13 @@
             createContainer();
 
         if (!m_autoFillButton)
-            createAutoFillButton();
+            createAutoFillButton(element().autoFillButtonType());
 
+        const AtomicString& attribute = m_autoFillButton->fastGetAttribute(pseudoAttr);
+        bool shouldUpdateAutoFillButtonType = isAutoFillButtonTypeChanged(attribute, element().autoFillButtonType());
+        if (shouldUpdateAutoFillButtonType)
+            m_autoFillButton->setPseudo(autoFillButtonTypeToAutoFillButtonPseudoClassName(element().autoFillButtonType()));
+
         m_autoFillButton->setInlineStyleProperty(CSSPropertyDisplay, CSSValueBlock, true);
         return;
     }

Modified: trunk/Source/WebCore/html/TextFieldInputType.h (195684 => 195685)


--- trunk/Source/WebCore/html/TextFieldInputType.h	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/html/TextFieldInputType.h	2016-01-27 20:24:37 UTC (rev 195685)
@@ -108,7 +108,7 @@
     bool shouldDrawAutoFillButton() const;
 
     void createContainer();
-    void createAutoFillButton();
+    void createAutoFillButton(AutoFillButtonType);
 
     RefPtr<HTMLElement> m_container;
     RefPtr<HTMLElement> m_innerBlock;

Modified: trunk/Source/WebCore/testing/Internals.cpp (195684 => 195685)


--- trunk/Source/WebCore/testing/Internals.cpp	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/testing/Internals.cpp	2016-01-27 20:24:37 UTC (rev 195685)
@@ -1278,8 +1278,20 @@
     downcast<HTMLInputElement>(*element).setAutoFilled(enabled);
 }
 
-void Internals::setShowAutoFillButton(Element* element, bool show, ExceptionCode& ec)
+static AutoFillButtonType stringToAutoFillButtonType(const String& autoFillButtonType)
 {
+    if (autoFillButtonType == "AutoFillButtonTypeNone")
+        return AutoFillButtonType::None;
+    if (autoFillButtonType == "AutoFillButtonTypeCredentials")
+        return AutoFillButtonType::Credentials;
+    if (autoFillButtonType == "AutoFillButtonTypeContacts")
+        return AutoFillButtonType::Contacts;
+    ASSERT_NOT_REACHED();
+    return AutoFillButtonType::None;
+}
+
+void Internals::setShowAutoFillButton(Element* element, const String& autoFillButtonType, ExceptionCode& ec)
+{
     if (!element) {
         ec = INVALID_ACCESS_ERR;
         return;
@@ -1290,7 +1302,7 @@
         return;
     }
 
-    downcast<HTMLInputElement>(*element).setShowAutoFillButton(show);
+    downcast<HTMLInputElement>(*element).setShowAutoFillButton(stringToAutoFillButtonType(autoFillButtonType));
 }
 
 

Modified: trunk/Source/WebCore/testing/Internals.h (195684 => 195685)


--- trunk/Source/WebCore/testing/Internals.h	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/testing/Internals.h	2016-01-27 20:24:37 UTC (rev 195685)
@@ -177,7 +177,7 @@
     bool elementShouldAutoComplete(Element* inputElement, ExceptionCode&);
     void setEditingValue(Element* inputElement, const String&, ExceptionCode&);
     void setAutofilled(Element*, bool enabled, ExceptionCode&);
-    void setShowAutoFillButton(Element*, bool enabled, ExceptionCode&);
+    void setShowAutoFillButton(Element*, const String& autoFillButtonType, ExceptionCode&);
     void scrollElementToRect(Element*, long x, long y, long w, long h, ExceptionCode&);
 
     void paintControlTints(ExceptionCode&);

Modified: trunk/Source/WebCore/testing/Internals.idl (195684 => 195685)


--- trunk/Source/WebCore/testing/Internals.idl	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/testing/Internals.idl	2016-01-27 20:24:37 UTC (rev 195685)
@@ -57,6 +57,12 @@
     "previous-track"
 };
 
+enum AutoFillButtonType {
+    "AutoFillButtonTypeNone",
+    "AutoFillButtonTypeContacts",
+    "AutoFillButtonTypeCredentials"
+};
+
 [
     NoInterfaceObject,
 ] interface Internals {
@@ -151,7 +157,7 @@
     [RaisesException] boolean elementShouldAutoComplete(Element inputElement);
     [RaisesException] void setEditingValue(Element inputElement, DOMString value);
     [RaisesException] void setAutofilled(Element inputElement, boolean enabled);
-    [RaisesException] void setShowAutoFillButton(Element inputElement, boolean enabled);
+    [RaisesException] void setShowAutoFillButton(Element inputElement, AutoFillButtonType autoFillButtonType);
     [RaisesException] unsigned long countMatchesForText(DOMString text, unsigned long findOptions, DOMString markMatches);
 
     [RaisesException] void paintControlTints();

Modified: trunk/Source/WebKit2/ChangeLog (195684 => 195685)


--- trunk/Source/WebKit2/ChangeLog	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebKit2/ChangeLog	2016-01-27 20:24:37 UTC (rev 195685)
@@ -1,3 +1,24 @@
+2016-01-27  Zhuo Li  <[email protected]>
+
+        Need ability to specify alternate image for AutoFill button in input fields.
+        https://bugs.webkit.org/show_bug.cgi?id=153116.
+        rdar://problem/23384854.
+
+        Reviewed by Darin Adler.
+
+        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
+        (toAutoFillButtonType): Convert the WebKit AutoFill button type enum to WebCore AutoFill button
+        type enum.
+        (WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType): Added to be able to specify
+        what the AutoFill button type is. None means the AutoFill button is not shown.
+        (WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled): Deprecate this method.
+        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h: Declare an AutoFill button type enum.
+        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
+        (WebKit::InjectedBundleNodeHandle::isHTMLInputElementAutoFillButtonEnabled): None means the AutoFill button is not enabled.
+        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementAutoFillButtonEnabledWithButtonType): Use the new parameter to specify
+        what the AutoFill button type is.
+        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h: Ditto.
+
 2016-01-27  Dan Bernstein  <[email protected]>
 
         More trying to fix the build.

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp (195684 => 195685)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp	2016-01-27 20:24:37 UTC (rev 195685)
@@ -33,9 +33,24 @@
 #include "WKBundleAPICast.h"
 #include "WebFrame.h"
 #include "WebImage.h"
+#include <WebCore/HTMLTextFormControlElement.h>
 
 using namespace WebKit;
 
+static WebCore::AutoFillButtonType toAutoFillButtonType(WKAutoFillButtonType wkAutoFillButtonType)
+{
+    switch (wkAutoFillButtonType) {
+    case kWKAutoFillButtonTypeNone:
+        return WebCore::AutoFillButtonType::None;
+    case kWKAutoFillButtonTypeContacts:
+        return WebCore::AutoFillButtonType::Contacts;
+    case kWKAutoFillButtonTypeCredentials:
+        return WebCore::AutoFillButtonType::Credentials;
+    }
+    ASSERT_NOT_REACHED();
+    return WebCore::AutoFillButtonType::None;
+}
+
 WKTypeID WKBundleNodeHandleGetTypeID()
 {
     return toAPI(InjectedBundleNodeHandle::APIType);
@@ -95,9 +110,9 @@
     return toImpl(htmlInputElementHandleRef)->isHTMLInputElementAutoFillButtonEnabled();
 }
 
-void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandleRef, bool enabled)
+void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType(WKBundleNodeHandleRef htmlInputElementHandleRef, WKAutoFillButtonType autoFillButtonType)
 {
-    toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFillButtonEnabled(enabled);
+    toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFillButtonEnabled(toAutoFillButtonType(autoFillButtonType));
 }
 
 WKRect WKBundleNodeHandleGetHTMLInputElementAutoFillButtonBounds(WKBundleNodeHandleRef htmlInputElementHandleRef)
@@ -150,3 +165,11 @@
 {
     toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFilled(filled);
 }
+
+// Deprecated - use WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType(WKBundleNodeHandleRef, WKAutoFillButtonType).
+void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandleRef, bool enabled)
+{
+    WebCore::AutoFillButtonType autoFillButtonType = enabled ? WebCore::AutoFillButtonType::Credentials : WebCore::AutoFillButtonType::None;
+
+    toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFillButtonEnabled(autoFillButtonType);
+}

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h (195684 => 195685)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h	2016-01-27 20:24:37 UTC (rev 195685)
@@ -35,6 +35,13 @@
 extern "C" {
 #endif
 
+enum {
+    kWKAutoFillButtonTypeNone,
+    kWKAutoFillButtonTypeCredentials,
+    kWKAutoFillButtonTypeContacts
+};
+typedef uint8_t WKAutoFillButtonType;
+
 WK_EXPORT WKBundleNodeHandleRef WKBundleNodeHandleCreate(JSContextRef context, JSObjectRef object);
 
 /* Convenience Operations */
@@ -55,7 +62,7 @@
 WK_EXPORT bool WKBundleNodeHandleGetHTMLInputElementAutoFilled(WKBundleNodeHandleRef htmlInputElementHandle);
 WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutoFilled(WKBundleNodeHandleRef htmlInputElementHandle, bool filled);
 WK_EXPORT bool WKBundleNodeHandleGetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandle);
-WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandle, bool enabled);
+WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType(WKBundleNodeHandleRef htmlInputElementHandle, WKAutoFillButtonType autoFillButtonType);
 WK_EXPORT WKRect WKBundleNodeHandleGetHTMLInputElementAutoFillButtonBounds(WKBundleNodeHandleRef htmlInputElementHandle);
 WK_EXPORT bool WKBundleNodeHandleGetHTMLInputElementLastChangeWasUserEdit(WKBundleNodeHandleRef htmlInputElementHandle);
 
@@ -79,6 +86,8 @@
 WK_EXPORT bool WKBundleNodeHandleGetHTMLInputElementAutofilled(WKBundleNodeHandleRef htmlInputElementHandle);
 /* Deprecated - use WKBundleNodeHandleSetHTMLInputElementAutoFilled(WKBundleNodeHandleRef, bool) */
 WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutofilled(WKBundleNodeHandleRef htmlInputElementHandle, bool filled);
+/* Deprecated - use WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef, WKAutoFillButtonType)*/
+WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandle, bool enabled);
 
 #ifdef __cplusplus
 }

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp (195684 => 195685)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp	2016-01-27 20:24:37 UTC (rev 195685)
@@ -231,15 +231,15 @@
     if (!is<HTMLInputElement>(m_node))
         return false;
     
-    return downcast<HTMLInputElement>(m_node.get()).showAutoFillButton();
+    return downcast<HTMLInputElement>(m_node.get()).autoFillButtonType() != AutoFillButtonType::None;
 }
 
-void InjectedBundleNodeHandle::setHTMLInputElementAutoFillButtonEnabled(bool filled)
+void InjectedBundleNodeHandle::setHTMLInputElementAutoFillButtonEnabled(AutoFillButtonType autoFillButtonType)
 {
     if (!is<HTMLInputElement>(m_node))
         return;
 
-    downcast<HTMLInputElement>(m_node.get()).setShowAutoFillButton(filled);
+    downcast<HTMLInputElement>(m_node.get()).setShowAutoFillButton(autoFillButtonType);
 }
 
 IntRect InjectedBundleNodeHandle::htmlInputElementAutoFillButtonBounds()

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h (195684 => 195685)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h	2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h	2016-01-27 20:24:37 UTC (rev 195685)
@@ -36,6 +36,7 @@
 namespace WebCore {
     class IntRect;
     class Node;
+    enum class AutoFillButtonType : uint8_t;
 }
 
 namespace WebKit {
@@ -68,7 +69,7 @@
     bool isHTMLInputElementAutoFilled() const;
     void setHTMLInputElementAutoFilled(bool);
     bool isHTMLInputElementAutoFillButtonEnabled() const;
-    void setHTMLInputElementAutoFillButtonEnabled(bool);
+    void setHTMLInputElementAutoFillButtonEnabled(WebCore::AutoFillButtonType);
     WebCore::IntRect htmlInputElementAutoFillButtonBounds();
     bool htmlInputElementLastChangeWasUserEdit();
     bool htmlTextAreaElementLastChangeWasUserEdit();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to