Bug 1026636 - Uplift TBPL fixes in firefox33 branch to firefox32 branch. a=sledru
authorErik Vold <evold@mozilla.com>
Tue, 17 Jun 2014 17:38:00 -0400
changeset 208612 ebff751502d33d4e5d80aaa5d0a7e039cc65498b
parent 208611 d1302463099e15b1b795effdd3a3995c0f6643ae
child 208613 cdc3b72c1e38072bbf3eec03f62ed0c960de84ab
push id494
push userraliiev@mozilla.com
push dateMon, 25 Aug 2014 18:42:16 +0000
treeherdermozilla-release@a3cc3e46b571 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerssledru
bugs1026636
milestone32.0a2
Bug 1026636 - Uplift TBPL fixes in firefox33 branch to firefox32 branch. a=sledru
addon-sdk/source/python-lib/cuddlefish/__init__.py
addon-sdk/source/python-lib/cuddlefish/_version.py
addon-sdk/source/python-lib/cuddlefish/manifest.py
addon-sdk/source/python-lib/cuddlefish/runner.py
addon-sdk/source/python-lib/plural-rules-generator.py
addon-sdk/source/python-lib/simplejson/encoder.py
addon-sdk/source/test/addons/e10s/lib/main.js
addon-sdk/source/test/fixtures/mofo_logo.SVG
--- a/addon-sdk/source/python-lib/cuddlefish/__init__.py
+++ b/addon-sdk/source/python-lib/cuddlefish/__init__.py
@@ -261,17 +261,17 @@ parser_groups = (
                                  metavar=None,
                                  default=None,
                                  cmds=['test', 'run', 'xpi', 'testex',
                                        'testpkgs', 'testall'])),
         (("", "--e10s",), dict(dest="enable_e10s",
                                help="enable remote windows",
                                action="store_true",
                                default=False,
-                               cmds=['test', 'run', 'testex', 'testpkgs', 
+                               cmds=['test', 'run', 'testex', 'testpkgs',
                                      'testaddons', 'testcfx', 'testall'])),
         (("", "--logfile",), dict(dest="logfile",
                                   help="log console output to file",
                                   metavar=None,
                                   default=None,
                                   cmds=['run', 'test', 'testex', 'testpkgs'])),
         # TODO: This should default to true once our memory debugging
         # issues are resolved; see bug 592774.
@@ -416,23 +416,24 @@ def test_cfx(env_root, verbose):
 
 def test_all_testaddons(env_root, defaults):
     addons_dir = os.path.join(env_root, "test", "addons")
     addons = [dirname for dirname in os.listdir(addons_dir)
                 if os.path.isdir(os.path.join(addons_dir, dirname))]
     addons.sort()
     fail = False
     for dirname in addons:
+        # apply the filter
         if (not defaults['filter'].split(":")[0] in dirname):
             continue
 
         print >>sys.stderr, "Testing %s..." % dirname
         sys.stderr.flush()
         try:
-            run(arguments=["run",
+            run(arguments=["testrun",
                            "--pkgdir",
                            os.path.join(addons_dir, dirname)],
                 defaults=defaults,
                 env_root=env_root)
         except SystemExit, e:
             fail = (e.code != 0) or fail
         if fail and defaults.get("stopOnError"):
             break
@@ -614,17 +615,17 @@ def run(arguments=sys.argv[1:], target_c
         test_all(env_root, defaults=options.__dict__)
         return
     elif command == "testcfx":
         if options.filter:
             print >>sys.stderr, "The filter option is not valid with the testcfx command"
             return
         test_cfx(env_root, options.verbose)
         return
-    elif command not in ["xpi", "test", "run"]:
+    elif command not in ["xpi", "test", "run", "testrun"]:
         print >>sys.stderr, "Unknown command: %s" % command
         print >>sys.stderr, "Try using '--help' for assistance."
         sys.exit(1)
 
     target_cfg_json = None
     if not target_cfg:
         if not options.pkgdir:
             options.pkgdir = find_parent_package(os.getcwd())
@@ -658,16 +659,19 @@ def run(arguments=sys.argv[1:], target_c
     elif command == "test":
         if 'tests' not in target_cfg:
             target_cfg['tests'] = []
         inherited_options.extend(['iterations', 'filter', 'profileMemory',
                                   'stopOnError'])
         enforce_timeouts = True
     elif command == "run":
         use_main = True
+    elif command == "testrun":
+        use_main = True
+        enforce_timeouts = True
     else:
         assert 0, "shouldn't get here"
 
     if use_main and 'main' not in target_cfg:
         # If the user supplies a template dir, then the main
         # program may be contained in the template.
         if not options.templatedir:
             print >>sys.stderr, "package.json does not have a 'main' entry."
@@ -676,17 +680,17 @@ def run(arguments=sys.argv[1:], target_c
     if not pkg_cfg:
         pkg_cfg = packaging.build_config(env_root, target_cfg, options.packagepath)
 
     target = target_cfg.name
 
     # TODO: Consider keeping a cache of dynamic UUIDs, based
     # on absolute filesystem pathname, in the root directory
     # or something.
-    if command in ('xpi', 'run'):
+    if command in ('xpi', 'run', 'testrun'):
         from cuddlefish.preflight import preflight_config
         if target_cfg_json:
             config_was_ok, modified = preflight_config(target_cfg,
                                                        target_cfg_json)
             if not config_was_ok:
                 if modified:
                     # we need to re-read package.json . The safest approach
                     # is to re-run the "cfx xpi"/"cfx run" command.
--- a/addon-sdk/source/python-lib/cuddlefish/_version.py
+++ b/addon-sdk/source/python-lib/cuddlefish/_version.py
@@ -32,20 +32,22 @@ def run_command(args, cwd=None, verbose=
     return stdout
 
 
 import sys
 import re
 import os.path
 
 def get_expanded_variables(versionfile_source):
-    # the code embedded in _version.py can just fetch the value of these
-    # variables. When used from setup.py, we don't want to import
-    # _version.py, so we do it with a regexp instead. This function is not
-    # used from _version.py.
+    """
+    the code embedded in _version.py can just fetch the value of these
+    variables. When used from setup.py, we don't want to import
+    _version.py, so we do it with a regexp instead. This function is not
+    used from _version.py.
+    """
     variables = {}
     try:
         for line in open(versionfile_source,"r").readlines():
             if line.strip().startswith("git_refnames ="):
                 mo = re.search(r'=\s*"(.*)"', line)
                 if mo:
                     variables["refnames"] = mo.group(1)
             if line.strip().startswith("git_full ="):
@@ -76,25 +78,26 @@ def versions_from_expanded_variables(var
             r = ref[len(tag_prefix):]
             return { "version": r,
                      "full": variables["full"].strip() }
     # no suitable tags, so we use the full revision id
     return { "version": variables["full"].strip(),
              "full": variables["full"].strip() }
 
 def versions_from_vcs(tag_prefix, versionfile_source, verbose=False):
-    # this runs 'git' from the root of the source tree. That either means
-    # someone ran a setup.py command (and this code is in versioneer.py, thus
-    # the containing directory is the root of the source tree), or someone
-    # ran a project-specific entry point (and this code is in _version.py,
-    # thus the containing directory is somewhere deeper in the source tree).
-    # This only gets called if the git-archive 'subst' variables were *not*
-    # expanded, and _version.py hasn't already been rewritten with a short
-    # version string, meaning we're inside a checked out source tree.
-
+    """
+    this runs 'git' from the root of the source tree. That either means
+    someone ran a setup.py command (and this code is in versioneer.py, thus
+    the containing directory is the root of the source tree), or someone
+    ran a project-specific entry point (and this code is in _version.py,
+    thus the containing directory is somewhere deeper in the source tree).
+    This only gets called if the git-archive 'subst' variables were *not*
+    expanded, and _version.py hasn't already been rewritten with a short
+    version string, meaning we're inside a checked out source tree.
+    """
     try:
         here = os.path.abspath(__file__)
     except NameError:
         # some py2exe/bbfreeze/non-CPython implementations don't do __file__
         return {} # not always correct
 
     # versionfile_source is the relative path from the top of the source tree
     # (where the .git directory might live) to this file. Invert this to find
--- a/addon-sdk/source/python-lib/cuddlefish/manifest.py
+++ b/addon-sdk/source/python-lib/cuddlefish/manifest.py
@@ -115,17 +115,19 @@ class ManifestEntry:
     # self.js_filename
     # self.docs_filename
 
 
 def hash_file(fn):
     return hashlib.sha256(open(fn,"rb").read()).hexdigest()
 
 def get_datafiles(datadir):
-    # yields pathnames relative to DATADIR, ignoring some files
+    """
+    yields pathnames relative to DATADIR, ignoring some files
+    """
     for dirpath, dirnames, filenames in os.walk(datadir):
         filenames = list(filter_filenames(filenames))
         # this tells os.walk to prune the search
         dirnames[:] = filter_dirnames(dirnames)
         for filename in filenames:
             fullname = os.path.join(dirpath, filename)
             assert fullname.startswith(datadir+SEP), "%s%s not in %s" % (datadir, SEP, fullname)
             yield fullname[len(datadir+SEP):]
@@ -188,18 +190,19 @@ class ManifestBuilder:
         self.stderr = stderr
         self.extra_modules = extra_modules
         self.modules = {} # maps ModuleInfo to URI in self.manifest
         self.datamaps = {} # maps package name to DataMap instance
         self.files = [] # maps manifest index to (absfn,absfn) js/docs pair
         self.test_modules = [] # for runtime
 
     def build(self, scan_tests, test_filter_re):
-        # process the top module, which recurses to process everything it
-        # reaches
+        """
+        process the top module, which recurses to process everything it reaches
+        """
         if "main" in self.target_cfg:
             top_mi = self.find_top(self.target_cfg)
             top_me = self.process_module(top_mi)
             self.top_path = top_me.get_path()
             self.datamaps[self.target_cfg.name] = DataMap(self.target_cfg)
         if scan_tests:
             mi = self._find_module_in_package("addon-sdk", "lib", "sdk/test/runner", [])
             self.process_module(mi)
@@ -256,19 +259,21 @@ class ManifestBuilder:
     def get_used_packages(self):
         used = set()
         for index in self.manifest:
             (package, section, module) = index
             used.add(package)
         return sorted(used)
 
     def get_used_files(self, bundle_sdk_modules):
-        # returns all .js files that we reference, plus data/ files. You will
-        # need to add the loader, off-manifest files that it needs, and
-        # generated metadata.
+        """
+        returns all .js files that we reference, plus data/ files. You will
+        need to add the loader, off-manifest files that it needs, and
+        generated metadata.
+        """
         for datamap in self.datamaps.values():
             for (zipname, absname) in datamap.files_to_copy:
                 yield absname
 
         for me in self.get_module_entries():
             # Only ship SDK files if we are told to do so
             if me.packageName != "addon-sdk" or bundle_sdk_modules:
                 yield me.js_filename
--- a/addon-sdk/source/python-lib/cuddlefish/runner.py
+++ b/addon-sdk/source/python-lib/cuddlefish/runner.py
@@ -710,17 +710,17 @@ def run_app(harness_root_dir, manifest_r
         print "To launch the application, enter the following command:"
         print " ".join(runner.command) + " " + (" ".join(runner.cmdargs))
         return 0
 
     runner.start()
 
     done = False
     result = None
-    test_name = "unknown"
+    test_name = "Jetpack startup"
 
     def Timeout(message, test_name, parseable):
         if parseable:
             sys.stderr.write("TEST-UNEXPECTED-FAIL | %s | %s\n" % (test_name, message))
             sys.stderr.flush()
         return Exception(message)
 
     try:
--- a/addon-sdk/source/python-lib/plural-rules-generator.py
+++ b/addon-sdk/source/python-lib/plural-rules-generator.py
@@ -20,20 +20,23 @@ import json
 import re
 
 PRINT_CONDITIONS_IN_COMMENTS = False
 
 UNICODE_ORG_XML_URL = "http://unicode.org/repos/cldr/trunk/common/supplemental/plurals.xml"
 
 CONDITION_RE = r'n( mod \d+)? (is|in|within|(not in))( not)? ([^\s]+)'
 
-# For a given regexp.MatchObject `g` for `CONDITION_RE`, 
-# returns the equivalent JS piece of code
-# i.e. maps pseudo conditional language from unicode.org XML to JS code
+
 def parseCondition(g):
+    """
+    For a given regexp.MatchObject `g` for `CONDITION_RE`, 
+    returns the equivalent JS piece of code
+    i.e. maps pseudo conditional language from unicode.org XML to JS code
+    """
     lvalue = "n"
     if g.group(1):
         lvalue = "(n %% %d)" % int(g.group(1).replace("mod ", ""))
 
     operator = g.group(2)
     if g.group(4):
         operator += " not"
 
@@ -76,17 +79,19 @@ def parseCondition(g):
             integers.append(int(sub))
     if len(integers) > 1:
       subCondition.append("isIn(%s, [%s])" % (lvalue, ", ".join(integers)))
     elif len(integers) == 1:
       subCondition.append("(%s == %s)" % (lvalue, integers[0]))
     return "%s(%s)" % (notPrefix, " || ".join(subCondition))
 
 def computeRules():
-    # Fetch plural rules data directly from unicode.org website:
+    """
+    Fetch plural rules data directly from unicode.org website:
+    """
     url = UNICODE_ORG_XML_URL
     f = urllib2.urlopen(url)
     doc = xml.dom.minidom.parse(f)
 
     # Read XML document and extract locale to rules mapping
     localesMapping = {}
     algorithms = {}
     for index,pluralRules in enumerate(doc.getElementsByTagName("pluralRules")):
--- a/addon-sdk/source/python-lib/simplejson/encoder.py
+++ b/addon-sdk/source/python-lib/simplejson/encoder.py
@@ -23,19 +23,20 @@ ESCAPE_DCT = {
 for i in range(0x20):
     ESCAPE_DCT.setdefault(chr(i), '\\u%04x' % (i,))
 
 # Assume this produces an infinity on all machines (probably not guaranteed)
 INFINITY = float('1e66666')
 FLOAT_REPR = repr
 
 def floatstr(o, allow_nan=True):
-    # Check for specials.  Note that this type of test is processor- and/or
-    # platform-specific, so do tests which don't depend on the internals.
-
+    """
+    Check for specials.  Note that this type of test is processor- and/or
+    platform-specific, so do tests which don't depend on the internals.
+    """
     if o != o:
         text = 'NaN'
     elif o == INFINITY:
         text = 'Infinity'
     elif o == -INFINITY:
         text = '-Infinity'
     else:
         return FLOAT_REPR(o)
@@ -169,19 +170,25 @@ class JSONEncoder(object):
         self.current_indent_level = 0
         if separators is not None:
             self.item_separator, self.key_separator = separators
         if default is not None:
             self.default = default
         self.encoding = encoding
 
     def _newline_indent(self):
+        """
+        Indent lines by level
+        """
         return '\n' + (' ' * (self.indent * self.current_indent_level))
 
     def _iterencode_list(self, lst, markers=None):
+        """
+        Encoding lists, yielding by level
+        """
         if not lst:
             yield '[]'
             return
         if markers is not None:
             markerid = id(lst)
             if markerid in markers:
                 raise ValueError("Circular reference detected")
             markers[markerid] = lst
@@ -205,16 +212,19 @@ class JSONEncoder(object):
         if newline_indent is not None:
             self.current_indent_level -= 1
             yield self._newline_indent()
         yield ']'
         if markers is not None:
             del markers[markerid]
 
     def _iterencode_dict(self, dct, markers=None):
+        """
+        Encoding dictionaries, yielding by level
+        """
         if not dct:
             yield '{}'
             return
         if markers is not None:
             markerid = id(dct)
             if markerid in markers:
                 raise ValueError("Circular reference detected")
             markers[markerid] = dct
--- a/addon-sdk/source/test/addons/e10s/lib/main.js
+++ b/addon-sdk/source/test/addons/e10s/lib/main.js
@@ -1,29 +1,31 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 'use strict';
 
 const { get: getPref } = require('sdk/preferences/service');
 const { getMostRecentBrowserWindow } = require('sdk/window/utils');
 const { openTab, closeTab, getBrowserForTab } = require('sdk/tabs/utils');
+const tabs = require('sdk/tabs');
 
 exports.testRemotePrefIsSet = function(assert) {
-  assert.ok(getPref('browser.tabs.remote.autostart'), 
+  assert.ok(getPref('browser.tabs.remote.autostart'),
             "Electrolysis remote tabs pref should be set");
 }
 
 exports.testTabIsRemote = function(assert, done) {
   const url = 'data:text/html,test-tab-is-remote';
   let tab = openTab(getMostRecentBrowserWindow(), url);
   assert.ok(tab.getAttribute('remote'), "The new tab should be remote");
 
   // can't simply close a remote tab before it is loaded, bug 1006043
   let mm = getBrowserForTab(tab).messageManager;
-  mm.addMessageListener(7, function() {
+  mm.addMessageListener('7', function listener() {
+    mm.removeMessageListener('7', listener);
+    tabs.once('close', done);
     closeTab(tab);
-    done();
   })
-  mm.loadFrameScript('data:,sendAsyncMessage(7)', false);
+  mm.loadFrameScript('data:,sendAsyncMessage("7")', true);
 }
 
 require('sdk/test/runner').runTestsFromModule(module);
--- a/addon-sdk/source/test/fixtures/mofo_logo.SVG
+++ b/addon-sdk/source/test/fixtures/mofo_logo.SVG
@@ -1,14 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- Generator: Adobe Illustrator 12.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 51448)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_svg "http://www.w3.org/2000/svg">
-	<!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
-]>
 <svg version="1.1" id="svg2997" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" viewBox="-0.5 -0.5 200 200" overflow="visible" enable-background="new -0.5 -0.5 200 200" xml:space="preserve">
 <path id="path85" fill="#FFFFFF" d="M-2559.936,6359.65c19.127,26.489,46.371,47.744,80.988,44.707  C-2479.339,6371.648-2523.898,6352.641-2559.936,6359.65z"/>
 <path id="path93" fill="#FFFFFF" d="M-2634.014,6073.506c4.082-7.232,2.571-17.81,3.831-26.684  c-9.019,4.635-15.506,14.72-24.551,18.641C-2652.134,6070.818-2640.447,6070.829-2634.014,6073.506z"/>
 <path id="path95" fill="#FFFFFF" d="M-2687.179,6018.109l-18.654,18.212c4.158,3.301,9.676,8.132,17.11,6.36L-2687.179,6018.109z"/>
 <path id="path97" fill="#FFFFFF" d="M-2731.117,5998.391c-4.356-0.363-14.41,20.156-18.785,19.857l14.762,8.728  C-2730.055,6027.281-2732.816,6001.961-2731.117,5998.391L-2731.117,5998.391z"/>
 <path id="path99" fill="#FFFFFF" d="M-2776.505,5989.09l4.736-11.668c-10.245,0.813-15.511,20.68-21.719,26.244  C-2776.37,6007.109-2775.727,6011.81-2776.505,5989.09z"/>
 <path id="path101" fill="#FFFFFF" d="M-2825.16,5962.186l-18.405,31.539l17.091,3.962L-2825.16,5962.186L-2825.16,5962.186z"/>
 <path id="path103" fill="#FFFFFF" d="M-2872.173,5967.636l-21.059,16.139C-2872.035,5992.07-2870.821,5995.181-2872.173,5967.636z"/>
@@ -41,9 +37,9 @@
 	<path id="path10154" d="M127.924,172.535h-3.867v-2.48c3.799,0,7.6-0.004,11.4,0c-0.002,0-0.529,2.479-0.529,2.479l-3.748,0.002   v11.768h-3.256V172.535z"/>
 	<path id="path11126" d="M142.326,170.053h3.471v14.242h-3.471V170.053z"/>
 	<path id="path14040" d="M159.949,184.227c-2.24-0.338-3.854-1.586-4.748-3.68c-0.512-1.191-0.656-2.105-0.598-3.748   c0.061-1.664,0.254-2.451,0.885-3.605c0.816-1.488,1.883-2.344,3.557-2.846c0.877-0.266,1.064-0.291,2.275-0.293   c1.094-0.004,1.445,0.029,2.076,0.201c2.305,0.627,3.803,2.172,4.426,4.559c0.289,1.105,0.266,3.764-0.041,4.846   c-0.697,2.463-2.387,4.098-4.676,4.527C162.395,184.322,160.713,184.342,159.949,184.227z M162.293,181.963   c0.926-0.281,1.578-1.137,1.875-2.463c0.205-0.91,0.24-3.596,0.059-4.547c-0.336-1.762-1.328-2.654-2.957-2.656   c-1.59-0.002-2.457,0.793-2.912,2.67c-0.215,0.883-0.238,3.438-0.041,4.396c0.279,1.357,0.877,2.211,1.762,2.512   C160.682,182.082,161.756,182.123,162.293,181.963z"/>
 	<path id="path2224" d="M176.656,170.053l3.563,0.051c1.402,2.793,2.945,5.531,4.143,8.41l0.199,0.504l-0.049-1.01l-0.182-7.951   h2.992v14.246h-3.23l-0.369-0.758c-1.168-2.398-3.178-6.629-3.658-7.697c-0.305-0.684-0.531-1.137-0.502-1.012   c0.031,0.127,0.086,2.309,0.121,4.848l0.066,4.619h-3.094V170.053z"/>
 	<g id="g3173" transform="translate(-0.4495808,1251.722)">
 		<path id="path2320" d="M185.373-1089.163c-1.527-0.85-2.496-1.666-3.189-2.689l-0.402-0.596l-0.586,0.516    c-0.816,0.725-1.141,0.965-1.887,1.406c-1.727,1.02-4.043,1.439-6.92,1.252c-5.955-0.385-9.082-3.238-9.49-8.66    c-0.182-2.412,0.223-4.607,1.158-6.289c1.281-2.305,3.789-3.914,7.313-4.695c1.803-0.398,3.266-0.545,5.977-0.594l2.516-0.049    l-0.049-1.311c-0.027-0.723-0.09-1.543-0.137-1.824c-0.25-1.477-0.871-2.223-2.035-2.445c-0.902-0.17-1.32-0.18-2.357-0.053    c-2.006,0.246-4.098,1.066-6.678,2.623c-0.691,0.416-1.297,0.744-1.346,0.725c-0.096-0.037-3.463-5.682-3.461-5.799    c0.008-0.166,2.094-1.316,3.582-1.973c4.023-1.775,6.543-2.377,9.953-2.377c3.17,0,5.359,0.533,7.127,1.736    c0.693,0.473,1.736,1.551,2.115,2.186c0.35,0.586,0.777,1.646,1.012,2.51l0.189,0.691l-0.041,4.766    c-0.021,2.619-0.041,6.43-0.041,8.467c0,4.178,0,4.18,0.633,5.414c0.273,0.537,0.498,0.814,1.266,1.57    c0.855,0.842,0.922,0.93,0.809,1.059c-0.068,0.076-1.029,1.184-2.137,2.461c-1.109,1.275-2.057,2.328-2.107,2.338    C186.108-1088.786,185.756-1088.953,185.373-1089.163z M175.903-1095.453c1.229-0.154,2.246-0.641,3.182-1.518l0.508-0.477    l0.055-3.168l0.053-3.168l-1.316,0.057c-4.154,0.178-5.707,0.842-6.377,2.729c-0.213,0.596-0.295,2.16-0.146,2.787    c0.334,1.418,1.457,2.533,2.768,2.748c0.246,0.039,0.486,0.078,0.531,0.082C175.203-1095.374,175.539-1095.408,175.903-1095.453z     M137.623-1089.718c-1.318-0.205-2.459-0.68-3.502-1.459c-1.109-0.826-1.762-1.803-2.238-3.348    c-0.445-1.441-0.436-1.025-0.49-18.475c-0.051-15.838-0.057-16.158-0.236-18.186c-0.102-1.135-0.162-2.086-0.137-2.111    c0.074-0.074,8.055-1.891,8.154-1.857c0.098,0.037,0.248,1.135,0.361,2.654c0.162,10.801,0.012,21.605,0.156,32.406    c0.063,2.619,0.086,2.936,0.24,3.373c0.379,1.078,0.902,1.469,1.963,1.465c0.336,0,0.662-0.018,0.727-0.039    c0.105-0.033,0.479,1.133,1.371,4.289l0.162,0.578l-1.271,0.334C141.034-1089.607,139.186-1089.476,137.623-1089.718z     M154.555-1089.644c-1.066-0.125-1.982-0.391-2.85-0.822c-2.164-1.08-3.219-2.633-3.713-5.475    c-0.066-0.375-0.109-5.193-0.146-16.57c-0.053-15.98-0.055-16.049-0.25-18.383c-0.117-1.43-0.164-2.367-0.119-2.408    c0.102-0.088,8.1-1.91,8.152-1.857c0.088,0.088,0.268,1.711,0.348,3.148c0.213,11.125-0.035,22.258,0.162,33.383    c0.055,1.18,0.107,1.611,0.238,1.984c0.221,0.625,0.525,1.014,0.945,1.199c0.457,0.203,1.182,0.281,1.516,0.166    c0.174-0.063,0.283-0.066,0.316-0.014c0.078,0.129,1.402,4.816,1.369,4.85c-0.016,0.018-0.504,0.164-1.084,0.328    C158.041-1089.722,155.75-1089.501,154.555-1089.644z M67.676-1089.716c-0.134-0.018-0.61-0.076-1.059-0.127    c-0.447-0.053-1.237-0.215-1.756-0.363c-5.568-1.582-9.046-6.182-9.853-13.021c-0.124-1.047-0.123-3.988,0.001-5.09    c0.362-3.213,1.4-6.119,2.997-8.387c1.083-1.537,2.861-3.086,4.462-3.889c2.021-1.016,3.78-1.402,6.368-1.402    c2.15,0,3.536,0.219,5.156,0.816c3.931,1.449,7.106,5.004,8.254,9.238c0.922,3.398,0.905,8.645-0.037,12.051    c-0.744,2.691-2.024,4.861-3.966,6.725s-4.086,2.918-6.7,3.297C70.775-1089.757,68.143-1089.654,67.676-1089.716z M70.77-1096.027    c1.815-0.824,2.693-2.672,3.095-6.512c0.153-1.465,0.177-5.111,0.041-6.512c-0.375-3.879-1.335-5.748-3.356-6.531    c-1.055-0.41-2.505-0.303-3.577,0.262c-1.823,0.959-2.647,2.99-2.926,7.207c-0.158,2.404-0.013,5.633,0.343,7.572    c0.475,2.602,1.225,3.77,2.859,4.457c0.768,0.322,1.166,0.387,2.144,0.344C70.09-1095.769,70.293-1095.812,70.77-1096.027z     M10.314-1116.745c-0.13-1.063-0.376-2.029-0.667-2.621c-0.147-0.301-0.224-0.547-0.182-0.584c0.09-0.078,7.021-1.965,7.22-1.965    c0.204,0,0.671,0.98,0.915,1.92c0.112,0.432,0.204,0.855,0.204,0.939c0,0.086,0.027,0.152,0.061,0.152    c0.034-0.002,0.391-0.277,0.794-0.615c1.52-1.27,3.532-2.127,5.465-2.324c2.115-0.217,4.02,0.1,5.551,0.92    c0.98,0.527,2.146,1.512,2.768,2.336l0.488,0.646l0.314-0.326c0.76-0.789,2.256-1.92,3.307-2.496    c0.898-0.494,2.17-0.893,3.413-1.074c1.114-0.16,3.312-0.063,4.384,0.197c1.185,0.287,2.204,0.719,2.971,1.26    c1.574,1.109,2.172,2.082,2.584,4.207c0.172,0.885,0.174,1.025,0.203,13.373l0.029,12.479H42.15v-10.934    c0-7.029-0.03-11.18-0.084-11.623c-0.198-1.623-0.574-2.096-1.798-2.268c-1.429-0.199-3.438,0.574-5.267,2.025l-0.667,0.529    l0,22.27h-7.729c-0.473-7.383,0.652-15.438-0.186-22.727c-0.296-1.432-0.807-1.955-2.059-2.107    c-1.462-0.178-3.452,0.498-5.153,1.75l-0.664,0.488l-0.005,22.596h-7.979C10.282-1099.062,11.051-1108.048,10.314-1116.745z     M86.536-1095.492l14.459-19.949l-13.248-0.043v-5.779h23.043v5.578c-4.503,6.535-9.129,12.986-13.598,19.545l14.179,0.037    l-0.059,0.182l-1.888,5.559l-22.899,0.041L86.536-1095.492z M116.735-1120.853l0.184-0.041c2.588-0.43,5.186-0.809,7.775-1.227    l0.266-0.045v31.844h-8.225V-1120.853z M120.276-1124.939c-1.963-0.195-3.682-1.678-4.188-3.611    c-0.703-2.688,0.707-5.361,3.273-6.201c0.484-0.158,0.754-0.191,1.592-0.191c1.578,0,2.482,0.357,3.508,1.381    c0.986,0.986,1.412,2.068,1.418,3.586c0.004,1.563-0.406,2.584-1.457,3.637C123.332-1125.245,121.934-1124.773,120.276-1124.939z"/>
 	</g>
 </g>
-</svg>
\ No newline at end of file
+</svg>