Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: appengine/swarming/elements/build/elements.html

Issue 2279303003: Add link to new ui and feedback button (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-py@master
Patch Set: use px Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | appengine/swarming/elements/res/imp/common/swarming-app.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <!DOCTYPE html><html><head><!-- 1 <!DOCTYPE html><html><head><!--
2 @license 2 @license
3 Copyright (c) 2016 The Polymer Project Authors. All rights reserved. 3 Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
4 This code may only be used under the BSD style license found at http://polymer.g ithub.io/LICENSE.txt 4 This code may only be used under the BSD style license found at http://polymer.g ithub.io/LICENSE.txt
5 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 5 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
6 The complete set of contributors may be found at http://polymer.github.io/CONTRI BUTORS.txt 6 The complete set of contributors may be found at http://polymer.github.io/CONTRI BUTORS.txt
7 Code distributed by Google as part of the polymer project is also 7 Code distributed by Google as part of the polymer project is also
8 subject to an additional IP rights grant found at http://polymer.github.io/PATEN TS.txt 8 subject to an additional IP rights grant found at http://polymer.github.io/PATEN TS.txt
9 --><!-- 9 --><!--
10 @license 10 @license
(...skipping 11609 matching lines...) Expand 10 before | Expand all | Expand 10 after
11620 } 11620 }
11621 11621
11622 .fixed-left { 11622 .fixed-left {
11623 top: 0; 11623 top: 0;
11624 bottom: 0; 11624 bottom: 0;
11625 left: 0; 11625 left: 0;
11626 } 11626 }
11627 </style> 11627 </style>
11628 </template> 11628 </template>
11629 </dom-module> 11629 </dom-module>
11630
11631
11632 <script>
11633
11634 (function() {
11635
11636 // monostate data
11637 var metaDatas = {};
11638 var metaArrays = {};
11639 var singleton = null;
11640
11641 Polymer.IronMeta = Polymer({
11642
11643 is: 'iron-meta',
11644
11645 properties: {
11646
11647 /**
11648 * The type of meta-data. All meta-data of the same type is stored
11649 * together.
11650 */
11651 type: {
11652 type: String,
11653 value: 'default',
11654 observer: '_typeChanged'
11655 },
11656
11657 /**
11658 * The key used to store `value` under the `type` namespace.
11659 */
11660 key: {
11661 type: String,
11662 observer: '_keyChanged'
11663 },
11664
11665 /**
11666 * The meta-data to store or retrieve.
11667 */
11668 value: {
11669 type: Object,
11670 notify: true,
11671 observer: '_valueChanged'
11672 },
11673
11674 /**
11675 * If true, `value` is set to the iron-meta instance itself.
11676 */
11677 self: {
11678 type: Boolean,
11679 observer: '_selfChanged'
11680 },
11681
11682 /**
11683 * Array of all meta-data values for the given type.
11684 */
11685 list: {
11686 type: Array,
11687 notify: true
11688 }
11689
11690 },
11691
11692 hostAttributes: {
11693 hidden: true
11694 },
11695
11696 /**
11697 * Only runs if someone invokes the factory/constructor directly
11698 * e.g. `new Polymer.IronMeta()`
11699 *
11700 * @param {{type: (string|undefined), key: (string|undefined), value}=} co nfig
11701 */
11702 factoryImpl: function(config) {
11703 if (config) {
11704 for (var n in config) {
11705 switch(n) {
11706 case 'type':
11707 case 'key':
11708 case 'value':
11709 this[n] = config[n];
11710 break;
11711 }
11712 }
11713 }
11714 },
11715
11716 created: function() {
11717 // TODO(sjmiles): good for debugging?
11718 this._metaDatas = metaDatas;
11719 this._metaArrays = metaArrays;
11720 },
11721
11722 _keyChanged: function(key, old) {
11723 this._resetRegistration(old);
11724 },
11725
11726 _valueChanged: function(value) {
11727 this._resetRegistration(this.key);
11728 },
11729
11730 _selfChanged: function(self) {
11731 if (self) {
11732 this.value = this;
11733 }
11734 },
11735
11736 _typeChanged: function(type) {
11737 this._unregisterKey(this.key);
11738 if (!metaDatas[type]) {
11739 metaDatas[type] = {};
11740 }
11741 this._metaData = metaDatas[type];
11742 if (!metaArrays[type]) {
11743 metaArrays[type] = [];
11744 }
11745 this.list = metaArrays[type];
11746 this._registerKeyValue(this.key, this.value);
11747 },
11748
11749 /**
11750 * Retrieves meta data value by key.
11751 *
11752 * @method byKey
11753 * @param {string} key The key of the meta-data to be returned.
11754 * @return {*}
11755 */
11756 byKey: function(key) {
11757 return this._metaData && this._metaData[key];
11758 },
11759
11760 _resetRegistration: function(oldKey) {
11761 this._unregisterKey(oldKey);
11762 this._registerKeyValue(this.key, this.value);
11763 },
11764
11765 _unregisterKey: function(key) {
11766 this._unregister(key, this._metaData, this.list);
11767 },
11768
11769 _registerKeyValue: function(key, value) {
11770 this._register(key, value, this._metaData, this.list);
11771 },
11772
11773 _register: function(key, value, data, list) {
11774 if (key && data && value !== undefined) {
11775 data[key] = value;
11776 list.push(value);
11777 }
11778 },
11779
11780 _unregister: function(key, data, list) {
11781 if (key && data) {
11782 if (key in data) {
11783 var value = data[key];
11784 delete data[key];
11785 this.arrayDelete(list, value);
11786 }
11787 }
11788 }
11789
11790 });
11791
11792 Polymer.IronMeta.getIronMeta = function getIronMeta() {
11793 if (singleton === null) {
11794 singleton = new Polymer.IronMeta();
11795 }
11796 return singleton;
11797 };
11798
11799 /**
11800 `iron-meta-query` can be used to access infomation stored in `iron-meta`.
11801
11802 Examples:
11803
11804 If I create an instance like this:
11805
11806 <iron-meta key="info" value="foo/bar"></iron-meta>
11807
11808 Note that value="foo/bar" is the metadata I've defined. I could define more
11809 attributes or use child nodes to define additional metadata.
11810
11811 Now I can access that element (and it's metadata) from any `iron-meta-query` instance:
11812
11813 var value = new Polymer.IronMetaQuery({key: 'info'}).value;
11814
11815 @group Polymer Iron Elements
11816 @element iron-meta-query
11817 */
11818 Polymer.IronMetaQuery = Polymer({
11819
11820 is: 'iron-meta-query',
11821
11822 properties: {
11823
11824 /**
11825 * The type of meta-data. All meta-data of the same type is stored
11826 * together.
11827 */
11828 type: {
11829 type: String,
11830 value: 'default',
11831 observer: '_typeChanged'
11832 },
11833
11834 /**
11835 * Specifies a key to use for retrieving `value` from the `type`
11836 * namespace.
11837 */
11838 key: {
11839 type: String,
11840 observer: '_keyChanged'
11841 },
11842
11843 /**
11844 * The meta-data to store or retrieve.
11845 */
11846 value: {
11847 type: Object,
11848 notify: true,
11849 readOnly: true
11850 },
11851
11852 /**
11853 * Array of all meta-data values for the given type.
11854 */
11855 list: {
11856 type: Array,
11857 notify: true
11858 }
11859
11860 },
11861
11862 /**
11863 * Actually a factory method, not a true constructor. Only runs if
11864 * someone invokes it directly (via `new Polymer.IronMeta()`);
11865 *
11866 * @param {{type: (string|undefined), key: (string|undefined)}=} config
11867 */
11868 factoryImpl: function(config) {
11869 if (config) {
11870 for (var n in config) {
11871 switch(n) {
11872 case 'type':
11873 case 'key':
11874 this[n] = config[n];
11875 break;
11876 }
11877 }
11878 }
11879 },
11880
11881 created: function() {
11882 // TODO(sjmiles): good for debugging?
11883 this._metaDatas = metaDatas;
11884 this._metaArrays = metaArrays;
11885 },
11886
11887 _keyChanged: function(key) {
11888 this._setValue(this._metaData && this._metaData[key]);
11889 },
11890
11891 _typeChanged: function(type) {
11892 this._metaData = metaDatas[type];
11893 this.list = metaArrays[type];
11894 if (this.key) {
11895 this._keyChanged(this.key);
11896 }
11897 },
11898
11899 /**
11900 * Retrieves meta data value by key.
11901 * @param {string} key The key of the meta-data to be returned.
11902 * @return {*}
11903 */
11904 byKey: function(key) {
11905 return this._metaData && this._metaData[key];
11906 }
11907
11908 });
11909
11910 })();
11911 </script>
11912
11913
11914 <dom-module id="iron-icon" assetpath="/res/imp/bower_components/iron-icon/">
11915 <template>
11916 <style>
11917 :host {
11918 @apply(--layout-inline);
11919 @apply(--layout-center-center);
11920 position: relative;
11921
11922 vertical-align: middle;
11923
11924 fill: var(--iron-icon-fill-color, currentcolor);
11925 stroke: var(--iron-icon-stroke-color, none);
11926
11927 width: var(--iron-icon-width, 24px);
11928 height: var(--iron-icon-height, 24px);
11929 }
11930 </style>
11931 </template>
11932
11933 <script>
11934
11935 Polymer({
11936
11937 is: 'iron-icon',
11938
11939 properties: {
11940
11941 /**
11942 * The name of the icon to use. The name should be of the form:
11943 * `iconset_name:icon_name`.
11944 */
11945 icon: {
11946 type: String,
11947 observer: '_iconChanged'
11948 },
11949
11950 /**
11951 * The name of the theme to used, if one is specified by the
11952 * iconset.
11953 */
11954 theme: {
11955 type: String,
11956 observer: '_updateIcon'
11957 },
11958
11959 /**
11960 * If using iron-icon without an iconset, you can set the src to be
11961 * the URL of an individual icon image file. Note that this will take
11962 * precedence over a given icon attribute.
11963 */
11964 src: {
11965 type: String,
11966 observer: '_srcChanged'
11967 },
11968
11969 /**
11970 * @type {!Polymer.IronMeta}
11971 */
11972 _meta: {
11973 value: Polymer.Base.create('iron-meta', {type: 'iconset'}),
11974 observer: '_updateIcon'
11975 }
11976
11977 },
11978
11979 _DEFAULT_ICONSET: 'icons',
11980
11981 _iconChanged: function(icon) {
11982 var parts = (icon || '').split(':');
11983 this._iconName = parts.pop();
11984 this._iconsetName = parts.pop() || this._DEFAULT_ICONSET;
11985 this._updateIcon();
11986 },
11987
11988 _srcChanged: function(src) {
11989 this._updateIcon();
11990 },
11991
11992 _usesIconset: function() {
11993 return this.icon || !this.src;
11994 },
11995
11996 /** @suppress {visibility} */
11997 _updateIcon: function() {
11998 if (this._usesIconset()) {
11999 if (this._img && this._img.parentNode) {
12000 Polymer.dom(this.root).removeChild(this._img);
12001 }
12002 if (this._iconName === "") {
12003 if (this._iconset) {
12004 this._iconset.removeIcon(this);
12005 }
12006 } else if (this._iconsetName && this._meta) {
12007 this._iconset = /** @type {?Polymer.Iconset} */ (
12008 this._meta.byKey(this._iconsetName));
12009 if (this._iconset) {
12010 this._iconset.applyIcon(this, this._iconName, this.theme);
12011 this.unlisten(window, 'iron-iconset-added', '_updateIcon');
12012 } else {
12013 this.listen(window, 'iron-iconset-added', '_updateIcon');
12014 }
12015 }
12016 } else {
12017 if (this._iconset) {
12018 this._iconset.removeIcon(this);
12019 }
12020 if (!this._img) {
12021 this._img = document.createElement('img');
12022 this._img.style.width = '100%';
12023 this._img.style.height = '100%';
12024 this._img.draggable = false;
12025 }
12026 this._img.src = this.src;
12027 Polymer.dom(this.root).appendChild(this._img);
12028 }
12029 }
12030
12031 });
12032
12033 </script>
12034
12035 </dom-module>
12036 <script>
12037 /**
12038 * The `iron-iconset-svg` element allows users to define their own icon sets
12039 * that contain svg icons. The svg icon elements should be children of the
12040 * `iron-iconset-svg` element. Multiple icons should be given distinct id's.
12041 *
12042 * Using svg elements to create icons has a few advantages over traditional
12043 * bitmap graphics like jpg or png. Icons that use svg are vector based so
12044 * they are resolution independent and should look good on any device. They
12045 * are stylable via css. Icons can be themed, colorized, and even animated.
12046 *
12047 * Example:
12048 *
12049 * <iron-iconset-svg name="my-svg-icons" size="24">
12050 * <svg>
12051 * <defs>
12052 * <g id="shape">
12053 * <rect x="12" y="0" width="12" height="24" />
12054 * <circle cx="12" cy="12" r="12" />
12055 * </g>
12056 * </defs>
12057 * </svg>
12058 * </iron-iconset-svg>
12059 *
12060 * This will automatically register the icon set "my-svg-icons" to the iconset
12061 * database. To use these icons from within another element, make a
12062 * `iron-iconset` element and call the `byId` method
12063 * to retrieve a given iconset. To apply a particular icon inside an
12064 * element use the `applyIcon` method. For example:
12065 *
12066 * iconset.applyIcon(iconNode, 'car');
12067 *
12068 * @element iron-iconset-svg
12069 * @demo demo/index.html
12070 * @implements {Polymer.Iconset}
12071 */
12072 Polymer({
12073 is: 'iron-iconset-svg',
12074
12075 properties: {
12076
12077 /**
12078 * The name of the iconset.
12079 */
12080 name: {
12081 type: String,
12082 observer: '_nameChanged'
12083 },
12084
12085 /**
12086 * The size of an individual icon. Note that icons must be square.
12087 */
12088 size: {
12089 type: Number,
12090 value: 24
12091 }
12092
12093 },
12094
12095 attached: function() {
12096 this.style.display = 'none';
12097 },
12098
12099 /**
12100 * Construct an array of all icon names in this iconset.
12101 *
12102 * @return {!Array} Array of icon names.
12103 */
12104 getIconNames: function() {
12105 this._icons = this._createIconMap();
12106 return Object.keys(this._icons).map(function(n) {
12107 return this.name + ':' + n;
12108 }, this);
12109 },
12110
12111 /**
12112 * Applies an icon to the given element.
12113 *
12114 * An svg icon is prepended to the element's shadowRoot if it exists,
12115 * otherwise to the element itself.
12116 *
12117 * @method applyIcon
12118 * @param {Element} element Element to which the icon is applied.
12119 * @param {string} iconName Name of the icon to apply.
12120 * @return {?Element} The svg element which renders the icon.
12121 */
12122 applyIcon: function(element, iconName) {
12123 // insert svg element into shadow root, if it exists
12124 element = element.root || element;
12125 // Remove old svg element
12126 this.removeIcon(element);
12127 // install new svg element
12128 var svg = this._cloneIcon(iconName);
12129 if (svg) {
12130 var pde = Polymer.dom(element);
12131 pde.insertBefore(svg, pde.childNodes[0]);
12132 return element._svgIcon = svg;
12133 }
12134 return null;
12135 },
12136
12137 /**
12138 * Remove an icon from the given element by undoing the changes effected
12139 * by `applyIcon`.
12140 *
12141 * @param {Element} element The element from which the icon is removed.
12142 */
12143 removeIcon: function(element) {
12144 // Remove old svg element
12145 if (element._svgIcon) {
12146 Polymer.dom(element).removeChild(element._svgIcon);
12147 element._svgIcon = null;
12148 }
12149 },
12150
12151 /**
12152 *
12153 * When name is changed, register iconset metadata
12154 *
12155 */
12156 _nameChanged: function() {
12157 new Polymer.IronMeta({type: 'iconset', key: this.name, value: this});
12158 this.async(function() {
12159 this.fire('iron-iconset-added', this, {node: window});
12160 });
12161 },
12162
12163 /**
12164 * Create a map of child SVG elements by id.
12165 *
12166 * @return {!Object} Map of id's to SVG elements.
12167 */
12168 _createIconMap: function() {
12169 // Objects chained to Object.prototype (`{}`) have members. Specifically,
12170 // on FF there is a `watch` method that confuses the icon map, so we
12171 // need to use a null-based object here.
12172 var icons = Object.create(null);
12173 Polymer.dom(this).querySelectorAll('[id]')
12174 .forEach(function(icon) {
12175 icons[icon.id] = icon;
12176 });
12177 return icons;
12178 },
12179
12180 /**
12181 * Produce installable clone of the SVG element matching `id` in this
12182 * iconset, or `undefined` if there is no matching element.
12183 *
12184 * @return {Element} Returns an installable clone of the SVG element
12185 * matching `id`.
12186 */
12187 _cloneIcon: function(id) {
12188 // create the icon map on-demand, since the iconset itself has no discrete
12189 // signal to know when it's children are fully parsed
12190 this._icons = this._icons || this._createIconMap();
12191 return this._prepareSvgClone(this._icons[id], this.size);
12192 },
12193
12194 /**
12195 * @param {Element} sourceSvg
12196 * @param {number} size
12197 * @return {Element}
12198 */
12199 _prepareSvgClone: function(sourceSvg, size) {
12200 if (sourceSvg) {
12201 var content = sourceSvg.cloneNode(true),
12202 svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'),
12203 viewBox = content.getAttribute('viewBox') || '0 0 ' + size + ' ' + s ize;
12204 svg.setAttribute('viewBox', viewBox);
12205 svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');
12206 // TODO(dfreedm): `pointer-events: none` works around https://crbug.com/ 370136
12207 // TODO(sjmiles): inline style may not be ideal, but avoids requiring a shadow-root
12208 svg.style.cssText = 'pointer-events: none; display: block; width: 100%; height: 100%;';
12209 svg.appendChild(content).removeAttribute('id');
12210 return svg;
12211 }
12212 return null;
12213 }
12214
12215 });
12216 </script>
12217 <iron-iconset-svg name="icons" size="24">
12218 <svg><defs>
12219 <g id="3d-rotation"><path d="M7.52 21.48C4.25 19.94 1.91 16.76 1.55 13H.05C.56 1 9.16 5.71 24 12 24l.66-.03-3.81-3.81-1.33 1.32zm.89-6.52c-.19 0-.37-.03-.52-.08- .16-.06-.29-.13-.4-.24-.11-.1-.2-.22-.26-.37-.06-.14-.09-.3-.09-.47h-1.3c0 .36.0 7.68.21.95.14.27.33.5.56.69.24.18.51.32.82.41.3.1.62.15.96.15.37 0 .72-.05 1.03- .15.32-.1.6-.25.83-.44s.42-.43.55-.72c.13-.29.2-.61.2-.97 0-.19-.02-.38-.07-.56- .05-.18-.12-.35-.23-.51-.1-.16-.24-.3-.4-.43-.17-.13-.37-.23-.61-.31.2-.09.37-.2 .52-.33.15-.13.27-.27.37-.42.1-.15.17-.3.22-.46.05-.16.07-.32.07-.48 0-.36-.06-. 68-.18-.96-.12-.28-.29-.51-.51-.69-.2-.19-.47-.33-.77-.43C9.1 8.05 8.76 8 8.39 8 c-.36 0-.69.05-1 .16-.3.11-.57.26-.79.45-.21.19-.38.41-.51.67-.12.26-.18.54-.18. 85h1.3c0-.17.03-.32.09-.45s.14-.25.25-.34c.11-.09.23-.17.38-.22.15-.05.3-.08.48- .08.4 0 .7.1.89.31.19.2.29.49.29.86 0 .18-.03.34-.08.49-.05.15-.14.27-.25.37-.11 .1-.25.18-.41.24-.16.06-.36.09-.58.09H7.5v1.03h.77c.22 0 .42.02.6.07s.33.13.45.2 3c.12.11.22.24.29.4.07.16.1.35.1.57 0 .41-.12.72-.35.93-.23.23-.55.33-.95.33zm8. 55-5.92c-.32-.33-.7-.59-1.14-.77-.43-.18-.92-.27-1.46-.27H12v8h2.3c.55 0 1.06-.0 9 1.51-.27.45-.18.84-.43 1.16-.76.32-.33.57-.73.74-1.19.17-.47.26-.99.26-1.57v-. 4c0-.58-.09-1.1-.26-1.57-.18-.47-.43-.87-.75-1.2zm-.39 3.16c0 .42-.05.79-.14 1.1 3-.1.33-.24.62-.43.85-.19.23-.43.41-.71.53-.29.12-.62.18-.99.18h-.91V9.12h.97c.7 2 0 1.27.23 1.64.69.38.46.57 1.12.57 1.99v.4zM12 0l-.66.03 3.81 3.81 1.33-1.33c3 .27 1.55 5.61 4.72 5.96 8.48h1.5C23.44 4.84 18.29 0 12 0z"></path></g>
12220 <g id="accessibility"><path d="M12 2c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2z m9 7h-6v13h-2v-6h-2v6H9V9H3V7h18v2z"></path></g>
12221 <g id="accessible"><circle cx="12" cy="4" r="2"></circle><path d="M19 13v-2c-1.5 4.02-3.09-.75-4.07-1.83l-1.29-1.43c-.17-.19-.38-.34-.61-.45-.01 0-.01-.01-.02-.0 1H13c-.35-.2-.75-.3-1.19-.26C10.76 7.11 10 8.04 10 9.09V15c0 1.1.9 2 2 2h5v5h2v- 5.5c0-1.1-.9-2-2-2h-3v-3.45c1.29 1.07 3.25 1.94 5 1.95zm-6.17 5c-.41 1.16-1.52 2 -2.83 2-1.66 0-3-1.34-3-3 0-1.31.84-2.41 2-2.83V12.1c-2.28.46-4 2.48-4 4.9 0 2.7 6 2.24 5 5 5 2.42 0 4.44-1.72 4.9-4h-2.07z"></path></g>
12222 <g id="account-balance"><path d="M4 10v7h3v-7H4zm6 0v7h3v-7h-3zM2 22h19v-3H2v3zm 14-12v7h3v-7h-3zm-4.5-9L2 6v2h19V6l-9.5-5z"></path></g>
12223 <g id="account-balance-wallet"><path d="M21 18v1c0 1.1-.9 2-2 2H5c-1.11 0-2-.9-2 -2V5c0-1.1.89-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.11 0-2 .9-2 2v8c0 1.1.89 2 2 2h9zm -9-2h10V8H12v8zm4-2.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"></path></g>
12224 <g id="account-box"><path d="M3 5v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9 -2-2-2H5c-1.11 0-2 .9-2 2zm12 4c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3zm-9 8c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1H6v-1z"></path></g>
12225 <g id="account-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 1 0-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14 .2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1. 94-3.5 3.22-6 3.22z"></path></g>
12226 <g id="add"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path></g>
12227 <g id="add-alert"><path d="M10.01 21.01c0 1.1.89 1.99 1.99 1.99s1.99-.89 1.99-1. 99h-3.98zm8.87-4.19V11c0-3.25-2.25-5.97-5.29-6.69v-.72C13.59 2.71 12.88 2 12 2s- 1.59.71-1.59 1.59v.72C7.37 5.03 5.12 7.75 5.12 11v5.82L3 18.94V20h18v-1.06l-2.12 -2.12zM16 13.01h-3v3h-2v-3H8V11h3V8h2v3h3v2.01z"></path></g>
12228 <g id="add-box"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-. 9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"></path></g>
12229 <g id="add-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10 S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"></path></g>
12230 <g id="add-circle-outline"><path d="M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8 s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"></path></g>
12231 <g id="add-shopping-cart"><path d="M11 9h2V6h3V4h-3V1h-2v3H8v2h3v3zm-4 9c-1.1 0- 1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zm10 0c-1.1 0-1.99.9-1.99 2s.89 2 1.9 9 2 2-.9 2-2-.9-2-2-2zm-9.83-3.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3 .86-7.01L19.42 4h-.01l-1.1 2-2.76 5H8.53l-.13-.27L6.16 6l-.95-2-.94-2H1v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.13 0-.25-.11-.25 -.25z"></path></g>
12232 <g id="alarm"><path d="M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39L 6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3. 13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"></path></g>
12233 <g id="alarm-add"><path d="M7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM22 5. 72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7- 7 7zm1-11h-2v3H8v2h3v3h2v-3h3v-2h-3V9z"></path></g>
12234 <g id="alarm-off"><path d="M12 6c3.87 0 7 3.13 7 7 0 .84-.16 1.65-.43 2.4l1.52 1 .52c.58-1.19.91-2.51.91-3.92 0-4.97-4.03-9-9-9-1.41 0-2.73.33-3.92.91L9.6 6.43C1 0.35 6.16 11.16 6 12 6zm10-.28l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM2.92 2.29L1 .65 3.57 2.98 4.9l-1.11.93 1.42 1.42 1.11-.94.8.8C3.83 8.69 3 10.75 3 13c0 4.97 4.02 9 9 9 2.25 0 4.31-.83 5.89-2.2l2.2 2.2 1.27-1.27L3.89 3.27l-.97-.98zm13.55 16.1C15.26 19.39 13.7 20 12 20c-3.87 0-7-3.13-7-7 0-1.7.61-3.26 1.61-4.47l9.86 9 .86zM8.02 3.28L6.6 1.86l-.86.71 1.42 1.42.86-.71z"></path></g>
12235 <g id="alarm-on"><path d="M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3. 39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7zm-1.46-5.47L8.41 12.4l-1.06 1.06 3.18 3.18 6-6-1.06-1.06-4.93 4.95z"></path>< /g>
12236 <g id="all-out"><path d="M16.21 4.16l4 4v-4zm4 12l-4 4h4zm-12 4l-4-4v4zm-4-12l4- 4h-4zm12.95-.95c-2.73-2.73-7.17-2.73-9.9 0s-2.73 7.17 0 9.9 7.17 2.73 9.9 0 2.73 -7.16 0-9.9zm-1.1 8.8c-2.13 2.13-5.57 2.13-7.7 0s-2.13-5.57 0-7.7 5.57-2.13 7.7 0 2.13 5.57 0 7.7z"></path></g>
12237 <g id="android"><path d="M6 18c0 .55.45 1 1 1h1v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V19h2v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V19h1c.55 0 1-.45 1-1V8H6v 10zM3.5 8C2.67 8 2 8.67 2 9.5v7c0 .83.67 1.5 1.5 1.5S5 17.33 5 16.5v-7C5 8.67 4. 33 8 3.5 8zm17 0c-.83 0-1.5.67-1.5 1.5v7c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-7 c0-.83-.67-1.5-1.5-1.5zm-4.97-5.84l1.3-1.3c.2-.2.2-.51 0-.71-.2-.2-.51-.2-.71 0l -1.48 1.48C13.85 1.23 12.95 1 12 1c-.96 0-1.86.23-2.66.63L7.85.15c-.2-.2-.51-.2- .71 0-.2.2-.2.51 0 .71l1.31 1.31C6.97 3.26 6 5.01 6 7h12c0-1.99-.97-3.75-2.47-4. 84zM10 5H9V4h1v1zm5 0h-1V4h1v1z"></path></g>
12238 <g id="announcement"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-. 9 2-2V4c0-1.1-.9-2-2-2zm-7 9h-2V5h2v6zm0 4h-2v-2h2v2z"></path></g>
12239 <g id="apps"><path d="M4 8h4V4H4v4zm6 12h4v-4h-4v4zm-6 0h4v-4H4v4zm0-6h4v-4H4v4z m6 0h4v-4h-4v4zm6-10v4h4V4h-4zm-6 4h4V4h-4v4zm6 6h4v-4h-4v4zm0 6h4v-4h-4v4z"></p ath></g>
12240 <g id="archive"><path d="M20.54 5.23l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0 -.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5L6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81 -1h12l.94 1H5.12z"></path></g>
12241 <g id="arrow-back"><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 1 3H20v-2z"></path></g>
12242 <g id="arrow-downward"><path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59 L4 12l8 8 8-8z"></path></g>
12243 <g id="arrow-drop-down"><path d="M7 10l5 5 5-5z"></path></g>
12244 <g id="arrow-drop-down-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 1 0-4.48 10-10S17.52 2 12 2zm0 12l-4-4h8l-4 4z"></path></g>
12245 <g id="arrow-drop-up"><path d="M7 14l5-5 5 5z"></path></g>
12246 <g id="arrow-forward"><path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"></path></g>
12247 <g id="arrow-upward"><path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l -8-8-8 8z"></path></g>
12248 <g id="aspect-ratio"><path d="M19 12h-2v3h-3v2h5v-5zM7 9h3V7H5v5h2V9zm14-6H3c-1. 1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99 h18v14.02z"></path></g>
12249 <g id="assessment"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2- .9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"></path></ g>
12250 <g id="assignment"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c. 55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4 H7V7h10v2z"></path></g>
12251 <g id="assignment-ind"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84- 2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 4c1.66 0 3 1.34 3 3s-1.34 3 -3 3-3-1.34-3-3 1.34-3 3-3zm6 12H6v-1.4c0-2 4-3.1 6-3.1s6 1.1 6 3.1V19z"></path> </g>
12252 <g id="assignment-late"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84 -2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm- 6 15h-2v-2h2v2zm0-4h-2V8h2v6zm-1-9c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"></path></g>
12253 <g id="assignment-return"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4. 84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z m-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm4 12h-4v3l-5-5 5-5v3h4v4z" ></path></g>
12254 <g id="assignment-returned"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2. 4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2- 2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 15l-5-5h3V9h4v4h3l-5 5 z"></path></g>
12255 <g id="assignment-turned-in"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2 .4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2 -2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm-2 14l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"></path></g>
12256 <g id="attachment"><path d="M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1. 79 4-4 4H9.5C8.12 15 7 13.88 7 12.5S8.12 10 9.5 10H17v2H9.41c-.55 0-.55 1 0 1H18 c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z"></path></g>
12257 <g id="autorenew"><path d="M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1 .24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c .44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.4 6-3.03-1.24-4.26z"></path></g>
12258 <g id="backspace"><path d="M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53. 9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.4 1 17 9 15.59 12.59 12 9 8.41 10.41 7 14 10.59 17.59 7 19 8.41 15.41 12 19 15.59z "></path></g>
12259 <g id="backup"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.3 5 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05 -4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path></g>
12260 <g id="block"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.5 2 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z"></path></g>
12261 <g id="book"><path d="M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2 V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4z"></path></g>
12262 <g id="bookmark"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2 -2-2z"></path></g>
12263 <g id="bookmark-border"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1 .1-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"></path></g>
12264 <g id="bug-report"><path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15. 59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.0 4.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33. 09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v 2z"></path></g>
12265 <g id="build"><path d="M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1 .4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z"></path></g>
12266 <g id="cached"><path d="M19 8l-4 4h3c0 3.31-2.69 6-6 6-1.01 0-1.97-.25-2.8-.7l-1 .46 1.46C8.97 19.54 10.43 20 12 20c4.42 0 8-3.58 8-8h3l-4-4zM6 12c0-3.31 2.69-6 6-6 1.01 0 1.97.25 2.8.7l1.46-1.46C15.03 4.46 13.57 4 12 4c-4.42 0-8 3.58-8 8H1l 4 4 4-4H6z"></path></g>
12267 <g id="camera-enhance"><path d="M9 3L7.17 5H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h1 6c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2h-3.17L15 3H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5 -5 5 2.24 5 5-2.24 5-5 5zm0-1l1.25-2.75L16 13l-2.75-1.25L12 9l-1.25 2.75L8 13l2. 75 1.25z"></path></g>
12268 <g id="cancel"><path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17. 53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 1 0.59 15.59 7 17 8.41 13.41 12 17 15.59z"></path></g>
12269 <g id="card-giftcard"><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3 -1.05 0-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c 0 .35.07.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2 -2V8c0-1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c .55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"></path></g>
12270 <g id="card-membership"><path d="M20 2H4c-1.11 0-2 .89-2 2v11c0 1.11.89 2 2 2h4v 5l4-2 4 2v-5h4c1.11 0 2-.89 2-2V4c0-1.11-.89-2-2-2zm0 13H4v-2h16v2zm0-5H4V4h16v6 z"></path></g>
12271 <g id="card-travel"><path d="M20 6h-3V4c0-1.11-.89-2-2-2H9c-1.11 0-2 .89-2 2v2H4 c-1.11 0-2 .89-2 2v11c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zM9 4h6v2H9V4zm11 15H4v-2h16v2zm0-5H4V8h3v2h2V8h6v2h2V8h3v6z"></path></g>
12272 <g id="change-history"><path d="M12 7.77L18.39 18H5.61L12 7.77M12 4L2 20h20L12 4 z"></path></g>
12273 <g id="check"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"></path ></g>
12274 <g id="check-box"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"> </path></g>
12275 <g id="check-box-outline-blank"><path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v1 4c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"></path></g>
12276 <g id="check-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10- 10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"></path></g>
12277 <g id="chevron-left"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></p ath></g>
12278 <g id="chevron-right"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z">< /path></g>
12279 <g id="chrome-reader-mode"><path d="M13 12h7v1.5h-7zm0-2.5h7V11h-7zm0 5h7V16h-7z M21 4H3c-1.1 0-2 .9-2 2v13c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 1 5h-9V6h9v13z"></path></g>
12280 <g id="class"><path d="M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2- 2V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4z"></path></g>
12281 <g id="clear"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></g>
12282 <g id="close"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></g>
12283 <g id="cloud"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05- 4.78-4.65-4.96z"></path></g>
12284 <g id="cloud-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10- 10S17.52 2 12 2zm4.5 14H8c-1.66 0-3-1.34-3-3s1.34-3 3-3l.14.01C8.58 8.28 10.13 7 12 7c2.21 0 4 1.79 4 4h.5c1.38 0 2.5 1.12 2.5 2.5S17.88 16 16.5 16z"></path></g >
12285 <g id="cloud-done"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64- 2.05-4.78-4.65-4.96zM10 17l-3.5-3.5 1.41-1.41L10 14.17 15.18 9l1.41 1.41L10 17z" ></path></g>
12286 <g id="cloud-download"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2 .64-2.05-4.78-4.65-4.96zM17 13l-5 5-5-5h3V9h4v4h3z"></path></g>
12287 <g id="cloud-off"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43- 4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.6 4-2.05-4.78-4.65-4.96zM3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6 h11.73l2 2L21 20.73 4.27 4 3 5.27zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h1 .73z"></path></g>
12288 <g id="cloud-queue"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.6 4 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64 -2.05-4.78-4.65-4.96zM19 18H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h.71C7.37 7.69 9.48 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3s-1.34 3-3 3z"></path></g>
12289 <g id="cloud-upload"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5. 64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.6 4-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path></g>
12290 <g id="code"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4 .6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"></path></g>
12291 <g id="compare-arrows"><path d="M9.01 14H2v2h7.01v3L13 15l-3.99-4v3zm5.98-1v-3H2 2V8h-7.01V5L11 9l3.99 4z"></path></g>
12292 <g id="content-copy"><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0- 2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z">< /path></g>
12293 <g id="content-cut"><path d="M9.64 7.64c.23-.5.36-1.05.36-1.64 0-2.21-1.79-4-4-4 S2 3.79 2 6s1.79 4 4 4c.59 0 1.14-.13 1.64-.36L10 12l-2.36 2.36C7.14 14.13 6.59 14 6 14c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4c0-.59-.13-1.14-.36-1.64L12 14l7 7h3v-1L9.64 7.64zM6 8c-1.1 0-2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm0 12c-1.1 0 -2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm6-7.5c-.28 0-.5-.22-.5-.5s.22-.5.5-.5.5. 22.5.5-.22.5-.5.5zM19 3l-6 6 2 2 7-7V3z"></path></g>
12294 <g id="content-paste"><path d="M19 2h-4.18C14.4.84 13.3 0 12 0c-1.3 0-2.4.84-2.8 2 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c .55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z"></path> </g>
12295 <g id="copyright"><path d="M10.08 10.86c.05-.33.16-.62.3-.87s.34-.46.59-.62c.24- .15.54-.22.91-.23.23.01.44.05.63.13.2.09.38.21.52.36s.25.33.34.53.13.42.14.64h1. 79c-.02-.47-.11-.9-.28-1.29s-.4-.73-.7-1.01-.66-.5-1.08-.66-.88-.23-1.39-.23c-.6 5 0-1.22.11-1.7.34s-.88.53-1.2.92-.56.84-.71 1.36S8 11.29 8 11.87v.27c0 .58.08 1 .12.23 1.64s.39.97.71 1.35.72.69 1.2.91 1.05.34 1.7.34c.47 0 .91-.08 1.32-.23s.7 7-.36 1.08-.63.56-.58.74-.94.29-.74.3-1.15h-1.79c-.01.21-.06.4-.15.58s-.21.33-.3 6.46-.32.23-.52.3c-.19.07-.39.09-.6.1-.36-.01-.66-.08-.89-.23-.25-.16-.45-.37-.5 9-.62s-.25-.55-.3-.88-.08-.67-.08-1v-.27c0-.35.03-.68.08-1.01zM12 2C6.48 2 2 6.4 8 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"></path></g>
12296 <g id="create"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7. 04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3. 75 1.83-1.83z"></path></g>
12297 <g id="create-new-folder"><path d="M20 6h-8l-2-2H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-1 8h-3v3h-2v-3h-3v-2h3V9 h2v3h3v2z"></path></g>
12298 <g id="credit-card"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2 h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"></path> </g>
12299 <g id="dashboard"><path d="M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6 h8V3h-8z"></path></g>
12300 <g id="date-range"><path d="M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1 V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c 0-1.1-.9-2-2-2zm0 16H5V9h14v11z"></path></g>
12301 <g id="delete"><path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l- 1-1h-5l-1 1H5v2h14V4z"></path></g>
12302 <g id="description"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2 H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"></p ath></g>
12303 <g id="dns"><path d="M20 13H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1 -1v-6c0-.55-.45-1-1-1zM7 19c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM20 3H4c- .55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM7 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"></path></g>
12304 <g id="done"><path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"></path ></g>
12305 <g id="done-all"><path d="M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L1 1.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41 L1.83 12 .41 13.41z"></path></g>
12306 <g id="donut-large"><path d="M11 5.08V2c-5 .5-9 4.81-9 10s4 9.5 9 10v-3.08c-3-.4 8-6-3.4-6-6.92s3-6.44 6-6.92zM18.97 11H22c-.47-5-4-8.53-9-9v3.08C16 5.51 18.54 8 18.97 11zM13 18.92V22c5-.47 8.53-4 9-9h-3.03c-.43 3-2.97 5.49-5.97 5.92z"></pat h></g>
12307 <g id="donut-small"><path d="M11 9.16V2c-5 .5-9 4.79-9 10s4 9.5 9 10v-7.16c-1-.4 1-2-1.52-2-2.84s1-2.43 2-2.84zM14.86 11H22c-.48-4.75-4-8.53-9-9v7.16c1 .3 1.52.9 8 1.86 1.84zM13 14.84V22c5-.47 8.52-4.25 9-9h-7.14c-.34.86-.86 1.54-1.86 1.84z"> </path></g>
12308 <g id="drafts"><path d="M21.99 8c0-.72-.37-1.35-.94-1.7L12 1 2.95 6.3C2.38 6.65 2 7.28 2 8v10c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2l-.01-10zM12 13L3.74 7.84 12 3l8.26 4.84L12 13z"></path></g>
12309 <g id="eject"><path d="M5 17h14v2H5zm7-12L5.33 15h13.34z"></path></g>
12310 <g id="error"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.5 2 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"></path></g>
12311 <g id="error-outline"><path d="M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58 -8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></g>
12312 <g id="event"><path d="M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L 3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z" ></path></g>
12313 <g id="event-seat"><path d="M4 18v3h3v-3h10v3h3v-6H4zm15-8h3v3h-3zM2 10h3v3H2zm1 5 3H7V5c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2v8z"></path></g>
12314 <g id="exit-to-app"><path d="M10.09 15.59L11.5 17l5-5-5-5-1.41 1.41L12.67 11H3v2 h9.67l-2.58 2.59zM19 3H5c-1.11 0-2 .9-2 2v4h2V5h14v14H5v-4H3v4c0 1.1.89 2 2 2h14 c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"></path></g>
12315 <g id="expand-less"><path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"></p ath></g>
12316 <g id="expand-more"><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"></pat h></g>
12317 <g id="explore"><path d="M12 10.9c-.61 0-1.1.49-1.1 1.1s.49 1.1 1.1 1.1c.61 0 1. 1-.49 1.1-1.1s-.49-1.1-1.1-1.1zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10 -10S17.52 2 12 2zm2.19 12.19L6 18l3.81-8.19L18 6l-3.81 8.19z"></path></g>
12318 <g id="extension"><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 1 0.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.2 1 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.2 1 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z" ></path></g>
12319 <g id="face"><path d="M9 11.75c-.69 0-1.25.56-1.25 1.25s.56 1.25 1.25 1.25 1.25- .56 1.25-1.25-.56-1.25-1.25-1.25zm6 0c-.69 0-1.25.56-1.25 1.25s.56 1.25 1.25 1.2 5 1.25-.56 1.25-1.25-.56-1.25-1.25-1.25zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 1 0-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8 0-.29.02-.58.05-.86 2.36-1.05 4.23-2.98 5.21-5.37C11.07 8.33 14.05 10 17.42 10c.78 0 1.53-.09 2.25-.26.21.71. 33 1.47.33 2.26 0 4.41-3.59 8-8 8z"></path></g>
12320 <g id="favorite"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4. 42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"></path></g>
12321 <g id="favorite-border"><path d="M16.5 3c-1.74 0-3.41.81-4.5 2.09C10.91 3.81 9.2 4 3 7.5 3 4.42 3 2 5.42 2 8.5c0 3.78 3.4 6.86 8.55 11.54L12 21.35l1.45-1.32C18.6 15.36 22 12.28 22 8.5 22 5.42 19.58 3 16.5 3zm-4.4 15.55l-.1.1-.1-.1C7.14 14.24 4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96 5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05z"></path></g>
12322 <g id="feedback"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2- 2V4c0-1.1-.9-2-2-2zm-7 12h-2v-2h2v2zm0-4h-2V6h2v4z"></path></g>
12323 <g id="file-download"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path ></g>
12324 <g id="file-upload"><path d="M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z"></path></g>
12325 <g id="filter-list"><path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"></p ath></g>
12326 <g id="find-in-page"><path d="M20 19.59V8l-6-6H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1 .89 2 1.99 2H18c.45 0 .85-.15 1.19-.4l-4.43-4.43c-.8.52-1.74.83-2.76.83-2.76 0-5 -2.24-5-5s2.24-5 5-5 5 2.24 5 5c0 1.02-.31 1.96-.83 2.75L20 19.59zM9 13c0 1.66 1 .34 3 3 3s3-1.34 3-3-1.34-3-3-3-3 1.34-3 3z"></path></g>
12327 <g id="find-replace"><path d="M11 6c1.38 0 2.63.56 3.54 1.46L12 10h6V4l-2.05 2.0 5C14.68 4.78 12.93 4 11 4c-3.53 0-6.43 2.61-6.92 6H6.1c.46-2.28 2.48-4 4.9-4zm5. 64 9.14c.66-.9 1.12-1.97 1.28-3.14H15.9c-.46 2.28-2.48 4-4.9 4-1.38 0-2.63-.56-3 .54-1.46L10 12H4v6l2.05-2.05C7.32 17.22 9.07 18 11 18c1.55 0 2.98-.51 4.14-1.36L 20 21.49 21.49 20l-4.85-4.86z"></path></g>
12328 <g id="fingerprint"><path d="M17.81 4.47c-.08 0-.16-.02-.23-.06C15.66 3.42 14 3 12.01 3c-1.98 0-3.86.47-5.57 1.41-.24.13-.54.04-.68-.2-.13-.24-.04-.55.2-.68C7.8 2 2.52 9.86 2 12.01 2c2.13 0 3.99.47 6.03 1.52.25.13.34.43.21.67-.09.18-.26.28-. 44.28zM3.5 9.72c-.1 0-.2-.03-.29-.09-.23-.16-.28-.47-.12-.7.99-1.4 2.25-2.5 3.75 -3.27C9.98 4.04 14 4.03 17.15 5.65c1.5.77 2.76 1.86 3.75 3.25.16.22.11.54-.12.7- .23.16-.54.11-.7-.12-.9-1.26-2.04-2.25-3.39-2.94-2.87-1.47-6.54-1.47-9.4.01-1.36 .7-2.5 1.7-3.4 2.96-.08.14-.23.21-.39.21zm6.25 12.07c-.13 0-.26-.05-.35-.15-.87- .87-1.34-1.43-2.01-2.64-.69-1.23-1.05-2.73-1.05-4.34 0-2.97 2.54-5.39 5.66-5.39s 5.66 2.42 5.66 5.39c0 .28-.22.5-.5.5s-.5-.22-.5-.5c0-2.42-2.09-4.39-4.66-4.39-2. 57 0-4.66 1.97-4.66 4.39 0 1.44.32 2.77.93 3.85.64 1.15 1.08 1.64 1.85 2.42.19.2 .19.51 0 .71-.11.1-.24.15-.37.15zm7.17-1.85c-1.19 0-2.24-.3-3.1-.89-1.49-1.01-2. 38-2.65-2.38-4.39 0-.28.22-.5.5-.5s.5.22.5.5c0 1.41.72 2.74 1.94 3.56.71.48 1.54 .71 2.54.71.24 0 .64-.03 1.04-.1.27-.05.53.13.58.41.05.27-.13.53-.41.58-.57.11-1 .07.12-1.21.12zM14.91 22c-.04 0-.09-.01-.13-.02-1.59-.44-2.63-1.03-3.72-2.1-1.4- 1.39-2.17-3.24-2.17-5.22 0-1.62 1.38-2.94 3.08-2.94 1.7 0 3.08 1.32 3.08 2.94 0 1.07.93 1.94 2.08 1.94s2.08-.87 2.08-1.94c0-3.77-3.25-6.83-7.25-6.83-2.84 0-5.44 1.58-6.61 4.03-.39.81-.59 1.76-.59 2.8 0 .78.07 2.01.67 3.61.1.26-.03.55-.29.64 -.26.1-.55-.04-.64-.29-.49-1.31-.73-2.61-.73-3.96 0-1.2.23-2.29.68-3.24 1.33-2.7 9 4.28-4.6 7.51-4.6 4.55 0 8.25 3.51 8.25 7.83 0 1.62-1.38 2.94-3.08 2.94s-3.08- 1.32-3.08-2.94c0-1.07-.93-1.94-2.08-1.94s-2.08.87-2.08 1.94c0 1.71.66 3.31 1.87 4.51.95.94 1.86 1.46 3.27 1.85.27.07.42.35.35.61-.05.23-.26.38-.47.38z"></path>< /g>
12329 <g id="flag"><path d="M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6z"></path></g>
12330 <g id="flight-land"><path d="M2.5 19h19v2h-19zm7.18-5.73l4.35 1.16 5.31 1.42c.8. 21 1.62-.26 1.84-1.06.21-.8-.26-1.62-1.06-1.84l-5.31-1.42-2.76-9.02L10.12 2v8.28 L5.15 8.95l-.93-2.32-1.45-.39v5.17l1.6.43 5.31 1.43z"></path></g>
12331 <g id="flight-takeoff"><path d="M2.5 19h19v2h-19zm19.57-9.36c-.21-.8-1.04-1.28-1 .84-1.06L14.92 10l-6.9-6.43-1.93.51 4.14 7.17-4.97 1.33-1.97-1.54-1.45.39 1.82 3 .16.77 1.33 1.6-.43 5.31-1.42 4.35-1.16L21 11.49c.81-.23 1.28-1.05 1.07-1.85z">< /path></g>
12332 <g id="flip-to-back"><path d="M9 7H7v2h2V7zm0 4H7v2h2v-2zm0-8c-1.11 0-2 .9-2 2h2 V3zm4 12h-2v2h2v-2zm6-12v2h2c0-1.1-.9-2-2-2zm-6 0h-2v2h2V3zM9 17v-2H7c0 1.1.89 2 2 2zm10-4h2v-2h-2v2zm0-4h2V7h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zM5 7H3v12c0 1.1.89 2 2 2h12v-2H5V7zm10-2h2V3h-2v2zm0 12h2v-2h-2v2z"></path></g>
12333 <g id="flip-to-front"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm2 4v-2H3c0 1.1.89 2 2 2zM3 9h2V7H3v2zm12 12h2v-2h-2v2zm4-18H9c-1.11 0-2 .9-2 2v10c0 1.1.89 2 2 2h10 c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12H9V5h10v10zm-8 6h2v-2h-2v2zm-4 0h2v-2H7v2z "></path></g>
12334 <g id="folder"><path d="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></g>
12335 <g id="folder-open"><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z"></path></g>
12336 <g id="folder-shared"><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm-5 3c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2- 2 .9-2 2-2zm4 8h-8v-1c0-1.33 2.67-2 4-2s4 .67 4 2v1z"></path></g>
12337 <g id="font-download"><path d="M9.93 13.5h4.14L12 7.98zM20 2H4c-1.1 0-2 .9-2 2v1 6c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-4.05 16.5l-1.14-3H9.17l-1.1 2 3H5.96l5.11-13h1.86l5.11 13h-2.09z"></path></g>
12338 <g id="forward"><path d="M12 8V4l8 8-8 8v-4H4V8z"></path></g>
12339 <g id="fullscreen"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v- 5h-2v3zM14 5v2h3v3h2V5h-5z"></path></g>
12340 <g id="fullscreen-exit"><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h 3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"></path></g>
12341 <g id="gavel"><path d="M1 21h12v2H1zM5.245 8.07l2.83-2.827 14.14 14.142-2.828 2. 828zM12.317 1l5.657 5.656-2.83 2.83-5.654-5.66zM3.825 9.485l5.657 5.657-2.828 2. 828-5.657-5.657z"></path></g>
12342 <g id="gesture"><path d="M4.59 6.89c.7-.71 1.4-1.35 1.71-1.22.5.2 0 1.03-.3 1.52 -.25.42-2.86 3.89-2.86 6.31 0 1.28.48 2.34 1.34 2.98.75.56 1.74.73 2.64.46 1.07- .31 1.95-1.4 3.06-2.77 1.21-1.49 2.83-3.44 4.08-3.44 1.63 0 1.65 1.01 1.76 1.79- 3.78.64-5.38 3.67-5.38 5.37 0 1.7 1.44 3.09 3.21 3.09 1.63 0 4.29-1.33 4.69-6.1H 21v-2.5h-2.47c-.15-1.65-1.09-4.2-4.03-4.2-2.25 0-4.18 1.91-4.94 2.84-.58.73-2.06 2.48-2.29 2.72-.25.3-.68.84-1.11.84-.45 0-.72-.83-.36-1.92.35-1.09 1.4-2.86 1.8 5-3.52.78-1.14 1.3-1.92 1.3-3.28C8.95 3.69 7.31 3 6.44 3 5.12 3 3.97 4 3.72 4.25 c-.36.36-.66.66-.88.93l1.75 1.71zm9.29 11.66c-.31 0-.74-.26-.74-.72 0-.6.73-2.2 2.87-2.76-.3 2.69-1.43 3.48-2.13 3.48z"></path></g>
12343 <g id="get-app"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path></g>
12344 <g id="gif"><path d="M11.5 9H13v6h-1.5zM9 9H6c-.6 0-1 .5-1 1v4c0 .5.4 1 1 1h3c.6 0 1-.5 1-1v-2H8.5v1.5h-2v-3H10V10c0-.5-.4-1-1-1zm10 1.5V9h-4.5v6H16v-2h2v-1.5h- 2v-1z"></path></g>
12345 <g id="grade"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"></path></g>
12346 <g id="group-work"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10 S17.52 2 12 2zM8 17.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5 -1.12 2.5-2.5 2.5zM9.5 8c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5-1.12 2.5-2.5 2 .5S9.5 9.38 9.5 8zm6.5 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2. 5 2.5-1.12 2.5-2.5 2.5z"></path></g>
12347 <g id="help"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1. 45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2 .21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"></path></g>
12348 <g id="help-outline"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8- 3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0- 2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></g>
12349 <g id="highlight-off"><path d="M14.59 8L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41 14.59 8zM12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8- 8 8 3.59 8 8-3.59 8-8 8z"></path></g>
12350 <g id="history"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.8 7 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19 .99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2 .08V8H12z"></path></g>
12351 <g id="home"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"></path></g>
12352 <g id="hourglass-empty"><path d="M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5. 99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zm10 14.5V20H8v-3.5l4-4 4 4zm-4-5l-4-4V4 h8v3.5l-4 4z"></path></g>
12353 <g id="hourglass-full"><path d="M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.9 9h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6z"></path></g>
12354 <g id="http"><path d="M4.5 11h-2V9H1v6h1.5v-2.5h2V15H6V9H4.5v2zm2.5-.5h1.5V15H10 v-4.5h1.5V9H7v1.5zm5.5 0H14V15h1.5v-4.5H17V9h-4.5v1.5zm9-1.5H18v6h1.5v-2h2c.8 0 1.5-.7 1.5-1.5v-1c0-.8-.7-1.5-1.5-1.5zm0 2.5h-2v-1h2v1z"></path></g>
12355 <g id="https"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9 -2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3. 1 3.1v2z"></path></g>
12356 <g id="important-devices"><path d="M23 11.01L18 11c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-9c0-.55-.45-.99-1-.99zM23 20h-5v-7h5v7zM20 2H2C.89 2 0 2 .89 0 4v12c0 1.1.89 2 2 2h7v2H7v2h8v-2h-2v-2h2v-2H2V4h18v5h2V4c0-1.11-.9-2-2-2zm -8.03 7L11 6l-.97 3H7l2.47 1.76-.94 2.91 2.47-1.8 2.47 1.8-.94-2.91L15 9h-3.03z" ></path></g>
12357 <g id="inbox"><path d="M19 3H4.99c-1.11 0-1.98.89-1.98 2L3 19c0 1.1.88 2 1.99 2H 19c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V 5H19v10z"></path></g>
12358 <g id="indeterminate-check-box"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"></path></g>
12359 <g id="info"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"></path></g>
12360 <g id="info-outline"><path d="M11 17h2v-6h-2v6zm1-15C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8- 3.59 8-8 8zM11 9h2V7h-2v2z"></path></g>
12361 <g id="input"><path d="M21 3.01H3c-1.1 0-2 .9-2 2V9h2V4.99h18v14.03H3V15H1v4.01c 0 1.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98v-14c0-1.11-.9-2-2-2zM11 16l4-4-4-4v3H1 v2h10v3z"></path></g>
12362 <g id="invert-colors"><path d="M17.66 7.93L12 2.27 6.34 7.93c-3.12 3.12-3.12 8.1 9 0 11.31C7.9 20.8 9.95 21.58 12 21.58c2.05 0 4.1-.78 5.66-2.34 3.12-3.12 3.12-8 .19 0-11.31zM12 19.59c-1.6 0-3.11-.62-4.24-1.76C6.62 16.69 6 15.19 6 13.59s.62-3 .11 1.76-4.24L12 5.1v14.49z"></path></g>
12363 <g id="label"><path d="M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5.01 3 5.9 3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12l-4.37-6.16z"></p ath></g>
12364 <g id="label-outline"><path d="M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5. 01 3 5.9 3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12l-4.37-6. 16zM16 17H5V7h11l3.55 5L16 17z"></path></g>
12365 <g id="language"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 2 2 17.52 22 12S17.52 2 11.99 2zm6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63 3.37 1.91 4.33 3.56zM12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2. 76 1.91-3.96zM4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32- .14 2 0 .68.06 1.34.14 2H4.26zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3. 37-1.9-4.33-3.56zm2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8 .03 8zM12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96z M14.34 14H9.66c-.09-.66-.16-1.32-.16-2 0-.68.07-1.35.16-2h4.68c.09.65.16 1.32.16 2 0 .68-.07 1.34-.16 2zm.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.4 9 2.93-4.33 3.56zM16.36 14c.08-.66.14-1.32.14-2 0-.68-.06-1.34-.14-2h3.38c.16.64 .26 1.31.26 2s-.1 1.36-.26 2h-3.38z"></path></g>
12366 <g id="launch"><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1 .1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></pa th></g>
12367 <g id="lightbulb-outline"><path d="M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1 zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7zm2.85 11.1l-.85.6V16h-4v-2. 3l-.85-.6C7.8 12.16 7 10.63 7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15 4.1z"></path></g>
12368 <g id="line-style"><path d="M3 16h5v-2H3v2zm6.5 0h5v-2h-5v2zm6.5 0h5v-2h-5v2zM3 20h2v-2H3v2zm4 0h2v-2H7v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zM3 12h8v- 2H3v2zm10 0h8v-2h-8v2zM3 4v4h18V4H3z"></path></g>
12369 <g id="line-weight"><path d="M3 17h18v-2H3v2zm0 3h18v-1H3v1zm0-7h18v-3H3v3zm0-9v 4h18V4H3z"></path></g>
12370 <g id="link"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2 .24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></pat h></g>
12371 <g id="list"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm 0 4h14v-2H7v2zM7 7v2h14V7H7z"></path></g>
12372 <g id="lock"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9- 2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"></path></g>
12373 <g id="lock-open"><path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6- 9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2 zm0 12H6V10h12v10z"></path></g>
12374 <g id="lock-outline"><path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z m6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1 .1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM8.9 6c0-1.71 1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1v 2H8.9V6zM18 20H6V10h12v10z"></path></g>
12375 <g id="loyalty"><path d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9 -2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7 c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7zm11.77 8.27L13 19.54l-4.27-4.27C8.28 14.81 8 1 4.19 8 13.5c0-1.38 1.12-2.5 2.5-2.5.69 0 1.32.28 1.77.74l.73.72.73-.73c.45-.45 1 .08-.73 1.77-.73 1.38 0 2.5 1.12 2.5 2.5 0 .69-.28 1.32-.73 1.77z"></path></g>
12376 <g id="mail"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2 -.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"></path></g>
12377 <g id="markunread"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1 .1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"></path></g>
12378 <g id="markunread-mailbox"><path d="M20 6H10v6H8V4h6V0H6v6H4c-1.1 0-2 .9-2 2v12c 0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2z"></path></g>
12379 <g id="menu"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"></path></g>
12380 <g id="more-horiz"><path d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-. 9 2-2-.9-2-2-2z"></path></g>
12381 <g id="more-vert"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2 c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2 -2-.9-2-2-2z"></path></g>
12382 <g id="motorcycle"><path d="M19.44 9.03L15.41 5H11v2h3.59l2 2H5c-2.8 0-5 2.2-5 5 s2.2 5 5 5c2.46 0 4.45-1.69 4.9-4h1.65l2.77-2.77c-.21.54-.32 1.14-.32 1.77 0 2.8 2.2 5 5 5s5-2.2 5-5c0-2.65-1.97-4.77-4.56-4.97zM7.82 15C7.4 16.15 6.28 17 5 17c -1.63 0-3-1.37-3-3s1.37-3 3-3c1.28 0 2.4.85 2.82 2H5v2h2.82zM19 17c-1.66 0-3-1.3 4-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"></path></g>
12383 <g id="move-to-inbox"><path d="M19 3H4.99c-1.11 0-1.98.9-1.98 2L3 19c0 1.1.88 2 1.99 2H19c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3 H4.99V5H19v10zm-3-5h-2V7h-4v3H8l4 4 4-4z"></path></g>
12384 <g id="next-week"><path d="M20 7h-4V5c0-.55-.22-1.05-.59-1.41C15.05 3.22 14.55 3 14 3h-4c-1.1 0-2 .9-2 2v2H4c-1.1 0-2 .9-2 2v11c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V 9c0-1.1-.9-2-2-2zM10 5h4v2h-4V5zm1 13.5l-1-1 3-3-3-3 1-1 4 4-4 4z"></path></g>
12385 <g id="note-add"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18 c1.1 0 2-.9 2-2V8l-6-6zm2 14h-3v3h-2v-3H8v-2h3v-3h2v3h3v2zm-3-7V3.5L18.5 9H13z"> </path></g>
12386 <g id="offline-pin"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17 .5 2 12 2zm5 16H7v-2h10v2zm-6.7-4L7 10.7l1.4-1.4 1.9 1.9 5.3-5.3L17 7.3 10.3 14z "></path></g>
12387 <g id="opacity"><path d="M17.66 8L12 2.35 6.34 8C4.78 9.56 4 11.64 4 13.64s.78 4 .11 2.34 5.67 3.61 2.35 5.66 2.35 4.1-.79 5.66-2.35S20 15.64 20 13.64 19.22 9.56 17.66 8zM6 14c.01-2 .62-3.27 1.76-4.4L12 5.27l4.24 4.38C17.38 10.77 17.99 12 18 14H6z"></path></g>
12388 <g id="open-in-browser"><path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2 H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"> </path></g>
12389 <g id="open-in-new"><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2 h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z" ></path></g>
12390 <g id="open-with"><path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm 14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z"></path></g>
12391 <g id="pageview"><path d="M11.5 9C10.12 9 9 10.12 9 11.5s1.12 2.5 2.5 2.5 2.5-1. 12 2.5-2.5S12.88 9 11.5 9zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-3.21 14.21l-2.91-2.91c-.69.44-1.51.7-2.39.7C9.01 16 7 13 .99 7 11.5S9.01 7 11.5 7 16 9.01 16 11.5c0 .88-.26 1.69-.7 2.39l2.91 2.9-1.42 1. 42z"></path></g>
12392 <g id="pan-tool"><path d="M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1 .19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31 2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5 S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1. 5 1.5-1.5s1.5.67 1.5 1.5z"></path></g>
12393 <g id="payment"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c 1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"></path></g>
12394 <g id="perm-camera-mic"><path d="M20 5h-3.17L15 3H9L7.17 5H4c-1.1 0-2 .9-2 2v12c 0 1.1.9 2 2 2h7v-2.09c-2.83-.48-5-2.94-5-5.91h2c0 2.21 1.79 4 4 4s4-1.79 4-4h2c0 2.97-2.17 5.43-5 5.91V21h7c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-6 8c0 1.1-.9 2-2 2 s-2-.9-2-2V9c0-1.1.9-2 2-2s2 .9 2 2v4z"></path></g>
12395 <g id="perm-contact-calendar"><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 3c1.66 0 3 1.34 3 3s- 1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm6 12H6v-1c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1z"></pa th></g>
12396 <g id="perm-data-setting"><path d="M18.99 11.5c.34 0 .67.03 1 .07L20 0 0 20h11.5 6c-.04-.33-.07-.66-.07-1 0-4.14 3.36-7.5 7.5-7.5zm3.71 7.99c.02-.16.04-.32.04-.4 9 0-.17-.01-.33-.04-.49l1.06-.83c.09-.08.12-.21.06-.32l-1-1.73c-.06-.11-.19-.15- .31-.11l-1.24.5c-.26-.2-.54-.37-.85-.49l-.19-1.32c-.01-.12-.12-.21-.24-.21h-2c-. 12 0-.23.09-.25.21l-.19 1.32c-.3.13-.59.29-.85.49l-1.24-.5c-.11-.04-.24 0-.31.11 l-1 1.73c-.06.11-.04.24.06.32l1.06.83c-.02.16-.03.32-.03.49 0 .17.01.33.03.49l-1 .06.83c-.09.08-.12.21-.06.32l1 1.73c.06.11.19.15.31.11l1.24-.5c.26.2.54.37.85.49 l.19 1.32c.02.12.12.21.25.21h2c.12 0 .23-.09.25-.21l.19-1.32c.3-.13.59-.29.84-.4 9l1.25.5c.11.04.24 0 .31-.11l1-1.73c.06-.11.03-.24-.06-.32l-1.07-.83zm-3.71 1.01 c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"></path> </g>
12397 <g id="perm-device-information"><path d="M13 7h-2v2h2V7zm0 4h-2v6h2v-6zm4-9.99L7 1c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17 19H7V5h10v14z"></path></g>
12398 <g id="perm-identity"><path d="M12 5.9c1.16 0 2.1.94 2.1 2.1s-.94 2.1-2.1 2.1S9. 9 9.16 9.9 8s.94-2.1 2.1-2.1m0 9c2.97 0 6.1 1.46 6.1 2.1v1.1H5.9V17c0-.64 3.13-2 .1 6.1-2.1M12 4C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 9c-2.67 0- 8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z"></path></g>
12399 <g id="perm-media"><path d="M2 6H0v5h.01L0 20c0 1.1.9 2 2 2h18v-2H2V6zm20-2h-8l- 2-2H6c-1.1 0-1.99.9-1.99 2L4 16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2 zM7 15l4.5-6 3.5 4.51 2.5-3.01L21 15H7z"></path></g>
12400 <g id="perm-phone-msg"><path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.0 3-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.58l2.2-2.21c.28-.27.36-.66.25-1.0 1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 1 7 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM12 3v10l3-3h6V3h-9z"></path></g>
12401 <g id="perm-scan-wifi"><path d="M12 3C6.95 3 3.15 4.85 0 7.23L12 22 24 7.25C20.8 5 4.87 17.05 3 12 3zm1 13h-2v-6h2v6zm-2-8V6h2v2h-2z"></path></g>
12402 <g id="pets"><circle cx="4.5" cy="9.5" r="2.5"></circle><circle cx="9" cy="5.5" r="2.5"></circle><circle cx="15" cy="5.5" r="2.5"></circle><circle cx="19.5" cy= "9.5" r="2.5"></circle><path d="M17.34 14.86c-.87-1.02-1.6-1.89-2.48-2.91-.46-.5 4-1.05-1.08-1.75-1.32-.11-.04-.22-.07-.33-.09-.25-.04-.52-.04-.78-.04s-.53 0-.79 .05c-.11.02-.22.05-.33.09-.7.24-1.28.78-1.75 1.32-.87 1.02-1.6 1.89-2.48 2.91-1. 31 1.31-2.92 2.76-2.62 4.79.29 1.02 1.02 2.03 2.33 2.32.73.15 3.06-.44 5.54-.44h .18c2.48 0 4.81.58 5.54.44 1.31-.29 2.04-1.31 2.33-2.32.31-2.04-1.3-3.49-2.61-4. 8z"></path></g>
12403 <g id="picture-in-picture"><path d="M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1 .1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98V5c0-1.1-.9-2-2-2zm0 16.01H3V4.98h18v14.03 z"></path></g>
12404 <g id="picture-in-picture-alt"><path d="M19 11h-8v6h8v-6zm4 8V4.98C23 3.88 22.1 3 21 3H3c-1.1 0-2 .88-2 1.98V19c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2zm-2 .02H3V4.97h1 8v14.05z"></path></g>
12405 <g id="play-for-work"><path d="M11 5v5.59H7.5l4.5 4.5 4.5-4.5H13V5h-2zm-5 9c0 3. 31 2.69 6 6 6s6-2.69 6-6h-2c0 2.21-1.79 4-4 4s-4-1.79-4-4H6z"></path></g>
12406 <g id="polymer"><path d="M19 4h-4L7.11 16.63 4.5 12 9 4H5L.5 12 5 20h4l7.89-12.6 3L19.5 12 15 20h4l4.5-8z"></path></g>
12407 <g id="power-settings-new"><path d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6 .83z"></path></g>
12408 <g id="pregnant-woman"><path d="M9 4c0-1.11.89-2 2-2s2 .89 2 2-.89 2-2 2-2-.89-2 -2zm7 9c-.01-1.34-.83-2.51-2-3 0-1.66-1.34-3-3-3s-3 1.34-3 3v7h2v5h3v-5h3v-4z">< /path></g>
12409 <g id="print"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3 -3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6 v4h12V3z"></path></g>
12410 <g id="query-builder"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"></path></g>
12411 <g id="question-answer"><path d="M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.4 5-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z">< /path></g>
12412 <g id="radio-button-checked"><path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2 zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></g>
12413 <g id="radio-button-unchecked"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 1 0-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8- 8 8z"></path></g>
12414 <g id="receipt"><path d="M18 17H6v-2h12v2zm0-4H6v-2h12v2zm0-4H6V7h12v2zM3 22l1.5 -1.5L6 22l1.5-1.5L9 22l1.5-1.5L12 22l1.5-1.5L15 22l1.5-1.5L18 22l1.5-1.5L21 22V2 l-1.5 1.5L18 2l-1.5 1.5L15 2l-1.5 1.5L12 2l-1.5 1.5L9 2 7.5 3.5 6 2 4.5 3.5 3 2v 20z"></path></g>
12415 <g id="record-voice-over"><circle cx="9" cy="9" r="4"></circle><path d="M9 15c-2 .67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4zm7.76-9.64l-1.68 1.69c.84 1.18.84 2.7 1 0 3.89l1.68 1.69c2.02-2.02 2.02-5.07 0-7.27zM20.07 2l-1.63 1.63c2.77 3.02 2.77 7.56 0 10.74L20.07 16c3.9-3.89 3.91-9.95 0-14z"></path></g>
12416 <g id="redeem"><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3-1.05 0 -1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 .35.0 7.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0- 1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8 .62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"></path></g>
12417 <g id="redo"><path d="M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.9 6 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z"></path></g>
12418 <g id="refresh"><path d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.9 9 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6 -2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"></path></g>
12419 <g id="remove"><path d="M19 13H5v-2h14v2z"></path></g>
12420 <g id="remove-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10 -10S17.52 2 12 2zm5 11H7v-2h10v2z"></path></g>
12421 <g id="remove-circle-outline"><path d="M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4 .48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3. 59 8 8-3.59 8-8 8z"></path></g>
12422 <g id="reorder"><path d="M3 15h18v-2H3v2zm0 4h18v-2H3v2zm0-8h18V9H3v2zm0-6v2h18V 5H3z"></path></g>
12423 <g id="reply"><path d="M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z" ></path></g>
12424 <g id="reply-all"><path d="M7 8V5l-7 7 7 7v-3l-4-4 4-4zm6 1V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"></path></g>
12425 <g id="report"><path d="M15.73 3H8.27L3 8.27v7.46L8.27 21h7.46L21 15.73V8.27L15. 73 3zM12 17.3c-.72 0-1.3-.58-1.3-1.3 0-.72.58-1.3 1.3-1.3.72 0 1.3.58 1.3 1.3 0 .72-.58 1.3-1.3 1.3zm1-4.3h-2V7h2v6z"></path></g>
12426 <g id="report-problem"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v 4z"></path></g>
12427 <g id="restore"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.8 7 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19 .99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2 .08V8H12z"></path></g>
12428 <g id="room"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.8 7-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1 .12 2.5-2.5 2.5z"></path></g>
12429 <g id="rounded-corner"><path d="M19 19h2v2h-2v-2zm0-2h2v-2h-2v2zM3 13h2v-2H3v2zm 0 4h2v-2H3v2zm0-8h2V7H3v2zm0-4h2V3H3v2zm4 0h2V3H7v2zm8 16h2v-2h-2v2zm-4 0h2v-2h- 2v2zm4 0h2v-2h-2v2zm-8 0h2v-2H7v2zm-4 0h2v-2H3v2zM21 8c0-2.76-2.24-5-5-5h-5v2h5c 1.65 0 3 1.35 3 3v5h2V8z"></path></g>
12430 <g id="rowing"><path d="M8.5 14.5L4 19l1.5 1.5L9 17h2l-2.5-2.5zM15 1c-1.1 0-2 .9 -2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 20.01L18 24l-2.99-3.01V19.5l-7.1-7.09c-.31.05 -.61.07-.91.07v-2.16c1.66.03 3.61-.87 4.67-2.04l1.4-1.55c.19-.21.43-.38.69-.5.29 -.14.62-.23.96-.23h.03C15.99 6.01 17 7.02 17 8.26v5.75c0 .84-.35 1.61-.92 2.16l- 3.58-3.58v-2.27c-.63.52-1.43 1.02-2.29 1.39L16.5 18H18l3 3.01z"></path></g>
12431 <g id="save"><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2 -2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h1 0v4z"></path></g>
12432 <g id="schedule"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 2 2 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3. 58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"></path></g>
12433 <g id="search"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5. 91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.7 9l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9. 5 11.99 14 9.5 14z"></path></g>
12434 <g id="select-all"><path d="M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2 zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm- 2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v 2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2zM7 17h10V7H7v10zm 2-8h6v6H9V9z"></path></g>
12435 <g id="send"><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path></g>
12436 <g id="settings"><path d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2. 11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1. 08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2 .65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49 .12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.1 2.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42 .49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.4 9 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3 .5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z"></path></g>
12437 <g id="settings-applications"><path d="M12 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2- .9-2-2-2zm7-7H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.8 9-2-2-2zm-1.75 9c0 .23-.02.46-.05.68l1.48 1.16c.13.11.17.3.08.45l-1.4 2.42c-.09. 15-.27.21-.43.15l-1.74-.7c-.36.28-.76.51-1.18.69l-.26 1.85c-.03.17-.18.3-.35.3h- 2.8c-.17 0-.32-.13-.35-.29l-.26-1.85c-.43-.18-.82-.41-1.18-.69l-1.74.7c-.16.06-. 34 0-.43-.15l-1.4-2.42c-.09-.15-.05-.34.08-.45l1.48-1.16c-.03-.23-.05-.46-.05-.6 9 0-.23.02-.46.05-.68l-1.48-1.16c-.13-.11-.17-.3-.08-.45l1.4-2.42c.09-.15.27-.21 .43-.15l1.74.7c.36-.28.76-.51 1.18-.69l.26-1.85c.03-.17.18-.3.35-.3h2.8c.17 0 .3 2.13.35.29l.26 1.85c.43.18.82.41 1.18.69l1.74-.7c.16-.06.34 0 .43.15l1.4 2.42c.0 9.15.05.34-.08.45l-1.48 1.16c.03.23.05.46.05.69z"></path></g>
12438 <g id="settings-backup-restore"><path d="M14 12c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2 2-.9 2-2zm-2-9c-4.97 0-9 4.03-9 9H0l4 4 4-4H5c0-3.87 3.13-7 7-7s7 3.13 7 7-3.1 3 7-7 7c-1.51 0-2.91-.49-4.06-1.3l-1.42 1.44C8.04 20.3 9.94 21 12 21c4.97 0 9-4. 03 9-9s-4.03-9-9-9z"></path></g>
12439 <g id="settings-bluetooth"><path d="M11 24h2v-2h-2v2zm-4 0h2v-2H7v2zm8 0h2v-2h-2 v2zm2.71-18.29L12 0h-1v7.59L6.41 3 5 4.41 10.59 10 5 15.59 6.41 17 11 12.41V20h1 l5.71-5.71-4.3-4.29 4.3-4.29zM13 3.83l1.88 1.88L13 7.59V3.83zm1.88 10.46L13 16.1 7v-3.76l1.88 1.88z"></path></g>
12440 <g id="settings-brightness"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18 c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02zM8 16h2.5l1.5 1.5 1.5- 1.5H16v-2.5l1.5-1.5-1.5-1.5V8h-2.5L12 6.5 10.5 8H8v2.5L6.5 12 8 13.5V16zm4-7c1.6 6 0 3 1.34 3 3s-1.34 3-3 3V9z"></path></g>
12441 <g id="settings-cell"><path d="M7 24h2v-2H7v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zM16 .01L8 0C6.9 0 6 .9 6 2v16c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V2c0-1.1-.9-1.99-2-1.99z M16 16H8V4h8v12z"></path></g>
12442 <g id="settings-ethernet"><path d="M7.77 6.76L6.23 5.48.82 12l5.41 6.52 1.54-1.2 8L3.42 12l4.35-5.24zM7 13h2v-2H7v2zm10-2h-2v2h2v-2zm-6 2h2v-2h-2v2zm6.77-7.52l-1 .54 1.28L20.58 12l-4.35 5.24 1.54 1.28L23.18 12l-5.41-6.52z"></path></g>
12443 <g id="settings-input-antenna"><path d="M12 5c-3.87 0-7 3.13-7 7h2c0-2.76 2.24-5 5-5s5 2.24 5 5h2c0-3.87-3.13-7-7-7zm1 9.29c.88-.39 1.5-1.26 1.5-2.29 0-1.38-1.1 2-2.5-2.5-2.5S9.5 10.62 9.5 12c0 1.02.62 1.9 1.5 2.29v3.3L7.59 21 9 22.41l3-3 3 3L16.41 21 13 17.59v-3.3zM12 1C5.93 1 1 5.93 1 12h2c0-4.97 4.03-9 9-9s9 4.03 9 9 h2c0-6.07-4.93-11-11-11z"></path></g>
12444 <g id="settings-input-component"><path d="M5 2c0-.55-.45-1-1-1s-1 .45-1 1v4H1v6h 6V6H5V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2H9v2zm-8 0 c0 1.3.84 2.4 2 2.82V23h2v-4.18C6.16 18.4 7 17.3 7 16v-2H1v2zM21 6V2c0-.55-.45-1 -1-1s-1 .45-1 1v4h-2v6h6V6h-2zm-8-4c0-.55-.45-1-1-1s-1 .45-1 1v4H9v6h6V6h-2V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2h-6v2z"></path></g>
12445 <g id="settings-input-composite"><path d="M5 2c0-.55-.45-1-1-1s-1 .45-1 1v4H1v6h 6V6H5V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2H9v2zm-8 0 c0 1.3.84 2.4 2 2.82V23h2v-4.18C6.16 18.4 7 17.3 7 16v-2H1v2zM21 6V2c0-.55-.45-1 -1-1s-1 .45-1 1v4h-2v6h6V6h-2zm-8-4c0-.55-.45-1-1-1s-1 .45-1 1v4H9v6h6V6h-2V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2h-6v2z"></path></g>
12446 <g id="settings-input-hdmi"><path d="M18 7V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v3H 5v6l3 6v3h8v-3l3-6V7h-1zM8 4h8v3h-2V5h-1v2h-2V5h-1v2H8V4z"></path></g>
12447 <g id="settings-input-svideo"><path d="M8 11.5c0-.83-.67-1.5-1.5-1.5S5 10.67 5 1 1.5 5.67 13 6.5 13 8 12.33 8 11.5zm7-5c0-.83-.67-1.5-1.5-1.5h-3C9.67 5 9 5.67 9 6.5S9.67 8 10.5 8h3c.83 0 1.5-.67 1.5-1.5zM8.5 15c-.83 0-1.5.67-1.5 1.5S7.67 18 8.5 18s1.5-.67 1.5-1.5S9.33 15 8.5 15zM12 1C5.93 1 1 5.93 1 12s4.93 11 11 11 11- 4.93 11-11S18.07 1 12 1zm0 20c-4.96 0-9-4.04-9-9s4.04-9 9-9 9 4.04 9 9-4.04 9-9 9zm5.5-11c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z m-2 5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"></ path></g>
12448 <g id="settings-overscan"><path d="M12.01 5.5L10 8h4l-1.99-2.5zM18 10v4l2.5-1.99 L18 10zM6 10l-2.5 2.01L6 14v-4zm8 6h-4l2.01 2.5L14 16zm7-13H3c-1.1 0-2 .9-2 2v14 c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02z"></p ath></g>
12449 <g id="settings-phone"><path d="M13 9h-2v2h2V9zm4 0h-2v2h2V9zm3 6.5c-1.25 0-2.45 -.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.58l2.2 -2.21c.28-.27.36-.66.25-1.01C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM19 9v2h2V9h-2 z"></path></g>
12450 <g id="settings-power"><path d="M7 24h2v-2H7v2zm4 0h2v-2h-2v2zm2-22h-2v10h2V2zm3 .56 2.44l-1.45 1.45C16.84 6.94 18 8.83 18 11c0 3.31-2.69 6-6 6s-6-2.69-6-6c0-2.1 7 1.16-4.06 2.88-5.12L7.44 4.44C5.36 5.88 4 8.28 4 11c0 4.42 3.58 8 8 8s8-3.58 8 -8c0-2.72-1.36-5.12-3.44-6.56zM15 24h2v-2h-2v2z"></path></g>
12451 <g id="settings-remote"><path d="M15 9H9c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h6c.5 5 0 1-.45 1-1V10c0-.55-.45-1-1-1zm-3 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM7.05 6.05l1.41 1.41C9.37 6.56 10.62 6 12 6s2.63.56 3.54 1.46l1.41-1.41C15.68 4.78 13.93 4 12 4s-3.68.78-4.95 2.05zM12 0C8.96 0 6.21 1.23 4.22 3.22l1.41 1.41C 7.26 3.01 9.51 2 12 2s4.74 1.01 6.36 2.64l1.41-1.41C17.79 1.23 15.04 0 12 0z"></ path></g>
12452 <g id="settings-voice"><path d="M7 24h2v-2H7v2zm5-11c1.66 0 2.99-1.34 2.99-3L15 4c0-1.66-1.34-3-3-3S9 2.34 9 4v6c0 1.66 1.34 3 3 3zm-1 11h2v-2h-2v2zm4 0h2v-2h-2 v2zm4-14h-1.7c0 3-2.54 5.1-5.3 5.1S6.7 13 6.7 10H5c0 3.41 2.72 6.23 6 6.72V20h2v -3.28c3.28-.49 6-3.31 6-6.72z"></path></g>
12453 <g id="shop"><path d="M16 6V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H2v13c0 1.1 1.89 2 2 2h16c1.11 0 2-.89 2-2V6h-6zm-6-2h4v2h-4V4zM9 18V9l7.5 4L9 18z"></path>< /g>
12454 <g id="shop-two"><path d="M3 9H1v11c0 1.11.89 2 2 2h14c1.11 0 2-.89 2-2H3V9zm15- 4V3c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H5v11c0 1.11.89 2 2 2h14c1.11 0 2-.89 2-2V5h-5zm-6-2h4v2h-4V3zm0 12V8l5.5 3-5.5 4z"></path></g>
12455 <g id="shopping-basket"><path d="M17.21 9l-4.38-6.56c-.19-.28-.51-.42-.83-.42-.3 2 0-.64.14-.83.43L6.79 9H2c-.55 0-1 .45-1 1 0 .09.01.18.04.27l2.54 9.27c.23.84 1 1.46 1.92 1.46h13c.92 0 1.69-.62 1.93-1.46l2.54-9.27L23 10c0-.55-.45-1-1-1h-4.7 9zM9 9l3-4.4L15 9H9zm3 8c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"></path></g >
12456 <g id="shopping-cart"><path d="M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-. 9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7. 42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49 c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2 s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z"></path></g>
12457 <g id="sort"><path d="M3 18h6v-2H3v2zM3 6v2h18V6H3zm0 7h12v-2H3v2z"></path></g>
12458 <g id="speaker-notes"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2- .9 2-2V4c0-1.1-.9-2-2-2zM8 14H6v-2h2v2zm0-3H6V9h2v2zm0-3H6V6h2v2zm7 6h-5v-2h5v2z m3-3h-8V9h8v2zm0-3h-8V6h8v2z"></path></g>
12459 <g id="spellcheck"><path d="M12.45 16h2.09L9.43 3H7.57L2.46 16h2.09l1.12-3h5.64l 1.14 3zm-6.02-5L8.5 5.48 10.57 11H6.43zm15.16.59l-8.09 8.09L9.83 16l-1.41 1.41 5 .09 5.09L23 13l-1.41-1.41z"></path></g>
12460 <g id="star"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"></path></g>
12461 <g id="star-border"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L 5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.8 8 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"></path></g>
12462 <g id="star-half"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5. 82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4V6.1l1.71 4.04 4.38.38-3.32 2 .88 1 4.28L12 15.4z"></path></g>
12463 <g id="stars"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 1 7.52 22 12S17.52 2 11.99 2zm4.24 16L12 15.45 7.77 18l1.12-4.81-3.73-3.23 4.92-.4 2L12 5l1.92 4.53 4.92.42-3.73 3.23L16.23 18z"></path></g>
12464 <g id="store"><path d="M20 4H4v2h16V4zm1 10v-2l-1-5H4l-1 5v2h1v6h10v-6h4v6h2v-6h 1zm-9 4H6v-4h6v4z"></path></g>
12465 <g id="subdirectory-arrow-left"><path d="M11 9l1.42 1.42L8.83 14H18V4h2v12H8.83l 3.59 3.58L11 21l-6-6 6-6z"></path></g>
12466 <g id="subdirectory-arrow-right"><path d="M19 15l-6 6-1.42-1.42L15.17 16H4V4h2v1 0h9.17l-3.59-3.58L13 9l6 6z"></path></g>
12467 <g id="subject"><path d="M14 17H4v2h10v-2zm6-8H4v2h16V9zM4 15h16v-2H4v2zM4 5v2h1 6V5H4z"></path></g>
12468 <g id="supervisor-account"><path d="M16.5 12c1.38 0 2.49-1.12 2.49-2.5S17.88 7 1 6.5 7C15.12 7 14 8.12 14 9.5s1.12 2.5 2.5 2.5zM9 11c1.66 0 2.99-1.34 2.99-3S10.6 6 5 9 5C7.34 5 6 6.34 6 8s1.34 3 3 3zm7.5 3c-1.83 0-5.5.92-5.5 2.75V19h11v-2.25c 0-1.83-3.67-2.75-5.5-2.75zM9 13c-2.33 0-7 1.17-7 3.5V19h7v-2.25c0-.85.33-2.34 2. 37-3.47C10.5 13.1 9.66 13 9 13z"></path></g>
12469 <g id="swap-horiz"><path d="M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v 3H10v2h7.01v3L21 9z"></path></g>
12470 <g id="swap-vert"><path d="M16 17.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3 V14h2V6.99h3L9 3z"></path></g>
12471 <g id="swap-vertical-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10- 4.48 10-10S17.52 2 12 2zM6.5 9L10 5.5 13.5 9H11v4H9V9H6.5zm11 6L14 18.5 10.5 15H 13v-4h2v4h2.5z"></path></g>
12472 <g id="system-update-alt"><path d="M12 16.5l4-4h-3v-9h-2v9H8l4 4zm9-13h-6v1.99h6 v14.03H3V5.49h6V3.5H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-14c0-1 .1-.9-2-2-2z"></path></g>
12473 <g id="tab"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V 5c0-1.1-.9-2-2-2zm0 16H3V5h10v4h8v10z"></path></g>
12474 <g id="tab-unselected"><path d="M1 9h2V7H1v2zm0 4h2v-2H1v2zm0-8h2V3c-1.1 0-2 .9- 2 2zm8 16h2v-2H9v2zm-8-4h2v-2H1v2zm2 4v-2H1c0 1.1.9 2 2 2zM21 3h-8v6h10V5c0-1.1- .9-2-2-2zm0 14h2v-2h-2v2zM9 5h2V3H9v2zM5 21h2v-2H5v2zM5 5h2V3H5v2zm16 16c1.1 0 2 -.9 2-2h-2v2zm0-8h2v-2h-2v2zm-8 8h2v-2h-2v2zm4 0h2v-2h-2v2z"></path></g>
12475 <g id="text-format"><path d="M5 17v2h14v-2H5zm4.5-4.2h5l.9 2.2h2.1L12.75 4h-1.5L 6.5 15h2.1l.9-2.2zM12 5.98L13.87 11h-3.74L12 5.98z"></path></g>
12476 <g id="theaters"><path d="M18 3v2h-2V3H8v2H6V3H4v18h2v-2h2v2h8v-2h2v2h2V3h-2zM8 17H6v-2h2v2zm0-4H6v-2h2v2zm0-4H6V7h2v2zm10 8h-2v-2h2v2zm0-4h-2v-2h2v2zm0-4h-2V7h 2v2z"></path></g>
12477 <g id="thumb-down"><path d="M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-. 14.47-.14.73v1.91l.01.01L1 14c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z" ></path></g>
12478 <g id="thumb-up"><path d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03 -.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"></path></g>
12479 <g id="thumbs-up-down"><path d="M12 6c0-.55-.45-1-1-1H5.82l.66-3.18.02-.23c0-.31 -.13-.59-.33-.8L5.38 0 .44 4.94C.17 5.21 0 5.59 0 6v6.5c0 .83.67 1.5 1.5 1.5h6.7 5c.62 0 1.15-.38 1.38-.91l2.26-5.29c.07-.17.11-.36.11-.55V6zm10.5 4h-6.75c-.62 0 -1.15.38-1.38.91l-2.26 5.29c-.07.17-.11.36-.11.55V18c0 .55.45 1 1 1h5.18l-.66 3. 18-.02.24c0 .31.13.59.33.8l.79.78 4.94-4.94c.27-.27.44-.65.44-1.06v-6.5c0-.83-.6 7-1.5-1.5-1.5z"></path></g>
12480 <g id="timeline"><path d="M23 8c0 1.1-.9 2-2 2-.18 0-.35-.02-.51-.07l-3.56 3.55c .05.16.07.34.07.52 0 1.1-.9 2-2 2s-2-.9-2-2c0-.18.02-.36.07-.52l-2.55-2.55c-.16. 05-.34.07-.52.07s-.36-.02-.52-.07l-4.55 4.56c.05.16.07.33.07.51 0 1.1-.9 2-2 2s- 2-.9-2-2 .9-2 2-2c.18 0 .35.02.51.07l4.56-4.55C8.02 9.36 8 9.18 8 9c0-1.1.9-2 2- 2s2 .9 2 2c0 .18-.02.36-.07.52l2.55 2.55c.16-.05.34-.07.52-.07s.36.02.52.07l3.55 -3.56C19.02 8.35 19 8.18 19 8c0-1.1.9-2 2-2s2 .9 2 2z"></path></g>
12481 <g id="toc"><path d="M3 9h14V7H3v2zm0 4h14v-2H3v2zm0 4h14v-2H3v2zm16 0h2v-2h-2v2 zm0-10v2h2V7h-2zm0 6h2v-2h-2v2z"></path></g>
12482 <g id="today"><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1. 1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z"></pa th></g>
12483 <g id="toll"><path d="M15 4c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z m0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zM3 12c0-2.61 1.67-4.83 4-5.65V4.26C3.55 5.15 1 8.27 1 12s2.55 6.85 6 7.74v-2.09c-2.33-.82-4-3.04-4-5.6 5z"></path></g>
12484 <g id="touch-app"><path d="M9 11.24V7.5C9 6.12 10.12 5 11.5 5S14 6.12 14 7.5v3.7 4c1.21-.81 2-2.18 2-3.74C16 5.01 13.99 3 11.5 3S7 5.01 7 7.5c0 1.56.79 2.93 2 3. 74zm9.84 4.63l-4.54-2.26c-.17-.07-.35-.11-.54-.11H13v-6c0-.83-.67-1.5-1.5-1.5S10 6.67 10 7.5v10.74l-3.43-.72c-.08-.01-.15-.03-.24-.03-.31 0-.59.13-.79.33l-.79.8 4.94 4.94c.27.27.65.44 1.06.44h6.79c.75 0 1.33-.55 1.44-1.28l.75-5.27c.01-.07.0 2-.14.02-.2 0-.62-.38-1.16-.91-1.38z"></path></g>
12485 <g id="track-changes"><path d="M19.07 4.93l-1.41 1.41C19.1 7.79 20 9.79 20 12c0 4.42-3.58 8-8 8s-8-3.58-8-8c0-4.08 3.05-7.44 7-7.93v2.02C8.16 6.57 6 9.03 6 12c0 3.31 2.69 6 6 6s6-2.69 6-6c0-1.66-.67-3.16-1.76-4.24l-1.41 1.41C15.55 9.9 16 10 .9 16 12c0 2.21-1.79 4-4 4s-4-1.79-4-4c0-1.86 1.28-3.41 3-3.86v2.14c-.6.35-1 .98 -1 1.72 0 1.1.9 2 2 2s2-.9 2-2c0-.74-.4-1.38-1-1.72V2h-1C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10c0-2.76-1.12-5.26-2.93-7.07z"></path></g>
12486 <g id="translate"><path d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3. 71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9 .19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04 zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3. 24z"></path></g>
12487 <g id="trending-down"><path d="M16 18l2.29-2.29-4.88-4.88-4 4L2 7.41 3.41 6l6 6 4-4 6.3 6.29L22 12v6z"></path></g>
12488 <g id="trending-flat"><path d="M22 12l-4-4v3H3v2h15v3z"></path></g>
12489 <g id="trending-up"><path d="M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z"></path></g>
12490 <g id="turned-in"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9- 2-2-2z"></path></g>
12491 <g id="turned-in-not"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1 -.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"></path></g>
12492 <g id="unarchive"><path d="M20.55 5.22l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.15.55L3.46 5.22C3.17 5.57 3 6.01 3 6.5V19c0 1.1.89 2 2 2h14c1.1 0 2- .9 2-2V6.5c0-.49-.17-.93-.45-1.28zM12 9.5l5.5 5.5H14v2h-4v-2H6.5L12 9.5zM5.12 5l .82-1h12l.93 1H5.12z"></path></g>
12493 <g id="undo"><path d="M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1. 16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12. 5 8z"></path></g>
12494 <g id="unfold-less"><path d="M7.41 18.59L8.83 20 12 16.83 15.17 20l1.41-1.41L12 14l-4.59 4.59zm9.18-13.18L15.17 4 12 7.17 8.83 4 7.41 5.41 12 10l4.59-4.59z"></p ath></g>
12495 <g id="unfold-more"><path d="M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"></path></g >
12496 <g id="update"><path d="M21 10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-.1-2.7 3 2.71-2.73 7.08 0 9.79 2.73 2.71 7.15 2.71 9.88 0C18.32 15.65 19 14.08 19 12.1h 2c0 1.98-.88 4.55-2.64 6.29-3.51 3.48-9.21 3.48-12.72 0-3.5-3.47-3.53-9.11-.02-1 2.58 3.51-3.47 9.14-3.47 12.65 0L21 3v7.12zM12.5 8v4.25l3.5 2.08-.72 1.21L11 13V 8h1.5z"></path></g>
12497 <g id="verified-user"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6. 45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"></path></g>
12498 <g id="view-agenda"><path d="M20 13H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zm0-10H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"></path></g>
12499 <g id="view-array"><path d="M4 18h3V5H4v13zM18 5v13h3V5h-3zM8 18h9V5H8v13z"></pa th></g>
12500 <g id="view-carousel"><path d="M7 19h10V4H7v15zm-5-2h4V6H2v11zM18 6v11h4V6h-4z"> </path></g>
12501 <g id="view-column"><path d="M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z">< /path></g>
12502 <g id="view-day"><path d="M2 21h19v-3H2v3zM20 8H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zM2 3v3h19V3H2z"></path></g>
12503 <g id="view-headline"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6 v2h16V5H4z"></path></g>
12504 <g id="view-list"><path d="M4 14h4v-4H4v4zm0 5h4v-4H4v4zM4 9h4V5H4v4zm5 5h12v-4H 9v4zm0 5h12v-4H9v4zM9 5v4h12V5H9z"></path></g>
12505 <g id="view-module"><path d="M4 11h5V5H4v6zm0 7h5v-6H4v6zm6 0h5v-6h-5v6zm6 0h5v- 6h-5v6zm-6-7h5V5h-5v6zm6-6v6h5V5h-5z"></path></g>
12506 <g id="view-quilt"><path d="M10 18h5v-6h-5v6zm-6 0h5V5H4v13zm12 0h5v-6h-5v6zM10 5v6h11V5H10z"></path></g>
12507 <g id="view-stream"><path d="M4 18h17v-6H4v6zM4 5v6h17V5H4z"></path></g>
12508 <g id="view-week"><path d="M6 5H3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-. 45 1-1V6c0-.55-.45-1-1-1zm14 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-. 45 1-1V6c0-.55-.45-1-1-1zm-7 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-. 45 1-1V6c0-.55-.45-1-1-1z"></path></g>
12509 <g id="visibility"><path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s 9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z">< /path></g>
12510 <g id="visibility-off"><path d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l 2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98 .7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3. 27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .4 4-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53- 2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"></path></g>
12511 <g id="warning"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"></p ath></g>
12512 <g id="watch-later"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17 .5 2 12 2zm4.2 14.2L11 13V7h1.5v5.2l4.5 2.7-.8 1.3z"></path></g>
12513 <g id="weekend"><path d="M21 10c-1.1 0-2 .9-2 2v3H5v-3c0-1.1-.9-2-2-2s-2 .9-2 2v 5c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-5c0-1.1-.9-2-2-2zm-3-5H6c-1.1 0-2 .9-2 2v2.15 c1.16.41 2 1.51 2 2.82V14h12v-2.03c0-1.3.84-2.4 2-2.82V7c0-1.1-.9-2-2-2z"></path ></g>
12514 <g id="work"><path d="M20 6h-4V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm- 6 0h-4V4h4v2z"></path></g>
12515 <g id="youtube-searched-for"><path d="M17.01 14h-.8l-.27-.27c.98-1.14 1.57-2.61 1.57-4.23 0-3.59-2.91-6.5-6.5-6.5s-6.5 3-6.5 6.5H2l3.84 4 4.16-4H6.51C6.51 7 8.5 3 5 11.01 5s4.5 2.01 4.5 4.5c0 2.48-2.02 4.5-4.5 4.5-.65 0-1.26-.14-1.82-.38L7.7 1 15.1c.97.57 2.09.9 3.3.9 1.61 0 3.08-.59 4.22-1.57l.27.27v.79l5.01 4.99L22 19l -4.99-5z"></path></g>
12516 <g id="zoom-in"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5 .91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v. 79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9 .5 11.99 14 9.5 14zm2.5-4h-2v2H9v-2H7V9h2V7h1v2h2v1z"></path></g>
12517 <g id="zoom-out"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v .79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zM7 9h5v1H7z"></path></g>
12518 </defs></svg>
12519 </iron-iconset-svg>
12520 <script>
12521 (function() {
12522 'use strict';
12523
12524 /**
12525 * Chrome uses an older version of DOM Level 3 Keyboard Events
12526 *
12527 * Most keys are labeled as text, but some are Unicode codepoints.
12528 * Values taken from: http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-200712 21/keyset.html#KeySet-Set
12529 */
12530 var KEY_IDENTIFIER = {
12531 'U+0008': 'backspace',
12532 'U+0009': 'tab',
12533 'U+001B': 'esc',
12534 'U+0020': 'space',
12535 'U+007F': 'del'
12536 };
12537
12538 /**
12539 * Special table for KeyboardEvent.keyCode.
12540 * KeyboardEvent.keyIdentifier is better, and KeyBoardEvent.key is even bett er
12541 * than that.
12542 *
12543 * Values from: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEve nt.keyCode#Value_of_keyCode
12544 */
12545 var KEY_CODE = {
12546 8: 'backspace',
12547 9: 'tab',
12548 13: 'enter',
12549 27: 'esc',
12550 33: 'pageup',
12551 34: 'pagedown',
12552 35: 'end',
12553 36: 'home',
12554 32: 'space',
12555 37: 'left',
12556 38: 'up',
12557 39: 'right',
12558 40: 'down',
12559 46: 'del',
12560 106: '*'
12561 };
12562
12563 /**
12564 * MODIFIER_KEYS maps the short name for modifier keys used in a key
12565 * combo string to the property name that references those same keys
12566 * in a KeyboardEvent instance.
12567 */
12568 var MODIFIER_KEYS = {
12569 'shift': 'shiftKey',
12570 'ctrl': 'ctrlKey',
12571 'alt': 'altKey',
12572 'meta': 'metaKey'
12573 };
12574
12575 /**
12576 * KeyboardEvent.key is mostly represented by printable character made by
12577 * the keyboard, with unprintable keys labeled nicely.
12578 *
12579 * However, on OS X, Alt+char can make a Unicode character that follows an
12580 * Apple-specific mapping. In this case, we fall back to .keyCode.
12581 */
12582 var KEY_CHAR = /[a-z0-9*]/;
12583
12584 /**
12585 * Matches a keyIdentifier string.
12586 */
12587 var IDENT_CHAR = /U\+/;
12588
12589 /**
12590 * Matches arrow keys in Gecko 27.0+
12591 */
12592 var ARROW_KEY = /^arrow/;
12593
12594 /**
12595 * Matches space keys everywhere (notably including IE10's exceptional name
12596 * `spacebar`).
12597 */
12598 var SPACE_KEY = /^space(bar)?/;
12599
12600 /**
12601 * Matches ESC key.
12602 *
12603 * Value from: http://w3c.github.io/uievents-key/#key-Escape
12604 */
12605 var ESC_KEY = /^escape$/;
12606
12607 /**
12608 * Transforms the key.
12609 * @param {string} key The KeyBoardEvent.key
12610 * @param {Boolean} [noSpecialChars] Limits the transformation to
12611 * alpha-numeric characters.
12612 */
12613 function transformKey(key, noSpecialChars) {
12614 var validKey = '';
12615 if (key) {
12616 var lKey = key.toLowerCase();
12617 if (lKey === ' ' || SPACE_KEY.test(lKey)) {
12618 validKey = 'space';
12619 } else if (ESC_KEY.test(lKey)) {
12620 validKey = 'esc';
12621 } else if (lKey.length == 1) {
12622 if (!noSpecialChars || KEY_CHAR.test(lKey)) {
12623 validKey = lKey;
12624 }
12625 } else if (ARROW_KEY.test(lKey)) {
12626 validKey = lKey.replace('arrow', '');
12627 } else if (lKey == 'multiply') {
12628 // numpad '*' can map to Multiply on IE/Windows
12629 validKey = '*';
12630 } else {
12631 validKey = lKey;
12632 }
12633 }
12634 return validKey;
12635 }
12636
12637 function transformKeyIdentifier(keyIdent) {
12638 var validKey = '';
12639 if (keyIdent) {
12640 if (keyIdent in KEY_IDENTIFIER) {
12641 validKey = KEY_IDENTIFIER[keyIdent];
12642 } else if (IDENT_CHAR.test(keyIdent)) {
12643 keyIdent = parseInt(keyIdent.replace('U+', '0x'), 16);
12644 validKey = String.fromCharCode(keyIdent).toLowerCase();
12645 } else {
12646 validKey = keyIdent.toLowerCase();
12647 }
12648 }
12649 return validKey;
12650 }
12651
12652 function transformKeyCode(keyCode) {
12653 var validKey = '';
12654 if (Number(keyCode)) {
12655 if (keyCode >= 65 && keyCode <= 90) {
12656 // ascii a-z
12657 // lowercase is 32 offset from uppercase
12658 validKey = String.fromCharCode(32 + keyCode);
12659 } else if (keyCode >= 112 && keyCode <= 123) {
12660 // function keys f1-f12
12661 validKey = 'f' + (keyCode - 112);
12662 } else if (keyCode >= 48 && keyCode <= 57) {
12663 // top 0-9 keys
12664 validKey = String(keyCode - 48);
12665 } else if (keyCode >= 96 && keyCode <= 105) {
12666 // num pad 0-9
12667 validKey = String(keyCode - 96);
12668 } else {
12669 validKey = KEY_CODE[keyCode];
12670 }
12671 }
12672 return validKey;
12673 }
12674
12675 /**
12676 * Calculates the normalized key for a KeyboardEvent.
12677 * @param {KeyboardEvent} keyEvent
12678 * @param {Boolean} [noSpecialChars] Set to true to limit keyEvent.key
12679 * transformation to alpha-numeric chars. This is useful with key
12680 * combinations like shift + 2, which on FF for MacOS produces
12681 * keyEvent.key = @
12682 * To get 2 returned, set noSpecialChars = true
12683 * To get @ returned, set noSpecialChars = false
12684 */
12685 function normalizedKeyForEvent(keyEvent, noSpecialChars) {
12686 // Fall back from .key, to .keyIdentifier, to .keyCode, and then to
12687 // .detail.key to support artificial keyboard events.
12688 return transformKey(keyEvent.key, noSpecialChars) ||
12689 transformKeyIdentifier(keyEvent.keyIdentifier) ||
12690 transformKeyCode(keyEvent.keyCode) ||
12691 transformKey(keyEvent.detail ? keyEvent.detail.key : keyEvent.detail, no SpecialChars) || '';
12692 }
12693
12694 function keyComboMatchesEvent(keyCombo, event) {
12695 // For combos with modifiers we support only alpha-numeric keys
12696 var keyEvent = normalizedKeyForEvent(event, keyCombo.hasModifiers);
12697 return keyEvent === keyCombo.key &&
12698 (!keyCombo.hasModifiers || (
12699 !!event.shiftKey === !!keyCombo.shiftKey &&
12700 !!event.ctrlKey === !!keyCombo.ctrlKey &&
12701 !!event.altKey === !!keyCombo.altKey &&
12702 !!event.metaKey === !!keyCombo.metaKey)
12703 );
12704 }
12705
12706 function parseKeyComboString(keyComboString) {
12707 if (keyComboString.length === 1) {
12708 return {
12709 combo: keyComboString,
12710 key: keyComboString,
12711 event: 'keydown'
12712 };
12713 }
12714 return keyComboString.split('+').reduce(function(parsedKeyCombo, keyComboP art) {
12715 var eventParts = keyComboPart.split(':');
12716 var keyName = eventParts[0];
12717 var event = eventParts[1];
12718
12719 if (keyName in MODIFIER_KEYS) {
12720 parsedKeyCombo[MODIFIER_KEYS[keyName]] = true;
12721 parsedKeyCombo.hasModifiers = true;
12722 } else {
12723 parsedKeyCombo.key = keyName;
12724 parsedKeyCombo.event = event || 'keydown';
12725 }
12726
12727 return parsedKeyCombo;
12728 }, {
12729 combo: keyComboString.split(':').shift()
12730 });
12731 }
12732
12733 function parseEventString(eventString) {
12734 return eventString.trim().split(' ').map(function(keyComboString) {
12735 return parseKeyComboString(keyComboString);
12736 });
12737 }
12738
12739 /**
12740 * `Polymer.IronA11yKeysBehavior` provides a normalized interface for proces sing
12741 * keyboard commands that pertain to [WAI-ARIA best practices](http://www.w3 .org/TR/wai-aria-practices/#kbd_general_binding).
12742 * The element takes care of browser differences with respect to Keyboard ev ents
12743 * and uses an expressive syntax to filter key presses.
12744 *
12745 * Use the `keyBindings` prototype property to express what combination of k eys
12746 * will trigger the callback. A key binding has the format
12747 * `"KEY+MODIFIER:EVENT": "callback"` (`"KEY": "callback"` or
12748 * `"KEY:EVENT": "callback"` are valid as well). Some examples:
12749 *
12750 * keyBindings: {
12751 * 'space': '_onKeydown', // same as 'space:keydown'
12752 * 'shift+tab': '_onKeydown',
12753 * 'enter:keypress': '_onKeypress',
12754 * 'esc:keyup': '_onKeyup'
12755 * }
12756 *
12757 * The callback will receive with an event containing the following informat ion in `event.detail`:
12758 *
12759 * _onKeydown: function(event) {
12760 * console.log(event.detail.combo); // KEY+MODIFIER, e.g. "shift+tab"
12761 * console.log(event.detail.key); // KEY only, e.g. "tab"
12762 * console.log(event.detail.event); // EVENT, e.g. "keydown"
12763 * console.log(event.detail.keyboardEvent); // the original KeyboardE vent
12764 * }
12765 *
12766 * Use the `keyEventTarget` attribute to set up event handlers on a specific
12767 * node.
12768 *
12769 * See the [demo source code](https://github.com/PolymerElements/iron-a11y-k eys-behavior/blob/master/demo/x-key-aware.html)
12770 * for an example.
12771 *
12772 * @demo demo/index.html
12773 * @polymerBehavior
12774 */
12775 Polymer.IronA11yKeysBehavior = {
12776 properties: {
12777 /**
12778 * The EventTarget that will be firing relevant KeyboardEvents. Set it t o
12779 * `null` to disable the listeners.
12780 * @type {?EventTarget}
12781 */
12782 keyEventTarget: {
12783 type: Object,
12784 value: function() {
12785 return this;
12786 }
12787 },
12788
12789 /**
12790 * If true, this property will cause the implementing element to
12791 * automatically stop propagation on any handled KeyboardEvents.
12792 */
12793 stopKeyboardEventPropagation: {
12794 type: Boolean,
12795 value: false
12796 },
12797
12798 _boundKeyHandlers: {
12799 type: Array,
12800 value: function() {
12801 return [];
12802 }
12803 },
12804
12805 // We use this due to a limitation in IE10 where instances will have
12806 // own properties of everything on the "prototype".
12807 _imperativeKeyBindings: {
12808 type: Object,
12809 value: function() {
12810 return {};
12811 }
12812 }
12813 },
12814
12815 observers: [
12816 '_resetKeyEventListeners(keyEventTarget, _boundKeyHandlers)'
12817 ],
12818
12819
12820 /**
12821 * To be used to express what combination of keys will trigger the relati ve
12822 * callback. e.g. `keyBindings: { 'esc': '_onEscPressed'}`
12823 * @type {Object}
12824 */
12825 keyBindings: {},
12826
12827 registered: function() {
12828 this._prepKeyBindings();
12829 },
12830
12831 attached: function() {
12832 this._listenKeyEventListeners();
12833 },
12834
12835 detached: function() {
12836 this._unlistenKeyEventListeners();
12837 },
12838
12839 /**
12840 * Can be used to imperatively add a key binding to the implementing
12841 * element. This is the imperative equivalent of declaring a keybinding
12842 * in the `keyBindings` prototype property.
12843 */
12844 addOwnKeyBinding: function(eventString, handlerName) {
12845 this._imperativeKeyBindings[eventString] = handlerName;
12846 this._prepKeyBindings();
12847 this._resetKeyEventListeners();
12848 },
12849
12850 /**
12851 * When called, will remove all imperatively-added key bindings.
12852 */
12853 removeOwnKeyBindings: function() {
12854 this._imperativeKeyBindings = {};
12855 this._prepKeyBindings();
12856 this._resetKeyEventListeners();
12857 },
12858
12859 /**
12860 * Returns true if a keyboard event matches `eventString`.
12861 *
12862 * @param {KeyboardEvent} event
12863 * @param {string} eventString
12864 * @return {boolean}
12865 */
12866 keyboardEventMatchesKeys: function(event, eventString) {
12867 var keyCombos = parseEventString(eventString);
12868 for (var i = 0; i < keyCombos.length; ++i) {
12869 if (keyComboMatchesEvent(keyCombos[i], event)) {
12870 return true;
12871 }
12872 }
12873 return false;
12874 },
12875
12876 _collectKeyBindings: function() {
12877 var keyBindings = this.behaviors.map(function(behavior) {
12878 return behavior.keyBindings;
12879 });
12880
12881 if (keyBindings.indexOf(this.keyBindings) === -1) {
12882 keyBindings.push(this.keyBindings);
12883 }
12884
12885 return keyBindings;
12886 },
12887
12888 _prepKeyBindings: function() {
12889 this._keyBindings = {};
12890
12891 this._collectKeyBindings().forEach(function(keyBindings) {
12892 for (var eventString in keyBindings) {
12893 this._addKeyBinding(eventString, keyBindings[eventString]);
12894 }
12895 }, this);
12896
12897 for (var eventString in this._imperativeKeyBindings) {
12898 this._addKeyBinding(eventString, this._imperativeKeyBindings[eventStri ng]);
12899 }
12900
12901 // Give precedence to combos with modifiers to be checked first.
12902 for (var eventName in this._keyBindings) {
12903 this._keyBindings[eventName].sort(function (kb1, kb2) {
12904 var b1 = kb1[0].hasModifiers;
12905 var b2 = kb2[0].hasModifiers;
12906 return (b1 === b2) ? 0 : b1 ? -1 : 1;
12907 })
12908 }
12909 },
12910
12911 _addKeyBinding: function(eventString, handlerName) {
12912 parseEventString(eventString).forEach(function(keyCombo) {
12913 this._keyBindings[keyCombo.event] =
12914 this._keyBindings[keyCombo.event] || [];
12915
12916 this._keyBindings[keyCombo.event].push([
12917 keyCombo,
12918 handlerName
12919 ]);
12920 }, this);
12921 },
12922
12923 _resetKeyEventListeners: function() {
12924 this._unlistenKeyEventListeners();
12925
12926 if (this.isAttached) {
12927 this._listenKeyEventListeners();
12928 }
12929 },
12930
12931 _listenKeyEventListeners: function() {
12932 if (!this.keyEventTarget) {
12933 return;
12934 }
12935 Object.keys(this._keyBindings).forEach(function(eventName) {
12936 var keyBindings = this._keyBindings[eventName];
12937 var boundKeyHandler = this._onKeyBindingEvent.bind(this, keyBindings);
12938
12939 this._boundKeyHandlers.push([this.keyEventTarget, eventName, boundKeyH andler]);
12940
12941 this.keyEventTarget.addEventListener(eventName, boundKeyHandler);
12942 }, this);
12943 },
12944
12945 _unlistenKeyEventListeners: function() {
12946 var keyHandlerTuple;
12947 var keyEventTarget;
12948 var eventName;
12949 var boundKeyHandler;
12950
12951 while (this._boundKeyHandlers.length) {
12952 // My kingdom for block-scope binding and destructuring assignment..
12953 keyHandlerTuple = this._boundKeyHandlers.pop();
12954 keyEventTarget = keyHandlerTuple[0];
12955 eventName = keyHandlerTuple[1];
12956 boundKeyHandler = keyHandlerTuple[2];
12957
12958 keyEventTarget.removeEventListener(eventName, boundKeyHandler);
12959 }
12960 },
12961
12962 _onKeyBindingEvent: function(keyBindings, event) {
12963 if (this.stopKeyboardEventPropagation) {
12964 event.stopPropagation();
12965 }
12966
12967 // if event has been already prevented, don't do anything
12968 if (event.defaultPrevented) {
12969 return;
12970 }
12971
12972 for (var i = 0; i < keyBindings.length; i++) {
12973 var keyCombo = keyBindings[i][0];
12974 var handlerName = keyBindings[i][1];
12975 if (keyComboMatchesEvent(keyCombo, event)) {
12976 this._triggerKeyHandler(keyCombo, handlerName, event);
12977 // exit the loop if eventDefault was prevented
12978 if (event.defaultPrevented) {
12979 return;
12980 }
12981 }
12982 }
12983 },
12984
12985 _triggerKeyHandler: function(keyCombo, handlerName, keyboardEvent) {
12986 var detail = Object.create(keyCombo);
12987 detail.keyboardEvent = keyboardEvent;
12988 var event = new CustomEvent(keyCombo.event, {
12989 detail: detail,
12990 cancelable: true
12991 });
12992 this[handlerName].call(this, event);
12993 if (event.defaultPrevented) {
12994 keyboardEvent.preventDefault();
12995 }
12996 }
12997 };
12998 })();
12999 </script>
13000 <script>
13001
13002 /**
13003 * @demo demo/index.html
13004 * @polymerBehavior
13005 */
13006 Polymer.IronControlState = {
13007
13008 properties: {
13009
13010 /**
13011 * If true, the element currently has focus.
13012 */
13013 focused: {
13014 type: Boolean,
13015 value: false,
13016 notify: true,
13017 readOnly: true,
13018 reflectToAttribute: true
13019 },
13020
13021 /**
13022 * If true, the user cannot interact with this element.
13023 */
13024 disabled: {
13025 type: Boolean,
13026 value: false,
13027 notify: true,
13028 observer: '_disabledChanged',
13029 reflectToAttribute: true
13030 },
13031
13032 _oldTabIndex: {
13033 type: Number
13034 },
13035
13036 _boundFocusBlurHandler: {
13037 type: Function,
13038 value: function() {
13039 return this._focusBlurHandler.bind(this);
13040 }
13041 }
13042
13043 },
13044
13045 observers: [
13046 '_changedControlState(focused, disabled)'
13047 ],
13048
13049 ready: function() {
13050 this.addEventListener('focus', this._boundFocusBlurHandler, true);
13051 this.addEventListener('blur', this._boundFocusBlurHandler, true);
13052 },
13053
13054 _focusBlurHandler: function(event) {
13055 // NOTE(cdata): if we are in ShadowDOM land, `event.target` will
13056 // eventually become `this` due to retargeting; if we are not in
13057 // ShadowDOM land, `event.target` will eventually become `this` due
13058 // to the second conditional which fires a synthetic event (that is also
13059 // handled). In either case, we can disregard `event.path`.
13060
13061 if (event.target === this) {
13062 this._setFocused(event.type === 'focus');
13063 } else if (!this.shadowRoot) {
13064 var target = /** @type {Node} */(Polymer.dom(event).localTarget);
13065 if (!this.isLightDescendant(target)) {
13066 this.fire(event.type, {sourceEvent: event}, {
13067 node: this,
13068 bubbles: event.bubbles,
13069 cancelable: event.cancelable
13070 });
13071 }
13072 }
13073 },
13074
13075 _disabledChanged: function(disabled, old) {
13076 this.setAttribute('aria-disabled', disabled ? 'true' : 'false');
13077 this.style.pointerEvents = disabled ? 'none' : '';
13078 if (disabled) {
13079 this._oldTabIndex = this.tabIndex;
13080 this._setFocused(false);
13081 this.tabIndex = -1;
13082 this.blur();
13083 } else if (this._oldTabIndex !== undefined) {
13084 this.tabIndex = this._oldTabIndex;
13085 }
13086 },
13087
13088 _changedControlState: function() {
13089 // _controlStateChanged is abstract, follow-on behaviors may implement it
13090 if (this._controlStateChanged) {
13091 this._controlStateChanged();
13092 }
13093 }
13094
13095 };
13096
13097 </script>
13098 <script>
13099
13100 /**
13101 * @demo demo/index.html
13102 * @polymerBehavior Polymer.IronButtonState
13103 */
13104 Polymer.IronButtonStateImpl = {
13105
13106 properties: {
13107
13108 /**
13109 * If true, the user is currently holding down the button.
13110 */
13111 pressed: {
13112 type: Boolean,
13113 readOnly: true,
13114 value: false,
13115 reflectToAttribute: true,
13116 observer: '_pressedChanged'
13117 },
13118
13119 /**
13120 * If true, the button toggles the active state with each tap or press
13121 * of the spacebar.
13122 */
13123 toggles: {
13124 type: Boolean,
13125 value: false,
13126 reflectToAttribute: true
13127 },
13128
13129 /**
13130 * If true, the button is a toggle and is currently in the active state.
13131 */
13132 active: {
13133 type: Boolean,
13134 value: false,
13135 notify: true,
13136 reflectToAttribute: true
13137 },
13138
13139 /**
13140 * True if the element is currently being pressed by a "pointer," which
13141 * is loosely defined as mouse or touch input (but specifically excluding
13142 * keyboard input).
13143 */
13144 pointerDown: {
13145 type: Boolean,
13146 readOnly: true,
13147 value: false
13148 },
13149
13150 /**
13151 * True if the input device that caused the element to receive focus
13152 * was a keyboard.
13153 */
13154 receivedFocusFromKeyboard: {
13155 type: Boolean,
13156 readOnly: true
13157 },
13158
13159 /**
13160 * The aria attribute to be set if the button is a toggle and in the
13161 * active state.
13162 */
13163 ariaActiveAttribute: {
13164 type: String,
13165 value: 'aria-pressed',
13166 observer: '_ariaActiveAttributeChanged'
13167 }
13168 },
13169
13170 listeners: {
13171 down: '_downHandler',
13172 up: '_upHandler',
13173 tap: '_tapHandler'
13174 },
13175
13176 observers: [
13177 '_detectKeyboardFocus(focused)',
13178 '_activeChanged(active, ariaActiveAttribute)'
13179 ],
13180
13181 keyBindings: {
13182 'enter:keydown': '_asyncClick',
13183 'space:keydown': '_spaceKeyDownHandler',
13184 'space:keyup': '_spaceKeyUpHandler',
13185 },
13186
13187 _mouseEventRe: /^mouse/,
13188
13189 _tapHandler: function() {
13190 if (this.toggles) {
13191 // a tap is needed to toggle the active state
13192 this._userActivate(!this.active);
13193 } else {
13194 this.active = false;
13195 }
13196 },
13197
13198 _detectKeyboardFocus: function(focused) {
13199 this._setReceivedFocusFromKeyboard(!this.pointerDown && focused);
13200 },
13201
13202 // to emulate native checkbox, (de-)activations from a user interaction fire
13203 // 'change' events
13204 _userActivate: function(active) {
13205 if (this.active !== active) {
13206 this.active = active;
13207 this.fire('change');
13208 }
13209 },
13210
13211 _downHandler: function(event) {
13212 this._setPointerDown(true);
13213 this._setPressed(true);
13214 this._setReceivedFocusFromKeyboard(false);
13215 },
13216
13217 _upHandler: function() {
13218 this._setPointerDown(false);
13219 this._setPressed(false);
13220 },
13221
13222 /**
13223 * @param {!KeyboardEvent} event .
13224 */
13225 _spaceKeyDownHandler: function(event) {
13226 var keyboardEvent = event.detail.keyboardEvent;
13227 var target = Polymer.dom(keyboardEvent).localTarget;
13228
13229 // Ignore the event if this is coming from a focused light child, since th at
13230 // element will deal with it.
13231 if (this.isLightDescendant(/** @type {Node} */(target)))
13232 return;
13233
13234 keyboardEvent.preventDefault();
13235 keyboardEvent.stopImmediatePropagation();
13236 this._setPressed(true);
13237 },
13238
13239 /**
13240 * @param {!KeyboardEvent} event .
13241 */
13242 _spaceKeyUpHandler: function(event) {
13243 var keyboardEvent = event.detail.keyboardEvent;
13244 var target = Polymer.dom(keyboardEvent).localTarget;
13245
13246 // Ignore the event if this is coming from a focused light child, since th at
13247 // element will deal with it.
13248 if (this.isLightDescendant(/** @type {Node} */(target)))
13249 return;
13250
13251 if (this.pressed) {
13252 this._asyncClick();
13253 }
13254 this._setPressed(false);
13255 },
13256
13257 // trigger click asynchronously, the asynchrony is useful to allow one
13258 // event handler to unwind before triggering another event
13259 _asyncClick: function() {
13260 this.async(function() {
13261 this.click();
13262 }, 1);
13263 },
13264
13265 // any of these changes are considered a change to button state
13266
13267 _pressedChanged: function(pressed) {
13268 this._changedButtonState();
13269 },
13270
13271 _ariaActiveAttributeChanged: function(value, oldValue) {
13272 if (oldValue && oldValue != value && this.hasAttribute(oldValue)) {
13273 this.removeAttribute(oldValue);
13274 }
13275 },
13276
13277 _activeChanged: function(active, ariaActiveAttribute) {
13278 if (this.toggles) {
13279 this.setAttribute(this.ariaActiveAttribute,
13280 active ? 'true' : 'false');
13281 } else {
13282 this.removeAttribute(this.ariaActiveAttribute);
13283 }
13284 this._changedButtonState();
13285 },
13286
13287 _controlStateChanged: function() {
13288 if (this.disabled) {
13289 this._setPressed(false);
13290 } else {
13291 this._changedButtonState();
13292 }
13293 },
13294
13295 // provide hook for follow-on behaviors to react to button-state
13296
13297 _changedButtonState: function() {
13298 if (this._buttonStateChanged) {
13299 this._buttonStateChanged(); // abstract
13300 }
13301 }
13302
13303 };
13304
13305 /** @polymerBehavior */
13306 Polymer.IronButtonState = [
13307 Polymer.IronA11yKeysBehavior,
13308 Polymer.IronButtonStateImpl
13309 ];
13310
13311 </script>
13312
13313
13314 <dom-module id="paper-ripple" assetpath="/res/imp/bower_components/paper-ripple/ ">
13315
13316 <template>
13317 <style>
13318 :host {
13319 display: block;
13320 position: absolute;
13321 border-radius: inherit;
13322 overflow: hidden;
13323 top: 0;
13324 left: 0;
13325 right: 0;
13326 bottom: 0;
13327
13328 /* See PolymerElements/paper-behaviors/issues/34. On non-Chrome browsers ,
13329 * creating a node (with a position:absolute) in the middle of an event
13330 * handler "interrupts" that event handler (which happens when the
13331 * ripple is created on demand) */
13332 pointer-events: none;
13333 }
13334
13335 :host([animating]) {
13336 /* This resolves a rendering issue in Chrome (as of 40) where the
13337 ripple is not properly clipped by its parent (which may have
13338 rounded corners). See: http://jsbin.com/temexa/4
13339
13340 Note: We only apply this style conditionally. Otherwise, the browser
13341 will create a new compositing layer for every ripple element on the
13342 page, and that would be bad. */
13343 -webkit-transform: translate(0, 0);
13344 transform: translate3d(0, 0, 0);
13345 }
13346
13347 #background,
13348 #waves,
13349 .wave-container,
13350 .wave {
13351 pointer-events: none;
13352 position: absolute;
13353 top: 0;
13354 left: 0;
13355 width: 100%;
13356 height: 100%;
13357 }
13358
13359 #background,
13360 .wave {
13361 opacity: 0;
13362 }
13363
13364 #waves,
13365 .wave {
13366 overflow: hidden;
13367 }
13368
13369 .wave-container,
13370 .wave {
13371 border-radius: 50%;
13372 }
13373
13374 :host(.circle) #background,
13375 :host(.circle) #waves {
13376 border-radius: 50%;
13377 }
13378
13379 :host(.circle) .wave-container {
13380 overflow: hidden;
13381 }
13382 </style>
13383
13384 <div id="background"></div>
13385 <div id="waves"></div>
13386 </template>
13387 </dom-module>
13388 <script>
13389 (function() {
13390 var Utility = {
13391 distance: function(x1, y1, x2, y2) {
13392 var xDelta = (x1 - x2);
13393 var yDelta = (y1 - y2);
13394
13395 return Math.sqrt(xDelta * xDelta + yDelta * yDelta);
13396 },
13397
13398 now: window.performance && window.performance.now ?
13399 window.performance.now.bind(window.performance) : Date.now
13400 };
13401
13402 /**
13403 * @param {HTMLElement} element
13404 * @constructor
13405 */
13406 function ElementMetrics(element) {
13407 this.element = element;
13408 this.width = this.boundingRect.width;
13409 this.height = this.boundingRect.height;
13410
13411 this.size = Math.max(this.width, this.height);
13412 }
13413
13414 ElementMetrics.prototype = {
13415 get boundingRect () {
13416 return this.element.getBoundingClientRect();
13417 },
13418
13419 furthestCornerDistanceFrom: function(x, y) {
13420 var topLeft = Utility.distance(x, y, 0, 0);
13421 var topRight = Utility.distance(x, y, this.width, 0);
13422 var bottomLeft = Utility.distance(x, y, 0, this.height);
13423 var bottomRight = Utility.distance(x, y, this.width, this.height);
13424
13425 return Math.max(topLeft, topRight, bottomLeft, bottomRight);
13426 }
13427 };
13428
13429 /**
13430 * @param {HTMLElement} element
13431 * @constructor
13432 */
13433 function Ripple(element) {
13434 this.element = element;
13435 this.color = window.getComputedStyle(element).color;
13436
13437 this.wave = document.createElement('div');
13438 this.waveContainer = document.createElement('div');
13439 this.wave.style.backgroundColor = this.color;
13440 this.wave.classList.add('wave');
13441 this.waveContainer.classList.add('wave-container');
13442 Polymer.dom(this.waveContainer).appendChild(this.wave);
13443
13444 this.resetInteractionState();
13445 }
13446
13447 Ripple.MAX_RADIUS = 300;
13448
13449 Ripple.prototype = {
13450 get recenters() {
13451 return this.element.recenters;
13452 },
13453
13454 get center() {
13455 return this.element.center;
13456 },
13457
13458 get mouseDownElapsed() {
13459 var elapsed;
13460
13461 if (!this.mouseDownStart) {
13462 return 0;
13463 }
13464
13465 elapsed = Utility.now() - this.mouseDownStart;
13466
13467 if (this.mouseUpStart) {
13468 elapsed -= this.mouseUpElapsed;
13469 }
13470
13471 return elapsed;
13472 },
13473
13474 get mouseUpElapsed() {
13475 return this.mouseUpStart ?
13476 Utility.now () - this.mouseUpStart : 0;
13477 },
13478
13479 get mouseDownElapsedSeconds() {
13480 return this.mouseDownElapsed / 1000;
13481 },
13482
13483 get mouseUpElapsedSeconds() {
13484 return this.mouseUpElapsed / 1000;
13485 },
13486
13487 get mouseInteractionSeconds() {
13488 return this.mouseDownElapsedSeconds + this.mouseUpElapsedSeconds;
13489 },
13490
13491 get initialOpacity() {
13492 return this.element.initialOpacity;
13493 },
13494
13495 get opacityDecayVelocity() {
13496 return this.element.opacityDecayVelocity;
13497 },
13498
13499 get radius() {
13500 var width2 = this.containerMetrics.width * this.containerMetrics.width;
13501 var height2 = this.containerMetrics.height * this.containerMetrics.heigh t;
13502 var waveRadius = Math.min(
13503 Math.sqrt(width2 + height2),
13504 Ripple.MAX_RADIUS
13505 ) * 1.1 + 5;
13506
13507 var duration = 1.1 - 0.2 * (waveRadius / Ripple.MAX_RADIUS);
13508 var timeNow = this.mouseInteractionSeconds / duration;
13509 var size = waveRadius * (1 - Math.pow(80, -timeNow));
13510
13511 return Math.abs(size);
13512 },
13513
13514 get opacity() {
13515 if (!this.mouseUpStart) {
13516 return this.initialOpacity;
13517 }
13518
13519 return Math.max(
13520 0,
13521 this.initialOpacity - this.mouseUpElapsedSeconds * this.opacityDecayVe locity
13522 );
13523 },
13524
13525 get outerOpacity() {
13526 // Linear increase in background opacity, capped at the opacity
13527 // of the wavefront (waveOpacity).
13528 var outerOpacity = this.mouseUpElapsedSeconds * 0.3;
13529 var waveOpacity = this.opacity;
13530
13531 return Math.max(
13532 0,
13533 Math.min(outerOpacity, waveOpacity)
13534 );
13535 },
13536
13537 get isOpacityFullyDecayed() {
13538 return this.opacity < 0.01 &&
13539 this.radius >= Math.min(this.maxRadius, Ripple.MAX_RADIUS);
13540 },
13541
13542 get isRestingAtMaxRadius() {
13543 return this.opacity >= this.initialOpacity &&
13544 this.radius >= Math.min(this.maxRadius, Ripple.MAX_RADIUS);
13545 },
13546
13547 get isAnimationComplete() {
13548 return this.mouseUpStart ?
13549 this.isOpacityFullyDecayed : this.isRestingAtMaxRadius;
13550 },
13551
13552 get translationFraction() {
13553 return Math.min(
13554 1,
13555 this.radius / this.containerMetrics.size * 2 / Math.sqrt(2)
13556 );
13557 },
13558
13559 get xNow() {
13560 if (this.xEnd) {
13561 return this.xStart + this.translationFraction * (this.xEnd - this.xSta rt);
13562 }
13563
13564 return this.xStart;
13565 },
13566
13567 get yNow() {
13568 if (this.yEnd) {
13569 return this.yStart + this.translationFraction * (this.yEnd - this.ySta rt);
13570 }
13571
13572 return this.yStart;
13573 },
13574
13575 get isMouseDown() {
13576 return this.mouseDownStart && !this.mouseUpStart;
13577 },
13578
13579 resetInteractionState: function() {
13580 this.maxRadius = 0;
13581 this.mouseDownStart = 0;
13582 this.mouseUpStart = 0;
13583
13584 this.xStart = 0;
13585 this.yStart = 0;
13586 this.xEnd = 0;
13587 this.yEnd = 0;
13588 this.slideDistance = 0;
13589
13590 this.containerMetrics = new ElementMetrics(this.element);
13591 },
13592
13593 draw: function() {
13594 var scale;
13595 var translateString;
13596 var dx;
13597 var dy;
13598
13599 this.wave.style.opacity = this.opacity;
13600
13601 scale = this.radius / (this.containerMetrics.size / 2);
13602 dx = this.xNow - (this.containerMetrics.width / 2);
13603 dy = this.yNow - (this.containerMetrics.height / 2);
13604
13605
13606 // 2d transform for safari because of border-radius and overflow:hidden clipping bug.
13607 // https://bugs.webkit.org/show_bug.cgi?id=98538
13608 this.waveContainer.style.webkitTransform = 'translate(' + dx + 'px, ' + dy + 'px)';
13609 this.waveContainer.style.transform = 'translate3d(' + dx + 'px, ' + dy + 'px, 0)';
13610 this.wave.style.webkitTransform = 'scale(' + scale + ',' + scale + ')';
13611 this.wave.style.transform = 'scale3d(' + scale + ',' + scale + ',1)';
13612 },
13613
13614 /** @param {Event=} event */
13615 downAction: function(event) {
13616 var xCenter = this.containerMetrics.width / 2;
13617 var yCenter = this.containerMetrics.height / 2;
13618
13619 this.resetInteractionState();
13620 this.mouseDownStart = Utility.now();
13621
13622 if (this.center) {
13623 this.xStart = xCenter;
13624 this.yStart = yCenter;
13625 this.slideDistance = Utility.distance(
13626 this.xStart, this.yStart, this.xEnd, this.yEnd
13627 );
13628 } else {
13629 this.xStart = event ?
13630 event.detail.x - this.containerMetrics.boundingRect.left :
13631 this.containerMetrics.width / 2;
13632 this.yStart = event ?
13633 event.detail.y - this.containerMetrics.boundingRect.top :
13634 this.containerMetrics.height / 2;
13635 }
13636
13637 if (this.recenters) {
13638 this.xEnd = xCenter;
13639 this.yEnd = yCenter;
13640 this.slideDistance = Utility.distance(
13641 this.xStart, this.yStart, this.xEnd, this.yEnd
13642 );
13643 }
13644
13645 this.maxRadius = this.containerMetrics.furthestCornerDistanceFrom(
13646 this.xStart,
13647 this.yStart
13648 );
13649
13650 this.waveContainer.style.top =
13651 (this.containerMetrics.height - this.containerMetrics.size) / 2 + 'px' ;
13652 this.waveContainer.style.left =
13653 (this.containerMetrics.width - this.containerMetrics.size) / 2 + 'px';
13654
13655 this.waveContainer.style.width = this.containerMetrics.size + 'px';
13656 this.waveContainer.style.height = this.containerMetrics.size + 'px';
13657 },
13658
13659 /** @param {Event=} event */
13660 upAction: function(event) {
13661 if (!this.isMouseDown) {
13662 return;
13663 }
13664
13665 this.mouseUpStart = Utility.now();
13666 },
13667
13668 remove: function() {
13669 Polymer.dom(this.waveContainer.parentNode).removeChild(
13670 this.waveContainer
13671 );
13672 }
13673 };
13674
13675 Polymer({
13676 is: 'paper-ripple',
13677
13678 behaviors: [
13679 Polymer.IronA11yKeysBehavior
13680 ],
13681
13682 properties: {
13683 /**
13684 * The initial opacity set on the wave.
13685 *
13686 * @attribute initialOpacity
13687 * @type number
13688 * @default 0.25
13689 */
13690 initialOpacity: {
13691 type: Number,
13692 value: 0.25
13693 },
13694
13695 /**
13696 * How fast (opacity per second) the wave fades out.
13697 *
13698 * @attribute opacityDecayVelocity
13699 * @type number
13700 * @default 0.8
13701 */
13702 opacityDecayVelocity: {
13703 type: Number,
13704 value: 0.8
13705 },
13706
13707 /**
13708 * If true, ripples will exhibit a gravitational pull towards
13709 * the center of their container as they fade away.
13710 *
13711 * @attribute recenters
13712 * @type boolean
13713 * @default false
13714 */
13715 recenters: {
13716 type: Boolean,
13717 value: false
13718 },
13719
13720 /**
13721 * If true, ripples will center inside its container
13722 *
13723 * @attribute recenters
13724 * @type boolean
13725 * @default false
13726 */
13727 center: {
13728 type: Boolean,
13729 value: false
13730 },
13731
13732 /**
13733 * A list of the visual ripples.
13734 *
13735 * @attribute ripples
13736 * @type Array
13737 * @default []
13738 */
13739 ripples: {
13740 type: Array,
13741 value: function() {
13742 return [];
13743 }
13744 },
13745
13746 /**
13747 * True when there are visible ripples animating within the
13748 * element.
13749 */
13750 animating: {
13751 type: Boolean,
13752 readOnly: true,
13753 reflectToAttribute: true,
13754 value: false
13755 },
13756
13757 /**
13758 * If true, the ripple will remain in the "down" state until `holdDown`
13759 * is set to false again.
13760 */
13761 holdDown: {
13762 type: Boolean,
13763 value: false,
13764 observer: '_holdDownChanged'
13765 },
13766
13767 /**
13768 * If true, the ripple will not generate a ripple effect
13769 * via pointer interaction.
13770 * Calling ripple's imperative api like `simulatedRipple` will
13771 * still generate the ripple effect.
13772 */
13773 noink: {
13774 type: Boolean,
13775 value: false
13776 },
13777
13778 _animating: {
13779 type: Boolean
13780 },
13781
13782 _boundAnimate: {
13783 type: Function,
13784 value: function() {
13785 return this.animate.bind(this);
13786 }
13787 }
13788 },
13789
13790 get target () {
13791 return this.keyEventTarget;
13792 },
13793
13794 keyBindings: {
13795 'enter:keydown': '_onEnterKeydown',
13796 'space:keydown': '_onSpaceKeydown',
13797 'space:keyup': '_onSpaceKeyup'
13798 },
13799
13800 attached: function() {
13801 // Set up a11yKeysBehavior to listen to key events on the target,
13802 // so that space and enter activate the ripple even if the target doesn' t
13803 // handle key events. The key handlers deal with `noink` themselves.
13804 if (this.parentNode.nodeType == 11) { // DOCUMENT_FRAGMENT_NODE
13805 this.keyEventTarget = Polymer.dom(this).getOwnerRoot().host;
13806 } else {
13807 this.keyEventTarget = this.parentNode;
13808 }
13809 var keyEventTarget = /** @type {!EventTarget} */ (this.keyEventTarget);
13810 this.listen(keyEventTarget, 'up', 'uiUpAction');
13811 this.listen(keyEventTarget, 'down', 'uiDownAction');
13812 },
13813
13814 detached: function() {
13815 this.unlisten(this.keyEventTarget, 'up', 'uiUpAction');
13816 this.unlisten(this.keyEventTarget, 'down', 'uiDownAction');
13817 this.keyEventTarget = null;
13818 },
13819
13820 get shouldKeepAnimating () {
13821 for (var index = 0; index < this.ripples.length; ++index) {
13822 if (!this.ripples[index].isAnimationComplete) {
13823 return true;
13824 }
13825 }
13826
13827 return false;
13828 },
13829
13830 simulatedRipple: function() {
13831 this.downAction(null);
13832
13833 // Please see polymer/polymer#1305
13834 this.async(function() {
13835 this.upAction();
13836 }, 1);
13837 },
13838
13839 /**
13840 * Provokes a ripple down effect via a UI event,
13841 * respecting the `noink` property.
13842 * @param {Event=} event
13843 */
13844 uiDownAction: function(event) {
13845 if (!this.noink) {
13846 this.downAction(event);
13847 }
13848 },
13849
13850 /**
13851 * Provokes a ripple down effect via a UI event,
13852 * *not* respecting the `noink` property.
13853 * @param {Event=} event
13854 */
13855 downAction: function(event) {
13856 if (this.holdDown && this.ripples.length > 0) {
13857 return;
13858 }
13859
13860 var ripple = this.addRipple();
13861
13862 ripple.downAction(event);
13863
13864 if (!this._animating) {
13865 this._animating = true;
13866 this.animate();
13867 }
13868 },
13869
13870 /**
13871 * Provokes a ripple up effect via a UI event,
13872 * respecting the `noink` property.
13873 * @param {Event=} event
13874 */
13875 uiUpAction: function(event) {
13876 if (!this.noink) {
13877 this.upAction(event);
13878 }
13879 },
13880
13881 /**
13882 * Provokes a ripple up effect via a UI event,
13883 * *not* respecting the `noink` property.
13884 * @param {Event=} event
13885 */
13886 upAction: function(event) {
13887 if (this.holdDown) {
13888 return;
13889 }
13890
13891 this.ripples.forEach(function(ripple) {
13892 ripple.upAction(event);
13893 });
13894
13895 this._animating = true;
13896 this.animate();
13897 },
13898
13899 onAnimationComplete: function() {
13900 this._animating = false;
13901 this.$.background.style.backgroundColor = null;
13902 this.fire('transitionend');
13903 },
13904
13905 addRipple: function() {
13906 var ripple = new Ripple(this);
13907
13908 Polymer.dom(this.$.waves).appendChild(ripple.waveContainer);
13909 this.$.background.style.backgroundColor = ripple.color;
13910 this.ripples.push(ripple);
13911
13912 this._setAnimating(true);
13913
13914 return ripple;
13915 },
13916
13917 removeRipple: function(ripple) {
13918 var rippleIndex = this.ripples.indexOf(ripple);
13919
13920 if (rippleIndex < 0) {
13921 return;
13922 }
13923
13924 this.ripples.splice(rippleIndex, 1);
13925
13926 ripple.remove();
13927
13928 if (!this.ripples.length) {
13929 this._setAnimating(false);
13930 }
13931 },
13932
13933 animate: function() {
13934 if (!this._animating) {
13935 return;
13936 }
13937 var index;
13938 var ripple;
13939
13940 for (index = 0; index < this.ripples.length; ++index) {
13941 ripple = this.ripples[index];
13942
13943 ripple.draw();
13944
13945 this.$.background.style.opacity = ripple.outerOpacity;
13946
13947 if (ripple.isOpacityFullyDecayed && !ripple.isRestingAtMaxRadius) {
13948 this.removeRipple(ripple);
13949 }
13950 }
13951
13952 if (!this.shouldKeepAnimating && this.ripples.length === 0) {
13953 this.onAnimationComplete();
13954 } else {
13955 window.requestAnimationFrame(this._boundAnimate);
13956 }
13957 },
13958
13959 _onEnterKeydown: function() {
13960 this.uiDownAction();
13961 this.async(this.uiUpAction, 1);
13962 },
13963
13964 _onSpaceKeydown: function() {
13965 this.uiDownAction();
13966 },
13967
13968 _onSpaceKeyup: function() {
13969 this.uiUpAction();
13970 },
13971
13972 // note: holdDown does not respect noink since it can be a focus based
13973 // effect.
13974 _holdDownChanged: function(newVal, oldVal) {
13975 if (oldVal === undefined) {
13976 return;
13977 }
13978 if (newVal) {
13979 this.downAction();
13980 } else {
13981 this.upAction();
13982 }
13983 }
13984
13985 /**
13986 Fired when the animation finishes.
13987 This is useful if you want to wait until
13988 the ripple animation finishes to perform some action.
13989
13990 @event transitionend
13991 @param {{node: Object}} detail Contains the animated node.
13992 */
13993 });
13994 })();
13995 </script>
13996 <script>
13997 /**
13998 * `Polymer.PaperRippleBehavior` dynamically implements a ripple
13999 * when the element has focus via pointer or keyboard.
14000 *
14001 * NOTE: This behavior is intended to be used in conjunction with and after
14002 * `Polymer.IronButtonState` and `Polymer.IronControlState`.
14003 *
14004 * @polymerBehavior Polymer.PaperRippleBehavior
14005 */
14006 Polymer.PaperRippleBehavior = {
14007 properties: {
14008 /**
14009 * If true, the element will not produce a ripple effect when interacted
14010 * with via the pointer.
14011 */
14012 noink: {
14013 type: Boolean,
14014 observer: '_noinkChanged'
14015 },
14016
14017 /**
14018 * @type {Element|undefined}
14019 */
14020 _rippleContainer: {
14021 type: Object,
14022 }
14023 },
14024
14025 /**
14026 * Ensures a `<paper-ripple>` element is available when the element is
14027 * focused.
14028 */
14029 _buttonStateChanged: function() {
14030 if (this.focused) {
14031 this.ensureRipple();
14032 }
14033 },
14034
14035 /**
14036 * In addition to the functionality provided in `IronButtonState`, ensures
14037 * a ripple effect is created when the element is in a `pressed` state.
14038 */
14039 _downHandler: function(event) {
14040 Polymer.IronButtonStateImpl._downHandler.call(this, event);
14041 if (this.pressed) {
14042 this.ensureRipple(event);
14043 }
14044 },
14045
14046 /**
14047 * Ensures this element contains a ripple effect. For startup efficiency
14048 * the ripple effect is dynamically on demand when needed.
14049 * @param {!Event=} optTriggeringEvent (optional) event that triggered the
14050 * ripple.
14051 */
14052 ensureRipple: function(optTriggeringEvent) {
14053 if (!this.hasRipple()) {
14054 this._ripple = this._createRipple();
14055 this._ripple.noink = this.noink;
14056 var rippleContainer = this._rippleContainer || this.root;
14057 if (rippleContainer) {
14058 Polymer.dom(rippleContainer).appendChild(this._ripple);
14059 }
14060 if (optTriggeringEvent) {
14061 // Check if the event happened inside of the ripple container
14062 // Fall back to host instead of the root because distributed text
14063 // nodes are not valid event targets
14064 var domContainer = Polymer.dom(this._rippleContainer || this);
14065 var target = Polymer.dom(optTriggeringEvent).rootTarget;
14066 if (domContainer.deepContains( /** @type {Node} */(target))) {
14067 this._ripple.uiDownAction(optTriggeringEvent);
14068 }
14069 }
14070 }
14071 },
14072
14073 /**
14074 * Returns the `<paper-ripple>` element used by this element to create
14075 * ripple effects. The element's ripple is created on demand, when
14076 * necessary, and calling this method will force the
14077 * ripple to be created.
14078 */
14079 getRipple: function() {
14080 this.ensureRipple();
14081 return this._ripple;
14082 },
14083
14084 /**
14085 * Returns true if this element currently contains a ripple effect.
14086 * @return {boolean}
14087 */
14088 hasRipple: function() {
14089 return Boolean(this._ripple);
14090 },
14091
14092 /**
14093 * Create the element's ripple effect via creating a `<paper-ripple>`.
14094 * Override this method to customize the ripple element.
14095 * @return {!PaperRippleElement} Returns a `<paper-ripple>` element.
14096 */
14097 _createRipple: function() {
14098 return /** @type {!PaperRippleElement} */ (
14099 document.createElement('paper-ripple'));
14100 },
14101
14102 _noinkChanged: function(noink) {
14103 if (this.hasRipple()) {
14104 this._ripple.noink = noink;
14105 }
14106 }
14107 };
14108 </script>
14109 <script>
14110 /** @polymerBehavior Polymer.PaperButtonBehavior */
14111 Polymer.PaperButtonBehaviorImpl = {
14112 properties: {
14113 /**
14114 * The z-depth of this element, from 0-5. Setting to 0 will remove the
14115 * shadow, and each increasing number greater than 0 will be "deeper"
14116 * than the last.
14117 *
14118 * @attribute elevation
14119 * @type number
14120 * @default 1
14121 */
14122 elevation: {
14123 type: Number,
14124 reflectToAttribute: true,
14125 readOnly: true
14126 }
14127 },
14128
14129 observers: [
14130 '_calculateElevation(focused, disabled, active, pressed, receivedFocusFrom Keyboard)',
14131 '_computeKeyboardClass(receivedFocusFromKeyboard)'
14132 ],
14133
14134 hostAttributes: {
14135 role: 'button',
14136 tabindex: '0',
14137 animated: true
14138 },
14139
14140 _calculateElevation: function() {
14141 var e = 1;
14142 if (this.disabled) {
14143 e = 0;
14144 } else if (this.active || this.pressed) {
14145 e = 4;
14146 } else if (this.receivedFocusFromKeyboard) {
14147 e = 3;
14148 }
14149 this._setElevation(e);
14150 },
14151
14152 _computeKeyboardClass: function(receivedFocusFromKeyboard) {
14153 this.toggleClass('keyboard-focus', receivedFocusFromKeyboard);
14154 },
14155
14156 /**
14157 * In addition to `IronButtonState` behavior, when space key goes down,
14158 * create a ripple down effect.
14159 *
14160 * @param {!KeyboardEvent} event .
14161 */
14162 _spaceKeyDownHandler: function(event) {
14163 Polymer.IronButtonStateImpl._spaceKeyDownHandler.call(this, event);
14164 // Ensure that there is at most one ripple when the space key is held down .
14165 if (this.hasRipple() && this.getRipple().ripples.length < 1) {
14166 this._ripple.uiDownAction();
14167 }
14168 },
14169
14170 /**
14171 * In addition to `IronButtonState` behavior, when space key goes up,
14172 * create a ripple up effect.
14173 *
14174 * @param {!KeyboardEvent} event .
14175 */
14176 _spaceKeyUpHandler: function(event) {
14177 Polymer.IronButtonStateImpl._spaceKeyUpHandler.call(this, event);
14178 if (this.hasRipple()) {
14179 this._ripple.uiUpAction();
14180 }
14181 }
14182 };
14183
14184 /** @polymerBehavior */
14185 Polymer.PaperButtonBehavior = [
14186 Polymer.IronButtonState,
14187 Polymer.IronControlState,
14188 Polymer.PaperRippleBehavior,
14189 Polymer.PaperButtonBehaviorImpl
14190 ];
14191 </script>
14192 <style is="custom-style">
14193
14194 :root {
14195
14196 --shadow-transition: {
14197 transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
14198 };
14199
14200 --shadow-none: {
14201 box-shadow: none;
14202 };
14203
14204 /* from http://codepen.io/shyndman/pen/c5394ddf2e8b2a5c9185904b57421cdb */
14205
14206 --shadow-elevation-2dp: {
14207 box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
14208 0 1px 5px 0 rgba(0, 0, 0, 0.12),
14209 0 3px 1px -2px rgba(0, 0, 0, 0.2);
14210 };
14211
14212 --shadow-elevation-3dp: {
14213 box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14),
14214 0 1px 8px 0 rgba(0, 0, 0, 0.12),
14215 0 3px 3px -2px rgba(0, 0, 0, 0.4);
14216 };
14217
14218 --shadow-elevation-4dp: {
14219 box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14),
14220 0 1px 10px 0 rgba(0, 0, 0, 0.12),
14221 0 2px 4px -1px rgba(0, 0, 0, 0.4);
14222 };
14223
14224 --shadow-elevation-6dp: {
14225 box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14),
14226 0 1px 18px 0 rgba(0, 0, 0, 0.12),
14227 0 3px 5px -1px rgba(0, 0, 0, 0.4);
14228 };
14229
14230 --shadow-elevation-8dp: {
14231 box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14),
14232 0 3px 14px 2px rgba(0, 0, 0, 0.12),
14233 0 5px 5px -3px rgba(0, 0, 0, 0.4);
14234 };
14235
14236 --shadow-elevation-12dp: {
14237 box-shadow: 0 12px 16px 1px rgba(0, 0, 0, 0.14),
14238 0 4px 22px 3px rgba(0, 0, 0, 0.12),
14239 0 6px 7px -4px rgba(0, 0, 0, 0.4);
14240 };
14241
14242 --shadow-elevation-16dp: {
14243 box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14),
14244 0 6px 30px 5px rgba(0, 0, 0, 0.12),
14245 0 8px 10px -5px rgba(0, 0, 0, 0.4);
14246 };
14247
14248 }
14249
14250 </style>
14251 <dom-module id="paper-material-shared-styles" assetpath="/res/imp/bower_componen ts/paper-material/">
14252 <template>
14253 <style>
14254 :host {
14255 display: block;
14256 position: relative;
14257 }
14258
14259 :host([elevation="1"]) {
14260 @apply(--shadow-elevation-2dp);
14261 }
14262
14263 :host([elevation="2"]) {
14264 @apply(--shadow-elevation-4dp);
14265 }
14266
14267 :host([elevation="3"]) {
14268 @apply(--shadow-elevation-6dp);
14269 }
14270
14271 :host([elevation="4"]) {
14272 @apply(--shadow-elevation-8dp);
14273 }
14274
14275 :host([elevation="5"]) {
14276 @apply(--shadow-elevation-16dp);
14277 }
14278 </style>
14279 </template>
14280 </dom-module>
11630 <style is="custom-style"> 14281 <style is="custom-style">
11631 14282
11632 :root { 14283 :root {
11633 14284
11634 /* Material Design color palette for Google products */ 14285 /* Material Design color palette for Google products */
11635 14286
11636 --google-red-100: #f4c7c3; 14287 --google-red-100: #f4c7c3;
11637 --google-red-300: #e67c73; 14288 --google-red-300: #e67c73;
11638 --google-red-500: #db4437; 14289 --google-red-500: #db4437;
11639 --google-red-700: #c53929; 14290 --google-red-700: #c53929;
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
11941 14592
11942 /* opacity for light text on a dark background */ 14593 /* opacity for light text on a dark background */
11943 --light-divider-opacity: 0.12; 14594 --light-divider-opacity: 0.12;
11944 --light-disabled-opacity: 0.3; /* or hint text or icon */ 14595 --light-disabled-opacity: 0.3; /* or hint text or icon */
11945 --light-secondary-opacity: 0.7; 14596 --light-secondary-opacity: 0.7;
11946 --light-primary-opacity: 1.0; 14597 --light-primary-opacity: 1.0;
11947 14598
11948 } 14599 }
11949 14600
11950 </style> 14601 </style>
14602
14603
14604 <style is="custom-style">
14605
14606 :root {
14607 /*
14608 * You can use these generic variables in your elements for easy theming.
14609 * For example, if all your elements use `--primary-text-color` as its main
14610 * color, then switching from a light to a dark theme is just a matter of
14611 * changing the value of `--primary-text-color` in your application.
14612 */
14613 --primary-text-color: var(--light-theme-text-color);
14614 --primary-background-color: var(--light-theme-background-color);
14615 --secondary-text-color: var(--light-theme-secondary-color);
14616 --disabled-text-color: var(--light-theme-disabled-color);
14617 --divider-color: var(--light-theme-divider-color);
14618 --error-color: var(--paper-deep-orange-a700);
14619
14620 /*
14621 * Primary and accent colors. Also see color.html for more colors.
14622 */
14623 --primary-color: var(--paper-indigo-500);
14624 --light-primary-color: var(--paper-indigo-100);
14625 --dark-primary-color: var(--paper-indigo-700);
14626
14627 --accent-color: var(--paper-pink-a200);
14628 --light-accent-color: var(--paper-pink-a100);
14629 --dark-accent-color: var(--paper-pink-a400);
14630
14631
14632 /*
14633 * Material Design Light background theme
14634 */
14635 --light-theme-background-color: #ffffff;
14636 --light-theme-base-color: #000000;
14637 --light-theme-text-color: var(--paper-grey-900);
14638 --light-theme-secondary-color: #737373; /* for secondary text and icons */
14639 --light-theme-disabled-color: #9b9b9b; /* disabled/hint text */
14640 --light-theme-divider-color: #dbdbdb;
14641
14642 /*
14643 * Material Design Dark background theme
14644 */
14645 --dark-theme-background-color: var(--paper-grey-900);
14646 --dark-theme-base-color: #ffffff;
14647 --dark-theme-text-color: #ffffff;
14648 --dark-theme-secondary-color: #bcbcbc; /* for secondary text and icons */
14649 --dark-theme-disabled-color: #646464; /* disabled/hint text */
14650 --dark-theme-divider-color: #3c3c3c;
14651
14652 /*
14653 * Deprecated values because of their confusing names.
14654 */
14655 --text-primary-color: var(--dark-theme-text-color);
14656 --default-primary-color: var(--primary-color);
14657
14658 }
14659
14660 </style>
14661
14662
14663 <dom-module id="paper-fab" assetpath="/res/imp/bower_components/paper-fab/">
14664 <template strip-whitespace="">
14665 <style include="paper-material-shared-styles">
14666 :host {
14667 @apply(--layout-vertical);
14668 @apply(--layout-center-center);
14669
14670 background: var(--paper-fab-background, --accent-color);
14671 border-radius: 50%;
14672 box-sizing: border-box;
14673 color: var(--text-primary-color);
14674 cursor: pointer;
14675 height: 56px;
14676 min-width: 0;
14677 outline: none;
14678 padding: 16px;
14679 position: relative;
14680 -moz-user-select: none;
14681 -ms-user-select: none;
14682 -webkit-user-select: none;
14683 user-select: none;
14684 width: 56px;
14685 z-index: 0;
14686
14687 /* NOTE: Both values are needed, since some phones require the value `tr ansparent`. */
14688 -webkit-tap-highlight-color: rgba(0,0,0,0);
14689 -webkit-tap-highlight-color: transparent;
14690
14691 @apply(--paper-fab);
14692 }
14693
14694 [hidden] {
14695 display: none !important;
14696 }
14697
14698 :host([mini]) {
14699 width: 40px;
14700 height: 40px;
14701 padding: 8px;
14702
14703 @apply(--paper-fab-mini);
14704 }
14705
14706 :host([disabled]) {
14707 color: var(--paper-fab-disabled-text, --paper-grey-500);
14708 background: var(--paper-fab-disabled-background, --paper-grey-300);
14709
14710 @apply(--paper-fab-disabled);
14711 }
14712
14713 iron-icon {
14714 @apply(--paper-fab-iron-icon);
14715 }
14716
14717 span {
14718 width: 100%;
14719 white-space: nowrap;
14720 overflow: hidden;
14721 text-overflow: ellipsis;
14722 text-align: center;
14723 }
14724
14725 :host(.keyboard-focus) {
14726 background: var(--paper-fab-keyboard-focus-background, --paper-pink-900) ;
14727 }
14728 </style>
14729
14730 <iron-icon id="icon" hidden$="{{!_computeIsIconFab(icon, src)}}" src="[[src] ]" icon="[[icon]]"></iron-icon>
14731 <span hidden$="{{_computeIsIconFab(icon, src)}}">{{label}}</span>
14732 </template>
14733
14734 <script>
14735 Polymer({
14736 is: 'paper-fab',
14737
14738 behaviors: [
14739 Polymer.PaperButtonBehavior
14740 ],
14741
14742 properties: {
14743 /**
14744 * The URL of an image for the icon. If the src property is specified,
14745 * the icon property should not be.
14746 */
14747 src: {
14748 type: String,
14749 value: ''
14750 },
14751
14752 /**
14753 * Specifies the icon name or index in the set of icons available in
14754 * the icon's icon set. If the icon property is specified,
14755 * the src property should not be.
14756 */
14757 icon: {
14758 type: String,
14759 value: ''
14760 },
14761
14762 /**
14763 * Set this to true to style this is a "mini" FAB.
14764 */
14765 mini: {
14766 type: Boolean,
14767 value: false,
14768 reflectToAttribute: true
14769 },
14770
14771 /**
14772 * The label displayed in the badge. The label is centered, and ideally
14773 * should have very few characters.
14774 */
14775 label: {
14776 type: String,
14777 observer: '_labelChanged'
14778 }
14779 },
14780
14781 _labelChanged: function() {
14782 this.setAttribute('aria-label', this.label);
14783 },
14784
14785 _computeIsIconFab: function(icon, src) {
14786 return (icon.length > 0) || (src.length > 0);
14787 }
14788 });
14789 </script>
14790 </dom-module>
11951 <script> 14791 <script>
11952 14792
11953 /** @polymerBehavior */ 14793 /** @polymerBehavior */
11954 Polymer.PaperSpinnerBehavior = { 14794 Polymer.PaperSpinnerBehavior = {
11955 14795
11956 listeners: { 14796 listeners: {
11957 'animationend': '__reset', 14797 'animationend': '__reset',
11958 'webkitAnimationEnd': '__reset' 14798 'webkitAnimationEnd': '__reset'
11959 }, 14799 },
11960 14800
(...skipping 1486 matching lines...) Expand 10 before | Expand all | Expand 10 after
13447 border-radius: 5px; 16287 border-radius: 5px;
13448 } 16288 }
13449 a { 16289 a {
13450 color: white; 16290 color: white;
13451 } 16291 }
13452 .center { 16292 .center {
13453 vertical-align: middle; 16293 vertical-align: middle;
13454 } 16294 }
13455 </style> 16295 </style>
13456 16296
13457 <google-signin-aware id="aware" client-id="[[clientId]]" scopes="email" on-g oogle-signin-aware-success="_onSignin" on-google-signin-aware-signed-out="_onSig nout"> 16297 <google-signin-aware id="aware" client-id="[[client_id]]" scopes="email" on- google-signin-aware-success="_onSignin" on-google-signin-aware-signed-out="_onSi gnout">
13458 </google-signin-aware> 16298 </google-signin-aware>
13459 16299
13460 <template is="dom-if" if="[[!signedIn]]"> 16300 <template is="dom-if" if="[[!signed_in]]">
13461 <div id="signinContainer"> 16301 <div id="signinContainer">
13462 <a on-tap="signIn" href="#">Sign in</a> 16302 <a on-tap="signIn" href="#">Sign in</a>
13463 </div> 16303 </div>
13464 </template> 16304 </template>
13465 16305
13466 <template is="dom-if" if="[[signedIn]]"> 16306 <template is="dom-if" if="[[signed_in]]">
13467 <img class="center" id="avatar" src="[[profile.imageUrl]]" width="30" heig ht="30"> 16307 <img class="center" id="avatar" src="[[profile.imageUrl]]" width="30" heig ht="30">
13468 <span class="center">[[profile.email]]</span> 16308 <span class="center">[[profile.email]]</span>
13469 <span class="center">|</span> 16309 <span class="center">|</span>
13470 <a class="center" on-tap="signOut" href="#">Sign out</a> 16310 <a class="center" on-tap="signOut" href="#">Sign out</a>
13471 </template> 16311 </template>
13472 </template> 16312 </template>
13473 <script> 16313 <script>
13474 'use strict'; 16314 'use strict';
13475 Polymer({ 16315 Polymer({
13476 is: 'auth-signin', 16316 is: 'auth-signin',
13477 properties: { 16317 properties: {
13478 authHeaders: { 16318 auth_headers: {
13479 type: Object, 16319 type: Object,
13480 computed: "_makeHeader(authResponse)", 16320 computed: "_makeHeader(auth_response)",
13481 notify: true, 16321 notify: true,
13482 }, 16322 },
13483 authResponse: { 16323 auth_response: {
13484 type: Object, 16324 type: Object,
13485 notify: true, 16325 notify: true,
13486 }, 16326 },
13487 clientId: { 16327 client_id: {
13488 type: String, 16328 type: String,
13489 }, 16329 },
13490 profile: { 16330 profile: {
13491 type: Object, 16331 type: Object,
13492 readOnly: true 16332 readOnly: true
13493 }, 16333 },
13494 signedIn: { 16334 signed_in: {
13495 type: Boolean, 16335 type: Boolean,
13496 readOnly: true, 16336 readOnly: true,
13497 value: false, 16337 value: false,
13498 notify: true, 16338 notify: true,
13499 } 16339 }
13500 }, 16340 },
13501 16341
13502 _onSignin: function(e) { 16342 _onSignin: function(e) {
13503 this._setSignedIn(true); 16343 this._setSigned_in(true);
13504 var user = gapi.auth2.getAuthInstance().currentUser.get(); 16344 var user = gapi.auth2.getAuthInstance().currentUser.get();
13505 var profile = user.getBasicProfile(); 16345 var profile = user.getBasicProfile();
13506 this._setProfile({ 16346 this._setProfile({
13507 email: profile.getEmail(), 16347 email: profile.getEmail(),
13508 imageUrl: profile.getImageUrl() 16348 imageUrl: profile.getImageUrl()
13509 }); 16349 });
13510 this.set("authResponse", user.getAuthResponse()); 16350 this.set("auth_response", user.getAuthResponse());
13511 this._setSignedIn(true); 16351 this._setSigned_in(true);
13512 this.fire("auth-signin"); 16352 this.fire("auth-signin");
13513 }, 16353 },
13514 16354
13515 _onSignout: function(e) { 16355 _onSignout: function(e) {
13516 this._setSignedIn(false); 16356 this._setSigned_in(false);
13517 this._setProfile(null); 16357 this._setProfile(null);
13518 }, 16358 },
13519 16359
13520 _makeHeader: function(authResponse) { 16360 _makeHeader: function(auth_response) {
13521 if (!authResponse) { 16361 if (!auth_response) {
13522 return {}; 16362 return {};
13523 } 16363 }
13524 return { 16364 return {
13525 "authorization": authResponse.token_type + " " + authResponse.access_t oken 16365 "authorization": auth_response.token_type + " " + auth_response.access _token
13526 }; 16366 };
13527 }, 16367 },
13528 16368
13529 signIn: function() { 16369 signIn: function() {
13530 this.$.aware.signIn(); 16370 this.$.aware.signIn();
13531 }, 16371 },
13532 16372
13533 signOut: function() { 16373 signOut: function() {
13534 this.$.aware.signOut(); 16374 this.$.aware.signOut();
13535 } 16375 }
(...skipping 25 matching lines...) Expand all
13561 margin-left:15px; 16401 margin-left:15px;
13562 } 16402 }
13563 .main-content { 16403 .main-content {
13564 padding: 3px; 16404 padding: 3px;
13565 } 16405 }
13566 16406
13567 .main-content a { 16407 .main-content a {
13568 color: #1F78B4; 16408 color: #1F78B4;
13569 } 16409 }
13570 16410
16411 paper-fab {
16412 position: fixed;
16413 bottom: 5px;
16414 right: 5px;
16415 background-color: #1F78B4;
16416 }
16417
13571 paper-spinner-lite { 16418 paper-spinner-lite {
13572 --paper-spinner-color: var(--google-yellow-500); 16419 --paper-spinner-color: var(--google-yellow-500);
13573 } 16420 }
13574 </style> 16421 </style>
13575 <app-header-layout> 16422 <app-header-layout>
13576 <app-header fixed=""> 16423 <app-header fixed="">
13577 <app-toolbar> 16424 <app-toolbar>
13578 <div class="title left">[[name]]</div> 16425 <div class="title left">[[name]]</div>
13579 <paper-spinner-lite class="left" active="[[_or(busy,_busy)]]"></paper- spinner-lite> 16426 <paper-spinner-lite class="left" active="[[_or(busy,_busy)]]"></paper- spinner-lite>
13580 16427
13581 <a class="left" href="/newui/">Home</a> 16428 <a class="left" href="/newui/">Home</a>
13582 <a class="left" href="/newui/botlist">Bot List</a> 16429 <a class="left" href="/newui/botlist">Bot List</a>
13583 <a class="left" href="/newui/tasklist">Task List</a> 16430 <a class="left" href="/newui/tasklist">Task List</a>
13584 <div class="flex"></div> 16431 <div class="flex"></div>
13585 <auth-signin class="right" client-id="[[client_id]]" auth-headers="{{a uth_headers}}" signed-in="{{signed_in}}"> 16432 <auth-signin class="right" client_id="[[client_id]]" auth_headers="{{a uth_headers}}" signed_in="{{signed_in}}">
13586 </auth-signin> 16433 </auth-signin>
13587 </app-toolbar> 16434 </app-toolbar>
13588 </app-header> 16435 </app-header>
13589 <div class="main-content"> 16436 <div class="main-content">
13590 <content></content> 16437 <content></content>
13591 </div> 16438 </div>
16439 <a target="_blank" href="https://bugs.chromium.org/p/chromium/issues/ent ry?components=Infra%3EPlatform%3ESwarming&amp;owner=kjlubick@chromium.org&amp;st atus=Assigned">
16440 <paper-fab mini="" icon="icons:bug-report"></paper-fab>
16441 </a>
13592 </app-header-layout> 16442 </app-header-layout>
13593 16443
13594 </template> 16444 </template>
13595 <script> 16445 <script>
13596 Polymer({ 16446 Polymer({
13597 is: 'swarming-app', 16447 is: 'swarming-app',
13598 16448
13599 behaviors: [ 16449 behaviors: [
13600 SwarmingBehaviors.CommonBehavior, 16450 SwarmingBehaviors.CommonBehavior,
13601 ], 16451 ],
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
14014 pool: function(bot) { 16864 pool: function(bot) {
14015 var pool = this._attribute(bot, "pool"); 16865 var pool = this._attribute(bot, "pool");
14016 return pool.join(" | "); 16866 return pool.join(" | ");
14017 }, 16867 },
14018 }; 16868 };
14019 }, 16869 },
14020 16870
14021 16871
14022 }]; 16872 }];
14023 })(); 16873 })();
14024 </script> 16874 </script><dom-module id="sort-toggle" assetpath="/res/imp/common/">
14025
14026 <script>
14027
14028 (function() {
14029
14030 // monostate data
14031 var metaDatas = {};
14032 var metaArrays = {};
14033 var singleton = null;
14034
14035 Polymer.IronMeta = Polymer({
14036
14037 is: 'iron-meta',
14038
14039 properties: {
14040
14041 /**
14042 * The type of meta-data. All meta-data of the same type is stored
14043 * together.
14044 */
14045 type: {
14046 type: String,
14047 value: 'default',
14048 observer: '_typeChanged'
14049 },
14050
14051 /**
14052 * The key used to store `value` under the `type` namespace.
14053 */
14054 key: {
14055 type: String,
14056 observer: '_keyChanged'
14057 },
14058
14059 /**
14060 * The meta-data to store or retrieve.
14061 */
14062 value: {
14063 type: Object,
14064 notify: true,
14065 observer: '_valueChanged'
14066 },
14067
14068 /**
14069 * If true, `value` is set to the iron-meta instance itself.
14070 */
14071 self: {
14072 type: Boolean,
14073 observer: '_selfChanged'
14074 },
14075
14076 /**
14077 * Array of all meta-data values for the given type.
14078 */
14079 list: {
14080 type: Array,
14081 notify: true
14082 }
14083
14084 },
14085
14086 hostAttributes: {
14087 hidden: true
14088 },
14089
14090 /**
14091 * Only runs if someone invokes the factory/constructor directly
14092 * e.g. `new Polymer.IronMeta()`
14093 *
14094 * @param {{type: (string|undefined), key: (string|undefined), value}=} co nfig
14095 */
14096 factoryImpl: function(config) {
14097 if (config) {
14098 for (var n in config) {
14099 switch(n) {
14100 case 'type':
14101 case 'key':
14102 case 'value':
14103 this[n] = config[n];
14104 break;
14105 }
14106 }
14107 }
14108 },
14109
14110 created: function() {
14111 // TODO(sjmiles): good for debugging?
14112 this._metaDatas = metaDatas;
14113 this._metaArrays = metaArrays;
14114 },
14115
14116 _keyChanged: function(key, old) {
14117 this._resetRegistration(old);
14118 },
14119
14120 _valueChanged: function(value) {
14121 this._resetRegistration(this.key);
14122 },
14123
14124 _selfChanged: function(self) {
14125 if (self) {
14126 this.value = this;
14127 }
14128 },
14129
14130 _typeChanged: function(type) {
14131 this._unregisterKey(this.key);
14132 if (!metaDatas[type]) {
14133 metaDatas[type] = {};
14134 }
14135 this._metaData = metaDatas[type];
14136 if (!metaArrays[type]) {
14137 metaArrays[type] = [];
14138 }
14139 this.list = metaArrays[type];
14140 this._registerKeyValue(this.key, this.value);
14141 },
14142
14143 /**
14144 * Retrieves meta data value by key.
14145 *
14146 * @method byKey
14147 * @param {string} key The key of the meta-data to be returned.
14148 * @return {*}
14149 */
14150 byKey: function(key) {
14151 return this._metaData && this._metaData[key];
14152 },
14153
14154 _resetRegistration: function(oldKey) {
14155 this._unregisterKey(oldKey);
14156 this._registerKeyValue(this.key, this.value);
14157 },
14158
14159 _unregisterKey: function(key) {
14160 this._unregister(key, this._metaData, this.list);
14161 },
14162
14163 _registerKeyValue: function(key, value) {
14164 this._register(key, value, this._metaData, this.list);
14165 },
14166
14167 _register: function(key, value, data, list) {
14168 if (key && data && value !== undefined) {
14169 data[key] = value;
14170 list.push(value);
14171 }
14172 },
14173
14174 _unregister: function(key, data, list) {
14175 if (key && data) {
14176 if (key in data) {
14177 var value = data[key];
14178 delete data[key];
14179 this.arrayDelete(list, value);
14180 }
14181 }
14182 }
14183
14184 });
14185
14186 Polymer.IronMeta.getIronMeta = function getIronMeta() {
14187 if (singleton === null) {
14188 singleton = new Polymer.IronMeta();
14189 }
14190 return singleton;
14191 };
14192
14193 /**
14194 `iron-meta-query` can be used to access infomation stored in `iron-meta`.
14195
14196 Examples:
14197
14198 If I create an instance like this:
14199
14200 <iron-meta key="info" value="foo/bar"></iron-meta>
14201
14202 Note that value="foo/bar" is the metadata I've defined. I could define more
14203 attributes or use child nodes to define additional metadata.
14204
14205 Now I can access that element (and it's metadata) from any `iron-meta-query` instance:
14206
14207 var value = new Polymer.IronMetaQuery({key: 'info'}).value;
14208
14209 @group Polymer Iron Elements
14210 @element iron-meta-query
14211 */
14212 Polymer.IronMetaQuery = Polymer({
14213
14214 is: 'iron-meta-query',
14215
14216 properties: {
14217
14218 /**
14219 * The type of meta-data. All meta-data of the same type is stored
14220 * together.
14221 */
14222 type: {
14223 type: String,
14224 value: 'default',
14225 observer: '_typeChanged'
14226 },
14227
14228 /**
14229 * Specifies a key to use for retrieving `value` from the `type`
14230 * namespace.
14231 */
14232 key: {
14233 type: String,
14234 observer: '_keyChanged'
14235 },
14236
14237 /**
14238 * The meta-data to store or retrieve.
14239 */
14240 value: {
14241 type: Object,
14242 notify: true,
14243 readOnly: true
14244 },
14245
14246 /**
14247 * Array of all meta-data values for the given type.
14248 */
14249 list: {
14250 type: Array,
14251 notify: true
14252 }
14253
14254 },
14255
14256 /**
14257 * Actually a factory method, not a true constructor. Only runs if
14258 * someone invokes it directly (via `new Polymer.IronMeta()`);
14259 *
14260 * @param {{type: (string|undefined), key: (string|undefined)}=} config
14261 */
14262 factoryImpl: function(config) {
14263 if (config) {
14264 for (var n in config) {
14265 switch(n) {
14266 case 'type':
14267 case 'key':
14268 this[n] = config[n];
14269 break;
14270 }
14271 }
14272 }
14273 },
14274
14275 created: function() {
14276 // TODO(sjmiles): good for debugging?
14277 this._metaDatas = metaDatas;
14278 this._metaArrays = metaArrays;
14279 },
14280
14281 _keyChanged: function(key) {
14282 this._setValue(this._metaData && this._metaData[key]);
14283 },
14284
14285 _typeChanged: function(type) {
14286 this._metaData = metaDatas[type];
14287 this.list = metaArrays[type];
14288 if (this.key) {
14289 this._keyChanged(this.key);
14290 }
14291 },
14292
14293 /**
14294 * Retrieves meta data value by key.
14295 * @param {string} key The key of the meta-data to be returned.
14296 * @return {*}
14297 */
14298 byKey: function(key) {
14299 return this._metaData && this._metaData[key];
14300 }
14301
14302 });
14303
14304 })();
14305 </script>
14306
14307
14308 <dom-module id="iron-icon" assetpath="/res/imp/bower_components/iron-icon/">
14309 <template> 16875 <template>
14310 <style> 16876 <style>
14311 :host { 16877 :host {
14312 @apply(--layout-inline);
14313 @apply(--layout-center-center);
14314 position: relative;
14315
14316 vertical-align: middle;
14317
14318 fill: var(--iron-icon-fill-color, currentcolor);
14319 stroke: var(--iron-icon-stroke-color, none);
14320
14321 width: var(--iron-icon-width, 24px);
14322 height: var(--iron-icon-height, 24px);
14323 }
14324 </style>
14325 </template>
14326
14327 <script>
14328
14329 Polymer({
14330
14331 is: 'iron-icon',
14332
14333 properties: {
14334
14335 /**
14336 * The name of the icon to use. The name should be of the form:
14337 * `iconset_name:icon_name`.
14338 */
14339 icon: {
14340 type: String,
14341 observer: '_iconChanged'
14342 },
14343
14344 /**
14345 * The name of the theme to used, if one is specified by the
14346 * iconset.
14347 */
14348 theme: {
14349 type: String,
14350 observer: '_updateIcon'
14351 },
14352
14353 /**
14354 * If using iron-icon without an iconset, you can set the src to be
14355 * the URL of an individual icon image file. Note that this will take
14356 * precedence over a given icon attribute.
14357 */
14358 src: {
14359 type: String,
14360 observer: '_srcChanged'
14361 },
14362
14363 /**
14364 * @type {!Polymer.IronMeta}
14365 */
14366 _meta: {
14367 value: Polymer.Base.create('iron-meta', {type: 'iconset'}),
14368 observer: '_updateIcon'
14369 }
14370
14371 },
14372
14373 _DEFAULT_ICONSET: 'icons',
14374
14375 _iconChanged: function(icon) {
14376 var parts = (icon || '').split(':');
14377 this._iconName = parts.pop();
14378 this._iconsetName = parts.pop() || this._DEFAULT_ICONSET;
14379 this._updateIcon();
14380 },
14381
14382 _srcChanged: function(src) {
14383 this._updateIcon();
14384 },
14385
14386 _usesIconset: function() {
14387 return this.icon || !this.src;
14388 },
14389
14390 /** @suppress {visibility} */
14391 _updateIcon: function() {
14392 if (this._usesIconset()) {
14393 if (this._img && this._img.parentNode) {
14394 Polymer.dom(this.root).removeChild(this._img);
14395 }
14396 if (this._iconName === "") {
14397 if (this._iconset) {
14398 this._iconset.removeIcon(this);
14399 }
14400 } else if (this._iconsetName && this._meta) {
14401 this._iconset = /** @type {?Polymer.Iconset} */ (
14402 this._meta.byKey(this._iconsetName));
14403 if (this._iconset) {
14404 this._iconset.applyIcon(this, this._iconName, this.theme);
14405 this.unlisten(window, 'iron-iconset-added', '_updateIcon');
14406 } else {
14407 this.listen(window, 'iron-iconset-added', '_updateIcon');
14408 }
14409 }
14410 } else {
14411 if (this._iconset) {
14412 this._iconset.removeIcon(this);
14413 }
14414 if (!this._img) {
14415 this._img = document.createElement('img');
14416 this._img.style.width = '100%';
14417 this._img.style.height = '100%';
14418 this._img.draggable = false;
14419 }
14420 this._img.src = this.src;
14421 Polymer.dom(this.root).appendChild(this._img);
14422 }
14423 }
14424
14425 });
14426
14427 </script>
14428
14429 </dom-module>
14430 <script>
14431 /**
14432 * The `iron-iconset-svg` element allows users to define their own icon sets
14433 * that contain svg icons. The svg icon elements should be children of the
14434 * `iron-iconset-svg` element. Multiple icons should be given distinct id's.
14435 *
14436 * Using svg elements to create icons has a few advantages over traditional
14437 * bitmap graphics like jpg or png. Icons that use svg are vector based so
14438 * they are resolution independent and should look good on any device. They
14439 * are stylable via css. Icons can be themed, colorized, and even animated.
14440 *
14441 * Example:
14442 *
14443 * <iron-iconset-svg name="my-svg-icons" size="24">
14444 * <svg>
14445 * <defs>
14446 * <g id="shape">
14447 * <rect x="12" y="0" width="12" height="24" />
14448 * <circle cx="12" cy="12" r="12" />
14449 * </g>
14450 * </defs>
14451 * </svg>
14452 * </iron-iconset-svg>
14453 *
14454 * This will automatically register the icon set "my-svg-icons" to the iconset
14455 * database. To use these icons from within another element, make a
14456 * `iron-iconset` element and call the `byId` method
14457 * to retrieve a given iconset. To apply a particular icon inside an
14458 * element use the `applyIcon` method. For example:
14459 *
14460 * iconset.applyIcon(iconNode, 'car');
14461 *
14462 * @element iron-iconset-svg
14463 * @demo demo/index.html
14464 * @implements {Polymer.Iconset}
14465 */
14466 Polymer({
14467 is: 'iron-iconset-svg',
14468
14469 properties: {
14470
14471 /**
14472 * The name of the iconset.
14473 */
14474 name: {
14475 type: String,
14476 observer: '_nameChanged'
14477 },
14478
14479 /**
14480 * The size of an individual icon. Note that icons must be square.
14481 */
14482 size: {
14483 type: Number,
14484 value: 24
14485 }
14486
14487 },
14488
14489 attached: function() {
14490 this.style.display = 'none';
14491 },
14492
14493 /**
14494 * Construct an array of all icon names in this iconset.
14495 *
14496 * @return {!Array} Array of icon names.
14497 */
14498 getIconNames: function() {
14499 this._icons = this._createIconMap();
14500 return Object.keys(this._icons).map(function(n) {
14501 return this.name + ':' + n;
14502 }, this);
14503 },
14504
14505 /**
14506 * Applies an icon to the given element.
14507 *
14508 * An svg icon is prepended to the element's shadowRoot if it exists,
14509 * otherwise to the element itself.
14510 *
14511 * @method applyIcon
14512 * @param {Element} element Element to which the icon is applied.
14513 * @param {string} iconName Name of the icon to apply.
14514 * @return {?Element} The svg element which renders the icon.
14515 */
14516 applyIcon: function(element, iconName) {
14517 // insert svg element into shadow root, if it exists
14518 element = element.root || element;
14519 // Remove old svg element
14520 this.removeIcon(element);
14521 // install new svg element
14522 var svg = this._cloneIcon(iconName);
14523 if (svg) {
14524 var pde = Polymer.dom(element);
14525 pde.insertBefore(svg, pde.childNodes[0]);
14526 return element._svgIcon = svg;
14527 }
14528 return null;
14529 },
14530
14531 /**
14532 * Remove an icon from the given element by undoing the changes effected
14533 * by `applyIcon`.
14534 *
14535 * @param {Element} element The element from which the icon is removed.
14536 */
14537 removeIcon: function(element) {
14538 // Remove old svg element
14539 if (element._svgIcon) {
14540 Polymer.dom(element).removeChild(element._svgIcon);
14541 element._svgIcon = null;
14542 }
14543 },
14544
14545 /**
14546 *
14547 * When name is changed, register iconset metadata
14548 *
14549 */
14550 _nameChanged: function() {
14551 new Polymer.IronMeta({type: 'iconset', key: this.name, value: this});
14552 this.async(function() {
14553 this.fire('iron-iconset-added', this, {node: window});
14554 });
14555 },
14556
14557 /**
14558 * Create a map of child SVG elements by id.
14559 *
14560 * @return {!Object} Map of id's to SVG elements.
14561 */
14562 _createIconMap: function() {
14563 // Objects chained to Object.prototype (`{}`) have members. Specifically,
14564 // on FF there is a `watch` method that confuses the icon map, so we
14565 // need to use a null-based object here.
14566 var icons = Object.create(null);
14567 Polymer.dom(this).querySelectorAll('[id]')
14568 .forEach(function(icon) {
14569 icons[icon.id] = icon;
14570 });
14571 return icons;
14572 },
14573
14574 /**
14575 * Produce installable clone of the SVG element matching `id` in this
14576 * iconset, or `undefined` if there is no matching element.
14577 *
14578 * @return {Element} Returns an installable clone of the SVG element
14579 * matching `id`.
14580 */
14581 _cloneIcon: function(id) {
14582 // create the icon map on-demand, since the iconset itself has no discrete
14583 // signal to know when it's children are fully parsed
14584 this._icons = this._icons || this._createIconMap();
14585 return this._prepareSvgClone(this._icons[id], this.size);
14586 },
14587
14588 /**
14589 * @param {Element} sourceSvg
14590 * @param {number} size
14591 * @return {Element}
14592 */
14593 _prepareSvgClone: function(sourceSvg, size) {
14594 if (sourceSvg) {
14595 var content = sourceSvg.cloneNode(true),
14596 svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'),
14597 viewBox = content.getAttribute('viewBox') || '0 0 ' + size + ' ' + s ize;
14598 svg.setAttribute('viewBox', viewBox);
14599 svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');
14600 // TODO(dfreedm): `pointer-events: none` works around https://crbug.com/ 370136
14601 // TODO(sjmiles): inline style may not be ideal, but avoids requiring a shadow-root
14602 svg.style.cssText = 'pointer-events: none; display: block; width: 100%; height: 100%;';
14603 svg.appendChild(content).removeAttribute('id');
14604 return svg;
14605 }
14606 return null;
14607 }
14608
14609 });
14610 </script>
14611 <iron-iconset-svg name="icons" size="24">
14612 <svg><defs>
14613 <g id="3d-rotation"><path d="M7.52 21.48C4.25 19.94 1.91 16.76 1.55 13H.05C.56 1 9.16 5.71 24 12 24l.66-.03-3.81-3.81-1.33 1.32zm.89-6.52c-.19 0-.37-.03-.52-.08- .16-.06-.29-.13-.4-.24-.11-.1-.2-.22-.26-.37-.06-.14-.09-.3-.09-.47h-1.3c0 .36.0 7.68.21.95.14.27.33.5.56.69.24.18.51.32.82.41.3.1.62.15.96.15.37 0 .72-.05 1.03- .15.32-.1.6-.25.83-.44s.42-.43.55-.72c.13-.29.2-.61.2-.97 0-.19-.02-.38-.07-.56- .05-.18-.12-.35-.23-.51-.1-.16-.24-.3-.4-.43-.17-.13-.37-.23-.61-.31.2-.09.37-.2 .52-.33.15-.13.27-.27.37-.42.1-.15.17-.3.22-.46.05-.16.07-.32.07-.48 0-.36-.06-. 68-.18-.96-.12-.28-.29-.51-.51-.69-.2-.19-.47-.33-.77-.43C9.1 8.05 8.76 8 8.39 8 c-.36 0-.69.05-1 .16-.3.11-.57.26-.79.45-.21.19-.38.41-.51.67-.12.26-.18.54-.18. 85h1.3c0-.17.03-.32.09-.45s.14-.25.25-.34c.11-.09.23-.17.38-.22.15-.05.3-.08.48- .08.4 0 .7.1.89.31.19.2.29.49.29.86 0 .18-.03.34-.08.49-.05.15-.14.27-.25.37-.11 .1-.25.18-.41.24-.16.06-.36.09-.58.09H7.5v1.03h.77c.22 0 .42.02.6.07s.33.13.45.2 3c.12.11.22.24.29.4.07.16.1.35.1.57 0 .41-.12.72-.35.93-.23.23-.55.33-.95.33zm8. 55-5.92c-.32-.33-.7-.59-1.14-.77-.43-.18-.92-.27-1.46-.27H12v8h2.3c.55 0 1.06-.0 9 1.51-.27.45-.18.84-.43 1.16-.76.32-.33.57-.73.74-1.19.17-.47.26-.99.26-1.57v-. 4c0-.58-.09-1.1-.26-1.57-.18-.47-.43-.87-.75-1.2zm-.39 3.16c0 .42-.05.79-.14 1.1 3-.1.33-.24.62-.43.85-.19.23-.43.41-.71.53-.29.12-.62.18-.99.18h-.91V9.12h.97c.7 2 0 1.27.23 1.64.69.38.46.57 1.12.57 1.99v.4zM12 0l-.66.03 3.81 3.81 1.33-1.33c3 .27 1.55 5.61 4.72 5.96 8.48h1.5C23.44 4.84 18.29 0 12 0z"></path></g>
14614 <g id="accessibility"><path d="M12 2c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2z m9 7h-6v13h-2v-6h-2v6H9V9H3V7h18v2z"></path></g>
14615 <g id="accessible"><circle cx="12" cy="4" r="2"></circle><path d="M19 13v-2c-1.5 4.02-3.09-.75-4.07-1.83l-1.29-1.43c-.17-.19-.38-.34-.61-.45-.01 0-.01-.01-.02-.0 1H13c-.35-.2-.75-.3-1.19-.26C10.76 7.11 10 8.04 10 9.09V15c0 1.1.9 2 2 2h5v5h2v- 5.5c0-1.1-.9-2-2-2h-3v-3.45c1.29 1.07 3.25 1.94 5 1.95zm-6.17 5c-.41 1.16-1.52 2 -2.83 2-1.66 0-3-1.34-3-3 0-1.31.84-2.41 2-2.83V12.1c-2.28.46-4 2.48-4 4.9 0 2.7 6 2.24 5 5 5 2.42 0 4.44-1.72 4.9-4h-2.07z"></path></g>
14616 <g id="account-balance"><path d="M4 10v7h3v-7H4zm6 0v7h3v-7h-3zM2 22h19v-3H2v3zm 14-12v7h3v-7h-3zm-4.5-9L2 6v2h19V6l-9.5-5z"></path></g>
14617 <g id="account-balance-wallet"><path d="M21 18v1c0 1.1-.9 2-2 2H5c-1.11 0-2-.9-2 -2V5c0-1.1.89-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.11 0-2 .9-2 2v8c0 1.1.89 2 2 2h9zm -9-2h10V8H12v8zm4-2.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"></path></g>
14618 <g id="account-box"><path d="M3 5v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9 -2-2-2H5c-1.11 0-2 .9-2 2zm12 4c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3zm-9 8c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1H6v-1z"></path></g>
14619 <g id="account-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 1 0-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14 .2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1. 94-3.5 3.22-6 3.22z"></path></g>
14620 <g id="add"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path></g>
14621 <g id="add-alert"><path d="M10.01 21.01c0 1.1.89 1.99 1.99 1.99s1.99-.89 1.99-1. 99h-3.98zm8.87-4.19V11c0-3.25-2.25-5.97-5.29-6.69v-.72C13.59 2.71 12.88 2 12 2s- 1.59.71-1.59 1.59v.72C7.37 5.03 5.12 7.75 5.12 11v5.82L3 18.94V20h18v-1.06l-2.12 -2.12zM16 13.01h-3v3h-2v-3H8V11h3V8h2v3h3v2.01z"></path></g>
14622 <g id="add-box"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-. 9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"></path></g>
14623 <g id="add-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10 S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"></path></g>
14624 <g id="add-circle-outline"><path d="M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8 s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"></path></g>
14625 <g id="add-shopping-cart"><path d="M11 9h2V6h3V4h-3V1h-2v3H8v2h3v3zm-4 9c-1.1 0- 1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zm10 0c-1.1 0-1.99.9-1.99 2s.89 2 1.9 9 2 2-.9 2-2-.9-2-2-2zm-9.83-3.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3 .86-7.01L19.42 4h-.01l-1.1 2-2.76 5H8.53l-.13-.27L6.16 6l-.95-2-.94-2H1v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.13 0-.25-.11-.25 -.25z"></path></g>
14626 <g id="alarm"><path d="M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39L 6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3. 13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"></path></g>
14627 <g id="alarm-add"><path d="M7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM22 5. 72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7- 7 7zm1-11h-2v3H8v2h3v3h2v-3h3v-2h-3V9z"></path></g>
14628 <g id="alarm-off"><path d="M12 6c3.87 0 7 3.13 7 7 0 .84-.16 1.65-.43 2.4l1.52 1 .52c.58-1.19.91-2.51.91-3.92 0-4.97-4.03-9-9-9-1.41 0-2.73.33-3.92.91L9.6 6.43C1 0.35 6.16 11.16 6 12 6zm10-.28l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM2.92 2.29L1 .65 3.57 2.98 4.9l-1.11.93 1.42 1.42 1.11-.94.8.8C3.83 8.69 3 10.75 3 13c0 4.97 4.02 9 9 9 2.25 0 4.31-.83 5.89-2.2l2.2 2.2 1.27-1.27L3.89 3.27l-.97-.98zm13.55 16.1C15.26 19.39 13.7 20 12 20c-3.87 0-7-3.13-7-7 0-1.7.61-3.26 1.61-4.47l9.86 9 .86zM8.02 3.28L6.6 1.86l-.86.71 1.42 1.42.86-.71z"></path></g>
14629 <g id="alarm-on"><path d="M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3. 39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7zm-1.46-5.47L8.41 12.4l-1.06 1.06 3.18 3.18 6-6-1.06-1.06-4.93 4.95z"></path>< /g>
14630 <g id="all-out"><path d="M16.21 4.16l4 4v-4zm4 12l-4 4h4zm-12 4l-4-4v4zm-4-12l4- 4h-4zm12.95-.95c-2.73-2.73-7.17-2.73-9.9 0s-2.73 7.17 0 9.9 7.17 2.73 9.9 0 2.73 -7.16 0-9.9zm-1.1 8.8c-2.13 2.13-5.57 2.13-7.7 0s-2.13-5.57 0-7.7 5.57-2.13 7.7 0 2.13 5.57 0 7.7z"></path></g>
14631 <g id="android"><path d="M6 18c0 .55.45 1 1 1h1v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V19h2v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V19h1c.55 0 1-.45 1-1V8H6v 10zM3.5 8C2.67 8 2 8.67 2 9.5v7c0 .83.67 1.5 1.5 1.5S5 17.33 5 16.5v-7C5 8.67 4. 33 8 3.5 8zm17 0c-.83 0-1.5.67-1.5 1.5v7c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-7 c0-.83-.67-1.5-1.5-1.5zm-4.97-5.84l1.3-1.3c.2-.2.2-.51 0-.71-.2-.2-.51-.2-.71 0l -1.48 1.48C13.85 1.23 12.95 1 12 1c-.96 0-1.86.23-2.66.63L7.85.15c-.2-.2-.51-.2- .71 0-.2.2-.2.51 0 .71l1.31 1.31C6.97 3.26 6 5.01 6 7h12c0-1.99-.97-3.75-2.47-4. 84zM10 5H9V4h1v1zm5 0h-1V4h1v1z"></path></g>
14632 <g id="announcement"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-. 9 2-2V4c0-1.1-.9-2-2-2zm-7 9h-2V5h2v6zm0 4h-2v-2h2v2z"></path></g>
14633 <g id="apps"><path d="M4 8h4V4H4v4zm6 12h4v-4h-4v4zm-6 0h4v-4H4v4zm0-6h4v-4H4v4z m6 0h4v-4h-4v4zm6-10v4h4V4h-4zm-6 4h4V4h-4v4zm6 6h4v-4h-4v4zm0 6h4v-4h-4v4z"></p ath></g>
14634 <g id="archive"><path d="M20.54 5.23l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0 -.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5L6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81 -1h12l.94 1H5.12z"></path></g>
14635 <g id="arrow-back"><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 1 3H20v-2z"></path></g>
14636 <g id="arrow-downward"><path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59 L4 12l8 8 8-8z"></path></g>
14637 <g id="arrow-drop-down"><path d="M7 10l5 5 5-5z"></path></g>
14638 <g id="arrow-drop-down-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 1 0-4.48 10-10S17.52 2 12 2zm0 12l-4-4h8l-4 4z"></path></g>
14639 <g id="arrow-drop-up"><path d="M7 14l5-5 5 5z"></path></g>
14640 <g id="arrow-forward"><path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"></path></g>
14641 <g id="arrow-upward"><path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l -8-8-8 8z"></path></g>
14642 <g id="aspect-ratio"><path d="M19 12h-2v3h-3v2h5v-5zM7 9h3V7H5v5h2V9zm14-6H3c-1. 1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99 h18v14.02z"></path></g>
14643 <g id="assessment"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2- .9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"></path></ g>
14644 <g id="assignment"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c. 55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4 H7V7h10v2z"></path></g>
14645 <g id="assignment-ind"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84- 2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 4c1.66 0 3 1.34 3 3s-1.34 3 -3 3-3-1.34-3-3 1.34-3 3-3zm6 12H6v-1.4c0-2 4-3.1 6-3.1s6 1.1 6 3.1V19z"></path> </g>
14646 <g id="assignment-late"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84 -2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm- 6 15h-2v-2h2v2zm0-4h-2V8h2v6zm-1-9c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"></path></g>
14647 <g id="assignment-return"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4. 84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z m-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm4 12h-4v3l-5-5 5-5v3h4v4z" ></path></g>
14648 <g id="assignment-returned"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2. 4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2- 2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 15l-5-5h3V9h4v4h3l-5 5 z"></path></g>
14649 <g id="assignment-turned-in"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2 .4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2 -2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm-2 14l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"></path></g>
14650 <g id="attachment"><path d="M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1. 79 4-4 4H9.5C8.12 15 7 13.88 7 12.5S8.12 10 9.5 10H17v2H9.41c-.55 0-.55 1 0 1H18 c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z"></path></g>
14651 <g id="autorenew"><path d="M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1 .24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c .44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.4 6-3.03-1.24-4.26z"></path></g>
14652 <g id="backspace"><path d="M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53. 9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.4 1 17 9 15.59 12.59 12 9 8.41 10.41 7 14 10.59 17.59 7 19 8.41 15.41 12 19 15.59z "></path></g>
14653 <g id="backup"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.3 5 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05 -4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path></g>
14654 <g id="block"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.5 2 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z"></path></g>
14655 <g id="book"><path d="M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2 V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4z"></path></g>
14656 <g id="bookmark"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2 -2-2z"></path></g>
14657 <g id="bookmark-border"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1 .1-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"></path></g>
14658 <g id="bug-report"><path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15. 59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.0 4.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33. 09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v 2z"></path></g>
14659 <g id="build"><path d="M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1 .4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z"></path></g>
14660 <g id="cached"><path d="M19 8l-4 4h3c0 3.31-2.69 6-6 6-1.01 0-1.97-.25-2.8-.7l-1 .46 1.46C8.97 19.54 10.43 20 12 20c4.42 0 8-3.58 8-8h3l-4-4zM6 12c0-3.31 2.69-6 6-6 1.01 0 1.97.25 2.8.7l1.46-1.46C15.03 4.46 13.57 4 12 4c-4.42 0-8 3.58-8 8H1l 4 4 4-4H6z"></path></g>
14661 <g id="camera-enhance"><path d="M9 3L7.17 5H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h1 6c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2h-3.17L15 3H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5 -5 5 2.24 5 5-2.24 5-5 5zm0-1l1.25-2.75L16 13l-2.75-1.25L12 9l-1.25 2.75L8 13l2. 75 1.25z"></path></g>
14662 <g id="cancel"><path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17. 53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 1 0.59 15.59 7 17 8.41 13.41 12 17 15.59z"></path></g>
14663 <g id="card-giftcard"><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3 -1.05 0-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c 0 .35.07.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2 -2V8c0-1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c .55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"></path></g>
14664 <g id="card-membership"><path d="M20 2H4c-1.11 0-2 .89-2 2v11c0 1.11.89 2 2 2h4v 5l4-2 4 2v-5h4c1.11 0 2-.89 2-2V4c0-1.11-.89-2-2-2zm0 13H4v-2h16v2zm0-5H4V4h16v6 z"></path></g>
14665 <g id="card-travel"><path d="M20 6h-3V4c0-1.11-.89-2-2-2H9c-1.11 0-2 .89-2 2v2H4 c-1.11 0-2 .89-2 2v11c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zM9 4h6v2H9V4zm11 15H4v-2h16v2zm0-5H4V8h3v2h2V8h6v2h2V8h3v6z"></path></g>
14666 <g id="change-history"><path d="M12 7.77L18.39 18H5.61L12 7.77M12 4L2 20h20L12 4 z"></path></g>
14667 <g id="check"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"></path ></g>
14668 <g id="check-box"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"> </path></g>
14669 <g id="check-box-outline-blank"><path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v1 4c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"></path></g>
14670 <g id="check-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10- 10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"></path></g>
14671 <g id="chevron-left"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></p ath></g>
14672 <g id="chevron-right"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z">< /path></g>
14673 <g id="chrome-reader-mode"><path d="M13 12h7v1.5h-7zm0-2.5h7V11h-7zm0 5h7V16h-7z M21 4H3c-1.1 0-2 .9-2 2v13c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 1 5h-9V6h9v13z"></path></g>
14674 <g id="class"><path d="M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2- 2V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4z"></path></g>
14675 <g id="clear"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></g>
14676 <g id="close"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></g>
14677 <g id="cloud"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05- 4.78-4.65-4.96z"></path></g>
14678 <g id="cloud-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10- 10S17.52 2 12 2zm4.5 14H8c-1.66 0-3-1.34-3-3s1.34-3 3-3l.14.01C8.58 8.28 10.13 7 12 7c2.21 0 4 1.79 4 4h.5c1.38 0 2.5 1.12 2.5 2.5S17.88 16 16.5 16z"></path></g >
14679 <g id="cloud-done"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64- 2.05-4.78-4.65-4.96zM10 17l-3.5-3.5 1.41-1.41L10 14.17 15.18 9l1.41 1.41L10 17z" ></path></g>
14680 <g id="cloud-download"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2 .64-2.05-4.78-4.65-4.96zM17 13l-5 5-5-5h3V9h4v4h3z"></path></g>
14681 <g id="cloud-off"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43- 4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.6 4-2.05-4.78-4.65-4.96zM3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6 h11.73l2 2L21 20.73 4.27 4 3 5.27zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h1 .73z"></path></g>
14682 <g id="cloud-queue"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.6 4 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64 -2.05-4.78-4.65-4.96zM19 18H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h.71C7.37 7.69 9.48 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3s-1.34 3-3 3z"></path></g>
14683 <g id="cloud-upload"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5. 64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.6 4-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path></g>
14684 <g id="code"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4 .6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"></path></g>
14685 <g id="compare-arrows"><path d="M9.01 14H2v2h7.01v3L13 15l-3.99-4v3zm5.98-1v-3H2 2V8h-7.01V5L11 9l3.99 4z"></path></g>
14686 <g id="content-copy"><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0- 2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z">< /path></g>
14687 <g id="content-cut"><path d="M9.64 7.64c.23-.5.36-1.05.36-1.64 0-2.21-1.79-4-4-4 S2 3.79 2 6s1.79 4 4 4c.59 0 1.14-.13 1.64-.36L10 12l-2.36 2.36C7.14 14.13 6.59 14 6 14c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4c0-.59-.13-1.14-.36-1.64L12 14l7 7h3v-1L9.64 7.64zM6 8c-1.1 0-2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm0 12c-1.1 0 -2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm6-7.5c-.28 0-.5-.22-.5-.5s.22-.5.5-.5.5. 22.5.5-.22.5-.5.5zM19 3l-6 6 2 2 7-7V3z"></path></g>
14688 <g id="content-paste"><path d="M19 2h-4.18C14.4.84 13.3 0 12 0c-1.3 0-2.4.84-2.8 2 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c .55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z"></path> </g>
14689 <g id="copyright"><path d="M10.08 10.86c.05-.33.16-.62.3-.87s.34-.46.59-.62c.24- .15.54-.22.91-.23.23.01.44.05.63.13.2.09.38.21.52.36s.25.33.34.53.13.42.14.64h1. 79c-.02-.47-.11-.9-.28-1.29s-.4-.73-.7-1.01-.66-.5-1.08-.66-.88-.23-1.39-.23c-.6 5 0-1.22.11-1.7.34s-.88.53-1.2.92-.56.84-.71 1.36S8 11.29 8 11.87v.27c0 .58.08 1 .12.23 1.64s.39.97.71 1.35.72.69 1.2.91 1.05.34 1.7.34c.47 0 .91-.08 1.32-.23s.7 7-.36 1.08-.63.56-.58.74-.94.29-.74.3-1.15h-1.79c-.01.21-.06.4-.15.58s-.21.33-.3 6.46-.32.23-.52.3c-.19.07-.39.09-.6.1-.36-.01-.66-.08-.89-.23-.25-.16-.45-.37-.5 9-.62s-.25-.55-.3-.88-.08-.67-.08-1v-.27c0-.35.03-.68.08-1.01zM12 2C6.48 2 2 6.4 8 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"></path></g>
14690 <g id="create"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7. 04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3. 75 1.83-1.83z"></path></g>
14691 <g id="create-new-folder"><path d="M20 6h-8l-2-2H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-1 8h-3v3h-2v-3h-3v-2h3V9 h2v3h3v2z"></path></g>
14692 <g id="credit-card"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2 h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"></path> </g>
14693 <g id="dashboard"><path d="M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6 h8V3h-8z"></path></g>
14694 <g id="date-range"><path d="M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1 V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c 0-1.1-.9-2-2-2zm0 16H5V9h14v11z"></path></g>
14695 <g id="delete"><path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l- 1-1h-5l-1 1H5v2h14V4z"></path></g>
14696 <g id="description"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2 H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"></p ath></g>
14697 <g id="dns"><path d="M20 13H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1 -1v-6c0-.55-.45-1-1-1zM7 19c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM20 3H4c- .55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM7 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"></path></g>
14698 <g id="done"><path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"></path ></g>
14699 <g id="done-all"><path d="M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L1 1.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41 L1.83 12 .41 13.41z"></path></g>
14700 <g id="donut-large"><path d="M11 5.08V2c-5 .5-9 4.81-9 10s4 9.5 9 10v-3.08c-3-.4 8-6-3.4-6-6.92s3-6.44 6-6.92zM18.97 11H22c-.47-5-4-8.53-9-9v3.08C16 5.51 18.54 8 18.97 11zM13 18.92V22c5-.47 8.53-4 9-9h-3.03c-.43 3-2.97 5.49-5.97 5.92z"></pat h></g>
14701 <g id="donut-small"><path d="M11 9.16V2c-5 .5-9 4.79-9 10s4 9.5 9 10v-7.16c-1-.4 1-2-1.52-2-2.84s1-2.43 2-2.84zM14.86 11H22c-.48-4.75-4-8.53-9-9v7.16c1 .3 1.52.9 8 1.86 1.84zM13 14.84V22c5-.47 8.52-4.25 9-9h-7.14c-.34.86-.86 1.54-1.86 1.84z"> </path></g>
14702 <g id="drafts"><path d="M21.99 8c0-.72-.37-1.35-.94-1.7L12 1 2.95 6.3C2.38 6.65 2 7.28 2 8v10c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2l-.01-10zM12 13L3.74 7.84 12 3l8.26 4.84L12 13z"></path></g>
14703 <g id="eject"><path d="M5 17h14v2H5zm7-12L5.33 15h13.34z"></path></g>
14704 <g id="error"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.5 2 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"></path></g>
14705 <g id="error-outline"><path d="M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58 -8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></g>
14706 <g id="event"><path d="M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L 3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z" ></path></g>
14707 <g id="event-seat"><path d="M4 18v3h3v-3h10v3h3v-6H4zm15-8h3v3h-3zM2 10h3v3H2zm1 5 3H7V5c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2v8z"></path></g>
14708 <g id="exit-to-app"><path d="M10.09 15.59L11.5 17l5-5-5-5-1.41 1.41L12.67 11H3v2 h9.67l-2.58 2.59zM19 3H5c-1.11 0-2 .9-2 2v4h2V5h14v14H5v-4H3v4c0 1.1.89 2 2 2h14 c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"></path></g>
14709 <g id="expand-less"><path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"></p ath></g>
14710 <g id="expand-more"><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"></pat h></g>
14711 <g id="explore"><path d="M12 10.9c-.61 0-1.1.49-1.1 1.1s.49 1.1 1.1 1.1c.61 0 1. 1-.49 1.1-1.1s-.49-1.1-1.1-1.1zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10 -10S17.52 2 12 2zm2.19 12.19L6 18l3.81-8.19L18 6l-3.81 8.19z"></path></g>
14712 <g id="extension"><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 1 0.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.2 1 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.2 1 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z" ></path></g>
14713 <g id="face"><path d="M9 11.75c-.69 0-1.25.56-1.25 1.25s.56 1.25 1.25 1.25 1.25- .56 1.25-1.25-.56-1.25-1.25-1.25zm6 0c-.69 0-1.25.56-1.25 1.25s.56 1.25 1.25 1.2 5 1.25-.56 1.25-1.25-.56-1.25-1.25-1.25zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 1 0-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8 0-.29.02-.58.05-.86 2.36-1.05 4.23-2.98 5.21-5.37C11.07 8.33 14.05 10 17.42 10c.78 0 1.53-.09 2.25-.26.21.71. 33 1.47.33 2.26 0 4.41-3.59 8-8 8z"></path></g>
14714 <g id="favorite"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4. 42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"></path></g>
14715 <g id="favorite-border"><path d="M16.5 3c-1.74 0-3.41.81-4.5 2.09C10.91 3.81 9.2 4 3 7.5 3 4.42 3 2 5.42 2 8.5c0 3.78 3.4 6.86 8.55 11.54L12 21.35l1.45-1.32C18.6 15.36 22 12.28 22 8.5 22 5.42 19.58 3 16.5 3zm-4.4 15.55l-.1.1-.1-.1C7.14 14.24 4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96 5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05z"></path></g>
14716 <g id="feedback"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2- 2V4c0-1.1-.9-2-2-2zm-7 12h-2v-2h2v2zm0-4h-2V6h2v4z"></path></g>
14717 <g id="file-download"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path ></g>
14718 <g id="file-upload"><path d="M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z"></path></g>
14719 <g id="filter-list"><path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"></p ath></g>
14720 <g id="find-in-page"><path d="M20 19.59V8l-6-6H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1 .89 2 1.99 2H18c.45 0 .85-.15 1.19-.4l-4.43-4.43c-.8.52-1.74.83-2.76.83-2.76 0-5 -2.24-5-5s2.24-5 5-5 5 2.24 5 5c0 1.02-.31 1.96-.83 2.75L20 19.59zM9 13c0 1.66 1 .34 3 3 3s3-1.34 3-3-1.34-3-3-3-3 1.34-3 3z"></path></g>
14721 <g id="find-replace"><path d="M11 6c1.38 0 2.63.56 3.54 1.46L12 10h6V4l-2.05 2.0 5C14.68 4.78 12.93 4 11 4c-3.53 0-6.43 2.61-6.92 6H6.1c.46-2.28 2.48-4 4.9-4zm5. 64 9.14c.66-.9 1.12-1.97 1.28-3.14H15.9c-.46 2.28-2.48 4-4.9 4-1.38 0-2.63-.56-3 .54-1.46L10 12H4v6l2.05-2.05C7.32 17.22 9.07 18 11 18c1.55 0 2.98-.51 4.14-1.36L 20 21.49 21.49 20l-4.85-4.86z"></path></g>
14722 <g id="fingerprint"><path d="M17.81 4.47c-.08 0-.16-.02-.23-.06C15.66 3.42 14 3 12.01 3c-1.98 0-3.86.47-5.57 1.41-.24.13-.54.04-.68-.2-.13-.24-.04-.55.2-.68C7.8 2 2.52 9.86 2 12.01 2c2.13 0 3.99.47 6.03 1.52.25.13.34.43.21.67-.09.18-.26.28-. 44.28zM3.5 9.72c-.1 0-.2-.03-.29-.09-.23-.16-.28-.47-.12-.7.99-1.4 2.25-2.5 3.75 -3.27C9.98 4.04 14 4.03 17.15 5.65c1.5.77 2.76 1.86 3.75 3.25.16.22.11.54-.12.7- .23.16-.54.11-.7-.12-.9-1.26-2.04-2.25-3.39-2.94-2.87-1.47-6.54-1.47-9.4.01-1.36 .7-2.5 1.7-3.4 2.96-.08.14-.23.21-.39.21zm6.25 12.07c-.13 0-.26-.05-.35-.15-.87- .87-1.34-1.43-2.01-2.64-.69-1.23-1.05-2.73-1.05-4.34 0-2.97 2.54-5.39 5.66-5.39s 5.66 2.42 5.66 5.39c0 .28-.22.5-.5.5s-.5-.22-.5-.5c0-2.42-2.09-4.39-4.66-4.39-2. 57 0-4.66 1.97-4.66 4.39 0 1.44.32 2.77.93 3.85.64 1.15 1.08 1.64 1.85 2.42.19.2 .19.51 0 .71-.11.1-.24.15-.37.15zm7.17-1.85c-1.19 0-2.24-.3-3.1-.89-1.49-1.01-2. 38-2.65-2.38-4.39 0-.28.22-.5.5-.5s.5.22.5.5c0 1.41.72 2.74 1.94 3.56.71.48 1.54 .71 2.54.71.24 0 .64-.03 1.04-.1.27-.05.53.13.58.41.05.27-.13.53-.41.58-.57.11-1 .07.12-1.21.12zM14.91 22c-.04 0-.09-.01-.13-.02-1.59-.44-2.63-1.03-3.72-2.1-1.4- 1.39-2.17-3.24-2.17-5.22 0-1.62 1.38-2.94 3.08-2.94 1.7 0 3.08 1.32 3.08 2.94 0 1.07.93 1.94 2.08 1.94s2.08-.87 2.08-1.94c0-3.77-3.25-6.83-7.25-6.83-2.84 0-5.44 1.58-6.61 4.03-.39.81-.59 1.76-.59 2.8 0 .78.07 2.01.67 3.61.1.26-.03.55-.29.64 -.26.1-.55-.04-.64-.29-.49-1.31-.73-2.61-.73-3.96 0-1.2.23-2.29.68-3.24 1.33-2.7 9 4.28-4.6 7.51-4.6 4.55 0 8.25 3.51 8.25 7.83 0 1.62-1.38 2.94-3.08 2.94s-3.08- 1.32-3.08-2.94c0-1.07-.93-1.94-2.08-1.94s-2.08.87-2.08 1.94c0 1.71.66 3.31 1.87 4.51.95.94 1.86 1.46 3.27 1.85.27.07.42.35.35.61-.05.23-.26.38-.47.38z"></path>< /g>
14723 <g id="flag"><path d="M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6z"></path></g>
14724 <g id="flight-land"><path d="M2.5 19h19v2h-19zm7.18-5.73l4.35 1.16 5.31 1.42c.8. 21 1.62-.26 1.84-1.06.21-.8-.26-1.62-1.06-1.84l-5.31-1.42-2.76-9.02L10.12 2v8.28 L5.15 8.95l-.93-2.32-1.45-.39v5.17l1.6.43 5.31 1.43z"></path></g>
14725 <g id="flight-takeoff"><path d="M2.5 19h19v2h-19zm19.57-9.36c-.21-.8-1.04-1.28-1 .84-1.06L14.92 10l-6.9-6.43-1.93.51 4.14 7.17-4.97 1.33-1.97-1.54-1.45.39 1.82 3 .16.77 1.33 1.6-.43 5.31-1.42 4.35-1.16L21 11.49c.81-.23 1.28-1.05 1.07-1.85z">< /path></g>
14726 <g id="flip-to-back"><path d="M9 7H7v2h2V7zm0 4H7v2h2v-2zm0-8c-1.11 0-2 .9-2 2h2 V3zm4 12h-2v2h2v-2zm6-12v2h2c0-1.1-.9-2-2-2zm-6 0h-2v2h2V3zM9 17v-2H7c0 1.1.89 2 2 2zm10-4h2v-2h-2v2zm0-4h2V7h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zM5 7H3v12c0 1.1.89 2 2 2h12v-2H5V7zm10-2h2V3h-2v2zm0 12h2v-2h-2v2z"></path></g>
14727 <g id="flip-to-front"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm2 4v-2H3c0 1.1.89 2 2 2zM3 9h2V7H3v2zm12 12h2v-2h-2v2zm4-18H9c-1.11 0-2 .9-2 2v10c0 1.1.89 2 2 2h10 c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12H9V5h10v10zm-8 6h2v-2h-2v2zm-4 0h2v-2H7v2z "></path></g>
14728 <g id="folder"><path d="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></g>
14729 <g id="folder-open"><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z"></path></g>
14730 <g id="folder-shared"><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm-5 3c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2- 2 .9-2 2-2zm4 8h-8v-1c0-1.33 2.67-2 4-2s4 .67 4 2v1z"></path></g>
14731 <g id="font-download"><path d="M9.93 13.5h4.14L12 7.98zM20 2H4c-1.1 0-2 .9-2 2v1 6c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-4.05 16.5l-1.14-3H9.17l-1.1 2 3H5.96l5.11-13h1.86l5.11 13h-2.09z"></path></g>
14732 <g id="forward"><path d="M12 8V4l8 8-8 8v-4H4V8z"></path></g>
14733 <g id="fullscreen"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v- 5h-2v3zM14 5v2h3v3h2V5h-5z"></path></g>
14734 <g id="fullscreen-exit"><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h 3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"></path></g>
14735 <g id="gavel"><path d="M1 21h12v2H1zM5.245 8.07l2.83-2.827 14.14 14.142-2.828 2. 828zM12.317 1l5.657 5.656-2.83 2.83-5.654-5.66zM3.825 9.485l5.657 5.657-2.828 2. 828-5.657-5.657z"></path></g>
14736 <g id="gesture"><path d="M4.59 6.89c.7-.71 1.4-1.35 1.71-1.22.5.2 0 1.03-.3 1.52 -.25.42-2.86 3.89-2.86 6.31 0 1.28.48 2.34 1.34 2.98.75.56 1.74.73 2.64.46 1.07- .31 1.95-1.4 3.06-2.77 1.21-1.49 2.83-3.44 4.08-3.44 1.63 0 1.65 1.01 1.76 1.79- 3.78.64-5.38 3.67-5.38 5.37 0 1.7 1.44 3.09 3.21 3.09 1.63 0 4.29-1.33 4.69-6.1H 21v-2.5h-2.47c-.15-1.65-1.09-4.2-4.03-4.2-2.25 0-4.18 1.91-4.94 2.84-.58.73-2.06 2.48-2.29 2.72-.25.3-.68.84-1.11.84-.45 0-.72-.83-.36-1.92.35-1.09 1.4-2.86 1.8 5-3.52.78-1.14 1.3-1.92 1.3-3.28C8.95 3.69 7.31 3 6.44 3 5.12 3 3.97 4 3.72 4.25 c-.36.36-.66.66-.88.93l1.75 1.71zm9.29 11.66c-.31 0-.74-.26-.74-.72 0-.6.73-2.2 2.87-2.76-.3 2.69-1.43 3.48-2.13 3.48z"></path></g>
14737 <g id="get-app"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path></g>
14738 <g id="gif"><path d="M11.5 9H13v6h-1.5zM9 9H6c-.6 0-1 .5-1 1v4c0 .5.4 1 1 1h3c.6 0 1-.5 1-1v-2H8.5v1.5h-2v-3H10V10c0-.5-.4-1-1-1zm10 1.5V9h-4.5v6H16v-2h2v-1.5h- 2v-1z"></path></g>
14739 <g id="grade"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"></path></g>
14740 <g id="group-work"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10 S17.52 2 12 2zM8 17.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5 -1.12 2.5-2.5 2.5zM9.5 8c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5-1.12 2.5-2.5 2 .5S9.5 9.38 9.5 8zm6.5 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2. 5 2.5-1.12 2.5-2.5 2.5z"></path></g>
14741 <g id="help"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1. 45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2 .21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"></path></g>
14742 <g id="help-outline"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8- 3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0- 2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></g>
14743 <g id="highlight-off"><path d="M14.59 8L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41 14.59 8zM12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8- 8 8 3.59 8 8-3.59 8-8 8z"></path></g>
14744 <g id="history"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.8 7 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19 .99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2 .08V8H12z"></path></g>
14745 <g id="home"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"></path></g>
14746 <g id="hourglass-empty"><path d="M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5. 99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zm10 14.5V20H8v-3.5l4-4 4 4zm-4-5l-4-4V4 h8v3.5l-4 4z"></path></g>
14747 <g id="hourglass-full"><path d="M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.9 9h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6z"></path></g>
14748 <g id="http"><path d="M4.5 11h-2V9H1v6h1.5v-2.5h2V15H6V9H4.5v2zm2.5-.5h1.5V15H10 v-4.5h1.5V9H7v1.5zm5.5 0H14V15h1.5v-4.5H17V9h-4.5v1.5zm9-1.5H18v6h1.5v-2h2c.8 0 1.5-.7 1.5-1.5v-1c0-.8-.7-1.5-1.5-1.5zm0 2.5h-2v-1h2v1z"></path></g>
14749 <g id="https"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9 -2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3. 1 3.1v2z"></path></g>
14750 <g id="important-devices"><path d="M23 11.01L18 11c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-9c0-.55-.45-.99-1-.99zM23 20h-5v-7h5v7zM20 2H2C.89 2 0 2 .89 0 4v12c0 1.1.89 2 2 2h7v2H7v2h8v-2h-2v-2h2v-2H2V4h18v5h2V4c0-1.11-.9-2-2-2zm -8.03 7L11 6l-.97 3H7l2.47 1.76-.94 2.91 2.47-1.8 2.47 1.8-.94-2.91L15 9h-3.03z" ></path></g>
14751 <g id="inbox"><path d="M19 3H4.99c-1.11 0-1.98.89-1.98 2L3 19c0 1.1.88 2 1.99 2H 19c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V 5H19v10z"></path></g>
14752 <g id="indeterminate-check-box"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"></path></g>
14753 <g id="info"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"></path></g>
14754 <g id="info-outline"><path d="M11 17h2v-6h-2v6zm1-15C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8- 3.59 8-8 8zM11 9h2V7h-2v2z"></path></g>
14755 <g id="input"><path d="M21 3.01H3c-1.1 0-2 .9-2 2V9h2V4.99h18v14.03H3V15H1v4.01c 0 1.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98v-14c0-1.11-.9-2-2-2zM11 16l4-4-4-4v3H1 v2h10v3z"></path></g>
14756 <g id="invert-colors"><path d="M17.66 7.93L12 2.27 6.34 7.93c-3.12 3.12-3.12 8.1 9 0 11.31C7.9 20.8 9.95 21.58 12 21.58c2.05 0 4.1-.78 5.66-2.34 3.12-3.12 3.12-8 .19 0-11.31zM12 19.59c-1.6 0-3.11-.62-4.24-1.76C6.62 16.69 6 15.19 6 13.59s.62-3 .11 1.76-4.24L12 5.1v14.49z"></path></g>
14757 <g id="label"><path d="M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5.01 3 5.9 3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12l-4.37-6.16z"></p ath></g>
14758 <g id="label-outline"><path d="M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5. 01 3 5.9 3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12l-4.37-6. 16zM16 17H5V7h11l3.55 5L16 17z"></path></g>
14759 <g id="language"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 2 2 17.52 22 12S17.52 2 11.99 2zm6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63 3.37 1.91 4.33 3.56zM12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2. 76 1.91-3.96zM4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32- .14 2 0 .68.06 1.34.14 2H4.26zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3. 37-1.9-4.33-3.56zm2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8 .03 8zM12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96z M14.34 14H9.66c-.09-.66-.16-1.32-.16-2 0-.68.07-1.35.16-2h4.68c.09.65.16 1.32.16 2 0 .68-.07 1.34-.16 2zm.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.4 9 2.93-4.33 3.56zM16.36 14c.08-.66.14-1.32.14-2 0-.68-.06-1.34-.14-2h3.38c.16.64 .26 1.31.26 2s-.1 1.36-.26 2h-3.38z"></path></g>
14760 <g id="launch"><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1 .1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></pa th></g>
14761 <g id="lightbulb-outline"><path d="M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1 zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7zm2.85 11.1l-.85.6V16h-4v-2. 3l-.85-.6C7.8 12.16 7 10.63 7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15 4.1z"></path></g>
14762 <g id="line-style"><path d="M3 16h5v-2H3v2zm6.5 0h5v-2h-5v2zm6.5 0h5v-2h-5v2zM3 20h2v-2H3v2zm4 0h2v-2H7v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zM3 12h8v- 2H3v2zm10 0h8v-2h-8v2zM3 4v4h18V4H3z"></path></g>
14763 <g id="line-weight"><path d="M3 17h18v-2H3v2zm0 3h18v-1H3v1zm0-7h18v-3H3v3zm0-9v 4h18V4H3z"></path></g>
14764 <g id="link"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2 .24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></pat h></g>
14765 <g id="list"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm 0 4h14v-2H7v2zM7 7v2h14V7H7z"></path></g>
14766 <g id="lock"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9- 2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"></path></g>
14767 <g id="lock-open"><path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6- 9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2 zm0 12H6V10h12v10z"></path></g>
14768 <g id="lock-outline"><path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z m6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1 .1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM8.9 6c0-1.71 1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1v 2H8.9V6zM18 20H6V10h12v10z"></path></g>
14769 <g id="loyalty"><path d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9 -2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7 c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7zm11.77 8.27L13 19.54l-4.27-4.27C8.28 14.81 8 1 4.19 8 13.5c0-1.38 1.12-2.5 2.5-2.5.69 0 1.32.28 1.77.74l.73.72.73-.73c.45-.45 1 .08-.73 1.77-.73 1.38 0 2.5 1.12 2.5 2.5 0 .69-.28 1.32-.73 1.77z"></path></g>
14770 <g id="mail"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2 -.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"></path></g>
14771 <g id="markunread"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1 .1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"></path></g>
14772 <g id="markunread-mailbox"><path d="M20 6H10v6H8V4h6V0H6v6H4c-1.1 0-2 .9-2 2v12c 0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2z"></path></g>
14773 <g id="menu"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"></path></g>
14774 <g id="more-horiz"><path d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-. 9 2-2-.9-2-2-2z"></path></g>
14775 <g id="more-vert"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2 c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2 -2-.9-2-2-2z"></path></g>
14776 <g id="motorcycle"><path d="M19.44 9.03L15.41 5H11v2h3.59l2 2H5c-2.8 0-5 2.2-5 5 s2.2 5 5 5c2.46 0 4.45-1.69 4.9-4h1.65l2.77-2.77c-.21.54-.32 1.14-.32 1.77 0 2.8 2.2 5 5 5s5-2.2 5-5c0-2.65-1.97-4.77-4.56-4.97zM7.82 15C7.4 16.15 6.28 17 5 17c -1.63 0-3-1.37-3-3s1.37-3 3-3c1.28 0 2.4.85 2.82 2H5v2h2.82zM19 17c-1.66 0-3-1.3 4-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"></path></g>
14777 <g id="move-to-inbox"><path d="M19 3H4.99c-1.11 0-1.98.9-1.98 2L3 19c0 1.1.88 2 1.99 2H19c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3 H4.99V5H19v10zm-3-5h-2V7h-4v3H8l4 4 4-4z"></path></g>
14778 <g id="next-week"><path d="M20 7h-4V5c0-.55-.22-1.05-.59-1.41C15.05 3.22 14.55 3 14 3h-4c-1.1 0-2 .9-2 2v2H4c-1.1 0-2 .9-2 2v11c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V 9c0-1.1-.9-2-2-2zM10 5h4v2h-4V5zm1 13.5l-1-1 3-3-3-3 1-1 4 4-4 4z"></path></g>
14779 <g id="note-add"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18 c1.1 0 2-.9 2-2V8l-6-6zm2 14h-3v3h-2v-3H8v-2h3v-3h2v3h3v2zm-3-7V3.5L18.5 9H13z"> </path></g>
14780 <g id="offline-pin"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17 .5 2 12 2zm5 16H7v-2h10v2zm-6.7-4L7 10.7l1.4-1.4 1.9 1.9 5.3-5.3L17 7.3 10.3 14z "></path></g>
14781 <g id="opacity"><path d="M17.66 8L12 2.35 6.34 8C4.78 9.56 4 11.64 4 13.64s.78 4 .11 2.34 5.67 3.61 2.35 5.66 2.35 4.1-.79 5.66-2.35S20 15.64 20 13.64 19.22 9.56 17.66 8zM6 14c.01-2 .62-3.27 1.76-4.4L12 5.27l4.24 4.38C17.38 10.77 17.99 12 18 14H6z"></path></g>
14782 <g id="open-in-browser"><path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2 H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"> </path></g>
14783 <g id="open-in-new"><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2 h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z" ></path></g>
14784 <g id="open-with"><path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm 14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z"></path></g>
14785 <g id="pageview"><path d="M11.5 9C10.12 9 9 10.12 9 11.5s1.12 2.5 2.5 2.5 2.5-1. 12 2.5-2.5S12.88 9 11.5 9zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-3.21 14.21l-2.91-2.91c-.69.44-1.51.7-2.39.7C9.01 16 7 13 .99 7 11.5S9.01 7 11.5 7 16 9.01 16 11.5c0 .88-.26 1.69-.7 2.39l2.91 2.9-1.42 1. 42z"></path></g>
14786 <g id="pan-tool"><path d="M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1 .19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31 2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5 S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1. 5 1.5-1.5s1.5.67 1.5 1.5z"></path></g>
14787 <g id="payment"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c 1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"></path></g>
14788 <g id="perm-camera-mic"><path d="M20 5h-3.17L15 3H9L7.17 5H4c-1.1 0-2 .9-2 2v12c 0 1.1.9 2 2 2h7v-2.09c-2.83-.48-5-2.94-5-5.91h2c0 2.21 1.79 4 4 4s4-1.79 4-4h2c0 2.97-2.17 5.43-5 5.91V21h7c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-6 8c0 1.1-.9 2-2 2 s-2-.9-2-2V9c0-1.1.9-2 2-2s2 .9 2 2v4z"></path></g>
14789 <g id="perm-contact-calendar"><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 3c1.66 0 3 1.34 3 3s- 1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm6 12H6v-1c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1z"></pa th></g>
14790 <g id="perm-data-setting"><path d="M18.99 11.5c.34 0 .67.03 1 .07L20 0 0 20h11.5 6c-.04-.33-.07-.66-.07-1 0-4.14 3.36-7.5 7.5-7.5zm3.71 7.99c.02-.16.04-.32.04-.4 9 0-.17-.01-.33-.04-.49l1.06-.83c.09-.08.12-.21.06-.32l-1-1.73c-.06-.11-.19-.15- .31-.11l-1.24.5c-.26-.2-.54-.37-.85-.49l-.19-1.32c-.01-.12-.12-.21-.24-.21h-2c-. 12 0-.23.09-.25.21l-.19 1.32c-.3.13-.59.29-.85.49l-1.24-.5c-.11-.04-.24 0-.31.11 l-1 1.73c-.06.11-.04.24.06.32l1.06.83c-.02.16-.03.32-.03.49 0 .17.01.33.03.49l-1 .06.83c-.09.08-.12.21-.06.32l1 1.73c.06.11.19.15.31.11l1.24-.5c.26.2.54.37.85.49 l.19 1.32c.02.12.12.21.25.21h2c.12 0 .23-.09.25-.21l.19-1.32c.3-.13.59-.29.84-.4 9l1.25.5c.11.04.24 0 .31-.11l1-1.73c.06-.11.03-.24-.06-.32l-1.07-.83zm-3.71 1.01 c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"></path> </g>
14791 <g id="perm-device-information"><path d="M13 7h-2v2h2V7zm0 4h-2v6h2v-6zm4-9.99L7 1c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17 19H7V5h10v14z"></path></g>
14792 <g id="perm-identity"><path d="M12 5.9c1.16 0 2.1.94 2.1 2.1s-.94 2.1-2.1 2.1S9. 9 9.16 9.9 8s.94-2.1 2.1-2.1m0 9c2.97 0 6.1 1.46 6.1 2.1v1.1H5.9V17c0-.64 3.13-2 .1 6.1-2.1M12 4C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 9c-2.67 0- 8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z"></path></g>
14793 <g id="perm-media"><path d="M2 6H0v5h.01L0 20c0 1.1.9 2 2 2h18v-2H2V6zm20-2h-8l- 2-2H6c-1.1 0-1.99.9-1.99 2L4 16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2 zM7 15l4.5-6 3.5 4.51 2.5-3.01L21 15H7z"></path></g>
14794 <g id="perm-phone-msg"><path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.0 3-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.58l2.2-2.21c.28-.27.36-.66.25-1.0 1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 1 7 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM12 3v10l3-3h6V3h-9z"></path></g>
14795 <g id="perm-scan-wifi"><path d="M12 3C6.95 3 3.15 4.85 0 7.23L12 22 24 7.25C20.8 5 4.87 17.05 3 12 3zm1 13h-2v-6h2v6zm-2-8V6h2v2h-2z"></path></g>
14796 <g id="pets"><circle cx="4.5" cy="9.5" r="2.5"></circle><circle cx="9" cy="5.5" r="2.5"></circle><circle cx="15" cy="5.5" r="2.5"></circle><circle cx="19.5" cy= "9.5" r="2.5"></circle><path d="M17.34 14.86c-.87-1.02-1.6-1.89-2.48-2.91-.46-.5 4-1.05-1.08-1.75-1.32-.11-.04-.22-.07-.33-.09-.25-.04-.52-.04-.78-.04s-.53 0-.79 .05c-.11.02-.22.05-.33.09-.7.24-1.28.78-1.75 1.32-.87 1.02-1.6 1.89-2.48 2.91-1. 31 1.31-2.92 2.76-2.62 4.79.29 1.02 1.02 2.03 2.33 2.32.73.15 3.06-.44 5.54-.44h .18c2.48 0 4.81.58 5.54.44 1.31-.29 2.04-1.31 2.33-2.32.31-2.04-1.3-3.49-2.61-4. 8z"></path></g>
14797 <g id="picture-in-picture"><path d="M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1 .1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98V5c0-1.1-.9-2-2-2zm0 16.01H3V4.98h18v14.03 z"></path></g>
14798 <g id="picture-in-picture-alt"><path d="M19 11h-8v6h8v-6zm4 8V4.98C23 3.88 22.1 3 21 3H3c-1.1 0-2 .88-2 1.98V19c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2zm-2 .02H3V4.97h1 8v14.05z"></path></g>
14799 <g id="play-for-work"><path d="M11 5v5.59H7.5l4.5 4.5 4.5-4.5H13V5h-2zm-5 9c0 3. 31 2.69 6 6 6s6-2.69 6-6h-2c0 2.21-1.79 4-4 4s-4-1.79-4-4H6z"></path></g>
14800 <g id="polymer"><path d="M19 4h-4L7.11 16.63 4.5 12 9 4H5L.5 12 5 20h4l7.89-12.6 3L19.5 12 15 20h4l4.5-8z"></path></g>
14801 <g id="power-settings-new"><path d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6 .83z"></path></g>
14802 <g id="pregnant-woman"><path d="M9 4c0-1.11.89-2 2-2s2 .89 2 2-.89 2-2 2-2-.89-2 -2zm7 9c-.01-1.34-.83-2.51-2-3 0-1.66-1.34-3-3-3s-3 1.34-3 3v7h2v5h3v-5h3v-4z">< /path></g>
14803 <g id="print"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3 -3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6 v4h12V3z"></path></g>
14804 <g id="query-builder"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"></path></g>
14805 <g id="question-answer"><path d="M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.4 5-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z">< /path></g>
14806 <g id="radio-button-checked"><path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2 zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></g>
14807 <g id="radio-button-unchecked"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 1 0-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8- 8 8z"></path></g>
14808 <g id="receipt"><path d="M18 17H6v-2h12v2zm0-4H6v-2h12v2zm0-4H6V7h12v2zM3 22l1.5 -1.5L6 22l1.5-1.5L9 22l1.5-1.5L12 22l1.5-1.5L15 22l1.5-1.5L18 22l1.5-1.5L21 22V2 l-1.5 1.5L18 2l-1.5 1.5L15 2l-1.5 1.5L12 2l-1.5 1.5L9 2 7.5 3.5 6 2 4.5 3.5 3 2v 20z"></path></g>
14809 <g id="record-voice-over"><circle cx="9" cy="9" r="4"></circle><path d="M9 15c-2 .67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4zm7.76-9.64l-1.68 1.69c.84 1.18.84 2.7 1 0 3.89l1.68 1.69c2.02-2.02 2.02-5.07 0-7.27zM20.07 2l-1.63 1.63c2.77 3.02 2.77 7.56 0 10.74L20.07 16c3.9-3.89 3.91-9.95 0-14z"></path></g>
14810 <g id="redeem"><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3-1.05 0 -1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 .35.0 7.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0- 1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8 .62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"></path></g>
14811 <g id="redo"><path d="M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.9 6 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z"></path></g>
14812 <g id="refresh"><path d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.9 9 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6 -2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"></path></g>
14813 <g id="remove"><path d="M19 13H5v-2h14v2z"></path></g>
14814 <g id="remove-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10 -10S17.52 2 12 2zm5 11H7v-2h10v2z"></path></g>
14815 <g id="remove-circle-outline"><path d="M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4 .48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3. 59 8 8-3.59 8-8 8z"></path></g>
14816 <g id="reorder"><path d="M3 15h18v-2H3v2zm0 4h18v-2H3v2zm0-8h18V9H3v2zm0-6v2h18V 5H3z"></path></g>
14817 <g id="reply"><path d="M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z" ></path></g>
14818 <g id="reply-all"><path d="M7 8V5l-7 7 7 7v-3l-4-4 4-4zm6 1V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"></path></g>
14819 <g id="report"><path d="M15.73 3H8.27L3 8.27v7.46L8.27 21h7.46L21 15.73V8.27L15. 73 3zM12 17.3c-.72 0-1.3-.58-1.3-1.3 0-.72.58-1.3 1.3-1.3.72 0 1.3.58 1.3 1.3 0 .72-.58 1.3-1.3 1.3zm1-4.3h-2V7h2v6z"></path></g>
14820 <g id="report-problem"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v 4z"></path></g>
14821 <g id="restore"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.8 7 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19 .99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2 .08V8H12z"></path></g>
14822 <g id="room"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.8 7-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1 .12 2.5-2.5 2.5z"></path></g>
14823 <g id="rounded-corner"><path d="M19 19h2v2h-2v-2zm0-2h2v-2h-2v2zM3 13h2v-2H3v2zm 0 4h2v-2H3v2zm0-8h2V7H3v2zm0-4h2V3H3v2zm4 0h2V3H7v2zm8 16h2v-2h-2v2zm-4 0h2v-2h- 2v2zm4 0h2v-2h-2v2zm-8 0h2v-2H7v2zm-4 0h2v-2H3v2zM21 8c0-2.76-2.24-5-5-5h-5v2h5c 1.65 0 3 1.35 3 3v5h2V8z"></path></g>
14824 <g id="rowing"><path d="M8.5 14.5L4 19l1.5 1.5L9 17h2l-2.5-2.5zM15 1c-1.1 0-2 .9 -2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 20.01L18 24l-2.99-3.01V19.5l-7.1-7.09c-.31.05 -.61.07-.91.07v-2.16c1.66.03 3.61-.87 4.67-2.04l1.4-1.55c.19-.21.43-.38.69-.5.29 -.14.62-.23.96-.23h.03C15.99 6.01 17 7.02 17 8.26v5.75c0 .84-.35 1.61-.92 2.16l- 3.58-3.58v-2.27c-.63.52-1.43 1.02-2.29 1.39L16.5 18H18l3 3.01z"></path></g>
14825 <g id="save"><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2 -2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h1 0v4z"></path></g>
14826 <g id="schedule"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 2 2 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3. 58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"></path></g>
14827 <g id="search"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5. 91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.7 9l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9. 5 11.99 14 9.5 14z"></path></g>
14828 <g id="select-all"><path d="M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2 zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm- 2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v 2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2zM7 17h10V7H7v10zm 2-8h6v6H9V9z"></path></g>
14829 <g id="send"><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path></g>
14830 <g id="settings"><path d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2. 11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1. 08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2 .65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49 .12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.1 2.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42 .49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.4 9 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3 .5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z"></path></g>
14831 <g id="settings-applications"><path d="M12 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2- .9-2-2-2zm7-7H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.8 9-2-2-2zm-1.75 9c0 .23-.02.46-.05.68l1.48 1.16c.13.11.17.3.08.45l-1.4 2.42c-.09. 15-.27.21-.43.15l-1.74-.7c-.36.28-.76.51-1.18.69l-.26 1.85c-.03.17-.18.3-.35.3h- 2.8c-.17 0-.32-.13-.35-.29l-.26-1.85c-.43-.18-.82-.41-1.18-.69l-1.74.7c-.16.06-. 34 0-.43-.15l-1.4-2.42c-.09-.15-.05-.34.08-.45l1.48-1.16c-.03-.23-.05-.46-.05-.6 9 0-.23.02-.46.05-.68l-1.48-1.16c-.13-.11-.17-.3-.08-.45l1.4-2.42c.09-.15.27-.21 .43-.15l1.74.7c.36-.28.76-.51 1.18-.69l.26-1.85c.03-.17.18-.3.35-.3h2.8c.17 0 .3 2.13.35.29l.26 1.85c.43.18.82.41 1.18.69l1.74-.7c.16-.06.34 0 .43.15l1.4 2.42c.0 9.15.05.34-.08.45l-1.48 1.16c.03.23.05.46.05.69z"></path></g>
14832 <g id="settings-backup-restore"><path d="M14 12c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2 2-.9 2-2zm-2-9c-4.97 0-9 4.03-9 9H0l4 4 4-4H5c0-3.87 3.13-7 7-7s7 3.13 7 7-3.1 3 7-7 7c-1.51 0-2.91-.49-4.06-1.3l-1.42 1.44C8.04 20.3 9.94 21 12 21c4.97 0 9-4. 03 9-9s-4.03-9-9-9z"></path></g>
14833 <g id="settings-bluetooth"><path d="M11 24h2v-2h-2v2zm-4 0h2v-2H7v2zm8 0h2v-2h-2 v2zm2.71-18.29L12 0h-1v7.59L6.41 3 5 4.41 10.59 10 5 15.59 6.41 17 11 12.41V20h1 l5.71-5.71-4.3-4.29 4.3-4.29zM13 3.83l1.88 1.88L13 7.59V3.83zm1.88 10.46L13 16.1 7v-3.76l1.88 1.88z"></path></g>
14834 <g id="settings-brightness"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18 c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02zM8 16h2.5l1.5 1.5 1.5- 1.5H16v-2.5l1.5-1.5-1.5-1.5V8h-2.5L12 6.5 10.5 8H8v2.5L6.5 12 8 13.5V16zm4-7c1.6 6 0 3 1.34 3 3s-1.34 3-3 3V9z"></path></g>
14835 <g id="settings-cell"><path d="M7 24h2v-2H7v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zM16 .01L8 0C6.9 0 6 .9 6 2v16c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V2c0-1.1-.9-1.99-2-1.99z M16 16H8V4h8v12z"></path></g>
14836 <g id="settings-ethernet"><path d="M7.77 6.76L6.23 5.48.82 12l5.41 6.52 1.54-1.2 8L3.42 12l4.35-5.24zM7 13h2v-2H7v2zm10-2h-2v2h2v-2zm-6 2h2v-2h-2v2zm6.77-7.52l-1 .54 1.28L20.58 12l-4.35 5.24 1.54 1.28L23.18 12l-5.41-6.52z"></path></g>
14837 <g id="settings-input-antenna"><path d="M12 5c-3.87 0-7 3.13-7 7h2c0-2.76 2.24-5 5-5s5 2.24 5 5h2c0-3.87-3.13-7-7-7zm1 9.29c.88-.39 1.5-1.26 1.5-2.29 0-1.38-1.1 2-2.5-2.5-2.5S9.5 10.62 9.5 12c0 1.02.62 1.9 1.5 2.29v3.3L7.59 21 9 22.41l3-3 3 3L16.41 21 13 17.59v-3.3zM12 1C5.93 1 1 5.93 1 12h2c0-4.97 4.03-9 9-9s9 4.03 9 9 h2c0-6.07-4.93-11-11-11z"></path></g>
14838 <g id="settings-input-component"><path d="M5 2c0-.55-.45-1-1-1s-1 .45-1 1v4H1v6h 6V6H5V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2H9v2zm-8 0 c0 1.3.84 2.4 2 2.82V23h2v-4.18C6.16 18.4 7 17.3 7 16v-2H1v2zM21 6V2c0-.55-.45-1 -1-1s-1 .45-1 1v4h-2v6h6V6h-2zm-8-4c0-.55-.45-1-1-1s-1 .45-1 1v4H9v6h6V6h-2V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2h-6v2z"></path></g>
14839 <g id="settings-input-composite"><path d="M5 2c0-.55-.45-1-1-1s-1 .45-1 1v4H1v6h 6V6H5V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2H9v2zm-8 0 c0 1.3.84 2.4 2 2.82V23h2v-4.18C6.16 18.4 7 17.3 7 16v-2H1v2zM21 6V2c0-.55-.45-1 -1-1s-1 .45-1 1v4h-2v6h6V6h-2zm-8-4c0-.55-.45-1-1-1s-1 .45-1 1v4H9v6h6V6h-2V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2h-6v2z"></path></g>
14840 <g id="settings-input-hdmi"><path d="M18 7V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v3H 5v6l3 6v3h8v-3l3-6V7h-1zM8 4h8v3h-2V5h-1v2h-2V5h-1v2H8V4z"></path></g>
14841 <g id="settings-input-svideo"><path d="M8 11.5c0-.83-.67-1.5-1.5-1.5S5 10.67 5 1 1.5 5.67 13 6.5 13 8 12.33 8 11.5zm7-5c0-.83-.67-1.5-1.5-1.5h-3C9.67 5 9 5.67 9 6.5S9.67 8 10.5 8h3c.83 0 1.5-.67 1.5-1.5zM8.5 15c-.83 0-1.5.67-1.5 1.5S7.67 18 8.5 18s1.5-.67 1.5-1.5S9.33 15 8.5 15zM12 1C5.93 1 1 5.93 1 12s4.93 11 11 11 11- 4.93 11-11S18.07 1 12 1zm0 20c-4.96 0-9-4.04-9-9s4.04-9 9-9 9 4.04 9 9-4.04 9-9 9zm5.5-11c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z m-2 5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"></ path></g>
14842 <g id="settings-overscan"><path d="M12.01 5.5L10 8h4l-1.99-2.5zM18 10v4l2.5-1.99 L18 10zM6 10l-2.5 2.01L6 14v-4zm8 6h-4l2.01 2.5L14 16zm7-13H3c-1.1 0-2 .9-2 2v14 c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02z"></p ath></g>
14843 <g id="settings-phone"><path d="M13 9h-2v2h2V9zm4 0h-2v2h2V9zm3 6.5c-1.25 0-2.45 -.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.58l2.2 -2.21c.28-.27.36-.66.25-1.01C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM19 9v2h2V9h-2 z"></path></g>
14844 <g id="settings-power"><path d="M7 24h2v-2H7v2zm4 0h2v-2h-2v2zm2-22h-2v10h2V2zm3 .56 2.44l-1.45 1.45C16.84 6.94 18 8.83 18 11c0 3.31-2.69 6-6 6s-6-2.69-6-6c0-2.1 7 1.16-4.06 2.88-5.12L7.44 4.44C5.36 5.88 4 8.28 4 11c0 4.42 3.58 8 8 8s8-3.58 8 -8c0-2.72-1.36-5.12-3.44-6.56zM15 24h2v-2h-2v2z"></path></g>
14845 <g id="settings-remote"><path d="M15 9H9c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h6c.5 5 0 1-.45 1-1V10c0-.55-.45-1-1-1zm-3 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM7.05 6.05l1.41 1.41C9.37 6.56 10.62 6 12 6s2.63.56 3.54 1.46l1.41-1.41C15.68 4.78 13.93 4 12 4s-3.68.78-4.95 2.05zM12 0C8.96 0 6.21 1.23 4.22 3.22l1.41 1.41C 7.26 3.01 9.51 2 12 2s4.74 1.01 6.36 2.64l1.41-1.41C17.79 1.23 15.04 0 12 0z"></ path></g>
14846 <g id="settings-voice"><path d="M7 24h2v-2H7v2zm5-11c1.66 0 2.99-1.34 2.99-3L15 4c0-1.66-1.34-3-3-3S9 2.34 9 4v6c0 1.66 1.34 3 3 3zm-1 11h2v-2h-2v2zm4 0h2v-2h-2 v2zm4-14h-1.7c0 3-2.54 5.1-5.3 5.1S6.7 13 6.7 10H5c0 3.41 2.72 6.23 6 6.72V20h2v -3.28c3.28-.49 6-3.31 6-6.72z"></path></g>
14847 <g id="shop"><path d="M16 6V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H2v13c0 1.1 1.89 2 2 2h16c1.11 0 2-.89 2-2V6h-6zm-6-2h4v2h-4V4zM9 18V9l7.5 4L9 18z"></path>< /g>
14848 <g id="shop-two"><path d="M3 9H1v11c0 1.11.89 2 2 2h14c1.11 0 2-.89 2-2H3V9zm15- 4V3c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H5v11c0 1.11.89 2 2 2h14c1.11 0 2-.89 2-2V5h-5zm-6-2h4v2h-4V3zm0 12V8l5.5 3-5.5 4z"></path></g>
14849 <g id="shopping-basket"><path d="M17.21 9l-4.38-6.56c-.19-.28-.51-.42-.83-.42-.3 2 0-.64.14-.83.43L6.79 9H2c-.55 0-1 .45-1 1 0 .09.01.18.04.27l2.54 9.27c.23.84 1 1.46 1.92 1.46h13c.92 0 1.69-.62 1.93-1.46l2.54-9.27L23 10c0-.55-.45-1-1-1h-4.7 9zM9 9l3-4.4L15 9H9zm3 8c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"></path></g >
14850 <g id="shopping-cart"><path d="M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-. 9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7. 42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49 c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2 s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z"></path></g>
14851 <g id="sort"><path d="M3 18h6v-2H3v2zM3 6v2h18V6H3zm0 7h12v-2H3v2z"></path></g>
14852 <g id="speaker-notes"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2- .9 2-2V4c0-1.1-.9-2-2-2zM8 14H6v-2h2v2zm0-3H6V9h2v2zm0-3H6V6h2v2zm7 6h-5v-2h5v2z m3-3h-8V9h8v2zm0-3h-8V6h8v2z"></path></g>
14853 <g id="spellcheck"><path d="M12.45 16h2.09L9.43 3H7.57L2.46 16h2.09l1.12-3h5.64l 1.14 3zm-6.02-5L8.5 5.48 10.57 11H6.43zm15.16.59l-8.09 8.09L9.83 16l-1.41 1.41 5 .09 5.09L23 13l-1.41-1.41z"></path></g>
14854 <g id="star"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"></path></g>
14855 <g id="star-border"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L 5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.8 8 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"></path></g>
14856 <g id="star-half"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5. 82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4V6.1l1.71 4.04 4.38.38-3.32 2 .88 1 4.28L12 15.4z"></path></g>
14857 <g id="stars"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 1 7.52 22 12S17.52 2 11.99 2zm4.24 16L12 15.45 7.77 18l1.12-4.81-3.73-3.23 4.92-.4 2L12 5l1.92 4.53 4.92.42-3.73 3.23L16.23 18z"></path></g>
14858 <g id="store"><path d="M20 4H4v2h16V4zm1 10v-2l-1-5H4l-1 5v2h1v6h10v-6h4v6h2v-6h 1zm-9 4H6v-4h6v4z"></path></g>
14859 <g id="subdirectory-arrow-left"><path d="M11 9l1.42 1.42L8.83 14H18V4h2v12H8.83l 3.59 3.58L11 21l-6-6 6-6z"></path></g>
14860 <g id="subdirectory-arrow-right"><path d="M19 15l-6 6-1.42-1.42L15.17 16H4V4h2v1 0h9.17l-3.59-3.58L13 9l6 6z"></path></g>
14861 <g id="subject"><path d="M14 17H4v2h10v-2zm6-8H4v2h16V9zM4 15h16v-2H4v2zM4 5v2h1 6V5H4z"></path></g>
14862 <g id="supervisor-account"><path d="M16.5 12c1.38 0 2.49-1.12 2.49-2.5S17.88 7 1 6.5 7C15.12 7 14 8.12 14 9.5s1.12 2.5 2.5 2.5zM9 11c1.66 0 2.99-1.34 2.99-3S10.6 6 5 9 5C7.34 5 6 6.34 6 8s1.34 3 3 3zm7.5 3c-1.83 0-5.5.92-5.5 2.75V19h11v-2.25c 0-1.83-3.67-2.75-5.5-2.75zM9 13c-2.33 0-7 1.17-7 3.5V19h7v-2.25c0-.85.33-2.34 2. 37-3.47C10.5 13.1 9.66 13 9 13z"></path></g>
14863 <g id="swap-horiz"><path d="M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v 3H10v2h7.01v3L21 9z"></path></g>
14864 <g id="swap-vert"><path d="M16 17.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3 V14h2V6.99h3L9 3z"></path></g>
14865 <g id="swap-vertical-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10- 4.48 10-10S17.52 2 12 2zM6.5 9L10 5.5 13.5 9H11v4H9V9H6.5zm11 6L14 18.5 10.5 15H 13v-4h2v4h2.5z"></path></g>
14866 <g id="system-update-alt"><path d="M12 16.5l4-4h-3v-9h-2v9H8l4 4zm9-13h-6v1.99h6 v14.03H3V5.49h6V3.5H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-14c0-1 .1-.9-2-2-2z"></path></g>
14867 <g id="tab"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V 5c0-1.1-.9-2-2-2zm0 16H3V5h10v4h8v10z"></path></g>
14868 <g id="tab-unselected"><path d="M1 9h2V7H1v2zm0 4h2v-2H1v2zm0-8h2V3c-1.1 0-2 .9- 2 2zm8 16h2v-2H9v2zm-8-4h2v-2H1v2zm2 4v-2H1c0 1.1.9 2 2 2zM21 3h-8v6h10V5c0-1.1- .9-2-2-2zm0 14h2v-2h-2v2zM9 5h2V3H9v2zM5 21h2v-2H5v2zM5 5h2V3H5v2zm16 16c1.1 0 2 -.9 2-2h-2v2zm0-8h2v-2h-2v2zm-8 8h2v-2h-2v2zm4 0h2v-2h-2v2z"></path></g>
14869 <g id="text-format"><path d="M5 17v2h14v-2H5zm4.5-4.2h5l.9 2.2h2.1L12.75 4h-1.5L 6.5 15h2.1l.9-2.2zM12 5.98L13.87 11h-3.74L12 5.98z"></path></g>
14870 <g id="theaters"><path d="M18 3v2h-2V3H8v2H6V3H4v18h2v-2h2v2h8v-2h2v2h2V3h-2zM8 17H6v-2h2v2zm0-4H6v-2h2v2zm0-4H6V7h2v2zm10 8h-2v-2h2v2zm0-4h-2v-2h2v2zm0-4h-2V7h 2v2z"></path></g>
14871 <g id="thumb-down"><path d="M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-. 14.47-.14.73v1.91l.01.01L1 14c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z" ></path></g>
14872 <g id="thumb-up"><path d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03 -.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"></path></g>
14873 <g id="thumbs-up-down"><path d="M12 6c0-.55-.45-1-1-1H5.82l.66-3.18.02-.23c0-.31 -.13-.59-.33-.8L5.38 0 .44 4.94C.17 5.21 0 5.59 0 6v6.5c0 .83.67 1.5 1.5 1.5h6.7 5c.62 0 1.15-.38 1.38-.91l2.26-5.29c.07-.17.11-.36.11-.55V6zm10.5 4h-6.75c-.62 0 -1.15.38-1.38.91l-2.26 5.29c-.07.17-.11.36-.11.55V18c0 .55.45 1 1 1h5.18l-.66 3. 18-.02.24c0 .31.13.59.33.8l.79.78 4.94-4.94c.27-.27.44-.65.44-1.06v-6.5c0-.83-.6 7-1.5-1.5-1.5z"></path></g>
14874 <g id="timeline"><path d="M23 8c0 1.1-.9 2-2 2-.18 0-.35-.02-.51-.07l-3.56 3.55c .05.16.07.34.07.52 0 1.1-.9 2-2 2s-2-.9-2-2c0-.18.02-.36.07-.52l-2.55-2.55c-.16. 05-.34.07-.52.07s-.36-.02-.52-.07l-4.55 4.56c.05.16.07.33.07.51 0 1.1-.9 2-2 2s- 2-.9-2-2 .9-2 2-2c.18 0 .35.02.51.07l4.56-4.55C8.02 9.36 8 9.18 8 9c0-1.1.9-2 2- 2s2 .9 2 2c0 .18-.02.36-.07.52l2.55 2.55c.16-.05.34-.07.52-.07s.36.02.52.07l3.55 -3.56C19.02 8.35 19 8.18 19 8c0-1.1.9-2 2-2s2 .9 2 2z"></path></g>
14875 <g id="toc"><path d="M3 9h14V7H3v2zm0 4h14v-2H3v2zm0 4h14v-2H3v2zm16 0h2v-2h-2v2 zm0-10v2h2V7h-2zm0 6h2v-2h-2v2z"></path></g>
14876 <g id="today"><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1. 1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z"></pa th></g>
14877 <g id="toll"><path d="M15 4c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z m0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zM3 12c0-2.61 1.67-4.83 4-5.65V4.26C3.55 5.15 1 8.27 1 12s2.55 6.85 6 7.74v-2.09c-2.33-.82-4-3.04-4-5.6 5z"></path></g>
14878 <g id="touch-app"><path d="M9 11.24V7.5C9 6.12 10.12 5 11.5 5S14 6.12 14 7.5v3.7 4c1.21-.81 2-2.18 2-3.74C16 5.01 13.99 3 11.5 3S7 5.01 7 7.5c0 1.56.79 2.93 2 3. 74zm9.84 4.63l-4.54-2.26c-.17-.07-.35-.11-.54-.11H13v-6c0-.83-.67-1.5-1.5-1.5S10 6.67 10 7.5v10.74l-3.43-.72c-.08-.01-.15-.03-.24-.03-.31 0-.59.13-.79.33l-.79.8 4.94 4.94c.27.27.65.44 1.06.44h6.79c.75 0 1.33-.55 1.44-1.28l.75-5.27c.01-.07.0 2-.14.02-.2 0-.62-.38-1.16-.91-1.38z"></path></g>
14879 <g id="track-changes"><path d="M19.07 4.93l-1.41 1.41C19.1 7.79 20 9.79 20 12c0 4.42-3.58 8-8 8s-8-3.58-8-8c0-4.08 3.05-7.44 7-7.93v2.02C8.16 6.57 6 9.03 6 12c0 3.31 2.69 6 6 6s6-2.69 6-6c0-1.66-.67-3.16-1.76-4.24l-1.41 1.41C15.55 9.9 16 10 .9 16 12c0 2.21-1.79 4-4 4s-4-1.79-4-4c0-1.86 1.28-3.41 3-3.86v2.14c-.6.35-1 .98 -1 1.72 0 1.1.9 2 2 2s2-.9 2-2c0-.74-.4-1.38-1-1.72V2h-1C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10c0-2.76-1.12-5.26-2.93-7.07z"></path></g>
14880 <g id="translate"><path d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3. 71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9 .19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04 zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3. 24z"></path></g>
14881 <g id="trending-down"><path d="M16 18l2.29-2.29-4.88-4.88-4 4L2 7.41 3.41 6l6 6 4-4 6.3 6.29L22 12v6z"></path></g>
14882 <g id="trending-flat"><path d="M22 12l-4-4v3H3v2h15v3z"></path></g>
14883 <g id="trending-up"><path d="M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z"></path></g>
14884 <g id="turned-in"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9- 2-2-2z"></path></g>
14885 <g id="turned-in-not"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1 -.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"></path></g>
14886 <g id="unarchive"><path d="M20.55 5.22l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.15.55L3.46 5.22C3.17 5.57 3 6.01 3 6.5V19c0 1.1.89 2 2 2h14c1.1 0 2- .9 2-2V6.5c0-.49-.17-.93-.45-1.28zM12 9.5l5.5 5.5H14v2h-4v-2H6.5L12 9.5zM5.12 5l .82-1h12l.93 1H5.12z"></path></g>
14887 <g id="undo"><path d="M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1. 16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12. 5 8z"></path></g>
14888 <g id="unfold-less"><path d="M7.41 18.59L8.83 20 12 16.83 15.17 20l1.41-1.41L12 14l-4.59 4.59zm9.18-13.18L15.17 4 12 7.17 8.83 4 7.41 5.41 12 10l4.59-4.59z"></p ath></g>
14889 <g id="unfold-more"><path d="M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"></path></g >
14890 <g id="update"><path d="M21 10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-.1-2.7 3 2.71-2.73 7.08 0 9.79 2.73 2.71 7.15 2.71 9.88 0C18.32 15.65 19 14.08 19 12.1h 2c0 1.98-.88 4.55-2.64 6.29-3.51 3.48-9.21 3.48-12.72 0-3.5-3.47-3.53-9.11-.02-1 2.58 3.51-3.47 9.14-3.47 12.65 0L21 3v7.12zM12.5 8v4.25l3.5 2.08-.72 1.21L11 13V 8h1.5z"></path></g>
14891 <g id="verified-user"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6. 45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"></path></g>
14892 <g id="view-agenda"><path d="M20 13H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zm0-10H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"></path></g>
14893 <g id="view-array"><path d="M4 18h3V5H4v13zM18 5v13h3V5h-3zM8 18h9V5H8v13z"></pa th></g>
14894 <g id="view-carousel"><path d="M7 19h10V4H7v15zm-5-2h4V6H2v11zM18 6v11h4V6h-4z"> </path></g>
14895 <g id="view-column"><path d="M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z">< /path></g>
14896 <g id="view-day"><path d="M2 21h19v-3H2v3zM20 8H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zM2 3v3h19V3H2z"></path></g>
14897 <g id="view-headline"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6 v2h16V5H4z"></path></g>
14898 <g id="view-list"><path d="M4 14h4v-4H4v4zm0 5h4v-4H4v4zM4 9h4V5H4v4zm5 5h12v-4H 9v4zm0 5h12v-4H9v4zM9 5v4h12V5H9z"></path></g>
14899 <g id="view-module"><path d="M4 11h5V5H4v6zm0 7h5v-6H4v6zm6 0h5v-6h-5v6zm6 0h5v- 6h-5v6zm-6-7h5V5h-5v6zm6-6v6h5V5h-5z"></path></g>
14900 <g id="view-quilt"><path d="M10 18h5v-6h-5v6zm-6 0h5V5H4v13zm12 0h5v-6h-5v6zM10 5v6h11V5H10z"></path></g>
14901 <g id="view-stream"><path d="M4 18h17v-6H4v6zM4 5v6h17V5H4z"></path></g>
14902 <g id="view-week"><path d="M6 5H3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-. 45 1-1V6c0-.55-.45-1-1-1zm14 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-. 45 1-1V6c0-.55-.45-1-1-1zm-7 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-. 45 1-1V6c0-.55-.45-1-1-1z"></path></g>
14903 <g id="visibility"><path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s 9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z">< /path></g>
14904 <g id="visibility-off"><path d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l 2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98 .7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3. 27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .4 4-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53- 2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"></path></g>
14905 <g id="warning"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"></p ath></g>
14906 <g id="watch-later"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17 .5 2 12 2zm4.2 14.2L11 13V7h1.5v5.2l4.5 2.7-.8 1.3z"></path></g>
14907 <g id="weekend"><path d="M21 10c-1.1 0-2 .9-2 2v3H5v-3c0-1.1-.9-2-2-2s-2 .9-2 2v 5c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-5c0-1.1-.9-2-2-2zm-3-5H6c-1.1 0-2 .9-2 2v2.15 c1.16.41 2 1.51 2 2.82V14h12v-2.03c0-1.3.84-2.4 2-2.82V7c0-1.1-.9-2-2-2z"></path ></g>
14908 <g id="work"><path d="M20 6h-4V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm- 6 0h-4V4h4v2z"></path></g>
14909 <g id="youtube-searched-for"><path d="M17.01 14h-.8l-.27-.27c.98-1.14 1.57-2.61 1.57-4.23 0-3.59-2.91-6.5-6.5-6.5s-6.5 3-6.5 6.5H2l3.84 4 4.16-4H6.51C6.51 7 8.5 3 5 11.01 5s4.5 2.01 4.5 4.5c0 2.48-2.02 4.5-4.5 4.5-.65 0-1.26-.14-1.82-.38L7.7 1 15.1c.97.57 2.09.9 3.3.9 1.61 0 3.08-.59 4.22-1.57l.27.27v.79l5.01 4.99L22 19l -4.99-5z"></path></g>
14910 <g id="zoom-in"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5 .91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v. 79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9 .5 11.99 14 9.5 14zm2.5-4h-2v2H9v-2H7V9h2V7h1v2h2v1z"></path></g>
14911 <g id="zoom-out"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v .79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zM7 9h5v1H7z"></path></g>
14912 </defs></svg>
14913 </iron-iconset-svg>
14914 <dom-module id="sort-toggle" assetpath="/res/imp/common/">
14915 <template>
14916 <style>
14917 :host {
14918 display: inline-block; 16878 display: inline-block;
14919 position: relative; 16879 position: relative;
14920 min-width: 20px; 16880 min-width: 20px;
14921 min-height: 16px; 16881 min-height: 16px;
14922 vertical-align: middle; 16882 vertical-align: middle;
14923 } 16883 }
14924 iron-icon { 16884 iron-icon {
14925 position: absolute; 16885 position: absolute;
14926 left: 0; 16886 left: 0;
14927 cursor: pointer; 16887 cursor: pointer;
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after
15649 if (position.croppedArea === 0 && alignOk) { 17609 if (position.croppedArea === 0 && alignOk) {
15650 break; 17610 break;
15651 } 17611 }
15652 } 17612 }
15653 17613
15654 return position; 17614 return position;
15655 } 17615 }
15656 17616
15657 }; 17617 };
15658 </script> 17618 </script>
15659 <script>
15660 (function() {
15661 'use strict';
15662
15663 /**
15664 * Chrome uses an older version of DOM Level 3 Keyboard Events
15665 *
15666 * Most keys are labeled as text, but some are Unicode codepoints.
15667 * Values taken from: http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-200712 21/keyset.html#KeySet-Set
15668 */
15669 var KEY_IDENTIFIER = {
15670 'U+0008': 'backspace',
15671 'U+0009': 'tab',
15672 'U+001B': 'esc',
15673 'U+0020': 'space',
15674 'U+007F': 'del'
15675 };
15676
15677 /**
15678 * Special table for KeyboardEvent.keyCode.
15679 * KeyboardEvent.keyIdentifier is better, and KeyBoardEvent.key is even bett er
15680 * than that.
15681 *
15682 * Values from: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEve nt.keyCode#Value_of_keyCode
15683 */
15684 var KEY_CODE = {
15685 8: 'backspace',
15686 9: 'tab',
15687 13: 'enter',
15688 27: 'esc',
15689 33: 'pageup',
15690 34: 'pagedown',
15691 35: 'end',
15692 36: 'home',
15693 32: 'space',
15694 37: 'left',
15695 38: 'up',
15696 39: 'right',
15697 40: 'down',
15698 46: 'del',
15699 106: '*'
15700 };
15701
15702 /**
15703 * MODIFIER_KEYS maps the short name for modifier keys used in a key
15704 * combo string to the property name that references those same keys
15705 * in a KeyboardEvent instance.
15706 */
15707 var MODIFIER_KEYS = {
15708 'shift': 'shiftKey',
15709 'ctrl': 'ctrlKey',
15710 'alt': 'altKey',
15711 'meta': 'metaKey'
15712 };
15713
15714 /**
15715 * KeyboardEvent.key is mostly represented by printable character made by
15716 * the keyboard, with unprintable keys labeled nicely.
15717 *
15718 * However, on OS X, Alt+char can make a Unicode character that follows an
15719 * Apple-specific mapping. In this case, we fall back to .keyCode.
15720 */
15721 var KEY_CHAR = /[a-z0-9*]/;
15722
15723 /**
15724 * Matches a keyIdentifier string.
15725 */
15726 var IDENT_CHAR = /U\+/;
15727
15728 /**
15729 * Matches arrow keys in Gecko 27.0+
15730 */
15731 var ARROW_KEY = /^arrow/;
15732
15733 /**
15734 * Matches space keys everywhere (notably including IE10's exceptional name
15735 * `spacebar`).
15736 */
15737 var SPACE_KEY = /^space(bar)?/;
15738
15739 /**
15740 * Matches ESC key.
15741 *
15742 * Value from: http://w3c.github.io/uievents-key/#key-Escape
15743 */
15744 var ESC_KEY = /^escape$/;
15745
15746 /**
15747 * Transforms the key.
15748 * @param {string} key The KeyBoardEvent.key
15749 * @param {Boolean} [noSpecialChars] Limits the transformation to
15750 * alpha-numeric characters.
15751 */
15752 function transformKey(key, noSpecialChars) {
15753 var validKey = '';
15754 if (key) {
15755 var lKey = key.toLowerCase();
15756 if (lKey === ' ' || SPACE_KEY.test(lKey)) {
15757 validKey = 'space';
15758 } else if (ESC_KEY.test(lKey)) {
15759 validKey = 'esc';
15760 } else if (lKey.length == 1) {
15761 if (!noSpecialChars || KEY_CHAR.test(lKey)) {
15762 validKey = lKey;
15763 }
15764 } else if (ARROW_KEY.test(lKey)) {
15765 validKey = lKey.replace('arrow', '');
15766 } else if (lKey == 'multiply') {
15767 // numpad '*' can map to Multiply on IE/Windows
15768 validKey = '*';
15769 } else {
15770 validKey = lKey;
15771 }
15772 }
15773 return validKey;
15774 }
15775
15776 function transformKeyIdentifier(keyIdent) {
15777 var validKey = '';
15778 if (keyIdent) {
15779 if (keyIdent in KEY_IDENTIFIER) {
15780 validKey = KEY_IDENTIFIER[keyIdent];
15781 } else if (IDENT_CHAR.test(keyIdent)) {
15782 keyIdent = parseInt(keyIdent.replace('U+', '0x'), 16);
15783 validKey = String.fromCharCode(keyIdent).toLowerCase();
15784 } else {
15785 validKey = keyIdent.toLowerCase();
15786 }
15787 }
15788 return validKey;
15789 }
15790
15791 function transformKeyCode(keyCode) {
15792 var validKey = '';
15793 if (Number(keyCode)) {
15794 if (keyCode >= 65 && keyCode <= 90) {
15795 // ascii a-z
15796 // lowercase is 32 offset from uppercase
15797 validKey = String.fromCharCode(32 + keyCode);
15798 } else if (keyCode >= 112 && keyCode <= 123) {
15799 // function keys f1-f12
15800 validKey = 'f' + (keyCode - 112);
15801 } else if (keyCode >= 48 && keyCode <= 57) {
15802 // top 0-9 keys
15803 validKey = String(keyCode - 48);
15804 } else if (keyCode >= 96 && keyCode <= 105) {
15805 // num pad 0-9
15806 validKey = String(keyCode - 96);
15807 } else {
15808 validKey = KEY_CODE[keyCode];
15809 }
15810 }
15811 return validKey;
15812 }
15813
15814 /**
15815 * Calculates the normalized key for a KeyboardEvent.
15816 * @param {KeyboardEvent} keyEvent
15817 * @param {Boolean} [noSpecialChars] Set to true to limit keyEvent.key
15818 * transformation to alpha-numeric chars. This is useful with key
15819 * combinations like shift + 2, which on FF for MacOS produces
15820 * keyEvent.key = @
15821 * To get 2 returned, set noSpecialChars = true
15822 * To get @ returned, set noSpecialChars = false
15823 */
15824 function normalizedKeyForEvent(keyEvent, noSpecialChars) {
15825 // Fall back from .key, to .keyIdentifier, to .keyCode, and then to
15826 // .detail.key to support artificial keyboard events.
15827 return transformKey(keyEvent.key, noSpecialChars) ||
15828 transformKeyIdentifier(keyEvent.keyIdentifier) ||
15829 transformKeyCode(keyEvent.keyCode) ||
15830 transformKey(keyEvent.detail ? keyEvent.detail.key : keyEvent.detail, no SpecialChars) || '';
15831 }
15832
15833 function keyComboMatchesEvent(keyCombo, event) {
15834 // For combos with modifiers we support only alpha-numeric keys
15835 var keyEvent = normalizedKeyForEvent(event, keyCombo.hasModifiers);
15836 return keyEvent === keyCombo.key &&
15837 (!keyCombo.hasModifiers || (
15838 !!event.shiftKey === !!keyCombo.shiftKey &&
15839 !!event.ctrlKey === !!keyCombo.ctrlKey &&
15840 !!event.altKey === !!keyCombo.altKey &&
15841 !!event.metaKey === !!keyCombo.metaKey)
15842 );
15843 }
15844
15845 function parseKeyComboString(keyComboString) {
15846 if (keyComboString.length === 1) {
15847 return {
15848 combo: keyComboString,
15849 key: keyComboString,
15850 event: 'keydown'
15851 };
15852 }
15853 return keyComboString.split('+').reduce(function(parsedKeyCombo, keyComboP art) {
15854 var eventParts = keyComboPart.split(':');
15855 var keyName = eventParts[0];
15856 var event = eventParts[1];
15857
15858 if (keyName in MODIFIER_KEYS) {
15859 parsedKeyCombo[MODIFIER_KEYS[keyName]] = true;
15860 parsedKeyCombo.hasModifiers = true;
15861 } else {
15862 parsedKeyCombo.key = keyName;
15863 parsedKeyCombo.event = event || 'keydown';
15864 }
15865
15866 return parsedKeyCombo;
15867 }, {
15868 combo: keyComboString.split(':').shift()
15869 });
15870 }
15871
15872 function parseEventString(eventString) {
15873 return eventString.trim().split(' ').map(function(keyComboString) {
15874 return parseKeyComboString(keyComboString);
15875 });
15876 }
15877
15878 /**
15879 * `Polymer.IronA11yKeysBehavior` provides a normalized interface for proces sing
15880 * keyboard commands that pertain to [WAI-ARIA best practices](http://www.w3 .org/TR/wai-aria-practices/#kbd_general_binding).
15881 * The element takes care of browser differences with respect to Keyboard ev ents
15882 * and uses an expressive syntax to filter key presses.
15883 *
15884 * Use the `keyBindings` prototype property to express what combination of k eys
15885 * will trigger the callback. A key binding has the format
15886 * `"KEY+MODIFIER:EVENT": "callback"` (`"KEY": "callback"` or
15887 * `"KEY:EVENT": "callback"` are valid as well). Some examples:
15888 *
15889 * keyBindings: {
15890 * 'space': '_onKeydown', // same as 'space:keydown'
15891 * 'shift+tab': '_onKeydown',
15892 * 'enter:keypress': '_onKeypress',
15893 * 'esc:keyup': '_onKeyup'
15894 * }
15895 *
15896 * The callback will receive with an event containing the following informat ion in `event.detail`:
15897 *
15898 * _onKeydown: function(event) {
15899 * console.log(event.detail.combo); // KEY+MODIFIER, e.g. "shift+tab"
15900 * console.log(event.detail.key); // KEY only, e.g. "tab"
15901 * console.log(event.detail.event); // EVENT, e.g. "keydown"
15902 * console.log(event.detail.keyboardEvent); // the original KeyboardE vent
15903 * }
15904 *
15905 * Use the `keyEventTarget` attribute to set up event handlers on a specific
15906 * node.
15907 *
15908 * See the [demo source code](https://github.com/PolymerElements/iron-a11y-k eys-behavior/blob/master/demo/x-key-aware.html)
15909 * for an example.
15910 *
15911 * @demo demo/index.html
15912 * @polymerBehavior
15913 */
15914 Polymer.IronA11yKeysBehavior = {
15915 properties: {
15916 /**
15917 * The EventTarget that will be firing relevant KeyboardEvents. Set it t o
15918 * `null` to disable the listeners.
15919 * @type {?EventTarget}
15920 */
15921 keyEventTarget: {
15922 type: Object,
15923 value: function() {
15924 return this;
15925 }
15926 },
15927
15928 /**
15929 * If true, this property will cause the implementing element to
15930 * automatically stop propagation on any handled KeyboardEvents.
15931 */
15932 stopKeyboardEventPropagation: {
15933 type: Boolean,
15934 value: false
15935 },
15936
15937 _boundKeyHandlers: {
15938 type: Array,
15939 value: function() {
15940 return [];
15941 }
15942 },
15943
15944 // We use this due to a limitation in IE10 where instances will have
15945 // own properties of everything on the "prototype".
15946 _imperativeKeyBindings: {
15947 type: Object,
15948 value: function() {
15949 return {};
15950 }
15951 }
15952 },
15953
15954 observers: [
15955 '_resetKeyEventListeners(keyEventTarget, _boundKeyHandlers)'
15956 ],
15957
15958
15959 /**
15960 * To be used to express what combination of keys will trigger the relati ve
15961 * callback. e.g. `keyBindings: { 'esc': '_onEscPressed'}`
15962 * @type {Object}
15963 */
15964 keyBindings: {},
15965
15966 registered: function() {
15967 this._prepKeyBindings();
15968 },
15969
15970 attached: function() {
15971 this._listenKeyEventListeners();
15972 },
15973
15974 detached: function() {
15975 this._unlistenKeyEventListeners();
15976 },
15977
15978 /**
15979 * Can be used to imperatively add a key binding to the implementing
15980 * element. This is the imperative equivalent of declaring a keybinding
15981 * in the `keyBindings` prototype property.
15982 */
15983 addOwnKeyBinding: function(eventString, handlerName) {
15984 this._imperativeKeyBindings[eventString] = handlerName;
15985 this._prepKeyBindings();
15986 this._resetKeyEventListeners();
15987 },
15988
15989 /**
15990 * When called, will remove all imperatively-added key bindings.
15991 */
15992 removeOwnKeyBindings: function() {
15993 this._imperativeKeyBindings = {};
15994 this._prepKeyBindings();
15995 this._resetKeyEventListeners();
15996 },
15997
15998 /**
15999 * Returns true if a keyboard event matches `eventString`.
16000 *
16001 * @param {KeyboardEvent} event
16002 * @param {string} eventString
16003 * @return {boolean}
16004 */
16005 keyboardEventMatchesKeys: function(event, eventString) {
16006 var keyCombos = parseEventString(eventString);
16007 for (var i = 0; i < keyCombos.length; ++i) {
16008 if (keyComboMatchesEvent(keyCombos[i], event)) {
16009 return true;
16010 }
16011 }
16012 return false;
16013 },
16014
16015 _collectKeyBindings: function() {
16016 var keyBindings = this.behaviors.map(function(behavior) {
16017 return behavior.keyBindings;
16018 });
16019
16020 if (keyBindings.indexOf(this.keyBindings) === -1) {
16021 keyBindings.push(this.keyBindings);
16022 }
16023
16024 return keyBindings;
16025 },
16026
16027 _prepKeyBindings: function() {
16028 this._keyBindings = {};
16029
16030 this._collectKeyBindings().forEach(function(keyBindings) {
16031 for (var eventString in keyBindings) {
16032 this._addKeyBinding(eventString, keyBindings[eventString]);
16033 }
16034 }, this);
16035
16036 for (var eventString in this._imperativeKeyBindings) {
16037 this._addKeyBinding(eventString, this._imperativeKeyBindings[eventStri ng]);
16038 }
16039
16040 // Give precedence to combos with modifiers to be checked first.
16041 for (var eventName in this._keyBindings) {
16042 this._keyBindings[eventName].sort(function (kb1, kb2) {
16043 var b1 = kb1[0].hasModifiers;
16044 var b2 = kb2[0].hasModifiers;
16045 return (b1 === b2) ? 0 : b1 ? -1 : 1;
16046 })
16047 }
16048 },
16049
16050 _addKeyBinding: function(eventString, handlerName) {
16051 parseEventString(eventString).forEach(function(keyCombo) {
16052 this._keyBindings[keyCombo.event] =
16053 this._keyBindings[keyCombo.event] || [];
16054
16055 this._keyBindings[keyCombo.event].push([
16056 keyCombo,
16057 handlerName
16058 ]);
16059 }, this);
16060 },
16061
16062 _resetKeyEventListeners: function() {
16063 this._unlistenKeyEventListeners();
16064
16065 if (this.isAttached) {
16066 this._listenKeyEventListeners();
16067 }
16068 },
16069
16070 _listenKeyEventListeners: function() {
16071 if (!this.keyEventTarget) {
16072 return;
16073 }
16074 Object.keys(this._keyBindings).forEach(function(eventName) {
16075 var keyBindings = this._keyBindings[eventName];
16076 var boundKeyHandler = this._onKeyBindingEvent.bind(this, keyBindings);
16077
16078 this._boundKeyHandlers.push([this.keyEventTarget, eventName, boundKeyH andler]);
16079
16080 this.keyEventTarget.addEventListener(eventName, boundKeyHandler);
16081 }, this);
16082 },
16083
16084 _unlistenKeyEventListeners: function() {
16085 var keyHandlerTuple;
16086 var keyEventTarget;
16087 var eventName;
16088 var boundKeyHandler;
16089
16090 while (this._boundKeyHandlers.length) {
16091 // My kingdom for block-scope binding and destructuring assignment..
16092 keyHandlerTuple = this._boundKeyHandlers.pop();
16093 keyEventTarget = keyHandlerTuple[0];
16094 eventName = keyHandlerTuple[1];
16095 boundKeyHandler = keyHandlerTuple[2];
16096
16097 keyEventTarget.removeEventListener(eventName, boundKeyHandler);
16098 }
16099 },
16100
16101 _onKeyBindingEvent: function(keyBindings, event) {
16102 if (this.stopKeyboardEventPropagation) {
16103 event.stopPropagation();
16104 }
16105
16106 // if event has been already prevented, don't do anything
16107 if (event.defaultPrevented) {
16108 return;
16109 }
16110
16111 for (var i = 0; i < keyBindings.length; i++) {
16112 var keyCombo = keyBindings[i][0];
16113 var handlerName = keyBindings[i][1];
16114 if (keyComboMatchesEvent(keyCombo, event)) {
16115 this._triggerKeyHandler(keyCombo, handlerName, event);
16116 // exit the loop if eventDefault was prevented
16117 if (event.defaultPrevented) {
16118 return;
16119 }
16120 }
16121 }
16122 },
16123
16124 _triggerKeyHandler: function(keyCombo, handlerName, keyboardEvent) {
16125 var detail = Object.create(keyCombo);
16126 detail.keyboardEvent = keyboardEvent;
16127 var event = new CustomEvent(keyCombo.event, {
16128 detail: detail,
16129 cancelable: true
16130 });
16131 this[handlerName].call(this, event);
16132 if (event.defaultPrevented) {
16133 keyboardEvent.preventDefault();
16134 }
16135 }
16136 };
16137 })();
16138 </script>
16139 17619
16140 17620
16141 <dom-module id="iron-overlay-backdrop" assetpath="/res/imp/bower_components/iron -overlay-behavior/"> 17621 <dom-module id="iron-overlay-backdrop" assetpath="/res/imp/bower_components/iron -overlay-behavior/">
16142 17622
16143 <template> 17623 <template>
16144 <style> 17624 <style>
16145 :host { 17625 :host {
16146 position: fixed; 17626 position: fixed;
16147 top: 0; 17627 top: 0;
16148 left: 0; 17628 left: 0;
(...skipping 2213 matching lines...) Expand 10 before | Expand all | Expand 10 after
18362 19842
18363 is: 'iron-selector', 19843 is: 'iron-selector',
18364 19844
18365 behaviors: [ 19845 behaviors: [
18366 Polymer.IronMultiSelectableBehavior 19846 Polymer.IronMultiSelectableBehavior
18367 ] 19847 ]
18368 19848
18369 }); 19849 });
18370 19850
18371 </script> 19851 </script>
18372
18373
18374 <style is="custom-style">
18375
18376 :root {
18377 /*
18378 * You can use these generic variables in your elements for easy theming.
18379 * For example, if all your elements use `--primary-text-color` as its main
18380 * color, then switching from a light to a dark theme is just a matter of
18381 * changing the value of `--primary-text-color` in your application.
18382 */
18383 --primary-text-color: var(--light-theme-text-color);
18384 --primary-background-color: var(--light-theme-background-color);
18385 --secondary-text-color: var(--light-theme-secondary-color);
18386 --disabled-text-color: var(--light-theme-disabled-color);
18387 --divider-color: var(--light-theme-divider-color);
18388 --error-color: var(--paper-deep-orange-a700);
18389
18390 /*
18391 * Primary and accent colors. Also see color.html for more colors.
18392 */
18393 --primary-color: var(--paper-indigo-500);
18394 --light-primary-color: var(--paper-indigo-100);
18395 --dark-primary-color: var(--paper-indigo-700);
18396
18397 --accent-color: var(--paper-pink-a200);
18398 --light-accent-color: var(--paper-pink-a100);
18399 --dark-accent-color: var(--paper-pink-a400);
18400
18401
18402 /*
18403 * Material Design Light background theme
18404 */
18405 --light-theme-background-color: #ffffff;
18406 --light-theme-base-color: #000000;
18407 --light-theme-text-color: var(--paper-grey-900);
18408 --light-theme-secondary-color: #737373; /* for secondary text and icons */
18409 --light-theme-disabled-color: #9b9b9b; /* disabled/hint text */
18410 --light-theme-divider-color: #dbdbdb;
18411
18412 /*
18413 * Material Design Dark background theme
18414 */
18415 --dark-theme-background-color: var(--paper-grey-900);
18416 --dark-theme-base-color: #ffffff;
18417 --dark-theme-text-color: #ffffff;
18418 --dark-theme-secondary-color: #bcbcbc; /* for secondary text and icons */
18419 --dark-theme-disabled-color: #646464; /* disabled/hint text */
18420 --dark-theme-divider-color: #3c3c3c;
18421
18422 /*
18423 * Deprecated values because of their confusing names.
18424 */
18425 --text-primary-color: var(--dark-theme-text-color);
18426 --default-primary-color: var(--primary-color);
18427
18428 }
18429
18430 </style>
18431 <script> 19852 <script>
18432 /** 19853 /**
18433 * Singleton IronMeta instance. 19854 * Singleton IronMeta instance.
18434 */ 19855 */
18435 Polymer.IronValidatableBehaviorMeta = null; 19856 Polymer.IronValidatableBehaviorMeta = null;
18436 19857
18437 /** 19858 /**
18438 * `Use Polymer.IronValidatableBehavior` to implement an element that validate s user input. 19859 * `Use Polymer.IronValidatableBehavior` to implement an element that validate s user input.
18439 * Use the related `Polymer.IronValidatorBehavior` to add custom validation lo gic to an iron-input. 19860 * Use the related `Polymer.IronValidatorBehavior` to add custom validation lo gic to an iron-input.
18440 * 19861 *
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
18738 20159
18739 /** @polymerBehavior Polymer.IronCheckedElementBehavior */ 20160 /** @polymerBehavior Polymer.IronCheckedElementBehavior */
18740 Polymer.IronCheckedElementBehavior = [ 20161 Polymer.IronCheckedElementBehavior = [
18741 Polymer.IronFormElementBehavior, 20162 Polymer.IronFormElementBehavior,
18742 Polymer.IronValidatableBehavior, 20163 Polymer.IronValidatableBehavior,
18743 Polymer.IronCheckedElementBehaviorImpl 20164 Polymer.IronCheckedElementBehaviorImpl
18744 ]; 20165 ];
18745 20166
18746 </script> 20167 </script>
18747 <script> 20168 <script>
18748
18749 /**
18750 * @demo demo/index.html
18751 * @polymerBehavior
18752 */
18753 Polymer.IronControlState = {
18754
18755 properties: {
18756
18757 /**
18758 * If true, the element currently has focus.
18759 */
18760 focused: {
18761 type: Boolean,
18762 value: false,
18763 notify: true,
18764 readOnly: true,
18765 reflectToAttribute: true
18766 },
18767
18768 /**
18769 * If true, the user cannot interact with this element.
18770 */
18771 disabled: {
18772 type: Boolean,
18773 value: false,
18774 notify: true,
18775 observer: '_disabledChanged',
18776 reflectToAttribute: true
18777 },
18778
18779 _oldTabIndex: {
18780 type: Number
18781 },
18782
18783 _boundFocusBlurHandler: {
18784 type: Function,
18785 value: function() {
18786 return this._focusBlurHandler.bind(this);
18787 }
18788 }
18789
18790 },
18791
18792 observers: [
18793 '_changedControlState(focused, disabled)'
18794 ],
18795
18796 ready: function() {
18797 this.addEventListener('focus', this._boundFocusBlurHandler, true);
18798 this.addEventListener('blur', this._boundFocusBlurHandler, true);
18799 },
18800
18801 _focusBlurHandler: function(event) {
18802 // NOTE(cdata): if we are in ShadowDOM land, `event.target` will
18803 // eventually become `this` due to retargeting; if we are not in
18804 // ShadowDOM land, `event.target` will eventually become `this` due
18805 // to the second conditional which fires a synthetic event (that is also
18806 // handled). In either case, we can disregard `event.path`.
18807
18808 if (event.target === this) {
18809 this._setFocused(event.type === 'focus');
18810 } else if (!this.shadowRoot) {
18811 var target = /** @type {Node} */(Polymer.dom(event).localTarget);
18812 if (!this.isLightDescendant(target)) {
18813 this.fire(event.type, {sourceEvent: event}, {
18814 node: this,
18815 bubbles: event.bubbles,
18816 cancelable: event.cancelable
18817 });
18818 }
18819 }
18820 },
18821
18822 _disabledChanged: function(disabled, old) {
18823 this.setAttribute('aria-disabled', disabled ? 'true' : 'false');
18824 this.style.pointerEvents = disabled ? 'none' : '';
18825 if (disabled) {
18826 this._oldTabIndex = this.tabIndex;
18827 this._setFocused(false);
18828 this.tabIndex = -1;
18829 this.blur();
18830 } else if (this._oldTabIndex !== undefined) {
18831 this.tabIndex = this._oldTabIndex;
18832 }
18833 },
18834
18835 _changedControlState: function() {
18836 // _controlStateChanged is abstract, follow-on behaviors may implement it
18837 if (this._controlStateChanged) {
18838 this._controlStateChanged();
18839 }
18840 }
18841
18842 };
18843
18844 </script>
18845 <script>
18846
18847 /**
18848 * @demo demo/index.html
18849 * @polymerBehavior Polymer.IronButtonState
18850 */
18851 Polymer.IronButtonStateImpl = {
18852
18853 properties: {
18854
18855 /**
18856 * If true, the user is currently holding down the button.
18857 */
18858 pressed: {
18859 type: Boolean,
18860 readOnly: true,
18861 value: false,
18862 reflectToAttribute: true,
18863 observer: '_pressedChanged'
18864 },
18865
18866 /**
18867 * If true, the button toggles the active state with each tap or press
18868 * of the spacebar.
18869 */
18870 toggles: {
18871 type: Boolean,
18872 value: false,
18873 reflectToAttribute: true
18874 },
18875
18876 /**
18877 * If true, the button is a toggle and is currently in the active state.
18878 */
18879 active: {
18880 type: Boolean,
18881 value: false,
18882 notify: true,
18883 reflectToAttribute: true
18884 },
18885
18886 /**
18887 * True if the element is currently being pressed by a "pointer," which
18888 * is loosely defined as mouse or touch input (but specifically excluding
18889 * keyboard input).
18890 */
18891 pointerDown: {
18892 type: Boolean,
18893 readOnly: true,
18894 value: false
18895 },
18896
18897 /**
18898 * True if the input device that caused the element to receive focus
18899 * was a keyboard.
18900 */
18901 receivedFocusFromKeyboard: {
18902 type: Boolean,
18903 readOnly: true
18904 },
18905
18906 /**
18907 * The aria attribute to be set if the button is a toggle and in the
18908 * active state.
18909 */
18910 ariaActiveAttribute: {
18911 type: String,
18912 value: 'aria-pressed',
18913 observer: '_ariaActiveAttributeChanged'
18914 }
18915 },
18916
18917 listeners: {
18918 down: '_downHandler',
18919 up: '_upHandler',
18920 tap: '_tapHandler'
18921 },
18922
18923 observers: [
18924 '_detectKeyboardFocus(focused)',
18925 '_activeChanged(active, ariaActiveAttribute)'
18926 ],
18927
18928 keyBindings: {
18929 'enter:keydown': '_asyncClick',
18930 'space:keydown': '_spaceKeyDownHandler',
18931 'space:keyup': '_spaceKeyUpHandler',
18932 },
18933
18934 _mouseEventRe: /^mouse/,
18935
18936 _tapHandler: function() {
18937 if (this.toggles) {
18938 // a tap is needed to toggle the active state
18939 this._userActivate(!this.active);
18940 } else {
18941 this.active = false;
18942 }
18943 },
18944
18945 _detectKeyboardFocus: function(focused) {
18946 this._setReceivedFocusFromKeyboard(!this.pointerDown && focused);
18947 },
18948
18949 // to emulate native checkbox, (de-)activations from a user interaction fire
18950 // 'change' events
18951 _userActivate: function(active) {
18952 if (this.active !== active) {
18953 this.active = active;
18954 this.fire('change');
18955 }
18956 },
18957
18958 _downHandler: function(event) {
18959 this._setPointerDown(true);
18960 this._setPressed(true);
18961 this._setReceivedFocusFromKeyboard(false);
18962 },
18963
18964 _upHandler: function() {
18965 this._setPointerDown(false);
18966 this._setPressed(false);
18967 },
18968
18969 /**
18970 * @param {!KeyboardEvent} event .
18971 */
18972 _spaceKeyDownHandler: function(event) {
18973 var keyboardEvent = event.detail.keyboardEvent;
18974 var target = Polymer.dom(keyboardEvent).localTarget;
18975
18976 // Ignore the event if this is coming from a focused light child, since th at
18977 // element will deal with it.
18978 if (this.isLightDescendant(/** @type {Node} */(target)))
18979 return;
18980
18981 keyboardEvent.preventDefault();
18982 keyboardEvent.stopImmediatePropagation();
18983 this._setPressed(true);
18984 },
18985
18986 /**
18987 * @param {!KeyboardEvent} event .
18988 */
18989 _spaceKeyUpHandler: function(event) {
18990 var keyboardEvent = event.detail.keyboardEvent;
18991 var target = Polymer.dom(keyboardEvent).localTarget;
18992
18993 // Ignore the event if this is coming from a focused light child, since th at
18994 // element will deal with it.
18995 if (this.isLightDescendant(/** @type {Node} */(target)))
18996 return;
18997
18998 if (this.pressed) {
18999 this._asyncClick();
19000 }
19001 this._setPressed(false);
19002 },
19003
19004 // trigger click asynchronously, the asynchrony is useful to allow one
19005 // event handler to unwind before triggering another event
19006 _asyncClick: function() {
19007 this.async(function() {
19008 this.click();
19009 }, 1);
19010 },
19011
19012 // any of these changes are considered a change to button state
19013
19014 _pressedChanged: function(pressed) {
19015 this._changedButtonState();
19016 },
19017
19018 _ariaActiveAttributeChanged: function(value, oldValue) {
19019 if (oldValue && oldValue != value && this.hasAttribute(oldValue)) {
19020 this.removeAttribute(oldValue);
19021 }
19022 },
19023
19024 _activeChanged: function(active, ariaActiveAttribute) {
19025 if (this.toggles) {
19026 this.setAttribute(this.ariaActiveAttribute,
19027 active ? 'true' : 'false');
19028 } else {
19029 this.removeAttribute(this.ariaActiveAttribute);
19030 }
19031 this._changedButtonState();
19032 },
19033
19034 _controlStateChanged: function() {
19035 if (this.disabled) {
19036 this._setPressed(false);
19037 } else {
19038 this._changedButtonState();
19039 }
19040 },
19041
19042 // provide hook for follow-on behaviors to react to button-state
19043
19044 _changedButtonState: function() {
19045 if (this._buttonStateChanged) {
19046 this._buttonStateChanged(); // abstract
19047 }
19048 }
19049
19050 };
19051
19052 /** @polymerBehavior */
19053 Polymer.IronButtonState = [
19054 Polymer.IronA11yKeysBehavior,
19055 Polymer.IronButtonStateImpl
19056 ];
19057
19058 </script>
19059
19060
19061 <dom-module id="paper-ripple" assetpath="/res/imp/bower_components/paper-ripple/ ">
19062
19063 <template>
19064 <style>
19065 :host {
19066 display: block;
19067 position: absolute;
19068 border-radius: inherit;
19069 overflow: hidden;
19070 top: 0;
19071 left: 0;
19072 right: 0;
19073 bottom: 0;
19074
19075 /* See PolymerElements/paper-behaviors/issues/34. On non-Chrome browsers ,
19076 * creating a node (with a position:absolute) in the middle of an event
19077 * handler "interrupts" that event handler (which happens when the
19078 * ripple is created on demand) */
19079 pointer-events: none;
19080 }
19081
19082 :host([animating]) {
19083 /* This resolves a rendering issue in Chrome (as of 40) where the
19084 ripple is not properly clipped by its parent (which may have
19085 rounded corners). See: http://jsbin.com/temexa/4
19086
19087 Note: We only apply this style conditionally. Otherwise, the browser
19088 will create a new compositing layer for every ripple element on the
19089 page, and that would be bad. */
19090 -webkit-transform: translate(0, 0);
19091 transform: translate3d(0, 0, 0);
19092 }
19093
19094 #background,
19095 #waves,
19096 .wave-container,
19097 .wave {
19098 pointer-events: none;
19099 position: absolute;
19100 top: 0;
19101 left: 0;
19102 width: 100%;
19103 height: 100%;
19104 }
19105
19106 #background,
19107 .wave {
19108 opacity: 0;
19109 }
19110
19111 #waves,
19112 .wave {
19113 overflow: hidden;
19114 }
19115
19116 .wave-container,
19117 .wave {
19118 border-radius: 50%;
19119 }
19120
19121 :host(.circle) #background,
19122 :host(.circle) #waves {
19123 border-radius: 50%;
19124 }
19125
19126 :host(.circle) .wave-container {
19127 overflow: hidden;
19128 }
19129 </style>
19130
19131 <div id="background"></div>
19132 <div id="waves"></div>
19133 </template>
19134 </dom-module>
19135 <script>
19136 (function() {
19137 var Utility = {
19138 distance: function(x1, y1, x2, y2) {
19139 var xDelta = (x1 - x2);
19140 var yDelta = (y1 - y2);
19141
19142 return Math.sqrt(xDelta * xDelta + yDelta * yDelta);
19143 },
19144
19145 now: window.performance && window.performance.now ?
19146 window.performance.now.bind(window.performance) : Date.now
19147 };
19148
19149 /**
19150 * @param {HTMLElement} element
19151 * @constructor
19152 */
19153 function ElementMetrics(element) {
19154 this.element = element;
19155 this.width = this.boundingRect.width;
19156 this.height = this.boundingRect.height;
19157
19158 this.size = Math.max(this.width, this.height);
19159 }
19160
19161 ElementMetrics.prototype = {
19162 get boundingRect () {
19163 return this.element.getBoundingClientRect();
19164 },
19165
19166 furthestCornerDistanceFrom: function(x, y) {
19167 var topLeft = Utility.distance(x, y, 0, 0);
19168 var topRight = Utility.distance(x, y, this.width, 0);
19169 var bottomLeft = Utility.distance(x, y, 0, this.height);
19170 var bottomRight = Utility.distance(x, y, this.width, this.height);
19171
19172 return Math.max(topLeft, topRight, bottomLeft, bottomRight);
19173 }
19174 };
19175
19176 /**
19177 * @param {HTMLElement} element
19178 * @constructor
19179 */
19180 function Ripple(element) {
19181 this.element = element;
19182 this.color = window.getComputedStyle(element).color;
19183
19184 this.wave = document.createElement('div');
19185 this.waveContainer = document.createElement('div');
19186 this.wave.style.backgroundColor = this.color;
19187 this.wave.classList.add('wave');
19188 this.waveContainer.classList.add('wave-container');
19189 Polymer.dom(this.waveContainer).appendChild(this.wave);
19190
19191 this.resetInteractionState();
19192 }
19193
19194 Ripple.MAX_RADIUS = 300;
19195
19196 Ripple.prototype = {
19197 get recenters() {
19198 return this.element.recenters;
19199 },
19200
19201 get center() {
19202 return this.element.center;
19203 },
19204
19205 get mouseDownElapsed() {
19206 var elapsed;
19207
19208 if (!this.mouseDownStart) {
19209 return 0;
19210 }
19211
19212 elapsed = Utility.now() - this.mouseDownStart;
19213
19214 if (this.mouseUpStart) {
19215 elapsed -= this.mouseUpElapsed;
19216 }
19217
19218 return elapsed;
19219 },
19220
19221 get mouseUpElapsed() {
19222 return this.mouseUpStart ?
19223 Utility.now () - this.mouseUpStart : 0;
19224 },
19225
19226 get mouseDownElapsedSeconds() {
19227 return this.mouseDownElapsed / 1000;
19228 },
19229
19230 get mouseUpElapsedSeconds() {
19231 return this.mouseUpElapsed / 1000;
19232 },
19233
19234 get mouseInteractionSeconds() {
19235 return this.mouseDownElapsedSeconds + this.mouseUpElapsedSeconds;
19236 },
19237
19238 get initialOpacity() {
19239 return this.element.initialOpacity;
19240 },
19241
19242 get opacityDecayVelocity() {
19243 return this.element.opacityDecayVelocity;
19244 },
19245
19246 get radius() {
19247 var width2 = this.containerMetrics.width * this.containerMetrics.width;
19248 var height2 = this.containerMetrics.height * this.containerMetrics.heigh t;
19249 var waveRadius = Math.min(
19250 Math.sqrt(width2 + height2),
19251 Ripple.MAX_RADIUS
19252 ) * 1.1 + 5;
19253
19254 var duration = 1.1 - 0.2 * (waveRadius / Ripple.MAX_RADIUS);
19255 var timeNow = this.mouseInteractionSeconds / duration;
19256 var size = waveRadius * (1 - Math.pow(80, -timeNow));
19257
19258 return Math.abs(size);
19259 },
19260
19261 get opacity() {
19262 if (!this.mouseUpStart) {
19263 return this.initialOpacity;
19264 }
19265
19266 return Math.max(
19267 0,
19268 this.initialOpacity - this.mouseUpElapsedSeconds * this.opacityDecayVe locity
19269 );
19270 },
19271
19272 get outerOpacity() {
19273 // Linear increase in background opacity, capped at the opacity
19274 // of the wavefront (waveOpacity).
19275 var outerOpacity = this.mouseUpElapsedSeconds * 0.3;
19276 var waveOpacity = this.opacity;
19277
19278 return Math.max(
19279 0,
19280 Math.min(outerOpacity, waveOpacity)
19281 );
19282 },
19283
19284 get isOpacityFullyDecayed() {
19285 return this.opacity < 0.01 &&
19286 this.radius >= Math.min(this.maxRadius, Ripple.MAX_RADIUS);
19287 },
19288
19289 get isRestingAtMaxRadius() {
19290 return this.opacity >= this.initialOpacity &&
19291 this.radius >= Math.min(this.maxRadius, Ripple.MAX_RADIUS);
19292 },
19293
19294 get isAnimationComplete() {
19295 return this.mouseUpStart ?
19296 this.isOpacityFullyDecayed : this.isRestingAtMaxRadius;
19297 },
19298
19299 get translationFraction() {
19300 return Math.min(
19301 1,
19302 this.radius / this.containerMetrics.size * 2 / Math.sqrt(2)
19303 );
19304 },
19305
19306 get xNow() {
19307 if (this.xEnd) {
19308 return this.xStart + this.translationFraction * (this.xEnd - this.xSta rt);
19309 }
19310
19311 return this.xStart;
19312 },
19313
19314 get yNow() {
19315 if (this.yEnd) {
19316 return this.yStart + this.translationFraction * (this.yEnd - this.ySta rt);
19317 }
19318
19319 return this.yStart;
19320 },
19321
19322 get isMouseDown() {
19323 return this.mouseDownStart && !this.mouseUpStart;
19324 },
19325
19326 resetInteractionState: function() {
19327 this.maxRadius = 0;
19328 this.mouseDownStart = 0;
19329 this.mouseUpStart = 0;
19330
19331 this.xStart = 0;
19332 this.yStart = 0;
19333 this.xEnd = 0;
19334 this.yEnd = 0;
19335 this.slideDistance = 0;
19336
19337 this.containerMetrics = new ElementMetrics(this.element);
19338 },
19339
19340 draw: function() {
19341 var scale;
19342 var translateString;
19343 var dx;
19344 var dy;
19345
19346 this.wave.style.opacity = this.opacity;
19347
19348 scale = this.radius / (this.containerMetrics.size / 2);
19349 dx = this.xNow - (this.containerMetrics.width / 2);
19350 dy = this.yNow - (this.containerMetrics.height / 2);
19351
19352
19353 // 2d transform for safari because of border-radius and overflow:hidden clipping bug.
19354 // https://bugs.webkit.org/show_bug.cgi?id=98538
19355 this.waveContainer.style.webkitTransform = 'translate(' + dx + 'px, ' + dy + 'px)';
19356 this.waveContainer.style.transform = 'translate3d(' + dx + 'px, ' + dy + 'px, 0)';
19357 this.wave.style.webkitTransform = 'scale(' + scale + ',' + scale + ')';
19358 this.wave.style.transform = 'scale3d(' + scale + ',' + scale + ',1)';
19359 },
19360
19361 /** @param {Event=} event */
19362 downAction: function(event) {
19363 var xCenter = this.containerMetrics.width / 2;
19364 var yCenter = this.containerMetrics.height / 2;
19365
19366 this.resetInteractionState();
19367 this.mouseDownStart = Utility.now();
19368
19369 if (this.center) {
19370 this.xStart = xCenter;
19371 this.yStart = yCenter;
19372 this.slideDistance = Utility.distance(
19373 this.xStart, this.yStart, this.xEnd, this.yEnd
19374 );
19375 } else {
19376 this.xStart = event ?
19377 event.detail.x - this.containerMetrics.boundingRect.left :
19378 this.containerMetrics.width / 2;
19379 this.yStart = event ?
19380 event.detail.y - this.containerMetrics.boundingRect.top :
19381 this.containerMetrics.height / 2;
19382 }
19383
19384 if (this.recenters) {
19385 this.xEnd = xCenter;
19386 this.yEnd = yCenter;
19387 this.slideDistance = Utility.distance(
19388 this.xStart, this.yStart, this.xEnd, this.yEnd
19389 );
19390 }
19391
19392 this.maxRadius = this.containerMetrics.furthestCornerDistanceFrom(
19393 this.xStart,
19394 this.yStart
19395 );
19396
19397 this.waveContainer.style.top =
19398 (this.containerMetrics.height - this.containerMetrics.size) / 2 + 'px' ;
19399 this.waveContainer.style.left =
19400 (this.containerMetrics.width - this.containerMetrics.size) / 2 + 'px';
19401
19402 this.waveContainer.style.width = this.containerMetrics.size + 'px';
19403 this.waveContainer.style.height = this.containerMetrics.size + 'px';
19404 },
19405
19406 /** @param {Event=} event */
19407 upAction: function(event) {
19408 if (!this.isMouseDown) {
19409 return;
19410 }
19411
19412 this.mouseUpStart = Utility.now();
19413 },
19414
19415 remove: function() {
19416 Polymer.dom(this.waveContainer.parentNode).removeChild(
19417 this.waveContainer
19418 );
19419 }
19420 };
19421
19422 Polymer({
19423 is: 'paper-ripple',
19424
19425 behaviors: [
19426 Polymer.IronA11yKeysBehavior
19427 ],
19428
19429 properties: {
19430 /**
19431 * The initial opacity set on the wave.
19432 *
19433 * @attribute initialOpacity
19434 * @type number
19435 * @default 0.25
19436 */
19437 initialOpacity: {
19438 type: Number,
19439 value: 0.25
19440 },
19441
19442 /**
19443 * How fast (opacity per second) the wave fades out.
19444 *
19445 * @attribute opacityDecayVelocity
19446 * @type number
19447 * @default 0.8
19448 */
19449 opacityDecayVelocity: {
19450 type: Number,
19451 value: 0.8
19452 },
19453
19454 /**
19455 * If true, ripples will exhibit a gravitational pull towards
19456 * the center of their container as they fade away.
19457 *
19458 * @attribute recenters
19459 * @type boolean
19460 * @default false
19461 */
19462 recenters: {
19463 type: Boolean,
19464 value: false
19465 },
19466
19467 /**
19468 * If true, ripples will center inside its container
19469 *
19470 * @attribute recenters
19471 * @type boolean
19472 * @default false
19473 */
19474 center: {
19475 type: Boolean,
19476 value: false
19477 },
19478
19479 /**
19480 * A list of the visual ripples.
19481 *
19482 * @attribute ripples
19483 * @type Array
19484 * @default []
19485 */
19486 ripples: {
19487 type: Array,
19488 value: function() {
19489 return [];
19490 }
19491 },
19492
19493 /**
19494 * True when there are visible ripples animating within the
19495 * element.
19496 */
19497 animating: {
19498 type: Boolean,
19499 readOnly: true,
19500 reflectToAttribute: true,
19501 value: false
19502 },
19503
19504 /**
19505 * If true, the ripple will remain in the "down" state until `holdDown`
19506 * is set to false again.
19507 */
19508 holdDown: {
19509 type: Boolean,
19510 value: false,
19511 observer: '_holdDownChanged'
19512 },
19513
19514 /**
19515 * If true, the ripple will not generate a ripple effect
19516 * via pointer interaction.
19517 * Calling ripple's imperative api like `simulatedRipple` will
19518 * still generate the ripple effect.
19519 */
19520 noink: {
19521 type: Boolean,
19522 value: false
19523 },
19524
19525 _animating: {
19526 type: Boolean
19527 },
19528
19529 _boundAnimate: {
19530 type: Function,
19531 value: function() {
19532 return this.animate.bind(this);
19533 }
19534 }
19535 },
19536
19537 get target () {
19538 return this.keyEventTarget;
19539 },
19540
19541 keyBindings: {
19542 'enter:keydown': '_onEnterKeydown',
19543 'space:keydown': '_onSpaceKeydown',
19544 'space:keyup': '_onSpaceKeyup'
19545 },
19546
19547 attached: function() {
19548 // Set up a11yKeysBehavior to listen to key events on the target,
19549 // so that space and enter activate the ripple even if the target doesn' t
19550 // handle key events. The key handlers deal with `noink` themselves.
19551 if (this.parentNode.nodeType == 11) { // DOCUMENT_FRAGMENT_NODE
19552 this.keyEventTarget = Polymer.dom(this).getOwnerRoot().host;
19553 } else {
19554 this.keyEventTarget = this.parentNode;
19555 }
19556 var keyEventTarget = /** @type {!EventTarget} */ (this.keyEventTarget);
19557 this.listen(keyEventTarget, 'up', 'uiUpAction');
19558 this.listen(keyEventTarget, 'down', 'uiDownAction');
19559 },
19560
19561 detached: function() {
19562 this.unlisten(this.keyEventTarget, 'up', 'uiUpAction');
19563 this.unlisten(this.keyEventTarget, 'down', 'uiDownAction');
19564 this.keyEventTarget = null;
19565 },
19566
19567 get shouldKeepAnimating () {
19568 for (var index = 0; index < this.ripples.length; ++index) {
19569 if (!this.ripples[index].isAnimationComplete) {
19570 return true;
19571 }
19572 }
19573
19574 return false;
19575 },
19576
19577 simulatedRipple: function() {
19578 this.downAction(null);
19579
19580 // Please see polymer/polymer#1305
19581 this.async(function() {
19582 this.upAction();
19583 }, 1);
19584 },
19585
19586 /**
19587 * Provokes a ripple down effect via a UI event,
19588 * respecting the `noink` property.
19589 * @param {Event=} event
19590 */
19591 uiDownAction: function(event) {
19592 if (!this.noink) {
19593 this.downAction(event);
19594 }
19595 },
19596
19597 /**
19598 * Provokes a ripple down effect via a UI event,
19599 * *not* respecting the `noink` property.
19600 * @param {Event=} event
19601 */
19602 downAction: function(event) {
19603 if (this.holdDown && this.ripples.length > 0) {
19604 return;
19605 }
19606
19607 var ripple = this.addRipple();
19608
19609 ripple.downAction(event);
19610
19611 if (!this._animating) {
19612 this._animating = true;
19613 this.animate();
19614 }
19615 },
19616
19617 /**
19618 * Provokes a ripple up effect via a UI event,
19619 * respecting the `noink` property.
19620 * @param {Event=} event
19621 */
19622 uiUpAction: function(event) {
19623 if (!this.noink) {
19624 this.upAction(event);
19625 }
19626 },
19627
19628 /**
19629 * Provokes a ripple up effect via a UI event,
19630 * *not* respecting the `noink` property.
19631 * @param {Event=} event
19632 */
19633 upAction: function(event) {
19634 if (this.holdDown) {
19635 return;
19636 }
19637
19638 this.ripples.forEach(function(ripple) {
19639 ripple.upAction(event);
19640 });
19641
19642 this._animating = true;
19643 this.animate();
19644 },
19645
19646 onAnimationComplete: function() {
19647 this._animating = false;
19648 this.$.background.style.backgroundColor = null;
19649 this.fire('transitionend');
19650 },
19651
19652 addRipple: function() {
19653 var ripple = new Ripple(this);
19654
19655 Polymer.dom(this.$.waves).appendChild(ripple.waveContainer);
19656 this.$.background.style.backgroundColor = ripple.color;
19657 this.ripples.push(ripple);
19658
19659 this._setAnimating(true);
19660
19661 return ripple;
19662 },
19663
19664 removeRipple: function(ripple) {
19665 var rippleIndex = this.ripples.indexOf(ripple);
19666
19667 if (rippleIndex < 0) {
19668 return;
19669 }
19670
19671 this.ripples.splice(rippleIndex, 1);
19672
19673 ripple.remove();
19674
19675 if (!this.ripples.length) {
19676 this._setAnimating(false);
19677 }
19678 },
19679
19680 animate: function() {
19681 if (!this._animating) {
19682 return;
19683 }
19684 var index;
19685 var ripple;
19686
19687 for (index = 0; index < this.ripples.length; ++index) {
19688 ripple = this.ripples[index];
19689
19690 ripple.draw();
19691
19692 this.$.background.style.opacity = ripple.outerOpacity;
19693
19694 if (ripple.isOpacityFullyDecayed && !ripple.isRestingAtMaxRadius) {
19695 this.removeRipple(ripple);
19696 }
19697 }
19698
19699 if (!this.shouldKeepAnimating && this.ripples.length === 0) {
19700 this.onAnimationComplete();
19701 } else {
19702 window.requestAnimationFrame(this._boundAnimate);
19703 }
19704 },
19705
19706 _onEnterKeydown: function() {
19707 this.uiDownAction();
19708 this.async(this.uiUpAction, 1);
19709 },
19710
19711 _onSpaceKeydown: function() {
19712 this.uiDownAction();
19713 },
19714
19715 _onSpaceKeyup: function() {
19716 this.uiUpAction();
19717 },
19718
19719 // note: holdDown does not respect noink since it can be a focus based
19720 // effect.
19721 _holdDownChanged: function(newVal, oldVal) {
19722 if (oldVal === undefined) {
19723 return;
19724 }
19725 if (newVal) {
19726 this.downAction();
19727 } else {
19728 this.upAction();
19729 }
19730 }
19731
19732 /**
19733 Fired when the animation finishes.
19734 This is useful if you want to wait until
19735 the ripple animation finishes to perform some action.
19736
19737 @event transitionend
19738 @param {{node: Object}} detail Contains the animated node.
19739 */
19740 });
19741 })();
19742 </script>
19743 <script>
19744 /**
19745 * `Polymer.PaperRippleBehavior` dynamically implements a ripple
19746 * when the element has focus via pointer or keyboard.
19747 *
19748 * NOTE: This behavior is intended to be used in conjunction with and after
19749 * `Polymer.IronButtonState` and `Polymer.IronControlState`.
19750 *
19751 * @polymerBehavior Polymer.PaperRippleBehavior
19752 */
19753 Polymer.PaperRippleBehavior = {
19754 properties: {
19755 /**
19756 * If true, the element will not produce a ripple effect when interacted
19757 * with via the pointer.
19758 */
19759 noink: {
19760 type: Boolean,
19761 observer: '_noinkChanged'
19762 },
19763
19764 /**
19765 * @type {Element|undefined}
19766 */
19767 _rippleContainer: {
19768 type: Object,
19769 }
19770 },
19771
19772 /**
19773 * Ensures a `<paper-ripple>` element is available when the element is
19774 * focused.
19775 */
19776 _buttonStateChanged: function() {
19777 if (this.focused) {
19778 this.ensureRipple();
19779 }
19780 },
19781
19782 /**
19783 * In addition to the functionality provided in `IronButtonState`, ensures
19784 * a ripple effect is created when the element is in a `pressed` state.
19785 */
19786 _downHandler: function(event) {
19787 Polymer.IronButtonStateImpl._downHandler.call(this, event);
19788 if (this.pressed) {
19789 this.ensureRipple(event);
19790 }
19791 },
19792
19793 /**
19794 * Ensures this element contains a ripple effect. For startup efficiency
19795 * the ripple effect is dynamically on demand when needed.
19796 * @param {!Event=} optTriggeringEvent (optional) event that triggered the
19797 * ripple.
19798 */
19799 ensureRipple: function(optTriggeringEvent) {
19800 if (!this.hasRipple()) {
19801 this._ripple = this._createRipple();
19802 this._ripple.noink = this.noink;
19803 var rippleContainer = this._rippleContainer || this.root;
19804 if (rippleContainer) {
19805 Polymer.dom(rippleContainer).appendChild(this._ripple);
19806 }
19807 if (optTriggeringEvent) {
19808 // Check if the event happened inside of the ripple container
19809 // Fall back to host instead of the root because distributed text
19810 // nodes are not valid event targets
19811 var domContainer = Polymer.dom(this._rippleContainer || this);
19812 var target = Polymer.dom(optTriggeringEvent).rootTarget;
19813 if (domContainer.deepContains( /** @type {Node} */(target))) {
19814 this._ripple.uiDownAction(optTriggeringEvent);
19815 }
19816 }
19817 }
19818 },
19819
19820 /**
19821 * Returns the `<paper-ripple>` element used by this element to create
19822 * ripple effects. The element's ripple is created on demand, when
19823 * necessary, and calling this method will force the
19824 * ripple to be created.
19825 */
19826 getRipple: function() {
19827 this.ensureRipple();
19828 return this._ripple;
19829 },
19830
19831 /**
19832 * Returns true if this element currently contains a ripple effect.
19833 * @return {boolean}
19834 */
19835 hasRipple: function() {
19836 return Boolean(this._ripple);
19837 },
19838
19839 /**
19840 * Create the element's ripple effect via creating a `<paper-ripple>`.
19841 * Override this method to customize the ripple element.
19842 * @return {!PaperRippleElement} Returns a `<paper-ripple>` element.
19843 */
19844 _createRipple: function() {
19845 return /** @type {!PaperRippleElement} */ (
19846 document.createElement('paper-ripple'));
19847 },
19848
19849 _noinkChanged: function(noink) {
19850 if (this.hasRipple()) {
19851 this._ripple.noink = noink;
19852 }
19853 }
19854 };
19855 </script>
19856 <script>
19857 /** 20169 /**
19858 * `Polymer.PaperInkyFocusBehavior` implements a ripple when the element has k eyboard focus. 20170 * `Polymer.PaperInkyFocusBehavior` implements a ripple when the element has k eyboard focus.
19859 * 20171 *
19860 * @polymerBehavior Polymer.PaperInkyFocusBehavior 20172 * @polymerBehavior Polymer.PaperInkyFocusBehavior
19861 */ 20173 */
19862 Polymer.PaperInkyFocusBehaviorImpl = { 20174 Polymer.PaperInkyFocusBehaviorImpl = {
19863 observers: [ 20175 observers: [
19864 '_focusedChanged(receivedFocusFromKeyboard)' 20176 '_focusedChanged(receivedFocusFromKeyboard)'
19865 ], 20177 ],
19866 20178
(...skipping 3556 matching lines...) Expand 10 before | Expand all | Expand 10 after
23423 _taskLink: function(data) { 23735 _taskLink: function(data) {
23424 if (data && data.task_id) { 23736 if (data && data.task_id) {
23425 return "/user/task/" + data.task_id; 23737 return "/user/task/" + data.task_id;
23426 } 23738 }
23427 return undefined; 23739 return undefined;
23428 } 23740 }
23429 23741
23430 }); 23742 });
23431 })(); 23743 })();
23432 </script> 23744 </script>
23433 </dom-module><script>
23434 /** @polymerBehavior Polymer.PaperButtonBehavior */
23435 Polymer.PaperButtonBehaviorImpl = {
23436 properties: {
23437 /**
23438 * The z-depth of this element, from 0-5. Setting to 0 will remove the
23439 * shadow, and each increasing number greater than 0 will be "deeper"
23440 * than the last.
23441 *
23442 * @attribute elevation
23443 * @type number
23444 * @default 1
23445 */
23446 elevation: {
23447 type: Number,
23448 reflectToAttribute: true,
23449 readOnly: true
23450 }
23451 },
23452
23453 observers: [
23454 '_calculateElevation(focused, disabled, active, pressed, receivedFocusFrom Keyboard)',
23455 '_computeKeyboardClass(receivedFocusFromKeyboard)'
23456 ],
23457
23458 hostAttributes: {
23459 role: 'button',
23460 tabindex: '0',
23461 animated: true
23462 },
23463
23464 _calculateElevation: function() {
23465 var e = 1;
23466 if (this.disabled) {
23467 e = 0;
23468 } else if (this.active || this.pressed) {
23469 e = 4;
23470 } else if (this.receivedFocusFromKeyboard) {
23471 e = 3;
23472 }
23473 this._setElevation(e);
23474 },
23475
23476 _computeKeyboardClass: function(receivedFocusFromKeyboard) {
23477 this.toggleClass('keyboard-focus', receivedFocusFromKeyboard);
23478 },
23479
23480 /**
23481 * In addition to `IronButtonState` behavior, when space key goes down,
23482 * create a ripple down effect.
23483 *
23484 * @param {!KeyboardEvent} event .
23485 */
23486 _spaceKeyDownHandler: function(event) {
23487 Polymer.IronButtonStateImpl._spaceKeyDownHandler.call(this, event);
23488 // Ensure that there is at most one ripple when the space key is held down .
23489 if (this.hasRipple() && this.getRipple().ripples.length < 1) {
23490 this._ripple.uiDownAction();
23491 }
23492 },
23493
23494 /**
23495 * In addition to `IronButtonState` behavior, when space key goes up,
23496 * create a ripple up effect.
23497 *
23498 * @param {!KeyboardEvent} event .
23499 */
23500 _spaceKeyUpHandler: function(event) {
23501 Polymer.IronButtonStateImpl._spaceKeyUpHandler.call(this, event);
23502 if (this.hasRipple()) {
23503 this._ripple.uiUpAction();
23504 }
23505 }
23506 };
23507
23508 /** @polymerBehavior */
23509 Polymer.PaperButtonBehavior = [
23510 Polymer.IronButtonState,
23511 Polymer.IronControlState,
23512 Polymer.PaperRippleBehavior,
23513 Polymer.PaperButtonBehaviorImpl
23514 ];
23515 </script>
23516 <style is="custom-style">
23517
23518 :root {
23519
23520 --shadow-transition: {
23521 transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
23522 };
23523
23524 --shadow-none: {
23525 box-shadow: none;
23526 };
23527
23528 /* from http://codepen.io/shyndman/pen/c5394ddf2e8b2a5c9185904b57421cdb */
23529
23530 --shadow-elevation-2dp: {
23531 box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
23532 0 1px 5px 0 rgba(0, 0, 0, 0.12),
23533 0 3px 1px -2px rgba(0, 0, 0, 0.2);
23534 };
23535
23536 --shadow-elevation-3dp: {
23537 box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14),
23538 0 1px 8px 0 rgba(0, 0, 0, 0.12),
23539 0 3px 3px -2px rgba(0, 0, 0, 0.4);
23540 };
23541
23542 --shadow-elevation-4dp: {
23543 box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14),
23544 0 1px 10px 0 rgba(0, 0, 0, 0.12),
23545 0 2px 4px -1px rgba(0, 0, 0, 0.4);
23546 };
23547
23548 --shadow-elevation-6dp: {
23549 box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14),
23550 0 1px 18px 0 rgba(0, 0, 0, 0.12),
23551 0 3px 5px -1px rgba(0, 0, 0, 0.4);
23552 };
23553
23554 --shadow-elevation-8dp: {
23555 box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14),
23556 0 3px 14px 2px rgba(0, 0, 0, 0.12),
23557 0 5px 5px -3px rgba(0, 0, 0, 0.4);
23558 };
23559
23560 --shadow-elevation-12dp: {
23561 box-shadow: 0 12px 16px 1px rgba(0, 0, 0, 0.14),
23562 0 4px 22px 3px rgba(0, 0, 0, 0.12),
23563 0 6px 7px -4px rgba(0, 0, 0, 0.4);
23564 };
23565
23566 --shadow-elevation-16dp: {
23567 box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14),
23568 0 6px 30px 5px rgba(0, 0, 0, 0.12),
23569 0 8px 10px -5px rgba(0, 0, 0, 0.4);
23570 };
23571
23572 }
23573
23574 </style>
23575 <dom-module id="paper-material-shared-styles" assetpath="/res/imp/bower_componen ts/paper-material/">
23576 <template>
23577 <style>
23578 :host {
23579 display: block;
23580 position: relative;
23581 }
23582
23583 :host([elevation="1"]) {
23584 @apply(--shadow-elevation-2dp);
23585 }
23586
23587 :host([elevation="2"]) {
23588 @apply(--shadow-elevation-4dp);
23589 }
23590
23591 :host([elevation="3"]) {
23592 @apply(--shadow-elevation-6dp);
23593 }
23594
23595 :host([elevation="4"]) {
23596 @apply(--shadow-elevation-8dp);
23597 }
23598
23599 :host([elevation="5"]) {
23600 @apply(--shadow-elevation-16dp);
23601 }
23602 </style>
23603 </template>
23604 </dom-module> 23745 </dom-module>
23605 23746
23606
23607 <dom-module id="paper-material" assetpath="/res/imp/bower_components/paper-mater ial/"> 23747 <dom-module id="paper-material" assetpath="/res/imp/bower_components/paper-mater ial/">
23608 <template> 23748 <template>
23609 <style include="paper-material-shared-styles"></style> 23749 <style include="paper-material-shared-styles"></style>
23610 <style> 23750 <style>
23611 :host([animated]) { 23751 :host([animated]) {
23612 @apply(--shadow-transition); 23752 @apply(--shadow-transition);
23613 } 23753 }
23614 </style> 23754 </style>
23615 23755
23616 <content></content> 23756 <content></content>
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after
24372 if (state === "RUNNING" || state === "PENDING") { 24512 if (state === "RUNNING" || state === "PENDING") {
24373 return "pending"; 24513 return "pending";
24374 } 24514 }
24375 return ""; 24515 return "";
24376 } 24516 }
24377 24517
24378 }); 24518 });
24379 })(); 24519 })();
24380 </script> 24520 </script>
24381 </dom-module></div></body></html> 24521 </dom-module></div></body></html>
OLDNEW
« no previous file with comments | « no previous file | appengine/swarming/elements/res/imp/common/swarming-app.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698