diff --git a/python/servo/testing_commands.py b/python/servo/testing_commands.py index 3586433e2f2..1ee8411cb0f 100644 --- a/python/servo/testing_commands.py +++ b/python/servo/testing_commands.py @@ -71,7 +71,7 @@ def create_parser_wpt(): parser = wptcommandline.create_parser() parser.add_argument('--release', default=False, action="store_true", help="Run with a release build of servo") - parser.add_argument('--chaos', default=False, action="store_true", + parser.add_argument('--rr-chaos', default=False, action="store_true", help="Run under chaos mode in rr until a failure is captured") parser.add_argument('--pref', default=[], action="append", dest="prefs", help="Pass preferences to servo") @@ -471,7 +471,7 @@ class MachCommands(CommandBase): os.environ["RUST_BACKTRACE"] = "1" kwargs["debug"] = not kwargs["release"] - if kwargs.pop("chaos"): + if kwargs.pop("rr_chaos"): kwargs["debugger"] = "rr" kwargs["debugger_args"] = "record --chaos" kwargs["repeat_until_unexpected"] = True diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 7a2c8735267..9dc9571717a 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -7321,945 +7321,945 @@ {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-001.html": [ + "css/css-counter-styles/arabic-indic/css3-counter-styles-101.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-001.html", + "/css/css-counter-styles/arabic-indic/css3-counter-styles-101.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-004.html": [ + "css/css-counter-styles/arabic-indic/css3-counter-styles-102.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-004.html", + "/css/css-counter-styles/arabic-indic/css3-counter-styles-102.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-005.html": [ + "css/css-counter-styles/arabic-indic/css3-counter-styles-103.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-005.html", + "/css/css-counter-styles/arabic-indic/css3-counter-styles-103.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-006.html": [ + "css/css-counter-styles/armenian/css3-counter-styles-006.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-006.html", + "/css/css-counter-styles/armenian/css3-counter-styles-006.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-007.html": [ + "css/css-counter-styles/armenian/css3-counter-styles-007.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-007.html", + "/css/css-counter-styles/armenian/css3-counter-styles-007.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-008.html": [ + "css/css-counter-styles/armenian/css3-counter-styles-008.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-008.html", + "/css/css-counter-styles/armenian/css3-counter-styles-008.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-009.html": [ + "css/css-counter-styles/armenian/css3-counter-styles-009.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-009.html", + "/css/css-counter-styles/armenian/css3-counter-styles-009.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-010.html": [ + "css/css-counter-styles/bengali/css3-counter-styles-116.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-010.html", + "/css/css-counter-styles/bengali/css3-counter-styles-116.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-011.html": [ + "css/css-counter-styles/bengali/css3-counter-styles-117.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-011.html", + "/css/css-counter-styles/bengali/css3-counter-styles-117.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-012.html": [ + "css/css-counter-styles/bengali/css3-counter-styles-118.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-012.html", + "/css/css-counter-styles/bengali/css3-counter-styles-118.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-014.html": [ + "css/css-counter-styles/cambodian/css3-counter-styles-158.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-014.html", + "/css/css-counter-styles/cambodian/css3-counter-styles-158.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-015.html": [ + "css/css-counter-styles/cambodian/css3-counter-styles-159.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-015.html", + "/css/css-counter-styles/cambodian/css3-counter-styles-159.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-016.html": [ + "css/css-counter-styles/cambodian/css3-counter-styles-160.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-016.html", + "/css/css-counter-styles/cambodian/css3-counter-styles-160.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-016a.html": [ + "css/css-counter-styles/cjk-decimal/css3-counter-styles-001.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-016a.html", + "/css/css-counter-styles/cjk-decimal/css3-counter-styles-001.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-017.html": [ + "css/css-counter-styles/cjk-decimal/css3-counter-styles-004.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-017.html", + "/css/css-counter-styles/cjk-decimal/css3-counter-styles-004.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-019.html": [ + "css/css-counter-styles/cjk-decimal/css3-counter-styles-005.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-019.html", + "/css/css-counter-styles/cjk-decimal/css3-counter-styles-005.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-020.html": [ + "css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-201.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-020.html", + "/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-201.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-020a.html": [ + "css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-020a.html", + "/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-020b.html": [ + "css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-203.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-020b.html", + "/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-203.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-021.html": [ + "css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-204.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-021.html", + "/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-204.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-022.html": [ + "css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-022.html", + "/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-023.html": [ + "css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-206.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-023.html", + "/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-206.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-024.html": [ + "css/css-counter-styles/devanagari/css3-counter-styles-119.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-024.html", + "/css/css-counter-styles/devanagari/css3-counter-styles-119.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-024a.html": [ + "css/css-counter-styles/devanagari/css3-counter-styles-120.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-024a.html", + "/css/css-counter-styles/devanagari/css3-counter-styles-120.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-025.html": [ + "css/css-counter-styles/devanagari/css3-counter-styles-121.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-025.html", + "/css/css-counter-styles/devanagari/css3-counter-styles-121.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-026.html": [ + "css/css-counter-styles/ethiopic-numeric/css3-counter-styles-068.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-026.html", + "/css/css-counter-styles/ethiopic-numeric/css3-counter-styles-068.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-027.html": [ + "css/css-counter-styles/ethiopic-numeric/css3-counter-styles-069.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-027.html", + "/css/css-counter-styles/ethiopic-numeric/css3-counter-styles-069.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-028.html": [ + "css/css-counter-styles/ethiopic-numeric/css3-counter-styles-070.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-028.html", + "/css/css-counter-styles/ethiopic-numeric/css3-counter-styles-070.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-029.html": [ + "css/css-counter-styles/georgian/css3-counter-styles-010.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-029.html", + "/css/css-counter-styles/georgian/css3-counter-styles-010.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-030.html": [ + "css/css-counter-styles/georgian/css3-counter-styles-011.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-030.html", + "/css/css-counter-styles/georgian/css3-counter-styles-011.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-031.html": [ + "css/css-counter-styles/georgian/css3-counter-styles-012.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-031.html", + "/css/css-counter-styles/georgian/css3-counter-styles-012.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-032.html": [ + "css/css-counter-styles/georgian/css3-counter-styles-014.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-032.html", + "/css/css-counter-styles/georgian/css3-counter-styles-014.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-033.html": [ + "css/css-counter-styles/gujarati/css3-counter-styles-122.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-033.html", + "/css/css-counter-styles/gujarati/css3-counter-styles-122.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-034.html": [ + "css/css-counter-styles/gujarati/css3-counter-styles-123.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-034.html", + "/css/css-counter-styles/gujarati/css3-counter-styles-123.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-035.html": [ + "css/css-counter-styles/gujarati/css3-counter-styles-124.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-035.html", + "/css/css-counter-styles/gujarati/css3-counter-styles-124.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-036.html": [ + "css/css-counter-styles/gurmukhi/css3-counter-styles-125.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-036.html", + "/css/css-counter-styles/gurmukhi/css3-counter-styles-125.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-037.html": [ + "css/css-counter-styles/gurmukhi/css3-counter-styles-126.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-037.html", + "/css/css-counter-styles/gurmukhi/css3-counter-styles-126.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-038.html": [ + "css/css-counter-styles/gurmukhi/css3-counter-styles-127.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-038.html", + "/css/css-counter-styles/gurmukhi/css3-counter-styles-127.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-039.html": [ + "css/css-counter-styles/hebrew/css3-counter-styles-015.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-039.html", + "/css/css-counter-styles/hebrew/css3-counter-styles-015.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-040.html": [ + "css/css-counter-styles/hebrew/css3-counter-styles-016.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-040.html", + "/css/css-counter-styles/hebrew/css3-counter-styles-016.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-041.html": [ + "css/css-counter-styles/hebrew/css3-counter-styles-016a.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-041.html", + "/css/css-counter-styles/hebrew/css3-counter-styles-016a.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-042.html": [ + "css/css-counter-styles/hebrew/css3-counter-styles-017.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-042.html", + "/css/css-counter-styles/hebrew/css3-counter-styles-017.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-043.html": [ + "css/css-counter-styles/hiragana-iroha/css3-counter-styles-033.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-043.html", + "/css/css-counter-styles/hiragana-iroha/css3-counter-styles-033.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-044.html": [ + "css/css-counter-styles/hiragana-iroha/css3-counter-styles-034.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-044.html", + "/css/css-counter-styles/hiragana-iroha/css3-counter-styles-034.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-045.html": [ + "css/css-counter-styles/hiragana-iroha/css3-counter-styles-035.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-045.html", + "/css/css-counter-styles/hiragana-iroha/css3-counter-styles-035.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-046.html": [ + "css/css-counter-styles/hiragana/css3-counter-styles-030.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-046.html", + "/css/css-counter-styles/hiragana/css3-counter-styles-030.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-047.html": [ + "css/css-counter-styles/hiragana/css3-counter-styles-031.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-047.html", + "/css/css-counter-styles/hiragana/css3-counter-styles-031.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-048.html": [ + "css/css-counter-styles/hiragana/css3-counter-styles-032.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-048.html", + "/css/css-counter-styles/hiragana/css3-counter-styles-032.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-049.html": [ + "css/css-counter-styles/japanese-formal/css3-counter-styles-047.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-049.html", + "/css/css-counter-styles/japanese-formal/css3-counter-styles-047.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-050.html": [ + "css/css-counter-styles/japanese-formal/css3-counter-styles-048.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-050.html", + "/css/css-counter-styles/japanese-formal/css3-counter-styles-048.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-051.html": [ + "css/css-counter-styles/japanese-formal/css3-counter-styles-049.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-051.html", + "/css/css-counter-styles/japanese-formal/css3-counter-styles-049.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-052.html": [ + "css/css-counter-styles/japanese-formal/css3-counter-styles-050.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-052.html", + "/css/css-counter-styles/japanese-formal/css3-counter-styles-050.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-053.html": [ + "css/css-counter-styles/japanese-formal/css3-counter-styles-051.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-053.html", + "/css/css-counter-styles/japanese-formal/css3-counter-styles-051.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-054.html": [ + "css/css-counter-styles/japanese-informal/css3-counter-styles-042.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-054.html", + "/css/css-counter-styles/japanese-informal/css3-counter-styles-042.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-055.html": [ + "css/css-counter-styles/japanese-informal/css3-counter-styles-043.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-055.html", + "/css/css-counter-styles/japanese-informal/css3-counter-styles-043.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-056.html": [ + "css/css-counter-styles/japanese-informal/css3-counter-styles-044.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-056.html", + "/css/css-counter-styles/japanese-informal/css3-counter-styles-044.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-057.html": [ + "css/css-counter-styles/japanese-informal/css3-counter-styles-045.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-057.html", + "/css/css-counter-styles/japanese-informal/css3-counter-styles-045.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-058.html": [ + "css/css-counter-styles/japanese-informal/css3-counter-styles-046.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-058.html", + "/css/css-counter-styles/japanese-informal/css3-counter-styles-046.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-059.html": [ + "css/css-counter-styles/kannada/css3-counter-styles-128.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-059.html", + "/css/css-counter-styles/kannada/css3-counter-styles-128.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-060.html": [ + "css/css-counter-styles/kannada/css3-counter-styles-129.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-060.html", + "/css/css-counter-styles/kannada/css3-counter-styles-129.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-061.html": [ + "css/css-counter-styles/kannada/css3-counter-styles-130.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-061.html", + "/css/css-counter-styles/kannada/css3-counter-styles-130.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-062.html": [ + "css/css-counter-styles/katakana-iroha/css3-counter-styles-039.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-062.html", + "/css/css-counter-styles/katakana-iroha/css3-counter-styles-039.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-063.html": [ + "css/css-counter-styles/katakana-iroha/css3-counter-styles-040.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-063.html", + "/css/css-counter-styles/katakana-iroha/css3-counter-styles-040.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-064.html": [ + "css/css-counter-styles/katakana-iroha/css3-counter-styles-041.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-064.html", + "/css/css-counter-styles/katakana-iroha/css3-counter-styles-041.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-065.html": [ + "css/css-counter-styles/katakana/css3-counter-styles-036.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-065.html", + "/css/css-counter-styles/katakana/css3-counter-styles-036.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-066.html": [ + "css/css-counter-styles/katakana/css3-counter-styles-037.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-066.html", + "/css/css-counter-styles/katakana/css3-counter-styles-037.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-068.html": [ + "css/css-counter-styles/katakana/css3-counter-styles-038.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-068.html", + "/css/css-counter-styles/katakana/css3-counter-styles-038.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-069.html": [ + "css/css-counter-styles/khmer/css3-counter-styles-161.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-069.html", + "/css/css-counter-styles/khmer/css3-counter-styles-161.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-070.html": [ + "css/css-counter-styles/khmer/css3-counter-styles-162.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-070.html", + "/css/css-counter-styles/khmer/css3-counter-styles-162.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-071.html": [ + "css/css-counter-styles/khmer/css3-counter-styles-163.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-071.html", + "/css/css-counter-styles/khmer/css3-counter-styles-163.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-072.html": [ + "css/css-counter-styles/korean-hangul-formal/css3-counter-styles-052.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-072.html", + "/css/css-counter-styles/korean-hangul-formal/css3-counter-styles-052.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-073.html": [ + "css/css-counter-styles/korean-hangul-formal/css3-counter-styles-053.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-073.html", + "/css/css-counter-styles/korean-hangul-formal/css3-counter-styles-053.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-074.html": [ + "css/css-counter-styles/korean-hangul-formal/css3-counter-styles-054.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-074.html", + "/css/css-counter-styles/korean-hangul-formal/css3-counter-styles-054.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-075.html": [ + "css/css-counter-styles/korean-hangul-formal/css3-counter-styles-055.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-075.html", + "/css/css-counter-styles/korean-hangul-formal/css3-counter-styles-055.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-076.html": [ + "css/css-counter-styles/korean-hangul-formal/css3-counter-styles-056.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-076.html", + "/css/css-counter-styles/korean-hangul-formal/css3-counter-styles-056.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-077.html": [ + "css/css-counter-styles/korean-hanja-formal/css3-counter-styles-062.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-077.html", + "/css/css-counter-styles/korean-hanja-formal/css3-counter-styles-062.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-078.html": [ + "css/css-counter-styles/korean-hanja-formal/css3-counter-styles-063.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-078.html", + "/css/css-counter-styles/korean-hanja-formal/css3-counter-styles-063.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-079.html": [ + "css/css-counter-styles/korean-hanja-formal/css3-counter-styles-064.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-079.html", + "/css/css-counter-styles/korean-hanja-formal/css3-counter-styles-064.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-080.html": [ + "css/css-counter-styles/korean-hanja-formal/css3-counter-styles-065.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-080.html", + "/css/css-counter-styles/korean-hanja-formal/css3-counter-styles-065.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-081.html": [ + "css/css-counter-styles/korean-hanja-formal/css3-counter-styles-066.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-081.html", + "/css/css-counter-styles/korean-hanja-formal/css3-counter-styles-066.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-082.html": [ + "css/css-counter-styles/korean-hanja-informal/css3-counter-styles-057.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-082.html", + "/css/css-counter-styles/korean-hanja-informal/css3-counter-styles-057.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-083.html": [ + "css/css-counter-styles/korean-hanja-informal/css3-counter-styles-058.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-083.html", + "/css/css-counter-styles/korean-hanja-informal/css3-counter-styles-058.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-084.html": [ + "css/css-counter-styles/korean-hanja-informal/css3-counter-styles-059.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-084.html", + "/css/css-counter-styles/korean-hanja-informal/css3-counter-styles-059.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-085.html": [ + "css/css-counter-styles/korean-hanja-informal/css3-counter-styles-060.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-085.html", + "/css/css-counter-styles/korean-hanja-informal/css3-counter-styles-060.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-086.html": [ + "css/css-counter-styles/korean-hanja-informal/css3-counter-styles-061.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-086.html", + "/css/css-counter-styles/korean-hanja-informal/css3-counter-styles-061.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-087.html": [ + "css/css-counter-styles/lao/css3-counter-styles-131.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-087.html", + "/css/css-counter-styles/lao/css3-counter-styles-131.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-088.html": [ + "css/css-counter-styles/lao/css3-counter-styles-132.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-088.html", + "/css/css-counter-styles/lao/css3-counter-styles-132.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-089.html": [ + "css/css-counter-styles/lao/css3-counter-styles-133.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-089.html", + "/css/css-counter-styles/lao/css3-counter-styles-133.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-090.html": [ + "css/css-counter-styles/lower-armenian/css3-counter-styles-111.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-090.html", + "/css/css-counter-styles/lower-armenian/css3-counter-styles-111.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-101.html": [ + "css/css-counter-styles/lower-armenian/css3-counter-styles-112.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-101.html", + "/css/css-counter-styles/lower-armenian/css3-counter-styles-112.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-102.html": [ + "css/css-counter-styles/lower-armenian/css3-counter-styles-114.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-102.html", + "/css/css-counter-styles/lower-armenian/css3-counter-styles-114.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-103.html": [ + "css/css-counter-styles/lower-armenian/css3-counter-styles-115.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-103.html", + "/css/css-counter-styles/lower-armenian/css3-counter-styles-115.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-104.html": [ + "css/css-counter-styles/lower-greek/css3-counter-styles-027.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-104.html", + "/css/css-counter-styles/lower-greek/css3-counter-styles-027.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-105.html": [ + "css/css-counter-styles/lower-greek/css3-counter-styles-028.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-105.html", + "/css/css-counter-styles/lower-greek/css3-counter-styles-028.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-106.html": [ + "css/css-counter-styles/lower-greek/css3-counter-styles-029.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-106.html", + "/css/css-counter-styles/lower-greek/css3-counter-styles-029.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-107.html": [ + "css/css-counter-styles/lower-roman/css3-counter-styles-019.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-107.html", + "/css/css-counter-styles/lower-roman/css3-counter-styles-019.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-108.html": [ + "css/css-counter-styles/lower-roman/css3-counter-styles-020.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-108.html", + "/css/css-counter-styles/lower-roman/css3-counter-styles-020.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-109.html": [ + "css/css-counter-styles/lower-roman/css3-counter-styles-020a.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-109.html", + "/css/css-counter-styles/lower-roman/css3-counter-styles-020a.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-110.html": [ + "css/css-counter-styles/lower-roman/css3-counter-styles-020b.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-110.html", + "/css/css-counter-styles/lower-roman/css3-counter-styles-020b.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-111.html": [ + "css/css-counter-styles/lower-roman/css3-counter-styles-021.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-111.html", + "/css/css-counter-styles/lower-roman/css3-counter-styles-021.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-112.html": [ + "css/css-counter-styles/lower-roman/css3-counter-styles-022.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-112.html", + "/css/css-counter-styles/lower-roman/css3-counter-styles-022.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-114.html": [ + "css/css-counter-styles/malayalam/css3-counter-styles-134.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-114.html", + "/css/css-counter-styles/malayalam/css3-counter-styles-134.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-115.html": [ + "css/css-counter-styles/malayalam/css3-counter-styles-135.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-115.html", + "/css/css-counter-styles/malayalam/css3-counter-styles-135.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-116.html": [ + "css/css-counter-styles/malayalam/css3-counter-styles-136.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-116.html", + "/css/css-counter-styles/malayalam/css3-counter-styles-136.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-117.html": [ + "css/css-counter-styles/mongolian/css3-counter-styles-137.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-117.html", + "/css/css-counter-styles/mongolian/css3-counter-styles-137.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-118.html": [ + "css/css-counter-styles/mongolian/css3-counter-styles-138.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-118.html", + "/css/css-counter-styles/mongolian/css3-counter-styles-138.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-119.html": [ + "css/css-counter-styles/mongolian/css3-counter-styles-139.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-119.html", + "/css/css-counter-styles/mongolian/css3-counter-styles-139.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-120.html": [ + "css/css-counter-styles/myanmar/css3-counter-styles-140.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-120.html", + "/css/css-counter-styles/myanmar/css3-counter-styles-140.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-121.html": [ + "css/css-counter-styles/myanmar/css3-counter-styles-141.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-121.html", + "/css/css-counter-styles/myanmar/css3-counter-styles-141.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-122.html": [ + "css/css-counter-styles/myanmar/css3-counter-styles-142.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-122.html", + "/css/css-counter-styles/myanmar/css3-counter-styles-142.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-123.html": [ + "css/css-counter-styles/oriya/css3-counter-styles-143.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-123.html", + "/css/css-counter-styles/oriya/css3-counter-styles-143.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-124.html": [ + "css/css-counter-styles/oriya/css3-counter-styles-144.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-124.html", + "/css/css-counter-styles/oriya/css3-counter-styles-144.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-125.html": [ + "css/css-counter-styles/oriya/css3-counter-styles-145.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-125.html", + "/css/css-counter-styles/oriya/css3-counter-styles-145.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-126.html": [ + "css/css-counter-styles/persian/css3-counter-styles-104.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-126.html", + "/css/css-counter-styles/persian/css3-counter-styles-104.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-127.html": [ + "css/css-counter-styles/persian/css3-counter-styles-105.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-127.html", + "/css/css-counter-styles/persian/css3-counter-styles-105.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-128.html": [ + "css/css-counter-styles/persian/css3-counter-styles-106.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-128.html", + "/css/css-counter-styles/persian/css3-counter-styles-106.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-129.html": [ + "css/css-counter-styles/simp-chinese-formal/css3-counter-styles-076.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-129.html", + "/css/css-counter-styles/simp-chinese-formal/css3-counter-styles-076.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-130.html": [ + "css/css-counter-styles/simp-chinese-formal/css3-counter-styles-077.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-130.html", + "/css/css-counter-styles/simp-chinese-formal/css3-counter-styles-077.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-131.html": [ + "css/css-counter-styles/simp-chinese-formal/css3-counter-styles-078.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-131.html", + "/css/css-counter-styles/simp-chinese-formal/css3-counter-styles-078.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-132.html": [ + "css/css-counter-styles/simp-chinese-formal/css3-counter-styles-079.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-132.html", + "/css/css-counter-styles/simp-chinese-formal/css3-counter-styles-079.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-133.html": [ + "css/css-counter-styles/simp-chinese-formal/css3-counter-styles-080.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-133.html", + "/css/css-counter-styles/simp-chinese-formal/css3-counter-styles-080.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-134.html": [ + "css/css-counter-styles/simp-chinese-informal/css3-counter-styles-071.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-134.html", + "/css/css-counter-styles/simp-chinese-informal/css3-counter-styles-071.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-135.html": [ + "css/css-counter-styles/simp-chinese-informal/css3-counter-styles-072.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-135.html", + "/css/css-counter-styles/simp-chinese-informal/css3-counter-styles-072.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-136.html": [ + "css/css-counter-styles/simp-chinese-informal/css3-counter-styles-073.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-136.html", + "/css/css-counter-styles/simp-chinese-informal/css3-counter-styles-073.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-137.html": [ + "css/css-counter-styles/simp-chinese-informal/css3-counter-styles-074.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-137.html", + "/css/css-counter-styles/simp-chinese-informal/css3-counter-styles-074.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-138.html": [ + "css/css-counter-styles/simp-chinese-informal/css3-counter-styles-075.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-138.html", + "/css/css-counter-styles/simp-chinese-informal/css3-counter-styles-075.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-139.html": [ + "css/css-counter-styles/tamil/css3-counter-styles-146.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-139.html", + "/css/css-counter-styles/tamil/css3-counter-styles-146.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-140.html": [ + "css/css-counter-styles/tamil/css3-counter-styles-147.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-140.html", + "/css/css-counter-styles/tamil/css3-counter-styles-147.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-141.html": [ + "css/css-counter-styles/tamil/css3-counter-styles-148.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-141.html", + "/css/css-counter-styles/tamil/css3-counter-styles-148.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-142.html": [ + "css/css-counter-styles/telugu/css3-counter-styles-149.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-142.html", + "/css/css-counter-styles/telugu/css3-counter-styles-149.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-143.html": [ + "css/css-counter-styles/telugu/css3-counter-styles-150.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-143.html", + "/css/css-counter-styles/telugu/css3-counter-styles-150.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-144.html": [ + "css/css-counter-styles/telugu/css3-counter-styles-151.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-144.html", + "/css/css-counter-styles/telugu/css3-counter-styles-151.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-145.html": [ + "css/css-counter-styles/thai/css3-counter-styles-152.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-145.html", + "/css/css-counter-styles/thai/css3-counter-styles-152.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-146.html": [ + "css/css-counter-styles/thai/css3-counter-styles-153.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-146.html", + "/css/css-counter-styles/thai/css3-counter-styles-153.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-147.html": [ + "css/css-counter-styles/thai/css3-counter-styles-154.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-147.html", + "/css/css-counter-styles/thai/css3-counter-styles-154.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-148.html": [ + "css/css-counter-styles/tibetan/css3-counter-styles-155.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-148.html", + "/css/css-counter-styles/tibetan/css3-counter-styles-155.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-149.html": [ + "css/css-counter-styles/tibetan/css3-counter-styles-156.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-149.html", + "/css/css-counter-styles/tibetan/css3-counter-styles-156.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-150.html": [ + "css/css-counter-styles/tibetan/css3-counter-styles-157.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-150.html", + "/css/css-counter-styles/tibetan/css3-counter-styles-157.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-151.html": [ + "css/css-counter-styles/trad-chinese-formal/css3-counter-styles-086.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-151.html", + "/css/css-counter-styles/trad-chinese-formal/css3-counter-styles-086.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-152.html": [ + "css/css-counter-styles/trad-chinese-formal/css3-counter-styles-087.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-152.html", + "/css/css-counter-styles/trad-chinese-formal/css3-counter-styles-087.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-153.html": [ + "css/css-counter-styles/trad-chinese-formal/css3-counter-styles-088.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-153.html", + "/css/css-counter-styles/trad-chinese-formal/css3-counter-styles-088.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-154.html": [ + "css/css-counter-styles/trad-chinese-formal/css3-counter-styles-089.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-154.html", + "/css/css-counter-styles/trad-chinese-formal/css3-counter-styles-089.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-155.html": [ + "css/css-counter-styles/trad-chinese-formal/css3-counter-styles-090.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-155.html", + "/css/css-counter-styles/trad-chinese-formal/css3-counter-styles-090.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-156.html": [ + "css/css-counter-styles/trad-chinese-informal/css3-counter-styles-081.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-156.html", + "/css/css-counter-styles/trad-chinese-informal/css3-counter-styles-081.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-157.html": [ + "css/css-counter-styles/trad-chinese-informal/css3-counter-styles-082.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-157.html", + "/css/css-counter-styles/trad-chinese-informal/css3-counter-styles-082.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-158.html": [ + "css/css-counter-styles/trad-chinese-informal/css3-counter-styles-083.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-158.html", + "/css/css-counter-styles/trad-chinese-informal/css3-counter-styles-083.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-159.html": [ + "css/css-counter-styles/trad-chinese-informal/css3-counter-styles-084.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-159.html", + "/css/css-counter-styles/trad-chinese-informal/css3-counter-styles-084.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-160.html": [ + "css/css-counter-styles/trad-chinese-informal/css3-counter-styles-085.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-160.html", + "/css/css-counter-styles/trad-chinese-informal/css3-counter-styles-085.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-161.html": [ + "css/css-counter-styles/upper-armenian/css3-counter-styles-107.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-161.html", + "/css/css-counter-styles/upper-armenian/css3-counter-styles-107.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-162.html": [ + "css/css-counter-styles/upper-armenian/css3-counter-styles-108.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-162.html", + "/css/css-counter-styles/upper-armenian/css3-counter-styles-108.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-163.html": [ + "css/css-counter-styles/upper-armenian/css3-counter-styles-109.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-163.html", + "/css/css-counter-styles/upper-armenian/css3-counter-styles-109.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-201.html": [ + "css/css-counter-styles/upper-armenian/css3-counter-styles-110.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-201.html", + "/css/css-counter-styles/upper-armenian/css3-counter-styles-110.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-202.html": [ + "css/css-counter-styles/upper-roman/css3-counter-styles-023.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-202.html", + "/css/css-counter-styles/upper-roman/css3-counter-styles-023.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-203.html": [ + "css/css-counter-styles/upper-roman/css3-counter-styles-024.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-203.html", + "/css/css-counter-styles/upper-roman/css3-counter-styles-024.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-204.html": [ + "css/css-counter-styles/upper-roman/css3-counter-styles-024a.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-204.html", + "/css/css-counter-styles/upper-roman/css3-counter-styles-024a.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-205.html": [ + "css/css-counter-styles/upper-roman/css3-counter-styles-025.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-205.html", + "/css/css-counter-styles/upper-roman/css3-counter-styles-025.html", {} ] ], - "css/css-counter-styles/i18n/css3-counter-styles-206.html": [ + "css/css-counter-styles/upper-roman/css3-counter-styles-026.html": [ [ - "/css/css-counter-styles/i18n/css3-counter-styles-206.html", + "/css/css-counter-styles/upper-roman/css3-counter-styles-026.html", {} ] ], @@ -17725,12 +17725,6 @@ {} ] ], - "uievents/order-of-events/mouse-events/click-cancel-manual.html": [ - [ - "/uievents/order-of-events/mouse-events/click-cancel-manual.html", - {} - ] - ], "uievents/order-of-events/mouse-events/click-on-body-manual.html": [ [ "/uievents/order-of-events/mouse-events/click-on-body-manual.html", @@ -19404,12 +19398,6 @@ "/webstorage/storage_session-manual.html", {} ] - ], - "webusb/usb-manual.https.html": [ - [ - "/webusb/usb-manual.https.html", - {} - ] ] }, "reftest": { @@ -94965,6 +94953,42 @@ {} ] ], + "css/CSS2/visufx/overflow-propagation-001a.html": [ + [ + "/css/CSS2/visufx/overflow-propagation-001a.html", + [ + [ + "/css/CSS2/visufx/support/overflow-propagation-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/visufx/overflow-propagation-001b.html": [ + [ + "/css/CSS2/visufx/overflow-propagation-001b.html", + [ + [ + "/css/CSS2/visufx/support/overflow-propagation-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/CSS2/visufx/overflow-propagation-001c.html": [ + [ + "/css/CSS2/visufx/overflow-propagation-001c.html", + [ + [ + "/css/CSS2/visufx/support/overflow-propagation-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/CSS2/visufx/visibility-005.xht": [ [ "/css/CSS2/visufx/visibility-005.xht", @@ -110949,6 +110973,126 @@ {} ] ], + "css/css-grid/alignment/grid-gutters-001.html": [ + [ + "/css/css-grid/alignment/grid-gutters-001.html", + [ + [ + "/css/css-grid/reference/grid-equal-gutters-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/alignment/grid-gutters-002.html": [ + [ + "/css/css-grid/alignment/grid-gutters-002.html", + [ + [ + "/css/css-grid/reference/grid-equal-gutters-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/alignment/grid-gutters-003.html": [ + [ + "/css/css-grid/alignment/grid-gutters-003.html", + [ + [ + "/css/css-grid/reference/grid-different-gutters-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/alignment/grid-gutters-004.html": [ + [ + "/css/css-grid/alignment/grid-gutters-004.html", + [ + [ + "/css/css-grid/reference/grid-different-gutters-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/alignment/grid-gutters-005.html": [ + [ + "/css/css-grid/alignment/grid-gutters-005.html", + [ + [ + "/css/css-grid/reference/grid-different-gutters-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/alignment/grid-gutters-006.html": [ + [ + "/css/css-grid/alignment/grid-gutters-006.html", + [ + [ + "/css/css-grid/reference/grid-different-gutters-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/alignment/grid-gutters-007.html": [ + [ + "/css/css-grid/alignment/grid-gutters-007.html", + [ + [ + "/css/css-grid/reference/grid-equal-gutters-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/alignment/grid-gutters-008.html": [ + [ + "/css/css-grid/alignment/grid-gutters-008.html", + [ + [ + "/css/css-grid/reference/grid-equal-gutters-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/alignment/grid-gutters-009.html": [ + [ + "/css/css-grid/alignment/grid-gutters-009.html", + [ + [ + "/css/css-grid/reference/grid-collapsed-row-gutters-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/alignment/grid-gutters-010.html": [ + [ + "/css/css-grid/alignment/grid-gutters-010.html", + [ + [ + "/css/css-grid/reference/grid-collapsed-row-gutters-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-001.html": [ [ "/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-001.html", @@ -116505,9 +116649,9 @@ {} ] ], - "css/css-paint-api/background-image-alpha.html": [ + "css/css-paint-api/background-image-alpha.https.html": [ [ - "/css/css-paint-api/background-image-alpha.html", + "/css/css-paint-api/background-image-alpha.https.html", [ [ "/css/css-paint-api/background-image-alpha-ref.html", @@ -116517,9 +116661,9 @@ {} ] ], - "css/css-paint-api/background-image-multiple.html": [ + "css/css-paint-api/background-image-multiple.https.html": [ [ - "/css/css-paint-api/background-image-multiple.html", + "/css/css-paint-api/background-image-multiple.https.html", [ [ "/css/css-paint-api/background-image-multiple-ref.html", @@ -116529,9 +116673,9 @@ {} ] ], - "css/css-paint-api/background-image-tiled.html": [ + "css/css-paint-api/background-image-tiled.https.html": [ [ - "/css/css-paint-api/background-image-tiled.html", + "/css/css-paint-api/background-image-tiled.https.html", [ [ "/css/css-paint-api/background-image-tiled-ref.html", @@ -116541,9 +116685,9 @@ {} ] ], - "css/css-paint-api/geometry-background-image-001.html": [ + "css/css-paint-api/geometry-background-image-001.https.html": [ [ - "/css/css-paint-api/geometry-background-image-001.html", + "/css/css-paint-api/geometry-background-image-001.https.html", [ [ "/css/css-paint-api/geometry-background-image-001-ref.html", @@ -116553,9 +116697,9 @@ {} ] ], - "css/css-paint-api/geometry-background-image-002.html": [ + "css/css-paint-api/geometry-background-image-002.https.html": [ [ - "/css/css-paint-api/geometry-background-image-002.html", + "/css/css-paint-api/geometry-background-image-002.https.html", [ [ "/css/css-paint-api/geometry-background-image-002-ref.html", @@ -116565,9 +116709,9 @@ {} ] ], - "css/css-paint-api/geometry-background-image-tiled-001.html": [ + "css/css-paint-api/geometry-background-image-tiled-001.https.html": [ [ - "/css/css-paint-api/geometry-background-image-tiled-001.html", + "/css/css-paint-api/geometry-background-image-tiled-001.https.html", [ [ "/css/css-paint-api/geometry-background-image-tiled-001-ref.html", @@ -116577,9 +116721,9 @@ {} ] ], - "css/css-paint-api/geometry-background-image-tiled-002.html": [ + "css/css-paint-api/geometry-background-image-tiled-002.https.html": [ [ - "/css/css-paint-api/geometry-background-image-tiled-002.html", + "/css/css-paint-api/geometry-background-image-tiled-002.https.html", [ [ "/css/css-paint-api/geometry-background-image-tiled-002-ref.html", @@ -116589,9 +116733,9 @@ {} ] ], - "css/css-paint-api/geometry-background-image-tiled-003.html": [ + "css/css-paint-api/geometry-background-image-tiled-003.https.html": [ [ - "/css/css-paint-api/geometry-background-image-tiled-003.html", + "/css/css-paint-api/geometry-background-image-tiled-003.https.html", [ [ "/css/css-paint-api/geometry-background-image-tiled-003-ref.html", @@ -116601,9 +116745,9 @@ {} ] ], - "css/css-paint-api/geometry-border-image-001.html": [ + "css/css-paint-api/geometry-border-image-001.https.html": [ [ - "/css/css-paint-api/geometry-border-image-001.html", + "/css/css-paint-api/geometry-border-image-001.https.html", [ [ "/css/css-paint-api/geometry-border-image-001-ref.html", @@ -116613,9 +116757,9 @@ {} ] ], - "css/css-paint-api/geometry-border-image-002.html": [ + "css/css-paint-api/geometry-border-image-002.https.html": [ [ - "/css/css-paint-api/geometry-border-image-002.html", + "/css/css-paint-api/geometry-border-image-002.https.html", [ [ "/css/css-paint-api/geometry-border-image-002-ref.html", @@ -116625,9 +116769,9 @@ {} ] ], - "css/css-paint-api/geometry-border-image-003.html": [ + "css/css-paint-api/geometry-border-image-003.https.html": [ [ - "/css/css-paint-api/geometry-border-image-003.html", + "/css/css-paint-api/geometry-border-image-003.https.html", [ [ "/css/css-paint-api/geometry-border-image-003-ref.html", @@ -116637,9 +116781,9 @@ {} ] ], - "css/css-paint-api/geometry-border-image-004.html": [ + "css/css-paint-api/geometry-border-image-004.https.html": [ [ - "/css/css-paint-api/geometry-border-image-004.html", + "/css/css-paint-api/geometry-border-image-004.https.html", [ [ "/css/css-paint-api/geometry-border-image-004-ref.html", @@ -116649,9 +116793,9 @@ {} ] ], - "css/css-paint-api/hidpi/device-pixel-ratio.html": [ + "css/css-paint-api/hidpi/device-pixel-ratio.https.html": [ [ - "/css/css-paint-api/hidpi/device-pixel-ratio.html", + "/css/css-paint-api/hidpi/device-pixel-ratio.https.html", [ [ "/css/css-paint-api/hidpi/device-pixel-ratio-ref.html", @@ -116661,9 +116805,9 @@ {} ] ], - "css/css-paint-api/invalid-image-constructor-error.html": [ + "css/css-paint-api/invalid-image-constructor-error.https.html": [ [ - "/css/css-paint-api/invalid-image-constructor-error.html", + "/css/css-paint-api/invalid-image-constructor-error.https.html", [ [ "/css/css-paint-api/invalid-image-constructor-error-ref.html", @@ -116673,9 +116817,9 @@ {} ] ], - "css/css-paint-api/invalid-image-paint-error.html": [ + "css/css-paint-api/invalid-image-paint-error.https.html": [ [ - "/css/css-paint-api/invalid-image-paint-error.html", + "/css/css-paint-api/invalid-image-paint-error.https.html", [ [ "/css/css-paint-api/invalid-image-paint-error-ref.html", @@ -116685,9 +116829,9 @@ {} ] ], - "css/css-paint-api/invalid-image-pending-script.html": [ + "css/css-paint-api/invalid-image-pending-script.https.html": [ [ - "/css/css-paint-api/invalid-image-pending-script.html", + "/css/css-paint-api/invalid-image-pending-script.https.html", [ [ "/css/css-paint-api/invalid-image-pending-script-ref.html", @@ -116697,9 +116841,9 @@ {} ] ], - "css/css-paint-api/overdraw.html": [ + "css/css-paint-api/overdraw.https.html": [ [ - "/css/css-paint-api/overdraw.html", + "/css/css-paint-api/overdraw.https.html", [ [ "/css/css-paint-api/overdraw-ref.html", @@ -116709,9 +116853,9 @@ {} ] ], - "css/css-paint-api/paint-arguments.html": [ + "css/css-paint-api/paint-arguments.https.html": [ [ - "/css/css-paint-api/paint-arguments.html", + "/css/css-paint-api/paint-arguments.https.html", [ [ "/css/css-paint-api/paint-arguments-ref.html", @@ -116721,9 +116865,9 @@ {} ] ], - "css/css-paint-api/paint-function-arguments.html": [ + "css/css-paint-api/paint-function-arguments.https.html": [ [ - "/css/css-paint-api/paint-function-arguments.html", + "/css/css-paint-api/paint-function-arguments.https.html", [ [ "/css/css-paint-api/paint-function-arguments-ref.html", @@ -116733,9 +116877,9 @@ {} ] ], - "css/css-paint-api/paint2d-composite.html": [ + "css/css-paint-api/paint2d-composite.https.html": [ [ - "/css/css-paint-api/paint2d-composite.html", + "/css/css-paint-api/paint2d-composite.https.html", [ [ "/css/css-paint-api/paint2d-composite-ref.html", @@ -116745,9 +116889,9 @@ {} ] ], - "css/css-paint-api/paint2d-filter.html": [ + "css/css-paint-api/paint2d-filter.https.html": [ [ - "/css/css-paint-api/paint2d-filter.html", + "/css/css-paint-api/paint2d-filter.https.html", [ [ "/css/css-paint-api/paint2d-filter-ref.html", @@ -116757,9 +116901,9 @@ {} ] ], - "css/css-paint-api/paint2d-gradient.html": [ + "css/css-paint-api/paint2d-gradient.https.html": [ [ - "/css/css-paint-api/paint2d-gradient.html", + "/css/css-paint-api/paint2d-gradient.https.html", [ [ "/css/css-paint-api/paint2d-gradient-ref.html", @@ -116769,9 +116913,9 @@ {} ] ], - "css/css-paint-api/paint2d-image.html": [ + "css/css-paint-api/paint2d-image.https.html": [ [ - "/css/css-paint-api/paint2d-image.html", + "/css/css-paint-api/paint2d-image.https.html", [ [ "/css/css-paint-api/paint2d-image-ref.html", @@ -116781,9 +116925,9 @@ {} ] ], - "css/css-paint-api/paint2d-paths.html": [ + "css/css-paint-api/paint2d-paths.https.html": [ [ - "/css/css-paint-api/paint2d-paths.html", + "/css/css-paint-api/paint2d-paths.https.html", [ [ "/css/css-paint-api/paint2d-paths-ref.html", @@ -116793,9 +116937,9 @@ {} ] ], - "css/css-paint-api/paint2d-rects.html": [ + "css/css-paint-api/paint2d-rects.https.html": [ [ - "/css/css-paint-api/paint2d-rects.html", + "/css/css-paint-api/paint2d-rects.https.html", [ [ "/css/css-paint-api/paint2d-rects-ref.html", @@ -116805,9 +116949,9 @@ {} ] ], - "css/css-paint-api/paint2d-shadows.html": [ + "css/css-paint-api/paint2d-shadows.https.html": [ [ - "/css/css-paint-api/paint2d-shadows.html", + "/css/css-paint-api/paint2d-shadows.https.html", [ [ "/css/css-paint-api/paint2d-shadows-ref.html", @@ -116817,9 +116961,9 @@ {} ] ], - "css/css-paint-api/paint2d-transform.html": [ + "css/css-paint-api/paint2d-transform.https.html": [ [ - "/css/css-paint-api/paint2d-transform.html", + "/css/css-paint-api/paint2d-transform.https.html", [ [ "/css/css-paint-api/paint2d-transform-ref.html", @@ -116829,9 +116973,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-001.html": [ + "css/css-paint-api/parse-input-arguments-001.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-001.html", + "/css/css-paint-api/parse-input-arguments-001.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116841,9 +116985,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-002.html": [ + "css/css-paint-api/parse-input-arguments-002.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-002.html", + "/css/css-paint-api/parse-input-arguments-002.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116853,9 +116997,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-003.html": [ + "css/css-paint-api/parse-input-arguments-003.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-003.html", + "/css/css-paint-api/parse-input-arguments-003.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116865,9 +117009,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-004.html": [ + "css/css-paint-api/parse-input-arguments-004.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-004.html", + "/css/css-paint-api/parse-input-arguments-004.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116877,9 +117021,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-005.html": [ + "css/css-paint-api/parse-input-arguments-005.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-005.html", + "/css/css-paint-api/parse-input-arguments-005.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116889,9 +117033,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-006.html": [ + "css/css-paint-api/parse-input-arguments-006.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-006.html", + "/css/css-paint-api/parse-input-arguments-006.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116901,9 +117045,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-007.html": [ + "css/css-paint-api/parse-input-arguments-007.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-007.html", + "/css/css-paint-api/parse-input-arguments-007.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116913,9 +117057,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-008.html": [ + "css/css-paint-api/parse-input-arguments-008.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-008.html", + "/css/css-paint-api/parse-input-arguments-008.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116925,9 +117069,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-009.html": [ + "css/css-paint-api/parse-input-arguments-009.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-009.html", + "/css/css-paint-api/parse-input-arguments-009.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116937,9 +117081,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-010.html": [ + "css/css-paint-api/parse-input-arguments-010.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-010.html", + "/css/css-paint-api/parse-input-arguments-010.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116949,9 +117093,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-011.html": [ + "css/css-paint-api/parse-input-arguments-011.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-011.html", + "/css/css-paint-api/parse-input-arguments-011.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116961,9 +117105,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-012.html": [ + "css/css-paint-api/parse-input-arguments-012.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-012.html", + "/css/css-paint-api/parse-input-arguments-012.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116973,9 +117117,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-013.html": [ + "css/css-paint-api/parse-input-arguments-013.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-013.html", + "/css/css-paint-api/parse-input-arguments-013.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116985,9 +117129,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-014.html": [ + "css/css-paint-api/parse-input-arguments-014.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-014.html", + "/css/css-paint-api/parse-input-arguments-014.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -116997,9 +117141,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-015.html": [ + "css/css-paint-api/parse-input-arguments-015.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-015.html", + "/css/css-paint-api/parse-input-arguments-015.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -117009,9 +117153,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-016.html": [ + "css/css-paint-api/parse-input-arguments-016.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-016.html", + "/css/css-paint-api/parse-input-arguments-016.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -117021,9 +117165,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-017.html": [ + "css/css-paint-api/parse-input-arguments-017.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-017.html", + "/css/css-paint-api/parse-input-arguments-017.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -117033,9 +117177,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-018.html": [ + "css/css-paint-api/parse-input-arguments-018.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-018.html", + "/css/css-paint-api/parse-input-arguments-018.https.html", [ [ "/css/css-paint-api/parse-input-arguments-018-ref.html", @@ -117045,9 +117189,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-019.html": [ + "css/css-paint-api/parse-input-arguments-019.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-019.html", + "/css/css-paint-api/parse-input-arguments-019.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -117057,9 +117201,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-020.html": [ + "css/css-paint-api/parse-input-arguments-020.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-020.html", + "/css/css-paint-api/parse-input-arguments-020.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -117069,9 +117213,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-021.html": [ + "css/css-paint-api/parse-input-arguments-021.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-021.html", + "/css/css-paint-api/parse-input-arguments-021.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -117081,9 +117225,9 @@ {} ] ], - "css/css-paint-api/parse-input-arguments-022.html": [ + "css/css-paint-api/parse-input-arguments-022.https.html": [ [ - "/css/css-paint-api/parse-input-arguments-022.html", + "/css/css-paint-api/parse-input-arguments-022.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -117093,9 +117237,9 @@ {} ] ], - "css/css-paint-api/registered-properties-in-custom-paint.html": [ + "css/css-paint-api/registered-properties-in-custom-paint.https.html": [ [ - "/css/css-paint-api/registered-properties-in-custom-paint.html", + "/css/css-paint-api/registered-properties-in-custom-paint.https.html", [ [ "/css/css-paint-api/parse-input-arguments-ref.html", @@ -117105,9 +117249,9 @@ {} ] ], - "css/css-paint-api/style-background-image.html": [ + "css/css-paint-api/style-background-image.https.html": [ [ - "/css/css-paint-api/style-background-image.html", + "/css/css-paint-api/style-background-image.https.html", [ [ "/css/css-paint-api/style-background-image-ref.html", @@ -117117,9 +117261,9 @@ {} ] ], - "css/css-paint-api/style-before-pseudo.html": [ + "css/css-paint-api/style-before-pseudo.https.html": [ [ - "/css/css-paint-api/style-before-pseudo.html", + "/css/css-paint-api/style-before-pseudo.https.html", [ [ "/css/css-paint-api/style-before-pseudo-ref.html", @@ -117129,9 +117273,9 @@ {} ] ], - "css/css-paint-api/style-first-letter-pseudo.html": [ + "css/css-paint-api/style-first-letter-pseudo.https.html": [ [ - "/css/css-paint-api/style-first-letter-pseudo.html", + "/css/css-paint-api/style-first-letter-pseudo.https.html", [ [ "/css/css-paint-api/style-first-letter-pseudo-ref.html", @@ -117141,9 +117285,9 @@ {} ] ], - "css/css-paint-api/valid-image-after-load.html": [ + "css/css-paint-api/valid-image-after-load.https.html": [ [ - "/css/css-paint-api/valid-image-after-load.html", + "/css/css-paint-api/valid-image-after-load.https.html", [ [ "/css/css-paint-api/valid-image-after-load-ref.html", @@ -117153,9 +117297,9 @@ {} ] ], - "css/css-paint-api/valid-image-before-load.html": [ + "css/css-paint-api/valid-image-before-load.https.html": [ [ - "/css/css-paint-api/valid-image-before-load.html", + "/css/css-paint-api/valid-image-before-load.https.html", [ [ "/css/css-paint-api/valid-image-before-load-ref.html", @@ -117165,6 +117309,222 @@ {} ] ], + "css/css-position/position-relative-table-tbody-left-absolute-child.html": [ + [ + "/css/css-position/position-relative-table-tbody-left-absolute-child.html", + [ + [ + "/css/css-position/position-relative-table-left-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-tbody-left.html": [ + [ + "/css/css-position/position-relative-table-tbody-left.html", + [ + [ + "/css/css-position/position-relative-table-left-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-tbody-top-absolute-child.html": [ + [ + "/css/css-position/position-relative-table-tbody-top-absolute-child.html", + [ + [ + "/css/css-position/position-relative-table-top-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-tbody-top.html": [ + [ + "/css/css-position/position-relative-table-tbody-top.html", + [ + [ + "/css/css-position/position-relative-table-top-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-td-left.html": [ + [ + "/css/css-position/position-relative-table-td-left.html", + [ + [ + "/css/css-position/position-relative-table-left-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-td-top.html": [ + [ + "/css/css-position/position-relative-table-td-top.html", + [ + [ + "/css/css-position/position-relative-table-top-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-tfoot-left-absolute-child.html": [ + [ + "/css/css-position/position-relative-table-tfoot-left-absolute-child.html", + [ + [ + "/css/css-position/position-relative-table-left-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-tfoot-left.html": [ + [ + "/css/css-position/position-relative-table-tfoot-left.html", + [ + [ + "/css/css-position/position-relative-table-left-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-tfoot-top-absolute-child.html": [ + [ + "/css/css-position/position-relative-table-tfoot-top-absolute-child.html", + [ + [ + "/css/css-position/position-relative-table-tfoot-top-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-tfoot-top.html": [ + [ + "/css/css-position/position-relative-table-tfoot-top.html", + [ + [ + "/css/css-position/position-relative-table-tfoot-top-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-thead-left-absolute-child.html": [ + [ + "/css/css-position/position-relative-table-thead-left-absolute-child.html", + [ + [ + "/css/css-position/position-relative-table-left-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-thead-left.html": [ + [ + "/css/css-position/position-relative-table-thead-left.html", + [ + [ + "/css/css-position/position-relative-table-left-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-thead-top-absolute-child.html": [ + [ + "/css/css-position/position-relative-table-thead-top-absolute-child.html", + [ + [ + "/css/css-position/position-relative-table-top-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-thead-top.html": [ + [ + "/css/css-position/position-relative-table-thead-top.html", + [ + [ + "/css/css-position/position-relative-table-top-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-tr-left-absolute-child.html": [ + [ + "/css/css-position/position-relative-table-tr-left-absolute-child.html", + [ + [ + "/css/css-position/position-relative-table-left-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-tr-left.html": [ + [ + "/css/css-position/position-relative-table-tr-left.html", + [ + [ + "/css/css-position/position-relative-table-left-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-tr-top-absolute-child.html": [ + [ + "/css/css-position/position-relative-table-tr-top-absolute-child.html", + [ + [ + "/css/css-position/position-relative-table-top-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-position/position-relative-table-tr-top.html": [ + [ + "/css/css-position/position-relative-table-tr-top.html", + [ + [ + "/css/css-position/position-relative-table-top-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-position/position-sticky-bottom.html": [ [ "/css/css-position/position-sticky-bottom.html", @@ -153053,6 +153413,30 @@ {} ] ], + "css/css-writing-modes/table-cell-001.html": [ + [ + "/css/css-writing-modes/table-cell-001.html", + [ + [ + "/css/css-writing-modes/reference/table-cell-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-writing-modes/table-cell-002.html": [ + [ + "/css/css-writing-modes/table-cell-002.html", + [ + [ + "/css/css-writing-modes/reference/table-cell-002-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-writing-modes/table-column-order-002.xht": [ [ "/css/css-writing-modes/table-column-order-002.xht", @@ -156949,6 +157333,18 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001.html": [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001.html", + [ + [ + "/css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/color4/background-color-hsl-001.html": [ [ "/css/vendor-imports/mozilla/mozilla-central-reftests/color4/background-color-hsl-001.html", @@ -171901,6 +172297,294 @@ {} ] ], + "html/rendering/non-replaced-elements/the-page/body-margin-1a.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1a.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1b.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1b.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1c.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1c.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1d.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1d.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1e.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1e.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1f.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1f.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1g.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1g.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1h.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1h.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1i.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1i.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1j.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1j.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1k.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1k.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1l.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1l.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2a.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2a.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2b.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2b.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2c.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2c.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2d.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2d.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2e.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2e.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2f.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2f.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2g.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2g.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2h.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2h.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2i.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2i.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2j.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2j.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2k.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2k.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html", + "==" + ] + ], + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2l.html": [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2l.html", + [ + [ + "/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html", + "==" + ] + ], + {} + ] + ], "html/rendering/non-replaced-elements/the-page/body_text_00ffff.xhtml": [ [ "/html/rendering/non-replaced-elements/the-page/body_text_00ffff.xhtml", @@ -173617,6 +174301,30 @@ {} ] ], + "svg/linking/reftests/use-descendant-combinator-001.html": [ + [ + "/svg/linking/reftests/use-descendant-combinator-001.html", + [ + [ + "/svg/linking/reftests/use-descendant-combinator-ref.html", + "==" + ] + ], + {} + ] + ], + "svg/linking/reftests/use-descendant-combinator-002.html": [ + [ + "/svg/linking/reftests/use-descendant-combinator-002.html", + [ + [ + "/svg/linking/reftests/use-descendant-combinator-ref.html", + "==" + ] + ], + {} + ] + ], "svg/shapes/rect-01.svg": [ [ "/svg/shapes/rect-01.svg", @@ -205899,6 +206607,21 @@ {} ] ], + "cookie-store/resources/cookie-store-tests.js": [ + [ + {} + ] + ], + "cookie-store/resources/cookie_helper.py": [ + [ + {} + ] + ], + "cookie-store/resources/testharness-helpers.js": [ + [ + {} + ] + ], "cookies/path/echo-cookie.html": [ [ {} @@ -223579,11 +224302,21 @@ {} ] ], + "css/CSS2/visufx/support/1x1-green.png": [ + [ + {} + ] + ], "css/CSS2/visufx/support/60x60-gg-rr.png": [ [ {} ] ], + "css/CSS2/visufx/support/overflow-propagation-001-ref.html": [ + [ + {} + ] + ], "css/CSS2/visuren/anonymous-boxes-001a-ref.xht": [ [ {} @@ -228839,12 +229572,7 @@ {} ] ], - "css/css-counter-styles/i18n/OWNERS": [ - [ - {} - ] - ], - "css/css-counter-styles/i18n/README": [ + "css/css-counter-styles/README": [ [ {} ] @@ -238679,6 +239407,21 @@ {} ] ], + "css/css-grid/reference/grid-collapsed-row-gutters-ref.html": [ + [ + {} + ] + ], + "css/css-grid/reference/grid-different-gutters-ref.html": [ + [ + {} + ] + ], + "css/css-grid/reference/grid-equal-gutters-ref.html": [ + [ + {} + ] + ], "css/css-grid/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html": [ [ {} @@ -240429,6 +241172,21 @@ {} ] ], + "css/css-position/position-relative-table-left-ref.html": [ + [ + {} + ] + ], + "css/css-position/position-relative-table-tfoot-top-ref.html": [ + [ + {} + ] + ], + "css/css-position/position-relative-table-top-ref.html": [ + [ + {} + ] + ], "css/css-position/position-sticky-bottom-ref.html": [ [ {} @@ -250439,6 +251197,16 @@ {} ] ], + "css/css-writing-modes/reference/table-cell-001-ref.html": [ + [ + {} + ] + ], + "css/css-writing-modes/reference/table-cell-002-ref.html": [ + [ + {} + ] + ], "css/css-writing-modes/reference/text-combine-upright-decorations-001.html": [ [ {} @@ -253459,6 +254227,26 @@ {} ] ], + "css/selectors/attribute-selectors/attribute-case/resources/semantics-quirks.html": [ + [ + {} + ] + ], + "css/selectors/attribute-selectors/attribute-case/resources/semantics-xml.xhtml": [ + [ + {} + ] + ], + "css/selectors/attribute-selectors/attribute-case/resources/syntax-quirks.html": [ + [ + {} + ] + ], + "css/selectors/attribute-selectors/attribute-case/resources/syntax-xml.xhtml": [ + [ + {} + ] + ], "css/selectors/css3-modsel-1.xml": [ [ {} @@ -256234,6 +257022,16 @@ {} ] ], + "css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001-ref.html": [ + [ + {} + ] + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/break3/reftest.list": [ + [ + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/check-for-references.sh": [ [ {} @@ -259679,6 +260477,11 @@ {} ] ], + "docs/_writing-tests/testdriver.md": [ + [ + {} + ] + ], "docs/_writing-tests/testharness-api.md": [ [ {} @@ -260589,6 +261392,206 @@ {} ] ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-decoder.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encoder.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_chars-cseucpkdfmtjapanese.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_chars-cseucpkdfmtjapanese.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_chars-x-euc-jp.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_chars-x-euc-jp.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_chars.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_chars.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_errors.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_errors.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/jis0208_index.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/euc-jp/jis0212_index.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decoder.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encoder.js": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars-csiso2022jp.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars-csiso2022jp.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_errors.html": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_errors.html.headers": [ + [ + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/jis0208_index.js": [ + [ + {} + ] + ], "encoding/legacy-mb-japanese/shift_jis/jis0208_index.js": [ [ {} @@ -261729,6 +262732,11 @@ {} ] ], + "feature-policy/resources/feature-policy-wakelock.html": [ + [ + {} + ] + ], "feature-policy/resources/feature-policy-webvr.html": [ [ {} @@ -262544,6 +263552,11 @@ {} ] ], + "geolocation-sensor/OWNERS": [ + [ + {} + ] + ], "gyroscope/OWNERS": [ [ {} @@ -263604,6 +264617,26 @@ {} ] ], + "html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-1.tentative.html": [ + [ + {} + ] + ], + "html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-2.tentative.html": [ + [ + {} + ] + ], + "html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-dynamic-iframe.tentative.html": [ + [ + {} + ] + ], + "html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-iframe.tentative.html": [ + [ + {} + ] + ], "html/browsers/offline/.gitkeep": [ [ {} @@ -270439,6 +271472,16 @@ {} ] ], + "html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html": [ + [ + {} + ] + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html": [ + [ + {} + ] + ], "html/rendering/non-replaced-elements/the-page/body_link.xhtml": [ [ {} @@ -274269,6 +275312,11 @@ {} ] ], + "interfaces/geolocation-sensor.idl": [ + [ + {} + ] + ], "interfaces/geometry.idl": [ [ {} @@ -275874,6 +276922,16 @@ {} ] ], + "paint-timing/resources/subframe-painting.html": [ + [ + {} + ] + ], + "paint-timing/resources/subframe-sending-paint.html": [ + [ + {} + ] + ], "payment-handler/OWNERS": [ [ {} @@ -275909,11 +276967,6 @@ {} ] ], - "payment-request/payment-request-response-id.html": [ - [ - {} - ] - ], "payment-request/payment-response/helpers.js": [ [ {} @@ -276094,6 +277147,16 @@ {} ] ], + "preload/resources/module1.js": [ + [ + {} + ] + ], + "preload/resources/module2.js": [ + [ + {} + ] + ], "preload/resources/preload_helper.js": [ [ {} @@ -276119,6 +277182,11 @@ {} ] ], + "preload/resources/syntax-error.js": [ + [ + {} + ] + ], "preload/resources/white.mp4": [ [ {} @@ -279004,6 +280072,11 @@ {} ] ], + "resource-timing/resources/notify_parent.html": [ + [ + {} + ] + ], "resource-timing/resources/resource_timing_test0.css": [ [ {} @@ -279029,6 +280102,11 @@ {} ] ], + "resource-timing/resources/self_navigation.html": [ + [ + {} + ] + ], "resource-timing/resources/webperftestharness.js": [ [ {} @@ -279144,26 +280222,6 @@ {} ] ], - "selectors/attribute-selectors/attribute-case/resources/semantics-quirks.html": [ - [ - {} - ] - ], - "selectors/attribute-selectors/attribute-case/resources/semantics-xml.xhtml": [ - [ - {} - ] - ], - "selectors/attribute-selectors/attribute-case/resources/syntax-quirks.html": [ - [ - {} - ] - ], - "selectors/attribute-selectors/attribute-case/resources/syntax-xml.xhtml": [ - [ - {} - ] - ], "server-timing/resources/blue.png": [ [ {} @@ -279339,6 +280397,11 @@ {} ] ], + "service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-newer-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-worker.js": [ [ {} @@ -279769,6 +280832,11 @@ {} ] ], + "service-workers/service-worker/resources/fetch-event-respond-with-partial-stream-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-iframe.html": [ [ {} @@ -280424,6 +281492,26 @@ {} ] ], + "service-workers/service-worker/resources/respond-with-body-accessed-response-iframe.html": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/respond-with-body-accessed-response-worker.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/respond-with-body-accessed-response.jsonp": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/sandboxed-iframe-navigator-serviceworker-iframe.html": [ + [ + {} + ] + ], "service-workers/service-worker/resources/service-worker-csp-worker.py": [ [ {} @@ -280534,6 +281622,11 @@ {} ] ], + "service-workers/service-worker/resources/websocket-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/websocket.js": [ [ {} @@ -280559,11 +281652,6 @@ {} ] ], - "service-workers/service-worker/resources/xhr.js": [ - [ - {} - ] - ], "service-workers/specgen.json": [ [ {} @@ -280829,6 +281917,11 @@ {} ] ], + "streams/readable-streams/reentrant-strategies.js": [ + [ + {} + ] + ], "streams/readable-streams/tee.js": [ [ {} @@ -280859,6 +281952,56 @@ {} ] ], + "streams/transform-streams/backpressure.js": [ + [ + {} + ] + ], + "streams/transform-streams/brand-checks.js": [ + [ + {} + ] + ], + "streams/transform-streams/errors.js": [ + [ + {} + ] + ], + "streams/transform-streams/flush.js": [ + [ + {} + ] + ], + "streams/transform-streams/general.js": [ + [ + {} + ] + ], + "streams/transform-streams/lipfuzz.js": [ + [ + {} + ] + ], + "streams/transform-streams/patched-global.js": [ + [ + {} + ] + ], + "streams/transform-streams/reentrant-strategies.js": [ + [ + {} + ] + ], + "streams/transform-streams/strategies.js": [ + [ + {} + ] + ], + "streams/transform-streams/terminate.js": [ + [ + {} + ] + ], "streams/writable-streams/aborting.js": [ [ {} @@ -281349,6 +282492,11 @@ {} ] ], + "svg/linking/reftests/use-descendant-combinator-ref.html": [ + [ + {} + ] + ], "svg/linking/scripted/testScripts/dummyScript.js": [ [ {} @@ -281894,6 +283042,21 @@ {} ] ], + "wake-lock/wakelock-disabled-by-feature-policy.https.sub.html.headers": [ + [ + {} + ] + ], + "wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers": [ + [ + {} + ] + ], + "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers": [ + [ + {} + ] + ], "wasm/compile_worker.js": [ [ {} @@ -281929,6 +283092,11 @@ {} ] ], + "wasm/wasm_idb_worker.js": [ + [ + {} + ] + ], "wasm/wasm_indexeddb_test.js": [ [ {} @@ -281974,6 +283142,11 @@ {} ] ], + "web-animations/resources/keyframe-tests.js": [ + [ + {} + ] + ], "web-animations/resources/keyframe-utils.js": [ [ {} @@ -282024,26 +283197,6 @@ {} ] ], - "webaudio/chrome/resources/audioparam-testing.js": [ - [ - {} - ] - ], - "webaudio/chrome/resources/audit-util.js": [ - [ - {} - ] - ], - "webaudio/chrome/resources/audit.js": [ - [ - {} - ] - ], - "webaudio/chrome/resources/start-stop-exceptions.js": [ - [ - {} - ] - ], "webaudio/js/buffer-loader.js": [ [ {} @@ -282054,12 +283207,22 @@ {} ] ], - "webaudio/js/lodash.js": [ + "webaudio/refresh_idl.rb": [ [ {} ] ], - "webaudio/refresh_idl.rb": [ + "webaudio/resources/audioparam-testing.js": [ + [ + {} + ] + ], + "webaudio/resources/audit-util.js": [ + [ + {} + ] + ], + "webaudio/resources/audit.js": [ [ {} ] @@ -282069,7 +283232,7 @@ {} ] ], - "webaudio/specification.html": [ + "webaudio/resources/start-stop-exceptions.js": [ [ {} ] @@ -282339,6 +283502,11 @@ {} ] ], + "webgl/common.js": [ + [ + {} + ] + ], "webmessaging/MessageEvent-trusted-worker.js": [ [ {} @@ -285254,6 +286422,26 @@ {} ] ], + "worklets/resources/addmodule-window.html": [ + [ + {} + ] + ], + "worklets/resources/credentials-tests.js": [ + [ + {} + ] + ], + "worklets/resources/credentials.py": [ + [ + {} + ] + ], + "worklets/resources/csp-tests.js": [ + [ + {} + ] + ], "worklets/resources/empty-worklet-script.js": [ [ {} @@ -285264,6 +286452,11 @@ {} ] ], + "worklets/resources/import-empty-worklet-script.js": [ + [ + {} + ] + ], "worklets/resources/import-nested-internal-worklet-script.js": [ [ {} @@ -285274,6 +286467,21 @@ {} ] ], + "worklets/resources/import-non-existent-worklet-script.js": [ + [ + {} + ] + ], + "worklets/resources/import-remote-origin-empty-worklet-script.sub.js": [ + [ + {} + ] + ], + "worklets/resources/import-syntax-error-worklet-script.js": [ + [ + {} + ] + ], "worklets/resources/import-tests.js": [ [ {} @@ -285294,6 +286502,26 @@ {} ] ], + "worklets/resources/service-worker-interception-tests.js": [ + [ + {} + ] + ], + "worklets/resources/service-worker.js": [ + [ + {} + ] + ], + "worklets/resources/set-cookie.py": [ + [ + {} + ] + ], + "worklets/resources/syntax-error-worklet-script.js": [ + [ + {} + ] + ], "worklets/resources/throwing-worklet-script.js": [ [ {} @@ -290395,6 +291623,12 @@ {} ] ], + "IndexedDB/idbcursor-iterating-update.htm": [ + [ + "/IndexedDB/idbcursor-iterating-update.htm", + {} + ] + ], "IndexedDB/idbcursor-key.htm": [ [ "/IndexedDB/idbcursor-key.htm", @@ -292315,6 +293549,14 @@ {} ] ], + "IndexedDB/wasm-module-value.html": [ + [ + "/IndexedDB/wasm-module-value.html", + { + "timeout": "long" + } + ] + ], "IndexedDB/writer-starvation.htm": [ [ "/IndexedDB/writer-starvation.htm", @@ -293675,12 +294917,6 @@ {} ] ], - "XMLHttpRequest/getallresponseheaders-cl.htm": [ - [ - "/XMLHttpRequest/getallresponseheaders-cl.htm", - {} - ] - ], "XMLHttpRequest/getallresponseheaders-cookies.htm": [ [ "/XMLHttpRequest/getallresponseheaders-cookies.htm", @@ -297063,6 +298299,374 @@ {} ] ], + "cookie-store/cookie_store_tests.tentative.html": [ + [ + "/cookie-store/cookie_store_tests.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/cookie_store_tests.tentative.https.html": [ + [ + "/cookie-store/cookie_store_tests.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/cookie_store_tests_static.tentative.html": [ + [ + "/cookie-store/cookie_store_tests_static.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/cookie_store_tests_static.tentative.https.html": [ + [ + "/cookie-store/cookie_store_tests_static.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/delete_cookies.tentative.html": [ + [ + "/cookie-store/delete_cookies.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/delete_cookies.tentative.https.html": [ + [ + "/cookie-store/delete_cookies.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/delete_cookies_static.tentative.html": [ + [ + "/cookie-store/delete_cookies_static.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/delete_cookies_static.tentative.https.html": [ + [ + "/cookie-store/delete_cookies_static.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/document_cookie.tentative.html": [ + [ + "/cookie-store/document_cookie.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/document_cookie.tentative.https.html": [ + [ + "/cookie-store/document_cookie.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/document_cookie_static.tentative.html": [ + [ + "/cookie-store/document_cookie_static.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/document_cookie_static.tentative.https.html": [ + [ + "/cookie-store/document_cookie_static.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/expiration.tentative.html": [ + [ + "/cookie-store/expiration.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/expiration.tentative.https.html": [ + [ + "/cookie-store/expiration.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/expiration_static.tentative.html": [ + [ + "/cookie-store/expiration_static.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/expiration_static.tentative.https.html": [ + [ + "/cookie-store/expiration_static.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/get_set_get_all.tentative.html": [ + [ + "/cookie-store/get_set_get_all.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/get_set_get_all.tentative.https.html": [ + [ + "/cookie-store/get_set_get_all.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/get_set_get_all_static.tentative.html": [ + [ + "/cookie-store/get_set_get_all_static.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/get_set_get_all_static.tentative.https.html": [ + [ + "/cookie-store/get_set_get_all_static.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/http_cookie_and_set_cookie_headers.tentative.html": [ + [ + "/cookie-store/http_cookie_and_set_cookie_headers.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html": [ + [ + "/cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/meta_http_equiv_set_cookie.tentative.html": [ + [ + "/cookie-store/meta_http_equiv_set_cookie.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/meta_http_equiv_set_cookie.tentative.https.html": [ + [ + "/cookie-store/meta_http_equiv_set_cookie.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/meta_http_equiv_set_cookie_static.tentative.html": [ + [ + "/cookie-store/meta_http_equiv_set_cookie_static.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/meta_http_equiv_set_cookie_static.tentative.https.html": [ + [ + "/cookie-store/meta_http_equiv_set_cookie_static.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/no_name_and_no_value.tentative.html": [ + [ + "/cookie-store/no_name_and_no_value.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/no_name_and_no_value.tentative.https.html": [ + [ + "/cookie-store/no_name_and_no_value.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/no_name_and_no_value_static.tentative.html": [ + [ + "/cookie-store/no_name_and_no_value_static.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/no_name_and_no_value_static.tentative.https.html": [ + [ + "/cookie-store/no_name_and_no_value_static.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/no_name_equals_in_value.tentative.html": [ + [ + "/cookie-store/no_name_equals_in_value.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/no_name_equals_in_value.tentative.https.html": [ + [ + "/cookie-store/no_name_equals_in_value.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/no_name_equals_in_value_static.tentative.html": [ + [ + "/cookie-store/no_name_equals_in_value_static.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/no_name_equals_in_value_static.tentative.https.html": [ + [ + "/cookie-store/no_name_equals_in_value_static.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/no_name_multiple_values.tentative.html": [ + [ + "/cookie-store/no_name_multiple_values.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/no_name_multiple_values.tentative.https.html": [ + [ + "/cookie-store/no_name_multiple_values.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/no_name_multiple_values_static.tentative.html": [ + [ + "/cookie-store/no_name_multiple_values_static.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/no_name_multiple_values_static.tentative.https.html": [ + [ + "/cookie-store/no_name_multiple_values_static.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/observation.tentative.html": [ + [ + "/cookie-store/observation.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/observation.tentative.https.html": [ + [ + "/cookie-store/observation.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/observation_static.tentative.html": [ + [ + "/cookie-store/observation_static.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/observation_static.tentative.https.html": [ + [ + "/cookie-store/observation_static.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/one_simple_origin_cookie.tentative.html": [ + [ + "/cookie-store/one_simple_origin_cookie.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/one_simple_origin_cookie.tentative.https.html": [ + [ + "/cookie-store/one_simple_origin_cookie.tentative.https.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/one_simple_origin_cookie_static.tentative.html": [ + [ + "/cookie-store/one_simple_origin_cookie_static.tentative.html", + { + "timeout": "long" + } + ] + ], + "cookie-store/one_simple_origin_cookie_static.tentative.https.html": [ + [ + "/cookie-store/one_simple_origin_cookie_static.tentative.https.html", + { + "timeout": "long" + } + ] + ], "cookies/path/match.html": [ [ "/cookies/path/match.html", @@ -297979,6 +299583,12 @@ {} ] ], + "css/css-flexbox/percentage-heights-003.html": [ + [ + "/css/css-flexbox/percentage-heights-003.html", + {} + ] + ], "css/css-flexbox/position-absolute-001.html": [ [ "/css/css-flexbox/position-absolute-001.html", @@ -298009,6 +299619,12 @@ {} ] ], + "css/css-fonts/font-display/font-display-failure-fallback.html": [ + [ + "/css/css-fonts/font-display/font-display-failure-fallback.html", + {} + ] + ], "css/css-fonts/test_datafont_same_origin.html": [ [ "/css/css-fonts/test_datafont_same_origin.html", @@ -298339,12 +299955,372 @@ {} ] ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html", + {} + ] + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html": [ + [ + "/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html", + {} + ] + ], "css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html": [ [ "/css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html", {} ] ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html", + {} + ] + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html": [ + [ + "/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html", + {} + ] + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html", + {} + ] + ], "css/css-grid/alignment/grid-self-alignment-stretch-001.html": [ [ "/css/css-grid/alignment/grid-self-alignment-stretch-001.html", @@ -299971,6 +301947,12 @@ {} ] ], + "css/css-text-decor/text-decoration-skip-ink.html": [ + [ + "/css/css-text-decor/text-decoration-skip-ink.html", + {} + ] + ], "css/css-text/i18n/css3-text-line-break-baspglwj-001.html": [ [ "/css/css-text/i18n/css3-text-line-break-baspglwj-001.html", @@ -301117,6 +303099,24 @@ {} ] ], + "css/css-typed-om/factory-absolute-length.html": [ + [ + "/css/css-typed-om/factory-absolute-length.html", + {} + ] + ], + "css/css-typed-om/factory-duration.html": [ + [ + "/css/css-typed-om/factory-duration.html", + {} + ] + ], + "css/css-typed-om/factory-frequency.html": [ + [ + "/css/css-typed-om/factory-frequency.html", + {} + ] + ], "css/css-typed-om/styleMap-update-function.html": [ [ "/css/css-typed-om/styleMap-update-function.html", @@ -301897,18 +303897,6 @@ {} ] ], - "css/cssom-view/cssom-view/media-query-list-interface.xht": [ - [ - "/css/cssom-view/cssom-view/media-query-list-interface.xht", - {} - ] - ], - "css/cssom-view/cssom-view/window-interface.xht": [ - [ - "/css/cssom-view/cssom-view/window-interface.xht", - {} - ] - ], "css/cssom-view/elementFromPoint-001.html": [ [ "/css/cssom-view/elementFromPoint-001.html", @@ -301927,6 +303915,12 @@ {} ] ], + "css/cssom-view/elementFromPoint-parameters.html": [ + [ + "/css/cssom-view/elementFromPoint-parameters.html", + {} + ] + ], "css/cssom-view/elementFromPoint.html": [ [ "/css/cssom-view/elementFromPoint.html", @@ -302017,6 +304011,12 @@ {} ] ], + "css/cssom-view/media-query-list-interface.xht": [ + [ + "/css/cssom-view/media-query-list-interface.xht", + {} + ] + ], "css/cssom-view/mouseEvent.html": [ [ "/css/cssom-view/mouseEvent.html", @@ -302095,6 +304095,12 @@ {} ] ], + "css/cssom-view/window-interface.xht": [ + [ + "/css/cssom-view/window-interface.xht", + {} + ] + ], "css/cssom-view/window-screen-height-immutable.html": [ [ "/css/cssom-view/window-screen-height-immutable.html", @@ -302719,6 +304725,30 @@ {} ] ], + "css/selectors/attribute-selectors/attribute-case/cssom.html": [ + [ + "/css/selectors/attribute-selectors/attribute-case/cssom.html", + {} + ] + ], + "css/selectors/attribute-selectors/attribute-case/semantics.html": [ + [ + "/css/selectors/attribute-selectors/attribute-case/semantics.html", + {} + ] + ], + "css/selectors/attribute-selectors/attribute-case/syntax.html": [ + [ + "/css/selectors/attribute-selectors/attribute-case/syntax.html", + {} + ] + ], + "css/selectors/child-indexed-pseudo-class.html": [ + [ + "/css/selectors/child-indexed-pseudo-class.html", + {} + ] + ], "css/selectors/focus-display-none-001.html": [ [ "/css/selectors/focus-display-none-001.html", @@ -302989,6 +305019,12 @@ {} ] ], + "css/selectors/missing-right-token.html": [ + [ + "/css/selectors/missing-right-token.html", + {} + ] + ], "custom-elements/CustomElementRegistry.html": [ [ "/custom-elements/CustomElementRegistry.html", @@ -303175,6 +305211,12 @@ {} ] ], + "custom-elements/reactions/HTMLInputElement.html": [ + [ + "/custom-elements/reactions/HTMLInputElement.html", + {} + ] + ], "custom-elements/reactions/HTMLOptionElement.html": [ [ "/custom-elements/reactions/HTMLOptionElement.html", @@ -305545,6 +307587,228 @@ {} ] ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-decode-errors.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-errors.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html": [ + [ + "/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-errors.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-errors.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-stateful.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-stateful.html", + {} + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-ascii.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-ascii.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html", + { + "timeout": "long" + } + ] + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html": [ + [ + "/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html", + { + "timeout": "long" + } + ] + ], "encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html": [ [ "/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html", @@ -307449,6 +309713,16 @@ {} ] ], + "fetch/api/basic/request-headers-case.any.js": [ + [ + "/fetch/api/basic/request-headers-case.any.html", + {} + ], + [ + "/fetch/api/basic/request-headers-case.any.worker.html", + {} + ] + ], "fetch/api/basic/request-headers.any.js": [ [ "/fetch/api/basic/request-headers.any.html", @@ -308491,6 +310765,12 @@ {} ] ], + "geolocation-sensor/idlharness.https.html": [ + [ + "/geolocation-sensor/idlharness.https.html", + {} + ] + ], "gyroscope/Gyroscope.https.html": [ [ "/gyroscope/Gyroscope.https.html", @@ -309685,6 +311965,12 @@ {} ] ], + "html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload.tentative.html": [ + [ + "/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload.tentative.html", + {} + ] + ], "html/browsers/offline/appcache/workers/appcache-worker.html": [ [ "/html/browsers/offline/appcache/workers/appcache-worker.html", @@ -315681,6 +317967,12 @@ {} ] ], + "html/semantics/forms/the-option-element/option-text-setter.html": [ + [ + "/html/semantics/forms/the-option-element/option-text-setter.html", + {} + ] + ], "html/semantics/forms/the-option-element/option-text-spaces.html": [ [ "/html/semantics/forms/the-option-element/option-text-spaces.html", @@ -320053,6 +322345,12 @@ {} ] ], + "innerText/multiple-text-nodes.window.js": [ + [ + "/innerText/multiple-text-nodes.window.html", + {} + ] + ], "innerText/setter.html": [ [ "/innerText/setter.html", @@ -331723,6 +334021,12 @@ {} ] ], + "paint-timing/child-painting-first-image.html": [ + [ + "/paint-timing/child-painting-first-image.html", + {} + ] + ], "paint-timing/first-contentful-bg-image.html": [ [ "/paint-timing/first-contentful-bg-image.html", @@ -331753,6 +334057,12 @@ {} ] ], + "paint-timing/first-image-child.html": [ + [ + "/paint-timing/first-image-child.html", + {} + ] + ], "paint-timing/first-paint-bg-color.html": [ [ "/paint-timing/first-paint-bg-color.html", @@ -332177,6 +334487,12 @@ {} ] ], + "preload/modulepreload.html": [ + [ + "/preload/modulepreload.html", + {} + ] + ], "preload/onerror-event.html": [ [ "/preload/onerror-event.html", @@ -340639,6 +342955,12 @@ {} ] ], + "resource-timing/resource_subframe_self_navigation.html": [ + [ + "/resource-timing/resource_subframe_self_navigation.html", + {} + ] + ], "resource-timing/single-entry-per-resource.html": [ [ "/resource-timing/single-entry-per-resource.html", @@ -341005,30 +343327,6 @@ {} ] ], - "selectors/attribute-selectors/attribute-case/cssom.html": [ - [ - "/selectors/attribute-selectors/attribute-case/cssom.html", - {} - ] - ], - "selectors/attribute-selectors/attribute-case/semantics.html": [ - [ - "/selectors/attribute-selectors/attribute-case/semantics.html", - {} - ] - ], - "selectors/attribute-selectors/attribute-case/syntax.html": [ - [ - "/selectors/attribute-selectors/attribute-case/syntax.html", - {} - ] - ], - "selectors/child-indexed-pseudo-class.html": [ - [ - "/selectors/child-indexed-pseudo-class.html", - {} - ] - ], "server-timing/test_server_timing.html": [ [ "/server-timing/test_server_timing.html", @@ -341477,6 +343775,12 @@ {} ] ], + "service-workers/service-worker/detached-context.https.html": [ + [ + "/service-workers/service-worker/detached-context.https.html", + {} + ] + ], "service-workers/service-worker/extendable-event-async-waituntil.https.html": [ [ "/service-workers/service-worker/extendable-event-async-waituntil.https.html", @@ -341551,6 +343855,12 @@ {} ] ], + "service-workers/service-worker/fetch-event-respond-with-partial-stream.https.html": [ + [ + "/service-workers/service-worker/fetch-event-respond-with-partial-stream.https.html", + {} + ] + ], "service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html": [ [ "/service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html", @@ -342147,6 +344457,18 @@ {} ] ], + "service-workers/service-worker/respond-with-body-accessed-response.https.html": [ + [ + "/service-workers/service-worker/respond-with-body-accessed-response.https.html", + {} + ] + ], + "service-workers/service-worker/sandboxed-iframe-navigator-serviceworker.https.html": [ + [ + "/service-workers/service-worker/sandboxed-iframe-navigator-serviceworker.https.html", + {} + ] + ], "service-workers/service-worker/service-worker-csp-connect.https.html": [ [ "/service-workers/service-worker/service-worker-csp-connect.https.html", @@ -342291,6 +344613,12 @@ {} ] ], + "service-workers/service-worker/websocket-in-service-worker.https.html": [ + [ + "/service-workers/service-worker/websocket-in-service-worker.https.html", + {} + ] + ], "service-workers/service-worker/websocket.https.html": [ [ "/service-workers/service-worker/websocket.https.html", @@ -342309,12 +344637,6 @@ {} ] ], - "service-workers/service-worker/xhr.https.html": [ - [ - "/service-workers/service-worker/xhr.https.html", - {} - ] - ], "shadow-dom/Document-prototype-adoptNode.html": [ [ "/shadow-dom/Document-prototype-adoptNode.html", @@ -343497,6 +345819,30 @@ {} ] ], + "streams/readable-streams/reentrant-strategies.dedicatedworker.html": [ + [ + "/streams/readable-streams/reentrant-strategies.dedicatedworker.html", + {} + ] + ], + "streams/readable-streams/reentrant-strategies.html": [ + [ + "/streams/readable-streams/reentrant-strategies.html", + {} + ] + ], + "streams/readable-streams/reentrant-strategies.serviceworker.https.html": [ + [ + "/streams/readable-streams/reentrant-strategies.serviceworker.https.html", + {} + ] + ], + "streams/readable-streams/reentrant-strategies.sharedworker.html": [ + [ + "/streams/readable-streams/reentrant-strategies.sharedworker.html", + {} + ] + ], "streams/readable-streams/tee.dedicatedworker.html": [ [ "/streams/readable-streams/tee.dedicatedworker.html", @@ -343545,6 +345891,246 @@ {} ] ], + "streams/transform-streams/backpressure.dedicatedworker.html": [ + [ + "/streams/transform-streams/backpressure.dedicatedworker.html", + {} + ] + ], + "streams/transform-streams/backpressure.html": [ + [ + "/streams/transform-streams/backpressure.html", + {} + ] + ], + "streams/transform-streams/backpressure.serviceworker.https.html": [ + [ + "/streams/transform-streams/backpressure.serviceworker.https.html", + {} + ] + ], + "streams/transform-streams/backpressure.sharedworker.html": [ + [ + "/streams/transform-streams/backpressure.sharedworker.html", + {} + ] + ], + "streams/transform-streams/brand-checks.dedicatedworker.html": [ + [ + "/streams/transform-streams/brand-checks.dedicatedworker.html", + {} + ] + ], + "streams/transform-streams/brand-checks.html": [ + [ + "/streams/transform-streams/brand-checks.html", + {} + ] + ], + "streams/transform-streams/brand-checks.serviceworker.https.html": [ + [ + "/streams/transform-streams/brand-checks.serviceworker.https.html", + {} + ] + ], + "streams/transform-streams/brand-checks.sharedworker.html": [ + [ + "/streams/transform-streams/brand-checks.sharedworker.html", + {} + ] + ], + "streams/transform-streams/errors.dedicatedworker.html": [ + [ + "/streams/transform-streams/errors.dedicatedworker.html", + {} + ] + ], + "streams/transform-streams/errors.html": [ + [ + "/streams/transform-streams/errors.html", + {} + ] + ], + "streams/transform-streams/errors.serviceworker.https.html": [ + [ + "/streams/transform-streams/errors.serviceworker.https.html", + {} + ] + ], + "streams/transform-streams/errors.sharedworker.html": [ + [ + "/streams/transform-streams/errors.sharedworker.html", + {} + ] + ], + "streams/transform-streams/flush.dedicatedworker.html": [ + [ + "/streams/transform-streams/flush.dedicatedworker.html", + {} + ] + ], + "streams/transform-streams/flush.html": [ + [ + "/streams/transform-streams/flush.html", + {} + ] + ], + "streams/transform-streams/flush.serviceworker.https.html": [ + [ + "/streams/transform-streams/flush.serviceworker.https.html", + {} + ] + ], + "streams/transform-streams/flush.sharedworker.html": [ + [ + "/streams/transform-streams/flush.sharedworker.html", + {} + ] + ], + "streams/transform-streams/general.dedicatedworker.html": [ + [ + "/streams/transform-streams/general.dedicatedworker.html", + {} + ] + ], + "streams/transform-streams/general.html": [ + [ + "/streams/transform-streams/general.html", + {} + ] + ], + "streams/transform-streams/general.serviceworker.https.html": [ + [ + "/streams/transform-streams/general.serviceworker.https.html", + {} + ] + ], + "streams/transform-streams/general.sharedworker.html": [ + [ + "/streams/transform-streams/general.sharedworker.html", + {} + ] + ], + "streams/transform-streams/lipfuzz.dedicatedworker.html": [ + [ + "/streams/transform-streams/lipfuzz.dedicatedworker.html", + {} + ] + ], + "streams/transform-streams/lipfuzz.html": [ + [ + "/streams/transform-streams/lipfuzz.html", + {} + ] + ], + "streams/transform-streams/lipfuzz.serviceworker.https.html": [ + [ + "/streams/transform-streams/lipfuzz.serviceworker.https.html", + {} + ] + ], + "streams/transform-streams/lipfuzz.sharedworker.html": [ + [ + "/streams/transform-streams/lipfuzz.sharedworker.html", + {} + ] + ], + "streams/transform-streams/patched-global.dedicatedworker.html": [ + [ + "/streams/transform-streams/patched-global.dedicatedworker.html", + {} + ] + ], + "streams/transform-streams/patched-global.html": [ + [ + "/streams/transform-streams/patched-global.html", + {} + ] + ], + "streams/transform-streams/patched-global.serviceworker.https.html": [ + [ + "/streams/transform-streams/patched-global.serviceworker.https.html", + {} + ] + ], + "streams/transform-streams/patched-global.sharedworker.html": [ + [ + "/streams/transform-streams/patched-global.sharedworker.html", + {} + ] + ], + "streams/transform-streams/reentrant-strategies.dedicatedworker.html": [ + [ + "/streams/transform-streams/reentrant-strategies.dedicatedworker.html", + {} + ] + ], + "streams/transform-streams/reentrant-strategies.html": [ + [ + "/streams/transform-streams/reentrant-strategies.html", + {} + ] + ], + "streams/transform-streams/reentrant-strategies.serviceworker.https.html": [ + [ + "/streams/transform-streams/reentrant-strategies.serviceworker.https.html", + {} + ] + ], + "streams/transform-streams/reentrant-strategies.sharedworker.html": [ + [ + "/streams/transform-streams/reentrant-strategies.sharedworker.html", + {} + ] + ], + "streams/transform-streams/strategies.dedicatedworker.html": [ + [ + "/streams/transform-streams/strategies.dedicatedworker.html", + {} + ] + ], + "streams/transform-streams/strategies.html": [ + [ + "/streams/transform-streams/strategies.html", + {} + ] + ], + "streams/transform-streams/strategies.serviceworker.https.html": [ + [ + "/streams/transform-streams/strategies.serviceworker.https.html", + {} + ] + ], + "streams/transform-streams/strategies.sharedworker.html": [ + [ + "/streams/transform-streams/strategies.sharedworker.html", + {} + ] + ], + "streams/transform-streams/terminate.dedicatedworker.html": [ + [ + "/streams/transform-streams/terminate.dedicatedworker.html", + {} + ] + ], + "streams/transform-streams/terminate.html": [ + [ + "/streams/transform-streams/terminate.html", + {} + ] + ], + "streams/transform-streams/terminate.serviceworker.https.html": [ + [ + "/streams/transform-streams/terminate.serviceworker.https.html", + {} + ] + ], + "streams/transform-streams/terminate.sharedworker.html": [ + [ + "/streams/transform-streams/terminate.sharedworker.html", + {} + ] + ], "streams/writable-streams/aborting.dedicatedworker.html": [ [ "/streams/writable-streams/aborting.dedicatedworker.html", @@ -343929,6 +346515,12 @@ {} ] ], + "svg/extensibility/interfaces/foreignObject-graphics.svg": [ + [ + "/svg/extensibility/interfaces/foreignObject-graphics.svg", + {} + ] + ], "svg/historical.html": [ [ "/svg/historical.html", @@ -343967,6 +346559,12 @@ {} ] ], + "svg/struct/UnknownElement/interface.svg": [ + [ + "/svg/struct/UnknownElement/interface.svg", + {} + ] + ], "svg/types/scripted/SVGLength-px-with-context.html": [ [ "/svg/types/scripted/SVGLength-px-with-context.html", @@ -344191,6 +346789,14 @@ {} ] ], + "uievents/order-of-events/mouse-events/click-cancel.html": [ + [ + "/uievents/order-of-events/mouse-events/click-cancel.html", + { + "testdriver": true + } + ] + ], "upgrade-insecure-requests/iframe-redirect-upgrade.https.html": [ [ "/upgrade-insecure-requests/iframe-redirect-upgrade.https.html", @@ -344245,6 +346851,12 @@ {} ] ], + "url/data-uri-fragment.html": [ + [ + "/url/data-uri-fragment.html", + {} + ] + ], "url/failure.html": [ [ "/url/failure.html", @@ -344617,6 +347229,60 @@ {} ] ], + "wake-lock/wakelock-api.https.html": [ + [ + "/wake-lock/wakelock-api.https.html", + {} + ] + ], + "wake-lock/wakelock-disabled-by-feature-policy.https.sub.html": [ + [ + "/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html", + {} + ] + ], + "wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ + [ + "/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html", + {} + ] + ], + "wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html": [ + [ + "/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html", + {} + ] + ], + "wake-lock/wakelock-enabled-by-feature-policy.https.sub.html": [ + [ + "/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html", + {} + ] + ], + "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html": [ + [ + "/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html", + {} + ] + ], + "wake-lock/wakelock-object-is-independent.https.html": [ + [ + "/wake-lock/wakelock-object-is-independent.https.html", + {} + ] + ], + "wake-lock/wakelock-onactivechange.https.html": [ + [ + "/wake-lock/wakelock-onactivechange.https.html", + {} + ] + ], + "wake-lock/wakelock-type.https.html": [ + [ + "/wake-lock/wakelock-type.https.html", + {} + ] + ], "wasm/create_multiple_memory.worker.js": [ [ "/wasm/create_multiple_memory.worker.html", @@ -344629,9 +347295,9 @@ {} ] ], - "wasm/wasm_indexeddb_test.html": [ + "wasm/wasm_indexeddb_test.https.html": [ [ - "/wasm/wasm_indexeddb_test.html", + "/wasm/wasm_indexeddb_test.https.html", {} ] ], @@ -344863,6 +347529,12 @@ {} ] ], + "web-animations/interfaces/AnimationEffectTiming/idlharness.html": [ + [ + "/web-animations/interfaces/AnimationEffectTiming/idlharness.html", + {} + ] + ], "web-animations/interfaces/AnimationEffectTiming/iterationStart.html": [ [ "/web-animations/interfaces/AnimationEffectTiming/iterationStart.html", @@ -344875,15 +347547,15 @@ {} ] ], - "web-animations/interfaces/AnimationTimeline/document-timeline.html": [ + "web-animations/interfaces/AnimationPlaybackEvent/constructor.html": [ [ - "/web-animations/interfaces/AnimationTimeline/document-timeline.html", + "/web-animations/interfaces/AnimationPlaybackEvent/constructor.html", {} ] ], - "web-animations/interfaces/AnimationTimeline/idlharness.html": [ + "web-animations/interfaces/AnimationPlaybackEvent/idlharness.html": [ [ - "/web-animations/interfaces/AnimationTimeline/idlharness.html", + "/web-animations/interfaces/AnimationPlaybackEvent/idlharness.html", {} ] ], @@ -344893,12 +347565,24 @@ {} ] ], + "web-animations/interfaces/Document/timeline.html": [ + [ + "/web-animations/interfaces/Document/timeline.html", + {} + ] + ], "web-animations/interfaces/DocumentTimeline/constructor.html": [ [ "/web-animations/interfaces/DocumentTimeline/constructor.html", {} ] ], + "web-animations/interfaces/DocumentTimeline/idlharness.html": [ + [ + "/web-animations/interfaces/DocumentTimeline/idlharness.html", + {} + ] + ], "web-animations/interfaces/KeyframeEffect/composite.html": [ [ "/web-animations/interfaces/KeyframeEffect/composite.html", @@ -344923,6 +347607,12 @@ {} ] ], + "web-animations/interfaces/KeyframeEffect/idlharness.html": [ + [ + "/web-animations/interfaces/KeyframeEffect/idlharness.html", + {} + ] + ], "web-animations/interfaces/KeyframeEffect/iterationComposite.html": [ [ "/web-animations/interfaces/KeyframeEffect/iterationComposite.html", @@ -344953,12 +347643,6 @@ {} ] ], - "web-animations/interfaces/KeyframeEffectReadOnly/copy-constructor.html": [ - [ - "/web-animations/interfaces/KeyframeEffectReadOnly/copy-constructor.html", - {} - ] - ], "web-animations/timing-model/animation-effects/active-time.html": [ [ "/web-animations/timing-model/animation-effects/active-time.html", @@ -345055,6 +347739,18 @@ {} ] ], + "web-animations/timing-model/timelines/document-timelines.html": [ + [ + "/web-animations/timing-model/timelines/document-timelines.html", + {} + ] + ], + "web-animations/timing-model/timelines/timelines.html": [ + [ + "/web-animations/timing-model/timelines/timelines.html", + {} + ] + ], "web-nfc/idlharness.https.html": [ [ "/web-nfc/idlharness.https.html", @@ -345109,30 +347805,42 @@ {} ] ], - "webaudio/chrome/the-constantsourcenode-interface/constant-source-basic.html": [ - [ - "/webaudio/chrome/the-constantsourcenode-interface/constant-source-basic.html", - {} - ] - ], - "webaudio/chrome/the-constantsourcenode-interface/constant-source-onended.html": [ - [ - "/webaudio/chrome/the-constantsourcenode-interface/constant-source-onended.html", - {} - ] - ], - "webaudio/chrome/the-constantsourcenode-interface/constant-source-output.html": [ - [ - "/webaudio/chrome/the-constantsourcenode-interface/constant-source-output.html", - {} - ] - ], "webaudio/historical.html": [ [ "/webaudio/historical.html", {} ] ], + "webaudio/the-audio-api/the-analysernode-interface/test-analyser-gain.html": [ + [ + "/webaudio/the-audio-api/the-analysernode-interface/test-analyser-gain.html", + {} + ] + ], + "webaudio/the-audio-api/the-analysernode-interface/test-analyser-minimum.html": [ + [ + "/webaudio/the-audio-api/the-analysernode-interface/test-analyser-minimum.html", + {} + ] + ], + "webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html": [ + [ + "/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html", + {} + ] + ], + "webaudio/the-audio-api/the-analysernode-interface/test-analyser-scale.html": [ + [ + "/webaudio/the-audio-api/the-analysernode-interface/test-analyser-scale.html", + {} + ] + ], + "webaudio/the-audio-api/the-analysernode-interface/test-analysernode.html": [ + [ + "/webaudio/the-audio-api/the-analysernode-interface/test-analysernode.html", + {} + ] + ], "webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html": [ [ "/webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html", @@ -345199,6 +347907,24 @@ {} ] ], + "webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-basic.html": [ + [ + "/webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-basic.html", + {} + ] + ], + "webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-onended.html": [ + [ + "/webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-onended.html", + {} + ] + ], + "webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-output.html": [ + [ + "/webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-output.html", + {} + ] + ], "webaudio/the-audio-api/the-constantsourcenode-interface/test-constantsourcenode.html": [ [ "/webaudio/the-audio-api/the-constantsourcenode-interface/test-constantsourcenode.html", @@ -345289,6 +348015,42 @@ {} ] ], + "webgl/bufferSubData.html": [ + [ + "/webgl/bufferSubData.html", + {} + ] + ], + "webgl/compressedTexImage2D.html": [ + [ + "/webgl/compressedTexImage2D.html", + {} + ] + ], + "webgl/compressedTexSubImage2D.html": [ + [ + "/webgl/compressedTexSubImage2D.html", + {} + ] + ], + "webgl/texImage2D.html": [ + [ + "/webgl/texImage2D.html", + {} + ] + ], + "webgl/texSubImage2D.html": [ + [ + "/webgl/texSubImage2D.html", + {} + ] + ], + "webgl/uniformMatrixNfv.html": [ + [ + "/webgl/uniformMatrixNfv.html", + {} + ] + ], "webmessaging/Channel_postMessage_Blob.htm": [ [ "/webmessaging/Channel_postMessage_Blob.htm", @@ -348375,6 +351137,14 @@ {} ] ], + "webusb/usb.https.html": [ + [ + "/webusb/usb.https.html", + { + "testdriver": true + } + ] + ], "webusb/usbConnectionEvent.https.html": [ [ "/webusb/usbConnectionEvent.https.html", @@ -349941,27 +352711,63 @@ {} ] ], - "worklets/animation-worklet-import.html": [ + "worklets/animation-worklet-credentials.https.html": [ [ - "/worklets/animation-worklet-import.html", + "/worklets/animation-worklet-credentials.https.html", {} ] ], - "worklets/animation-worklet-referrer.html": [ + "worklets/animation-worklet-csp.https.html": [ [ - "/worklets/animation-worklet-referrer.html", + "/worklets/animation-worklet-csp.https.html", {} ] ], - "worklets/paint-worklet-import.html": [ + "worklets/animation-worklet-import.https.html": [ [ - "/worklets/paint-worklet-import.html", + "/worklets/animation-worklet-import.https.html", {} ] ], - "worklets/paint-worklet-referrer.html": [ + "worklets/animation-worklet-referrer.https.html": [ [ - "/worklets/paint-worklet-referrer.html", + "/worklets/animation-worklet-referrer.https.html", + {} + ] + ], + "worklets/animation-worklet-service-worker-interception.https.html": [ + [ + "/worklets/animation-worklet-service-worker-interception.https.html", + {} + ] + ], + "worklets/paint-worklet-credentials.https.html": [ + [ + "/worklets/paint-worklet-credentials.https.html", + {} + ] + ], + "worklets/paint-worklet-csp.https.html": [ + [ + "/worklets/paint-worklet-csp.https.html", + {} + ] + ], + "worklets/paint-worklet-import.https.html": [ + [ + "/worklets/paint-worklet-import.https.html", + {} + ] + ], + "worklets/paint-worklet-referrer.https.html": [ + [ + "/worklets/paint-worklet-referrer.https.html", + {} + ] + ], + "worklets/paint-worklet-service-worker-interception.https.html": [ + [ + "/worklets/paint-worklet-service-worker-interception.https.html", {} ] ], @@ -370291,6 +373097,14 @@ {} ] ], + "webdriver/tests/actions/modifier_click.py": [ + [ + "/webdriver/tests/actions/modifier_click.py", + { + "timeout": "long" + } + ] + ], "webdriver/tests/actions/mouse.py": [ [ "/webdriver/tests/actions/mouse.py", @@ -370379,6 +373193,12 @@ {} ] ], + "webdriver/tests/interaction/element_clear.py": [ + [ + "/webdriver/tests/interaction/element_clear.py", + {} + ] + ], "webdriver/tests/interaction/send_keys_content_editable.py": [ [ "/webdriver/tests/interaction/send_keys_content_editable.py", @@ -370548,6 +373368,12 @@ "/webdriver/tests/user_prompts/get_alert_text.py", {} ] + ], + "webdriver/tests/user_prompts/send_alert_text.py": [ + [ + "/webdriver/tests/user_prompts/send_alert_text.py", + {} + ] ] } }, @@ -370565,7 +373391,7 @@ "support" ], "./.travis.yml": [ - "54adee7fb83a554a18793883baf382a3ec534f62", + "ee7a0f7a54701f7cc9a5cb192a9400b864805371", "support" ], "./CONTRIBUTING.md": [ @@ -370581,7 +373407,7 @@ "support" ], "./README.md": [ - "7f6536f9d3a69dfcea7d74de767cbc5bee00a37f", + "2a2ab5b7d22a1e65e52bdb2cc2b787b8fa03472b", "support" ], "./check_stability.ini": [ @@ -370593,7 +373419,7 @@ "support" ], "./lint.whitelist": [ - "8ddb52bf2550eea7a4172b3c51c49d4e4e0be16c", + "7baaa34ac7481729c063fe60be0846d4f081c7f0", "support" ], "./serve.py": [ @@ -375076,6 +377902,10 @@ "44f0410fa4997df37a758204e2d446187393ba1b", "testharness" ], + "IndexedDB/idbcursor-iterating-update.htm": [ + "5c3cb1c25dbd7c582e2bd69bd71ff6a0b5acf83b", + "testharness" + ], "IndexedDB/idbcursor-key.htm": [ "7b880fd71da029795ac8dac2c667f6da57212f94", "testharness" @@ -376352,6 +379182,10 @@ "e4943f76bf23a3913d5698e5ab6f9dffb20a4543", "testharness" ], + "IndexedDB/wasm-module-value.html": [ + "71f4f3082028829ba17edcbc7fa7382d45109a30", + "testharness" + ], "IndexedDB/writer-starvation.htm": [ "76b34c6324cb5191aee56de0fd94e6132e65f15a", "testharness" @@ -377381,15 +380215,15 @@ "testharness" ], "XMLHttpRequest/abort-during-done.htm": [ - "f920658b70e4a51eb5b36d6cbd448d2dfc810f5c", + "e613a5d6f008f867b406105f1fabbeceb05f032f", "testharness" ], "XMLHttpRequest/abort-during-headers-received.htm": [ - "48c028b1b1a3e2adccbafa8c519329297f973e23", + "7ec861de6c552c3b799f4848408aca5c381f3ce1", "testharness" ], "XMLHttpRequest/abort-during-loading.htm": [ - "98e31e4b2a489543ee9914a75749bc958ef97fca", + "d536b0f1b6cd251a3ee1812501bf60e25130b543", "testharness" ], "XMLHttpRequest/abort-during-open.htm": [ @@ -377732,20 +380566,16 @@ "ac39c4b1e3b5bf515be99cff25c3f24b56548a77", "testharness" ], - "XMLHttpRequest/getallresponseheaders-cl.htm": [ - "29af8bb2fd0d53df3844674cf4a3938dd29176d9", - "testharness" - ], "XMLHttpRequest/getallresponseheaders-cookies.htm": [ "cb8eb74de6c416c8b7658e27b440b60096da0f6b", "testharness" ], "XMLHttpRequest/getallresponseheaders-status.htm": [ - "88912890762a62db8a836d91ec3bd76af63e6152", + "7c74fe531715cdccc1c1668380da2a2a7ca65c71", "testharness" ], "XMLHttpRequest/getallresponseheaders.htm": [ - "ac58e6914e3f10f487b543b80209931b19ea0401", + "b41c448a5b4201e22f61ee1c22d27b3b5b2eca83", "testharness" ], "XMLHttpRequest/getresponseheader-case-insensitive.htm": [ @@ -377797,7 +380627,7 @@ "testharness" ], "XMLHttpRequest/open-after-abort.htm": [ - "082fa646606cf8f278d61960f02fafa264e57e9f", + "514263c7a0b9c3494e535dfd5fb72e4cfb43e707", "testharness" ], "XMLHttpRequest/open-after-setrequestheader.htm": [ @@ -377877,7 +380707,7 @@ "testharness" ], "XMLHttpRequest/open-url-encoding.htm": [ - "ead2b1f6235cdf8e912214ce24f6d23262d2c826", + "a36c7b0e5919af7842883582ef9fc415d8f7ef25", "testharness" ], "XMLHttpRequest/open-url-fragment.htm": [ @@ -377893,15 +380723,15 @@ "testharness" ], "XMLHttpRequest/open-url-multi-window-2.htm": [ - "7c588ba393e37daf9acc80e2f0f81412cf494378", + "5c94fea7396f3a5e456171b439792170ec0aa077", "testharness" ], "XMLHttpRequest/open-url-multi-window-3.htm": [ - "85693bdfac0a3f72430c2b1645c14129d03a1e74", + "a69ef73ebc52cb2b0b4d67d5e74c2ccc05649651", "testharness" ], "XMLHttpRequest/open-url-multi-window-4.htm": [ - "bf6d652c2fd7d7e320299793d37503b36bea6bfe", + "524e58c70f963ee2766bcdc9ec17c7ad5f8c092b", "testharness" ], "XMLHttpRequest/open-url-multi-window-5.htm": [ @@ -377909,7 +380739,7 @@ "testharness" ], "XMLHttpRequest/open-url-multi-window-6.htm": [ - "b45b864be8c189b5b4113e9a7f3820fd8a08df6a", + "1b00cf39a9f06d8010555ade522c5d5791dd3dba", "testharness" ], "XMLHttpRequest/open-url-multi-window.htm": [ @@ -377917,11 +380747,11 @@ "testharness" ], "XMLHttpRequest/open-url-redirected-worker-origin.htm": [ - "877d6bd227709cc3ada32493ba6cc86683efade9", + "79b3d8035d2e7bc6fef2c69eb378ede3f55e6ff5", "testharness" ], "XMLHttpRequest/open-url-worker-origin.htm": [ - "1e377fb04baa8c55c2d656b572f285cfe71cbc7c", + "efb4caaad4450dc7be2c1db7bbfdfa771de11d9e", "testharness" ], "XMLHttpRequest/open-url-worker-simple.htm": [ @@ -377957,7 +380787,7 @@ "testharness" ], "XMLHttpRequest/overridemimetype-open-state-force-xml.htm": [ - "b1d4d1d9031c552d4c1c2f85d557546618c4d5b3", + "102e045c8828661819b0625aedb052b8c08da7b6", "testharness" ], "XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis.htm": [ @@ -378089,7 +380919,7 @@ "support" ], "XMLHttpRequest/resources/auth2/corsenabled.py": [ - "a70576e6ae82a030c6776923082e5aa50fad0078", + "4136b00b543096216f9f1ad1314c7062dda04179", "support" ], "XMLHttpRequest/resources/auth3/auth.py": [ @@ -378109,11 +380939,11 @@ "support" ], "XMLHttpRequest/resources/auth7/corsenabled.py": [ - "3f8fe382e3aa4ffe0e7c1ecb4571a55866bba27f", + "cbc1e4a39cc2e999ef7bd4053a600e8b0d515bb5", "support" ], "XMLHttpRequest/resources/auth8/corsenabled-no-authorize.py": [ - "c3add811ecf33bf3452fe471d27756dc152db81f", + "523fbc134ecfee5b13e4ef93508712847fc4e396", "support" ], "XMLHttpRequest/resources/auth9/auth.py": [ @@ -378309,11 +381139,11 @@ "support" ], "XMLHttpRequest/resources/workerxhr-origin-referrer.js": [ - "5ef8a93afae6fbf12baf915a5991f92f4028d0ce", + "9faaad75ec79580fe5f0a121c1f66266e7b2969e", "support" ], "XMLHttpRequest/resources/workerxhr-simple.js": [ - "b48ce760ab5040bcbd34294db218d0dabc016639", + "29d29ff7d37408b8e2ab1cebf16f3369ef4c287f", "support" ], "XMLHttpRequest/resources/xmlhttprequest-event-order.js": [ @@ -378341,23 +381171,23 @@ "support" ], "XMLHttpRequest/resources/xmlhttprequest-timeout-simple.js": [ - "f8d016f03e30f267966aface0b23eca70c206950", + "b6fb033f8fc5dfbd34cf03076e0790c4f58b1bc2", "support" ], "XMLHttpRequest/resources/xmlhttprequest-timeout-synconmain.js": [ - "4527753e9fe95d78087be66e3a6283da4569880c", + "aca45f5fb83de5fdd22143728effe996d14c9092", "support" ], "XMLHttpRequest/resources/xmlhttprequest-timeout-synconworker.js": [ - "745040b474bc48e847f991a84483026c4299bf7d", + "b5b3f69353c5e2f4d6b03b6fafa32e2df9bd5dc4", "support" ], "XMLHttpRequest/resources/xmlhttprequest-timeout-twice.js": [ - "ff4747c0461a304120d37c7fdd3ff4d70ece845a", + "0a491ff406bbf3090e770d6af316e2c47c46b13c", "support" ], "XMLHttpRequest/resources/xmlhttprequest-timeout.js": [ - "911d09cb5cf9aeefa81ae05f6e4ebb4398e83806", + "b884259bf6975838a5065fae472eaf6a4e8bf959", "support" ], "XMLHttpRequest/resources/zlib.py": [ @@ -378409,7 +381239,7 @@ "testharness" ], "XMLHttpRequest/responsedocument-decoding.htm": [ - "5435b4fe9a2fe3e85766aca35f4f42a14486164b", + "ab52417826b3953b71b5f6037ebd616d4b862ad4", "testharness" ], "XMLHttpRequest/responsetext-decoding.htm": [ @@ -378493,7 +381323,7 @@ "testharness" ], "XMLHttpRequest/send-authentication-competing-names-passwords.htm": [ - "d239a61cf7f64b7b29971d6ab7adb54f1c261fae", + "f44c72cd39779c91f525dd87dca5eed3697910c2", "testharness" ], "XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm": [ @@ -378569,7 +381399,7 @@ "testharness" ], "XMLHttpRequest/send-entity-body-document.htm": [ - "0c924d202013e617b91919e056d8a68417ff3f80", + "c5adfd8edca14061aef38217657112a070683401", "testharness" ], "XMLHttpRequest/send-entity-body-empty.htm": [ @@ -378577,11 +381407,11 @@ "testharness" ], "XMLHttpRequest/send-entity-body-get-head-async.htm": [ - "4e9e991801296cb2a0431fea3d9453e2b339b9db", + "1f2ed114e408365c7fbab6642db27e8e2046430a", "testharness" ], "XMLHttpRequest/send-entity-body-get-head.htm": [ - "8e1db0795f0c98428ad8e64dd294aeaef8500dcd", + "40848a8e40691622b8ea97e451bfbb850d76eef4", "testharness" ], "XMLHttpRequest/send-entity-body-none.htm": [ @@ -378629,15 +381459,15 @@ "testharness" ], "XMLHttpRequest/send-redirect-infinite.htm": [ - "b52adb15a67dce6adc04eac63bfe728d5c6489d8", + "ebf9820dbbdeeeda873f233848a0dadb10484038", "testharness" ], "XMLHttpRequest/send-redirect-no-location.htm": [ - "d58081367020f7f25474505781348596a6673d7f", + "65831f4839b014dcd17cc53cc0f338978580ceaf", "testharness" ], "XMLHttpRequest/send-redirect-post-upload.htm": [ - "f3167bd94f790f17c8a22e11a8f89bdf68e1bd48", + "381627d16e8ad618b3dd9d31c51466a154ad7200", "testharness" ], "XMLHttpRequest/send-redirect-to-cors.htm": [ @@ -378713,7 +381543,7 @@ "testharness" ], "XMLHttpRequest/setrequestheader-after-send.htm": [ - "48c6638b7eb71d41101280e0bbb422007d96ff53", + "e82560558c317be61c7afdf95831d017334f2710", "testharness" ], "XMLHttpRequest/setrequestheader-allow-empty-value.htm": [ @@ -378725,7 +381555,7 @@ "testharness" ], "XMLHttpRequest/setrequestheader-before-open.htm": [ - "fbaad967df5e7e1e825dd803476176d49d51b154", + "a48dc523bf2e53b15d2cac297a779d6af2cc94bd", "testharness" ], "XMLHttpRequest/setrequestheader-bogus-name.htm": [ @@ -378737,7 +381567,7 @@ "testharness" ], "XMLHttpRequest/setrequestheader-case-insensitive.htm": [ - "6a78415ee9a08f67aa2483f3ac1a4aa1c93d7944", + "a4b01fb28b9002f561900de30bddf1224eb63f7b", "testharness" ], "XMLHttpRequest/setrequestheader-content-type.htm": [ @@ -378841,7 +381671,7 @@ "testharness" ], "XMLHttpRequest/xmlhttprequest-timeout-reused.html": [ - "b5bc16063a204db539de49df0a7515f9baa8778c", + "dbd2edcfc16a58a89f13c783de1ba2529786095c", "testharness" ], "XMLHttpRequest/xmlhttprequest-timeout-simple.html": [ @@ -378881,7 +381711,7 @@ "testharness" ], "XMLHttpRequest/xmlhttprequest-unsent.htm": [ - "b960bef807da94c0146ed2f537eaa1e05ec9a0ab", + "8051e72ea6d92c55fa457eb88f00da3b7a873225", "testharness" ], "accelerometer/Accelerometer.https.html": [ @@ -400153,7 +402983,7 @@ "support" ], "content-security-policy/reporting/securitypolicyviolation-idl.html": [ - "5f64e7ffb556afda675d52b7f9987f04612dccfd", + "3f0b501b2ef45c7c59b3654b4f2aa2fed7710a7a", "testharness" ], "content-security-policy/sandbox/iframe-inside-csp.sub.html": [ @@ -401088,6 +403918,202 @@ "ff4d7ca289ea20fa00bca535fdcf929876a2278b", "testharness" ], + "cookie-store/cookie_store_tests.tentative.html": [ + "a370f31b8f2c0953e0230f377f3a06b5f6c74d9e", + "testharness" + ], + "cookie-store/cookie_store_tests.tentative.https.html": [ + "706f99692c2712fefc6555693bd8193ef824af2b", + "testharness" + ], + "cookie-store/cookie_store_tests_static.tentative.html": [ + "b8c90332eb487b2084a0ca011d2acda868fc1a36", + "testharness" + ], + "cookie-store/cookie_store_tests_static.tentative.https.html": [ + "92b427911ef551a8fe45ba9815806ece173dcf2a", + "testharness" + ], + "cookie-store/delete_cookies.tentative.html": [ + "f78bef2c934bac010d000331d69aa923a6c2d6fb", + "testharness" + ], + "cookie-store/delete_cookies.tentative.https.html": [ + "553e933c0aec3eacb23f02994f4ccf598391fc49", + "testharness" + ], + "cookie-store/delete_cookies_static.tentative.html": [ + "8657475cda36f15a81a3aa83aff32d5eb680d05d", + "testharness" + ], + "cookie-store/delete_cookies_static.tentative.https.html": [ + "f5ad565786a1d54dc445ac7249cbb4159957df7c", + "testharness" + ], + "cookie-store/document_cookie.tentative.html": [ + "336ba25988a44701027c7cfd70efa9f11d8a389b", + "testharness" + ], + "cookie-store/document_cookie.tentative.https.html": [ + "db08e7cbb72b5e1af56a58458fc0cff6415fbd91", + "testharness" + ], + "cookie-store/document_cookie_static.tentative.html": [ + "d7844a369785a2150a81f95bba4bfe7fc4bfc687", + "testharness" + ], + "cookie-store/document_cookie_static.tentative.https.html": [ + "4af584983ef1c52accab44a23ad543bbd7291404", + "testharness" + ], + "cookie-store/expiration.tentative.html": [ + "18435a38d1239d8b12b892018ea00e2fe0fd92f4", + "testharness" + ], + "cookie-store/expiration.tentative.https.html": [ + "1c123dd08eb978ceb09263df4b512b5a321c132b", + "testharness" + ], + "cookie-store/expiration_static.tentative.html": [ + "f71f95dec014e89bfaf8a26baf2d60c4d72a9611", + "testharness" + ], + "cookie-store/expiration_static.tentative.https.html": [ + "e7fe4735b9ccbadde6829e10109234bb7fa59328", + "testharness" + ], + "cookie-store/get_set_get_all.tentative.html": [ + "70e71c3cba821a1d97d53876b72bbd4ed0f6e976", + "testharness" + ], + "cookie-store/get_set_get_all.tentative.https.html": [ + "61ec0e51fc907c4dd6186c8499cf0bdfd6aad8fe", + "testharness" + ], + "cookie-store/get_set_get_all_static.tentative.html": [ + "4a339b426b1cc31af1d2b252fb728784de82c0c9", + "testharness" + ], + "cookie-store/get_set_get_all_static.tentative.https.html": [ + "efc155bfff9280aa6b782270a99b32d4943e95d8", + "testharness" + ], + "cookie-store/http_cookie_and_set_cookie_headers.tentative.html": [ + "93a9d4fbbda70461745f7f62f9b6fe23f73b0c7e", + "testharness" + ], + "cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html": [ + "95e61ca3ce90e4665f7061f7739c01772e6852fe", + "testharness" + ], + "cookie-store/meta_http_equiv_set_cookie.tentative.html": [ + "99d220e96f28fbd4b3cef89323e687e18e95ccf4", + "testharness" + ], + "cookie-store/meta_http_equiv_set_cookie.tentative.https.html": [ + "b632f52614c1ffcd9e460282c2b6ddc6408b941e", + "testharness" + ], + "cookie-store/meta_http_equiv_set_cookie_static.tentative.html": [ + "52973785d2e988fb6543c1aa8f4cd093e9075afb", + "testharness" + ], + "cookie-store/meta_http_equiv_set_cookie_static.tentative.https.html": [ + "9d9d04519d9a4916b28f7567a830c3a96bf163ed", + "testharness" + ], + "cookie-store/no_name_and_no_value.tentative.html": [ + "97068e2af8b42537e75990dbd9138de530dc8d5f", + "testharness" + ], + "cookie-store/no_name_and_no_value.tentative.https.html": [ + "bd1fdaa9c1e5266987d3b85bcecd5fe47fb2e6aa", + "testharness" + ], + "cookie-store/no_name_and_no_value_static.tentative.html": [ + "040357b08945c44bb8453deec5ed97393ecc8361", + "testharness" + ], + "cookie-store/no_name_and_no_value_static.tentative.https.html": [ + "4e9a265483bbcc0469ecb22db4bb61a28ba7ae3c", + "testharness" + ], + "cookie-store/no_name_equals_in_value.tentative.html": [ + "189c847e82ff403f2d1836d88e2af8c5db345f3d", + "testharness" + ], + "cookie-store/no_name_equals_in_value.tentative.https.html": [ + "cd6a35a4763ba7b0bca2d29a21b4800c5b6424eb", + "testharness" + ], + "cookie-store/no_name_equals_in_value_static.tentative.html": [ + "b12e7a43303372ddde410688e26ae027228dea09", + "testharness" + ], + "cookie-store/no_name_equals_in_value_static.tentative.https.html": [ + "f1ee338299654bb44f4e867dcbacd3aafe4acef5", + "testharness" + ], + "cookie-store/no_name_multiple_values.tentative.html": [ + "7e65cf3f0ed8e5e2722279805a34ed95444413d5", + "testharness" + ], + "cookie-store/no_name_multiple_values.tentative.https.html": [ + "0b5bd1414b928dedaa72db393a0a7bc79bb04f98", + "testharness" + ], + "cookie-store/no_name_multiple_values_static.tentative.html": [ + "daebad2df149f4b79998d7e10d51c27d34596487", + "testharness" + ], + "cookie-store/no_name_multiple_values_static.tentative.https.html": [ + "3e45ea4cde17c549f8761e143472e0862797fd6d", + "testharness" + ], + "cookie-store/observation.tentative.html": [ + "f2b16274bdd2c2f2117a0bfa126ae2d783211169", + "testharness" + ], + "cookie-store/observation.tentative.https.html": [ + "06f7ca48269b7bdc9a408c99df687e3af1eae5c4", + "testharness" + ], + "cookie-store/observation_static.tentative.html": [ + "8137d847b0d091dfb6a0cec6275942fb5234b296", + "testharness" + ], + "cookie-store/observation_static.tentative.https.html": [ + "6779d29a8e11c88f8adf2327c54b397d8d5b3fd9", + "testharness" + ], + "cookie-store/one_simple_origin_cookie.tentative.html": [ + "56737fe668c83b89b967c8a9edbbcbd314a7c087", + "testharness" + ], + "cookie-store/one_simple_origin_cookie.tentative.https.html": [ + "943f3a50da17574a393af9a18c791b80c9f6209e", + "testharness" + ], + "cookie-store/one_simple_origin_cookie_static.tentative.html": [ + "f28f4dfd2cac6be784ff106080d59962d6a1d2f8", + "testharness" + ], + "cookie-store/one_simple_origin_cookie_static.tentative.https.html": [ + "4d8ffa9f27e62e5893777b8a6c35a97fa002709b", + "testharness" + ], + "cookie-store/resources/cookie-store-tests.js": [ + "5d779c03a170a2a3fe210c28c027b90d7e74dbda", + "support" + ], + "cookie-store/resources/cookie_helper.py": [ + "4b95a4012e36cacceb6737f751e99634bd7326b9", + "support" + ], + "cookie-store/resources/testharness-helpers.js": [ + "ace8944b16bb4b7d1b2261b4f8ef549daff7fc7e", + "support" + ], "cookies/path/echo-cookie.html": [ "cbb91823a75f6e5c5ae435c5bc4c3b15a09c483e", "support" @@ -455153,21 +458179,41 @@ "manual" ], "css/CSS2/visufx/overflow-applies-to-001-ref.xht": [ - "6e8d828e5de8d64fd735d9394a1fac0dd1f761ad", + "34faa112c98e7420ef620e72449843194c8810ad", "support" ], "css/CSS2/visufx/overflow-applies-to-001.xht": [ - "d71b8aa84a63f7579a5f33b05960571e24417110", + "2e66f136b0b95bced4edb0b3f3b781131573df7f", + "reftest" + ], + "css/CSS2/visufx/overflow-propagation-001a.html": [ + "3aaba555d04ae9a0f6ee48aa7ac8fc4600554645", + "reftest" + ], + "css/CSS2/visufx/overflow-propagation-001b.html": [ + "c582c21c5fb8079047d6a2350351fede33c0f6db", + "reftest" + ], + "css/CSS2/visufx/overflow-propagation-001c.html": [ + "57062d2e0eb9077f965183aaed2a4c18675585a7", "reftest" ], "css/CSS2/visufx/shape-spaces-001.xht": [ "2449b8843064386c9854436bbc59eccb695b9578", "visual" ], + "css/CSS2/visufx/support/1x1-green.png": [ + "51e7b6974a09eda6cb31337717c5eaeb9c44b443", + "support" + ], "css/CSS2/visufx/support/60x60-gg-rr.png": [ "e4843d42a26189132e1bdd53e8618521330baeca", "support" ], + "css/CSS2/visufx/support/overflow-propagation-001-ref.html": [ + "b5df0a9c23e9556ade5179681452a40b913d392d", + "support" + ], "css/CSS2/visufx/visibility-001.xht": [ "f75f3db564058f469756ec1398078fc76473d632", "visual" @@ -455185,7 +458231,7 @@ "visual" ], "css/CSS2/visufx/visibility-005.xht": [ - "4ec93e1fe5f011bacc0ce5ca18cc632d23cc9852", + "97975b0d9dc10b986f78a5b2d339eaa8bf933fe4", "reftest" ], "css/CSS2/visufx/visibility-applies-to-001.xht": [ @@ -465404,642 +468450,638 @@ "820cad495f069d1badb3a727b9a2514269c6008e", "support" ], - "css/css-counter-styles/i18n/OWNERS": [ - "529a7d4e2cfca44f7804f88e375b383e2388c23d", - "support" - ], - "css/css-counter-styles/i18n/README": [ + "css/css-counter-styles/README": [ "be36f3153ffc6d9bde3da5e219063f046afe9d20", "support" ], - "css/css-counter-styles/i18n/css3-counter-styles-001.html": [ - "d993aaee23ab7aa0328575925e18f23091590e45", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-004.html": [ - "43825e5a2dfdf2178c13716c3321fdd858e58f1e", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-005.html": [ - "bbe04bdac4d175240d392f86db6fabd2186966ed", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-006.html": [ - "eb1e756c6446d83e61977310e24e795ebd0c52b9", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-007.html": [ - "f74eda337ba747bcfce74bdb7d1148d2bcf6a7d4", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-008.html": [ - "f14a53a313c17debc977765d6d676972b158d41a", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-009.html": [ - "18159df206fbedc76f7bfc308ce3131a2739aab4", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-010.html": [ - "f70bceefe6b71f578ebae1681b5dbc99615844f5", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-011.html": [ - "fe1fe5b981899e18d919af4fbb713ec3fe4c3e0e", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-012.html": [ - "b501c17aae1ff2d87e3783df54ef5fbfae385f79", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-014.html": [ - "68afd312d664c00a440b59e2e7c001a2696d7ab7", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-015.html": [ - "66b57e429a552561fb3f4087cdc5b52da12250d9", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-016.html": [ - "822991d17b3ca7183835df4cfb8979f04ebff48a", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-016a.html": [ - "bee6cda01f1b84aa51077afed284e2aafad7cf1c", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-017.html": [ - "8aebc73c706853ae4ca4fc66567868f692854236", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-019.html": [ - "2b2759e5ea42b19d8a4b1f13e8b1c1d3903467de", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-020.html": [ - "20e9efbefe1eedaf3a375ae75b234f82ea0ce922", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-020a.html": [ - "b6331abea33d0617c1dc204d8e7cc6ef1b43a17b", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-020b.html": [ - "a185ba745a376c3331bc81ee79b72487e2c5df50", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-021.html": [ - "84ee4a332c55c859c89900a5db85e50def0969cb", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-022.html": [ - "3a4a946ad76143ea21ba0b775b27e67c7d98741f", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-023.html": [ - "ce69094c3dd0fdd88f23b76377c553a5401d2809", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-024.html": [ - "1bafb20d2a9ecc987166494eec8a0970d5200ff3", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-024a.html": [ - "4c67f007932d79872479f8295ad7269539f1e79a", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-025.html": [ - "1953a5326b415a25ae3d0e0c1ad468672e2252e1", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-026.html": [ - "86f15a234bb14bc2fcf48ab2c9c42c4fe6d42497", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-027.html": [ - "2115ca2d168593a8e61d33ffc5c63b509a70cb01", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-028.html": [ - "ad26d11d5cc5ab8595257b9840663983d064c868", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-029.html": [ - "32fc1d2db82f75d0cf7b3040e7faa9826976fa36", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-030.html": [ - "bcd3b34533479a5a6a566d1f9386f5d14dfc7e9c", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-031.html": [ - "0810f34edae86b16ec30210c30a5bb1a5ae0a690", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-032.html": [ - "fa84f0514e4437d3f7bfa244d0c918adcdb2b387", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-033.html": [ - "bcb3ca5be245ce7d89834999957fdb315db003b8", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-034.html": [ - "220f8304161a5602abf3258a557f5256ab7feb4c", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-035.html": [ - "1af2bb329d442f11398fbd84fb41dda73c15ee6d", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-036.html": [ - "ab0fcf5491226a3699306a6e4ff577bbd66090fb", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-037.html": [ - "b06d0b531f36af2566df32c4a86b4e8a9cfc2400", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-038.html": [ - "f0ad524fd0b7d98ea344232c2853a9f2c8441bd8", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-039.html": [ - "8db164363ca47cd3f592cd2326c5df7e21dfbcc1", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-040.html": [ - "3230ece09362c7f428498286a481d259525a88db", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-041.html": [ - "8589e00aff56ffdc955d7b371e0194817ab7f28f", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-042.html": [ - "e3c02eb807ef634a725cd5cd8e47d247418e677b", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-043.html": [ - "fa571fa4cb114b8b0bed9e512f92836be62940f3", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-044.html": [ - "7b98e838c28295249ebab47611ce1bc43578a293", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-045.html": [ - "30010fe84cb70feab613ad55325219d2a5014517", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-046.html": [ - "06a8abd816a1f7c8f0a58e39a2e88c942a5a72f9", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-047.html": [ - "97e41edc2a10dfb95589ce63a578edea9c369a59", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-048.html": [ - "a7816df812b29d22db58e159aaa8c36655594eb8", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-049.html": [ - "dfda125645a7aa3e8a921b906942bfa22c9c29d2", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-050.html": [ - "0376077084df81da72dfb8bddbff7fc9efece91d", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-051.html": [ - "ff06e68592f2fecd6ff5d1e5ac8607227b63cdfe", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-052.html": [ - "c0bda2592f01e8a344b58147d2db0ff540f97f9f", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-053.html": [ - "c954c377281153aa39fef2fa9b1d2bbdf0518931", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-054.html": [ - "f85b01e052e47ced1d13b2a31850650a512c6e0e", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-055.html": [ - "5bf16b3724919f2aedc41278db2f2e86a61aefd7", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-056.html": [ - "00fe7a6fa97fe673d0c3d16ea99e5b4ab4a783d7", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-057.html": [ - "f194854a7e0d0f1c082a2644e6b335d61014a9bb", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-058.html": [ - "bee5b49f0bb71c6f72f6db95d4027a055897ac07", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-059.html": [ - "95553aed0082904555ecae7309aac4760dcd0e73", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-060.html": [ - "d34da9a09d0a2647f59b8c72c3a613410ae264d8", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-061.html": [ - "0a8d4fbd54f620683406062a2aa73a806244e42d", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-062.html": [ - "b12fbc7517f298c71c19e4c68bc399c0c71d5702", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-063.html": [ - "54e2657a32975b3ac5c8a9a54117faf73d522cff", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-064.html": [ - "9f41cda5f404c0442c192f3ca5d170d4080662d7", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-065.html": [ - "d4f6656f2232acdd75ca93af8ee887d34041fbca", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-066.html": [ - "b66da278a1f86fd45e120a21a19b762c9f0cde97", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-068.html": [ - "96d0b9fc15f0cdc17254e7b50b3df0a30dfe6eee", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-069.html": [ - "cbce79d24e6e5cfdb10f475a37b054ef9082210f", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-070.html": [ - "a51f3d3a4fd88219141d856675491da088cba789", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-071.html": [ - "128974e48eca6d5161029e2b7a10a684a9778980", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-072.html": [ - "67ea7a6c8e4d22eef80aa20bf83681e1027e747c", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-073.html": [ - "08633e4f9a423707537349674cc4001b23e9f080", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-074.html": [ - "85bc4f92704bca911768fba0f961b733a3391d89", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-075.html": [ - "493b68080aae4f042b3403a0d7ca2469153d71bf", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-076.html": [ - "a7fe5b1974d73b5243930cd53903d0be7ab56085", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-077.html": [ - "fdceb5802e4667d91039e7f52f70e7e3058438ad", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-078.html": [ - "191285929d9437d02eb825704e2aee8949030c8a", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-079.html": [ - "dfea02f44139de3933a1e0dec71b26653a7e3779", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-080.html": [ - "858e7d812786872b156234b733f0d4a92417a723", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-081.html": [ - "8ae1a1486bd70dd6f179c05c173ff6c9bf8d5ae1", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-082.html": [ - "6d8cbebc5316ae2beefbb5a1a6813cd16dee8d74", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-083.html": [ - "011c476e5cb08a70ce102977fbb7745191b03bbb", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-084.html": [ - "caf4c09f9a3d8f762b61cced0b479119d054d937", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-085.html": [ - "73d51d67a2840e2a0d61e1a0b5e01f13b52749d4", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-086.html": [ - "be59996c73292249ff41aacdee47eb4b95b9a93d", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-087.html": [ - "af9d73351e468b18adcb17fab8dfd6def4adf98a", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-088.html": [ - "ff9d0e7e098cf479e9cddef1f27a61d7d3b182a1", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-089.html": [ - "d04b9787c3f2792cbe0eb1af0476aad8c1cc70e3", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-090.html": [ - "fff143b4db48d5604bc75ced5d0d991e9bb368a5", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-101.html": [ + "css/css-counter-styles/arabic-indic/css3-counter-styles-101.html": [ "f8e90a43441cc8610ceace5cedcb5aae3af2a878", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-102.html": [ + "css/css-counter-styles/arabic-indic/css3-counter-styles-102.html": [ "f1c2a41bb102c851e82f5c766461b496d6d0377f", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-103.html": [ + "css/css-counter-styles/arabic-indic/css3-counter-styles-103.html": [ "99ecb11a5c36c9925213e2f514c4cfc96b1c79be", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-104.html": [ - "ab058c60be7d8e3ec20873cef8d474be395b6590", + "css/css-counter-styles/armenian/css3-counter-styles-006.html": [ + "eb1e756c6446d83e61977310e24e795ebd0c52b9", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-105.html": [ - "6c7d55ee9eddf3cf6e72996cacb3b7adab83ec6f", + "css/css-counter-styles/armenian/css3-counter-styles-007.html": [ + "f74eda337ba747bcfce74bdb7d1148d2bcf6a7d4", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-106.html": [ - "559e617472e6f3ab7002f51565dafaf717bff175", + "css/css-counter-styles/armenian/css3-counter-styles-008.html": [ + "f14a53a313c17debc977765d6d676972b158d41a", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-107.html": [ - "dacfd2e15c42055f4aa2c992bc7d2aec7835e025", + "css/css-counter-styles/armenian/css3-counter-styles-009.html": [ + "18159df206fbedc76f7bfc308ce3131a2739aab4", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-108.html": [ - "0dec38728994bac39adab1134047982518ef769a", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-109.html": [ - "5197b07fe0045cef03969c75cba1d63e317e87dc", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-110.html": [ - "e425d0cb37b5af743df7b13ae674a877dc5bc416", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-111.html": [ - "db74ecd6a31c952034ce30f241b9f06a70739776", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-112.html": [ - "c1d0a58991a20aabd7350c2159719433e5c8514a", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-114.html": [ - "4b160965a03ce619d9fb66e97f7af69e790df0ec", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-115.html": [ - "f6f183c54d54f86d222e85ae8f57ac8d1f3233c3", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-116.html": [ + "css/css-counter-styles/bengali/css3-counter-styles-116.html": [ "20aa51e0c98c82d0d641f5b211acf482c789fa26", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-117.html": [ + "css/css-counter-styles/bengali/css3-counter-styles-117.html": [ "63005d056be0ea4a8fcf6a9c6c014df0e6baaa35", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-118.html": [ + "css/css-counter-styles/bengali/css3-counter-styles-118.html": [ "dbfaae0538c8cd1e759b59712f53cd17388e7c48", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-119.html": [ - "2b70e7a765c3a57732ed4cc12c37d1c4d5c3efa8", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-120.html": [ - "522e3634c33d2f01b1046daebe953026875f33a1", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-121.html": [ - "2e7383e58f6bb1685e3a63afdc907dbc3ac617ca", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-122.html": [ - "990bde0b01d9052654b453d29e82054c88c677e3", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-123.html": [ - "38f644bf95789f4b2956c0cd304900ebc17bf745", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-124.html": [ - "652315a798877e4ac98fc0746ae15bba988363a2", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-125.html": [ - "248d256ba3784b685832b54a5e68952a0c4e046d", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-126.html": [ - "7830594710063c6112ff72835343a05089eb994f", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-127.html": [ - "fde3f444dd3f6859d763cf6a5978ec0e2a87f629", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-128.html": [ - "8322e024cfbe9a057664d6466fbc6967984ba3fd", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-129.html": [ - "34a0db0eab4a4764996aa8bd11c172b19657be02", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-130.html": [ - "91a71ef325d3df7ff49ffc8421f0ce07308cd5f7", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-131.html": [ - "246f742f007e2ea219b82b071029b28fb7e43976", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-132.html": [ - "4c5822b0c680d1ab3515d484bf8b53a39a4ffc6e", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-133.html": [ - "05c175d74146f1ebd288ddc3cf4c4578de6ee0ac", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-134.html": [ - "3a7d84fc325cd1dbca3fa8a30750dd92210aa49a", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-135.html": [ - "1894efe435b41d6ff5e407a6124d22533cc2f602", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-136.html": [ - "50a2da5f4f050ee02edf24de7ba65a8282351fe8", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-137.html": [ - "995dc63193cb28e63aa0842914c2d76eda964c22", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-138.html": [ - "06adb3c971f299bfb4bea16693c0be7d24202b8e", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-139.html": [ - "0ea7ab92d6d012c87097890fd3ac41753ce71185", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-140.html": [ - "ab23fa2b7170c0d6251fbcf80faf6148f357a9b8", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-141.html": [ - "612a39a01386635786a0a66b9e5708f9c40ae980", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-142.html": [ - "a595b6b30ffdf6670887a2b1d9f66aebeae03936", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-143.html": [ - "b6c6ed499c55d70de6636700cccd01ce638ac8ae", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-144.html": [ - "c278cafcc7cfb36321e65c3b44accae430c718d7", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-145.html": [ - "2000639dbcf1adff090e78bc22402b63636784b4", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-146.html": [ - "c9ae0a767ba2571548f3c08a6a18499a8893b25b", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-147.html": [ - "9cb4fa56e4ccc9fe28b97610b9a947ceb7e08abd", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-148.html": [ - "4268158632215d7ffdc2b4c61b52a0a02427cd91", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-149.html": [ - "3c423ea1657fd5a602cfbbfaf577ef3878f1dcd0", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-150.html": [ - "4ae1f1fb83f008069f9d78bc0be63abda513a751", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-151.html": [ - "21e64a3d9c150c9ca3c6796868925b158e85c1fd", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-152.html": [ - "f9177a67d7bdaaabcf9ef4e4da8989d1b0d76162", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-153.html": [ - "6cc264a63086b0c94a7940bcdd8fd5b09e5f1593", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-154.html": [ - "0fba01a3c1fe4a32987146c5c9875b8bd355af37", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-155.html": [ - "2f5e3997e3d9ea3542798656a44198ef3757fd4d", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-156.html": [ - "ef41bb325d7638d62da9ff5f2be5cba61427300b", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-157.html": [ - "ba139b46623ff43a80314151c709d32d8e9879e3", - "manual" - ], - "css/css-counter-styles/i18n/css3-counter-styles-158.html": [ + "css/css-counter-styles/cambodian/css3-counter-styles-158.html": [ "a334bd087e7a808567daeeae419a80466a377ef3", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-159.html": [ + "css/css-counter-styles/cambodian/css3-counter-styles-159.html": [ "3241c9cae1f5e2abe951a824735a3f122a428753", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-160.html": [ + "css/css-counter-styles/cambodian/css3-counter-styles-160.html": [ "f4bec32a0d8300e05418689e2b7557a47e2d0dae", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-161.html": [ - "803875a2cb684e080492549e45e2c1cb76154125", + "css/css-counter-styles/cjk-decimal/css3-counter-styles-001.html": [ + "d993aaee23ab7aa0328575925e18f23091590e45", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-162.html": [ - "205e6c9a77d03f83249925e31151701a94927eeb", + "css/css-counter-styles/cjk-decimal/css3-counter-styles-004.html": [ + "43825e5a2dfdf2178c13716c3321fdd858e58f1e", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-163.html": [ - "35d6b986a6ef63935a4072ab0740d49d0611f611", + "css/css-counter-styles/cjk-decimal/css3-counter-styles-005.html": [ + "bbe04bdac4d175240d392f86db6fabd2186966ed", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-201.html": [ + "css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-201.html": [ "542a50e4d3dfdecb4dcb78abcc6e762b1b917dd4", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-202.html": [ + "css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202.html": [ "534227920397cf65d65ebfb4bd590d5573bc765a", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-203.html": [ + "css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-203.html": [ "407599fcf5974cbc046d7b07e5f4ca74fcae9911", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-204.html": [ + "css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-204.html": [ "5034316b323929139743ebc09ced68bc1d4e6b4e", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-205.html": [ + "css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205.html": [ "0377635839d9fe42217e4885755e46c1480924c0", "manual" ], - "css/css-counter-styles/i18n/css3-counter-styles-206.html": [ + "css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-206.html": [ "fd1635508ac13761f1d0a80135c681ad1861cdaf", "manual" ], + "css/css-counter-styles/devanagari/css3-counter-styles-119.html": [ + "2b70e7a765c3a57732ed4cc12c37d1c4d5c3efa8", + "manual" + ], + "css/css-counter-styles/devanagari/css3-counter-styles-120.html": [ + "522e3634c33d2f01b1046daebe953026875f33a1", + "manual" + ], + "css/css-counter-styles/devanagari/css3-counter-styles-121.html": [ + "2e7383e58f6bb1685e3a63afdc907dbc3ac617ca", + "manual" + ], + "css/css-counter-styles/ethiopic-numeric/css3-counter-styles-068.html": [ + "96d0b9fc15f0cdc17254e7b50b3df0a30dfe6eee", + "manual" + ], + "css/css-counter-styles/ethiopic-numeric/css3-counter-styles-069.html": [ + "cbce79d24e6e5cfdb10f475a37b054ef9082210f", + "manual" + ], + "css/css-counter-styles/ethiopic-numeric/css3-counter-styles-070.html": [ + "a51f3d3a4fd88219141d856675491da088cba789", + "manual" + ], + "css/css-counter-styles/georgian/css3-counter-styles-010.html": [ + "f70bceefe6b71f578ebae1681b5dbc99615844f5", + "manual" + ], + "css/css-counter-styles/georgian/css3-counter-styles-011.html": [ + "fe1fe5b981899e18d919af4fbb713ec3fe4c3e0e", + "manual" + ], + "css/css-counter-styles/georgian/css3-counter-styles-012.html": [ + "b501c17aae1ff2d87e3783df54ef5fbfae385f79", + "manual" + ], + "css/css-counter-styles/georgian/css3-counter-styles-014.html": [ + "68afd312d664c00a440b59e2e7c001a2696d7ab7", + "manual" + ], + "css/css-counter-styles/gujarati/css3-counter-styles-122.html": [ + "990bde0b01d9052654b453d29e82054c88c677e3", + "manual" + ], + "css/css-counter-styles/gujarati/css3-counter-styles-123.html": [ + "38f644bf95789f4b2956c0cd304900ebc17bf745", + "manual" + ], + "css/css-counter-styles/gujarati/css3-counter-styles-124.html": [ + "652315a798877e4ac98fc0746ae15bba988363a2", + "manual" + ], + "css/css-counter-styles/gurmukhi/css3-counter-styles-125.html": [ + "248d256ba3784b685832b54a5e68952a0c4e046d", + "manual" + ], + "css/css-counter-styles/gurmukhi/css3-counter-styles-126.html": [ + "7830594710063c6112ff72835343a05089eb994f", + "manual" + ], + "css/css-counter-styles/gurmukhi/css3-counter-styles-127.html": [ + "fde3f444dd3f6859d763cf6a5978ec0e2a87f629", + "manual" + ], + "css/css-counter-styles/hebrew/css3-counter-styles-015.html": [ + "66b57e429a552561fb3f4087cdc5b52da12250d9", + "manual" + ], + "css/css-counter-styles/hebrew/css3-counter-styles-016.html": [ + "822991d17b3ca7183835df4cfb8979f04ebff48a", + "manual" + ], + "css/css-counter-styles/hebrew/css3-counter-styles-016a.html": [ + "bee6cda01f1b84aa51077afed284e2aafad7cf1c", + "manual" + ], + "css/css-counter-styles/hebrew/css3-counter-styles-017.html": [ + "8aebc73c706853ae4ca4fc66567868f692854236", + "manual" + ], + "css/css-counter-styles/hiragana-iroha/css3-counter-styles-033.html": [ + "bcb3ca5be245ce7d89834999957fdb315db003b8", + "manual" + ], + "css/css-counter-styles/hiragana-iroha/css3-counter-styles-034.html": [ + "220f8304161a5602abf3258a557f5256ab7feb4c", + "manual" + ], + "css/css-counter-styles/hiragana-iroha/css3-counter-styles-035.html": [ + "1af2bb329d442f11398fbd84fb41dda73c15ee6d", + "manual" + ], + "css/css-counter-styles/hiragana/css3-counter-styles-030.html": [ + "bcd3b34533479a5a6a566d1f9386f5d14dfc7e9c", + "manual" + ], + "css/css-counter-styles/hiragana/css3-counter-styles-031.html": [ + "0810f34edae86b16ec30210c30a5bb1a5ae0a690", + "manual" + ], + "css/css-counter-styles/hiragana/css3-counter-styles-032.html": [ + "fa84f0514e4437d3f7bfa244d0c918adcdb2b387", + "manual" + ], + "css/css-counter-styles/japanese-formal/css3-counter-styles-047.html": [ + "97e41edc2a10dfb95589ce63a578edea9c369a59", + "manual" + ], + "css/css-counter-styles/japanese-formal/css3-counter-styles-048.html": [ + "a7816df812b29d22db58e159aaa8c36655594eb8", + "manual" + ], + "css/css-counter-styles/japanese-formal/css3-counter-styles-049.html": [ + "dfda125645a7aa3e8a921b906942bfa22c9c29d2", + "manual" + ], + "css/css-counter-styles/japanese-formal/css3-counter-styles-050.html": [ + "0376077084df81da72dfb8bddbff7fc9efece91d", + "manual" + ], + "css/css-counter-styles/japanese-formal/css3-counter-styles-051.html": [ + "ff06e68592f2fecd6ff5d1e5ac8607227b63cdfe", + "manual" + ], + "css/css-counter-styles/japanese-informal/css3-counter-styles-042.html": [ + "e3c02eb807ef634a725cd5cd8e47d247418e677b", + "manual" + ], + "css/css-counter-styles/japanese-informal/css3-counter-styles-043.html": [ + "fa571fa4cb114b8b0bed9e512f92836be62940f3", + "manual" + ], + "css/css-counter-styles/japanese-informal/css3-counter-styles-044.html": [ + "7b98e838c28295249ebab47611ce1bc43578a293", + "manual" + ], + "css/css-counter-styles/japanese-informal/css3-counter-styles-045.html": [ + "30010fe84cb70feab613ad55325219d2a5014517", + "manual" + ], + "css/css-counter-styles/japanese-informal/css3-counter-styles-046.html": [ + "06a8abd816a1f7c8f0a58e39a2e88c942a5a72f9", + "manual" + ], + "css/css-counter-styles/kannada/css3-counter-styles-128.html": [ + "8322e024cfbe9a057664d6466fbc6967984ba3fd", + "manual" + ], + "css/css-counter-styles/kannada/css3-counter-styles-129.html": [ + "34a0db0eab4a4764996aa8bd11c172b19657be02", + "manual" + ], + "css/css-counter-styles/kannada/css3-counter-styles-130.html": [ + "91a71ef325d3df7ff49ffc8421f0ce07308cd5f7", + "manual" + ], + "css/css-counter-styles/katakana-iroha/css3-counter-styles-039.html": [ + "8db164363ca47cd3f592cd2326c5df7e21dfbcc1", + "manual" + ], + "css/css-counter-styles/katakana-iroha/css3-counter-styles-040.html": [ + "3230ece09362c7f428498286a481d259525a88db", + "manual" + ], + "css/css-counter-styles/katakana-iroha/css3-counter-styles-041.html": [ + "8589e00aff56ffdc955d7b371e0194817ab7f28f", + "manual" + ], + "css/css-counter-styles/katakana/css3-counter-styles-036.html": [ + "ab0fcf5491226a3699306a6e4ff577bbd66090fb", + "manual" + ], + "css/css-counter-styles/katakana/css3-counter-styles-037.html": [ + "b06d0b531f36af2566df32c4a86b4e8a9cfc2400", + "manual" + ], + "css/css-counter-styles/katakana/css3-counter-styles-038.html": [ + "f0ad524fd0b7d98ea344232c2853a9f2c8441bd8", + "manual" + ], + "css/css-counter-styles/khmer/css3-counter-styles-161.html": [ + "803875a2cb684e080492549e45e2c1cb76154125", + "manual" + ], + "css/css-counter-styles/khmer/css3-counter-styles-162.html": [ + "205e6c9a77d03f83249925e31151701a94927eeb", + "manual" + ], + "css/css-counter-styles/khmer/css3-counter-styles-163.html": [ + "35d6b986a6ef63935a4072ab0740d49d0611f611", + "manual" + ], + "css/css-counter-styles/korean-hangul-formal/css3-counter-styles-052.html": [ + "c0bda2592f01e8a344b58147d2db0ff540f97f9f", + "manual" + ], + "css/css-counter-styles/korean-hangul-formal/css3-counter-styles-053.html": [ + "c954c377281153aa39fef2fa9b1d2bbdf0518931", + "manual" + ], + "css/css-counter-styles/korean-hangul-formal/css3-counter-styles-054.html": [ + "f85b01e052e47ced1d13b2a31850650a512c6e0e", + "manual" + ], + "css/css-counter-styles/korean-hangul-formal/css3-counter-styles-055.html": [ + "5bf16b3724919f2aedc41278db2f2e86a61aefd7", + "manual" + ], + "css/css-counter-styles/korean-hangul-formal/css3-counter-styles-056.html": [ + "00fe7a6fa97fe673d0c3d16ea99e5b4ab4a783d7", + "manual" + ], + "css/css-counter-styles/korean-hanja-formal/css3-counter-styles-062.html": [ + "b12fbc7517f298c71c19e4c68bc399c0c71d5702", + "manual" + ], + "css/css-counter-styles/korean-hanja-formal/css3-counter-styles-063.html": [ + "54e2657a32975b3ac5c8a9a54117faf73d522cff", + "manual" + ], + "css/css-counter-styles/korean-hanja-formal/css3-counter-styles-064.html": [ + "9f41cda5f404c0442c192f3ca5d170d4080662d7", + "manual" + ], + "css/css-counter-styles/korean-hanja-formal/css3-counter-styles-065.html": [ + "d4f6656f2232acdd75ca93af8ee887d34041fbca", + "manual" + ], + "css/css-counter-styles/korean-hanja-formal/css3-counter-styles-066.html": [ + "b66da278a1f86fd45e120a21a19b762c9f0cde97", + "manual" + ], + "css/css-counter-styles/korean-hanja-informal/css3-counter-styles-057.html": [ + "f194854a7e0d0f1c082a2644e6b335d61014a9bb", + "manual" + ], + "css/css-counter-styles/korean-hanja-informal/css3-counter-styles-058.html": [ + "bee5b49f0bb71c6f72f6db95d4027a055897ac07", + "manual" + ], + "css/css-counter-styles/korean-hanja-informal/css3-counter-styles-059.html": [ + "95553aed0082904555ecae7309aac4760dcd0e73", + "manual" + ], + "css/css-counter-styles/korean-hanja-informal/css3-counter-styles-060.html": [ + "d34da9a09d0a2647f59b8c72c3a613410ae264d8", + "manual" + ], + "css/css-counter-styles/korean-hanja-informal/css3-counter-styles-061.html": [ + "0a8d4fbd54f620683406062a2aa73a806244e42d", + "manual" + ], + "css/css-counter-styles/lao/css3-counter-styles-131.html": [ + "246f742f007e2ea219b82b071029b28fb7e43976", + "manual" + ], + "css/css-counter-styles/lao/css3-counter-styles-132.html": [ + "4c5822b0c680d1ab3515d484bf8b53a39a4ffc6e", + "manual" + ], + "css/css-counter-styles/lao/css3-counter-styles-133.html": [ + "05c175d74146f1ebd288ddc3cf4c4578de6ee0ac", + "manual" + ], + "css/css-counter-styles/lower-armenian/css3-counter-styles-111.html": [ + "db74ecd6a31c952034ce30f241b9f06a70739776", + "manual" + ], + "css/css-counter-styles/lower-armenian/css3-counter-styles-112.html": [ + "c1d0a58991a20aabd7350c2159719433e5c8514a", + "manual" + ], + "css/css-counter-styles/lower-armenian/css3-counter-styles-114.html": [ + "4b160965a03ce619d9fb66e97f7af69e790df0ec", + "manual" + ], + "css/css-counter-styles/lower-armenian/css3-counter-styles-115.html": [ + "f6f183c54d54f86d222e85ae8f57ac8d1f3233c3", + "manual" + ], + "css/css-counter-styles/lower-greek/css3-counter-styles-027.html": [ + "2115ca2d168593a8e61d33ffc5c63b509a70cb01", + "manual" + ], + "css/css-counter-styles/lower-greek/css3-counter-styles-028.html": [ + "ad26d11d5cc5ab8595257b9840663983d064c868", + "manual" + ], + "css/css-counter-styles/lower-greek/css3-counter-styles-029.html": [ + "32fc1d2db82f75d0cf7b3040e7faa9826976fa36", + "manual" + ], + "css/css-counter-styles/lower-roman/css3-counter-styles-019.html": [ + "2b2759e5ea42b19d8a4b1f13e8b1c1d3903467de", + "manual" + ], + "css/css-counter-styles/lower-roman/css3-counter-styles-020.html": [ + "20e9efbefe1eedaf3a375ae75b234f82ea0ce922", + "manual" + ], + "css/css-counter-styles/lower-roman/css3-counter-styles-020a.html": [ + "b6331abea33d0617c1dc204d8e7cc6ef1b43a17b", + "manual" + ], + "css/css-counter-styles/lower-roman/css3-counter-styles-020b.html": [ + "a185ba745a376c3331bc81ee79b72487e2c5df50", + "manual" + ], + "css/css-counter-styles/lower-roman/css3-counter-styles-021.html": [ + "84ee4a332c55c859c89900a5db85e50def0969cb", + "manual" + ], + "css/css-counter-styles/lower-roman/css3-counter-styles-022.html": [ + "3a4a946ad76143ea21ba0b775b27e67c7d98741f", + "manual" + ], + "css/css-counter-styles/malayalam/css3-counter-styles-134.html": [ + "3a7d84fc325cd1dbca3fa8a30750dd92210aa49a", + "manual" + ], + "css/css-counter-styles/malayalam/css3-counter-styles-135.html": [ + "1894efe435b41d6ff5e407a6124d22533cc2f602", + "manual" + ], + "css/css-counter-styles/malayalam/css3-counter-styles-136.html": [ + "50a2da5f4f050ee02edf24de7ba65a8282351fe8", + "manual" + ], + "css/css-counter-styles/mongolian/css3-counter-styles-137.html": [ + "995dc63193cb28e63aa0842914c2d76eda964c22", + "manual" + ], + "css/css-counter-styles/mongolian/css3-counter-styles-138.html": [ + "06adb3c971f299bfb4bea16693c0be7d24202b8e", + "manual" + ], + "css/css-counter-styles/mongolian/css3-counter-styles-139.html": [ + "0ea7ab92d6d012c87097890fd3ac41753ce71185", + "manual" + ], + "css/css-counter-styles/myanmar/css3-counter-styles-140.html": [ + "ab23fa2b7170c0d6251fbcf80faf6148f357a9b8", + "manual" + ], + "css/css-counter-styles/myanmar/css3-counter-styles-141.html": [ + "612a39a01386635786a0a66b9e5708f9c40ae980", + "manual" + ], + "css/css-counter-styles/myanmar/css3-counter-styles-142.html": [ + "a595b6b30ffdf6670887a2b1d9f66aebeae03936", + "manual" + ], + "css/css-counter-styles/oriya/css3-counter-styles-143.html": [ + "b6c6ed499c55d70de6636700cccd01ce638ac8ae", + "manual" + ], + "css/css-counter-styles/oriya/css3-counter-styles-144.html": [ + "c278cafcc7cfb36321e65c3b44accae430c718d7", + "manual" + ], + "css/css-counter-styles/oriya/css3-counter-styles-145.html": [ + "2000639dbcf1adff090e78bc22402b63636784b4", + "manual" + ], + "css/css-counter-styles/persian/css3-counter-styles-104.html": [ + "ab058c60be7d8e3ec20873cef8d474be395b6590", + "manual" + ], + "css/css-counter-styles/persian/css3-counter-styles-105.html": [ + "6c7d55ee9eddf3cf6e72996cacb3b7adab83ec6f", + "manual" + ], + "css/css-counter-styles/persian/css3-counter-styles-106.html": [ + "559e617472e6f3ab7002f51565dafaf717bff175", + "manual" + ], + "css/css-counter-styles/simp-chinese-formal/css3-counter-styles-076.html": [ + "a7fe5b1974d73b5243930cd53903d0be7ab56085", + "manual" + ], + "css/css-counter-styles/simp-chinese-formal/css3-counter-styles-077.html": [ + "fdceb5802e4667d91039e7f52f70e7e3058438ad", + "manual" + ], + "css/css-counter-styles/simp-chinese-formal/css3-counter-styles-078.html": [ + "191285929d9437d02eb825704e2aee8949030c8a", + "manual" + ], + "css/css-counter-styles/simp-chinese-formal/css3-counter-styles-079.html": [ + "dfea02f44139de3933a1e0dec71b26653a7e3779", + "manual" + ], + "css/css-counter-styles/simp-chinese-formal/css3-counter-styles-080.html": [ + "858e7d812786872b156234b733f0d4a92417a723", + "manual" + ], + "css/css-counter-styles/simp-chinese-informal/css3-counter-styles-071.html": [ + "128974e48eca6d5161029e2b7a10a684a9778980", + "manual" + ], + "css/css-counter-styles/simp-chinese-informal/css3-counter-styles-072.html": [ + "67ea7a6c8e4d22eef80aa20bf83681e1027e747c", + "manual" + ], + "css/css-counter-styles/simp-chinese-informal/css3-counter-styles-073.html": [ + "08633e4f9a423707537349674cc4001b23e9f080", + "manual" + ], + "css/css-counter-styles/simp-chinese-informal/css3-counter-styles-074.html": [ + "85bc4f92704bca911768fba0f961b733a3391d89", + "manual" + ], + "css/css-counter-styles/simp-chinese-informal/css3-counter-styles-075.html": [ + "493b68080aae4f042b3403a0d7ca2469153d71bf", + "manual" + ], + "css/css-counter-styles/tamil/css3-counter-styles-146.html": [ + "c9ae0a767ba2571548f3c08a6a18499a8893b25b", + "manual" + ], + "css/css-counter-styles/tamil/css3-counter-styles-147.html": [ + "9cb4fa56e4ccc9fe28b97610b9a947ceb7e08abd", + "manual" + ], + "css/css-counter-styles/tamil/css3-counter-styles-148.html": [ + "4268158632215d7ffdc2b4c61b52a0a02427cd91", + "manual" + ], + "css/css-counter-styles/telugu/css3-counter-styles-149.html": [ + "3c423ea1657fd5a602cfbbfaf577ef3878f1dcd0", + "manual" + ], + "css/css-counter-styles/telugu/css3-counter-styles-150.html": [ + "4ae1f1fb83f008069f9d78bc0be63abda513a751", + "manual" + ], + "css/css-counter-styles/telugu/css3-counter-styles-151.html": [ + "21e64a3d9c150c9ca3c6796868925b158e85c1fd", + "manual" + ], + "css/css-counter-styles/thai/css3-counter-styles-152.html": [ + "f9177a67d7bdaaabcf9ef4e4da8989d1b0d76162", + "manual" + ], + "css/css-counter-styles/thai/css3-counter-styles-153.html": [ + "6cc264a63086b0c94a7940bcdd8fd5b09e5f1593", + "manual" + ], + "css/css-counter-styles/thai/css3-counter-styles-154.html": [ + "0fba01a3c1fe4a32987146c5c9875b8bd355af37", + "manual" + ], + "css/css-counter-styles/tibetan/css3-counter-styles-155.html": [ + "2f5e3997e3d9ea3542798656a44198ef3757fd4d", + "manual" + ], + "css/css-counter-styles/tibetan/css3-counter-styles-156.html": [ + "ef41bb325d7638d62da9ff5f2be5cba61427300b", + "manual" + ], + "css/css-counter-styles/tibetan/css3-counter-styles-157.html": [ + "ba139b46623ff43a80314151c709d32d8e9879e3", + "manual" + ], + "css/css-counter-styles/trad-chinese-formal/css3-counter-styles-086.html": [ + "be59996c73292249ff41aacdee47eb4b95b9a93d", + "manual" + ], + "css/css-counter-styles/trad-chinese-formal/css3-counter-styles-087.html": [ + "af9d73351e468b18adcb17fab8dfd6def4adf98a", + "manual" + ], + "css/css-counter-styles/trad-chinese-formal/css3-counter-styles-088.html": [ + "ff9d0e7e098cf479e9cddef1f27a61d7d3b182a1", + "manual" + ], + "css/css-counter-styles/trad-chinese-formal/css3-counter-styles-089.html": [ + "d04b9787c3f2792cbe0eb1af0476aad8c1cc70e3", + "manual" + ], + "css/css-counter-styles/trad-chinese-formal/css3-counter-styles-090.html": [ + "fff143b4db48d5604bc75ced5d0d991e9bb368a5", + "manual" + ], + "css/css-counter-styles/trad-chinese-informal/css3-counter-styles-081.html": [ + "8ae1a1486bd70dd6f179c05c173ff6c9bf8d5ae1", + "manual" + ], + "css/css-counter-styles/trad-chinese-informal/css3-counter-styles-082.html": [ + "6d8cbebc5316ae2beefbb5a1a6813cd16dee8d74", + "manual" + ], + "css/css-counter-styles/trad-chinese-informal/css3-counter-styles-083.html": [ + "011c476e5cb08a70ce102977fbb7745191b03bbb", + "manual" + ], + "css/css-counter-styles/trad-chinese-informal/css3-counter-styles-084.html": [ + "caf4c09f9a3d8f762b61cced0b479119d054d937", + "manual" + ], + "css/css-counter-styles/trad-chinese-informal/css3-counter-styles-085.html": [ + "73d51d67a2840e2a0d61e1a0b5e01f13b52749d4", + "manual" + ], + "css/css-counter-styles/upper-armenian/css3-counter-styles-107.html": [ + "dacfd2e15c42055f4aa2c992bc7d2aec7835e025", + "manual" + ], + "css/css-counter-styles/upper-armenian/css3-counter-styles-108.html": [ + "0dec38728994bac39adab1134047982518ef769a", + "manual" + ], + "css/css-counter-styles/upper-armenian/css3-counter-styles-109.html": [ + "5197b07fe0045cef03969c75cba1d63e317e87dc", + "manual" + ], + "css/css-counter-styles/upper-armenian/css3-counter-styles-110.html": [ + "e425d0cb37b5af743df7b13ae674a877dc5bc416", + "manual" + ], + "css/css-counter-styles/upper-roman/css3-counter-styles-023.html": [ + "ce69094c3dd0fdd88f23b76377c553a5401d2809", + "manual" + ], + "css/css-counter-styles/upper-roman/css3-counter-styles-024.html": [ + "1bafb20d2a9ecc987166494eec8a0970d5200ff3", + "manual" + ], + "css/css-counter-styles/upper-roman/css3-counter-styles-024a.html": [ + "4c67f007932d79872479f8295ad7269539f1e79a", + "manual" + ], + "css/css-counter-styles/upper-roman/css3-counter-styles-025.html": [ + "1953a5326b415a25ae3d0e0c1ad468672e2252e1", + "manual" + ], + "css/css-counter-styles/upper-roman/css3-counter-styles-026.html": [ + "86f15a234bb14bc2fcf48ab2c9c42c4fe6d42497", + "manual" + ], "css/css-display/OWNERS": [ "53a7e0c42cacd38378099aa9637d1a1ec4dc1040", "support" @@ -468941,11 +471983,11 @@ "testharness" ], "css/css-flexbox/percentage-heights-000.html": [ - "9f5db2023fe4ac61108546602a5cdd2fe6ad8203", + "0451d5a5ada150905e9470ab396719e6ac446bad", "testharness" ], "css/css-flexbox/percentage-heights-001.html": [ - "0bc00907610df6c5e03b884bf1a5633d80eff38b", + "72a7451bc09832680ad40b1a729702d939f9c058", "testharness" ], "css/css-flexbox/percentage-heights-002-ref.html": [ @@ -468956,6 +471998,10 @@ "1b41b57b585955953e6c5ae2bc3b0bfdd1e63cf9", "reftest" ], + "css/css-flexbox/percentage-heights-003.html": [ + "8a868450fe85cd33deaf1e0960fa607125ead2dd", + "testharness" + ], "css/css-flexbox/percentage-widths-001-ref.html": [ "a139951dbeb1676b7add9a43d154595dc2e9859b", "support" @@ -468965,19 +472011,19 @@ "reftest" ], "css/css-flexbox/position-absolute-001.html": [ - "1c12d945aaece1a3c7c9e6b4b9986d5351956c4c", + "ef13d312d0d5f28138864d982ef9bf6c19b95d39", "testharness" ], "css/css-flexbox/position-absolute-002.html": [ - "f8b0ae2faf24d6810e3936307cd34a0b246fb3a8", + "70e430c7095849379bd7e8662c18cb6c77420e46", "testharness" ], "css/css-flexbox/position-absolute-003.html": [ - "d1982c9167f9e73848b96722392b6c7e8ca7372e", + "5d4b78729efbdcc91068a4789a9b437e4e5d5da8", "testharness" ], "css/css-flexbox/position-absolute-004.html": [ - "42bf61d230422676bcf0e2bae1f7dffee1ba340f", + "bbfd06d1278c1fb0a10c25e5f286abf10e544160", "testharness" ], "css/css-flexbox/position-absolute-005-ref.html": [ @@ -469105,11 +472151,11 @@ "support" ], "css/css-flexbox/reference/ttwf-reftest-flex-direction-column-ref.html": [ - "3863aec8cd6c0fd0379f570c974626ea5c557f88", + "ec5b1f75132b509b02873d5b24fa9bd22ed8019e", "support" ], "css/css-flexbox/reference/ttwf-reftest-flex-direction-column-reverse-ref.html": [ - "8876dc9133afc22751119e1ff062fdcdbbaca886", + "41a79ab625b6f44e066366c0cff181d13dfe4f98", "support" ], "css/css-flexbox/reference/ttwf-reftest-flex-direction-row-reverse-ref.html": [ @@ -469117,7 +472163,7 @@ "support" ], "css/css-flexbox/reference/ttwf-reftest-flex-inline-ref.html": [ - "a5cf74adb22c9f1b3a8e61eda7667ee9041fc5ca", + "55872e46f3e28f0b31de5abf2cfb93982db44e88", "support" ], "css/css-flexbox/reference/ttwf-reftest-flex-order-ref.html": [ @@ -469125,11 +472171,11 @@ "support" ], "css/css-flexbox/reference/ttwf-reftest-flex-wrap-ref.html": [ - "e0da3caef1bccc0e14c3de1560910a101a0b100a", + "a0a125b143a1fe471f32adc49bf476448ce68355", "support" ], "css/css-flexbox/reference/ttwf-reftest-flex-wrap-reverse-ref.html": [ - "089c9247fc93bd68c1619cf3ab3599240bc0a360", + "5ba72b17696d1bb80c958b6c1516dfce1d1e4498", "support" ], "css/css-flexbox/support/100x100-green.png": [ @@ -469349,11 +472395,11 @@ "reftest" ], "css/css-flexbox/ttwf-reftest-flex-direction-column-reverse.html": [ - "8dd3d964a20c8e621e1b55dd82680ca5129a0d36", + "d41c2a18de84faa5a31b10d4992c5720d702a366", "reftest" ], "css/css-flexbox/ttwf-reftest-flex-direction-column.html": [ - "d81c5a72806fc331ba8bf80746983ee34d0fec01", + "0a48117b222f6b7b5c1da189f81b03f226452e15", "reftest" ], "css/css-flexbox/ttwf-reftest-flex-direction-row-reverse.html": [ @@ -469361,19 +472407,19 @@ "reftest" ], "css/css-flexbox/ttwf-reftest-flex-inline.html": [ - "54da5d1baf037f07bb758a2c28f0ef0352a79aff", + "5f82178e8f32c36c7c918b190c9b0bfcf0f960c9", "reftest" ], "css/css-flexbox/ttwf-reftest-flex-order.html": [ - "190688ba86d91a9abcfef4fef253c814f00229f8", + "ef3bd38ddd00a547ebc71318e2b851e1b237c327", "reftest" ], "css/css-flexbox/ttwf-reftest-flex-wrap-reverse.html": [ - "cdd753b4f4123b17866d98f36b38db06491c6d3d", + "8a334502e67e1a4fd260375936b58e637099477c", "reftest" ], "css/css-flexbox/ttwf-reftest-flex-wrap.html": [ - "d0664cf789286d019105fdf37fcfd7c87a63a8a2", + "611e8fa0fce186070bd20ec395ad999a2a752138", "reftest" ], "css/css-flexbox/visibility-collapse-001.htm": [ @@ -469412,6 +472458,10 @@ "b4992b381f6a8f83ee043f379e614b43c7ead393", "reftest" ], + "css/css-fonts/font-display/font-display-failure-fallback.html": [ + "9fbf0c808f338c5d668554ab62f10cfe0ca93c91", + "testharness" + ], "css/css-fonts/font-display/font-display-ref.html": [ "26fcc2758c649ce922397cd1c4aa862bdbf1e6a0", "support" @@ -470321,7 +473371,7 @@ "visual" ], "css/css-fonts/matching/OWNERS": [ - "2f711301297bd297b6bf5ccde958cd7a59c9e678", + "055e3c8b6452650f598c25cdc22201ff2b2171b6", "support" ], "css/css-fonts/matching/README.md": [ @@ -476457,7 +479507,7 @@ "testharness" ], "css/css-fonts/variations/OWNERS": [ - "2f711301297bd297b6bf5ccde958cd7a59c9e678", + "055e3c8b6452650f598c25cdc22201ff2b2171b6", "support" ], "css/css-fonts/variations/font-parse-numeric-stretch-style-weight.html": [ @@ -476593,15 +479643,15 @@ "reftest" ], "css/css-grid/abspos/absolute-positioning-definite-sizes-001.html": [ - "8d917ad490835e4248956865571e3c4762973d0b", + "811c6e2d1614516ce210df40226f3de74854c991", "testharness" ], "css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html": [ - "ae306e9e6e980d4a575d6d10cee6401379283014", + "f35bf44f588c631cf85021df55d34b5726ceff03", "testharness" ], "css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html": [ - "b64d2b6f87d105d4631b7c539ed451e598d9a0f1", + "4f65457310c6f1127c10821159a37b89caf26abd", "testharness" ], "css/css-grid/abspos/grid-item-absolute-positioning-dynamic-001.html": [ @@ -476645,43 +479695,43 @@ "reftest" ], "css/css-grid/abspos/grid-positioned-items-content-alignment-001.html": [ - "53c8139254cd0f62abf20b434132cd6ffa04be0f", + "cb977a8f3e05d48e92ffecad0031834087a2ef97", "testharness" ], "css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html": [ - "566dcee47358c1e490786d0a8b995e4dbc11f076", + "6c8ff0ddb3895d6a13d8b1354dea5ef4324c9b03", "testharness" ], "css/css-grid/abspos/grid-positioned-items-gaps-001.html": [ - "490d474f560501ede900e5cf448b0dc9dc9fa116", + "29cc4d5bb2a27e59907b6f2e1c32fe260cd3f4c8", "testharness" ], "css/css-grid/abspos/grid-positioned-items-gaps-rtl-001.html": [ - "8666f9bcaca645602fc2e790db2ab4cc7a28af5c", + "662bd6d9451786ba0da556c3049e7747f2d9d3e7", "testharness" ], "css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html": [ - "eb058474779ddb8e4a31546fc2d89126a562e465", + "dfeb40d25bf666ce73fda44e3cc5ad152cc55116", "testharness" ], "css/css-grid/abspos/grid-positioned-items-implicit-grid-line-001.html": [ - "d0e71cc3e8fce7329982eb37c1c1747fc62fce9e", + "4e687882f7721dae22c1a65789fe1cfbfcfa86e2", "testharness" ], "css/css-grid/abspos/grid-positioned-items-padding-001.html": [ - "b4c31742faf89abbfd22fec978c77ba0836d7f03", + "9f1dfe2b066d9df4bbce276a16849de8779d8b6e", "testharness" ], "css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html": [ - "e33299485785ec3ae16b7fd9b727c651ce5c2a8e", + "92fa645b99f912e38c55d7a8f6a8c7983e0960d8", "testharness" ], "css/css-grid/abspos/grid-positioned-items-within-grid-implicit-track-001.html": [ - "6ca9c08237d698a8f29ab04dc0cae117b04d7c02", + "1a198448681696a8fed8c8240af0d069b34a50ad", "testharness" ], "css/css-grid/abspos/grid-sizing-positioned-items-001.html": [ - "9389a43ede1cdadda820a5db21cb08cf25b4f9b9", + "a626f8ac567d7577d7f0a8b27c7104fda7bb7d86", "testharness" ], "css/css-grid/abspos/orthogonal-positioned-grid-items-001-ref.html": [ @@ -476925,11 +479975,11 @@ "reftest" ], "css/css-grid/abspos/positioned-grid-items-should-not-create-implicit-tracks-001.html": [ - "20fce922797d8d29a3301d90d0113f659827b1a8", + "7f5640648062fe8b02e98b67d48c1af1914cdab7", "testharness" ], "css/css-grid/abspos/positioned-grid-items-should-not-take-up-space-001.html": [ - "171c6bbf8b1126781f71b60774e9d01ba7588cc7", + "8f048f2cfc368d45263fac24ab8e64ef6db0a163", "testharness" ], "css/css-grid/abspos/positioned-grid-items-sizing-001-ref.html": [ @@ -476941,147 +479991,211 @@ "reftest" ], "css/css-grid/alignment/grid-alignment-implies-size-change-001.html": [ - "99d3941d430705202a7094276de59dc5edf69321", + "4d7695956abc3d5589e22ae6e2a8fb687a631698", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-002.html": [ - "399c23ecc22e3ab5376044847fdcc0e778bc0bad", + "126a23ef4ad9fafe013f423de81ecad914dfc354", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-003.html": [ - "bcdc1d68ddff37c67204341a6e93dc81a325a8f2", + "322cd468bd9e554b7152549b6a59f577ddc1f522", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-004.html": [ - "163ebbb7c462f803de9f85fbde11a384847f4faf", + "5270072349ede83f9c4819d897205fdb0561675a", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-005.html": [ - "0e759ebbad7f7de553ebd8ccc50892d3af40d9eb", + "9175d7ba9eab2525278bccc19ce67580629e1394", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-006.html": [ - "106f9a163e1d1621827e1d34bf1cc0c043b01898", + "a0b444c6bc8050b957fcf2dc0f01e9d9a2745b7f", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-007.html": [ - "247606b98201e9a73f6162432ec4f032e7822d98", + "1a7924d186eaf96c34ef327b53eaad9dc232e59a", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-008.html": [ - "ce14fc5adc6e6bc08f9d67f7c432e42e1fa06994", + "dc9642f2940dbd5cfd063c6618f3e582bf6f13b2", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-009.html": [ - "78f5c7dc3382ef9e06cb98266a1aea04858b36a8", + "2b911d9a088e2498916f71d3fae6690ec9e7ae30", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-010.html": [ - "572eaddac3bcad2a78f595a2d7252ed61e284173", + "26a41689f987213e209f2e7a334d546c47c8120b", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-011.html": [ - "70681816b62b12c0b47dd59e92c82c57c5195df4", + "1039c62b02bf29117616070d7c69fa702be2a0d4", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-012.html": [ - "45434202efd7954308d6f87023cdbc245a412c47", + "2f2f560cead46e8d4dc6a0199f34cbecd94a2545", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-013.html": [ - "93ae6b0da898b80b39b7c3315b862024345625bd", + "24268a6bd064461d595f27fd19449e667767a153", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-014.html": [ - "439df61ce437200c65c09605d46461f889b0c236", + "56936df344200f196bfad7149b04269b307c89e5", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-015.html": [ - "4944467ea75bbd7468f08ede5dd19a88196ab9d3", + "c0579a49665ae2b8125dfeb5d7bd1514cab24bbf", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-016.html": [ - "e0b7eeddc7cdd5187c3a07186407360026b6a0d4", + "2aaf17aa7217d6eea98a6f39cc5f22676ff83514", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-017.html": [ - "47d65e49c206a554caa1738e44f0d41f2650431a", + "bf62dfb709848b87734a19c033a4c74e9c868aff", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-018.html": [ - "08367b30d4b332dcff0be6f7967c1dc8ef4bd9af", + "2e7bb50061ee0af312a3249df5ff05313f61c80e", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-019.html": [ - "f357a479479fb871c6e6eeb49ac028db55757d81", + "ed2833b2bd7b74425a7daa3f0f58394286dd1110", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-020.html": [ - "4271df1342f4600e39f6ec3b1daae20ff369a5a8", + "ae305d831dd2b461bfd8f2ca47c5e5d1d302485f", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-021.html": [ - "c72cbc118d7af2378cc2026ccd4eff5b2b3dada3", + "f649e11557664937aeb2a465d00563642afb7884", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-022.html": [ - "d1bcda40064849f8250ca423c07210ef6f7135da", + "d2e1f4a999a7377421ea4b9e8cb4b4ae5e320bbd", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-023.html": [ - "5ffaf7fb23cd317c684633b26ce027beb83aef20", + "a223e17741b3a0ef6cd22e54466fc02fb4b77b8e", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-024.html": [ - "7c475cebcd650192507dadee416e5e5a7318f0f9", + "d5c7d56e74ab8f6b6986e272ef998dd0212abcc9", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-025.html": [ - "b5100c40529365ed36531bfca7310370f3cd017f", + "725f50b1f9d3be9fb368ae613eae9377baf8d43f", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-026.html": [ - "1e8a5e7c21da8a8197b2d35943d2c4a67050c583", + "a6370fe0c3e9f987f9a0766c93165ecefec85132", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-027.html": [ - "1e87d9f38001a7a1407ee6983c3a4f7b1dc8da92", + "f82bae8883376515e7faaa7f0ed667576f5fad37", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-028.html": [ - "a8d71f02f9233d070eb99cf3f7d9c9e69995c570", + "396f4f823eb6e2115a9d5ce390fbdb529e799063", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-029.html": [ - "cd4207c50b24057e84f52e2df9ee40df0bc1e490", + "411ed5d2577ac0c2839bbb829efc170ba7136c19", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-030.html": [ - "9fe22b9a8a575ad8176f3a657a9b9ddfe71a7753", + "1d0ac6855db55908602d543660d9ae14a18edf1f", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-031.html": [ - "082342d57257892308c3909c8ca4c3b270021551", + "97b2b7231b6f7f812c3ee8ff89317281b1ecfa6e", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-032.html": [ - "8eb6d46e01bbc2383198ff4d906ce1c8053dd56d", + "4c55498e0a14acdded1563a4890b18da9b464201", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-033.html": [ - "151c7aebb20d2fe130351503641fdf200bfc1d3f", + "222a1a659ae09f78641551a369a2bf4fc01f86eb", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-034.html": [ - "d06920746566a28b934d301107b73e1d54c1aba5", + "f0ea292f1996f5635e2f8c382bb14baa71c1840d", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-035.html": [ - "d747922cd9b2711dff260de987a0242ea6989235", + "029a04b0ba3297c3b357454f2b5cba743dfcb90a", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-036.html": [ - "4739f523e02112bb7dd6638dc5b986d1d7bce44f", + "201ebb99796766165de76c4d762214102157129d", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html": [ + "fe08dd986ac4579e0ceeb48de8467ea7b2449f87", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html": [ + "ff16a2875a2fb3717783d0afcf957172bc75e8f1", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html": [ + "09e1e43e45ab887a97064c89c484736d43b3894b", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html": [ + "7b8e3d95efbaca847e0396b32e98288819a173bf", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html": [ + "101bc3d8027b6a83f78218824ffe8eb1bcec04d7", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html": [ + "c614e913320fc34f1aacfe525993bbda1a137562", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html": [ + "f7e7baf452613305bd322853d0e884dda17a8ff7", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html": [ + "a36da7195e558a326f5881c8c06f3adc45364439", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html": [ + "520843091a007762d5b5050f40612edecfdb1318", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html": [ + "c08867824b2018ccec5b039bb437cad3f0e408cb", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html": [ + "4b989d0dbc2c1816e28b4871f380b859ae8f52a4", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html": [ + "ed0ecbcd15427b8c50074784bca798aab7e01161", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html": [ + "3547f44192d316cedebdb9a00cf65787f9feed31", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html": [ + "6495a2dbbf7e600291a5c11b8416b7c2c5e8258a", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html": [ + "3fb419322159b018e5d95f2a61e2a56ff87b6bf7", + "testharness" + ], + "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html": [ + "e9dccb31be383803835caebaffb42242aeb4941a", "testharness" ], "css/css-grid/alignment/grid-content-distribution-001.html": [ @@ -477281,199 +480395,415 @@ "reftest" ], "css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html": [ - "04b805be2d4db49e730ec64ade4af951c510ad97", + "19aa0cc2a12e97a44287a18dd0f0128f3acd4c6e", + "testharness" + ], + "css/css-grid/alignment/grid-gutters-001.html": [ + "31652b3007212ec082842d5260d6be5a355d4db7", + "reftest" + ], + "css/css-grid/alignment/grid-gutters-002.html": [ + "f0df9c91a6b5c25e78faf627b807a78c70901132", + "reftest" + ], + "css/css-grid/alignment/grid-gutters-003.html": [ + "f3d8a82cae41fb10c6bfce4f4f9e22aea141ed43", + "reftest" + ], + "css/css-grid/alignment/grid-gutters-004.html": [ + "b4a51f8b7ade7132b403002a37551362b676e5a7", + "reftest" + ], + "css/css-grid/alignment/grid-gutters-005.html": [ + "18500bb2ac2e18b93f35f4534934291d77193415", + "reftest" + ], + "css/css-grid/alignment/grid-gutters-006.html": [ + "35ae1336e697a1082f61e08f0b65fab03efc9dce", + "reftest" + ], + "css/css-grid/alignment/grid-gutters-007.html": [ + "f26950ab333903026d8b6d1fe406f051301209d9", + "reftest" + ], + "css/css-grid/alignment/grid-gutters-008.html": [ + "a4a9d7ecc3afb08a561578a25f2933077cacb1cf", + "reftest" + ], + "css/css-grid/alignment/grid-gutters-009.html": [ + "41a576cd5425e3b60efc328e06941e19c4d49369", + "reftest" + ], + "css/css-grid/alignment/grid-gutters-010.html": [ + "5ed8d7a44153cd4833f893fe53849a1e63d1a583", + "reftest" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html": [ + "2c431631005167b724c5dcdbe0405c583d82eef6", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html": [ + "d47c51b917f6311acc868dab58690e3889c2e2be", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html": [ + "a095cc2e171dfe34f3acca13564f52ee01974634", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html": [ + "ab1e18e06c6b819679eae7ce6ce02b24c390e32c", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html": [ + "6c748aa311452e5f75874add16880cd0a8575ee5", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html": [ + "dacd829ff123b350cd4cb4c06c3f71e9582d3cb3", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html": [ + "a94233c28821c3558c97e3f3f6ff6fbcefc6158d", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html": [ + "f4e24cf43604d52c36713ecf8cbe5f4103b07a73", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html": [ + "44f39b77e02a3bcb9d9d87599eecbacf403992ef", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html": [ + "0bb35333b5731ba516e2569885da69d04ebbb5e1", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html": [ + "7f8fd0acab62164df1d7f1553193942f529b22af", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html": [ + "041a96f42df8bd5f9360c9bbc02f2a7fa97bd338", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html": [ + "2c014dde4f9304b9edd07326905ce0d29bcfc4cc", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html": [ + "f5895c02bc3b6a61a59a17839f0d7295e27954eb", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html": [ + "d42b7f83b748c4e631633b53fe06b79fc4b6e6a6", + "testharness" + ], + "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html": [ + "9b9190bbcc6ce8f74480918a68fb73e6849fb441", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html": [ + "cafc54256ea9d0cbf8990a0e04904c7ada8c5894", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html": [ + "7175f87e2e16e168fb1368287fb7b8297b094145", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html": [ + "6680e0aa48b5825c4fbb9225d950d3c042470ca6", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html": [ + "a02a021d587e94e37f9a02226a5acde90adb3742", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html": [ + "d724eefa2af7b393ce338d0027f5060735a68f41", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html": [ + "1114086a823371ff2d5bdca984ab6b64547bb866", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html": [ + "0a2f8f441a51f99b68f3256a737c324d1e073e93", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html": [ + "5ea11f6570e92749f24658ad9717f733e85846a4", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html": [ + "760e73e637175ee816fa5e71561eb8b10da8f654", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html": [ + "235830677b997adc5fa0e20c1cadcf079f3d080e", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html": [ + "668ca3c8b2a47d272d842147ea92544870bacdab", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html": [ + "c394c0466992394d9c0e9ad106633b46d2e5ce6f", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html": [ + "b5fa117cea3a4c824f9bcf8025ec40e323639945", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html": [ + "f5efd2b0ee45308ae407bf6079709e7e0fc066f0", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html": [ + "ec064eaa427a45d73dd9c8e3868e0db5b36e1b62", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html": [ + "ab1ebc067666738aeb02b6b549591a0ede2ac338", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html": [ + "d3501f28e7dc45a260f50384a659802798c440d9", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html": [ + "1e1e45d062e52412257a8cf265cf5c6feda89d5e", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html": [ + "d385f08f69f11dab872430d700484a27f25c676d", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html": [ + "fe63903cc4804ecdd4138e9a11dc16bcd88aafcc", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html": [ + "2a7a045460cd422a9bf669081fb5f8b58de15c7d", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html": [ + "2b688a810bc6c040418b75307109e2bf603df92a", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html": [ + "b7efab5fdddc3fa7798bcc9ab494d3f4026a8dfd", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html": [ + "5df7dc233d5520c187f039e6d8e0cec76d3401ec", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html": [ + "f652c069a60b86b6fe158cb17bc69e5908cf82a8", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html": [ + "dc1856094c2937af1abd7ab35bb9a4f25a9e28d0", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html": [ + "f16cc9b9a5c20acfb8abf4802f5092e266cfcead", + "testharness" + ], + "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html": [ + "bfdb2df99f6eedb823029d9733b15c8a61f7e4b1", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-001.html": [ - "917e0b3e2c98cface73510fb00b62e609ea94ecc", + "58775a4e4863f1db36b9ec1333945f656f868b75", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-002.html": [ - "a32fc988586c078db1c437a81a3a7b2fab2e921f", + "bda5d9b0c2c9ee32f5c48adaa330d633dd35a73c", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-003.html": [ - "79346c92de73ab8e88c9ea86c963b99ec437854a", + "023ffdee27967e7f06d335555e3ccb3f6888fa8b", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-004.html": [ - "5a02e719fc6d65cddd2dd97c2aedfbea1b0d7eae", + "358bd56658cbcf30255f27a8d7bb08dc879d41e8", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-005.html": [ - "a33ab3b46bd68238bcafc86350f1bee36fb78373", + "96dea2579707c482babdbd80a763320c2a96ec40", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-006.html": [ - "61c927b4280011667fea7869eb82071d29dd2207", + "bc71524a8fc34a86d5941321d07cd6d5ecc0ccfc", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-007.html": [ - "35a0411b69e1ee32e00b2894db7eb1e1e173cb15", + "9d05967daafbac726df2c2527239a2d6f2823e1f", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-008.html": [ - "fc0e18c677cbae1dab7bb55688fb60da6de0ff1e", + "c96dfb7b1a9e32ca7466c5969dc5b1d1045ca1ca", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-009.html": [ - "9e836b1cbc598eaf29f40fa783ac1666441131a0", + "45bd6c17fef978d96c3ae4a4ad4eaa2e330f87a2", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-010.html": [ - "8168c74fc8ea39b72e7327685231aa91a6985ceb", + "3b9a99cf19919d01ae106b9e0f0954b64b4b6529", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-011.html": [ - "e6bd704502d9dbe6ac453d92ebf7f61d5ec5805a", + "d62f8c2f7e233ee2e164672c4c699bb1810c52bc", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-012.html": [ - "618b7bbae71741c700534d8c5dcf7b471cccd52b", + "90dfea0ac76ca9bc8cf2774437f096721715fec7", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-013.html": [ - "4588a246fa623f272000d7d2ca95ff9413fa7ce2", + "ef18513476ee0f901f599994e180e931f5959832", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-014.html": [ - "eb5bf50d24837a38d7f1f70508030c0d83e22dfd", + "ccc38766dd614e0b0129bb2b5b3eb8628af73713", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-015.html": [ - "af43ff2ee5ea8f4bfc8eaca775f30bc56fce2429", + "259ab03986f344cdb1a619621a4515d32149979c", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-016.html": [ - "d7d3dd523cc6897b701b57dfdb41c13e93209eb2", + "38e4b697ecb3f047e2d0f75d6ae10106d8872a96", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-001.html": [ - "a541ceec457d826677469e1dde2f2fbdbc3f7448", + "eab09d04bf4de5271082d3271c2102b1a2f38468", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-002.html": [ - "8ee1d02283ddd96ab042e10f31e02d19998ee1f3", + "5e19677f9a3caba0a7894a3a50178db0aeb9c6d7", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-003.html": [ - "a2039c7a3a995613595375b8dbd6f0a4d6eee077", + "7c6eecf6b4b74bf89fb7300114fb1ce0cc0aae9d", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-004.html": [ - "6c24f14a89c33bc7813274c0818dc0842e9c1e83", + "17f1d5bbf953eed24c53930cccce0885703ef8a6", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-005.html": [ - "c7b147c20408781c3e3998f867a5878916960ed5", + "96f37927567505fa41d00913825678ba56588519", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-006.html": [ - "0cca9ab651aadb24b3fa17c2d991f8498aae49ec", + "9a10a0ebeaeb507327f342dc94f1ce408841d963", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-007.html": [ - "8552960b768a80146861772e61c5ba66f49b2c59", + "c784b2da1317d248e00d1d3759dddfdbdd05370d", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-008.html": [ - "81be158b4ee68340a69586369ddfe38e2e4a5eb4", + "f6d655871a10f06e32c5561314a0cd734e881060", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-009.html": [ - "067c428854205595ea4cb7bd94e4cd331428949e", + "89ce7e8484274483ccc33db8ebd36562828b07f7", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-010.html": [ - "b53540415c065d41bf22d0d6f49708b5216695fb", + "cb6f71ec2988495ac2812193412f4b4f975212a7", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-011.html": [ - "b6078329294d7b7a26722e0e9e82171cb250607f", + "3f9b2dd823cdf2c1cc9ac58296e292fe9bc73d93", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-012.html": [ - "55db10daf6be8aa2a75be718929bb0137ec668a7", + "8dd38d3f23d64395bb0ef7163574740946b61568", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-013.html": [ - "84d9d4a608a03d5ef129abe2526b6fa55668492b", + "3946342859ccae5dd26914d94eb4f06c64a32732", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-014.html": [ - "bbfe2d5190c6c4bcb208ec6f25990d52f75b7134", + "4416485a90220cc1fd4358e256c8ca65d053cfde", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-015.html": [ - "f4dc41a4ce328418c9f572074f7b881104c805b2", + "fdd57da3fa7abdd505dc22b8c56ed322405478d3", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-016.html": [ - "448d66b5757cb939fc9a3f03680ab1b9b8825ec3", + "d3d7bfffd57daf00242d2e0b29cb069e36edc4ac", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-001.html": [ - "ffe1ef9427e3847e89a0f59f5637bf94e80ca4f7", + "91d8f453ee41922ee00a98db6658a6eb513f0906", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-002.html": [ - "99cee6353da618a175033a2dbdb49315024ec083", + "6f242ebdd5f6dfcb568ea211ac5572e173121a0c", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-003.html": [ - "327f6d87554010b433b90ae0363814d935398b23", + "0287c5d864bc6a6e6020e7305533782f81171a28", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-004.html": [ - "9941214f81451e89e231d4e979ef21fae2d73cbb", + "059be3fa38ac92e238fa8593e8fea9f83a380cd8", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-005.html": [ - "143ca0175c875529c74b9fd9a1cc2fe2067386ca", + "5ec6d20dd01efeae2aa6590b9218b0d27aa0252d", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-006.html": [ - "8d2a905743959c7a2f227f187286e3cb23f39e59", + "e00f243bc06350489521df2d4344cd3bbc74aa15", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-007.html": [ - "6574fa2ea2a9776689367c4f64edaf5c8c844736", + "002f0627ec680061b8768c11cb6dc22422346722", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-008.html": [ - "f201af5919cc79fa8a3834900048c7fe2a794a72", + "b14720084205307823bebf3532c5a463c88d34a0", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-009.html": [ - "59047d7646baef9aac63ed8c130030bc4725c780", + "092f431d4b2a508dcad5cdd9b650a5aff5e88c13", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-010.html": [ - "60d4108239c5ca52d7998f8b1882dd7adf38b567", + "b434ab49e28d31ece1ba14754395597622b764af", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-011.html": [ - "9c868b3e52a6604a9ee810a58f811fae92a48fa1", + "e58b3936cf35a5278677e771a11fb8c819229329", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-012.html": [ - "87e41d80af965f86f5d43a9594cc324e1b365d9b", + "96f829b1d4a16502cf363e1ccf5aaea3b2c41e4b", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-013.html": [ - "cbc79b5b2b117ed2e1e286c91e6ce92b57d3112a", + "6bd6f7df135c07dedf0b0f1bcad156fdd8e8ceae", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-014.html": [ - "526ea2640f2fc150bd90f1eb7552686d39437906", + "32fb9bff67852c50c642850aef3732d33fdecdd0", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-015.html": [ - "9c97198c58873215469e20469219fa29197ba2b3", + "43c100f32612d13a2c5ec3df9b407556b15b4378", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-016.html": [ - "a60c43c1c32b908c3df899f3cba0ddf1c0fb0824", + "737ff1592425bb6e89a9edebdd072c94e926a1a9", "testharness" ], "css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-001.html": [ @@ -477525,7 +480855,7 @@ "reftest" ], "css/css-grid/grid-definition/fr-unit-with-percentage.html": [ - "e29ef66eb632f1f9834df3233f741fb51fed5eea", + "0dc90f8d107fe96a35cd837a224d4a28dd971f92", "reftest" ], "css/css-grid/grid-definition/fr-unit.html": [ @@ -477533,7 +480863,7 @@ "reftest" ], "css/css-grid/grid-definition/grid-change-fit-content-argument-001.html": [ - "3bb5904f2a6c36b0575c395a3cc1b008e4cbcf0c", + "409d4b815307264b17581975f0f121f40946d932", "testharness" ], "css/css-grid/grid-definition/grid-inline-support-flexible-lengths-001.html": [ @@ -477981,7 +481311,7 @@ "reftest" ], "css/css-grid/grid-model/grid-box-sizing-001.html": [ - "69eb267879e0b899efa996f4923414f72ecc52bf", + "56512294e97a3a590aff151cf520eb7b918bfaa2", "testharness" ], "css/css-grid/grid-model/grid-computed-value-display-floated-items-001.html": [ @@ -478144,6 +481474,18 @@ "a457a82d10d1cc8f2576b6732e68a7854737f63a", "support" ], + "css/css-grid/reference/grid-collapsed-row-gutters-ref.html": [ + "917e355f17681c9f511fc5cfbfe7996cddb05f6b", + "support" + ], + "css/css-grid/reference/grid-different-gutters-ref.html": [ + "d37b7409505ce811a7a76db76ab7185c611fd278", + "support" + ], + "css/css-grid/reference/grid-equal-gutters-ref.html": [ + "61df6964c4743d585e47e0e683c55b5cf3f10c92", + "support" + ], "css/css-grid/reference/grid-filled-blue-yellow-green-overlapped-100px-squares.html": [ "7c6ea02f3a101c8e20a3a57c158da85a1ed2842c", "support" @@ -480856,7 +484198,7 @@ "45ef6e998e5f266741f5403df650cd9557dbe005", "support" ], - "css/css-paint-api/background-image-alpha.html": [ + "css/css-paint-api/background-image-alpha.https.html": [ "84acc5f998812497d344067d7095c7561dda13ee", "reftest" ], @@ -480864,7 +484206,7 @@ "9ff536499d72240f67eb6911b768c624371ea678", "support" ], - "css/css-paint-api/background-image-multiple.html": [ + "css/css-paint-api/background-image-multiple.https.html": [ "9e43ca2821fa0075073a898efde7595f6b57fad4", "reftest" ], @@ -480872,7 +484214,7 @@ "bcee5040691f057a672e58eec3beed75122be3b8", "support" ], - "css/css-paint-api/background-image-tiled.html": [ + "css/css-paint-api/background-image-tiled.https.html": [ "83f9e2566f9e6957fdf3b67e9e62374984861e78", "reftest" ], @@ -480880,7 +484222,7 @@ "bca138ca3ce5b6dee10f935fd2ff9756d18b12ef", "support" ], - "css/css-paint-api/geometry-background-image-001.html": [ + "css/css-paint-api/geometry-background-image-001.https.html": [ "a1f6d2148bfcdb68e4ca437b396b0ccbada101a9", "reftest" ], @@ -480888,7 +484230,7 @@ "4d33168e6298c1ed7d44ff431791615cdaf9038f", "support" ], - "css/css-paint-api/geometry-background-image-002.html": [ + "css/css-paint-api/geometry-background-image-002.https.html": [ "f48a940cfc7b3654ee92b655330ae30af5315e17", "reftest" ], @@ -480896,7 +484238,7 @@ "475fd7979cd173f378c03a7d9d27503e12c2dc7c", "support" ], - "css/css-paint-api/geometry-background-image-tiled-001.html": [ + "css/css-paint-api/geometry-background-image-tiled-001.https.html": [ "a892266cab4d74a3f4df2bbe1cda8823a38f3153", "reftest" ], @@ -480904,7 +484246,7 @@ "c5363f4f7843ff8025ae5457524c0c9f4aac144c", "support" ], - "css/css-paint-api/geometry-background-image-tiled-002.html": [ + "css/css-paint-api/geometry-background-image-tiled-002.https.html": [ "051788b53366cffcc10debdf2d678d50bffd1f54", "reftest" ], @@ -480912,7 +484254,7 @@ "d4f9428be3b8f9003eb9373b3eb87ebed0c55c15", "support" ], - "css/css-paint-api/geometry-background-image-tiled-003.html": [ + "css/css-paint-api/geometry-background-image-tiled-003.https.html": [ "29141ae2c9c87237ed3406dd43c6b3a7a1a5aa36", "reftest" ], @@ -480920,7 +484262,7 @@ "81026e756ea8e3be653e176c09f1762507915cb8", "support" ], - "css/css-paint-api/geometry-border-image-001.html": [ + "css/css-paint-api/geometry-border-image-001.https.html": [ "d8f948af1254c810496739e4c7cc570ba96cf64f", "reftest" ], @@ -480928,7 +484270,7 @@ "076c1f3e3b5cfd3a434e94f33872f5f598a7225b", "support" ], - "css/css-paint-api/geometry-border-image-002.html": [ + "css/css-paint-api/geometry-border-image-002.https.html": [ "57b518eb310db31c40f0db37637b0f8199ee9734", "reftest" ], @@ -480936,7 +484278,7 @@ "141bf94dcd935420b95ee4da52139bf51318196d", "support" ], - "css/css-paint-api/geometry-border-image-003.html": [ + "css/css-paint-api/geometry-border-image-003.https.html": [ "9d01df8817d9e5beb27d3439789cbe914c418b2c", "reftest" ], @@ -480944,7 +484286,7 @@ "d730b44bd1020305b70da095a15f9a4f7e9f262a", "support" ], - "css/css-paint-api/geometry-border-image-004.html": [ + "css/css-paint-api/geometry-border-image-004.https.html": [ "368a9d855ffc46457e6c54cddfbc934e92096ee0", "reftest" ], @@ -480952,7 +484294,7 @@ "18f9d4d369de750ceb92c2e275ede5fcb3bf6f49", "support" ], - "css/css-paint-api/hidpi/device-pixel-ratio.html": [ + "css/css-paint-api/hidpi/device-pixel-ratio.https.html": [ "470ec454e18e5398718f3117171b172208f84fee", "reftest" ], @@ -480960,7 +484302,7 @@ "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", "support" ], - "css/css-paint-api/invalid-image-constructor-error.html": [ + "css/css-paint-api/invalid-image-constructor-error.https.html": [ "6e73e10076d29e69dad68deca551ad9cb84f82f9", "reftest" ], @@ -480968,7 +484310,7 @@ "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", "support" ], - "css/css-paint-api/invalid-image-paint-error.html": [ + "css/css-paint-api/invalid-image-paint-error.https.html": [ "53ea8b4f95f9afafd145c04c5f5961af19a9eae4", "reftest" ], @@ -480976,7 +484318,7 @@ "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", "support" ], - "css/css-paint-api/invalid-image-pending-script.html": [ + "css/css-paint-api/invalid-image-pending-script.https.html": [ "40cd95de01fb371990dac73777e75bd306d28be9", "reftest" ], @@ -480984,7 +484326,7 @@ "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", "support" ], - "css/css-paint-api/overdraw.html": [ + "css/css-paint-api/overdraw.https.html": [ "1f8f97b0a2141f5f8530a535b24b2b04dadae31c", "reftest" ], @@ -480992,7 +484334,7 @@ "cbe0372259011ca94f0fd8d233413439ba9cf117", "support" ], - "css/css-paint-api/paint-arguments.html": [ + "css/css-paint-api/paint-arguments.https.html": [ "7acf977d7e09bb85ada1b0df7fd9e4ea3a11ddfe", "reftest" ], @@ -481000,7 +484342,7 @@ "a3aebfce59d0f62ab229248b7903b0dc731835d5", "support" ], - "css/css-paint-api/paint-function-arguments.html": [ + "css/css-paint-api/paint-function-arguments.https.html": [ "cc19f4bc39c7a2cc1d9ed35a6a5a50d3935830af", "reftest" ], @@ -481008,7 +484350,7 @@ "60c069de8135b934df166560db5c592d5becbc92", "support" ], - "css/css-paint-api/paint2d-composite.html": [ + "css/css-paint-api/paint2d-composite.https.html": [ "bfe095afc5c9a4325b06cfc22414a09395084113", "reftest" ], @@ -481016,7 +484358,7 @@ "6f1be576ae7ead2a724357b16ea88c92b3b19a0d", "support" ], - "css/css-paint-api/paint2d-filter.html": [ + "css/css-paint-api/paint2d-filter.https.html": [ "75d3792f2947cac41657257a8d74d72521c82c7f", "reftest" ], @@ -481024,7 +484366,7 @@ "3b2abb3632893c0f5a2714fc325467f0076001a8", "support" ], - "css/css-paint-api/paint2d-gradient.html": [ + "css/css-paint-api/paint2d-gradient.https.html": [ "57a163232fe53272e9e2d37293908cf7b18267bb", "reftest" ], @@ -481032,7 +484374,7 @@ "c71e0b960177b13614d2c11392c94ea155927ebe", "support" ], - "css/css-paint-api/paint2d-image.html": [ + "css/css-paint-api/paint2d-image.https.html": [ "5df17bc61598b6687091b3da4b626ed0938cd89e", "reftest" ], @@ -481040,7 +484382,7 @@ "cf154ab8a37bdbce2175193dfc456f4771bfeca8", "support" ], - "css/css-paint-api/paint2d-paths.html": [ + "css/css-paint-api/paint2d-paths.https.html": [ "06e13a31033ace03f012556b59ad3c0ac5cf39c1", "reftest" ], @@ -481048,7 +484390,7 @@ "2a469427fbdbee6b096a63b95846cdeda92c0255", "support" ], - "css/css-paint-api/paint2d-rects.html": [ + "css/css-paint-api/paint2d-rects.https.html": [ "fbb8bf17e5dfd21d87b7d34bdb038e59e16ede46", "reftest" ], @@ -481056,7 +484398,7 @@ "f882c26b0dfb58fe1ab3177060f421dad0148456", "support" ], - "css/css-paint-api/paint2d-shadows.html": [ + "css/css-paint-api/paint2d-shadows.https.html": [ "6c7dab36d84540407eeb9571f8a9607e8d27ce6b", "reftest" ], @@ -481064,75 +484406,75 @@ "5eff507eeee563399205645668c7ed3df79213c9", "support" ], - "css/css-paint-api/paint2d-transform.html": [ + "css/css-paint-api/paint2d-transform.https.html": [ "f840916bab6d10cff1b08d1cfaecee97699d80cb", "reftest" ], - "css/css-paint-api/parse-input-arguments-001.html": [ + "css/css-paint-api/parse-input-arguments-001.https.html": [ "0ba1a9978d295825784a2909447e565701e6fc09", "reftest" ], - "css/css-paint-api/parse-input-arguments-002.html": [ + "css/css-paint-api/parse-input-arguments-002.https.html": [ "d35b4e39d8b0f54935571ee62fe7255e93c917dd", "reftest" ], - "css/css-paint-api/parse-input-arguments-003.html": [ + "css/css-paint-api/parse-input-arguments-003.https.html": [ "f6c8cb6feba2b14349bc3fa3170b278e698df526", "reftest" ], - "css/css-paint-api/parse-input-arguments-004.html": [ + "css/css-paint-api/parse-input-arguments-004.https.html": [ "1dd64759c041d9633ce04add066f4e1573fd05e5", "reftest" ], - "css/css-paint-api/parse-input-arguments-005.html": [ + "css/css-paint-api/parse-input-arguments-005.https.html": [ "25d32d33e5de6d289d0e8c776876cb66f03e7c2e", "reftest" ], - "css/css-paint-api/parse-input-arguments-006.html": [ + "css/css-paint-api/parse-input-arguments-006.https.html": [ "effa515567b0212403d83588c335d8fc72c056f6", "reftest" ], - "css/css-paint-api/parse-input-arguments-007.html": [ + "css/css-paint-api/parse-input-arguments-007.https.html": [ "f2f837e7c82462f17d9ebb1a8ab5346e5b8c945c", "reftest" ], - "css/css-paint-api/parse-input-arguments-008.html": [ + "css/css-paint-api/parse-input-arguments-008.https.html": [ "60034209a8984ac0be807494fc4373329d3792eb", "reftest" ], - "css/css-paint-api/parse-input-arguments-009.html": [ + "css/css-paint-api/parse-input-arguments-009.https.html": [ "d57e2370218d385a02e2021219869b5dec0e45c4", "reftest" ], - "css/css-paint-api/parse-input-arguments-010.html": [ + "css/css-paint-api/parse-input-arguments-010.https.html": [ "9d4ef380f3596a73ea7816d13b3913b541ec05b9", "reftest" ], - "css/css-paint-api/parse-input-arguments-011.html": [ + "css/css-paint-api/parse-input-arguments-011.https.html": [ "15edc8fc44d339514911566fe7cf07ec899cf04a", "reftest" ], - "css/css-paint-api/parse-input-arguments-012.html": [ + "css/css-paint-api/parse-input-arguments-012.https.html": [ "0cc064f143a0b1bed6b6e3b79f9a95754eb60ea3", "reftest" ], - "css/css-paint-api/parse-input-arguments-013.html": [ + "css/css-paint-api/parse-input-arguments-013.https.html": [ "e4a99687b156723308ed27a9e863754cb6dcdbd2", "reftest" ], - "css/css-paint-api/parse-input-arguments-014.html": [ + "css/css-paint-api/parse-input-arguments-014.https.html": [ "c10d44a53a00e6a9745d6ea1c359298723a0aee1", "reftest" ], - "css/css-paint-api/parse-input-arguments-015.html": [ + "css/css-paint-api/parse-input-arguments-015.https.html": [ "a78c728b67af31e47c8d46e60e33ba437769a020", "reftest" ], - "css/css-paint-api/parse-input-arguments-016.html": [ + "css/css-paint-api/parse-input-arguments-016.https.html": [ "1c14dbe6c6bc0f218724731112c4c45888ede8b5", "reftest" ], - "css/css-paint-api/parse-input-arguments-017.html": [ + "css/css-paint-api/parse-input-arguments-017.https.html": [ "cba3754c5044665b2648fec05e25d7b6028c185f", "reftest" ], @@ -481140,23 +484482,23 @@ "7dd468373f6efa2b5a3a8d16c91c0d4dec87c143", "support" ], - "css/css-paint-api/parse-input-arguments-018.html": [ + "css/css-paint-api/parse-input-arguments-018.https.html": [ "b606bfff93300f114ea4efab85e489727e9821c7", "reftest" ], - "css/css-paint-api/parse-input-arguments-019.html": [ + "css/css-paint-api/parse-input-arguments-019.https.html": [ "db11565957c3da1ca7a51b9ab36cd4a823386a55", "reftest" ], - "css/css-paint-api/parse-input-arguments-020.html": [ + "css/css-paint-api/parse-input-arguments-020.https.html": [ "acbff610abd29a01574add30679b43d7a735c9bd", "reftest" ], - "css/css-paint-api/parse-input-arguments-021.html": [ + "css/css-paint-api/parse-input-arguments-021.https.html": [ "6f567a29ed4ec26ad8c97277469783a614a5811b", "reftest" ], - "css/css-paint-api/parse-input-arguments-022.html": [ + "css/css-paint-api/parse-input-arguments-022.https.html": [ "9f0efcee3e1412faa19fe50f475623fd5cf2852b", "reftest" ], @@ -481164,7 +484506,7 @@ "6133bd65ef569456f58f1e501d81e088256bdc0a", "support" ], - "css/css-paint-api/registered-properties-in-custom-paint.html": [ + "css/css-paint-api/registered-properties-in-custom-paint.https.html": [ "3855c8c28ea3a24bade81080f3f288ef75243dce", "reftest" ], @@ -481172,7 +484514,7 @@ "0985e20363c8aac715c534ad59f1209889244fb0", "support" ], - "css/css-paint-api/style-background-image.html": [ + "css/css-paint-api/style-background-image.https.html": [ "a3202db04922cc2527436fa319ea9e8432eecdcd", "reftest" ], @@ -481180,7 +484522,7 @@ "6dcbe78ab89343178e18e3e92744b25759ec8241", "support" ], - "css/css-paint-api/style-before-pseudo.html": [ + "css/css-paint-api/style-before-pseudo.https.html": [ "7808e4e86a0556202a0e2ea5574d60c94bf2c537", "reftest" ], @@ -481188,15 +484530,15 @@ "c6a94e5bafa098b8f4023312db97abebe992abc3", "support" ], - "css/css-paint-api/style-first-letter-pseudo.html": [ - "034cc6ebdf18ea4d346a2a363be69eb8added8e7", + "css/css-paint-api/style-first-letter-pseudo.https.html": [ + "75bee076f1fd0629eb7b0064ccf2c6ed882a4fbd", "reftest" ], "css/css-paint-api/valid-image-after-load-ref.html": [ "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", "support" ], - "css/css-paint-api/valid-image-after-load.html": [ + "css/css-paint-api/valid-image-after-load.https.html": [ "c00a13e38ba694a79e4934c854684aaaf0b19068", "reftest" ], @@ -481204,10 +484546,94 @@ "b0c34ee1480fe1108fe8dc53f2bbb2f3ffa1c408", "support" ], - "css/css-paint-api/valid-image-before-load.html": [ + "css/css-paint-api/valid-image-before-load.https.html": [ "89d6d44680d1df3fdc7ece62ff7ed2edffbaa01d", "reftest" ], + "css/css-position/position-relative-table-left-ref.html": [ + "044d07924d19f223eaa43950f9e9197d267e6be8", + "support" + ], + "css/css-position/position-relative-table-tbody-left-absolute-child.html": [ + "52021ff94a08452e93b2d9054d9aef69bf32ee0a", + "reftest" + ], + "css/css-position/position-relative-table-tbody-left.html": [ + "27690d7065d6d58118c3ce53187213ef304fdfd9", + "reftest" + ], + "css/css-position/position-relative-table-tbody-top-absolute-child.html": [ + "ececf4937f5919301f9923c57b1bd12e1b1e4330", + "reftest" + ], + "css/css-position/position-relative-table-tbody-top.html": [ + "9604885f13390aa300e90adf0332737e7f6adebc", + "reftest" + ], + "css/css-position/position-relative-table-td-left.html": [ + "ed483b148aa4e5e00533446d8a3c0745bd3040bc", + "reftest" + ], + "css/css-position/position-relative-table-td-top.html": [ + "f103a460a662699afe7e548dd19b634fb5ebd52d", + "reftest" + ], + "css/css-position/position-relative-table-tfoot-left-absolute-child.html": [ + "50f0960ba8b3260d32f29e4b603cb7bbdc99bd11", + "reftest" + ], + "css/css-position/position-relative-table-tfoot-left.html": [ + "0b43753f4bd7415d7c8f498f45e8c50761049de0", + "reftest" + ], + "css/css-position/position-relative-table-tfoot-top-absolute-child.html": [ + "1d17029497ea65845ac41895b63c0d93ee51f9c4", + "reftest" + ], + "css/css-position/position-relative-table-tfoot-top-ref.html": [ + "f3f7cdf4173b40e6deda42e0b52e90e18dc76b1b", + "support" + ], + "css/css-position/position-relative-table-tfoot-top.html": [ + "66d1c830fc34f1cd8d40595649f29b960ab2e0f6", + "reftest" + ], + "css/css-position/position-relative-table-thead-left-absolute-child.html": [ + "a1b19d3b452b15f46c2032b2ed9390839eedd835", + "reftest" + ], + "css/css-position/position-relative-table-thead-left.html": [ + "1484f919a328ee3cb085524ee472316ffbb2c05f", + "reftest" + ], + "css/css-position/position-relative-table-thead-top-absolute-child.html": [ + "e42a4594ed35bd5d982b7ed2e7939b1147aba4bd", + "reftest" + ], + "css/css-position/position-relative-table-thead-top.html": [ + "aad60626195203bdd7373b84e06adbb2f1cc7ee0", + "reftest" + ], + "css/css-position/position-relative-table-top-ref.html": [ + "eacfef25b788dce9dd63bcf7a94a400a912efd3d", + "support" + ], + "css/css-position/position-relative-table-tr-left-absolute-child.html": [ + "d3c519921b5d16cdab81579a25ad9afae7dc616b", + "reftest" + ], + "css/css-position/position-relative-table-tr-left.html": [ + "f337e13e7cd712f80eecf6b9590e395b56a85320", + "reftest" + ], + "css/css-position/position-relative-table-tr-top-absolute-child.html": [ + "a6623c300c4baeb319b640a86741dd973825d9fc", + "reftest" + ], + "css/css-position/position-relative-table-tr-top.html": [ + "873882f22e341bba957eb142ba90fc54c1ceae2f", + "reftest" + ], "css/css-position/position-sticky-bottom-ref.html": [ "726d6e927d84669e9355701ccd948349d377e6fd", "support" @@ -485457,11 +488883,11 @@ "testharness" ], "css/css-tables/fixed-layout-calc-width-001.html": [ - "df167ec3c296c684230a8be95c1411c2329b87d9", + "f13a10eefe03dcc35574e1da6775b841b1cec50c", "testharness" ], "css/css-tables/fixed-layout-excess-width-distribution-001.html": [ - "d0cdc5a206aa1b70ece371ff65bfbfeac7adcb2f", + "5a7ac292f775b82e805dfe144028bfd954cbdef6", "testharness" ], "css/css-tables/floats/floats-wrap-bfc-006b-ref.xht": [ @@ -485828,6 +489254,10 @@ "e0d6dbb039133f5aee07cc8dd3d96942727bdec0", "manual" ], + "css/css-text-decor/text-decoration-skip-ink.html": [ + "a633a231d8fd6b5408add5fab972046651889b09", + "testharness" + ], "css/css-text-decor/text-decoration-visibility-001.xht": [ "98b6617c1bc20a207de477eb33defb8922192e17", "visual" @@ -497881,11 +501311,23 @@ "testharness" ], "css/css-typed-om/declared-styleMap-accepts-inherit.html": [ - "31cb4e38d12d19c0b90aceed979fbbaedd00dadd", + "fb0b546c9509db2d07b3e5a8e847cf23bf88dff4", + "testharness" + ], + "css/css-typed-om/factory-absolute-length.html": [ + "a0049b74fea0fc581ca9896792cbc35568e68771", + "testharness" + ], + "css/css-typed-om/factory-duration.html": [ + "5cb05ce921ad593f6c99e9b5c8d67d71675ade83", + "testharness" + ], + "css/css-typed-om/factory-frequency.html": [ + "4bcfaa7a22cbe8fa2ca234583403d26bd520474c", "testharness" ], "css/css-typed-om/styleMap-update-function.html": [ - "1b98ee851da85aa7ffd3d523df0fd2fd4fdbef22", + "537fbd8e64906ce91b3ed387ede6abdc790750a3", "testharness" ], "css/css-ui/OWNERS": [ @@ -500581,7 +504023,7 @@ "testharness" ], "css/css-values/viewport-units-css2-001.html": [ - "1353bbd302bdf62609fb1f7c793a8c196d72fd9d", + "b3831f028e6c576b809e3a6d8eed8b8d62614d23", "testharness" ], "css/css-variables/OWNERS": [ @@ -504528,8 +507970,16 @@ "82edfdbafded72202c8a7aa3610c42ea53884c96", "support" ], + "css/css-writing-modes/reference/table-cell-001-ref.html": [ + "50a1a2b101291a12d8adf890ea5b92908979b112", + "support" + ], + "css/css-writing-modes/reference/table-cell-002-ref.html": [ + "202d159a2e57f70d57b2247c0fc1720a60f9d9b9", + "support" + ], "css/css-writing-modes/reference/text-combine-upright-decorations-001.html": [ - "fac6bf8467ddfe48d323c63229770bddeda8cdbc", + "04c41581252fd4038a4429306781dd9deb3d3c19", "support" ], "css/css-writing-modes/reference/text-combine-upright-inherit-all-001.html": [ @@ -506056,6 +509506,14 @@ "4efeb23cebb6f94719381adfc64c25dd9f39bdf3", "support" ], + "css/css-writing-modes/table-cell-001.html": [ + "16d67b389404d9686f871a3664b37529ad585345", + "reftest" + ], + "css/css-writing-modes/table-cell-002.html": [ + "cd6d48b254ef9232792834b78c7ebf6ce328edf8", + "reftest" + ], "css/css-writing-modes/table-column-order-002.xht": [ "a9a2515df95c987a974786217cd78ffe9d71d22d", "reftest" @@ -506329,7 +509787,7 @@ "reftest" ], "css/css-writing-modes/text-combine-upright-decorations-001.html": [ - "acc5921020fcc463ea3c81b3a2ebd2231420a81f", + "81fb59e362e568b359bedca59311eaad56c097fb", "reftest" ], "css/css-writing-modes/text-combine-upright-inherit-all-001.html": [ @@ -507184,14 +510642,6 @@ "ed3dc5f811d0e0920689b051da26c6b3c34b9a54", "testharness" ], - "css/cssom-view/cssom-view/media-query-list-interface.xht": [ - "62f0fdd48d1a4194d439ee22829b3346bed9a154", - "testharness" - ], - "css/cssom-view/cssom-view/window-interface.xht": [ - "4d8c4ddb997d85ca2c971602a3096f57565c01eb", - "testharness" - ], "css/cssom-view/elementFromPoint-001.html": [ "bf1c490777f450275a95ecfc6d6d2c0d055aca82", "testharness" @@ -507204,6 +510654,10 @@ "a689737bd60877e181a8a7ff27774ab383c3de0b", "testharness" ], + "css/cssom-view/elementFromPoint-parameters.html": [ + "0c31602268a831eae1bcd44b4a5e7b678a7ed7cb", + "testharness" + ], "css/cssom-view/elementFromPoint.html": [ "0f78405640523cf451b19ea0348b8216139b8168", "testharness" @@ -507268,6 +510722,10 @@ "ec5b756e980676c8707bcb2d7d91b7c977158e0d", "testharness" ], + "css/cssom-view/media-query-list-interface.xht": [ + "62f0fdd48d1a4194d439ee22829b3346bed9a154", + "testharness" + ], "css/cssom-view/mouseEvent.html": [ "d64c45f021a5c6db7b65575288a91e28a25a2982", "testharness" @@ -507528,6 +510986,10 @@ "7f3440e65abbe692e3c28f1f1d04671054ecc815", "testharness" ], + "css/cssom-view/window-interface.xht": [ + "4d8c4ddb997d85ca2c971602a3096f57565c01eb", + "testharness" + ], "css/cssom-view/window-screen-height-immutable.html": [ "3193a200624217a260e17660006e9ce31a52814c", "testharness" @@ -508777,7 +512239,7 @@ "testharness" ], "css/geometry/DOMPoint-002.html": [ - "fec9a7f01841a19cdd6a37845a78320885065e74", + "68b09f967ee8d221b11e949a32cc27a17082633b", "testharness" ], "css/geometry/DOMQuad-001.html": [ @@ -509172,6 +512634,38 @@ "b45da5560d0eb821b5552f1b67fab5cead4508b1", "support" ], + "css/selectors/attribute-selectors/attribute-case/cssom.html": [ + "d5e05750213fbf7959125d64e9ea1a26948ba91d", + "testharness" + ], + "css/selectors/attribute-selectors/attribute-case/resources/semantics-quirks.html": [ + "5389ddec11c37e4fd7387de59ac889592f3bb6ec", + "support" + ], + "css/selectors/attribute-selectors/attribute-case/resources/semantics-xml.xhtml": [ + "62a57c91c0303399f22955708e985e1c45df1251", + "support" + ], + "css/selectors/attribute-selectors/attribute-case/resources/syntax-quirks.html": [ + "74f283de72de512802cefd90d9ccb28b8c9bfb18", + "support" + ], + "css/selectors/attribute-selectors/attribute-case/resources/syntax-xml.xhtml": [ + "c0a43c3a9497d6711c012caec1fdb796d84455cb", + "support" + ], + "css/selectors/attribute-selectors/attribute-case/semantics.html": [ + "07f6f0492e97343ab66e79754f374a743bb473f5", + "testharness" + ], + "css/selectors/attribute-selectors/attribute-case/syntax.html": [ + "9ce44a4d5adc02d2730ca80a02cdb521c7be7025", + "testharness" + ], + "css/selectors/child-indexed-pseudo-class.html": [ + "cdf340dd83ea3a32d0d7edc31b5ded294585ef83", + "testharness" + ], "css/selectors/css3-modsel-1.xml": [ "200ec7eea31c5b79b7e05c07fdc7316388ca1a6c", "support" @@ -510724,6 +514218,10 @@ "394ad01c928f8a15796bc6c29cdbc5e2dc37fd52", "testharness" ], + "css/selectors/missing-right-token.html": [ + "d961e801f7df57161cd8c7b5a4b26ae24013c3e9", + "testharness" + ], "css/selectors/of-type-selectors-ref.xhtml": [ "59f848418882c75898c422a9600c14ffab64c3d9", "support" @@ -512104,6 +515602,18 @@ "f487aa4c163a64dd8ecceea982c3b225451fb3e6", "support" ], + "css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001-ref.html": [ + "b3cbcf942ba3f1067bb9a8797874a771cfc42f08", + "support" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001.html": [ + "8a2dd4d9df36e30405b98391b37c34bf7a9626e8", + "reftest" + ], + "css/vendor-imports/mozilla/mozilla-central-reftests/break3/reftest.list": [ + "0468d8ae4dcb4b30ee326ac8a7790bfcac4d3f68", + "support" + ], "css/vendor-imports/mozilla/mozilla-central-reftests/check-for-references.sh": [ "36580ea3478c04f7c0618980f34140299bf77f60", "support" @@ -515589,7 +519099,7 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/masking/reftest.list": [ - "9943729d968c8515e79ffd1ca44ba50e0841c20c", + "86b9dc2301a13102c4b16c90b0477a90403aba79", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/masking/support/50x100-opaque-blue.svg": [ @@ -515677,7 +519187,7 @@ "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/reftest.list": [ - "6d496e71f13949bd5b987ee090de61cb55ea410f", + "021ab07f4983f2a7317af660696cbdd772d3912f", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/ruby/nested-ruby-pairing-001-ref.html": [ @@ -516757,7 +520267,7 @@ "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-emphasis-line-height-001z.html": [ - "bc723b2f9578a25e9077d170cf82c98098696619", + "6b7f474af07927dda8713d0e4d635def7b1fccd9", "reftest" ], "css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-emphasis-line-height-002-ref.html": [ @@ -519249,7 +522759,7 @@ "testharness" ], "custom-elements/OWNERS": [ - "de519be181feb876ab21656956ae457bc63ae375", + "9f6553b67cad3b479d3beb678653db4e712ed227", "support" ], "custom-elements/adopted-callback.html": [ @@ -519364,6 +522874,10 @@ "4c54b3e179c23375334d2b6d667ab17781c2c127", "testharness" ], + "custom-elements/reactions/HTMLInputElement.html": [ + "ad2bdba330235b320eda6636cd30b320d607d74f", + "testharness" + ], "custom-elements/reactions/HTMLOptionElement.html": [ "c8f6783989a6f0865fe11fc7e75ab87a1afb0b5c", "testharness" @@ -519425,7 +522939,7 @@ "support" ], "custom-elements/resources/custom-elements-helpers.js": [ - "accaee861d319e0caf00356521479dc5951ac162", + "875838d63f7d44c7a958a03c494ba709c53816c9", "support" ], "custom-elements/resources/empty-html-document.html": [ @@ -519588,6 +523102,10 @@ "62747b6d0328445778050f3e4d6ec46dbdc3a18c", "support" ], + "docs/_writing-tests/testdriver.md": [ + "72383e28f07286308a7c6233535536a9a4edeb5e", + "support" + ], "docs/_writing-tests/testharness-api.md": [ "5fa854f33ee9141f2226fa1e1b4e5aa44c3b75c7", "support" @@ -519669,7 +523187,7 @@ "support" ], "docs/introduction.md": [ - "284b4142b3daaf900c41be4c0c6b8c022ec2d5b5", + "98606eeeb43d80624d6ad6fa51c741afedff1598", "support" ], "dom/OWNERS": [ @@ -519829,7 +523347,7 @@ "testharness" ], "dom/events/Event-timestamp-high-resolution.html": [ - "689ee67c1e9a45378cc2fb35384a774515a1d641", + "b850d06415afbd533b822efaa59efaee2375065d", "testharness" ], "dom/events/Event-timestamp-safe-resolution.html": [ @@ -521605,7 +525123,7 @@ "support" ], "editing/data/insertparagraph.js": [ - "5cc4cee5d1ba32775a3a940e11ce46215b276466", + "7e5061611c18e53d67329ebd32bc078bcce4c73d", "support" ], "editing/data/inserttext.js": [ @@ -521948,6 +525466,278 @@ "3e1ef3ebcb1f0c15251dd968848b9e6805aa8b90", "testharness" ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html": [ + "aef28a54f483ec66edbd9b0ea500d25f3966c4cb", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-decode-errors.html": [ + "0bbba500ce6e111c148ecd183d53d57c73f1416a", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html": [ + "8c76fc5373dbd2c62c1f15b97889cb43a4c2a6ef", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html": [ + "1d5e6367dd725c7d8863503e66b9750f469ab3ee", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-decoder.js": [ + "3bd6d8db793696c1827c31990e3e40e5181d9cac", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html": [ + "42ac7feefc19dc6ef09ff292bc8584dd376802a2", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html.headers": [ + "6234bafffab6905a737ea67db52607d73c4de007", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html": [ + "8a1e3421b49173a03f55447b13e0fa8991e0114c", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html.headers": [ + "eb7a01db0993ccbc3c5a3463b1a579d317b7fe1f", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html": [ + "2d0c46478ea701ab05824b0f334da16fb42c34b0", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html.headers": [ + "eb7a01db0993ccbc3c5a3463b1a579d317b7fe1f", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html": [ + "a838bc3715b451abf71ab6033da96ac3661a0fcb", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html.headers": [ + "eb7a01db0993ccbc3c5a3463b1a579d317b7fe1f", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html": [ + "2b4e86fdf26006eefd3ac5093bda1d02258b0121", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html.headers": [ + "75aebdf6b2efad85075f1ead7ce7514eba7e7e06", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html": [ + "18240913dc69be3419e51987315842b3168253c8", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html.headers": [ + "eb7a01db0993ccbc3c5a3463b1a579d317b7fe1f", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html": [ + "7d40adac42aa7984b271d38d08f34bdc57956e81", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html.headers": [ + "eb7a01db0993ccbc3c5a3463b1a579d317b7fe1f", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html": [ + "7a6264e73b6f555b55307d4316b64b685bc4eed8", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html.headers": [ + "eb7a01db0993ccbc3c5a3463b1a579d317b7fe1f", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html": [ + "94a2d523cca2484c1646ea38cc35463104bcdf6a", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html.headers": [ + "eb7a01db0993ccbc3c5a3463b1a579d317b7fe1f", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html": [ + "d0e0236048f578b35a5956295d2a295660a2c297", + "testharness" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html.headers": [ + "eb7a01db0993ccbc3c5a3463b1a579d317b7fe1f", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp-encoder.js": [ + "95a1d9a2cd6fde5acc61f3a5d4e5e029dfe89390", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_chars-cseucpkdfmtjapanese.html": [ + "980bb49d717d4c7ddcd2513a09fa82b11fd52ce3", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_chars-cseucpkdfmtjapanese.html.headers": [ + "6234bafffab6905a737ea67db52607d73c4de007", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_chars-x-euc-jp.html": [ + "1c4376778a2ef350ec51c3bc7bc2682fa2f55ad9", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_chars-x-euc-jp.html.headers": [ + "75aebdf6b2efad85075f1ead7ce7514eba7e7e06", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_chars.html": [ + "55605802b9560e510a8497129aaffea66f5e3568", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_chars.html.headers": [ + "eb7a01db0993ccbc3c5a3463b1a579d317b7fe1f", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_errors.html": [ + "6f3c1e259d124639a8d1bee02d1c0af2fd3b4099", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/eucjp_errors.html.headers": [ + "eb7a01db0993ccbc3c5a3463b1a579d317b7fe1f", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/jis0208_index.js": [ + "b6f1d6cbe2cfa878b4317930176750a9209fd143", + "support" + ], + "encoding/legacy-mb-japanese/euc-jp/jis0212_index.js": [ + "d342afa1b0cd10a3f3f0b077e4186dad5298ebcc", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html": [ + "25764a359d3d95c75a7e3b2008e912c80ef69194", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-errors.html": [ + "c33b71682a2937611df5d609afd75a2c17584256", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html": [ + "3982165d2f78d500d87fa9a4590da8cdc3c0ae9c", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decoder.js": [ + "3f9d6377755867c9b9b7d05ccaa88f459d0ca436", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html": [ + "29e291dab6a246928405a96d6d856c62383a7a4b", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html.headers": [ + "41346529f39267656c8061d183165a30998c8e47", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html": [ + "56eac9997ca4620ae3f60ac94f4746f16ad69398", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html.headers": [ + "cb27b3ae6b3fb2d85f462cb5a1d0e703a3379e5c", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html": [ + "04b9ba862024429668725770249a13a93118a1ce", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html.headers": [ + "cb27b3ae6b3fb2d85f462cb5a1d0e703a3379e5c", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html": [ + "a10fb4f38065dce550f099b83dee5315b014d9bd", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html.headers": [ + "cb27b3ae6b3fb2d85f462cb5a1d0e703a3379e5c", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-stateful.html": [ + "7bfe71aa388e967b487a0be868d1ebbdf1aef2a3", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html": [ + "89dd8a641b8eb05e47cc2d23dd452cdfc9f9dfc9", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html.headers": [ + "cb27b3ae6b3fb2d85f462cb5a1d0e703a3379e5c", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-ascii.html": [ + "08ce23f14166644363f128d80330804706fdfd3f", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html": [ + "c250dd2597bf3e6b66d4bed1484363ee186197e3", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html.headers": [ + "cb27b3ae6b3fb2d85f462cb5a1d0e703a3379e5c", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html": [ + "a54eafaa9c27429edf96650392d288805509f6a5", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html.headers": [ + "cb27b3ae6b3fb2d85f462cb5a1d0e703a3379e5c", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html": [ + "f4f427e139bf5d92c4982d108315733ce10c091c", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html.headers": [ + "cb27b3ae6b3fb2d85f462cb5a1d0e703a3379e5c", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html": [ + "d823114d271354e58578547d0de3b570d9705282", + "testharness" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html.headers": [ + "cb27b3ae6b3fb2d85f462cb5a1d0e703a3379e5c", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encoder.js": [ + "77ee708cafbbe8c3bd13c4fa0eedb2e0ac8221ac", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars-csiso2022jp.html": [ + "6832674dd34ba4d8993b0128e53f4c4cf69d770f", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars-csiso2022jp.html.headers": [ + "41346529f39267656c8061d183165a30998c8e47", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars.html": [ + "dc453875eb8d7958974499470c36f1a35f17346e", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars.html.headers": [ + "cb27b3ae6b3fb2d85f462cb5a1d0e703a3379e5c", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_errors.html": [ + "035eb8a84538412a90e7b6fa87f07245782ed6e7", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_errors.html.headers": [ + "cb27b3ae6b3fb2d85f462cb5a1d0e703a3379e5c", + "support" + ], + "encoding/legacy-mb-japanese/iso-2022-jp/jis0208_index.js": [ + "b6f1d6cbe2cfa878b4317930176750a9209fd143", + "support" + ], "encoding/legacy-mb-japanese/shift_jis/jis0208_index.js": [ "b6f1d6cbe2cfa878b4317930176750a9209fd143", "support" @@ -523229,7 +527019,7 @@ "testharness" ], "encrypted-media/encrypted-media-default-feature-policy.https.sub.html": [ - "a941d1f99d1575f7bd9448e7ce0d6d67f873a1ef", + "d7627e2017ae8ac994a6bc8a2a00df0dd2332c59", "testharness" ], "encrypted-media/idlharness.html": [ @@ -523793,7 +527583,7 @@ "testharness" ], "eventsource/interfaces.html": [ - "7c6142901b523241a7d4f37924b5ac23ca326dd3", + "118139dd2e6054a5753ade00c71ecf1093c03781", "testharness" ], "eventsource/request-accept.htm": [ @@ -523936,12 +527726,16 @@ "96ae900bcde19a4ffcab30f1d01b393e07936e99", "support" ], + "feature-policy/resources/feature-policy-wakelock.html": [ + "cb370c3a26271da43e46f348f23eb20a912609a3", + "support" + ], "feature-policy/resources/feature-policy-webvr.html": [ "57a94b461d4be6a179a53d199dfdd9a2b096d0fb", "support" ], "feature-policy/resources/featurepolicy.js": [ - "5776de6ca05ffb5f54cd9655309d85902181fc06", + "d2d5194fab261d7aa0b8d1b31077a42316f5f351", "support" ], "feature-policy/resources/redirect-on-load.html": [ @@ -524040,6 +527834,10 @@ "f06a6509e9b781db8c5740ba5a233b23f54d31d7", "testharness" ], + "fetch/api/basic/request-headers-case.any.js": [ + "0d212a3cfc9d2e06d96aa367fb8b998527bd53b4", + "testharness" + ], "fetch/api/basic/request-headers.any.js": [ "76487a5843701c7ef8a6f016f7ec87360e6569b0", "testharness" @@ -524137,7 +527935,7 @@ "testharness" ], "fetch/api/cors/cors-filtering.js": [ - "7a2fd60f2ec9c9165c25cb6d818d3cc1be737a53", + "5beac80fa31e80addfdd29fa58557ef59865744a", "support" ], "fetch/api/cors/cors-multiple-origins-worker.html": [ @@ -525397,7 +529195,7 @@ "manual" ], "gamepad/idlharness.html": [ - "c9d8668d614404f24a8bf15d803e07e2ff6debd4", + "cafa75af045a99b74e979b8905671d8b4bde107c", "testharness" ], "gamepad/timestamp-manual.html": [ @@ -525413,7 +529211,7 @@ "testharness" ], "generic-sensor/generic-sensor-tests.js": [ - "892dc161d4f0376a67c86f73e84f57214e0f3fb0", + "09c6bf8a8fe005d467b522d5daf254c34c60b925", "support" ], "generic-sensor/idlharness.https.html": [ @@ -525480,6 +529278,14 @@ "ca3036737a662e8673477b1a09b6fce89f0f98f4", "testharness" ], + "geolocation-sensor/OWNERS": [ + "8a972af50fbb0a8cc4688385174a28e5d7a29734", + "support" + ], + "geolocation-sensor/idlharness.https.html": [ + "2f7f2b6879eab3add1ea962b02eb264ebb3f0154", + "testharness" + ], "gyroscope/Gyroscope.https.html": [ "504abfa42529e08576e49c3296464bcea5fe0b8a", "testharness" @@ -527288,6 +531094,26 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload.tentative.html": [ + "fbb1c40a56f513dd66084f780eb650664188ec4f", + "testharness" + ], + "html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-1.tentative.html": [ + "dac32837cb8f4cbf91987b6e9a47ac1e55e959ac", + "support" + ], + "html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-2.tentative.html": [ + "e45de51132ab221732295759e9f704466fd22557", + "support" + ], + "html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-dynamic-iframe.tentative.html": [ + "4236268fccfeb4735f469cf7c73e4735c0efd11d", + "support" + ], + "html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-iframe.tentative.html": [ + "e8251bdc0b5e35d274593f0534b1f70b2adbc58c", + "support" + ], "html/browsers/offline/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -527541,7 +531367,7 @@ "testharness" ], "html/browsers/origin/cross-origin-objects/cross-origin-objects.html": [ - "9202ebf4d640ffccec49451bae23526c24a1053b", + "75eafc8c0e1f8350895029dad9ea7477ac0c13ce", "testharness" ], "html/browsers/origin/cross-origin-objects/frame.html": [ @@ -528545,7 +532371,7 @@ "testharness" ], "html/dom/documents/resource-metadata-management/document-lastModified-01.html": [ - "43ca280deb707482f4fa7a327e00a5a24cedc848", + "6fd835a67e0d2ef8f669cc9f256ac05c9959591b", "testharness" ], "html/dom/documents/resource-metadata-management/document-lastModified.html": [ @@ -534001,7 +537827,7 @@ "testharness" ], "html/editing/focus/processing-model/preventScroll.html": [ - "fca882d5c3a5a78e486d6527d8b0cbf09d23c3e7", + "5b543814488d47089606f41394857eff6ad2b03e", "testharness" ], "html/editing/focus/processing-model/support/preventScroll-helper.html": [ @@ -535360,6 +539186,110 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html": [ + "401080bf2f8be86c3c479f8443437270746b6308", + "support" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1a.html": [ + "1bc27f1eb3489e7eb31cdca1e54ba6a44824472e", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1b.html": [ + "335e43d02851f2bcecb73b5696852d78fd5466de", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1c.html": [ + "277665de12359c4347bb0330ae5c4e05042213f7", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1d.html": [ + "5bd0600580dcf8c6a021c4c4bce231571bcd0be3", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1e.html": [ + "03b2ae8ee58c3252d6b1b686065955f1bd6f623f", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1f.html": [ + "cd1ced5b0e7aefe31e8fbdc07968ad68f8190e0d", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1g.html": [ + "0ad94aa9f5bf19df18b0db3fe299ef096f4f6e23", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1h.html": [ + "67a4d33dfbdc93fc1d5c3905b443637cfafdeaa8", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1i.html": [ + "87276a6d5ba2c743046adce026f5f2e83d3cfa7d", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1j.html": [ + "c55e061504c612c06cab3075ca06b34d0af0aca4", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1k.html": [ + "32bf85eb64e3ef720423bfdc75b8c4262bff2097", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-1l.html": [ + "190107ec38022cac7dfd3433e7cfca9653751040", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html": [ + "e6924f0eeef9c478f8915e9a7307e031df485dcd", + "support" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2a.html": [ + "bd1bc44f48839975730cf413bfda2f0a7be57acf", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2b.html": [ + "20a5db75b12686daa3f4e048b63b1a203c84e8c5", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2c.html": [ + "c290eeb0a3e28d081294cc041e30f40bc899bb85", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2d.html": [ + "2e06117180c1dfa3d227713e8e88d51d282d6b67", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2e.html": [ + "57ec7d6b86de86618b15265b4c4165172be9e11b", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2f.html": [ + "cc40809a6c0e986650aff843c87ccd5ae8a24597", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2g.html": [ + "12b8054319a3d04660e0d2f05f15db349109215c", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2h.html": [ + "bf7d80818e0767abb1ba2d886adf2ee873b7369b", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2i.html": [ + "1be295f42e3c22442d352749ada6c99ea566844f", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2j.html": [ + "47aa4321c196e844f0094cc168bcfe80c5f2e2d7", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2k.html": [ + "4fc609a997ec25d70b8529b0095e96772a9e3253", + "reftest" + ], + "html/rendering/non-replaced-elements/the-page/body-margin-2l.html": [ + "e65ce580ec8ab09e03cc4ec55cfb735688335846", + "reftest" + ], "html/rendering/non-replaced-elements/the-page/body_link.xhtml": [ "588faa58c26ff0c8f2bdbf52bd0549f119028c92", "support" @@ -536161,7 +540091,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/interfaces/TextTrack/activeCues.html": [ - "e294dbd7b5c21fb61e0796097e1ba9f9c054dee5", + "6540d532b19dff8a6745ec29de69caf4a1345508", "testharness" ], "html/semantics/embedded-content/media-elements/interfaces/TextTrack/addCue.html": [ @@ -536449,7 +540379,7 @@ "manual" ], "html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html": [ - "e8101e94b40d1eb56f12e16a774ec5a80514ab47", + "3427185bd1793bec4e56bf536bcd666a37624044", "testharness" ], "html/semantics/embedded-content/media-elements/mime-types/canPlayType.html": [ @@ -536485,19 +540415,19 @@ "testharness" ], "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-to-other-document.html": [ - "aaa705291eba72ed3d9d3836f0de8d19720604de", + "c4acd6d0f3bf97a3b551f78324b6f7f9b454d51b", "testharness" ], "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-within-document.html": [ - "09dc023213aeaf3e871ee70fafc6fa1e083010bc", + "35f53ef59845d8ad0a780838e98a4182ffc85701", "testharness" ], "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html": [ - "79b2b6cf21717300b1d109fdc8aaa867038a4dbb", + "619b2f24790ea9c083800bfccae592674286d0e4", "testharness" ], "html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document.html": [ - "23e98284f003acebd9ea8cd6fe6d72aced95c108", + "6a40f42743ad8bfd8f6edb360b53bd6a49a40dd5", "testharness" ], "html/semantics/embedded-content/media-elements/playing-the-media-resource/play-in-detached-document.html": [ @@ -536561,7 +540491,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/track/track-element/cloneNode.html": [ - "acefa1a29e15940afddfff3e967dd0010fa87436", + "3182fae8b2cef5fa28b063f2890836900bb0afbc", "testharness" ], "html/semantics/embedded-content/media-elements/track/track-element/cors/003.html": [ @@ -536989,7 +540919,7 @@ "testharness" ], "html/semantics/embedded-content/the-canvas-element/imagedata.html": [ - "e685ab0d76bdd1b60a5d6f1e2126ea1a89db97d1", + "f60ef8a60ad6f22be60049c8cdc6ca616f7f805d", "testharness" ], "html/semantics/embedded-content/the-canvas-element/initial.colour.html": [ @@ -538657,7 +542587,7 @@ "testharness" ], "html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html": [ - "f824af3b23cc1d0412783dbcbcbdee818a501d56", + "92e1dbed4c1cd07879b7748b764bf01d8685240e", "testharness" ], "html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange.html": [ @@ -538865,7 +542795,7 @@ "testharness" ], "html/semantics/forms/the-input-element/checkbox.html": [ - "1bbb79b50f54bb363d6b8ff1503139520128fbc5", + "9765d69386d9f25a9793b101f5173ccf29b5bdee", "testharness" ], "html/semantics/forms/the-input-element/checked.xhtml": [ @@ -539168,6 +543098,10 @@ "cde5aa224321a619742c60deddece492225536e1", "testharness" ], + "html/semantics/forms/the-option-element/option-text-setter.html": [ + "4ddea322ab1866a6cef619e5b4e1d1e82d60838e", + "testharness" + ], "html/semantics/forms/the-option-element/option-text-spaces.html": [ "cfa51c5d2aa4a3e11df7b16d962bdb874224bb3c", "testharness" @@ -539609,7 +543543,7 @@ "testharness" ], "html/semantics/interactive-elements/the-details-element/toggleEvent.html": [ - "84dda1357022cd800b0663aadd3488bd04a64047", + "8fe77deb43d14d0a6b306dc903d56dcda1e80d50", "testharness" ], "html/semantics/interactive-elements/the-dialog-element/centering-iframe.sub.html": [ @@ -542341,7 +546275,7 @@ "support" ], "html/syntax/parsing/DOMContentLoaded-defer-support.js": [ - "b45b202792d2571d26f03bf72695026bd3a4ce4e", + "d9b6c0bbc62f48f931e2317c414f7a31d97308a8", "support" ], "html/syntax/parsing/DOMContentLoaded-defer.html": [ @@ -542921,7 +546855,7 @@ "testharness" ], "html/webappapis/animation-frames/same-dispatch-time.html": [ - "a9c680408c2a8c9bae9bbd3309c493da2ad0513a", + "e99c08823b218a53057d5cf953eaee6b139bb0ed", "testharness" ], "html/webappapis/atob/.gitkeep": [ @@ -543784,6 +547718,10 @@ "644b5b18359d26db9cd4d037b075ca016e2337b5", "testharness" ], + "innerText/multiple-text-nodes.window.js": [ + "b420d0685f5aee068d352ebd22c54d40394faa0f", + "testharness" + ], "innerText/setter-tests.js": [ "af229fda56257b474868f6adf72be74aa338e52d", "support" @@ -543845,7 +547783,7 @@ "support" ], "interfaces/dedicated-workers.idl": [ - "16b2bc5c05aab5838458dfee6203b83d36b13dfd", + "993f3d3b4fa58585c444a76d2a5fc9f388e65999", "support" ], "interfaces/dom.idl": [ @@ -543860,6 +547798,10 @@ "3b2cb524838f2274463664621fddc7c927ac95af", "support" ], + "interfaces/geolocation-sensor.idl": [ + "3927181a988c0a95cff9813d5074112265e9d263", + "support" + ], "interfaces/geometry.idl": [ "dea55d151bd19d342f9b28bb2f11e5108ab970ff", "support" @@ -543877,7 +547819,7 @@ "support" ], "interfaces/mediacapture-main.idl": [ - "3d59aebd6219a0312ade8c543bb389030d670d82", + "bb672e3ffcc73f1a58cd15b232f15062c3513763", "support" ], "interfaces/orientation-sensor.idl": [ @@ -543917,7 +547859,7 @@ "support" ], "interfaces/webrtc-pc.idl": [ - "2e9e783362e8ea80cbad3c9c688d63b9c8256163", + "67ca220dbed4271371f67a7a7e2a0a9734288ab6", "support" ], "interfaces/webusb.idl": [ @@ -545277,7 +549219,7 @@ "testharness" ], "mediacapture-streams/MediaStream-default-feature-policy.https.html": [ - "2339e7eb9fb14819ce2beb5e0b640a3744dbe4ac", + "5444cf3d3e2a637a506c862e91bbfb52a539c7ab", "testharness" ], "mediacapture-streams/MediaStream-finished-add.https.html": [ @@ -546945,7 +550887,7 @@ "testharness" ], "netinfo/netinfo-basics.html": [ - "f0fa5c7071c5cdcf3d1cc3e99de27c4c40c20e99", + "972b4048bbb74e1489329ae48759b587b9ad3800", "testharness" ], "notifications/OWNERS": [ @@ -553180,6 +557122,10 @@ "f34f6729a82f6efc16dc4d62c95f706688d0456b", "testharness" ], + "paint-timing/child-painting-first-image.html": [ + "53429c63e77999dbcc633ff45469b869d2005d5e", + "testharness" + ], "paint-timing/first-contentful-bg-image.html": [ "6ee710d78e5f0f174ba00fea97c49d05641ed514", "testharness" @@ -553193,13 +557139,17 @@ "testharness" ], "paint-timing/first-contentful-paint.html": [ - "7cf0881d8a247bc85e8c8ad1be131b84dc9b56bd", + "8b6d856506ad2397be5904fe127707b9bb3f6a88", "testharness" ], "paint-timing/first-contentful-svg.html": [ "41436ee277f1882235b668afb7144f14491c6a5c", "testharness" ], + "paint-timing/first-image-child.html": [ + "305c0f019f82e527769afbfeb7c7f3452ed7ac50", + "testharness" + ], "paint-timing/first-paint-bg-color.html": [ "bf6555a04e08636abb0f25c0948d8e7e5a34eb62", "testharness" @@ -553220,6 +557170,14 @@ "dda93e587da353e712ff9bc671ebcafa8dea222f", "support" ], + "paint-timing/resources/subframe-painting.html": [ + "e4cff31d8071c651847d4aac2dd91ae6b7fe4287", + "support" + ], + "paint-timing/resources/subframe-sending-paint.html": [ + "14013a37d0f6496ab3d793c4c51eb8d22c1aec57", + "support" + ], "payment-handler/OWNERS": [ "c5e5d0fd086bbe946f99aa8836785c81a2bccb3d", "support" @@ -553384,10 +557342,6 @@ "9488e832b86b582310b0f46a68f9cf420b473e98", "testharness" ], - "payment-request/payment-request-response-id.html": [ - "8feda1d3b4c071014d4c8c7898598c7d23086216", - "support" - ], "payment-request/payment-request-shippingAddress-attribute.https.html": [ "ce33b78031644cb508c6fe148c21c37128b422c0", "testharness" @@ -553737,7 +557691,7 @@ "support" ], "pointerevents/pointerevent_support.js": [ - "e185e068ac229f2516e1345dd151090eb60d7950", + "a804ecbe4c7d1723b2a7eaee11e3c869cd5f56a7", "support" ], "pointerevents/pointerevent_suppress_compat_events_on_click-manual.html": [ @@ -553753,7 +557707,7 @@ "manual" ], "pointerevents/pointerevent_touch-action-button-test_touch-manual.html": [ - "5da2686dec322631f63640e4699431d7581d2f5f", + "a3f832ef68df2d970d74c0ac2f5e45627005b89e", "manual" ], "pointerevents/pointerevent_touch-action-illegal.html": [ @@ -553833,7 +557787,7 @@ "manual" ], "pointerevents/pointerevent_touch-action-span-test_touch-manual.html": [ - "666e92e9be855d1290e97f1c732e021a98c666de", + "b5b3785a0063b605b27ae735190e36a06dcd25c3", "manual" ], "pointerevents/pointerevent_touch-action-svg-test_touch-manual.html": [ @@ -553841,7 +557795,7 @@ "manual" ], "pointerevents/pointerevent_touch-action-table-test_touch-manual.html": [ - "a6a9c6da496d34a2e937ace1424120ee790eba24", + "5a8575522ab6868dc5235ace1e052a3f8320724d", "manual" ], "pointerevents/pointerevent_touch-action-verification.html": [ @@ -553980,6 +557934,10 @@ "8957392c3329646d4a17506b1fc5e3e4bb6237a8", "support" ], + "preload/modulepreload.html": [ + "82adb9e31fca47cf16908fc41890d74979f1680f", + "testharness" + ], "preload/onerror-event.html": [ "9f85f429c75d8469ef4bad843a09a307a20c6f58", "testharness" @@ -554072,6 +558030,14 @@ "ac876cf9750337fcde99e547f5dc1223bb200772", "support" ], + "preload/resources/module1.js": [ + "e713bdc7aaf9ba67371e8daaa3919a9d64cbb2c3", + "support" + ], + "preload/resources/module2.js": [ + "38bf928118da65895099f0805333bbeff779e83e", + "support" + ], "preload/resources/preload_helper.js": [ "56ca07621a7198b2f983b3f13a5a63d9ce81ab3c", "support" @@ -554092,6 +558058,10 @@ "ac876cf9750337fcde99e547f5dc1223bb200772", "support" ], + "preload/resources/syntax-error.js": [ + "e53f6ce20fd1a1f64cd40bb2bb69bc4b4495d4d6", + "support" + ], "preload/resources/white.mp4": [ "577f031289beb30fa38824950ea297818bab8e81", "support" @@ -562048,6 +566018,10 @@ "1b6e111056101c88623eda6148042c310a5b7a6d", "testharness" ], + "resource-timing/resource_subframe_self_navigation.html": [ + "072eb2cd05a0711abc498f4180738aef7d1bf282", + "testharness" + ], "resource-timing/resources/TAOResponse.py": [ "9e8051a2ff8fff72b36ed1cecb61f9e7bba29071", "support" @@ -562108,6 +566082,10 @@ "f53513f6f47fd4a6d4994a4ef7d6e37d1777ea57", "support" ], + "resource-timing/resources/notify_parent.html": [ + "91790b717d0922dcd58237137c9728afbe488e46", + "support" + ], "resource-timing/resources/resource_timing_test0.css": [ "497dda7ad0a0119fe0f39ea211e42278b6015309", "support" @@ -562128,6 +566106,10 @@ "6c297adcdb1627260d43e5bde864a3823e014df9", "support" ], + "resource-timing/resources/self_navigation.html": [ + "4a9ffa5e8966e7b343004f06f77b3ce453e2fbcd", + "support" + ], "resource-timing/resources/webperftestharness.js": [ "7c95ccc50aab544a48aae6a77f6b7a907cc30bc8", "support" @@ -562440,38 +566422,6 @@ "01ae6e757d428800555012783e290ebba575bcab", "testharness" ], - "selectors/attribute-selectors/attribute-case/cssom.html": [ - "a7d352c93c9727bbdae2d44df7ea84baabf16252", - "testharness" - ], - "selectors/attribute-selectors/attribute-case/resources/semantics-quirks.html": [ - "5389ddec11c37e4fd7387de59ac889592f3bb6ec", - "support" - ], - "selectors/attribute-selectors/attribute-case/resources/semantics-xml.xhtml": [ - "62a57c91c0303399f22955708e985e1c45df1251", - "support" - ], - "selectors/attribute-selectors/attribute-case/resources/syntax-quirks.html": [ - "74f283de72de512802cefd90d9ccb28b8c9bfb18", - "support" - ], - "selectors/attribute-selectors/attribute-case/resources/syntax-xml.xhtml": [ - "c0a43c3a9497d6711c012caec1fdb796d84455cb", - "support" - ], - "selectors/attribute-selectors/attribute-case/semantics.html": [ - "f4fc0fa74f2922a1242442de107612d2836ef38b", - "testharness" - ], - "selectors/attribute-selectors/attribute-case/syntax.html": [ - "dfb854d30a881f8765c6ee30bc334a440eb59dc2", - "testharness" - ], - "selectors/child-indexed-pseudo-class.html": [ - "cdf340dd83ea3a32d0d7edc31b5ded294585ef83", - "testharness" - ], "server-timing/resources/blue.png": [ "7de5cdb5ad04ac365430b3b5f5ba01d2ba57ea23", "support" @@ -562709,7 +566659,7 @@ "testharness" ], "service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html": [ - "a6652870c60e93ff522ac107c1b69ec9c9fb2781", + "2c4462c6a099779e0e80271f6b965082338699d7", "testharness" ], "service-workers/service-worker/ServiceWorkerGlobalScope/resources/close-worker.js": [ @@ -562756,8 +566706,12 @@ "86b705c2c5b7c2609356144ebb717b376631659e", "support" ], + "service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-newer-worker.js": [ + "5e07b1bdc0cf98f7e7e68fdec2f858fae0348b64", + "support" + ], "service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-worker.js": [ - "eac69ddc3445a66abddd1494302bf9aac8c7104d", + "b7bdc0b39d0493d605d24e9dfcbfa77ec8ced6a0", "support" ], "service-workers/service-worker/ServiceWorkerGlobalScope/resources/unregister-controlling-worker.html": [ @@ -562765,11 +566719,11 @@ "support" ], "service-workers/service-worker/ServiceWorkerGlobalScope/resources/unregister-worker.js": [ - "2a5cbc71e6f235612783b9f7bf5721d4e010d06e", + "858e9adb48438b1d966b33d47c8d20e04bbaf53f", "support" ], "service-workers/service-worker/ServiceWorkerGlobalScope/resources/update-worker.js": [ - "7215c7963e8f45f871bb5fac6359b5e3d2ff701b", + "e9ec56fcf4458666bffbc1e2f916879bbe9b6ea4", "support" ], "service-workers/service-worker/ServiceWorkerGlobalScope/resources/update-worker.py": [ @@ -562797,7 +566751,7 @@ "testharness" ], "service-workers/service-worker/activation.https.html": [ - "0ea784f7142fe801a27cff7a346e98c059b3be7c", + "cdd7cd200ff4ec3df61c257305953b3a1f369ab8", "testharness" ], "service-workers/service-worker/active.https.html": [ @@ -562892,6 +566846,10 @@ "8402c159967bb6e91903adc52e7d68c8d2443a72", "testharness" ], + "service-workers/service-worker/detached-context.https.html": [ + "c7645323ba0753f35beaef90836631ca16f64d3a", + "testharness" + ], "service-workers/service-worker/extendable-event-async-waituntil.https.html": [ "d69e6d84a24ec77077cd1264c2946c578d379fd5", "testharness" @@ -562940,6 +566898,10 @@ "ce7e7cf76aace24a92d455cdb6b54fc9048960e8", "testharness" ], + "service-workers/service-worker/fetch-event-respond-with-partial-stream.https.html": [ + "c0e976149cf49c09f52b81159d2a48c301a4aa4b", + "testharness" + ], "service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html": [ "cf31c2b1cba37a016dc9e9a3ddb2429a5d518052", "testharness" @@ -563381,7 +567343,7 @@ "testharness" ], "service-workers/service-worker/registration-iframe.https.html": [ - "6d11b9ecf339e6e476fe594d5cb4e0873b0845d1", + "a16676fee2ce27d63a59c9252614b258465254c7", "testharness" ], "service-workers/service-worker/registration-mime-types.https.html": [ @@ -563641,7 +567603,7 @@ "support" ], "service-workers/service-worker/resources/fetch-event-network-error-controllee-iframe.html": [ - "b1dba04c563bf9435ede5e0f561c6188b0f9ebc2", + "160124776f2020d2620fde7e6b2a6c35e90b6be9", "support" ], "service-workers/service-worker/resources/fetch-event-network-error-worker.js": [ @@ -563649,13 +567611,17 @@ "support" ], "service-workers/service-worker/resources/fetch-event-respond-with-argument-iframe.html": [ - "4a9d7e189909b5adfdd4d1c0ebddb7cd90fde159", + "6ae750c3e69e6fecde17ba1d026391b151bc0ebb", "support" ], "service-workers/service-worker/resources/fetch-event-respond-with-argument-worker.js": [ "b58b92a145a89f71c414de5e837c1db026beb1d6", "support" ], + "service-workers/service-worker/resources/fetch-event-respond-with-partial-stream-worker.js": [ + "6054d723ad0d0d310b02841b696d2357e7137398", + "support" + ], "service-workers/service-worker/resources/fetch-event-respond-with-readable-stream-iframe.html": [ "16fe2d0f84bb7898f7a89182e24001b3bc64775e", "support" @@ -563901,11 +567867,11 @@ "support" ], "service-workers/service-worker/resources/interfaces-idls.js": [ - "881448e41003f3e942e6a0b8220e39db279da5cf", + "ffb2cb87ff6a02509423027f254a7057c3cbb23f", "support" ], "service-workers/service-worker/resources/interfaces-worker.sub.js": [ - "1cb237ff00a54414a6e4010f1288be51799a52d5", + "0ac0f813b692f2e6ab6a8337427427d1c33a128f", "support" ], "service-workers/service-worker/resources/invalid-blobtype-iframe.https.html": [ @@ -564180,6 +568146,22 @@ "d57215bcad8a3966175930642dfd34281b11aeff", "support" ], + "service-workers/service-worker/resources/respond-with-body-accessed-response-iframe.html": [ + "d3d543503ab9c4398a674105a7c67f1a2e74cde7", + "support" + ], + "service-workers/service-worker/resources/respond-with-body-accessed-response-worker.js": [ + "8d63ab8c6c2070d16f5243fdc80c207b2fc4226c", + "support" + ], + "service-workers/service-worker/resources/respond-with-body-accessed-response.jsonp": [ + "d2d9bf76453767aaaf7df973a26bd507b6ab42aa", + "support" + ], + "service-workers/service-worker/resources/sandboxed-iframe-navigator-serviceworker-iframe.html": [ + "b935f6d8fea362c4aceb713fcde91343d3e4bfa7", + "support" + ], "service-workers/service-worker/resources/service-worker-csp-worker.py": [ "f7c6bb3ba222dc35a09ef806a7c6d145339f9eb2", "support" @@ -564268,6 +568250,10 @@ "29d35c8ffdc89278c6771b47544375145e2b23d5", "support" ], + "service-workers/service-worker/resources/websocket-worker.js": [ + "fcab3ff615c3c87ce75304ad29556772392620ed", + "support" + ], "service-workers/service-worker/resources/websocket.js": [ "dbf752f9a356f51f6ddf96053b39b5cd3515ddc8", "support" @@ -564288,9 +568274,13 @@ "8624b498e37d44bf3a3a74ccd46f928f7b0338cb", "support" ], - "service-workers/service-worker/resources/xhr.js": [ - "bb913597a735c33caac7aee8cb8de76a38484ae4", - "support" + "service-workers/service-worker/respond-with-body-accessed-response.https.html": [ + "e2e9b5d70f141e71f3617a11a336affea66662db", + "testharness" + ], + "service-workers/service-worker/sandboxed-iframe-navigator-serviceworker.https.html": [ + "1573ac5b39502f4b736d951e9fb781a348f4f70d", + "testharness" ], "service-workers/service-worker/service-worker-csp-connect.https.html": [ "5ddf675cd659119e375b0f349a0f6b0b4139b536", @@ -564385,7 +568375,11 @@ "testharness" ], "service-workers/service-worker/waiting.https.html": [ - "6e3c7a4c12d90b10651653e680615185eaf270bc", + "7f891059dd421274db18967fd570abb3b1a90285", + "testharness" + ], + "service-workers/service-worker/websocket-in-service-worker.https.html": [ + "6df2bb30fcf67df57d952ad8a03809b9425ca319", "testharness" ], "service-workers/service-worker/websocket.https.html": [ @@ -564400,10 +568394,6 @@ "2c5e8cb2b7be6d394aaa1400158d3f14895909f3", "testharness" ], - "service-workers/service-worker/xhr.https.html": [ - "f5d565c95c7a08da139b0f3b95bb0cfb0ae2b936", - "testharness" - ], "service-workers/specgen.json": [ "0d98c8249e25cd4c7a4d88f722cfe8f235fb7a66", "support" @@ -565632,6 +569622,26 @@ "44f9ceaa3bfc9d8b92885997d322486bd0f237a6", "testharness" ], + "streams/readable-streams/reentrant-strategies.dedicatedworker.html": [ + "6f9350ce1caf4fa9e6239693ec91b2249c2adab5", + "testharness" + ], + "streams/readable-streams/reentrant-strategies.html": [ + "3ccd828e098956d0697c1f0e8809aa67d7945f2b", + "testharness" + ], + "streams/readable-streams/reentrant-strategies.js": [ + "153c0a6089ae152f69baca33fdba03e27f63b0ce", + "support" + ], + "streams/readable-streams/reentrant-strategies.serviceworker.https.html": [ + "f3000f522b6e1b7f1db839b85ff71aed36c29b8d", + "testharness" + ], + "streams/readable-streams/reentrant-strategies.sharedworker.html": [ + "cdbd3f2cfc307cf007eabfb324dc107d5baa86a0", + "testharness" + ], "streams/readable-streams/tee.dedicatedworker.html": [ "028f2d402a74140b40a9a3eace6aad1cc862bb64", "testharness" @@ -565641,7 +569651,7 @@ "testharness" ], "streams/readable-streams/tee.js": [ - "2753f823f65c3c536c203fe60a8cd2319b54f427", + "857f81daaf24847be71386d53ecc992820104683", "support" ], "streams/readable-streams/tee.serviceworker.https.html": [ @@ -565673,7 +569683,7 @@ "testharness" ], "streams/resources/recording-streams.js": [ - "df4bb8dab4b7e70758f87822c0472e96baec8b45", + "e249947d73a7ecd1ddc0a39cc23c7a53e71a049c", "support" ], "streams/resources/rs-test-templates.js": [ @@ -565685,9 +569695,209 @@ "support" ], "streams/resources/test-utils.js": [ - "a05a620307acb1e7cadba523b8a3c6d2de7e1748", + "6665e4f23f3dac3cc0d31d42ada96bd8475f7664", "support" ], + "streams/transform-streams/backpressure.dedicatedworker.html": [ + "797d930e4dcf882ed97529034037742ec2409597", + "testharness" + ], + "streams/transform-streams/backpressure.html": [ + "9ad8c7307dc6020ebbc953b144f7464597172106", + "testharness" + ], + "streams/transform-streams/backpressure.js": [ + "becddf94a71a05cc7ead94187434ffa9ef7f255b", + "support" + ], + "streams/transform-streams/backpressure.serviceworker.https.html": [ + "eaf79ab1a39fc3e230bbc6905f50d0df81aa4272", + "testharness" + ], + "streams/transform-streams/backpressure.sharedworker.html": [ + "29cb573b82c535ceb72ba251e6fb88ab1fc67d94", + "testharness" + ], + "streams/transform-streams/brand-checks.dedicatedworker.html": [ + "b0f32b03a352ef7ac1940eda90414a5f65980194", + "testharness" + ], + "streams/transform-streams/brand-checks.html": [ + "317e5c5cc2eedcc6902e8cc44567ea59e7f173ac", + "testharness" + ], + "streams/transform-streams/brand-checks.js": [ + "6d76422423d92fd41d2c6485af30af2d3e5742e7", + "support" + ], + "streams/transform-streams/brand-checks.serviceworker.https.html": [ + "c8279e28f5cd80d454d884154ae883a8c965705f", + "testharness" + ], + "streams/transform-streams/brand-checks.sharedworker.html": [ + "6f3911baf77e26af2d7e7d7472caae4df6d5a27e", + "testharness" + ], + "streams/transform-streams/errors.dedicatedworker.html": [ + "ea56c89e303ed85d5f6acd423600b1d4ad73ac13", + "testharness" + ], + "streams/transform-streams/errors.html": [ + "bb42fe4b43455e530f8fbb02d86f69fecdd994ef", + "testharness" + ], + "streams/transform-streams/errors.js": [ + "5dcd3245e4518ff59d1297e900118cf04c6cd2d8", + "support" + ], + "streams/transform-streams/errors.serviceworker.https.html": [ + "85dc0c4639761359a19c1eed51692688c0a5fb7c", + "testharness" + ], + "streams/transform-streams/errors.sharedworker.html": [ + "479366dd2a194281aba6138aa10fd2bc788ea44c", + "testharness" + ], + "streams/transform-streams/flush.dedicatedworker.html": [ + "c3299410ddd1db7507709b3db221f25f30e8623f", + "testharness" + ], + "streams/transform-streams/flush.html": [ + "c1c2101e0813acd68a4592ed83a4e53962ce0cf5", + "testharness" + ], + "streams/transform-streams/flush.js": [ + "3ef9203e114167f3e389adaad6c60e6f62e11faa", + "support" + ], + "streams/transform-streams/flush.serviceworker.https.html": [ + "c15b48d60f2715eee8b1d52eb2654324e80f03d1", + "testharness" + ], + "streams/transform-streams/flush.sharedworker.html": [ + "43e161d308c527ab2931a4fbff7e4bb2a2e9292d", + "testharness" + ], + "streams/transform-streams/general.dedicatedworker.html": [ + "8583d80450b090c16ed0795170340d040449bbc1", + "testharness" + ], + "streams/transform-streams/general.html": [ + "adc5be693f0e3218419c447767678c4a3274767a", + "testharness" + ], + "streams/transform-streams/general.js": [ + "4ca02965789d52a93be094eb0aa441c0fce55ca8", + "support" + ], + "streams/transform-streams/general.serviceworker.https.html": [ + "1792d6c45a5687777291a4dab031a954aa053752", + "testharness" + ], + "streams/transform-streams/general.sharedworker.html": [ + "44f9ceaa3bfc9d8b92885997d322486bd0f237a6", + "testharness" + ], + "streams/transform-streams/lipfuzz.dedicatedworker.html": [ + "73fd88dc7bdaa37b82fdc85bb1486d286c974e71", + "testharness" + ], + "streams/transform-streams/lipfuzz.html": [ + "718e8e4e22930a3c9c24c37bc23381af7f9a9353", + "testharness" + ], + "streams/transform-streams/lipfuzz.js": [ + "6356317a06ee27036a552849824a5896b10b8825", + "support" + ], + "streams/transform-streams/lipfuzz.serviceworker.https.html": [ + "ef6edea3ddf03c6959292eb646004d0533807be1", + "testharness" + ], + "streams/transform-streams/lipfuzz.sharedworker.html": [ + "8441663b54a1922be89955eedbfac2567e7885d3", + "testharness" + ], + "streams/transform-streams/patched-global.dedicatedworker.html": [ + "34bc5da1733179d1a4cd4bbbd4397146eafbb7e8", + "testharness" + ], + "streams/transform-streams/patched-global.html": [ + "a3c2a68709b9bf1eb3f34dd2d0f385689680a566", + "testharness" + ], + "streams/transform-streams/patched-global.js": [ + "59fc4a51a7f3914d6a0f1aefe216e83053b0bb17", + "support" + ], + "streams/transform-streams/patched-global.serviceworker.https.html": [ + "79f5e148601acf4ad24952f8735908c3a1edc510", + "testharness" + ], + "streams/transform-streams/patched-global.sharedworker.html": [ + "477cc1ed4cc94ff6ee29dcd6f96c16768a2c7567", + "testharness" + ], + "streams/transform-streams/reentrant-strategies.dedicatedworker.html": [ + "6f9350ce1caf4fa9e6239693ec91b2249c2adab5", + "testharness" + ], + "streams/transform-streams/reentrant-strategies.html": [ + "3ccd828e098956d0697c1f0e8809aa67d7945f2b", + "testharness" + ], + "streams/transform-streams/reentrant-strategies.js": [ + "caf6c2d53b211fdfd001858a8656dc0f0f92ce74", + "support" + ], + "streams/transform-streams/reentrant-strategies.serviceworker.https.html": [ + "f3000f522b6e1b7f1db839b85ff71aed36c29b8d", + "testharness" + ], + "streams/transform-streams/reentrant-strategies.sharedworker.html": [ + "cdbd3f2cfc307cf007eabfb324dc107d5baa86a0", + "testharness" + ], + "streams/transform-streams/strategies.dedicatedworker.html": [ + "7f94778cd79f721a92e4cdea9827d855cfae1e7c", + "testharness" + ], + "streams/transform-streams/strategies.html": [ + "ba9a4ce5c10cf70025dd6fe0c06aecafa6edd155", + "testharness" + ], + "streams/transform-streams/strategies.js": [ + "7ec0963bacab2e94607efc4e171431643ba1d6ff", + "support" + ], + "streams/transform-streams/strategies.serviceworker.https.html": [ + "db806f4a4114f4b48439c78b97fee18af236eace", + "testharness" + ], + "streams/transform-streams/strategies.sharedworker.html": [ + "7ebb216729f4d8998e4d01ae99b9e77174ce9c17", + "testharness" + ], + "streams/transform-streams/terminate.dedicatedworker.html": [ + "90c24141c1b557722a71905c9c232aff0d9d8d75", + "testharness" + ], + "streams/transform-streams/terminate.html": [ + "1100b49e8967dae75950ef64606d4a5251847bde", + "testharness" + ], + "streams/transform-streams/terminate.js": [ + "8a9cbc347a65cd7e561331850389c3f8a2993324", + "support" + ], + "streams/transform-streams/terminate.serviceworker.https.html": [ + "d9245a52833fb8e8e3b3f0d6fd6e92d86efb30af", + "testharness" + ], + "streams/transform-streams/terminate.sharedworker.html": [ + "9f545c6d51b877e399fd5e484a5ce5052c607346", + "testharness" + ], "streams/writable-streams/aborting.dedicatedworker.html": [ "89cfc3ba5cfbb426b6ac60c32aa5cfe9dd0ad8b4", "testharness" @@ -566181,13 +570391,17 @@ "support" ], "svg/OWNERS": [ - "fd41b1f5db84abb71fcaff4d84eb9106f464f1da", + "13652f4cb17762fe755e81d2a015493ad1a6bc11", "support" ], "svg/README.md": [ "ce9e3471676d5a50b91f6b274d648b481e509223", "support" ], + "svg/extensibility/interfaces/foreignObject-graphics.svg": [ + "16a7ef4c64dab3706120a2221dd6bec5ca8e9062", + "testharness" + ], "svg/historical.html": [ "f18f89f68fdf1266768700235f08e7181ce0e0e1", "testharness" @@ -568460,6 +572674,18 @@ "3ee77582da34128b38e8e523c553f943ec0e1947", "reftest" ], + "svg/linking/reftests/use-descendant-combinator-001.html": [ + "323fde648ee2d065bfd945a2c4d5be86f1c308ff", + "reftest" + ], + "svg/linking/reftests/use-descendant-combinator-002.html": [ + "3d51ca0fc007d52147e7ea03493cac7ee1bb7903", + "reftest" + ], + "svg/linking/reftests/use-descendant-combinator-ref.html": [ + "fb8aec792684b97151d2964b85d1e70829e141ad", + "support" + ], "svg/linking/scripted/href-animate-element.html": [ "c224f6b609079f31c256625417e4677b21b5f71a", "testharness" @@ -568524,6 +572750,10 @@ "ad79ad2f821e30c3c016bb1e156c1fafb4a4decf", "reftest" ], + "svg/struct/UnknownElement/interface.svg": [ + "42ecd7bc94a3379d920687c79c12e2d3c55b9e98", + "testharness" + ], "svg/types/scripted/SVGLength-px-with-context.html": [ "a605dba2368aa00a3cd3343739c05cdbbd930205", "testharness" @@ -568533,7 +572763,7 @@ "testharness" ], "svg/types/scripted/SVGLength.html": [ - "c7b812111ce16849a9055205f2f9046284692db2", + "f954a781c76f496ab172d2b0e7f549e34228996d", "testharness" ], "svg/types/scripted/SVGLengthList-appendItem.html": [ @@ -569028,9 +573258,9 @@ "a4b178df1e430c221456732b8730f6b8cbbcd30b", "manual" ], - "uievents/order-of-events/mouse-events/click-cancel-manual.html": [ - "d7bee2322f0e5a127dd90d5850c5a1d5eb28fd92", - "manual" + "uievents/order-of-events/mouse-events/click-cancel.html": [ + "c545f29b69b710969e71e0a009060705ba0f04b0", + "testharness" ], "uievents/order-of-events/mouse-events/click-on-body-manual.html": [ "f1754c832079bcee45f0ab21a6f3546c1e3371b8", @@ -569101,7 +573331,7 @@ "testharness" ], "url/OWNERS": [ - "e41e711c143c9d39073b5cec75224014fab87e9a", + "2b34648545644bc6ce8f70d0a7d0b26428498cea", "support" ], "url/README.md": [ @@ -569132,6 +573362,10 @@ "cf3fd382286fe89570e68e0d90131db35e03e6ef", "support" ], + "url/data-uri-fragment.html": [ + "2db7660e8dab868a2dc771a3a702832b8978a980", + "testharness" + ], "url/failure.html": [ "908456e354703473b0806bbdac6d60216505905f", "testharness" @@ -569213,7 +573447,7 @@ "testharness" ], "url/urlsearchparams-stringifier.html": [ - "cac1f9bb91c391110bccdab2d8faab43a9232040", + "479e3fb9fc9eee208c492428c7032a96c70a5ae8", "testharness" ], "url/urltestdata.json": [ @@ -569373,11 +573607,11 @@ "manual" ], "visual-viewport/viewport-dimensions-custom-scrollbars-manual.html": [ - "ccef0829da2e4ebcad983235f97a6f3f767a0f51", + "5101f2317ab20f16689844cac0e0289c1fe7b433", "manual" ], "visual-viewport/viewport-dimensions-scrollbars-manual.html": [ - "465eb63a9f09880f98636502d4b3ee3b5e3ec794", + "03290792ef9c5aebccbf6a0bd653523a7e1fb002", "manual" ], "visual-viewport/viewport-no-resize-event-on-overflow-recalc.html": [ @@ -570397,7 +574631,55 @@ "support" ], "wake-lock/interfaces.https.html": [ - "0dbbfa77dc7e17f2dfcaecd3899f37da51b4055a", + "982ddca0a248f4e8829d2495fbcbb5f90af91d8b", + "testharness" + ], + "wake-lock/wakelock-api.https.html": [ + "a80557f44c8381495d80030ee8868153bfffd3da", + "testharness" + ], + "wake-lock/wakelock-disabled-by-feature-policy.https.sub.html": [ + "5ba667dc3f35e64b39be7cc938cf1cb93fc6f464", + "testharness" + ], + "wake-lock/wakelock-disabled-by-feature-policy.https.sub.html.headers": [ + "199fe1ce290a8570204cc58027f7b808d7ef3500", + "support" + ], + "wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ + "bba2a95be9eeba9a4b67a9db92dc7d793fc26759", + "testharness" + ], + "wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html": [ + "37f30f21addedbe30955eefe22f65302a2a97ed5", + "testharness" + ], + "wake-lock/wakelock-enabled-by-feature-policy.https.sub.html": [ + "ee3386a75ce86ebec42032712acde03ebc064eda", + "testharness" + ], + "wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers": [ + "0d68a83d825634e1dccc318f4687719722f5ab41", + "support" + ], + "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html": [ + "328c6459efefdb2ed1f33522c8c51c5aa2aa1496", + "testharness" + ], + "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers": [ + "7a77973dc947ef10abe33be288fd610c42d96e97", + "support" + ], + "wake-lock/wakelock-object-is-independent.https.html": [ + "b104d9af062710134b69474008b583706eee7978", + "testharness" + ], + "wake-lock/wakelock-onactivechange.https.html": [ + "c85d61aca951edc5378028c1c120222683744de6", + "testharness" + ], + "wake-lock/wakelock-type.https.html": [ + "6fac8079855d7aedb52aee508cb866de51c41c0c", "testharness" ], "wasm/compile_worker.js": [ @@ -570436,12 +574718,16 @@ "240ed8ea51a45a84978a20240854ae70e1d460af", "support" ], - "wasm/wasm_indexeddb_test.html": [ - "277f1401e7704dec540cacb0784ab8fff55ef8d8", + "wasm/wasm_idb_worker.js": [ + "3f8a0a4736251c836009b9281dd9a46d0b612235", + "support" + ], + "wasm/wasm_indexeddb_test.https.html": [ + "2fcd9de0de5291930f331b25ee98e1c92490ab6a", "testharness" ], "wasm/wasm_indexeddb_test.js": [ - "4d17cb27a7541e117e5f7319f8103cabb591c1ce", + "e202fc90095365ce4d19e3ff3f2423e93d2f979b", "support" ], "wasm/wasm_local_iframe_test.html": [ @@ -570521,7 +574807,7 @@ "testharness" ], "web-animations/interfaces/Animatable/animate.html": [ - "5f50ca1e8ab1fecdc6594310b4e386eec4738c6b", + "99868d179c69091aa63631a27d98df4ee957a746", "testharness" ], "web-animations/interfaces/Animatable/getAnimations.html": [ @@ -570553,7 +574839,7 @@ "testharness" ], "web-animations/interfaces/Animation/idlharness.html": [ - "bf61e9cb3d009b4d5ccbd70ec7397842e2d521d2", + "b9784215a32d3d00d9a2c17c115ec9048d67c779", "testharness" ], "web-animations/interfaces/Animation/oncancel.html": [ @@ -570620,6 +574906,10 @@ "28819fe9fe3d38ae6d4aa2b4db4f58e8a16f0588", "testharness" ], + "web-animations/interfaces/AnimationEffectTiming/idlharness.html": [ + "a4e72d3ebf93a0bb6934f887c3da250a2ab67b63", + "testharness" + ], "web-animations/interfaces/AnimationEffectTiming/iterationStart.html": [ "05e327706937df8319e3a8c655ee743a15902ecd", "testharness" @@ -570628,38 +574918,50 @@ "9a6eae75862dec36b7839dc68edc31891a651284", "testharness" ], - "web-animations/interfaces/AnimationTimeline/document-timeline.html": [ - "2df691f77422d0e64833addf0c099e44f9afe051", + "web-animations/interfaces/AnimationPlaybackEvent/constructor.html": [ + "1bc5f4dda96078a08a4b06ab0f6bf7b10e0acce3", "testharness" ], - "web-animations/interfaces/AnimationTimeline/idlharness.html": [ - "80984bce09d54d4c57c4cea3a218b01467e43f9c", + "web-animations/interfaces/AnimationPlaybackEvent/idlharness.html": [ + "37bd201a374913d0cd580b89b07688b5b655776d", "testharness" ], "web-animations/interfaces/Document/getAnimations.html": [ "bd39d7f28dd03ba22a32ce09226dc263180254eb", "testharness" ], + "web-animations/interfaces/Document/timeline.html": [ + "65303d138e6b9afdb5b28117ef8e1c6ba35903e3", + "testharness" + ], "web-animations/interfaces/DocumentTimeline/constructor.html": [ "3a626b145f4eb77e816b9020f6fc67630088a00b", "testharness" ], + "web-animations/interfaces/DocumentTimeline/idlharness.html": [ + "fde7ae3f320a94619c9bb879d77d1de392212846", + "testharness" + ], "web-animations/interfaces/KeyframeEffect/composite.html": [ "2580086b2da9b29d1645484c5ad4e59636a370e5", "testharness" ], "web-animations/interfaces/KeyframeEffect/constructor.html": [ - "86150c0555de0c2c10816f7970aed1a24918b2d5", + "54a4185fd23ac4b3afe010157d4b8b766483d8f6", "testharness" ], "web-animations/interfaces/KeyframeEffect/copy-constructor.html": [ - "e1dfb5c05807a37974ecce98bb8c683cc291bfe4", + "65047bfed537a69659851a9fcdd7fb2ba5c4f790", "testharness" ], "web-animations/interfaces/KeyframeEffect/getComputedTiming.html": [ "c9dcf7c17010e5495007e000b33aeb4dc89f92b7", "testharness" ], + "web-animations/interfaces/KeyframeEffect/idlharness.html": [ + "d51dfde748bfdf12a1b06452099ea74fe2951a34", + "testharness" + ], "web-animations/interfaces/KeyframeEffect/iterationComposite.html": [ "2ed50cdb27335345015d8b13c64ef86c67048757", "testharness" @@ -570673,17 +574975,13 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/setKeyframes.html": [ - "2982bb6f57bb52c6e4e0483e4e47b22868a6010d", + "477e983fcef02361c305918d10a67f2909cfa561", "testharness" ], "web-animations/interfaces/KeyframeEffect/setTarget.html": [ "8c75e6605a134c96e261e5383414b7e15b32d121", "testharness" ], - "web-animations/interfaces/KeyframeEffectReadOnly/copy-constructor.html": [ - "8ef986f13e7fe7ffeb7403f647b4169ac0d6a138", - "testharness" - ], "web-animations/resources/easing-tests.js": [ "c255d606d00296b4c6957435773a20a9d8d0bd0b", "support" @@ -570692,8 +574990,12 @@ "5cdc52caac1d1db2249155e91591c983a746102e", "support" ], + "web-animations/resources/keyframe-tests.js": [ + "52ffc50c4ebf0326db8f4e1d0cc1234f6c860dc2", + "support" + ], "web-animations/resources/keyframe-utils.js": [ - "a9c574e206087c02834e9836ea7625d843427a17", + "08da0c81847809328bda0d6e0581711f7838916e", "support" ], "web-animations/resources/xhr-doc.py": [ @@ -570768,6 +575070,14 @@ "66e2277c77e4bd7b2d8981a725fb5083a8f5e0f6", "testharness" ], + "web-animations/timing-model/timelines/document-timelines.html": [ + "cfa1e9ab84cb4901068e6305f69d8987cdda69cd", + "testharness" + ], + "web-animations/timing-model/timelines/timelines.html": [ + "6f0a9efcce6d5438996b650c022d6723dbccf58b", + "testharness" + ], "web-nfc/OWNERS": [ "d42f3f15d00686bf5a5c7c69169ef5cf2554bd7b", "support" @@ -570920,34 +575230,6 @@ "230684ec60fd2e408f9b6014417f3eddfe2dc95a", "support" ], - "webaudio/chrome/resources/audioparam-testing.js": [ - "2855fbee30e629ea397166911b9bcdec74bd4fdf", - "support" - ], - "webaudio/chrome/resources/audit-util.js": [ - "4405458b8f8bdc621c95c1d9ec1c1ad4e6002f1e", - "support" - ], - "webaudio/chrome/resources/audit.js": [ - "7f7051364808eadc207207a7dadcc191a95a2db3", - "support" - ], - "webaudio/chrome/resources/start-stop-exceptions.js": [ - "70e0f890a721786f8afa4cd032e75ef85b5fc6bb", - "support" - ], - "webaudio/chrome/the-constantsourcenode-interface/constant-source-basic.html": [ - "7c9fed4798e8119ca3cedda3958788fe989d4dd4", - "testharness" - ], - "webaudio/chrome/the-constantsourcenode-interface/constant-source-onended.html": [ - "10f6b84a4c8de1a8b689cc443f2526b0455a4d27", - "testharness" - ], - "webaudio/chrome/the-constantsourcenode-interface/constant-source-output.html": [ - "ff83b807b7a39fa40ad3df8db42c20eb859f34a8", - "testharness" - ], "webaudio/historical.html": [ "93068df297042344669093ce899f0230c87ebf54", "testharness" @@ -570957,35 +575239,63 @@ "support" ], "webaudio/js/helpers.js": [ - "c5d44cf8101c50b59c366ed1971205193f32e1bf", - "support" - ], - "webaudio/js/lodash.js": [ - "58c3eae918fedad54c56d488a14f99ce87943500", + "3cb468605c1fa8e5005bc8552b15f7a37ee9b935", "support" ], "webaudio/refresh_idl.rb": [ "9ef52c13448d19b241b40a5c81f4a0480c05c5de", "support" ], + "webaudio/resources/audioparam-testing.js": [ + "2855fbee30e629ea397166911b9bcdec74bd4fdf", + "support" + ], + "webaudio/resources/audit-util.js": [ + "4405458b8f8bdc621c95c1d9ec1c1ad4e6002f1e", + "support" + ], + "webaudio/resources/audit.js": [ + "20b0d0bc30f4d0f41828f579b4dd4f71a60fcde4", + "support" + ], "webaudio/resources/sin_440Hz_-6dBFS_1s.wav": [ "09c866126524e4fc0d0fae84de8d34419b1a823b", "support" ], - "webaudio/specification.html": [ - "1bea5d5d8983a3505328f6878bfe09c20c25aa8c", + "webaudio/resources/start-stop-exceptions.js": [ + "70e0f890a721786f8afa4cd032e75ef85b5fc6bb", "support" ], "webaudio/the-audio-api/the-analysernode-interface/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "webaudio/the-audio-api/the-analysernode-interface/test-analyser-gain.html": [ + "e2320e33ef1df0155d5fcf536550e0e398b15407", + "testharness" + ], + "webaudio/the-audio-api/the-analysernode-interface/test-analyser-minimum.html": [ + "26282412113f6298a90a2cac963a2b0de03ef43d", + "testharness" + ], + "webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html": [ + "2d9f397414f8d7b2b4c2da05d4476cd5d2ce9230", + "testharness" + ], + "webaudio/the-audio-api/the-analysernode-interface/test-analyser-scale.html": [ + "cb51b46db5e572c52502dc0dce465927fb3a2b87", + "testharness" + ], + "webaudio/the-audio-api/the-analysernode-interface/test-analysernode.html": [ + "8478aa405a4641a9c47554529762e85a37d7593a", + "testharness" + ], "webaudio/the-audio-api/the-audiobuffer-interface/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], "webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html": [ - "a799ad9a51801a67a82159e9a16b639ad0c50226", + "0ef05c242d8f987d521c0e9ce474d0f9a46bee28", "testharness" ], "webaudio/the-audio-api/the-audiobuffersourcenode-interface/.gitkeep": [ @@ -571001,7 +575311,7 @@ "support" ], "webaudio/the-audio-api/the-audiodestinationnode-interface/idl-test.html": [ - "215cd494eca448981b5f0a4dc931d7ece9a33b80", + "3e8b55e707434899be9af13334d935368579f1dc", "testharness" ], "webaudio/the-audio-api/the-audiolistener-interface/.gitkeep": [ @@ -571021,7 +575331,7 @@ "support" ], "webaudio/the-audio-api/the-audioparam-interface/idl-test.html": [ - "a1bba8cf32a40cefdc3cd27bb4cd33ab2ddb72db", + "bd2b076121c523ecb20586975fc94866f62da980", "testharness" ], "webaudio/the-audio-api/the-audioparam-interface/retrospective-exponentialRampToValueAtTime.html": [ @@ -571068,6 +575378,18 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-basic.html": [ + "d60c7c7c6d9236f773199a213bef6b1103e02e2e", + "testharness" + ], + "webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-onended.html": [ + "10f6b84a4c8de1a8b689cc443f2526b0455a4d27", + "testharness" + ], + "webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-output.html": [ + "ce90b4d7ca5840abdc830d734df26028958fadd7", + "testharness" + ], "webaudio/the-audio-api/the-constantsourcenode-interface/test-constantsourcenode.html": [ "711b3f183d847e437a4c332f33054cc5a648fd22", "testharness" @@ -571081,7 +575403,7 @@ "support" ], "webaudio/the-audio-api/the-delaynode-interface/idl-test.html": [ - "2721b0ff902b22214a2c1cecd0b7978d520efad2", + "8507a293b696d2d3fc51b429864373606a75eeb6", "testharness" ], "webaudio/the-audio-api/the-dynamicscompressornode-interface/.gitkeep": [ @@ -571097,11 +575419,11 @@ "support" ], "webaudio/the-audio-api/the-gainnode-interface/idl-test.html": [ - "7d3e3335d8b7fe23faec74788b402c8383da53b8", + "30843d3b74e8ec33bedd849f3f2b1bbd4bcc9f5e", "testharness" ], "webaudio/the-audio-api/the-gainnode-interface/test-gainnode.html": [ - "32f1b481b638364f2a33fbbf2b63e529f9ead61c", + "bf2de43e568c79b96fd5b0602e26346c483162a5", "testharness" ], "webaudio/the-audio-api/the-iirfilternode-interface/test-iirfilternode.html": [ @@ -571113,7 +575435,7 @@ "support" ], "webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html": [ - "a394f084e22f4b27b695b3b5b14352053b5e25e4", + "23aa3045a7c10053f3cead4e5e2e56219acab408", "testharness" ], "webaudio/the-audio-api/the-mediastreamaudiodestinationnode-interface/.gitkeep": [ @@ -571209,23 +575531,27 @@ "support" ], "webdriver/tests/actions/conftest.py": [ - "ebdbe326fd2fc53a3522b846505808496407b5b8", + "f366a25d9d5e35a2897413a265398bc7a54f7c44", "support" ], "webdriver/tests/actions/key.py": [ - "69542dc107d881bf18dfff3203bfd7a9ec31b4ad", + "d589b53f0096893600e696b43ec19ca84e5ee2ab", + "wdspec" + ], + "webdriver/tests/actions/modifier_click.py": [ + "2ec22f44973e6da3b9506ad7cc9fd0949f3ef8b5", "wdspec" ], "webdriver/tests/actions/mouse.py": [ - "d7af66e45c8e306b4258b92c54ed86073fd21c8d", + "c3cf09eaad1f24b2946c0ef865b10c5ac2e52700", "wdspec" ], "webdriver/tests/actions/sequence.py": [ - "4244635ccbab0920eba8a2fa88645fa7333df363", + "8c948c12cea1e2e8f2de845555817910904f757a", "wdspec" ], "webdriver/tests/actions/special_keys.py": [ - "3b10143dea60567f30b4ab6c544e005d02f31fc3", + "64eb2401664b71d68f7b53e236a947eec6d651cc", "wdspec" ], "webdriver/tests/actions/support/__init__.py": [ @@ -571241,7 +575567,7 @@ "support" ], "webdriver/tests/actions/support/test_actions_wdspec.html": [ - "94b6f474bb4417cf2c06cb5fc6042c01bde98aa2", + "95203777fcc012ab64465287737a89a4ba2c31dc", "support" ], "webdriver/tests/conftest.py": [ @@ -571269,7 +575595,7 @@ "wdspec" ], "webdriver/tests/cookies/get_named_cookie.py": [ - "5a4a7cb34740326fe11fb616f741759eeb0952cb", + "9455d1504590154ad2a540f102455baff602aefb", "wdspec" ], "webdriver/tests/element_click/__init__.py": [ @@ -571281,7 +575607,7 @@ "wdspec" ], "webdriver/tests/element_retrieval/get_active_element.py": [ - "131cfaf18ba1476c15866e25e5de65143d5269e0", + "74bb0beec41ab857f6814d47191f29065a536802", "wdspec" ], "webdriver/tests/fullscreen_window.py": [ @@ -571292,6 +575618,10 @@ "5d907b2a16b9ff7dba8e39bba19ea7f85f29f71e", "wdspec" ], + "webdriver/tests/interaction/element_clear.py": [ + "c8b700458df1767111f6648b6c1388ecd87555bb", + "wdspec" + ], "webdriver/tests/interaction/send_keys_content_editable.py": [ "9c071e60e1203cf31120f20874b5f38ba41dacc3", "wdspec" @@ -571309,7 +575639,7 @@ "wdspec" ], "webdriver/tests/navigation/get_title.py": [ - "4609f17922cc9680c41b8972dafb827195037ff8", + "2ee18932a8ae3c4190b37e2b28141a6af49cc507", "wdspec" ], "webdriver/tests/retrieval/__init__.py": [ @@ -571317,19 +575647,19 @@ "support" ], "webdriver/tests/retrieval/find_element.py": [ - "a2d29c9c8dd5303d196d0682a19f3f3560b35872", + "2a4cdf4c703493f7c90fc3473daa27660ac61e11", "wdspec" ], "webdriver/tests/retrieval/find_element_from_element.py": [ - "78d5e503bf979307f313b72f7578c55264c6e207", + "f036ef93adff21a7c83eeb8b131c96b6553b9fcb", "wdspec" ], "webdriver/tests/retrieval/find_element_from_elements.py": [ - "0be0eb0bd904fa8f7e5332d43cef2b36dae1a579", + "131c25ffbde611f98e29b778d7c861ae9619b2f6", "wdspec" ], "webdriver/tests/retrieval/find_elements.py": [ - "7df448c94c89bdb9f6818a69a9d52b21faa4b944", + "2d5c3c98b00e21a36f91e5797bb97835a8b63f2e", "wdspec" ], "webdriver/tests/sessions/get_timeouts.py": [ @@ -571381,19 +575711,19 @@ "support" ], "webdriver/tests/state/get_element_attribute.py": [ - "cad153b432a69597b0da6449765df11538c51fe6", + "75620b583be6495d9b7b5d65c57cbda217cd2e01", "wdspec" ], "webdriver/tests/state/get_element_property.py": [ - "b7bbb822cdb22d74a57706f6a353fe55a068c7dd", + "042f184dd54153fe5ff46e886ddcf27ffe4bae6d", "wdspec" ], "webdriver/tests/state/get_element_tag_name.py": [ - "3b8ecaaef3c04b34045ba5c32d2988aef299da17", + "0887f71ceb4b4959989ee9f589707624f46e0ce3", "wdspec" ], "webdriver/tests/state/is_element_selected.py": [ - "386579b289b6288cbeba71c839ac6569310e09dd", + "fb7825918c186d97abe69c4ab06fea1ed62f5387", "wdspec" ], "webdriver/tests/state/text/__init__.py": [ @@ -571413,7 +575743,7 @@ "support" ], "webdriver/tests/support/asserts.py": [ - "b02f45e99cdee49f12608e60333e566c8c0e04d0", + "fd28bb9531b1644b726b7baba00a09871bd0dd3f", "support" ], "webdriver/tests/support/fixtures.py": [ @@ -571452,6 +575782,38 @@ "2eabe61f38757fd377e9773b7697a9a1ed21ceb6", "wdspec" ], + "webdriver/tests/user_prompts/send_alert_text.py": [ + "16d3219eb2404c06e7a6574508a789cb842fc89b", + "wdspec" + ], + "webgl/bufferSubData.html": [ + "526612470551a0eb157b310c587d50080087808d", + "testharness" + ], + "webgl/common.js": [ + "a671260c24103c4b3d41d57251e691caa286ace4", + "support" + ], + "webgl/compressedTexImage2D.html": [ + "3d6d1a51bc2b48f3d9d32ed9baec81d13b18214d", + "testharness" + ], + "webgl/compressedTexSubImage2D.html": [ + "e189cb30edf8672851dfbe4a8c3696c1bbd11f04", + "testharness" + ], + "webgl/texImage2D.html": [ + "e67a4d125ee54ce180e447c4ed49ff93189d6590", + "testharness" + ], + "webgl/texSubImage2D.html": [ + "8ce6c9650d2ebbf77107e7c0ad68941608f83781", + "testharness" + ], + "webgl/uniformMatrixNfv.html": [ + "f53e7687ad6aef0ffc064d941a05a222c33fde56", + "testharness" + ], "webmessaging/Channel_postMessage_Blob.htm": [ "9667a479d4ed3f01dd052567a67256c20a533074", "testharness" @@ -571901,7 +576263,7 @@ "support" ], "webrtc/RTCCertificate.html": [ - "6580d666a55637ff5847c0f6f1a701d2db75b749", + "95e54d7fb8b37b9f1719137a4245cb25263336e0", "testharness" ], "webrtc/RTCConfiguration-bundlePolicy.html": [ @@ -571929,7 +576291,7 @@ "testharness" ], "webrtc/RTCDTMFSender-helper.js": [ - "54456b1c74d55552fdad0405f55dcd728205b561", + "0c2e8862deffeec71ac925642647bb9ee4ad70ff", "support" ], "webrtc/RTCDTMFSender-insertDTMF.https.html": [ @@ -572041,7 +576403,7 @@ "testharness" ], "webrtc/RTCPeerConnection-idl.html": [ - "e322b3ab7f8e0bc7ff802f00234a9a6e80b8285a", + "9d67664cde55f701e2b15c0e801e79a5bd16110a", "testharness" ], "webrtc/RTCPeerConnection-ondatachannel.html": [ @@ -572105,7 +576467,7 @@ "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html": [ - "5d6a2f62f455c086222f8ea4ba8fdde4134766cc", + "f309fe97cd3954e5f2b337e16f48339d3bb359bd", "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription.html": [ @@ -572685,19 +577047,19 @@ "testharness" ], "websockets/cookies/002.html": [ - "e424609e5847011d2728530e472a2f8890781981", + "0907fc29af7a172886bcd52a38d00689eb3b1694", "testharness" ], "websockets/cookies/003.html": [ - "f8a37f2350cce1c72fd2e5e4a6134bc487230e43", + "6fe6ceacce7fa3bfd984a222cd857d271bc8907f", "testharness" ], "websockets/cookies/004.html": [ - "d16b80545db418cf5e1feaaaf6585c1458c28e57", + "b0f8a98a4f7e3672ab06c6995c905c53f268d55f", "testharness" ], "websockets/cookies/005.html": [ - "6cb3b01be1541d1ae112f47bff27d7c154e3b99b", + "380716d55a1a26df816ac5bd1a28613329c78fc0", "testharness" ], "websockets/cookies/006.html": [ @@ -572705,7 +577067,7 @@ "testharness" ], "websockets/cookies/007.html": [ - "f6c909514090e36b756bdf2f04302b282dd4f50b", + "770db52470c5b18b6d92384763568d1dd859eb89", "testharness" ], "websockets/cookies/support/set-cookie.py": [ @@ -572753,11 +577115,11 @@ "support" ], "websockets/handlers/handshake_no_protocol_wsh.py": [ - "402a157415d4a230fb74e37514b04e9a50e7acba", + "e743c7188d221bde9c3684d7076ff83618c6a833", "support" ], "websockets/handlers/handshake_protocol_wsh.py": [ - "d2bd6907be6dbf38e0f00352ea2f822f70cf8feb", + "58389ca53f73973e6e35ca55289feeea32fd8113", "support" ], "websockets/handlers/handshake_sleep_2_wsh.py": [ @@ -572781,19 +577143,19 @@ "support" ], "websockets/handlers/set-cookie-secure_wsh.py": [ - "dcddb4ac3db1cdd74c39cd4f28d0498165d2e0aa", + "30b03b63d7b12371f6283ed89f967d2ffb66e372", "support" ], "websockets/handlers/set-cookie_http_wsh.py": [ - "9705c2e131a8b4c597f43b3677b06752a273cba4", + "2fe1c7ac70bcf3e2acb60153eddd23742327715a", "support" ], "websockets/handlers/set-cookie_wsh.py": [ - "0c7c1a301abc149af3773fbec4c6fac4ff76e38e", + "921ada3105b0010d80784f4939a79c163bb529b8", "support" ], "websockets/handlers/simple_handshake_wsh.py": [ - "505e18342ef95441f71868b9ef7ce275b38dfe6f", + "71062e3e304a995e1d55efa3952c418c32de12fa", "support" ], "websockets/handlers/sleep_10_v13_wsh.py": [ @@ -573477,7 +577839,7 @@ "support" ], "webusb/resources/usb-helpers.js": [ - "164413453b70ea42f885481cc3ed839a4314527e", + "c11bbbd5997aead080a98980bc86ae2ab757c5a9", "support" ], "webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ @@ -573508,9 +577870,9 @@ "7cc713de57caf823d0f778d943d6e7bb3900fb1e", "support" ], - "webusb/usb-manual.https.html": [ - "e2b90443b8af646908867e44a1d3388074c5e62b", - "manual" + "webusb/usb.https.html": [ + "47adf57ef06190594f80d8ae85d2ee8118889cb6", + "testharness" ], "webusb/usbConnectionEvent.https.html": [ "b350ec95c8dfc96783b80d4914b932eeecbe00a1", @@ -577432,22 +581794,62 @@ "33a3530260a18e74dd96470d9890bbdb4ecdb08d", "support" ], - "worklets/animation-worklet-import.html": [ + "worklets/animation-worklet-credentials.https.html": [ + "4519b0a79879ead03e03fbd280699120ed17f06f", + "testharness" + ], + "worklets/animation-worklet-csp.https.html": [ + "489152809f69c1935d4289db54ff20faa4e7954c", + "testharness" + ], + "worklets/animation-worklet-import.https.html": [ "6e92613e720ac1fa1cdec91665cc1ca68a6e0bc8", "testharness" ], - "worklets/animation-worklet-referrer.html": [ + "worklets/animation-worklet-referrer.https.html": [ "7c6e4a94815093e9353d184b877046ad7627bae9", "testharness" ], - "worklets/paint-worklet-import.html": [ + "worklets/animation-worklet-service-worker-interception.https.html": [ + "395ebb855280779c248cc587141568fe0f089715", + "testharness" + ], + "worklets/paint-worklet-credentials.https.html": [ + "fd0d5e0e34454755ddd693916476af809dfd9bb1", + "testharness" + ], + "worklets/paint-worklet-csp.https.html": [ + "7d11017eeede3ace591383272a4654d8e507d6c8", + "testharness" + ], + "worklets/paint-worklet-import.https.html": [ "a1a5fe53abb00fe37c7688032038110a67f988ee", "testharness" ], - "worklets/paint-worklet-referrer.html": [ + "worklets/paint-worklet-referrer.https.html": [ "86e7c0fe4de0764a7064ed22eef2b66ab09d4a62", "testharness" ], + "worklets/paint-worklet-service-worker-interception.https.html": [ + "aa4b3cada2f927b41fc8ff58f71c794e474119c2", + "testharness" + ], + "worklets/resources/addmodule-window.html": [ + "edc1f08465f3cfba92856b18c3c3eeaced90d207", + "support" + ], + "worklets/resources/credentials-tests.js": [ + "3554b8fcf13239de2b89afde1cb0fe97ef5d2124", + "support" + ], + "worklets/resources/credentials.py": [ + "6ce932e1cdc3626efc85ba0fe4a517b6308c67bd", + "support" + ], + "worklets/resources/csp-tests.js": [ + "160eff495b94f445098a2764b94841e557b0bc47", + "support" + ], "worklets/resources/empty-worklet-script.js": [ "84b3339c3419e318803e51f46d7252d9e8ac183b", "support" @@ -577456,6 +581858,10 @@ "f32abb012c93bb69087688f31a0c243d9e6d1060", "support" ], + "worklets/resources/import-empty-worklet-script.js": [ + "4add9359940f440fb2c66d17096a45ffbf77975d", + "support" + ], "worklets/resources/import-nested-internal-worklet-script.js": [ "b897cf335179eb5c0e9536e8e883da1eba509ea7", "support" @@ -577464,8 +581870,20 @@ "463fc9e39a1502333cfe329613516e82f66f08de", "support" ], + "worklets/resources/import-non-existent-worklet-script.js": [ + "2d8af6c2e0e7bc3f7feaa5f333824fea94314353", + "support" + ], + "worklets/resources/import-remote-origin-empty-worklet-script.sub.js": [ + "e048bbd38d7348edd6e487ba2381b57530a5cba6", + "support" + ], + "worklets/resources/import-syntax-error-worklet-script.js": [ + "e2f65e87d6d7b885201b4371ce0c4f21af5efe90", + "support" + ], "worklets/resources/import-tests.js": [ - "62d2e0030328c0d0f64ccfff2402634a3e99c637", + "fdc5ee273fa5b4bf3b820f8c0404a5ca9580e2b4", "support" ], "worklets/resources/referrer-tests.js": [ @@ -577473,13 +581891,29 @@ "support" ], "worklets/resources/referrer-window.html": [ - "d098da333b3c3c27999c7436af5e2f986bf9df28", + "0b8b7424014190af51d310b9f843471a3b5fb37f", "support" ], "worklets/resources/referrer.py": [ "ed296faa934f89efcca9a116f6a2e931cafd831e", "support" ], + "worklets/resources/service-worker-interception-tests.js": [ + "e23072b8b5695b7669d855197285b8ec3534b6e7", + "support" + ], + "worklets/resources/service-worker.js": [ + "cd87e26ff28300d6ccbe0bc80378725c14c580db", + "support" + ], + "worklets/resources/set-cookie.py": [ + "3152f5d79b6f362f5aaf738d7d2454de94a6159d", + "support" + ], + "worklets/resources/syntax-error-worklet-script.js": [ + "e53f6ce20fd1a1f64cd40bb2bb69bc4b4495d4d6", + "support" + ], "worklets/resources/throwing-worklet-script.js": [ "a7164f899afec387321c7737aa1006aa5f225669", "support" diff --git a/tests/wpt/metadata/mozilla-sync b/tests/wpt/metadata/mozilla-sync index 611f1e9570a..530ceee0029 100644 --- a/tests/wpt/metadata/mozilla-sync +++ b/tests/wpt/metadata/mozilla-sync @@ -1,2 +1,2 @@ -local: b74f52d6df118d832db08276ebe698fee2fa2265 -upstream: f1d5e1dcd20176cee05692bd78863e9b03ace93b +local: 85fa6409bb699647b4f5e22952538365e87418d7 +upstream: 40ee9a4553dca805163766c5970979a23e357292 diff --git a/tests/wpt/update/__init__.py b/tests/wpt/update/__init__.py index 9b8e8d0d393..3b3693e3ea4 100644 --- a/tests/wpt/update/__init__.py +++ b/tests/wpt/update/__init__.py @@ -12,6 +12,7 @@ from mozlog.structured import structuredlog here = os.path.split(__file__)[0] sys.path.insert(0, os.path.abspath(os.path.join(here, os.pardir, "web-platform-tests", "tools", "wptrunner"))) +sys.path.insert(0, os.path.abspath(os.path.join(here, os.pardir, "web-platform-tests", "tools", "wptserve"))) sys.path.insert(0, os.path.abspath(os.path.join(here, os.pardir, "tests", "tools", "scripts"))) from wptrunner.update import setup_logging, WPTUpdate diff --git a/tests/wpt/web-platform-tests/.travis.yml b/tests/wpt/web-platform-tests/.travis.yml index 43aacf5d8c3..933183f9a4b 100644 --- a/tests/wpt/web-platform-tests/.travis.yml +++ b/tests/wpt/web-platform-tests/.travis.yml @@ -26,7 +26,9 @@ matrix: include: - os: linux python: "2.7" - env: JOB=manifest_upload SCRIPT=tools/ci/ci_manifest.sh + env: + - JOB=manifest_upload SCRIPT=tools/ci/ci_manifest.sh + - secure: "FrlMkMZiwggnhJbLiLxZ4imtXxuzFNozty94g1mneMPEVLrnyhb6c/g2SwN37KKU0WSDlGTz26IYnFvo1ftfSOx+sjRz0HqwW7JnrXULKYo7jiPttIcmeJxlSVeW9yS4blbLaBakytHjSnsf+za7bAaf1aS7RRAtAINgifA6Chg=" deploy: provider: releases api_key: diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor-iterating-update.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor-iterating-update.htm new file mode 100644 index 00000000000..d2a7b9f01e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor-iterating-update.htm @@ -0,0 +1,58 @@ + + +IndexedDB: Index iteration with cursor updates/deletes + + + + diff --git a/tests/wpt/web-platform-tests/IndexedDB/wasm-module-value.html b/tests/wpt/web-platform-tests/IndexedDB/wasm-module-value.html new file mode 100644 index 00000000000..9fcfd780b8e --- /dev/null +++ b/tests/wpt/web-platform-tests/IndexedDB/wasm-module-value.html @@ -0,0 +1,109 @@ + + + +IndexedDB: WebAssembly module values + + + + + + + diff --git a/tests/wpt/web-platform-tests/README.md b/tests/wpt/web-platform-tests/README.md index f91ec5f9543..b67e2082ab7 100644 --- a/tests/wpt/web-platform-tests/README.md +++ b/tests/wpt/web-platform-tests/README.md @@ -17,6 +17,10 @@ Setting Up the Repo Clone or otherwise get https://github.com/w3c/web-platform-tests. +Note: because of the frequent creation and deletion of branches in this +repo, it is recommended to "prune" stale branches when fetching updates, +i.e. use `git pull --prune` (or `git fetch -p && git merge`). + Running the Tests ================= diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-done.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-done.htm index c025c415289..89301729abd 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-done.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-done.htm @@ -76,7 +76,7 @@ assert_equals(client.statusText, "") assert_equals(client.responseXML, null) assert_equals(client.getAllResponseHeaders(), "") - setTimeout(function() { + test.step_timeout(function() { assert_array_equals(result, expected) test.done(); }, 100); // wait a bit in case XHR timeout causes spurious event diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-headers-received.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-headers-received.htm index 0dbad0ba208..a837347f8df 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-headers-received.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-headers-received.htm @@ -40,7 +40,7 @@ assert_equals(client.statusText, "") assert_equals(client.responseXML, null) assert_equals(client.getAllResponseHeaders(), "") - setTimeout(function() { + test.step_timeout(function() { assert_array_equals(result, expected) test.done(); }, 100); // wait a bit in case XHR timeout causes spurious event diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-loading.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-loading.htm index 04708130579..501de90552d 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-loading.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/abort-during-loading.htm @@ -40,7 +40,7 @@ assert_equals(client.statusText, "") assert_equals(client.responseXML, null) assert_equals(client.getAllResponseHeaders(), "") - setTimeout(function() { + test.step_timeout(function() { assert_array_equals(result, expected) test.done(); }, 100); // wait a bit in case XHR timeout causes spurious event @@ -51,4 +51,3 @@ - diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/getallresponseheaders-cl.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/getallresponseheaders-cl.htm deleted file mode 100644 index a6f7272e987..00000000000 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/getallresponseheaders-cl.htm +++ /dev/null @@ -1,27 +0,0 @@ - -Casing of known headers - - - diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/getallresponseheaders-status.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/getallresponseheaders-status.htm index ec1aa9a8072..a02ab457452 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/getallresponseheaders-status.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/getallresponseheaders-status.htm @@ -9,27 +9,22 @@
diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/open-after-abort.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/open-after-abort.htm index ca8a4e1e62f..c9c63044228 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/open-after-abort.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/open-after-abort.htm @@ -13,7 +13,7 @@ test.step(function() { var client = new XMLHttpRequest(), result = [], - expected = [1, 4, 1] // open() -> 1, + expected = [1, 4, 1] // open() -> 1, // abort() -> 4, open() -> 1 client.onreadystatechange = function() { test.step(function() { diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-encoding.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-encoding.htm index 7acdac86ad6..ddf8018159c 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-encoding.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-encoding.htm @@ -14,14 +14,14 @@ var client = new XMLHttpRequest() client.open("GET", "resources/content.py?\u00DF", false) // This is the German "eszett" character client.send() - assert_equals(client.getResponseHeader("x-request-query"), "%C3%9F") + assert_equals(client.getResponseHeader("x-request-query"), "%DF") }, "percent encode characters"); test(function() { var client = new XMLHttpRequest() client.open("GET", "resources/content.py?\uD83D", false) client.send() - assert_equals(client.getResponseHeader("x-request-query"), "%EF%BF%BD") - }, "lone surrogate should return U+FFFD"); + assert_equals(client.getResponseHeader("x-request-query"), "&%2365533;") + }, "lone surrogate"); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-2.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-2.htm index 398764e7050..ed4ba01576b 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-2.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-2.htm @@ -13,8 +13,8 @@ test(function() { var client = new self[0].XMLHttpRequest() document.body.removeChild(document.getElementsByTagName("iframe")[0]) - assert_throws("InvalidStateError", function() { - client.open("GET", "folder.txt") + assert_throws("InvalidStateError", function() { + client.open("GET", "folder.txt") }, "open() when associated document's IFRAME is removed") }) } diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-3.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-3.htm index b3652dfa508..344434b0e7c 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-3.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-3.htm @@ -13,7 +13,7 @@ var client = new self[0].XMLHttpRequest() client.open("GET", "folder.txt") document.body.removeChild(document.getElementsByTagName("iframe")[0]) - assert_throws("InvalidStateError", function() { + assert_throws("InvalidStateError", function() { client.send(null) }, "send() when associated document's IFRAME is removed") }) diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-4.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-4.htm index 9ddbb9b4772..3804c9b3871 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-4.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-4.htm @@ -11,7 +11,7 @@ /* It's unclear what the pass condition should be for this test. Implementations: - Firefox, Opera (Presto): terminate request with no further events when IFRAME is removed. + Firefox, Opera (Presto): terminate request with no further events when IFRAME is removed. Chrome: completes request to readyState=4 but responseText is "" so it's pretty much terminated with an extra event for "DONE" state Pass condition is now according to my suggested spec text in https://github.com/whatwg/xhr/pull/3 , if that's not accepted we'll have to amend this test */ @@ -20,7 +20,7 @@ test.step(function() { var hasErrorEvent = false var client = new self[0].XMLHttpRequest() - client.onreadystatechange = function() { + client.onreadystatechange = function() { test.step(function() { if(client.readyState == 4) { assert_equals(client.responseText, "", "responseText is empty on inactive document error condition") diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-6.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-6.htm index e4f0aee60ec..99279639921 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-6.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-multi-window-6.htm @@ -22,7 +22,7 @@ ifr.onload = function() { // Again, do things async so we're not doing loads from inside // load events. - setTimeout(function() { + test.step_timeout(function() { client = new ifr.contentWindow.XMLHttpRequest(); count++; // Important to do a normal navigation, not a reload. diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-redirected-worker-origin.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-redirected-worker-origin.htm index 5e2065a13c8..e5e5a4e8ecf 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-redirected-worker-origin.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-redirected-worker-origin.htm @@ -1,43 +1,11 @@ - - - - - XMLHttpRequest: redirected worker scripts, origin and referrer - - - - -
- - - + + +XMLHttpRequest: redirected worker scripts, origin and referrer + + +
+ diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-worker-origin.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-worker-origin.htm index 722a15bb653..21cf1fcac0f 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-worker-origin.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/open-url-worker-origin.htm @@ -1,43 +1,9 @@ - - - - - XMLHttpRequest: worker scripts, origin and referrer - - - - - -
- - - - + + +XMLHttpRequest: worker scripts, origin and referrer + + +
+ diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-xml.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-xml.htm index fd0664a7cce..00a4c0dd43d 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-xml.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-xml.htm @@ -15,11 +15,11 @@ var client = new XMLHttpRequest(); client.onreadystatechange = function() { if (client.readyState !== 4) return; - try{ + try{ var str = client.responseXML.documentElement.tagName+client.responseXML.documentElement.firstChild.tagName+client.responseXML.documentElement.firstChild.textContent; - }catch(e){ - assert_unreached('Exception when reading responseXML'); - } + }catch(e){ + assert_unreached('Exception when reading responseXML'); + } assert_equals( client.responseXML.documentElement.tagName, 'test' ); assert_equals( client.responseXML.documentElement.firstChild.tagName, 'message' ); assert_equals( client.responseXML.documentElement.firstChild.textContent, 'Hello Worldï¼' ); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/auth2/corsenabled.py b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/auth2/corsenabled.py index c8e230078f7..77b4acfe24a 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/auth2/corsenabled.py +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/auth2/corsenabled.py @@ -1,13 +1,16 @@ import imp import os +here = os.path.dirname(__file__) + + def main(request, response): response.headers.set('Access-Control-Allow-Origin', request.headers.get("origin")); response.headers.set('Access-Control-Allow-Credentials', 'true'); response.headers.set('Access-Control-Allow-Methods', 'GET'); response.headers.set('Access-Control-Allow-Headers', 'authorization, x-user, x-pass'); response.headers.set('Access-Control-Expose-Headers', 'x-challenge, xhr-user, ses-user'); - auth = imp.load_source("", os.path.abspath("XMLHttpRequest/resources/authentication.py")) + auth = imp.load_source("", os.path.abspath(os.path.join(here, os.pardir, "authentication.py"))) if request.method == "OPTIONS": return "" else: diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/auth7/corsenabled.py b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/auth7/corsenabled.py index ce22697390d..b183b325e36 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/auth7/corsenabled.py +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/auth7/corsenabled.py @@ -1,15 +1,16 @@ import imp import os +here = os.path.dirname(__file__) + def main(request, response): response.headers.set('Access-Control-Allow-Origin', request.headers.get("origin")); response.headers.set('Access-Control-Allow-Credentials', 'true'); response.headers.set('Access-Control-Allow-Methods', 'GET'); response.headers.set('Access-Control-Allow-Headers', 'authorization, x-user, x-pass'); response.headers.set('Access-Control-Expose-Headers', 'x-challenge, xhr-user, ses-user'); - auth = imp.load_source("", os.path.join(os.path.abspath(os.curdir), - "XMLHttpRequest", - "resources", + auth = imp.load_source("", os.path.join(here, + os.pardir, "authentication.py")) if request.method == "OPTIONS": return "" diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/auth8/corsenabled-no-authorize.py b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/auth8/corsenabled-no-authorize.py index cb40efb081b..623a37430da 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/auth8/corsenabled-no-authorize.py +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/auth8/corsenabled-no-authorize.py @@ -1,15 +1,17 @@ import imp import os +here = os.path.dirname(__file__) + + def main(request, response): response.headers.set('Access-Control-Allow-Origin', request.headers.get("origin")); response.headers.set('Access-Control-Allow-Credentials', 'true'); response.headers.set('Access-Control-Allow-Methods', 'GET'); response.headers.set('Access-Control-Allow-Headers', 'x-user, x-pass'); response.headers.set('Access-Control-Expose-Headers', 'x-challenge, xhr-user, ses-user'); - auth = imp.load_source("", os.path.join(os.path.abspath(os.curdir), - "XMLHttpRequest", - "resources", + auth = imp.load_source("", os.path.join(here, + os.pardir, "authentication.py")) if request.method == "OPTIONS": return "" diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/workerxhr-origin-referrer.js b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/workerxhr-origin-referrer.js index 5e2ef2a8ceb..e378de28904 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/workerxhr-origin-referrer.js +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/workerxhr-origin-referrer.js @@ -1,34 +1,63 @@ -// This simply posts a message to the owner page with the contents of the Referer header -var xhr=new XMLHttpRequest() -xhr.onreadystatechange = function(){ - if(xhr.readyState == 4){ - var obj = {test:'Referer header', result:xhr.responseText} - self.postMessage(obj) - } -} -xhr.open('GET', 'inspect-headers.py?filter_name=referer', true) -xhr.send() +importScripts("/resources/testharness.js") -// This simply posts a message to the owner page with the contents of the Origin header -var xhr2=new XMLHttpRequest() -xhr2.onreadystatechange = function(){ - if(xhr2.readyState == 4){ - var obj = {test:'Origin header', result:xhr2.responseText} - self.postMessage(obj) - } -} -xhr2.open('GET', location.protocol + '//www2.'+location.hostname+((location.port === "")?"":":"+location.port)+(location.pathname.replace(/[^/]*$/, ''))+'inspect-headers.py?filter_name=origin&cors', true) -xhr2.send() +async_test(function() { + var expected = 'Referer: ' + + location.href.replace(/[^/]*$/, '') + + "workerxhr-origin-referrer.js\n" -// If "origin" / base URL is the origin of this JS file, we can load files -// from the server it originates from.. and requri.py will be able to tell us -// what the requested URL was -var xhr3=new XMLHttpRequest() -xhr3.onreadystatechange = function(){ - if(xhr3.readyState == 4){ - var obj = {test:'Request URL test', result:xhr3.responseText} - self.postMessage(obj) + var xhr = new XMLHttpRequest() + xhr.onreadystatechange = this.step_func(function() { + if (xhr.readyState == 4) { + assert_equals(xhr.responseText, expected) + this.done() } -} -xhr3.open('GET', 'requri.py?full', true) -xhr3.send() + }) + xhr.open('GET', 'inspect-headers.py?filter_name=referer', true) + xhr.send() +}, 'Referer header') + +async_test(function() { + var expected = 'Origin: ' + + location.protocol + + '//' + + location.hostname + + (location.port === "" ? "" : ":" + location.port) + + '\n' + + var xhr = new XMLHttpRequest() + xhr.onreadystatechange = this.step_func(function() { + if (xhr.readyState == 4) { + assert_equals(xhr.responseText, expected) + this.done() + } + }) + var url = location.protocol + + '//www2.' + + location.hostname + + (location.port === "" ? "" : ":" + location.port) + + location.pathname.replace(/[^/]*$/, '') + + 'inspect-headers.py?filter_name=origin&cors' + xhr.open('GET', url, true) + xhr.send() +}, 'Origin header') + +async_test(function() { + // If "origin" / base URL is the origin of this JS file, we can load files + // from the server it originates from.. and requri.py will be able to tell us + // what the requested URL was + + var expected = location.href.replace(/[^/]*$/, '') + + 'requri.py?full' + + var xhr = new XMLHttpRequest() + xhr.onreadystatechange = this.step_func(function() { + if (xhr.readyState == 4) { + assert_equals(xhr.responseText, expected) + this.done() + } + }) + xhr.open('GET', 'requri.py?full', true) + xhr.send() +}, 'Request URL test') + +done() diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/workerxhr-simple.js b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/workerxhr-simple.js index f6bcec0befa..9bae5a5cabd 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/workerxhr-simple.js +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/workerxhr-simple.js @@ -1,10 +1,9 @@ - var xhr=new XMLHttpRequest() xhr.onreadystatechange = function(){ - if(xhr.readyState == 4){ - var status = xhr.responseText === 'bottom\n' ? 'PASSED' : 'FAILED' - self.postMessage(status) - } + if(xhr.readyState == 4){ + var status = xhr.responseText === 'bottom\n' ? 'PASSED' : 'FAILED' + self.postMessage(status) + } } xhr.open('GET', 'folder.txt', true) xhr.send() diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-simple.js b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-simple.js index 0207cf10764..989a8d4bae8 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-simple.js +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-simple.js @@ -2,5 +2,5 @@ if (this.document === undefined) importScripts("xmlhttprequest-timeout.js"); runTestRequests([ new RequestTracker(true, "no time out scheduled, load fires normally", 0), - new RequestTracker(true, "load fires normally", TIME_NORMAL_LOAD), - new RequestTracker(true, "timeout hit before load", TIME_REGULAR_TIMEOUT) ]); + new RequestTracker(true, "load fires normally", TIME_NORMAL_LOAD), + new RequestTracker(true, "timeout hit before load", TIME_REGULAR_TIMEOUT) ]); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconmain.js b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconmain.js index c6c5e985d25..7ca3caf9367 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconmain.js +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconmain.js @@ -1,2 +1,2 @@ runTestRequests([ SyncRequestSettingTimeoutAfterOpen, - SyncRequestSettingTimeoutBeforeOpen ]); + SyncRequestSettingTimeoutBeforeOpen ]); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconworker.js b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconworker.js index 5a6c3fc5579..09244668e18 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconworker.js +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconworker.js @@ -1,11 +1,11 @@ if (this.document === undefined){ importScripts("xmlhttprequest-timeout.js"); }else{ - throw "This test expects to be run as a Worker"; + throw "This test expects to be run as a Worker"; } /* NOT TESTED: setting timeout before calling open( ... , false) in a worker context. The test code always calls open() first. */ runTestRequests([ new RequestTracker(false, "no time out scheduled, load fires normally", 0), - new RequestTracker(false, "load fires normally", TIME_NORMAL_LOAD), - new RequestTracker(false, "timeout hit before load", TIME_REGULAR_TIMEOUT) ]); + new RequestTracker(false, "load fires normally", TIME_NORMAL_LOAD), + new RequestTracker(false, "timeout hit before load", TIME_REGULAR_TIMEOUT) ]); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-twice.js b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-twice.js index 0061c7333cf..92b7157b9db 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-twice.js +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-twice.js @@ -2,5 +2,5 @@ if (this.document === undefined) importScripts("xmlhttprequest-timeout.js"); runTestRequests([ new RequestTracker(true, "load fires normally with no timeout set, twice", 0, TIME_REGULAR_TIMEOUT, 0), - new RequestTracker(true, "load fires normally with same timeout set twice", TIME_NORMAL_LOAD, TIME_REGULAR_TIMEOUT, TIME_NORMAL_LOAD), - new RequestTracker(true, "timeout fires normally with same timeout set twice", TIME_REGULAR_TIMEOUT, TIME_DELAY, TIME_REGULAR_TIMEOUT) ]); + new RequestTracker(true, "load fires normally with same timeout set twice", TIME_NORMAL_LOAD, TIME_REGULAR_TIMEOUT, TIME_NORMAL_LOAD), + new RequestTracker(true, "timeout fires normally with same timeout set twice", TIME_REGULAR_TIMEOUT, TIME_DELAY, TIME_REGULAR_TIMEOUT) ]); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout.js b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout.js index 01e63cde691..ac35f48d5ab 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout.js +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout.js @@ -245,7 +245,7 @@ AbortedRequest.prototype = { /** * Check the event received, and if it's the right (and only) one we get. * - * WebKit fires abort events even for DONE and UNSENT states, which is + * WebKit fires abort events even for DONE and UNSENT states, which is * discussed in http://webkit.org/b/98404 * That's why we chose to accept secondary "abort" events in this test. * diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/responsedocument-decoding.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/responsedocument-decoding.htm index 321a2ac87a6..7fb4b2d1fd8 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/responsedocument-decoding.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/responsedocument-decoding.htm @@ -21,7 +21,7 @@ } const encoded_content = "%e6%a9%9f"; - const encoded_xml = + const encoded_xml = encodeURIComponent("") + encoded_content + encodeURIComponent("<\/x>"); const encoded_html = encodeURIComponent("") + encoded_content + encodeURIComponent("<\/x>"); diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/send-authentication-competing-names-passwords.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/send-authentication-competing-names-passwords.htm index ba7ea7e35c5..d58d9e002d7 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/send-authentication-competing-names-passwords.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/send-authentication-competing-names-passwords.htm @@ -10,7 +10,7 @@
- - - - - - - - - diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async.htm index ff4c4b4cac0..4a7deec034a 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async.htm @@ -4,7 +4,7 @@ XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire - + diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/send-entity-body-get-head.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/send-entity-body-get-head.htm index f3b8cef3555..95ff711b858 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/send-entity-body-get-head.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/send-entity-body-get-head.htm @@ -4,7 +4,7 @@ XMLHttpRequest: send() - non-empty data argument and GET/HEAD - + diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/send-redirect-infinite.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/send-redirect-infinite.htm index 414e4107efc..54e2ea89485 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/send-redirect-infinite.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/send-redirect-infinite.htm @@ -29,7 +29,7 @@ test.done() }) } - client.send(null) + client.send(null) diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/send-redirect-no-location.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/send-redirect-no-location.htm index 85ae963f446..3a80348fd73 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/send-redirect-no-location.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/send-redirect-no-location.htm @@ -5,7 +5,7 @@ - diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/send-redirect-post-upload.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/send-redirect-post-upload.htm index 1e705cadacb..37a90d42cbd 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/send-redirect-post-upload.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/send-redirect-post-upload.htm @@ -25,7 +25,7 @@ // 307 redirects should resend the POST data, and events and headers will be a little different.. if(shouldResendPost) { - expectedHeaders = { + expectedHeaders = { "X-Request-Content-Length": "11988", "X-Request-Content-Type": "text/plain;charset=UTF-8", "X-Request-Method": "POST", @@ -45,12 +45,12 @@ ]; } else { // setting the right expectations for POST resent as GET without request body - expectedHeaders = { + expectedHeaders = { "X-Request-Content-Length": "NO", "X-Request-Content-Type": "NO", "X-Request-Method": "GET", "X-Request-Query": "NO" - } + } expectedEvents = [ "xhr onreadystatechange 1", "xhr loadstart 1", diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/setrequestheader-after-send.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/setrequestheader-after-send.htm index 5952144713e..7ccdb3e4c31 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/setrequestheader-after-send.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/setrequestheader-after-send.htm @@ -4,7 +4,7 @@ XMLHttpRequest: setRequestHeader() after send() - +
diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/setrequestheader-before-open.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/setrequestheader-before-open.htm index d90b02eafe6..cbe4b299c9d 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/setrequestheader-before-open.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/setrequestheader-before-open.htm @@ -4,7 +4,7 @@ XMLHttpRequest: setRequestHeader() before open() - +
diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/setrequestheader-case-insensitive.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/setrequestheader-case-insensitive.htm index 65f7d29170c..1aed30d1c2a 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/setrequestheader-case-insensitive.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/setrequestheader-case-insensitive.htm @@ -18,6 +18,17 @@ client.send(null) assert_equals(client.responseText, "x-test,") }) + + test(() => { + const client = new XMLHttpRequest + client.open("GET", "resources/echo-headers.py", false) + client.setRequestHeader("THIS-IS-A-TEST", "1") + client.setRequestHeader("THIS-is-A-test", "2") + client.setRequestHeader("content-TYPE", "x/x") + client.send() + assert_regexp_match(client.responseText, /content-TYPE/) + assert_regexp_match(client.responseText, /THIS-IS-A-TEST: 1, 2/) + }) diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-reused.html b/tests/wpt/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-reused.html index 23acf7f74a1..48a98932ca3 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-reused.html +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-reused.html @@ -17,15 +17,16 @@
diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/xmlhttprequest-unsent.htm b/tests/wpt/web-platform-tests/XMLHttpRequest/xmlhttprequest-unsent.htm index a343b76e649..eb52d63eef9 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/xmlhttprequest-unsent.htm +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/xmlhttprequest-unsent.htm @@ -4,16 +4,16 @@ XMLHttpRequest: members during UNSENT - - - - - - - - - - + + + + + + + + + +
diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/securitypolicyviolation-idl.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/securitypolicyviolation-idl.html index 237807cc45a..08f244018a2 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/securitypolicyviolation-idl.html +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/securitypolicyviolation-idl.html @@ -78,6 +78,7 @@ dictionary SecurityPolicyViolationEventInit : EventInit { }; [ + Constructor(), CheckSecurity=Receiver, Exposed=(Window,Worker), ImmutablePrototype diff --git a/tests/wpt/web-platform-tests/cookie-store/cookie_store_tests.tentative.html b/tests/wpt/web-platform-tests/cookie-store/cookie_store_tests.tentative.html new file mode 100644 index 00000000000..383914a118b --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/cookie_store_tests.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Basic tests for cookieStore + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/cookie_store_tests.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/cookie_store_tests.tentative.https.html new file mode 100644 index 00000000000..a892d46c752 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/cookie_store_tests.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Basic tests for cookieStore (HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/cookie_store_tests_static.tentative.html b/tests/wpt/web-platform-tests/cookie-store/cookie_store_tests_static.tentative.html new file mode 100644 index 00000000000..6a4fa758638 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/cookie_store_tests_static.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Basic tests for cookieStore (Static) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/cookie_store_tests_static.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/cookie_store_tests_static.tentative.https.html new file mode 100644 index 00000000000..0776ab38640 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/cookie_store_tests_static.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Basic tests for cookieStore (Static; HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/delete_cookies.tentative.html b/tests/wpt/web-platform-tests/cookie-store/delete_cookies.tentative.html new file mode 100644 index 00000000000..db8bd93e3bf --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/delete_cookies.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: delete cookies + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/delete_cookies.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/delete_cookies.tentative.https.html new file mode 100644 index 00000000000..e042fcffdee --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/delete_cookies.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: delete cookies (HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/delete_cookies_static.tentative.html b/tests/wpt/web-platform-tests/cookie-store/delete_cookies_static.tentative.html new file mode 100644 index 00000000000..045a3e74e0d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/delete_cookies_static.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: delete cookies (Static) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/delete_cookies_static.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/delete_cookies_static.tentative.https.html new file mode 100644 index 00000000000..da8e24f9fd4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/delete_cookies_static.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: delete cookies (Static; HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.html b/tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.html new file mode 100644 index 00000000000..5bcc0e92482 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: document.cookie + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.https.html new file mode 100644 index 00000000000..27e34d59be7 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: document.cookie (HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/document_cookie_static.tentative.html b/tests/wpt/web-platform-tests/cookie-store/document_cookie_static.tentative.html new file mode 100644 index 00000000000..34c1ed91afc --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/document_cookie_static.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: document.cookie (Static) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/document_cookie_static.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/document_cookie_static.tentative.https.html new file mode 100644 index 00000000000..0664910df90 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/document_cookie_static.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: document.cookie (Static; HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/expiration.tentative.html b/tests/wpt/web-platform-tests/cookie-store/expiration.tentative.html new file mode 100644 index 00000000000..3abe909823a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/expiration.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: expiration + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/expiration.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/expiration.tentative.https.html new file mode 100644 index 00000000000..50f0e2e160a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/expiration.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: expiration (HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/expiration_static.tentative.html b/tests/wpt/web-platform-tests/cookie-store/expiration_static.tentative.html new file mode 100644 index 00000000000..bfb8320a134 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/expiration_static.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: expiration (Static) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/expiration_static.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/expiration_static.tentative.https.html new file mode 100644 index 00000000000..e582849d849 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/expiration_static.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: expiration (Static; HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/get_set_get_all.tentative.html b/tests/wpt/web-platform-tests/cookie-store/get_set_get_all.tentative.html new file mode 100644 index 00000000000..cc59bd5beb5 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/get_set_get_all.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: get, set, getAll + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/get_set_get_all.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/get_set_get_all.tentative.https.html new file mode 100644 index 00000000000..3d37ec9cc34 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/get_set_get_all.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: get, set, getAll (HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/get_set_get_all_static.tentative.html b/tests/wpt/web-platform-tests/cookie-store/get_set_get_all_static.tentative.html new file mode 100644 index 00000000000..aa7fa312cb6 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/get_set_get_all_static.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: get, set, getAll (Static) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/get_set_get_all_static.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/get_set_get_all_static.tentative.https.html new file mode 100644 index 00000000000..31c8c1df950 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/get_set_get_all_static.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: get, set, getAll (Static; HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html b/tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html new file mode 100644 index 00000000000..bfe6eaa0663 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: HTTP Cookie and Set-Cookie headers + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html new file mode 100644 index 00000000000..56649e5f2d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: HTTP Cookie and Set-Cookie headers (HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/meta_http_equiv_set_cookie.tentative.html b/tests/wpt/web-platform-tests/cookie-store/meta_http_equiv_set_cookie.tentative.html new file mode 100644 index 00000000000..69943ec4313 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/meta_http_equiv_set_cookie.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: <title>Async Cookies: document.cookielt;Meta Http-Equiv="Set-Cookie" ... Async Cookies: document.cookiegt; + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/meta_http_equiv_set_cookie.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/meta_http_equiv_set_cookie.tentative.https.html new file mode 100644 index 00000000000..43bde2eb8eb --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/meta_http_equiv_set_cookie.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: <title>Async Cookies: document.cookielt;Meta Http-Equiv="Set-Cookie" ... Async Cookies: document.cookiegt; (HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/meta_http_equiv_set_cookie_static.tentative.html b/tests/wpt/web-platform-tests/cookie-store/meta_http_equiv_set_cookie_static.tentative.html new file mode 100644 index 00000000000..55d90aac01f --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/meta_http_equiv_set_cookie_static.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: <title>Async Cookies: document.cookielt;Meta Http-Equiv="Set-Cookie" ... Async Cookies: document.cookiegt; (Static) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/meta_http_equiv_set_cookie_static.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/meta_http_equiv_set_cookie_static.tentative.https.html new file mode 100644 index 00000000000..fd07594ca1e --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/meta_http_equiv_set_cookie_static.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: <title>Async Cookies: document.cookielt;Meta Http-Equiv="Set-Cookie" ... Async Cookies: document.cookiegt; (Static; HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html b/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html new file mode 100644 index 00000000000..e7ea7c837a5 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test No Name and No Value + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.https.html new file mode 100644 index 00000000000..07eb950e830 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test No Name and No Value (HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value_static.tentative.html b/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value_static.tentative.html new file mode 100644 index 00000000000..c40fbec6539 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value_static.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test No Name and No Value (Static) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value_static.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value_static.tentative.https.html new file mode 100644 index 00000000000..463af00f3ff --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value_static.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test No Name and No Value (Static; HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html b/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html new file mode 100644 index 00000000000..07767a99fa8 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test No Name, '=' in Value + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.https.html new file mode 100644 index 00000000000..30b3c9e7e01 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test No Name, '=' in Value (HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value_static.tentative.html b/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value_static.tentative.html new file mode 100644 index 00000000000..24a85582dc6 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value_static.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test No Name, '=' in Value (Static) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value_static.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value_static.tentative.https.html new file mode 100644 index 00000000000..badeae4a1f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value_static.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test No Name, '=' in Value (Static; HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html b/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html new file mode 100644 index 00000000000..e1b0aa11afa --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test No Name, Multiple Values + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.https.html new file mode 100644 index 00000000000..f29e3fa9373 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test No Name, Multiple Values (HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values_static.tentative.html b/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values_static.tentative.html new file mode 100644 index 00000000000..3200eb69aef --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values_static.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test No Name, Multiple Values (Static) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values_static.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values_static.tentative.https.html new file mode 100644 index 00000000000..1c8e920c5e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values_static.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test No Name, Multiple Values (Static; HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/observation.tentative.html b/tests/wpt/web-platform-tests/cookie-store/observation.tentative.html new file mode 100644 index 00000000000..7a70b2bceb3 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/observation.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test Observation + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/observation.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/observation.tentative.https.html new file mode 100644 index 00000000000..c499171e95e --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/observation.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test Observation (HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/observation_static.tentative.html b/tests/wpt/web-platform-tests/cookie-store/observation_static.tentative.html new file mode 100644 index 00000000000..b524b05efe5 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/observation_static.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test Observation (Static) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/observation_static.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/observation_static.tentative.https.html new file mode 100644 index 00000000000..3d953c25c07 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/observation_static.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: Test Observation (Static; HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/one_simple_origin_cookie.tentative.html b/tests/wpt/web-platform-tests/cookie-store/one_simple_origin_cookie.tentative.html new file mode 100644 index 00000000000..2bf2ae60174 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/one_simple_origin_cookie.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: One simple origin cookie + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/one_simple_origin_cookie.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/one_simple_origin_cookie.tentative.https.html new file mode 100644 index 00000000000..05e586de638 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/one_simple_origin_cookie.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: One simple origin cookie (HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/one_simple_origin_cookie_static.tentative.html b/tests/wpt/web-platform-tests/cookie-store/one_simple_origin_cookie_static.tentative.html new file mode 100644 index 00000000000..f7e04eacc57 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/one_simple_origin_cookie_static.tentative.html @@ -0,0 +1,14 @@ + + + +Async Cookies: One simple origin cookie (Static) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/one_simple_origin_cookie_static.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/one_simple_origin_cookie_static.tentative.https.html new file mode 100644 index 00000000000..25e155a88e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/one_simple_origin_cookie_static.tentative.https.html @@ -0,0 +1,14 @@ + + + +Async Cookies: One simple origin cookie (Static; HTTPS) + + + + + + diff --git a/tests/wpt/web-platform-tests/cookie-store/resources/cookie-store-tests.js b/tests/wpt/web-platform-tests/cookie-store/resources/cookie-store-tests.js new file mode 100644 index 00000000000..f9bb78f7555 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/resources/cookie-store-tests.js @@ -0,0 +1,1129 @@ +'use strict'; + +// Buffered exceptions re-thrown at end of suite +let savedExceptions = []; + +// Observer-based document.cookie simulator +let observer; +let observationLog = []; +let observedStore = []; + +// Note on cookie naming conventions: +// +// A simple origin cookie is a cookie named with the __Host- prefix +// which is always secure-flagged, always implicit-domain, always +// /-scoped, and hence always unambiguous in the cookie jar serialization +// and origin-scoped. It can be treated as a simple key/value pair. +// +// "LEGACY" in a cookie name here means it is an old-style unprefixed +// cookie name, so you can't tell e.g. whether it is Secure-flagged or +// /-pathed just by looking at it, and its flags, domain and path may +// vary even in a single cookie jar serialization leading to apparent +// duplicate entries, ambiguities, and complexity (it cannot be +// treated as a simple key/value pair.) +// +// Cookie names used in the tests are intended to be +// realistic. Traditional session cookie names are typically +// all-upper-case for broad framework compatibility. The more modern +// "__Host-" prefix has only one allowed casing. An expected upgrade +// path from traditional "legacy" cookie names to simple origin cookie +// names is simply to prefix the traditional name with the "__Host-" +// prefix. +// +// Many of the used cookie names are non-ASCII to ensure +// straightforward internationalization is possible at every API surface. +// These work in many modern browsers, though not yet all of them. + +// Approximate async observer-based equivalent to the document.cookie +// getter but with important differences: an empty cookie jar returns +// undefined. Introduces unfortunate but apparently unavoidable delays +// to ensure the observer has time to run. +// +// Timeouts here are intended to give observers enough time to sense +// a change. It can't be changed to wait indefinitely as it is +// sometimes used to verify observers were not notified of any +// change. +const getCookieStringObserved = opt_name => { + // Run later to ensure the cookie scanner (which runs one task + // later, at least in the polyfill) has a chance. + // + // We cannot use the s\u0065tTimeout identifier unescaped inside WPT + // tests (the linter does not allow it.) However we need an actual + // delay to allow batched observers to fire. + const initialLength = observationLog.length; + return (async () => { + assert_not_equals(observer, undefined, 'observer should not be undefined'); + await new Promise(resolve => s\u0065tTimeout(resolve)); + const lengthAfterImplicit0msSetTimeout = observationLog.length; + if (lengthAfterImplicit0msSetTimeout === initialLength) { + await new Promise(resolve => s\u0065tTimeout(resolve, 4)); + const lengthAfter4msSetTimeout = observationLog.length; + if (lengthAfter4msSetTimeout === initialLength) { + let lengthAfterRequestAnimationFrame = lengthAfter4msSetTimeout; + if (typeof requestAnimationFrame !== 'undefined') { + await new Promise(resolve => requestAnimationFrame(resolve)); + lengthAfterRequestAnimationFrame = observationLog.length; + } + if (lengthAfterRequestAnimationFrame === initialLength) { + await new Promise( + resolve => s\u0065tTimeout(resolve, kExtraObserverDelay)); + } + } + } + let filtered = observedStore; + if (opt_name != null) filtered = filtered.filter( + cookie => cookie.name === opt_name); + return cookieString(filtered); + })(); +}; + +const assertEmptyCookieJar = async (testCase, messageSuffix) => { + assert_equals( + await getCookieString(), + undefined, + 'No cookies ' + messageSuffix); + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + undefined, + 'No HTTP cookies ' + messageSuffix); + if (kHasDocument) assert_equals( + await getCookieStringDocument(), + undefined, + 'No document.cookie cookies ' + messageSuffix); +}; + +const suite = ({testName = undefined} = {}) => { + promise_test(async testCase => { + testOverride = testName; + observer = undefined; + observationLog.length = 0; + observedStore.length = 0; + savedExceptions.length = 0; + // Start with a clean slate. + // + // Attempt testDeleteCookies first too, since otherwise an earlier + // failed test can cause all subsequent tests to fail. + await testDeleteCookies(testCase); + await assertEmptyCookieJar(testCase, 'at start of test'); + let unfinished = true; + try { + if (includeTest('testObservation')) { + observer = await testObservation(); + assert_equals( + await getCookieStringObserved(), + undefined, + 'No observed cookies at start of test'); + } + // These use the same cookie names and so cannot run interleaved + if (includeTest('testNoNameAndNoValue')) await testNoNameAndNoValue(); + if (includeTest('testNoNameMultipleValues')) { + await testNoNameMultipleValues(); + } + if (includeTest('testNoNameEqualsInValue')) { + await testNoNameEqualsInValue(); + } + if (includeTest('testMetaHttpEquivSetCookie')) { + await testMetaHttpEquivSetCookie(); + } + if (includeTest('testDocumentCookie', !kHasDocument)) { + await testDocumentCookie(); + } + if (includeTest('testHttpCookieAndSetCookieHeaders', kIsStatic)) { + await testHttpCookieAndSetCookieHeaders(); + } + if (includeTest('testGetSetGetAll')) { + await testGetSetGetAll(); + } + if (includeTest('testOneSimpleOriginCookie')) { + await testOneSimpleOriginCookie(testCase); + } + if (includeTest('testExpiration')) { + await testExpiration(testCase); + } + await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + testThreeSimpleOriginSessionCookiesSetSequentially(), + '__Host- cookies only writable from secure contexts' + + ' (testThreeSimpleOriginSessionCookiesSetSequentially)'); + await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + testThreeSimpleOriginSessionCookiesSetNonsequentially(), + '__Host- cookies only writable from secure contexts' + + ' (testThreeSimpleOriginSessionCookiesSetNonsequentially)'); + await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + setExpiredSecureCookieWithDomainPathAndFallbackValue(), + 'Secure cookies only writable from secure contexts' + + ' (setExpiredSecureCookieWithDomainPathAndFallbackValue)'); + await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + deleteSimpleOriginCookie(), + '__Host- cookies only writable from secure contexts' + + ' (deleteSimpleOriginCookie)'); + await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + deleteSecureCookieWithDomainAndPath(), + 'Secure cookies only writable from secure contexts' + + ' (deleteSecureCookieWithDomainAndPath)'); + if (kIsUnsecured) { + assert_equals( + await getCookieString(), + includeTest('testGetSetGetAll') ? 'TEST=value' : undefined, + (includeTest('testGetSetGetAll') ? + 'Only one unsecured cookie' : + 'No unsecured cookies') + + ' before testDeleteCookies at end of test'); + if (observer) assert_equals( + await getCookieStringObserved(), + includeTest('testGetSetGetAll') ? 'TEST=value' : undefined, + (includeTest('testGetSetGetAll') ? + 'Only one observed unsecured cookie' : + 'No observed unsecured cookies') + + ' before testDeleteCookies at end of test'); + } else { + assert_equals( + await getCookieString(), + (includeTest('testGetSetGetAll') ? 'TEST=value; ' : '') + + '__Host-1ðŸª=🔵cookie-value1🔴; ' + + '__Host-2🌟=🌠cookie-value2🌠; ' + + '__Host-3🌱=🔶cookie-value3🔷; ' + + '__Host-unordered1ðŸª=🔵unordered-cookie-value1🔴; ' + + '__Host-unordered2🌟=🌠unordered-cookie-value2🌠; ' + + '__Host-unordered3🌱=🔶unordered-cookie-value3🔷', + 'All residual cookies before testDeleteCookies at end of test'); + if (observer) assert_equals( + await getCookieStringObserved(), + (includeTest('testGetSetGetAll') ? 'TEST=value; ' : '') + + '__Host-1ðŸª=🔵cookie-value1🔴; ' + + '__Host-2🌟=🌠cookie-value2🌠; ' + + '__Host-3🌱=🔶cookie-value3🔷; ' + + '__Host-unordered1ðŸª=🔵unordered-cookie-value1🔴; ' + + '__Host-unordered2🌟=🌠unordered-cookie-value2🌠; ' + + '__Host-unordered3🌱=🔶unordered-cookie-value3🔷', + 'All residual observed cookies before testDeleteCookies ' + + 'at end of test'); + } + if (kIsUnsecured) { + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + includeTest('testGetSetGetAll') ? 'TEST=value' : undefined, + (includeTest('testGetSetGetAll') ? + 'Only one unsecured HTTP cookie' : + 'No unsecured HTTP cookies') + + ' before testDeleteCookies at end of test'); + } else { + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + (includeTest('testGetSetGetAll') ? 'TEST=value; ' : '') + + '__Host-1ðŸª=🔵cookie-value1🔴; ' + + '__Host-2🌟=🌠cookie-value2🌠; ' + + '__Host-3🌱=🔶cookie-value3🔷; ' + + '__Host-unordered1ðŸª=🔵unordered-cookie-value1🔴; ' + + '__Host-unordered2🌟=🌠unordered-cookie-value2🌠; ' + + '__Host-unordered3🌱=🔶unordered-cookie-value3🔷', + 'All residual HTTP cookies before testDeleteCookies ' + + 'at end of test'); + } + if (kIsUnsecured) { + if (kHasDocument) assert_equals( + await getCookieStringDocument(), + includeTest('testGetSetGetAll') ? 'TEST=value' : undefined, + (includeTest('testGetSetGetAll') ? + 'Only one unsecured document.cookie cookie' : + 'No unsecured document.cookie cookies') + + ' before testDeleteCookies at end of test'); + } else { + if (kHasDocument) assert_equals( + await getCookieStringDocument(), + (includeTest('testGetSetGetAll') ? 'TEST=value; ' : '') + + '__Host-1ðŸª=🔵cookie-value1🔴; ' + + '__Host-2🌟=🌠cookie-value2🌠; ' + + '__Host-3🌱=🔶cookie-value3🔷; ' + + '__Host-unordered1ðŸª=🔵unordered-cookie-value1🔴; ' + + '__Host-unordered2🌟=🌠unordered-cookie-value2🌠; ' + + '__Host-unordered3🌱=🔶unordered-cookie-value3🔷', + 'All residual document.cookie cookies before testDeleteCookies ' + + 'at end of test'); + } + unfinished = false; + assert_equals( + savedExceptions.length, + 0, + 'Found saved exceptions: ' + savedExceptions); + } finally { + try { + await testDeleteCookies(testCase); + if (observer) observer.disconnect(); + await assertEmptyCookieJar(testCase, 'at end of test'); + } catch (e) { + // only re-throw testDeleteCookies failures if finished to avoid masking + // earlier failures + if (!unfinished) throw e; + } + } + }, 'Cookie Store Tests (' + (testName || 'all') + ')'); +}; + + +// Try to clean up cookies and observers used by tests. Also +// verifies delete() behavior for secure contexts and unsecured +// contexts. +// +// Parameters: +// - testCase: (TestCase) Context in which the testDeleteCookies is run. +const testDeleteCookies = async testCase => { + let exceptions = []; + for (let resetStep of [ + async () => await cookieStore.delete(''), + async () => await cookieStore.delete('TEST'), + async () => await cookieStore.delete('META-ðŸª'), + async () => await cookieStore.delete('DOCUMENT-ðŸª'), + async () => await cookieStore.delete('HTTP-ðŸª'), + async () => { + if (!kIsStatic) await setCookieStringHttp( + 'HTTPONLY-ðŸª=DELETED; path=/; max-age=0; httponly'); + }, + async () => await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + cookieStore.delete('__Host-COOKIENAME')), + async () => await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + cookieStore.delete('__Host-1ðŸª')), + async () => await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + cookieStore.delete('__Host-2🌟')), + async () => await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + cookieStore.delete('__Host-3🌱')), + async () => await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + cookieStore.delete('__Host-unordered1ðŸª')), + async () => await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + cookieStore.delete('__Host-unordered2🌟')), + async () => await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + cookieStore.delete('__Host-unordered3🌱')), + ]) { + try { + await resetStep(); + } catch (x) { + exceptions.push(x); + }; + } + assert_equals( + exceptions.length, + 0, + 'testDeleteCookies failures: ' + exceptions); +}; + +// Helper to verify first-of-name get using async/await. +// +// Returns the first script-visible value of the __Host-COOKIENAME cookie or +// undefined if no matching cookies are script-visible. +let getOneSimpleOriginCookie = async () => { + let cookie = await cookieStore.get('__Host-COOKIENAME'); + if (!cookie) return undefined; + return cookie.value; +}; + +// Returns the number of script-visible cookies whose names start with +// __Host-COOKIEN +let countMatchingSimpleOriginCookies = async () => { + let cookieList = await cookieStore.getAll({ + name: '__Host-COOKIEN', + matchType: 'startsWith' + }); + return cookieList.length; +}; + +// Set the secure implicit-domain cookie __Host-COOKIENAME with value +// cookie-value on path / and session duration. +let setOneSimpleOriginSessionCookie = async () => { + await cookieStore.set('__Host-COOKIENAME', 'cookie-value'); +}; + +// Set the secure example.org-domain cookie __Secure-COOKIENAME with +// value cookie-value on path /cgi-bin/ and 24 hour duration; domain +// and path will be rewritten below. +// +// This uses a Date object for expiration. +let setOneDaySecureCookieWithDate = async () => { + // one day ahead, ignoring a possible leap-second + let inTwentyFourHours = new Date(Date.now() + 24 * 60 * 60 * 1000); + await cookieStore.set('__Secure-COOKIENAME', 'cookie-value', { + path: '/cgi-bin/', + expires: inTwentyFourHours, + secure: true, + domain: 'example.org' + }); +}; + +// Set the unsecured example.org-domain cookie LEGACYCOOKIENAME with +// value cookie-value on path /cgi-bin/ and 24 hour duration; domain +// and path will be rewritten below. +// +// This uses milliseconds since the start of the Unix epoch for +// expiration. +let setOneDayUnsecuredCookieWithMillisecondsSinceEpoch = async () => { + // one day ahead, ignoring a possible leap-second + let inTwentyFourHours = Date.now() + 24 * 60 * 60 * 1000; + await cookieStore.set('LEGACYCOOKIENAME', 'cookie-value', { + path: '/cgi-bin/', + expires: inTwentyFourHours, + secure: false, + domain: 'example.org' + }); +}; + +// Delete the cookie written by +// setOneDayUnsecuredCookieWithMillisecondsSinceEpoch. +let deleteUnsecuredCookieWithDomainAndPath = async () => { + await cookieStore.delete('LEGACYCOOKIENAME', { + path: '/cgi-bin/', + secure: false, + domain: 'example.org' + }); +}; + + +// Set the secured example.org-domain cookie __Secure-COOKIENAME with +// value cookie-value on path /cgi-bin/ and expiration in June of next +// year; domain and path will be rewritten below. +// +// This uses an HTTP-style date string for expiration. +let setSecureCookieWithHttpLikeExpirationString = async () => { + const year = (new Date()).getUTCFullYear() + 1; + const date = new Date('07 Jun ' + year + ' 07:07:07 UTC'); + const day = ('Sun Mon Tue Wed Thu Fri Sat'.split(' '))[date.getUTCDay()]; + await cookieStore.set('__Secure-COOKIENAME', 'cookie-value', { + path: '/cgi-bin/', + expires: day + ', 07 Jun ' + year + ' 07:07:07 GMT', + secure: true, + domain: 'example.org' + }); +}; + +// Set three simple origin session cookies sequentially and ensure +// they all end up in the cookie jar in order. +let testThreeSimpleOriginSessionCookiesSetSequentially = async () => { + await cookieStore.set('__Host-1ðŸª', '🔵cookie-value1🔴'); + await cookieStore.set('__Host-2🌟', '🌠cookie-value2🌠'); + await cookieStore.set('__Host-3🌱', '🔶cookie-value3🔷'); + // NOTE: this assumes no concurrent writes from elsewhere; it also + // uses three separate cookie jar read operations where a single getAll + // would be more efficient, but this way the CookieStore does the filtering + // for us. + let matchingValues = await Promise.all([ '1ðŸª', '2🌟', '3🌱' ].map( + async suffix => (await cookieStore.get('__Host-' + suffix)).value)); + let actual = matchingValues.join(';'); + let expected = '🔵cookie-value1🔴;🌠cookie-value2🌠;🔶cookie-value3🔷'; + if (actual !== expected) throw new Error( + 'Expected ' + JSON.stringify(expected) + + ' but got ' + JSON.stringify(actual)); +}; + +// Set three simple origin session cookies in undefined order using +// Promise.all and ensure they all end up in the cookie jar in any +// order. +let testThreeSimpleOriginSessionCookiesSetNonsequentially = async () => { + await Promise.all([ + cookieStore.set('__Host-unordered1ðŸª', '🔵unordered-cookie-value1🔴'), + cookieStore.set('__Host-unordered2🌟', '🌠unordered-cookie-value2🌠'), + cookieStore.set('__Host-unordered3🌱', '🔶unordered-cookie-value3🔷') + ]); + // NOTE: this assumes no concurrent writes from elsewhere; it also + // uses three separate cookie jar read operations where a single getAll + // would be more efficient, but this way the CookieStore does the filtering + // for us and we do not need to sort. + let matchingCookies = await Promise.all([ '1ðŸª', '2🌟', '3🌱' ].map( + suffix => cookieStore.get('__Host-unordered' + suffix))); + let actual = matchingCookies.map(({ value }) => value).join(';'); + let expected = + '🔵unordered-cookie-value1🔴;' + + '🌠unordered-cookie-value2🌠;' + + '🔶unordered-cookie-value3🔷'; + if (actual !== expected) throw new Error( + 'Expected ' + JSON.stringify(expected) + + ' but got ' + JSON.stringify(actual)); +}; + +// Set an already-expired cookie. +let setExpiredSecureCookieWithDomainPathAndFallbackValue = async () => { + let theVeryRecentPast = Date.now(); + let expiredCookieSentinelValue = 'EXPIRED'; + await cookieStore.set('__Secure-COOKIENAME', expiredCookieSentinelValue, { + path: '/cgi-bin/', + expires: theVeryRecentPast, + secure: true, + domain: 'example.org' + }); +}; + +// Delete the __Host-COOKIENAME cookie created above. +let deleteSimpleOriginCookie = async () => { + await cookieStore.delete('__Host-COOKIENAME'); +}; + +// Delete the __Secure-COOKIENAME cookie created above. +let deleteSecureCookieWithDomainAndPath = async () => { + await cookieStore.delete('__Secure-COOKIENAME', { + path: '/cgi-bin/', + domain: 'example.org', + secure: true + }); +}; + +// Test for CookieObserver. Used in implementation of async observer-based +// document.cookie simulator. This is passed to the Promise constructor after +// rewriting. +let testObservation_ = (resolve, reject) => { + // This will get invoked (asynchronously) shortly after the + // observe(...) call to provide an initial snapshot; in that case + // the length of cookieChanges may be 0, indicating no matching + // script-visible cookies for any URL+cookieStore currently + // observed. The CookieObserver instance is passed as the second + // parameter to allow additional calls to observe or disconnect. + let callback = (cookieChanges, observer) => { + var logEntry = []; + observationLog.push(logEntry); + const cookieChangesStrings = changes => changes.map( + ({type, name, value, index}) => cookieString(Object.assign( + new Array(observedStore.length), + {[index]: { + name: ((type === 'visible') ? '+' : '-') + name, + value: value + }}))); + logEntry.push(['before', cookieString(observedStore)]); + logEntry.push(['changes', cookieChangesStrings(cookieChanges)]); + const newObservedStore = observedStore.slice(0); + try { + const insertions = [], deletions = []; + cookieChanges.forEach(({ + cookieStore, + type, + url, + name, + value, + index, + all + }) => { + switch (type) { + case 'visible': + // Creation or modification (e.g. change in value, or + // removal of HttpOnly), or appearance to script due to + // change in policy or permissions + insertions.push([index, {name: name, value: value}]); + break; + case 'hidden': + // Deletion/expiration or disappearance (e.g. due to + // modification adding HttpOnly), or disappearance from + // script due to change in policy or permissions + assert_object_equals( + {name: name, value: value}, + observedStore[index], + 'Hidden cookie at index ' + index + + ' was not the expected one: ' + JSON.stringify({ + got: {name: name, value: value}, + expected: observedStore[index] + })); + deletions.push(index); + break; + default: + savedExceptions.push('Unexpected CookieChange type ' + type); + if (reject) reject(savedExceptions[savedExceptions.length - 1]); + throw savedExceptions[savedExceptions.length - 1]; + } + }); + deletions.sort((a, b) => b - a).forEach( + index => newObservedStore.splice(index, 1)); + let bias = 0; + insertions.sort(([a], [b]) => a - b).forEach(([ index, cookie ]) => { + if (newObservedStore[index + bias] !== undefined) { + newObservedStore.splice(index, 0, cookie); + --bias; + } else { + newObservedStore[index] = cookie; + } + }); + observedStore = newObservedStore.filter(entry => entry !== undefined); + logEntry.push(['after', cookieString(observedStore)]); + const reported = + cookieChanges && cookieChanges.length ? + cookieChanges[cookieChanges.length - 1].all : + []; + assert_equals( + cookieString(reported), + cookieString(observedStore), + 'Mismatch between observed store and reported store.' + + '\n observed:\n ' + cookieString(observedStore) + + '\n reported:\n ' + cookieString(reported) + + '\n log:\n ' + observationLog.map(JSON.stringify).join('\n ')); + } catch (e) { + logEntry.push([' *** âš  *** ERROR: EXCEPTION THROWN *** âš  *** ']); + savedExceptions.push('Exception in observer'); + savedExceptions.push(e); + if (reject) reject(e); + throw e; + } + // Resolve promise after first callback + if (resolve) resolve(observer); + resolve = null; + reject = null; + }; + CookieObserver.startTimer_ = (handler, ignoredDelay) => { + var timer = {shouldRun: true, fingerPrint: Math.random()}; + new Promise(resolve => s\u0065tTimeout(resolve)).then(() => { + if (!timer.shouldRun) return; + CookieObserver.stopTimer_(timer); + handler(); + }); + return timer; + }; + CookieObserver.stopTimer_ = timer => { + timer.shouldRun = false; + }; + let observer = new CookieObserver(callback); + // If null or omitted this defaults to location.pathname up to and + // including the final '/' in a document context, or worker scope up + // to and including the final '/' in a service worker context. + let url = (location.pathname).replace(/[^\/]+$/, ''); + // If null or omitted this defaults to interest in all + // script-visible cookies. + let interests = [ + // Interested in all secure cookies named '__Secure-COOKIENAME'; + // the default matchType is 'equals' at the given URL. + { name: '__Secure-COOKIENAME', url: url }, + // Interested in all simple origin cookies named like + // /^__Host-COOKIEN.*$/ at the default URL. + { name: '__Host-COOKIEN', matchType: 'startsWith' }, + // Interested in all simple origin cookies named '__Host-1ðŸª' + // at the default URL. + { name: '__Host-1ðŸª' }, + // Interested in all cookies named 'OLDCOOKIENAME' at the given URL. + { name: 'OLDCOOKIENAME', matchType: 'equals', url: url }, + // Interested in all simple origin cookies named like + // /^__Host-AUTHTOKEN.*$/ at the given URL. + { name: '__Host-AUTHTOKEN', matchType: 'startsWith', url: url + 'auth/' } + ]; + observer.observe(cookieStore, interests); + // Default interest: all script-visible changes, default URL + observer.observe(cookieStore); +}; + +// Rewrite testObservation_ to use a path we are allowed to see from a +// document context. +// +// FIXME: remove this once ServiceWorker support is implemented and +// path observation can actually be verified at a sub-path. +if (kHasDocument) { + testObservation_ = eval(String(testObservation_).split('auth/').join('auth')); +} + +// Wrap testObservation_ to work as a promise. +const testObservation = () => new Promise(testObservation_); + +// Verify behavior of no-name and no-value cookies. +let testNoNameAndNoValue = async () => { + await cookieStore.set('', 'first-value'); + let actual1 = + (await cookieStore.getAll('')).map(({ value }) => value).join(';'); + let expected1 = 'first-value'; + if (actual1 !== expected1) throw new Error( + 'Expected ' + JSON.stringify(expected1) + + ' but got ' + JSON.stringify(actual1)); + await cookieStore.set('', ''); + let actual2 = + (await cookieStore.getAll('')).map(({ value }) => value).join(';'); + let expected2 = ''; + if (actual2 !== expected2) throw new Error( + 'Expected ' + JSON.stringify(expected) + + ' but got ' + JSON.stringify(actual)); + await cookieStore.delete(''); + assert_equals( + await getCookieString(), + undefined, + 'Empty cookie jar after testNoNameAndNoValue'); + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + undefined, + 'Empty HTTP cookie jar after testNoNameAndNoValue'); + if (kHasDocument) assert_equals( + await getCookieStringDocument(), + undefined, + 'Empty document.cookie cookie jar after testNoNameAndNoValue'); + if (observer) assert_equals( + await getCookieStringObserved(), + undefined, + 'Empty observed cookie jar after testNoNameAndNoValue'); +}; + +// Verify behavior of multiple no-name cookies. +let testNoNameMultipleValues = async () => { + await cookieStore.set('', 'first-value'); + let actual1 = + (await cookieStore.getAll('')).map(({ value }) => value).join(';'); + let expected1 = 'first-value'; + if (actual1 !== expected1) throw new Error( + 'Expected ' + JSON.stringify(expected1) + + ' but got ' + JSON.stringify(actual1)); + await cookieStore.set('', 'second-value'); + let actual2 = + (await cookieStore.getAll('')).map(({ value }) => value).join(';'); + let expected2 = 'second-value'; + if (actual2 !== expected2) throw new Error( + 'Expected ' + JSON.stringify(expected2) + + ' but got ' + JSON.stringify(actual2)); + await cookieStore.delete(''); + assert_equals( + await getCookieString(), + undefined, + 'Empty cookie jar after testNoNameMultipleValues'); + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + undefined, + 'Empty HTTP cookie jar after testNoNameMultipleValues'); + if (observer) assert_equals( + await getCookieStringObserved(), + undefined, + 'Empty observed cookie jar after testNoNameMultipleValues'); +}; + +// Verify that attempting to set a cookie with no name and with '=' in +// the value does not work. +let testNoNameEqualsInValue = async () => { + await cookieStore.set('', 'first-value'); + let actual1 = + (await cookieStore.getAll('')).map(({ value }) => value).join(';'); + let expected1 = 'first-value'; + if (actual1 !== expected1) throw new Error( + 'Expected ' + JSON.stringify(expected1) + + ' but got ' + JSON.stringify(actual1)); + try { + await cookieStore.set('', 'suspicious-value=resembles-name-and-value'); + } catch (expectedError) { + let actual2 = + (await cookieStore.getAll('')).map(({ value }) => value).join(';'); + let expected2 = 'first-value'; + if (actual2 !== expected2) throw new Error( + 'Expected ' + JSON.stringify(expected2) + + ' but got ' + JSON.stringify(actual2)); + assert_equals( + await getCookieString(), + 'first-value', + 'Earlier cookie jar after rejected part of testNoNameEqualsInValue'); + await cookieStore.delete(''); + assert_equals( + await getCookieString(), + undefined, + 'Empty cookie jar after cleanup in testNoNameEqualsInValue'); + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + undefined, + 'Empty HTTP cookie jar after cleanup in testNoNameEqualsInValue'); + if (observer) assert_equals( + await getCookieStringObserved(), + undefined, + 'Empty observed cookie jar after cleanup in testNoNameEqualsInValue'); + return; + } + throw new Error( + 'Expected promise rejection' + + ' when setting a cookie with no name and "=" in value'); +}; + +// https://github.com/whatwg/html/issues/3076#issuecomment-332920132 +// proposes to remove but it is +// not yet an accepted part of the HTML spec. +// +// Until the feature is gone, it interacts with other cookie APIs, +// including this one. +// +// When kMetaHttpEquivSetCookieIsGone is set, verify that no longer works. Otherwise, verify +// its interoperability with other APIs. +let testMetaHttpEquivSetCookie = async () => { + await setCookieStringMeta('META-ðŸª=🔵; path=/'); + if (kMetaHttpEquivSetCookieIsGone) { + assert_equals( + await getCookieString(), + undefined, + 'Empty cookie jar after no-longer-supported' + + ' '); + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + undefined, + 'Empty HTTP cookie jar after no-longer-supported' + + ' '); + if (observer) assert_equals( + await getCookieStringObserved(), + undefined, + 'Empty observed cookie jar after no-longer-supported' + + ' '); + } else { + assert_equals( + await getCookieString(), + 'META-ðŸª=🔵', + 'Cookie we wrote using' + + ' in cookie jar'); + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + 'META-ðŸª=🔵', + 'Cookie we wrote using' + + ' in HTTP cookie jar'); + if (observer) assert_equals( + await getCookieStringObserved(), + 'META-ðŸª=🔵', + 'Cookie we wrote using' + + ' in observed cookie jar'); + await setCookieStringMeta('META-ðŸª=DELETED; path=/; max-age=0'); + assert_equals( + await getCookieString(), + undefined, + 'Empty cookie jar after ' + + ' cookie-clearing using max-age=0'); + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + undefined, + 'Empty HTTP cookie jar after ' + + ' cookie-clearing using max-age=0'); + if (observer) assert_equals( + await getCookieStringObserved(), + undefined, + 'Empty observed cookie jar after ' + + ' cookie-clearing using max-age=0'); + } +}; + +// Verify interoperability of document.cookie with other APIs. +let testDocumentCookie = async () => { + await setCookieStringDocument('DOCUMENT-ðŸª=🔵; path=/'); + assert_equals( + await getCookieString(), + 'DOCUMENT-ðŸª=🔵', + 'Cookie we wrote using document.cookie in cookie jar'); + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + 'DOCUMENT-ðŸª=🔵', + 'Cookie we wrote using document.cookie in HTTP cookie jar'); + assert_equals( + await getCookieStringDocument(), + 'DOCUMENT-ðŸª=🔵', + 'Cookie we wrote using document.cookie in document.cookie'); + if (observer) assert_equals( + await getCookieStringObserved(), + 'DOCUMENT-ðŸª=🔵', + 'Cookie we wrote using document.cookie in observed cookie jar'); + await setCookieStringDocument('DOCUMENT-ðŸª=DELETED; path=/; max-age=0'); + assert_equals( + await getCookieString(), + undefined, + 'Empty cookie jar after document.cookie' + + ' cookie-clearing using max-age=0'); + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + undefined, + 'Empty HTTP cookie jar after document.cookie' + + ' cookie-clearing using max-age=0'); + assert_equals( + await getCookieStringDocument(), + undefined, + 'Empty document.cookie cookie jar after document.cookie' + + ' cookie-clearing using max-age=0'); + if (observer) assert_equals( + await getCookieStringObserved(), + undefined, + 'Empty observed cookie jar after document.cookie cookie-clearing' + + ' using max-age=0'); +}; + +// Verify interoperability of HTTP Set-Cookie: with other APIs. +let testHttpCookieAndSetCookieHeaders = async () => { + await setCookieStringHttp('HTTP-ðŸª=🔵; path=/'); + assert_equals( + await getCookieString(), + 'HTTP-ðŸª=🔵', + 'Cookie we wrote using HTTP in cookie jar'); + assert_equals( + await getCookieStringHttp(), + 'HTTP-ðŸª=🔵', + 'Cookie we wrote using HTTP in HTTP cookie jar'); + if (observer) assert_equals( + await getCookieStringObserved(), + 'HTTP-ðŸª=🔵', + 'Cookie we wrote using HTTP in observed cookie jar'); + await setCookieStringHttp('HTTP-ðŸª=DELETED; path=/; max-age=0'); + assert_equals( + await getCookieString(), + undefined, + 'Empty cookie jar after HTTP cookie-clearing using max-age=0'); + assert_equals( + await getCookieStringHttp(), + undefined, + 'Empty HTTP cookie jar after HTTP cookie-clearing using max-age=0'); + if (observer) assert_equals( + await getCookieStringObserved(), + undefined, + 'Empty observed cookie jar after HTTP cookie-clearing' + + ' using max-age=0'); + await setCookieStringHttp('HTTPONLY-ðŸª=🔵; path=/; httponly'); + assert_equals( + await getCookieString(), + undefined, + 'HttpOnly cookie we wrote using HTTP in cookie jar' + + ' is invisible to script'); + assert_equals( + await getCookieStringHttp(), + 'HTTPONLY-ðŸª=🔵', + 'HttpOnly cookie we wrote using HTTP in HTTP cookie jar'); + if (observer) assert_equals( + await getCookieStringObserved(), + undefined, + 'HttpOnly cookie we wrote using HTTP is invisible to observer'); + await setCookieStringHttp( + 'HTTPONLY-ðŸª=DELETED; path=/; max-age=0; httponly'); + assert_equals( + await getCookieString(), + undefined, + 'Empty cookie jar after HTTP cookie-clearing using max-age=0'); + assert_equals( + await getCookieStringHttp(), + undefined, + 'Empty HTTP cookie jar after HTTP cookie-clearing using max-age=0'); + if (observer) assert_equals( + await getCookieStringObserved(), + undefined, + 'Empty observed cookie jar after HTTP cookie-clearing' + + ' using max-age=0'); + // Non-UTF-8 byte sequences cause the Set-Cookie to be dropped. + await setCookieBinaryHttp( + unescape(encodeURIComponent('HTTP-ðŸª=🔵')) + '\xef\xbf\xbd; path=/'); + assert_equals( + await getCookieString(), + 'HTTP-ðŸª=🔵\ufffd', + 'Binary cookie we wrote using HTTP in cookie jar'); + assert_equals( + await getCookieStringHttp(), + 'HTTP-ðŸª=🔵\ufffd', + 'Binary cookie we wrote using HTTP in HTTP cookie jar'); + assert_equals( + decodeURIComponent(escape(await getCookieBinaryHttp())), + 'HTTP-ðŸª=🔵\ufffd', + 'Binary cookie we wrote in binary HTTP cookie jar'); + assert_equals( + await getCookieBinaryHttp(), + unescape(encodeURIComponent('HTTP-ðŸª=🔵')) + '\xef\xbf\xbd', + 'Binary cookie we wrote in binary HTTP cookie jar'); + if (observer) assert_equals( + await getCookieStringObserved(), + 'HTTP-ðŸª=🔵\ufffd', + 'Binary cookie we wrote using HTTP in observed cookie jar'); + await setCookieBinaryHttp( + unescape(encodeURIComponent('HTTP-ðŸª=DELETED; path=/; max-age=0'))); + assert_equals( + await getCookieString(), + undefined, + 'Empty cookie jar after binary HTTP cookie-clearing using max-age=0'); + assert_equals( + await getCookieStringHttp(), + undefined, + 'Empty HTTP cookie jar after' + + ' binary HTTP cookie-clearing using max-age=0'); + assert_equals( + await getCookieBinaryHttp(), + undefined, + 'Empty binary HTTP cookie jar after' + + ' binary HTTP cookie-clearing using max-age=0'); + if (observer) assert_equals( + await getCookieStringObserved(), + undefined, + 'Empty observed cookie jar after binary HTTP cookie-clearing' + + ' using max-age=0'); +}; + +const testGetSetGetAll = async () => { + await cookieStore.set('TEST', 'value0'); + assert_equals( + await getCookieString(), + 'TEST=value0', + 'Cookie jar contains only cookie we set'); + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + 'TEST=value0', + 'HTTP cookie jar contains only cookie we set'); + if (observer) assert_equals( + await getCookieStringObserved(), + 'TEST=value0', + 'Observed cookie jar contains only cookie we set'); + await cookieStore.set('TEST', 'value'); + assert_equals( + await getCookieString(), + 'TEST=value', + 'Cookie jar contains only cookie we overwrote'); + if (!kIsStatic) assert_equals( + await getCookieStringHttp(), + 'TEST=value', + 'HTTP cookie jar contains only cookie we overwrote'); + if (observer) assert_equals( + await getCookieStringObserved(), + 'TEST=value', + 'Observed cookie jar contains only cookie we overwrote'); + let allCookies = await cookieStore.getAll(); + assert_equals( + allCookies[0].name, + 'TEST', + 'First entry in allCookies should be named TEST'); + assert_equals( + allCookies[0].value, + 'value', + 'First entry in allCookies should have value "value"'); + assert_equals( + allCookies.length, + 1, + 'Only one cookie should exist in allCookies'); + let firstCookie = await cookieStore.get(); + assert_equals( + firstCookie.name, + 'TEST', + 'First cookie should be named TEST'); + assert_equals( + firstCookie.value, + 'value', + 'First cookie should have value "value"'); + let allCookies_TEST = await cookieStore.getAll('TEST'); + assert_equals( + allCookies_TEST[0].name, + 'TEST', + 'First entry in allCookies_TEST should be named TEST'); + assert_equals( + allCookies_TEST[0].value, + 'value', + 'First entry in allCookies_TEST should have value "value"'); + assert_equals( + allCookies_TEST.length, + 1, + 'Only one cookie should exist in allCookies_TEST'); + let firstCookie_TEST = await cookieStore.get('TEST'); + assert_equals( + firstCookie_TEST.name, + 'TEST', + 'First TEST cookie should be named TEST'); + assert_equals( + firstCookie_TEST.value, + 'value', + 'First TEST cookie should have value "value"'); +}; + +const testOneSimpleOriginCookie = async testCase => { + await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + setOneSimpleOriginSessionCookie(), + '__Host- prefix only writable from' + + ' secure contexts (setOneSimpleOriginSessionCookie)'); + if (!kIsUnsecured) { + assert_equals( + await getOneSimpleOriginCookie(), + 'cookie-value', + '__Host-COOKIENAME cookie should be found' + + ' in a secure context (getOneSimpleOriginCookie)'); + } else { + assert_equals( + await getOneSimpleOriginCookie(), + undefined, + '__Host-COOKIENAME cookie should not be found' + + ' in an unsecured context (getOneSimpleOriginCookie)'); + } + if (kIsUnsecured) { + assert_equals( + await countMatchingSimpleOriginCookies(), + 0, + 'No __Host-COOKIEN* cookies should be found' + + ' in an unsecured context (countMatchingSimpleOriginCookies)'); + } else { + assert_equals( + await countMatchingSimpleOriginCookies(), + 1, + 'One __Host-COOKIEN* cookie should be found' + + ' in a secure context (countMatchingSimpleOriginCookies)'); + } +}; + +const testExpiration = async testCase => { + await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + setOneDaySecureCookieWithDate(), + 'Secure cookies only writable' + + ' from secure contexts (setOneDaySecureCookieWithDate)'); + await setOneDayUnsecuredCookieWithMillisecondsSinceEpoch(); + assert_equals( + await getCookieString('LEGACYCOOKIENAME'), + 'LEGACYCOOKIENAME=cookie-value', + 'Ensure unsecured cookie we set is visible'); + if (observer) assert_equals( + await getCookieStringObserved('LEGACYCOOKIENAME'), + 'LEGACYCOOKIENAME=cookie-value', + 'Ensure unsecured cookie we set is visible to observer'); + await deleteUnsecuredCookieWithDomainAndPath(); + await promise_rejects_when_unsecured( + testCase, + new SyntaxError(), + setSecureCookieWithHttpLikeExpirationString(), + 'Secure cookies only writable from secure contexts' + + ' (setSecureCookieWithHttpLikeExpirationString)'); +}; + +// Rewrite domain and path in affected cases to match current test +// domain and directory. +// +// FIXME: remove these once ServiceWorker support and cross-domain +// testing are added and full domain and path coverage is possible. +setOneDaySecureCookieWithDate = + eval(String(setOneDaySecureCookieWithDate).split( + '/cgi-bin/').join(location.pathname.replace(/[^/]+$/, ''))); +setOneDaySecureCookieWithDate = + eval(String(setOneDaySecureCookieWithDate).split( + 'example.org').join(location.hostname)); +setOneDayUnsecuredCookieWithMillisecondsSinceEpoch = + eval(String(setOneDayUnsecuredCookieWithMillisecondsSinceEpoch).split( + '/cgi-bin/').join(location.pathname.replace(/[^/]+$/, ''))); +setOneDayUnsecuredCookieWithMillisecondsSinceEpoch = + eval(String(setOneDayUnsecuredCookieWithMillisecondsSinceEpoch).split( + 'example.org').join(location.hostname)); +deleteUnsecuredCookieWithDomainAndPath = + eval(String(deleteUnsecuredCookieWithDomainAndPath).split( + '/cgi-bin/').join(location.pathname.replace(/[^/]+$/, ''))); +deleteUnsecuredCookieWithDomainAndPath = + eval(String(deleteUnsecuredCookieWithDomainAndPath).split( + 'example.org').join(location.hostname)); +setSecureCookieWithHttpLikeExpirationString = + eval(String(setSecureCookieWithHttpLikeExpirationString).split( + '/cgi-bin/').join(location.pathname.replace(/[^/]+$/, ''))); +setSecureCookieWithHttpLikeExpirationString = + eval(String(setSecureCookieWithHttpLikeExpirationString).split( + 'example.org').join(location.hostname)); +setExpiredSecureCookieWithDomainPathAndFallbackValue = + eval(String(setExpiredSecureCookieWithDomainPathAndFallbackValue).split( + '/cgi-bin/').join(location.pathname.replace(/[^/]+$/, ''))); +setExpiredSecureCookieWithDomainPathAndFallbackValue = + eval(String(setExpiredSecureCookieWithDomainPathAndFallbackValue).split( + 'example.org').join(location.hostname)); +deleteSecureCookieWithDomainAndPath = + eval(String(deleteSecureCookieWithDomainAndPath).split( + '/cgi-bin/').join(location.pathname.replace(/[^/]+$/, ''))); +deleteSecureCookieWithDomainAndPath = + eval(String(deleteSecureCookieWithDomainAndPath).split( + 'example.org').join(location.hostname)); diff --git a/tests/wpt/web-platform-tests/cookie-store/resources/cookie_helper.py b/tests/wpt/web-platform-tests/cookie-store/resources/cookie_helper.py new file mode 100755 index 00000000000..cf48f26eed1 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/resources/cookie_helper.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Active wptserve handler for cookie operations. +# +# This must support the following requests: +# +# - GET with the following query parameters: +# - charset: (optional) character set for response (default: utf-8) +# A cookie: request header (if present) is echoed in the body with a +# cookie= prefix followed by the urlencoded bytes from the header. +# Used to inspect the cookie jar from an HTTP request header context. +# - POST with form-data in the body and the following query-or-form parameters: +# - set-cookie: (optional; repeated) echoed in the set-cookie: response +# header and also echoed in the body with a set-cookie= prefix +# followed by the urlencoded bytes from the parameter; multiple occurrences +# are CRLF-delimited. +# Used to set cookies from an HTTP response header context. +# +# The response has 200 status and content-type: text/plain; charset= +import cgi, encodings, os, re, sys, urllib + +# NOTE: These are intentionally very lax to permit testing +DISALLOWED_IN_COOKIE_NAME_RE = re.compile(r'[;\0-\x1f\x7f]'); +DISALLOWED_IN_HEADER_RE = re.compile(r'[\0-\x1f\x7f]'); + +# Ensure common charset names do not end up with different +# capitalization or punctuation +CHARSET_OVERRIDES = { + encodings.codecs.lookup(charset).name: charset + for charset in ('utf-8', 'iso-8859-1',) +} + +def main(request, response): + assert request.method in ( + 'GET', + 'POST', + ), 'request method was neither GET nor POST: %r' % request.method + qd = (request.url.split('#')[0].split('?', 1) + [''])[1] + if request.method == 'POST': + qd += '&' + request.body + args = cgi.parse_qs(qd, keep_blank_values = True) + charset = encodings.codecs.lookup(args.get('charset', ['utf-8'])[-1]).name + charset = CHARSET_OVERRIDES.get(charset, charset) + headers = [('content-type', 'text/plain; charset=' + charset)] + body = [] + if request.method == 'POST': + for set_cookie in args.get('set-cookie', []): + if '=' in set_cookie.split(';', 1)[0]: + name, rest = set_cookie.split('=', 1) + assert re.search( + DISALLOWED_IN_COOKIE_NAME_RE, + name + ) is None, 'name had disallowed characters: %r' % name + else: + rest = set_cookie + assert re.search( + DISALLOWED_IN_HEADER_RE, + rest + ) is None, 'rest had disallowed characters: %r' % rest + headers.append(('set-cookie', set_cookie)) + body.append('set-cookie=' + urllib.quote(set_cookie, '')) + else: + cookie = request.headers.get('cookie') + if cookie is not None: + body.append('cookie=' + urllib.quote(cookie, '')) + body = '\r\n'.join(body) + headers.append(('content-length', str(len(body)))) + return 200, headers, body diff --git a/tests/wpt/web-platform-tests/cookie-store/resources/testharness-helpers.js b/tests/wpt/web-platform-tests/cookie-store/resources/testharness-helpers.js new file mode 100644 index 00000000000..a9c2374f95a --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/resources/testharness-helpers.js @@ -0,0 +1,286 @@ +'use strict'; + +// Length of final setTimeout when observer callback has not fired. +// +const kExtraObserverDelay = 0; // For builtin implementation + +// NOTE: A polyfill was used for pre-implementation testing. To revive +// it uncomment these and comment out the preceding line: +// +// const kExtraObserverDelay = 200; // Polyfill when not running on battery +// // const kExtraObserverDelay = 5000; // ... when running on battery +// document.open(); +// document.write(` +// +// +// `); +// document.close() + +// See https://github.com/whatwg/html/pull/3011#issuecomment-331187136 +// and https://www.chromestatus.com/feature/6170540112871424 +const kMetaHttpEquivSetCookieIsGone = true; + +// True when running in a document context as opposed to a worker context +const kHasDocument = typeof document !== 'undefined'; + +// Override for named test inclusion. Set by suite(). +let testOverride = undefined; + +// Determines whether the named test should be included in this run of the +// suite. Only usable in a test runner context as this uses assert_equals. +// +// Parameters: +// +// - testName: (string) test name; must be an identifier starting with 'test' +// - opt_excludeFromAll: (optional; boolean) if true, explicit or implicit +// #...&test=all (which is the default) will not activate this test. +const includeTest = (testName, opt_excludeFromAll) => { + assert_equals(!!testName.match(/^test\w+/), true, 'includeTest: ' + testName); + assert_equals(typeof eval(testName), 'function', 'includeTest: ' + testName); + let testParams = + (location.hash || '#').substr(1).split('&').filter( + x => x.match(/^test=/)).map(x => decodeURIComponent(x)); + if (!testParams.length) { + testParams = ['test=all']; + if (testOverride !== undefined) { + testParams = ['test=' + testOverride]; + } + } + const filterSet = + testParams.map(x => x.split('=', 2)[1]).join(',').split(',').reduce( + (set, name) => Object.assign(set, {[name]: true}), {}); + for (let name in filterSet) { + if (name === 'all' || !filterSet.hasOwnProperty(name)) continue; + assert_equals(!!name.match(/^test\w+/), true, '#test=' + testName); + assert_equals(typeof eval(name), 'function', '#test=' + testName); + } + return (filterSet.all && !opt_excludeFromAll) || + filterSet.hasOwnProperty(testName) && filterSet[testName]; +} + +// True when running on unsecured 'http:' rather than secured 'https:'. +const kIsUnsecured = location.protocol !== 'https:'; + +// True when no CGI/no active wptserve handlers should be used. +const kIsStatic = !!((location.hash || '#').match(/(^#|&)static=true(&|$)/) || + location.pathname.match(/_static\./)); + +const kCookieHelperCgi = 'resources/cookie_helper.py'; + +// Async wrapper for an async function or promise that is expected +// reject in an unsecured (non-https:) context and work in a secured +// (https:) context. +// +// Parameters: +// +// - testCase: (TestCase) test case context +// - code: (Error class or number) expected rejection type in unsecured context +// - promise: (thenable) test code +// - message: (optional; string) message to forward to promise_rejects in +// unsecured context +const promise_rejects_when_unsecured = async ( + testCase, + code, + promise, + message = 'Feature unavailable from unsecured contexts' +) => { + if (kIsUnsecured) await promise_rejects(testCase, code, promise, message); + else await promise; +}; + +// Converts a list of cookie records {name, value} to [name=]value; ... as +// seen in Cookie: and document.cookie. +// +// Parameters: +// - cookies: (array of {name, value}) records to convert +// +// Returns a string serializing the records, or undefined if no records were +// given. +const cookieString = cookies => cookies.length ? cookies.map(( + {name, value}) => (name ? (name + '=') : '') + value).join('; ') : + undefined; + +// Approximate async equivalent to the document.cookie getter but with +// important differences: optional additional getAll arguments are +// forwarded, and an empty cookie jar returns undefined. +// +// This is intended primarily for verification against expected cookie +// jar contents. It should produce more readable messages using +// assert_equals in failing cases than assert_object_equals would +// using parsed cookie jar contents and also allows expectations to be +// written more compactly. +const getCookieString = async (...args) => { + return cookieString(await cookieStore.getAll(...args)); +} + +// Approximate async equivalent to the document.cookie getter but from +// the server's point of view. Returns UTF-8 interpretation. Allows +// sub-path to be specified. +// +// Unlike document.cookie, this returns undefined when no cookies are +// present. +const getCookieStringHttp = async (extraPath = null) => { + if (kIsStatic) throw 'CGI not available in static HTML test'; + const url = + kCookieHelperCgi + ((extraPath == null) ? '' : ('/' + extraPath)); + const response = await fetch(url, { credentials: 'include' }); + const text = await response.text(); + assert_equals( + response.ok, + true, + 'CGI should have succeeded in getCookieStringHttp\n' + text); + assert_equals( + response.headers.get('content-type'), + 'text/plain; charset=utf-8', + 'CGI did not return UTF-8 text in getCookieStringHttp'); + if (text === '') return undefined; + assert_equals( + text.indexOf('cookie='), + 0, + 'CGI response did not begin with "cookie=" and was not empty: ' + text); + return decodeURIComponent(text.replace(/^cookie=/, '')); +} + +// Approximate async equivalent to the document.cookie getter but from +// the server's point of view. Returns binary string +// interpretation. Allows sub-path to be specified. +// +// Unlike document.cookie, this returns undefined when no cookies are +// present. +const getCookieBinaryHttp = async (extraPath = null) => { + if (kIsStatic) throw 'CGI not available in static HTML test'; + const url = + kCookieHelperCgi + + ((extraPath == null) ? + '' : + ('/' + extraPath)) + '?charset=iso-8859-1'; + const response = await fetch(url, { credentials: 'include' }); + const text = await response.text(); + assert_equals( + response.ok, + true, + 'CGI should have succeeded in getCookieBinaryHttp\n' + text); + assert_equals( + response.headers.get('content-type'), + 'text/plain; charset=iso-8859-1', + 'CGI did not return ISO 8859-1 text in getCookieBinaryHttp'); + if (text === '') return undefined; + assert_equals( + text.indexOf('cookie='), + 0, + 'CGI response did not begin with "cookie=" and was not empty: ' + text); + return unescape(text.replace(/^cookie=/, '')); +} + +// Approximate async equivalent to the document.cookie setter but from +// the server's point of view. +const setCookieStringHttp = async setCookie => { + if (kIsStatic) throw 'CGI not available in static HTML test'; + const encodedSetCookie = encodeURIComponent(setCookie); + const url = kCookieHelperCgi; + const headers = new Headers(); + headers.set( + 'content-type', + 'application/x-www-form-urlencoded; charset=utf-8'); + const response = await fetch( + url, + { + credentials: 'include', + method: 'POST', + headers: headers, + body: 'set-cookie=' + encodedSetCookie, + }); + const text = await response.text(); + assert_equals( + response.ok, + true, + 'CGI should have succeeded in setCookieStringHttp set-cookie: ' + + setCookie + '\n' + text); + assert_equals( + response.headers.get('content-type'), + 'text/plain; charset=utf-8', + 'CGI did not return UTF-8 text in setCookieStringHttp'); + assert_equals( + text, + 'set-cookie=' + encodedSetCookie, + 'CGI did not faithfully echo the set-cookie value'); +}; + +// Approximate async equivalent to the document.cookie setter but from +// the server's point of view. This version sets a binary cookie rather +// than a UTF-8 one. +const setCookieBinaryHttp = async setCookie => { + if (kIsStatic) throw 'CGI not available in static HTML test'; + const encodedSetCookie = escape(setCookie).split('/').join('%2F'); + const url = kCookieHelperCgi + '?charset=iso-8859-1'; + const headers = new Headers(); + headers.set( + 'content-type', + 'application/x-www-form-urlencoded; charset=iso-8859-1'); + const response = await fetch(url, { + credentials: 'include', + method: 'POST', + headers: headers, + body: 'set-cookie=' + encodedSetCookie + }); + const text = await response.text(); + assert_equals( + response.ok, + true, + 'CGI should have succeeded in setCookieBinaryHttp set-cookie: ' + + setCookie + '\n' + text); + assert_equals( + response.headers.get('content-type'), + 'text/plain; charset=iso-8859-1', + 'CGI did not return Latin-1 text in setCookieBinaryHttp'); + assert_equals( + text, + 'set-cookie=' + encodedSetCookie, + 'CGI did not faithfully echo the set-cookie value'); +}; + +// Approximate async equivalent to the document.cookie setter but using +// written into a temporary +// IFRAME. Merely appending the node to HEAD works in some browsers (e.g. +// Chromium) but not others (e.g. Firefox.) +const setCookieStringMeta = async setCookie => { + if (document.readyState !== 'complete') { + await new Promise(resolve => addEventListener('load', resolve, true)); + } + const meta = Object.assign(document.createElement('meta'), { + httpEquiv: 'set-cookie', + content: setCookie + }); + const ifr = document.createElement('iframe'); + await new Promise(resolve => document.body.appendChild(Object.assign( + ifr, + { + onload: resolve + }))); + try { + ifr.contentWindow.document.open('text/html; charset=utf-8'); + ifr.contentWindow.document.write([ + '', + '', + meta.outerHTML + ].join('\r\n')); + ifr.contentWindow.document.close(); + } finally { + if (ifr.parentNode) ifr.parentNode.removeChild(ifr); + } +}; + +// Async document.cookie getter; converts '' to undefined which loses +// information in the edge case where a single ''-valued anonymous +// cookie is visible. +const getCookieStringDocument = async () => { + if (!kHasDocument) throw 'document.cookie not available in this context'; + return String(document.cookie || '') || undefined; +}; + +// Async document.cookie setter +const setCookieStringDocument = async setCookie => { + if (!kHasDocument) throw 'document.cookie not available in this context'; + document.cookie = setCookie; +}; diff --git a/tests/wpt/web-platform-tests/css/CSS2/visufx/overflow-applies-to-001-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/visufx/overflow-applies-to-001-ref.xht index 02d96557313..2a89acf56fb 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/visufx/overflow-applies-to-001-ref.xht +++ b/tests/wpt/web-platform-tests/css/CSS2/visufx/overflow-applies-to-001-ref.xht @@ -6,7 +6,8 @@ - +
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-001.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-001.html index 6550206b7e8..8a9c0c5e7c6 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-001.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-001.html @@ -9,7 +9,7 @@ - + + + + + +
+ +

You should see no red

+ + +
+ +
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+ + + diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/position-absolute-001.html b/tests/wpt/web-platform-tests/css/css-flexbox/position-absolute-001.html index 2e65533aeb3..3c3d5934545 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox/position-absolute-001.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox/position-absolute-001.html @@ -80,7 +80,7 @@ body { - +
- +
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/position-absolute-003.html b/tests/wpt/web-platform-tests/css/css-flexbox/position-absolute-003.html index 94763c8ebf1..1944c93652a 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox/position-absolute-003.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox/position-absolute-003.html @@ -25,7 +25,7 @@ padding in combination with abspos items"> - +
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/position-absolute-004.html b/tests/wpt/web-platform-tests/css/css-flexbox/position-absolute-004.html index aa8ee516d40..af8bc6284c0 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox/position-absolute-004.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox/position-absolute-004.html @@ -25,7 +25,7 @@ becomes absolutely positioned"> - + + + +
hello
+ diff --git a/tests/wpt/web-platform-tests/css/css-fonts/matching/OWNERS b/tests/wpt/web-platform-tests/css/css-fonts/matching/OWNERS index c61158582e4..e6a287e79bd 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/matching/OWNERS +++ b/tests/wpt/web-platform-tests/css/css-fonts/matching/OWNERS @@ -2,3 +2,4 @@ @fantasai @litherum @nattokirai +@svgeesus diff --git a/tests/wpt/web-platform-tests/css/css-fonts/variations/OWNERS b/tests/wpt/web-platform-tests/css/css-fonts/variations/OWNERS index c61158582e4..e6a287e79bd 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/variations/OWNERS +++ b/tests/wpt/web-platform-tests/css/css-fonts/variations/OWNERS @@ -2,3 +2,4 @@ @fantasai @litherum @nattokirai +@svgeesus diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/absolute-positioning-definite-sizes-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/absolute-positioning-definite-sizes-001.html index e522fc48802..6c29302f7f3 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/absolute-positioning-definite-sizes-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/absolute-positioning-definite-sizes-001.html @@ -33,7 +33,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html index cf9407e6392..a447ead37f5 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html @@ -112,7 +112,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html index 15ed632860a..82e60635499 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html @@ -34,7 +34,7 @@ - +
diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-001.html index 737efcb6497..d99dc537572 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-001.html @@ -34,7 +34,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html index e0aa177e0d8..40580eda72c 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html @@ -34,7 +34,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-gaps-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-gaps-001.html index 41d3ffba27a..e1adc6b713b 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-gaps-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-gaps-001.html @@ -36,7 +36,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-gaps-rtl-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-gaps-rtl-001.html index 17a2b3df970..4a6cd881b19 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-gaps-rtl-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-gaps-rtl-001.html @@ -36,7 +36,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html index 882ebdca307..6d62088435e 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html @@ -30,7 +30,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-implicit-grid-line-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-implicit-grid-line-001.html index 35199838744..f0f98d2d682 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-implicit-grid-line-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-implicit-grid-line-001.html @@ -51,7 +51,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-padding-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-padding-001.html index 2ba5cd23e04..a0ccd1ef78c 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-padding-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-padding-001.html @@ -38,7 +38,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html index 5cde2ec862a..a50e12abdf5 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html @@ -44,7 +44,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-within-grid-implicit-track-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-within-grid-implicit-track-001.html index 078d51b29c5..fb9cad16847 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-within-grid-implicit-track-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-positioned-items-within-grid-implicit-track-001.html @@ -40,7 +40,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-sizing-positioned-items-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-sizing-positioned-items-001.html index 390630c1945..2acae44e768 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-sizing-positioned-items-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/grid-sizing-positioned-items-001.html @@ -55,7 +55,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/positioned-grid-items-should-not-create-implicit-tracks-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/positioned-grid-items-should-not-create-implicit-tracks-001.html index f9935831b65..56aa0e15e5c 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/positioned-grid-items-should-not-create-implicit-tracks-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/positioned-grid-items-should-not-create-implicit-tracks-001.html @@ -29,7 +29,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/positioned-grid-items-should-not-take-up-space-001.html b/tests/wpt/web-platform-tests/css/css-grid/abspos/positioned-grid-items-should-not-take-up-space-001.html index 75ef482fcfb..a6834cb0d59 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/positioned-grid-items-should-not-take-up-space-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/positioned-grid-items-should-not-take-up-space-001.html @@ -33,7 +33,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-001.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-001.html index f8da0b8c528..c5c2cf50cec 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-implies-size-change-001.html @@ -25,7 +25,7 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html new file mode 100644 index 00000000000..398d414ec3b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html new file mode 100644 index 00000000000..6ec6c8a6a42 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html new file mode 100644 index 00000000000..1ba215a7b3e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html new file mode 100644 index 00000000000..774b4ff603a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html new file mode 100644 index 00000000000..18e65dabc0b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html new file mode 100644 index 00000000000..a03f781af51 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html new file mode 100644 index 00000000000..11912f3773f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html new file mode 100644 index 00000000000..dbf9b39411a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html new file mode 100644 index 00000000000..1b3c94c9e99 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html @@ -0,0 +1,86 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html new file mode 100644 index 00000000000..49ec89c4169 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html @@ -0,0 +1,86 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html new file mode 100644 index 00000000000..f67ec4346f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html @@ -0,0 +1,89 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'auto' grid positions + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html new file mode 100644 index 00000000000..7652e3a819d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html @@ -0,0 +1,89 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'auto' grid positions + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html new file mode 100644 index 00000000000..231526433a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html @@ -0,0 +1,89 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'auto' grid positions + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html new file mode 100644 index 00000000000..5397f9629eb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html @@ -0,0 +1,89 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'auto' grid positions + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html new file mode 100644 index 00000000000..64a7957932e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html @@ -0,0 +1,89 @@ + + +CSS Grid Layout Test: Self-Alignment along column axis of absolute positioned items with 'auto' grid positions + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html index 8aafe35e4a0..721c829aa83 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html @@ -37,7 +37,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-001.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-001.html new file mode 100644 index 00000000000..310aa4322ac --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-001.html @@ -0,0 +1,29 @@ + + +CSS Grid Layout Test: Support for gap shorthand property of row-gap and column-gap + + + + + + +

The test passes if it has the same visual effect as reference.

+
+
+
+
+
+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-002.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-002.html new file mode 100644 index 00000000000..dbe9d145332 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-002.html @@ -0,0 +1,30 @@ + + +CSS Grid Layout Test: Support for grid-gap shorthand property as an alias for gap + + + + + + + +

The test passes if it has the same visual effect as reference.

+
+
+
+
+
+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-003.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-003.html new file mode 100644 index 00000000000..51bc25b3f60 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-003.html @@ -0,0 +1,29 @@ + + +CSS Grid Layout Test: Support for gap shorthand property of row-gap and column-gap setting both to different values + + + + + + +

The test passes if it has the same visual effect as reference.

+
+
+
+
+
+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-004.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-004.html new file mode 100644 index 00000000000..c7d549a1b6e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-004.html @@ -0,0 +1,30 @@ + + +CSS Grid Layout Test: Support for grid-gap shorthand property as an alias for gap setting both to different values + + + + + + + +

The test passes if it has the same visual effect as reference.

+
+
+
+
+
+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-005.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-005.html new file mode 100644 index 00000000000..cc67190affb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-005.html @@ -0,0 +1,30 @@ + + +CSS Grid Layout Test: Support for row-gap and column-gap properties + + + + + + +

The test passes if it has the same visual effect as reference.

+
+
+
+
+
+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-006.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-006.html new file mode 100644 index 00000000000..87fb7ec49dc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-006.html @@ -0,0 +1,31 @@ + + +CSS Grid Layout Test: Support for grid-row-gap alias for row-gap and grid-column-gap for column-gap + + + + + + + +

The test passes if it has the same visual effect as reference.

+
+
+
+
+
+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-007.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-007.html new file mode 100644 index 00000000000..4d66cf6750d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-007.html @@ -0,0 +1,30 @@ + + +CSS Grid Layout Test: Support for percentage values for gap with definite height and width for grid + + + + + + +

The test passes if it has the same visual effect as reference.

+
+
+
+
+
+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-008.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-008.html new file mode 100644 index 00000000000..a96eba38283 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-008.html @@ -0,0 +1,31 @@ + + +CSS Grid Layout Test: Support for aliased support to gap of percentage values for grid-gap + + + + + + + +

The test passes if it has the same visual effect as reference.

+
+
+
+
+
+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-009.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-009.html new file mode 100644 index 00000000000..98c230fb5bf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-009.html @@ -0,0 +1,29 @@ + + +CSS Grid Layout Test: Support for percentage values for gap with no defined height for the grid + + + + + + +

The test passes if it has the same visual effect as reference. Column gap should be percentage of width. Row gap should resolve to auto, and therefore collapse to 0 height.

+
+
+
+
+
+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-010.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-010.html new file mode 100644 index 00000000000..6b96fc25a9e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-gutters-010.html @@ -0,0 +1,29 @@ + + +CSS Grid Layout Test: Support for percentage values for grid-gap with no defined height for the grid as alias for gap + + + + + + +

The test passes if it has the same visual effect as reference. Column gap should be percentage of width. Row gap should resolve to auto, and therefore collapse to 0 height.

+
+
+
+
+
+
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html new file mode 100644 index 00000000000..e350f972357 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html new file mode 100644 index 00000000000..22b1e1ab77e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html new file mode 100644 index 00000000000..5c734b22c0d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html new file mode 100644 index 00000000000..500115544b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html new file mode 100644 index 00000000000..5cbd36bd22d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html new file mode 100644 index 00000000000..f5b0cd24dbb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html new file mode 100644 index 00000000000..d185781cc83 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html new file mode 100644 index 00000000000..34c12ceac9c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html new file mode 100644 index 00000000000..3932ef5ffb1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html @@ -0,0 +1,85 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html new file mode 100644 index 00000000000..7acccdad6f2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html @@ -0,0 +1,86 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html new file mode 100644 index 00000000000..d5088c9534e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html @@ -0,0 +1,86 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'definite' grid positions + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html new file mode 100644 index 00000000000..8aeabed9a74 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html @@ -0,0 +1,89 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'auto' grid positions + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html new file mode 100644 index 00000000000..ee953bf240e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html @@ -0,0 +1,89 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'auto' grid positions + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html new file mode 100644 index 00000000000..a4e838551f3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html @@ -0,0 +1,89 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'auto' grid positions + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+o +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html new file mode 100644 index 00000000000..610dc2fa99b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html @@ -0,0 +1,89 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'auto' grid positions + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html new file mode 100644 index 00000000000..7ad87bdbd5c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html @@ -0,0 +1,89 @@ + + +CSS Grid Layout Test: Self-Alignment along row axis of absolute positioned items with 'auto' grid positions + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html new file mode 100644 index 00000000000..192098b91cd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html @@ -0,0 +1,92 @@ + + +CSS Grid Layout Test: Self-Alignment of non-static absolute positioned items + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html new file mode 100644 index 00000000000..1eb901f2daa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html @@ -0,0 +1,94 @@ + + +CSS Grid Layout Test: Self-Alignment of non-static absolute positioned items + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html new file mode 100644 index 00000000000..817ac8ea3e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html @@ -0,0 +1,98 @@ + + +CSS Grid Layout Test: Self-Alignment of non-static absolute positioned items + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html new file mode 100644 index 00000000000..7ac046c6e2c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html @@ -0,0 +1,94 @@ + + +CSS Grid Layout Test: Self-Alignment of non-static absolute positioned items + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html new file mode 100644 index 00000000000..69fce546c3c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html @@ -0,0 +1,100 @@ + + +CSS Grid Layout Test: Self-Alignment of non-static absolute positioned items + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html new file mode 100644 index 00000000000..8d8a456d3cf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html @@ -0,0 +1,108 @@ + + +CSS Grid Layout Test: Self-Alignment of non-static absolute positioned items + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html new file mode 100644 index 00000000000..fa19cc9e536 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html @@ -0,0 +1,93 @@ + + +CSS Grid Layout Test: Self-Alignment of non-static absolute positioned items + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html new file mode 100644 index 00000000000..a3a8ded6652 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html @@ -0,0 +1,95 @@ + + +CSS Grid Layout Test: Self-Alignment of non-static absolute positioned items + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html new file mode 100644 index 00000000000..fef0126f011 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html @@ -0,0 +1,100 @@ + + +CSS Grid Layout Test: Self-Alignment of non-static absolute positioned items + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html new file mode 100644 index 00000000000..48216ea1155 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html @@ -0,0 +1,96 @@ + + +CSS Grid Layout Test: Self-Alignment of non-static absolute positioned items + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html new file mode 100644 index 00000000000..9cf3f5ec05c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html @@ -0,0 +1,102 @@ + + +CSS Grid Layout Test: Self-Alignment of non-static absolute positioned items + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html new file mode 100644 index 00000000000..7af6cd1ebcb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html @@ -0,0 +1,107 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'definite' grid positions and margin, border and padding + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html new file mode 100644 index 00000000000..d6c22f0dc2c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html @@ -0,0 +1,90 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'definite' grid positions and margin, border and padding + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html new file mode 100644 index 00000000000..b8072fb5562 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html @@ -0,0 +1,94 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'definite' grid positions and margin, border and padding + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html new file mode 100644 index 00000000000..e31d32ea6b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html @@ -0,0 +1,90 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'definite' grid positions and margin, border and padding + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html new file mode 100644 index 00000000000..5c86913d4a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html @@ -0,0 +1,96 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'definite' grid positions and margin, border and padding + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html new file mode 100644 index 00000000000..fcd5d89c4de --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html @@ -0,0 +1,104 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'definite' grid positions and margin, border and padding + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html new file mode 100644 index 00000000000..0a1f7b7044d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html @@ -0,0 +1,92 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'definite' grid positions and margin, border and padding + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html new file mode 100644 index 00000000000..c089b3654d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html @@ -0,0 +1,96 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'definite' grid positions and margin, border and padding + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html new file mode 100644 index 00000000000..9ada00f2679 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html @@ -0,0 +1,92 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'definite' grid positions and margin, border and padding + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html new file mode 100644 index 00000000000..4cf6ff0baf0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html @@ -0,0 +1,98 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'definite' grid positions and margin, border and padding + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html new file mode 100644 index 00000000000..212369d7cf3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html @@ -0,0 +1,106 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'definite' grid positions and margin, border and padding + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html new file mode 100644 index 00000000000..e65fa64850c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html @@ -0,0 +1,92 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'auto' grid positions and margin, border and padding + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html new file mode 100644 index 00000000000..a75a0cd0121 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html @@ -0,0 +1,94 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'auto' grid positions and margin, border and padding + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html new file mode 100644 index 00000000000..ffc0674c406 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html @@ -0,0 +1,98 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'auto' grid positions and margin, border and padding + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html new file mode 100644 index 00000000000..71b57c5061f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html @@ -0,0 +1,94 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'auto' grid positions and margin, border and padding + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html new file mode 100644 index 00000000000..02bc0aca474 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html @@ -0,0 +1,100 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'auto' grid positions and margin, border and padding + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html new file mode 100644 index 00000000000..0b1ae3adcc7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html @@ -0,0 +1,108 @@ + + +CSS Grid Layout Test: Self-Alignment of absolute positioned items with 'auto' grid positions and margin, border and padding + + + + + + + + + + + + +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +

+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ +
+
X XX X
+
XX X
X XXX X
XX XXX
+
X XX X
+
XX X
X XXX
X
XX XXX
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-001.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-001.html index 9a2cea509c6..2b36b974a9a 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-001.html @@ -48,7 +48,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-002.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-002.html index 6c7b2dc84c2..639a675954a 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-002.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-002.html @@ -52,7 +52,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-003.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-003.html index a39203715a4..878a945d0d7 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-003.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-003.html @@ -53,7 +53,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-004.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-004.html index 1661d07c182..39343fd4ecc 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-004.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-004.html @@ -52,7 +52,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-005.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-005.html index 93b217f3c2d..a0a5fe81b7f 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-005.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-005.html @@ -49,7 +49,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-006.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-006.html index 683ab1be321..6328e7c42fb 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-006.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-006.html @@ -53,7 +53,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-007.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-007.html index 33dd6aacf5e..131a511723a 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-007.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-007.html @@ -54,7 +54,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-008.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-008.html index 7f47b385f3e..c56b2923b9d 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-008.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-008.html @@ -53,7 +53,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-009.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-009.html index 2f8448e5b67..a60d93c7ab5 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-009.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-009.html @@ -48,7 +48,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-010.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-010.html index 5c4adf36371..dfbd4332e55 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-010.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-010.html @@ -52,7 +52,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-011.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-011.html index 4ac84493c9f..99cf6871349 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-011.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-011.html @@ -53,7 +53,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-012.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-012.html index 91a13a04dc1..f70541e2263 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-012.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-012.html @@ -52,7 +52,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-013.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-013.html index cdfdd270c00..31d50bc5649 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-013.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-013.html @@ -49,7 +49,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-014.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-014.html index 694aaaf16d7..1059e0f22ca 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-014.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-014.html @@ -53,7 +53,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-015.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-015.html index 64f6decdda4..9f941c1c111 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-015.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-015.html @@ -54,7 +54,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-016.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-016.html index 6f92db1dfa3..723b348d010 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-016.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-016.html @@ -52,7 +52,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-001.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-001.html index 69c17e67752..66686fd6589 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-001.html @@ -49,7 +49,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-002.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-002.html index e4a109c1a45..ff5cc909588 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-002.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-002.html @@ -53,7 +53,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-003.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-003.html index 54a68983373..20753f5925c 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-003.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-003.html @@ -54,7 +54,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-004.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-004.html index 14121afaf93..871afad2279 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-004.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-004.html @@ -53,7 +53,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-005.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-005.html index a274f5143d4..fd9446e9091 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-005.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-005.html @@ -50,7 +50,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-006.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-006.html index d44d724c31e..60c451984b6 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-006.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-006.html @@ -54,7 +54,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-007.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-007.html index 03b93b6bf21..b953bbf8bf9 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-007.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-007.html @@ -55,7 +55,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-008.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-008.html index 04ce3e739cc..b0f674ec899 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-008.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-008.html @@ -54,7 +54,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-009.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-009.html index c25eb368eca..1590d688e51 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-009.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-009.html @@ -49,7 +49,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-010.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-010.html index b7ad29fc409..c0574aa50c0 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-010.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-010.html @@ -53,7 +53,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-011.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-011.html index ef6a9dc0dbc..702e40f3d06 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-011.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-011.html @@ -54,7 +54,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-012.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-012.html index 06575bdef95..cb5879d588a 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-012.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-012.html @@ -53,7 +53,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-013.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-013.html index 64c6c533d2f..e9c4d4449d5 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-013.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-013.html @@ -50,7 +50,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-014.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-014.html index cc2520da92c..18751e5a260 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-014.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-014.html @@ -54,7 +54,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-015.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-015.html index 1382c630c84..8a86726a2bd 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-015.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-015.html @@ -55,7 +55,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-016.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-016.html index 3a82292586d..bcfaca7c87d 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-016.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-016.html @@ -53,7 +53,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-001.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-001.html index 269d48a1ae4..54b232074a6 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-001.html @@ -49,7 +49,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-002.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-002.html index af1a8539189..f889b2ca828 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-002.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-002.html @@ -53,7 +53,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-003.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-003.html index 9707eeff96f..853c3444ee0 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-003.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-003.html @@ -54,7 +54,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-004.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-004.html index 906641a1eaa..ce54c52769a 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-004.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-004.html @@ -53,7 +53,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-005.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-005.html index 248c5215856..4d39f5fad44 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-005.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-005.html @@ -50,7 +50,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-006.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-006.html index 45b20c825d5..e4cfbe4d2a8 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-006.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-006.html @@ -54,7 +54,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-007.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-007.html index 6d0dd07c25b..ece3828d2b6 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-007.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-007.html @@ -55,7 +55,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-008.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-008.html index 043f83f61aa..90952f21575 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-008.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-008.html @@ -54,7 +54,7 @@ - +
X XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-009.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-009.html index 96bebc75f1e..d6029e9f08f 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-009.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-009.html @@ -49,7 +49,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-010.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-010.html index 1afcfc41132..f988c6b8fa1 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-010.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-010.html @@ -53,7 +53,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-011.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-011.html index 736ff947f4f..5e42331a36e 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-011.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-011.html @@ -54,7 +54,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-012.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-012.html index c34b435b62a..382355e53e7 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-012.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-012.html @@ -53,7 +53,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-013.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-013.html index 6e8d3243217..2a9150ed5a4 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-013.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-013.html @@ -50,7 +50,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-014.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-014.html index 4a72112655c..464951f5c31 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-014.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-014.html @@ -54,7 +54,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-015.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-015.html index d061174ea83..9099e98a87e 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-015.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-015.html @@ -55,7 +55,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-016.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-016.html index 623c026539a..7e9260f65b4 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-016.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-016.html @@ -54,7 +54,7 @@ - +
XX X
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-definition/fr-unit-with-percentage.html b/tests/wpt/web-platform-tests/css/css-grid/grid-definition/fr-unit-with-percentage.html index 9e6ec9f1fa2..82c97abdd57 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/grid-definition/fr-unit-with-percentage.html +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-definition/fr-unit-with-percentage.html @@ -1,7 +1,7 @@ - CSS3 Grid Layout: Flexible Lenght + CSS3 Grid Layout: Flexible Length diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-definition/grid-change-fit-content-argument-001.html b/tests/wpt/web-platform-tests/css/css-grid/grid-definition/grid-change-fit-content-argument-001.html index 9dfb5559651..d08712d30d2 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/grid-definition/grid-change-fit-content-argument-001.html +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-definition/grid-change-fit-content-argument-001.html @@ -22,7 +22,7 @@ - + - + diff --git a/tests/wpt/web-platform-tests/css/css-grid/reference/grid-collapsed-row-gutters-ref.html b/tests/wpt/web-platform-tests/css/css-grid/reference/grid-collapsed-row-gutters-ref.html new file mode 100644 index 00000000000..7d33e57eaff --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/reference/grid-collapsed-row-gutters-ref.html @@ -0,0 +1,46 @@ + + +CSS Grid Layout Reference: a square with a green bar + + + +
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-grid/reference/grid-different-gutters-ref.html b/tests/wpt/web-platform-tests/css/css-grid/reference/grid-different-gutters-ref.html new file mode 100644 index 00000000000..52ee9e0676e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/reference/grid-different-gutters-ref.html @@ -0,0 +1,46 @@ + + +CSS Grid Layout Reference: a square with a green cross + + + +
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-grid/reference/grid-equal-gutters-ref.html b/tests/wpt/web-platform-tests/css/css-grid/reference/grid-equal-gutters-ref.html new file mode 100644 index 00000000000..3d9952679b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/reference/grid-equal-gutters-ref.html @@ -0,0 +1,46 @@ + + +CSS Grid Layout Reference: a square with a green cross + + + +
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/background-image-alpha.html b/tests/wpt/web-platform-tests/css/css-paint-api/background-image-alpha.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/background-image-alpha.html rename to tests/wpt/web-platform-tests/css/css-paint-api/background-image-alpha.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/background-image-multiple.html b/tests/wpt/web-platform-tests/css/css-paint-api/background-image-multiple.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/background-image-multiple.html rename to tests/wpt/web-platform-tests/css/css-paint-api/background-image-multiple.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/background-image-tiled.html b/tests/wpt/web-platform-tests/css/css-paint-api/background-image-tiled.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/background-image-tiled.html rename to tests/wpt/web-platform-tests/css/css-paint-api/background-image-tiled.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-001.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-001.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-001.html rename to tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-001.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-002.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-002.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-002.html rename to tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-002.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-001.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-001.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-001.html rename to tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-001.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-002.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-002.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-002.html rename to tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-002.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-003.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-003.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-003.html rename to tests/wpt/web-platform-tests/css/css-paint-api/geometry-background-image-tiled-003.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-001.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-001.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-001.html rename to tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-001.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-002.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-002.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-002.html rename to tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-002.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-003.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-003.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-003.html rename to tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-003.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-004.html b/tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-004.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-004.html rename to tests/wpt/web-platform-tests/css/css-paint-api/geometry-border-image-004.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/hidpi/device-pixel-ratio.html b/tests/wpt/web-platform-tests/css/css-paint-api/hidpi/device-pixel-ratio.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/hidpi/device-pixel-ratio.html rename to tests/wpt/web-platform-tests/css/css-paint-api/hidpi/device-pixel-ratio.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error.html b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error.html rename to tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-constructor-error.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-paint-error.html b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-paint-error.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-paint-error.html rename to tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-paint-error.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-pending-script.html b/tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-pending-script.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-pending-script.html rename to tests/wpt/web-platform-tests/css/css-paint-api/invalid-image-pending-script.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/overdraw.html b/tests/wpt/web-platform-tests/css/css-paint-api/overdraw.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/overdraw.html rename to tests/wpt/web-platform-tests/css/css-paint-api/overdraw.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint-arguments.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint-arguments.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/paint-arguments.html rename to tests/wpt/web-platform-tests/css/css-paint-api/paint-arguments.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint-function-arguments.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint-function-arguments.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/paint-function-arguments.html rename to tests/wpt/web-platform-tests/css/css-paint-api/paint-function-arguments.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-composite.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-composite.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/paint2d-composite.html rename to tests/wpt/web-platform-tests/css/css-paint-api/paint2d-composite.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-filter.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-filter.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/paint2d-filter.html rename to tests/wpt/web-platform-tests/css/css-paint-api/paint2d-filter.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-gradient.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-gradient.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/paint2d-gradient.html rename to tests/wpt/web-platform-tests/css/css-paint-api/paint2d-gradient.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-image.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-image.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/paint2d-image.html rename to tests/wpt/web-platform-tests/css/css-paint-api/paint2d-image.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-paths.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-paths.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/paint2d-paths.html rename to tests/wpt/web-platform-tests/css/css-paint-api/paint2d-paths.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-rects.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-rects.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/paint2d-rects.html rename to tests/wpt/web-platform-tests/css/css-paint-api/paint2d-rects.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-shadows.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-shadows.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/paint2d-shadows.html rename to tests/wpt/web-platform-tests/css/css-paint-api/paint2d-shadows.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-transform.html b/tests/wpt/web-platform-tests/css/css-paint-api/paint2d-transform.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/paint2d-transform.html rename to tests/wpt/web-platform-tests/css/css-paint-api/paint2d-transform.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-001.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-001.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-001.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-001.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-002.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-002.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-002.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-002.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-003.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-003.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-003.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-003.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-004.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-004.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-004.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-004.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-005.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-005.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-005.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-005.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-006.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-006.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-006.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-006.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-007.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-007.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-007.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-007.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-008.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-008.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-008.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-008.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-009.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-009.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-009.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-009.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-010.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-010.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-010.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-010.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-011.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-011.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-011.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-011.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-012.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-012.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-012.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-012.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-013.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-013.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-013.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-013.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-014.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-014.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-014.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-014.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-015.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-015.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-015.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-015.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-016.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-016.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-016.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-016.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-017.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-017.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-017.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-017.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-018.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-019.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-019.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-019.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-019.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-020.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-020.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-020.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-020.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-021.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-021.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-021.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-021.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-022.html b/tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-022.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-022.html rename to tests/wpt/web-platform-tests/css/css-paint-api/parse-input-arguments-022.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/registered-properties-in-custom-paint.html b/tests/wpt/web-platform-tests/css/css-paint-api/registered-properties-in-custom-paint.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/registered-properties-in-custom-paint.html rename to tests/wpt/web-platform-tests/css/css-paint-api/registered-properties-in-custom-paint.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/style-background-image.html b/tests/wpt/web-platform-tests/css/css-paint-api/style-background-image.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/style-background-image.html rename to tests/wpt/web-platform-tests/css/css-paint-api/style-background-image.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/style-before-pseudo.html b/tests/wpt/web-platform-tests/css/css-paint-api/style-before-pseudo.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/style-before-pseudo.html rename to tests/wpt/web-platform-tests/css/css-paint-api/style-before-pseudo.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/style-first-letter-pseudo.html b/tests/wpt/web-platform-tests/css/css-paint-api/style-first-letter-pseudo.https.html similarity index 93% rename from tests/wpt/web-platform-tests/css/css-paint-api/style-first-letter-pseudo.html rename to tests/wpt/web-platform-tests/css/css-paint-api/style-first-letter-pseudo.https.html index 61763b28298..3cdffb4593e 100644 --- a/tests/wpt/web-platform-tests/css/css-paint-api/style-first-letter-pseudo.html +++ b/tests/wpt/web-platform-tests/css/css-paint-api/style-first-letter-pseudo.https.html @@ -14,8 +14,8 @@ div::first-letter { line-height: 2px; } - - + +
ppp
diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/valid-image-after-load.html b/tests/wpt/web-platform-tests/css/css-paint-api/valid-image-after-load.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/valid-image-after-load.html rename to tests/wpt/web-platform-tests/css/css-paint-api/valid-image-after-load.https.html diff --git a/tests/wpt/web-platform-tests/css/css-paint-api/valid-image-before-load.html b/tests/wpt/web-platform-tests/css/css-paint-api/valid-image-before-load.https.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-paint-api/valid-image-before-load.html rename to tests/wpt/web-platform-tests/css/css-paint-api/valid-image-before-load.https.html diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-left-ref.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-left-ref.html new file mode 100644 index 00000000000..7c1193b8000 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-left-ref.html @@ -0,0 +1,41 @@ + +Reference for position:relative top constraint should behave correctly for table part elements + + +
+
+
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tbody-left-absolute-child.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tbody-left-absolute-child.html new file mode 100644 index 00000000000..98e759a8c0a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tbody-left-absolute-child.html @@ -0,0 +1,61 @@ + +position:relative top constraint should behave correctly for <tr> elements + + + + + + +
+
+
+ + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tbody-left.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tbody-left.html new file mode 100644 index 00000000000..e58de105388 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tbody-left.html @@ -0,0 +1,55 @@ + +position:relative top constraint should behave correctly for <tbody> elements + + + + + + +
+
+
+ + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tbody-top-absolute-child.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tbody-top-absolute-child.html new file mode 100644 index 00000000000..44daea4c1b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tbody-top-absolute-child.html @@ -0,0 +1,62 @@ + +position:relative top constraint should behave correctly for <tbody> elements + + + + + + +
+
+
+ + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tbody-top.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tbody-top.html new file mode 100644 index 00000000000..a958de82372 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tbody-top.html @@ -0,0 +1,56 @@ + +position:relative top constraint should behave correctly for <tbody> elements + + + + + + +
+
+
+ + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-td-left.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-td-left.html new file mode 100644 index 00000000000..0b87d62163a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-td-left.html @@ -0,0 +1,58 @@ + +position:relative top constraint should behave correctly for <td> elements + + + + + + +
+
+
+ + + + + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-td-top.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-td-top.html new file mode 100644 index 00000000000..dfd86798223 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-td-top.html @@ -0,0 +1,59 @@ + +position:relative top constraint should behave correctly for <td> elements + + + + + + +
+
+
+ + + + + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-left-absolute-child.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-left-absolute-child.html new file mode 100644 index 00000000000..9833aab71c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-left-absolute-child.html @@ -0,0 +1,61 @@ + +position:relative top constraint should behave correctly for <tfoot> elements + + + + + + +
+
+
+ + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-left.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-left.html new file mode 100644 index 00000000000..5b72f3bec6b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-left.html @@ -0,0 +1,55 @@ + +position:relative top constraint should behave correctly for <tfoot> elements + + + + + + +
+
+
+ + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-top-absolute-child.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-top-absolute-child.html new file mode 100644 index 00000000000..e23585af853 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-top-absolute-child.html @@ -0,0 +1,65 @@ + +position:relative top constraint should behave correctly for <tfoot> elements + + + + + + +
+
+
+ + + + + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-top-ref.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-top-ref.html new file mode 100644 index 00000000000..a3e709becfe --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-top-ref.html @@ -0,0 +1,41 @@ + + + +
+
+
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-top.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-top.html new file mode 100644 index 00000000000..c55c04b2fab --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tfoot-top.html @@ -0,0 +1,59 @@ + +position:relative top constraint should behave correctly for <tfoot> elements + + + + + + +
+
+
+ + + + + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-thead-left-absolute-child.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-thead-left-absolute-child.html new file mode 100644 index 00000000000..6619455b23c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-thead-left-absolute-child.html @@ -0,0 +1,61 @@ + +position:relative top constraint should behave correctly for <thead> elements + + + + + + +
+
+
+ + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-thead-left.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-thead-left.html new file mode 100644 index 00000000000..d604bc11a31 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-thead-left.html @@ -0,0 +1,55 @@ + +position:relative top constraint should behave correctly for <thead> elements + + + + + + +
+
+
+ + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-thead-top-absolute-child.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-thead-top-absolute-child.html new file mode 100644 index 00000000000..c2e2bf85a59 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-thead-top-absolute-child.html @@ -0,0 +1,65 @@ + +position:relative top constraint should behave correctly for <thead> elements + + + + + + +
+
+
+ + + + + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-thead-top.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-thead-top.html new file mode 100644 index 00000000000..ae481313dbd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-thead-top.html @@ -0,0 +1,59 @@ + +position:relative top constraint should behave correctly for <thead> elements + + + + + + +
+
+
+ + + + + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-top-ref.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-top-ref.html new file mode 100644 index 00000000000..795e08b8ba2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-top-ref.html @@ -0,0 +1,42 @@ + +Reference for position:relative top constraint should behave correctly for table part elements + + +
+
+
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tr-left-absolute-child.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tr-left-absolute-child.html new file mode 100644 index 00000000000..ef812e4323d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tr-left-absolute-child.html @@ -0,0 +1,64 @@ + +position:relative top constraint should behave correctly for <tr> elements + + + + + + +
+
+
+ + + + + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tr-left.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tr-left.html new file mode 100644 index 00000000000..004b284cb75 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tr-left.html @@ -0,0 +1,58 @@ + +position:relative top constraint should behave correctly for <tr> elements + + + + + + +
+
+
+ + + + + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tr-top-absolute-child.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tr-top-absolute-child.html new file mode 100644 index 00000000000..855080adc8b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tr-top-absolute-child.html @@ -0,0 +1,63 @@ + +position:relative top constraint should behave correctly for <tr> elements + + + + + + +
+
+
+ + + + + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tr-top.html b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tr-top.html new file mode 100644 index 00000000000..92f95d44220 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/position-relative-table-tr-top.html @@ -0,0 +1,59 @@ + +position:relative top constraint should behave correctly for <tr> elements + + + + + + +
+
+
+ + + + + + + +
+
+
+ +
You should see a green box above. No red should be visible.
+ diff --git a/tests/wpt/web-platform-tests/css/css-tables/fixed-layout-calc-width-001.html b/tests/wpt/web-platform-tests/css/css-tables/fixed-layout-calc-width-001.html index 4d3622bb932..dd70db0a756 100644 --- a/tests/wpt/web-platform-tests/css/css-tables/fixed-layout-calc-width-001.html +++ b/tests/wpt/web-platform-tests/css/css-tables/fixed-layout-calc-width-001.html @@ -1,7 +1,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-tables/fixed-layout-excess-width-distribution-001.html b/tests/wpt/web-platform-tests/css/css-tables/fixed-layout-excess-width-distribution-001.html index a2d1884b585..6abf07eda03 100644 --- a/tests/wpt/web-platform-tests/css/css-tables/fixed-layout-excess-width-distribution-001.html +++ b/tests/wpt/web-platform-tests/css/css-tables/fixed-layout-excess-width-distribution-001.html @@ -1,7 +1,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/css-text-decor/text-decoration-skip-ink.html b/tests/wpt/web-platform-tests/css/css-text-decor/text-decoration-skip-ink.html new file mode 100644 index 00000000000..cd6f7a049c6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text-decor/text-decoration-skip-ink.html @@ -0,0 +1,34 @@ + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/declared-styleMap-accepts-inherit.html b/tests/wpt/web-platform-tests/css/css-typed-om/declared-styleMap-accepts-inherit.html index f550326de5a..f02cf98ef57 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/declared-styleMap-accepts-inherit.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/declared-styleMap-accepts-inherit.html @@ -9,7 +9,7 @@
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/factory-absolute-length.html b/tests/wpt/web-platform-tests/css/css-typed-om/factory-absolute-length.html new file mode 100644 index 00000000000..a65cf5d44e3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/factory-absolute-length.html @@ -0,0 +1,64 @@ + + + + CSSOM Test: Numeric Factory Functions for absolute length + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/factory-duration.html b/tests/wpt/web-platform-tests/css/css-typed-om/factory-duration.html new file mode 100644 index 00000000000..ac4971393a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/factory-duration.html @@ -0,0 +1,29 @@ + + + + CSSOM Test: Numeric Factory Functions for duration + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/factory-frequency.html b/tests/wpt/web-platform-tests/css/css-typed-om/factory-frequency.html new file mode 100644 index 00000000000..56a544b32f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-typed-om/factory-frequency.html @@ -0,0 +1,29 @@ + + + + CSSOM Test: Numeric Factory Functions for frequency + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/styleMap-update-function.html b/tests/wpt/web-platform-tests/css/css-typed-om/styleMap-update-function.html index 5af1b2c2770..4dea0095120 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/styleMap-update-function.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/styleMap-update-function.html @@ -9,9 +9,9 @@
diff --git a/tests/wpt/web-platform-tests/css/css-values/viewport-units-css2-001.html b/tests/wpt/web-platform-tests/css/css-values/viewport-units-css2-001.html index fb95a22e6e6..f0feb6d9935 100644 --- a/tests/wpt/web-platform-tests/css/css-values/viewport-units-css2-001.html +++ b/tests/wpt/web-platform-tests/css/css-values/viewport-units-css2-001.html @@ -1,259 +1,233 @@ + CSS Values and Units Test: Checks viewport units against CSS 2.1 properties and the CSSOM + + + + + + - + #table td { + border: 1px solid green; + } + -
+
-

- Checks viewport units. Also re-check with zoom in/out. -

+

+ Checks viewport units. Also re-check with zoom in/out. +

-
- Test the Web Forward! -
+
+ Test the Web Forward! +
- - - - - - - - - -
TestTWF
+ + + + + + + + + +
TestTWF
- + diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/table-cell-001-ref.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/table-cell-001-ref.html new file mode 100644 index 00000000000..acbd7594265 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/table-cell-001-ref.html @@ -0,0 +1,23 @@ + + + +CSS Writing Mode test reference + + + + + +

There should be a green rectangle and no red. + +

diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/table-cell-002-ref.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/table-cell-002-ref.html new file mode 100644 index 00000000000..d3e82d115f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/table-cell-002-ref.html @@ -0,0 +1,28 @@ + + + +CSS Writing Mode test reference + + + + + +

There should be a green square and no red. + +

xx xx
+ + + diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/text-combine-upright-decorations-001.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/text-combine-upright-decorations-001.html index 0c3077d1142..3d1cf765441 100644 --- a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/text-combine-upright-decorations-001.html +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/text-combine-upright-decorations-001.html @@ -5,6 +5,7 @@ + +

There should be a green rectangle and no red. + +

+ +
        
+ diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/table-cell-002.html b/tests/wpt/web-platform-tests/css/css-writing-modes/table-cell-002.html new file mode 100644 index 00000000000..2f180bfc7e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/table-cell-002.html @@ -0,0 +1,32 @@ + + + +CSS Writing Mode test: orthogonal table cell + + + + + + + + +

There should be a green square and no red. + +
xx xx
+ + + diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/text-combine-upright-decorations-001.html b/tests/wpt/web-platform-tests/css/css-writing-modes/text-combine-upright-decorations-001.html index 50dca76983f..3ba238cdf6e 100644 --- a/tests/wpt/web-platform-tests/css/css-writing-modes/text-combine-upright-decorations-001.html +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/text-combine-upright-decorations-001.html @@ -8,6 +8,7 @@ diff --git a/tests/wpt/web-platform-tests/selectors/attribute-selectors/attribute-case/syntax.html b/tests/wpt/web-platform-tests/css/selectors/attribute-selectors/attribute-case/syntax.html similarity index 97% rename from tests/wpt/web-platform-tests/selectors/attribute-selectors/attribute-case/syntax.html rename to tests/wpt/web-platform-tests/css/selectors/attribute-selectors/attribute-case/syntax.html index baa1244c706..be00f624e39 100644 --- a/tests/wpt/web-platform-tests/selectors/attribute-selectors/attribute-case/syntax.html +++ b/tests/wpt/web-platform-tests/css/selectors/attribute-selectors/attribute-case/syntax.html @@ -1,5 +1,6 @@ Selectors: syntax of case-sensitivity attribute selector + diff --git a/tests/wpt/web-platform-tests/selectors/child-indexed-pseudo-class.html b/tests/wpt/web-platform-tests/css/selectors/child-indexed-pseudo-class.html similarity index 100% rename from tests/wpt/web-platform-tests/selectors/child-indexed-pseudo-class.html rename to tests/wpt/web-platform-tests/css/selectors/child-indexed-pseudo-class.html diff --git a/tests/wpt/web-platform-tests/css/selectors/missing-right-token.html b/tests/wpt/web-platform-tests/css/selectors/missing-right-token.html new file mode 100644 index 00000000000..8fe33a95795 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/missing-right-token.html @@ -0,0 +1,31 @@ + + + + + Selectors: attribute selectors with missing right token + + + + + + + + + + +

+ + +
+ + + + diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001-ref.html new file mode 100644 index 00000000000..cf345b59638 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001-ref.html @@ -0,0 +1,29 @@ + + + + Reference + + +
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001.html new file mode 100644 index 00000000000..e2e00f99b44 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001.html @@ -0,0 +1,26 @@ + + + + Overflowing content does not affect whether a fixed-height box fits on a page, + but does get printed on the next page. + + + + + +
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/break3/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/break3/reftest.list new file mode 100644 index 00000000000..f174e8e3e0b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/break3/reftest.list @@ -0,0 +1 @@ +== moz-block-fragmentation-001.html moz-block-fragmentation-001-ref.html diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/reftest.list index b8286de1665..3777f46a87c 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/reftest.list +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/masking/reftest.list @@ -87,7 +87,6 @@ == mask-size-percent-percent.html mask-size-percent-percent-ref.html == mask-size-percent-percent-stretch.html mask-size-percent-percent-stretch-ref.html - == clip-path-contentBox-1a.html clip-path-geometryBox-1-ref.html == clip-path-contentBox-1b.html clip-path-geometryBox-1-ref.html == clip-path-contentBox-1c.html clip-path-geometryBox-1-ref.html @@ -108,8 +107,6 @@ == clip-path-localRef-1.html clip-path-localRef-1-ref.html -default-preferences - # mask with opacity test cases == mask-opacity-1a.html mask-opacity-1-ref.html == mask-opacity-1b.html mask-opacity-1-ref.html diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/reftest.list index 6ffb9cf7b49..363c678c316 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/reftest.list +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/reftest.list @@ -16,6 +16,9 @@ include css21/reftest.list # Backgrounds and Borders include background/reftest.list +# Fragmentation +include break3/reftest.list + # Color Level 4 include color4/reftest.list diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-emphasis-line-height-001z.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-emphasis-line-height-001z.html index ae6dfb588c3..81754d8789b 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-emphasis-line-height-001z.html +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-emphasis-line-height-001z.html @@ -10,6 +10,8 @@ textarea { all: inherit; width: 100%; + height: 10em; /* ensure there's plenty of height even if the default font is quite tall, + to avoid risk of a vertical scrollbar showing up inside textarea */ box-sizing: border-box; border: 0 none; margin: 0; padding: 0; } diff --git a/tests/wpt/web-platform-tests/custom-elements/OWNERS b/tests/wpt/web-platform-tests/custom-elements/OWNERS index a8b25e79c2d..db7b270fbc2 100644 --- a/tests/wpt/web-platform-tests/custom-elements/OWNERS +++ b/tests/wpt/web-platform-tests/custom-elements/OWNERS @@ -1,3 +1,4 @@ +@snuggs @alsemenov @deepak-sa @domenic diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLInputElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLInputElement.html new file mode 100644 index 00000000000..8193d2c57f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLInputElement.html @@ -0,0 +1,61 @@ + + +Custom Elements: CEReactions on HTMLInputElement interface + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/custom-elements/resources/custom-elements-helpers.js b/tests/wpt/web-platform-tests/custom-elements/resources/custom-elements-helpers.js index 956c562a76a..015a698c63e 100644 --- a/tests/wpt/web-platform-tests/custom-elements/resources/custom-elements-helpers.js +++ b/tests/wpt/web-platform-tests/custom-elements/resources/custom-elements-helpers.js @@ -143,6 +143,38 @@ function define_new_custom_element(observedAttributes) { } define_new_custom_element._element_number = 1; +function define_build_in_custom_element(observedAttributes, extendedElement, extendsOption) { + let log = []; + let name = 'custom-element-' + define_build_in_custom_element._element_number++; + + class CustomElement extends extendedElement { + constructor() { + super(); + log.push({type: 'constructed', element: this}); + } + attributeChangedCallback(...args) { + log.push(create_attribute_changed_callback_log(this, ...args)); + } + connectedCallback() { log.push({type: 'connected', element: this}); } + disconnectedCallback() { log.push({type: 'disconnected', element: this}); } + adoptedCallback(oldDocument, newDocument) { log.push({type: 'adopted', element: this, oldDocument: oldDocument, newDocument: newDocument}); } + } + CustomElement.observedAttributes = observedAttributes; + customElements.define(name, CustomElement, { extends: extendsOption}); + + return { + name: name, + class: CustomElement, + takeLog: function () { + let currentLog = log; log = []; + currentLog.types = () => currentLog.map((entry) => entry.type); + currentLog.last = () => currentLog[currentLog.length - 1]; + return currentLog; + } + }; +} +define_build_in_custom_element._element_number = 1; + function document_types() { return [ { diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/testdriver.md b/tests/wpt/web-platform-tests/docs/_writing-tests/testdriver.md new file mode 100644 index 00000000000..3f5787f002a --- /dev/null +++ b/tests/wpt/web-platform-tests/docs/_writing-tests/testdriver.md @@ -0,0 +1,34 @@ +--- +layout: page +title: testdriver.js Automation +order: 8.5 +--- + +testdriver.js provides a means to automate tests that cannot be +written purely using web platform APIs. + +It is currently supported only for [testharness.js][testharness] +tests. + +## API + +testdriver.js exposes its API through the `test_driver` variable in +the global scope. + +NB: presently, testdriver.js only works in the top-level test browsing +context (and not therefore in any frame or window opened from it). + +### `test_driver.click(element)` + +This function causes a click to occur on the target element (an +`Element` object), potentially scrolling the document to make it +possible to click it. It returns a `Promise` that resolves after the +click has occured or rejects if the element cannot be clicked (for +example, it is obscured by an element on top of it). + +Note that if the element to be clicked does not have a unique ID, the +document must not have any DOM mutations made between the function +being called and the promise settling. + + +[testharness]: {{ site.baseurl }}{% link _writing-tests/testharness.md %} diff --git a/tests/wpt/web-platform-tests/docs/introduction.md b/tests/wpt/web-platform-tests/docs/introduction.md index 638812845fb..c718efdb2ff 100644 --- a/tests/wpt/web-platform-tests/docs/introduction.md +++ b/tests/wpt/web-platform-tests/docs/introduction.md @@ -96,7 +96,6 @@ anything as a result! The tests are designed to be run from your local computer. The test environment requires [Python 2.7+](http://www.python.org/downloads) (but not Python 3.x). -You will also need a copy of OpenSSL. On Windows, be sure to add the Python directory (`c:\python2x`, by default) to your `%Path%` [Environment Variable](http://www.computerhope.com/issues/ch000549.htm), @@ -119,16 +118,9 @@ following entries are required: If you are behind a proxy, you also need to make sure the domains above are excluded from your proxy lookups. -Because web-platform-tests uses git submodules, you must ensure that -these are up to date. In the root of your checkout, run: - -``` -git submodule update --init --recursive -``` - The test environment can then be started using - ./serve + ./wpt serve This will start HTTP servers on two ports and a websockets server on one port. By default one web server starts on port 8000 and the other @@ -147,44 +139,31 @@ to some port of your choice e.g. "http": [1234, "auto"] ``` -If you installed OpenSSL in such a way that running `openssl` at a -command line doesn't work, you also need to adjust the path to the -OpenSSL binary. This can be done by adding a section to `config.json` -like: +## Running tests automatically + +The `wpt run` command provides a frontend for running tests automatically +in various browsers. The general syntax is: ``` -"ssl": {"openssl": {"binary": "/path/to/openssl"}} +wpt run [options] [test paths] +``` + +e.g. to run `dom/historical.html` in Firefox, the required command is: + +``` +wpt run firefox dom/historical.html ``` ### Windows Notes -Running wptserve with SSL enabled on Windows typically requires -installing an OpenSSL distribution. -[Shining Light](https://slproweb.com/products/Win32OpenSSL.html) -provide a convenient installer that is known to work, but requires a -little extra setup, i.e.: +Generally Windows Subsystem for Linux will provide the smoothest user +experience for running web-platform-tests on Windows. -Run the installer for Win32_OpenSSL_v1.1.0b (30MB). During installation, -change the default location for where to Copy OpenSSL Dlls from the -System directory to the /bin directory. +The standard Windows shell requires that all `wpt` commands are prefixed +by the Python binary i.e. assuming `python` is on your path the server is +started using: -After installation, ensure that the path to OpenSSL (typically, -this will be `C:\OpenSSL-Win32\bin`) is in your `%Path%` -[Environment Variable](http://www.computerhope.com/issues/ch000549.htm). -If you forget to do this part, you will most likely see a 'File Not Found' -error when you start wptserve. - -Finally, set the path value in the server configuration file to the -default OpenSSL configuration file location. To do this, -copy `config.default.json` in the web-platform-tests root to `config.json`. -Then edit the JSON so that the key `ssl/openssl/base_conf_path` has a -value that is the path to the OpenSSL config file (typically this -will be `C:\\OpenSSL-Win32\\bin\\openssl.cfg`). - -Alternatively, you may also use -[Bash on Ubuntu on Windows](https://msdn.microsoft.com/en-us/commandline/wsl/about) -in the Windows 10 Anniversary Update build, then access your windows -partition from there to launch wptserve. +`python wpt serve` [web-platform]: https://platform.html5.org diff --git a/tests/wpt/web-platform-tests/dom/events/Event-timestamp-high-resolution.html b/tests/wpt/web-platform-tests/dom/events/Event-timestamp-high-resolution.html index 15aa014cfb7..c0b43fc2711 100644 --- a/tests/wpt/web-platform-tests/dom/events/Event-timestamp-high-resolution.html +++ b/tests/wpt/web-platform-tests/dom/events/Event-timestamp-high-resolution.html @@ -4,13 +4,13 @@ \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/editing/data/insertparagraph.js b/tests/wpt/web-platform-tests/editing/data/insertparagraph.js index 432f0e0de35..70811ca9954 100644 --- a/tests/wpt/web-platform-tests/editing/data/insertparagraph.js +++ b/tests/wpt/web-platform-tests/editing/data/insertparagraph.js @@ -1599,5 +1599,25 @@ var browserTests = [ [["defaultparagraphseparator","p"],["insertparagraph",""]], "

foo

{}bar

", [true,true], - {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}] + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo[]bar

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

bar

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo[]bar

", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "

foo

bar

", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo[]bar
", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "
foo
bar
", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo[]bar
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
bar
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], ] diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html new file mode 100644 index 00000000000..5d0e4cb86f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-cseucpkdfmtjapanese.html @@ -0,0 +1,65 @@ + + + + +cseucpkdfmtjapanese decoding + + + + + + + + + + + + + + + + +
+ + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-errors.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-errors.html new file mode 100644 index 00000000000..ea1a35f7e15 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-errors.html @@ -0,0 +1,132 @@ + + + + +EUC-JP decoding errors + + + + + + + + + + + + + +
+ + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html new file mode 100644 index 00000000000..6b99117e79d --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decode-x-euc-jp.html @@ -0,0 +1,65 @@ + + + + +x-euc-jp decoding + + + + + + + + + + + + + + + + +
+ + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html new file mode 100644 index 00000000000..ed05e3112f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html @@ -0,0 +1,65 @@ + + + + +EUC-JP decoding + + + + + + + + + + + + + + + + +
+ + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decoder.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decoder.js new file mode 100644 index 00000000000..6116753d32c --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-decoder.js @@ -0,0 +1,83 @@ +function dec2char(n) { + // converts a decimal number to a Unicode character + // n: the dec codepoint value to be converted + if (n <= 0xffff) { + out = String.fromCharCode(n); + } else if (n <= 0x10ffff) { + n -= 0x10000; + out = + String.fromCharCode(0xd800 | (n >> 10)) + + String.fromCharCode(0xdc00 | (n & 0x3ff)); + } else out = "dec2char error: Code point out of range: " + n; + return out; +} + +function eucjpDecoder(stream) { + stream = stream.replace(/%/g, " "); + stream = stream.replace(/[\s]+/g, " ").trim(); + var bytes = stream.split(" "); + for (i = 0; i < bytes.length; i++) bytes[i] = parseInt(bytes[i], 16); + var out = ""; + var lead, byte, offset, ptr, cp; + var jis0212flag = false; + var eucjpLead = 0x00; + var endofstream = 2000000; + var finished = false; + + while (!finished) { + if (bytes.length == 0) byte = endofstream; + else byte = bytes.shift(); + + if (byte == endofstream && eucjpLead != 0x00) { + eucjpLead = 0x00; + out += "�"; + continue; + } + if (byte == endofstream && eucjpLead == 0x00) { + finished = true; + continue; + } + if (eucjpLead == 0x8e && byte >= 0xa1 && byte <= 0xdf) { + eucjpLead = 0x00; + out += dec2char(0xff61 + byte - 0xa1); + continue; + } + if (eucjpLead == 0x8f && byte >= 0xa1 && byte <= 0xfe) { + jis0212flag = true; + eucjpLead = byte; + continue; + } + if (eucjpLead != 0x00) { + lead = eucjpLead; + eucjpLead = 0x00; + cp = null; + + if ( + lead >= 0xa1 && + lead <= 0xfe && + (byte >= 0xa1 && byte <= 0xfe) + ) { + ptr = (lead - 0xa1) * 94 + byte - 0xa1; + if (jis0212flag) cp = jis0212[ptr]; + else cp = jis0208[ptr]; + } + jis0212flag = false; + if (cp != null) { + out += dec2char(cp); + continue; + } + if (byte >= 0x00 && byte <= 0x7f) bytes.unshift(byte); + out += "�"; + } + if (byte >= 0x00 && byte <= 0x7f) { + out += dec2char(byte); + continue; + } + if (byte == 0x8e || byte == 0x8f || (byte >= 0xa1 && byte <= 0xfe)) { + eucjpLead = byte; + continue; + } + out += "�"; + } + return out; +} diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html new file mode 100644 index 00000000000..f64f0ed287e --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html @@ -0,0 +1,148 @@ + + + + +cseucpkdfmtjapanese encoding (form) + + + + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html.headers new file mode 100644 index 00000000000..799f7c53a5e --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-cseucpkdfmtjapanese.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=cseucpkdfmtjapanese diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html new file mode 100644 index 00000000000..68129986fd0 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html @@ -0,0 +1,187 @@ + + + + +EUC-JP encoding errors (form, han) + + + + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html.headers new file mode 100644 index 00000000000..9a64388b411 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-han.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html new file mode 100644 index 00000000000..945c5c690dc --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html @@ -0,0 +1,152 @@ + + + + +EUC-JP encoding errors (form, hangul) + + + + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html.headers new file mode 100644 index 00000000000..9a64388b411 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-hangul.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html new file mode 100644 index 00000000000..0050e35f283 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html @@ -0,0 +1,196 @@ + + + + +EUC-JP encoding errors (form, misc) + + + + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html.headers new file mode 100644 index 00000000000..9a64388b411 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-errors-misc.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html new file mode 100644 index 00000000000..37ec8f8c86a --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html @@ -0,0 +1,148 @@ + + + + +x-euc-jp encoding (form) + + + + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html.headers new file mode 100644 index 00000000000..fac56a312f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form-x-euc-jp.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=x-euc-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html new file mode 100644 index 00000000000..297ed841016 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html @@ -0,0 +1,148 @@ + + + + +EUC-JP encoding (form) + + + + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html.headers new file mode 100644 index 00000000000..9a64388b411 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-form.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html new file mode 100644 index 00000000000..1f98ce3d596 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html @@ -0,0 +1,100 @@ + + + + +EUC-JP encoding errors (href, han) + + + + + + + + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html.headers new file mode 100644 index 00000000000..9a64388b411 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html new file mode 100644 index 00000000000..fc12def3b32 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html @@ -0,0 +1,65 @@ + + + + +EUC-JP encoding errors (href, hangul) + + + + + + + + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html.headers new file mode 100644 index 00000000000..9a64388b411 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-hangul.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html new file mode 100644 index 00000000000..0b0f31b2af4 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html @@ -0,0 +1,109 @@ + + + + +EUC-JP encoding errors (href, misc) + + + + + + + + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html.headers new file mode 100644 index 00000000000..9a64388b411 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-misc.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html new file mode 100644 index 00000000000..05b6c2c0939 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html @@ -0,0 +1,62 @@ + + + + +EUC-JP encoding (href) + + + + + + + + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html.headers new file mode 100644 index 00000000000..9a64388b411 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encoder.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encoder.js new file mode 100644 index 00000000000..5a5b6f97052 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp-encoder.js @@ -0,0 +1,128 @@ +var jis0208CPs = []; // index is unicode cp, value is pointer +for (var p = 0; p < jis0208.length; p++) { + if (jis0208[p] != null && jis0208CPs[jis0208[p]] == null) { + jis0208CPs[jis0208[p]] = p; + } +} + +function chars2cps(chars) { + // this is needed because of javascript's handling of supplementary characters + // char: a string of unicode characters + // returns an array of decimal code point values + var haut = 0; + var out = []; + for (var i = 0; i < chars.length; i++) { + var b = chars.charCodeAt(i); + if (b < 0 || b > 0xffff) { + alert( + "Error in chars2cps: byte out of range " + b.toString(16) + "!" + ); + } + if (haut != 0) { + if (0xdc00 <= b && b <= 0xdfff) { + out.push(0x10000 + ((haut - 0xd800) << 10) + (b - 0xdc00)); + haut = 0; + continue; + } else { + alert( + "Error in chars2cps: surrogate out of range " + + haut.toString(16) + + "!" + ); + haut = 0; + } + } + if (0xd800 <= b && b <= 0xdbff) { + haut = b; + } else { + out.push(b); + } + } + return out; +} + +function eucjpEncoder(stream) { + var cps = chars2cps(stream); + var out = ""; + var cp; + var finished = false; + + while (!finished) { + if (cps.length == 0) { + finished = true; + continue; + } else cp = cps.shift(); + if (cp >= 0x00 && cp <= 0x7f) { + // ASCII + out += " " + cp.toString(16).toUpperCase(); + continue; + } + if (cp == 0xa5) { + out += " 5C"; + continue; + } + if (cp == 0x203e) { + out += " 7E"; + continue; + } + if (cp >= 0xff61 && cp <= 0xff9f) { + var temp = cp - 0xff61 + 0xa1; + out += " 8E " + temp.toString(16).toUpperCase(); + continue; + } + if (cp == 0x2212) { + cp = 0xff0d; + } + var ptr = jis0208CPs[cp]; + if (ptr == null) { + return null; + // out += ' &#'+cp+';' + // continue + } + var lead = Math.floor(ptr / 94) + 0xa1; + var trail = ptr % 94 + 0xa1; + out += + " " + + lead.toString(16).toUpperCase() + + " " + + trail.toString(16).toUpperCase(); + } + return out.trim(); +} + +function convertToHex(str) { + // converts a string of ASCII characters to hex byte codes + var out = ""; + var result; + for (var c = 0; c < str.length; c++) { + result = + str + .charCodeAt(c) + .toString(16) + .toUpperCase() + " "; + out += result; + } + return out; +} + +function normalizeStr(str) { + var out = ""; + for (var c = 0; c < str.length; c++) { + if (str.charAt(c) == "%") { + out += String.fromCodePoint( + parseInt(str.charAt(c + 1) + str.charAt(c + 2), 16) + ); + c += 2; + } else out += str.charAt(c); + } + var result = ""; + for (var o = 0; o < out.length; o++) { + result += + "%" + + out + .charCodeAt(o) + .toString(16) + .toUpperCase(); + } + return result.replace(/%1B%28%42$/, ""); +} diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars-cseucpkdfmtjapanese.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars-cseucpkdfmtjapanese.html new file mode 100755 index 00000000000..feb285d2408 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars-cseucpkdfmtjapanese.html @@ -0,0 +1 @@ +cseucpkdfmtjapanese characters\ ¡ø ¡¯ ¡ë ¡Þ ¡­ ¢ù ¡ß ¡à ¦¡ ¦¢ ¦£ ¦¤ ¦¥ ¦¦ ¦§ ¦¨ ¦© ¦ª ¦« ¦¬ ¦­ ¦® ¦¯ ¦° ¦± ¦² ¦³ ¦´ ¦µ ¦¶ ¦· ¦¸ ¦Á ¦Â ¦Ã ¦Ä ¦Å ¦Æ ¦Ç ¦È ¦É ¦Ê ¦Ë ¦Ì ¦Í ¦Î ¦Ï ¦Ð ¦Ñ ¦Ò ¦Ó ¦Ô ¦Õ ¦Ö ¦× ¦Ø §§ §¡ §¢ §£ §¤ §¥ §¦ §¨ §© §ª §« §¬ §­ §® §¯ §° §± §² §³ §´ §µ §¶ §· §¸ §¹ §º §» §¼ §½ §¾ §¿ §À §Á §Ñ §Ò §Ó §Ô §Õ §Ö §Ø §Ù §Ú §Û §Ü §Ý §Þ §ß §à §á §â §ã §ä §å §æ §ç §è §é §ê §ë §ì §í §î §ï §ð §ñ §× ¡¾ ¡½ ¡Æ ¡Ç ¡È ¡É ¢÷ ¢ø ¡Å ¡Ä ¢ó ¡ì ¡í ¢¨ ~ ¡î ­â ­ä ¢ò ­µ ­¶ ­· ­¸ ­¹ ­º ­» ­¼ ­½ ­¾ üñ üò üó üô üõ üö ü÷ üø üù üú ¢« ¢¬ ¢ª ¢­ ¢Í ¢Î ¢Ï ¢ß ¢Ð ¢à ¢º ¢» ­ô ¡Ý ¢å ¢ç ¡ç ­ø ¢Ü ¡Â ¢Ê ¢Ë ¢Á ¢À ¢é ¢ê ­ó ¡è ¢è ¢æ ¢â ¡â ¢á ¡å ¡æ ¢ã ¢ä ¢¾ ¢¿ ¢¼ ¢½ ¢Ý ­ù ¢Þ ­¡ ­¢ ­£ ­¤ ­¥ ­¦ ­§ ­¨ ­© ­ª ­« ­¬ ­­ ­® ­¯ ­° ­± ­² ­³ ­´ ¨¡ ¨¬ ¨¢ ¨­ ¨£ ¨® ¨¤ ¨¯ ¨¦ ¨± ¨¥ ¨° ¨§ ¨¼ ¨· ¨² ¨© ¨¾ ¨¹ ¨´ ¨¨ ¨¸ ¨½ ¨³ ¨ª ¨º ¨¿ ¨µ ¨« ¨» ¨À ¨¶ ¢£ ¢¢ ¢¥ ¢¤ ¢§ ¢¦ ¢¡ ¡þ ¡û ¡ý ¡ü ¢þ ¡ú ¡ù ¡ê ¡é ¢ö ¢õ ¢ô ¡¡ ¡¢ ¡£ ¡· ¡¹ ¡º ¡» ¡Ò ¡Ó ¡Ô ¡Õ ¡Ö ¡× ¡Ø ¡Ù ¡Ú ¡Û ¢© ¢® ¡Ì ¡Í ­à ­á ¤¡ ¤¢ ¤£ ¤¤ ¤¥ ¤¦ ¤§ ¤¨ ¤© ¤ª ¤« ¤¬ ¤­ ¤® ¤¯ ¤° ¤± ¤² ¤³ ¤´ ¤µ ¤¶ ¤· ¤¸ ¤¹ ¤º ¤» ¤¼ ¤½ ¤¾ ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó ¤Ô ¤Õ ¤Ö ¤× ¤Ø ¤Ù ¤Ú ¤Û ¤Ü ¤Ý ¤Þ ¤ß ¤à ¤á ¤â ¤ã ¤ä ¤å ¤æ ¤ç ¤è ¤é ¤ê ¤ë ¤ì ¤í ¤î ¤ï ¤ð ¤ñ ¤ò ¤ó ¡« ¡¬ ¡µ ¡¶ ¥¡ ¥¢ ¥£ ¥¤ ¥¥ ¥¦ ¥§ ¥¨ ¥© ¥ª ¥« ¥¬ ¥­ ¥® ¥¯ ¥° ¥± ¥² ¥³ ¥´ ¥µ ¥¶ ¥· ¥¸ ¥¹ ¥º ¥» ¥¼ ¥½ ¥¾ ¥¿ ¥À ¥Á ¥Â ¥Ã ¥Ä ¥Å ¥Æ ¥Ç ¥È ¥É ¥Ê ¥Ë ¥Ì ¥Í ¥Î ¥Ï ¥Ð ¥Ñ ¥Ò ¥Ó ¥Ô ¥Õ ¥Ö ¥× ¥Ø ¥Ù ¥Ú ¥Û ¥Ü ¥Ý ¥Þ ¥ß ¥à ¥á ¥â ¥ã ¥ä ¥å ¥æ ¥ç ¥è ¥é ¥ê ¥ë ¥ì ¥í ¥î ¥ï ¥ð ¥ñ ¥ò ¥ó ¥ô ¥õ ¥ö ¡¦ ¡¼ ¡³ ¡´ ­ê ­ë ­ì ­å ­æ ­ç ­è ­é ­Æ ­Ê ­Á ­Ä ­Â ­Ì ­Ë ­Å ­Í ­Ç ­Ï ­À ­Î ­Ã ­È ­É ­ß ­ï ­î ­í ­Ó ­Ô ­Ð ­Ñ ­Ò ­Ö ­Õ ­ã °ì Ãú ¼· Ëü ¾æ »° ¾å ²¼ ÉÔ Í¿ Т ±¯ ³î У À¤ Ò µÖ ʺ ¾ç ξ Ê ù­ Ф Ãæ Ð¥ ¶ú Ц ´Ý ð ¼ç Ч Ш Щ ǵ µ× Ç· Æã ¸Ã ˳ éÉ Ðª ¾è Ы ²µ ¶å ¸ð Ìé Ö¦ Íð Æý ´¥ µµ Ь Э λ ͽ Áè Я »ö Æó в ±¾ ¸ß ¸Þ °æ ÏË ÏÊ º³ °¡ г д е Ë´ ж ¸ò °ç Ëò µü µý µþ Äâ μ з и й ¿Í ½º ¿Î о м н µØ º£ ²ð л к Ê© »Æ »Å ¾ п ÉÕ Àç ¡¸ ÐÀ Рù® Âå Îá °Ê ÐÁ ²¾ ¶Ä Ãç ·ï Ðà Ǥ ù¯ ù° ´ë ù± ÐÄ °Ë ¸à ´ì Éú Ȳ µÙ ²ñ Ðç ÅÁ Çì ÐÆ ȼ Îâ ¿­ ù² »Ç »÷ ²À ÄÑ Ã¢ ÐÊ °Ì Äã ½» º´ ͤ ÂÎ ²¿ ù³ ÐÉ Í¾ ÐÅ ÐÇ ºî ÐÈ Õ¤ ÐÐ ÐÓ ÐÑ ²Â Ê» ÐË ÐÏ ¸ó »È ´¦ ÐÔ ÐÌ ùµ Îã »ø ÐÍ ÐÒ ù´ ù· ÐÕ ÐÎ ù¶ ¶¡ °Í ¶¢ ²Á Õ¥ Ëù Éî ¸ô ¿¯ η ÊØ ·¸ Â¥ ²ä ù¦ ½Ó ù¸ ÐÙ ÐÞ ÐÜ Ð× Â¯ ÐÚ ÐÝ ÐÛ ÊÝ ÐØ ¿® Ëó Ðß Ðà ½¤ Ðí ÇРɶ Ðè Êð ²¶ Ðì ù» Ðæ Ðï ÁÒ ¸Ä ÇÜ àÇ Ðî ÅÝ Ðã ¸ö ¸õ Ðá ù¼ ¼Ú Ðé ùº Êï ÃÍ Ðå ·ñ Ðâ Ðê Ðä ÎÑ Ðë ÏÁ ¶æ ·ð ù¹ ù¿ Ðð ù½ Ðñ Ðõ °Î ÊÐ Ðô Ðó Ð÷ Ðö Ää ·ò Ðø ù¾ ¼Å ¦ Äå ¶ö Ðù µ¶ Ðú Ðü ˵ ·æ ùÀ »± È÷ Ðû ºÅ Íà Ðþ Ñ£ Ðý ºÄ ½ý ·¹ Ѥ ¶Ï Ñ¡ Ñ¢ Ư Áü ¶£ ËÍ Ñ¥ ù ν Ѧ Ñ© ѧ ÁΠѨ Ѫ ùÁ Ѭ Ñ« ÊÈ µ· Ñ® ѯ ²¯ Ñ­ ¼ô Ѳ ѱ Ѱ ÐÖ Ñ³ ½þ Ñ´ Í¥ Ì٠Ѷ ѵ Ѹ Ñ· ѹ Ѻ °ô ¸µ ·» ½¼ Ãû ¶¤ Àè ¸÷ ùà ¹î Ѽ ÌÈ ÅÆ »ù Ñ» ѽ ÅÞ ³õ Ѿ ùÄ Æþ Á´ ÑÀ ÑÁ Ȭ ¸ø Ï» Ñ ¶¦ ʼ ¶ ¶ñ ŵ ·ó Ñà ÑÄ Æâ ±ß ÑÇ ºý ÑÆ ºÆ ÑÈ æî ÑÉ ËÁ ÑÊ ÑË ÑÌ ¾é ¼Ì ùÅ ´§ ÑÏ ÑÍ Ì½ ÑÎ ÉÚ ÑÐ ÑÑ ÑÒ Åß ÑÖ ÑÔ ÑÕ ÑÓ ºã Ñ× Ìê Îä ÑØ ùÆ À¨ ÑÙ ½Ú ÑÚ Ãü ο Åà ÒÅ ÑÛ ô¥ ¶Å ÑÜ ËÞ ½è Âü ÑÞ Æä ùÇ Ñß Ñà ³® Ñá ¶§ ÆÌ ±ú ½Ð È¡ Ñâ Åá ¿Ï Ñã ʬ ÀÚ ´¢ ´© Ñä Ñæ ·º Ñå ùÈ Îó ½é Ƚ ÊÌ Ñç Íø Ñè Ñé Åþ Ñê À© ºþ ·ô Ñë »É ¹ï Äæ Ñí § ºï Ñî Ñï Á° Ñì Ññ ˶ ¹ä Ñð ·õ ºÞ Çí Ñô Ñò Éû ¾ê Ñû ³ä Ñõ Ñó ÁÏ Ñ÷ Ñö ³Ä ·à Ñü έ Ñø Ñý Ñú Ñù ÎÏ ùÉ ¸ù ²Ã Îô ùÊ ½õ ÅØ ¹å Ò¢ Ò£ û¼ Îå Ï« Ò¥ ¸ú Ò¤ ³¯ ùË Ò¦ ËÖ Ä¼ ͦ ÊÙ Ò§ ðÕ Æ° Ò¨ ´ª ̳ ùÌ ¾¡ Ò© Êç Ò­ Àª Òª ¶Ð Ò« ´« ·® Ò® Ò¯ Ò° Ò± ¼Û ¸û ÌÞ ùÍ Ìè Æ÷ Êñ Ò² ùÎ Ò³ Òµ Ò· Ò¶ Ò¸ ²½ ËÌ ºü Ò¹ ÁÙ ¾¢ ¶© Òº ùÏ ÈÛ Ò» Ò¼ Ò½ Ò¾ ɤ ¶è °å Æ¿ Ò¿ ½½ Àé ÒÁ ÒÀ ¾£ ¸á Òà Ⱦ ÒÄ ÈÜ Â´ Âî ¶¨ Æî ñ Çî ËÎ ÒÆ Àê ·µ ÒÇ ÒÈ ±¬ °õ ´í ùР¨ µÑ Íñ ÒË ²· ÒÊ ¶ª ÒÌ Ìñ ùÑ ÒÍ ÎÒ ¸ü ¸¶ ÒÎ ÒÐ ÒÏ ¿ß ±¹ ±Þ ÒÑ ÒÒ ùÒ ¸· ÒÓ µî »² ÒÔ Ëô ºµ µÚ ͧ ÁÐ È¿ ¼ý ½Ç ¼è ¼õ ½ö ÈÀ ùÓ Ò× ±Ã ÁÑ ¸ý ¸Å ¶ç ÒÛ Ã¡ Âþ ¶« ¾¤ ÒÜ ÒÚ ²Ä Âæ ¼¸ »Ë ±¦ ³ð ¹æ »Ê ÒÝ ÒÞ µÉ ³Æ ¹ç µÈ Äß ±¥ Ʊ ̾ ¹¡ Íù ÅÇ ¸þ ·¯ Òç ¶ã ËÊ ÈÝ Òæ ´Þ Òá Òâ Òä Òå µÛ ¿á Ê­ Òã Òß ¸ã Òà Ϥ Êò Äè ¸â ¹ð Òè ÆÝ Òì ¼þ ¼ö Òï Òí Ì£ Òê Òó Òî Òñ ¸Æ Ì¿ Òò Òô Òö ùÖ ºð Ï Òë Òé Òõ Òð ùÕ Òø Ó£ Òú Òþ ù× Ó¡ Òû Ó¾ ºé ³± Òù Ó¥ °ö Ó¤ °¥ ÉÊ Ó¢ Òü Ò÷ Òý ºÈ Ó¦ °÷ Ó¯ Ó§ Ó¨ ¾¥ Ëé Ó­ Ó¬ ů Ó® Ó« ùØ ±´ º¶ ¿° Ó© Åâ Óª °¢ Ó´ Í£ ¾§ Óº Ó¹ Ó° Âà ӱ Âï Ó¶ ¾¦ Ó³ Ìä ·¼ Ó· Ó¸ Óµ Ó» Ó² ÓÁ ÓÆ Ó ӽ ÓÇ Á± ùÙ ÓÉ ¹¢ Ó¿ Ãý Óà Ӽ ´­ ´î ³å ÓÄ ÓÀ ·ö ÓÊ ÓÈ ÁÓ µÊ ¶¬ ÓÅ ¶ô ±Ä ÓÎ ÓÌ Ô§ ÓÑ ÓË ÓÏ ÓÍ »Ì ÓÐ ÓÓ ÓØ ÓÖ ÓÕ Ã² ²Å ÓÒ ÓÔ ¾¨ ±³ Ó× ²Þ Óâ ¾ü ÓÞ ÓÜ ÓÝ Óß ±½ Á¹ ÓÙ ÓÚ ³ú Óá ´ï Óä Óà Óã Ê® ÆÕ ȸ Óæ Óå ³Å Óç Óê Óé Óè ǹ Óë Óì Óî Óí Óð Óó Óñ Óï Óò Óô Óõ Óö Ó÷ Óø ÑÅ ¼ü »Í ²ó °ø ÃÄ Óù º¤ °Ï ¿Þ Óú ¸Ç ¹ñ Óü Óû Êà Óý Ô¡ Óþ Ô¢ Ô£ ·÷ ±à Ô¤ Ô¦ Ô¥ Ô¨ ÅÚ Ô© °µ ºß ·½ ÃÏ Ôª Ô« Ô­ Ô® ºä ¶Ñ Ë· Ô¬ Ô¯ ºÁ ¹£ ùÚ Ô³ º¥ ùÛ Ã³ Ô° ÄÚ Ô´ ¿â Ô² Ôµ ·¿ Ô¶ Ô· ¹¤ ³À Ô¹ Ôº ùÜ Ô» Ô¸ Ô± Ô¼ Ô½ ùÞ ùÝ Ëä ¾ë Ô¿ ÔÀ Ô¾ Ô Ǹ °è ÉÖ Ôà ¾ý ¼¹ ÇÝ ´ð ºë Ë٠Ʋ ·ø ÂÏ ÔÁ ÔÄ ÂÄ ÔÅ ÔÆ ÔÈ Äé ´® ô¡ ±á Êó ¾ì ÅÈ ºæ ÔΠʽ ÎÝ ²ô ÔÊ Áº ÔÍ Åã ÅÉ Åä ȹ ÄÍ ºÉ ÔÉ ±ö Ŷ ÔË ÔÇ ¿Ð ÔÏ ½Î ¶­ ÔÐ Êè Áý ÄÆ ùá ÔÒ ËÏ ÔÓ ÔØ ùâ ʯ Ô× ÔÑ ÔÔ ÔÖ º¦ ÊÉ ÔÙ ÃÅ ²õ ¾í ÔÛ ÔÚ ¹è ÔÜ ÔÞ ÔÝ Ôà ÔÕ Ôâ Ôá Ôß »Î ¿Ñ ÁÔ Ôã À¼ °í Çä ÄÛ Ôå Ôä Ôæ Ôç Ôè Ôé ÊÑ Ôê ùã ²Æ Ôë ͼ ³° ÒÉ ½È ¿ Ôì Ìë Ì´ Ôî Âç Å· ÂÀ É× Ôï Ôð ±û ¼º Ôñ °Ð Ôò Ôó ±â ´ñ Æà Êô Ô÷ ÁÕ Ôö ·À ùä ËÛ Ôõ Åå Ôù Ôø ùå ùæ Ôû Ôú ùç ±ü Ôü ¾© Ôþ Ã¥ Ôý ʳ ½÷ ÅÛ Õ¡ ¹¥ Õ¢ Ç¡ ÈÞ ÌÑ Ç¥ Õ« µ¸ ÍŠ̯ Ö¬ Õ£ Õ¦ ùè Š˸ ÅÊ Õ§ Ëå ùé ºÊ ¾ª Õ¨ »Ð »Ï °¹ ¸È À« °Ñ Õ¬ Õ­ Õª ±¸ ´¯ Õ© ÌŠɱ °¨ °ù »Ñ °Ò °£ Õ² Õ° ̼ Õ³ Õ± Õ¯ ¿± Õ® ÊÚ ¸ä Õ· Õ¸ ¾« Õ´ Ϭ ÇÌ Õ¶ º§ Õ¹ ÉØ Õº Õµ Ì» ÇÞ Õ» ɲ Õ¼ ÕÀ Õ½ ²Ç Õ¿ ¼» Õ¾ ·ù ÕÌ ÕÅ Õ Ãä ÕÁ Õà ÕÄ ÕÆ ÕÇ ´ò ÕÉ ÕÈ ÕÊ ¾î ÕÍ ÄÜ ±Å ÕË ÕÎ ÕÏ ÕÒ ÕÐ ÕÑ »Ò ÕÓ ¹¦ ÕÔ ùê »ú ¸ ÕÕ ÕÖ »Ú ¹§ ÌÒ µ¨ ¸É Õ× ³Ø ÕØ ¹ ÕÙ Ö£ ÕÚ ÕÛ ÕÜ ÕÞ Õß Õà Âð ±§ ¼é °Â Á× ´° ¼µ ¹¨ Åæ ½¡ ´± Ãè Äê °¸ µ¹ Êõ ¼Â µÒ Àë ¼¼ ͨ Õá µÜ ºË ³² ±ã ¾¬ ²È Õâ ÍÆ ½É ùë ¼ä Õã ´ó ÆÒ Ì© Õä Õå ÉÙ Õç ´¨ ¶÷ Õæ ùí ´² ¿² Õë »¡ ²É Õê Õè Õì Õé Ç« ÜÍ ¿³ Õí ùî ÎÀ Õî Õð Ãþ Õï À£ »û ÂÐ ¼÷ Éõ Àì ¼Í Õñ ¾­ Õò Õó °Ó º ¿Ò Õô Ƴ ¾® ¾¯ Õõ Àí ¾° ùï Õö Õ÷ Ìà Õø ¶Æ ½¢ Õù Õú ¼Ü ¿¬ Æô ¿Ô Èø Ç¢ ¶É Õû µï Õü ¶þ ÆÏ ²° »Ó Õý Ö¢ Ö¡ ¶ý Õþ Ÿ ° ÅË ¼È ÁØ Íú Ö¤ Ö¥ ÆÖ »³ Ö§ Ö¨ Ö© ´ô Öª Ö« ²¬ ùð Á» ´ä Ö­ ̨ ÂÒ ³Ù Ö¯ Ö± ´ß ùñ Ö® Ö° Ö³ Ö² Ö´ Öµ ƽ ¶® ²å Ö¶ Ö» Ö¹ Ê÷ Êö ùò Åç Ö¸ ½Ô Ö· ¿ò Ö¼ ºê Ö Öà ֽ ³³ Ö¾ ÖÇ ÖÆ ÖÅ ÖÁ ÖÀ ÖÄ ùó Êø ùö ÖË ÖÈ ÖÊ Íò ÖÉ ùô Ö¿ ¿ó ÖÌ ù÷ º· ÖÍ ÖÎ ÖÑ ÖÐ ÖÏ Åè Öº Ö× ÖÓ ÖÒ ÖÔ ÖÕ ÖØ ùø ùù Îæ ÖÙ ÖÖ ÖÚ ´à ÖÛ ùú ÖÝ ÖÜ ÖÞ Öß Àî ½£ ½ä Áã ¹© º¸ ¹ª µð Öà º¹ ¸Ê Öá ̦ Çà Öâ ¹« ´¬ ç ¶Ò »Ô ÉÛ ÈÁ Öã ´õ Öæ Ä¡ Öå Öä Öç Äë ¿ã »Õ ÀÊ ÂÓ µ¢ Ä¢ Öè Öé ¾ï ˹ Öì Öë Öê Éý Öó ËÚ Öí Öï Ëë Öî Öð Ȩ Öñ ʾ Öò ´³ Ê¿ ǯ Öô Öõ ¹¬ ´´ Öö ¸¸ ÍÄ Í© ´ö Öø Ä£ ¹­ ¾± Èß ¾² ½ø Äì Êù Ź ¹® ÉÜ Öù ÅÙ ºÂ ¸Ë Äí °Ã ½î ¹¯ ÍÇ Öú Öû ÇÑ Öü Î÷ Ï­ Öþ Öý ³Ç ס פ ×¥ ×£ ÉÀ ¾³ ×§ צ ×¢ ר ש ת ×­ ׫ ׬ ×® ±ä Äî ׯ ·ú ²ö Ƕ ×° Æû ÊÛ ×± Ï® ײ ÊÀ ×µ С б ¼° Æõ ×¶ µÝ Ĥ °ú ×· ʦ ¹° ÃÐ Äï ùû Ìï ¸¹ ¸Ì ׸ ×¹ ׿ ¼å ùü Ä¥ ¶¯ ׺ É« ÃÆ ×» ù¬ ×¼ ¶° ×½ ×¾ ×À Åö ×Á × ×à ״ ׳ ×Ä ·Á ɧ ùý ºÌ É· Ħ ÉË ×Å ¾´ ±Æ ׯ ×Ç Ìò Èà ×Ê ±ý À¬ ×É ×È ·Â ÂÔ ×Î ×Ì ×Ë Î§ ¸å ½ù ×Í ÅÌ ½¾ ÆÀ ×Ñ ×Ð ×Ï ×Ò ¸æ ×Ó Éü ½Û ×Ô Èù ÆÁ ħ ùþ Ű ×Õ µ« ¿´ ɬ ´÷ Ǧ ×Ö »Ö ˺ Ë» ±þ ×Û ú¡ Ãé ר ²÷ Ø­ ×Ú Ç° ×Ù ×× ¹ú ×Ý ×ã ×é ×á ÅÜ ×æ ÉÝ ×à ×å Îç »× ÂÕ ×Þ µÞ ×è À­ ±å ×â ²ø ×ç ¶± ×ä ×ê ×ì ×ö ×ô ×ñ ×ð Îø ×ò ¶² ¹± ½ú ×ù ×ë ú¢ ×ï ×ß ²ú ×ó ×õ ÃÑ º¨ ²¸ ×í ×ø ×÷ ¶³ © ³æ ·Ã ×î ×ú ×ý Ø¡ ú£ ¼½ ú¤ ا Äð ×û Ø¥ ²ù Ø£ ؤ ×þ Ø¢ ¸ç ͪ ´µ ±Ù ئ Ǻ °­ Èá ×Ü Ø¬ ذ Ìå Ø© Åé Ø® ¾ð د Æ× ÏÇ Ø« ú¦ ر ¹û ÀË ú¥ °Ô ت ب ÁÚ ×ü »´ ÂÆ ؽ ú¨ ÁÛ Ø¸ ص ض ¼æ ع ؼ Ø· ½¥ غ Ø´ Ìü Ìû ؾ Ø¿ °Õ ú© س ¶ò °¦ ´¶ ú§ Ø» ØÃ ØÂ ØÇ ú« ØÈ úª ØÆ ØÉ ØÁ ØÅ ØÊ ØË ØÀ »ü ØÄ ÂÖ ¹² ز ¿µ ØØ Êé ØÎ ØÏ ØÐ Ø× ØÖ Ëý ´· ØÔ ·Å ³´ ØÑ θ ØÓ °Ö ØÕ ØÌ ØÒ ØÙ ·Ä ØÍ ÍÝ Í« ØÜ Øà Áþ Îù Øá ØÞ ØÛ ú¬ ØÚ Øß ʰ Æ´ ·Æ Øâ ØÝ Øã ·û ²± Øë ´¸ Øé Øê º© Øè Øæ Øå Øì Øä Øî ²û Øð Øï Ĩ Øó Øñ Øç ·ü Øò Øö Øõ Ø÷ Øô Øø Øù Øú Êê Øü Øû ½¿ À® ²æ ²ü ú­ Øý °¿ ÀÌ Øþ ìà ١ ·á Ù¢ Àï Ù£ Ù¤ µº Ù¥ Ù¦ Ù§ Â× ¸Í Ìá ˼ ½ê Ù¨ Àð î½ Èâ ¼ê ºÍ Ù© ÂÇ Ê§ Âñ Ù¬ Ùª Ù­ Ù« Ù® ʱ °· ÉÞ Èã Ù¯ Ù² ¾µ µ» Ù° Ù· ¾¶ Ù± ÇÄ ÍÞ Ù³ Ù´ Ù¸ Åê Ùµ ¹³ ÀÞ ÙÆ È´ Âò ú® Èä Ú­ Êú Äñ Ëõ Ù» ²¡ Ãê ÙÄ Ã´ Ù¾ ÙÅ ÙÀ ÙÇ Ùà Ù Çï Ù¼ ²ý Ùº µñ Âó Ù¶ Ù¹ ¹´ ÀÛ ¾· ÙÁ ÇÒ µò ³È ³ç ¿¡ ÙÉ ÙÎ ÙÊ ·ý ÙÏ »¢ ¹é ½¦ Ù½ »ý ÙÌ »Ø ÙÍ °Ä ÙÈ Ä© µó ¶´ ÙË °§ ºÃ ¿¶ Äò ÈÔ ÙÑ ÁÞ Âª »« ÙÒ ÙÔ ÙÐ Êá Ľ ÁÜ Êû ¼Î Ùà Ùß ¿ø ·þ ÙÙ ¾¹ Æè DZ Ù× ÁÝ ¼ø ÙÜ ¾¸ ÙÖ ÙÛ ÇÓ ÙÕ ·¡ ³Ý ÙÝ Î« ºÎ õ ÙÚ ÀÜ ¹µ ¿ä ±æ Á¼ ÙØ µÅ ·Ç ÄÏ ÙÞ Áß Ùá Ùã · Ùé Ùä Ùæ ÉÁ Äó Ùç ͬ ÍÈ ´¹ °® Ùå Ùâ ´ø ±ç ú¯ Ùè ÍÉ Ùì » Ùó Ùí Ùê Ùñ ÙÓ Ùî Ùò È Åë Ùë Ùï ·È ºñ ÀÝ Ù÷ Ŧ ú° Ùô Ëà Ùõ Ùö ÌÎ À¢ ·â Ùý »µ Ùú Ùù Dz ú± Ƶ ű Ùû Ùü Éï ÇÅ »£ Àñ ËÐ ³É Ú¥ Ùþ ÍÊ Ú§ Ú£ Ú¤ Áà ú² Ú¢ Ù¿ Ú¦ Ú¡ Ú« Ú¬ ŧ Ú® »¤ Ú© µ¼ Ú¯ Ú¨ Ú³ Ú² Ú± Ú´ Ú¶ ¾ñ Úµ Ú¹ Ú· Ú¸ Ùð Ú» Úº Ùø Ú¼ Ú° »Ù Ú½ Ú¾ ÚÀ Ú¿ ÚÁ ²þ ¹¶ Êü À¯ ¸Î ÚÃ ÚÆ ú³ ÉÒ µß ÚÅ ÚÄ ÇÔ ÚÇ ¶µ ÚÉ ÚÈ ´º »¶ ÆØ ·É ¿ô ÚÊ À° Ũ Éß ÚË ÚÌ ÚÍ Ê¸ ÕÝ ÀÆ ÉÌ ºØ Èå Èà ÅÍ ÎÁ ÚÏ ¼Ð ÚÐ °¶ ¶Ô ÀÍ Éà ÚÑ »Â ÃÇ »Û ¿· ÚÒ Êý ±÷ »Ü ÚÕ ÚÓ ÚÖ Î¹ ÚÔ Àû Ú× Â² ÚØ ´ú ÚÚ ÚÙ ÚÛ ÚÜ ´û Æü ö µì »Ý Áá ½Ü °° ÚÝ ²¢ Úá ú´ ¹· Úà º« ¾º ú· Úß ¾» ÌÀ ºª °× ÀÎ úµ Úæ ú¹ À± ±Ç úº ½Õ Ëæ ºò ¾¼ ú¸ À§ ù¨ Úå Úã Úä ú¶ Ãë Û¦ Úê »þ ¹¸ Úè Úé ¿¸ Úç »¯ ú¼ ú½ Úì Úë Úð Úñ Úí ú» ³¢ Úî Úï ÈÕ Éá ·Ê Úò ú¿ À² ¾½ ÃÒ ¶Ç Úó Ú÷ ²Ë Úô Úö Úõ ½ë ÃÈ °Å Úø úÀ Úù úÁ Ī Îñ »Ã Êë ú ˽ Û¢ Úû Úþ Úý úà Úú Û¡ ÆÞ Úü Û£ ½ì Û¤ ÍË Çø Û¥ Û§ Û¨ Û© ¶Ê ±È ¹¹ Ûª Û« ½ñ Áâ úÄ ù« ÒØ Á¾ Á½ ÂØ ºÇ Ðò ·î Í­ Êþ Éþ úÅ Û¬ ºó Ä¿ Û­ ϯ ˾ Ä« Û® ´ü Û¯ Û° ÌÚ Ì¤ Ëö ËÜ »¥ Û² ¼ë ËÑ Û´ Û· Û¶ ´ù µà Û³ Ûµ Û¸ ¿ù Íû °É ºà ¼ ¼Ý ¾ó Û» ÅÎ Û¹ « Ûº ¾ò ÌÝ Û¼ Û½ Íè úÇ Û ¹º ÇÕ Û¿ Åì ÚÞ Úâ µÏ ÇÇ ÛÁ ¾¾ ÈÄ ÛÇ Èú Û¾ ÛÄ Ûà ÀÏ Ëí ÎÓ Ëç ²Ì »Þ ÏÈ ÛÆ ¿õ ÛÅ ÛÀ ¸Ï ÛÌ ÛÊ ²Í ÛÈ ÛÎ ÛÔ úÈ úÊ ÂÈ ÊÁ ÛÖ É¢ ÛÕ Çð Ë¿ ´» À÷ ½À ÄÓ Í® ÛÑ ÛÐ ÛÒ ÛÏ Û× ÛÍ ÛË ÛÓ ÛÉ Ãì Ìø ¼Æ ºô ºº Ëï ³Á úË ÄÎ ÆÊ ±É Àò À´ ·ª ÛÙ ¹» ³ü ÛÛ ³ô Ûá ÛÞ Àó ³Ë º¬ ³Ê ºÏ ÛÜ ·å ·Ë Åí úÌ ÛÚ °Æ ÛÝ Ûß ¶Í ·¬ úÉ ´¼ µË Ûâ ºù Ëñ »· Ûã ɰ Ûï ²³ Ûä Ûõ Ûå ΠÛì Çß Ûô Ûç °´ Ûé ¹¼ Ûë Ûê Ûæ Ûñ ¾¿ Ôí ¸è Íü Ûè Äô ³£ º­ Ûà Ûð ³á Ûî Ûò Åî ´þ ܲ ù© ÌÉ Û÷ ´ý Ûþ úÍ ËÀ Ü¡ Ü£ ܧ Ûù ê Åï Ü« Ûü ܨ Ü¢ ¿¹ ܬ À³ ܪ ´½ ÏÐ Ûö ܦ °Ø Ûø ̺ Ûý ¿¢ ÄÇ Ûó Ü¥ ¿ú ܯ ³ñ ¸¡ ܱ Ûú ܰ Ü© Ûû Ü­ Ü® Ü¿ ÆÎ ܤ Ü» ܽ ÄØ ÍÌ Éö ܸ ÂÊ Ü¾ Á¿ ܵ Ü ÜÁ Æï ÜÀ Æê úÏ ÜÄ Ü· ¶È ܺ ½Ý Çà ܼ ¶Ë Ü´ ܶ ܳ ϰ ³Ú ܹ Üà ³µ ºç ±Ý ÜÔ Ï± Ü× úÑ ¿º ÜÖ ÜÕ ÜÒ ÜÆ Üã ÜÅ ÜØ ÜÐ ÜË ÜÈ ÜÉ ÜÑ ô¢ ÜÎ ¹½ ÄÈ Áä ÜÌ ÜÇ ÜÊ ÍÍ Ëê ÜÏ ÜÙ úÒ Üá ÜÚ Üç Üå Üà Üß ÄÐ Áå ÜÝ ÜÛ Üâ Üè Èõ Üî Üé Üì Üæ Ãô ɸ ÜÜ Üä ¾À ÌÏ Üø Üë ¸¢ ²£ ³ß ÜÓ úÓ ¾Á Üð Ü÷ ¼ù ³ò î Üí úÕ Üò Üö ¶¶ µÌ Üô µ¡ ÆË Üó Üõ úÔ Üï úÖ Üñ ú× ³à ÃÉ Üü Üú ¸é Üù Ý¡ ÛØ Üû Üý Üþ ݬ ݨ Ûí ݧ ݦ Ý£ Üê Ý¥ ݤ ݪ Ϧ Ý­ ¶û Ý© Ý« úØ ú٠ȧ Ý® ݲ ݯ Íó ݰ ÜÞ Ý³ Ý´ ±µ ݶ ·ç ¼¡ ¶Õ ²¤ Íß Ý¸ Ý· ݺ µ½ ¶Ö ´¾ ݽ ݼ ݾ ²Î ÷ Ý¿ ´¿ ÝÁ ÝÀ Ý Ýà ÝÄ »ß Àµ º¡ Éð Êâ ÏÄ »õ ºÐ Îò ÝÅ ÝÆ »à ÝÇ ÝÈ ÝÊ ÝÉ ËØ ½Þ ¼ì »Ä ÝË ÝÍ ¿£ ÝÌ ÝÎ ÝÏ ÝÐ ÝÑ ÝÒ ÝÔ ÝÓ ÝÕ ²¥ ÃÊ ÝÖ »¦ ³Ì Ý× Å ÔÌ µ£ ÝØ ÝÙ Êì Ëè ÆÇ ÝÚ Èæ úÚ Èû ÌÓ ÝÛ ÝÝ ÝÜ Ýß ÝÞ Ýá »á ̱ Ýâ Ýã µ¤ Ýä Ýæ Ýå ¿å ɹ ±Ê ÈÅ úÛ Äõ ½Á µá ÈÆ ¼® Ýè ´À ±ø úÜ Æò Ýç ¹¾ ÃÓ Ýé Ýñ Ýê úÞ ÂÁ µâ Ýò ·è µ¥ Ýð Ýî Ýë Íà úÝ ÄÀ ÆÙ Ýì Ýô Ýó ·£ ²­ º» Ýí Ýï Ë× Âô Ë÷ Ýü Ýý ²Ï ʨ Ìý Þ¡ ¼£ ¾Â Ýø Ýþ ±è ¶· Ýõ Ýú Àô Çñ Èç Ý÷ Ë¡ Ýù Þ¤ úß Þ¢ Ýû Ë¢ ÇÈ µã Å¥ Ãí Þ¥ Þ£ ÂÙ Ýö ±Ë úà ÍÎ Þ° Þ¯ Àö Þ¬ Íì Æ¶ Þ¦ ÄÅ ±Ì ¹¿ Þ© ½§ Þ® Þ­ Þ¨ Þ« ³è Þª ÇÉ Î® ¾ô Àõ Þ¶ Þ´ ÉÍ Þ± Þ³ ±º ¹À ϲ ³½ Éâ úâ Íá ³¤ ¿» Þµ Þº úá ¾Ã Í° Þ· Þ² Þ¸ úã ÎÞ Åó ÆÂ úä ³¶ ±Õ Þ¾ ÞÁ Îà Íä ÞÈ Þ ޿ ÎÔ ÞÅ úå ½Ê ÞÇ ÞÌ Åñ ÞÊ ÞÄ Ã¸ ÞË ÞÀ ÞÆ ÞÍ °ü Þà ÞÎ ¿¼ úç ½ß Ê¥ º® úæ Þ» ÞÉ Åº úè À¶ ³é ºÑ ¾Ä Þ½ ½Â ·Ì Þ¼ ÞÒ ½í ¸º Þá ÞÛ µô ÅÏ ÞÖ Þß °¯ ±² úë ²¹ ÞØ ¬ ÞÏ ÞÑ ¹Á Þâ úé ÞÝ úì ÞÕ ÞÜ Ì« ÞÚ ÞÞ ¸Ð ¾Å ù úê ÞÔ Í¯ Þ× ÞÐ Åò ÞÓ ÞÙ ÏÑ ¼¾ Ëþ Þã È® Þï ¸» ½à Þå ί ¹Â Þò °î Þð Þä Þê Þì ÍÏ Þç Å® Þé úí Þñ Þë ÌÇ Þæ ¼¢ Þþ ³ê Þè Þí Þî Âì ÂÚ Þö Þü Þú Å© ߣ Þ÷ Þø Þà µù ɺ ¼¿ ¹÷ ϳ Þô ߢ ±é Áæ Çù ´Á Îú Ì¡ ÄÒ Þû Þý Á² ß¡ Þù Þó ´Ã ·é ߯ ߪ Àø ³ã ½á ß³ ߬ Ĭ ß© ÄÙ ßÌ ß¦ ߥ ß® ߨ ß§ ß­ À¡ ߤ úî ß° ß± ´Â ß¶ ßµ ß· ߺ Åà ߴ úï ߸ ·ã Âù ß² Ç» ß¹ ß¾ ß¼ ß¿ ß ߻ ¹ê Ǩ Þ¹ Íô ß½ ßÁ Âõ ßÀ ß« úð ïé ßÅ ßÉ ßÇ úñ úò ßà ßÄ ßÈ ßÆ ÉÎ ßÎ ßË ßÊ ßÍ ÆÔ ßÏ Ãõ Âí úó À¥ ßÐ ßÒ ßÑ Þõ ßÓ Æç ßÔ ²Ð Åô ³¥ µä ¼Þ ºÒ úô ϧ ¿æ ±ê ßÖ ßÕ úõ ß٠ú ßÜ ß× ßÛ ßÚ ÅÀ °Ù ù§ Îõ ßÞ ±¨ ßà ßß ßÝ ßØ Ë£ ßâ ú÷ ßá úö ±ë ßä ʲ ßã ̵ ¾Ç Á³ ¾Æ úù úú Îû ßê Àù ßæ ßë ±ì úø ßé Çá ßå ßè ¾È ÈÑ ßì ¼Ñ Àú ßï ßç ·§ ßí ÍÐ ßð ô¦ ½Ï ßñ ßò Ç® ßô ßõ úü dz Åõ ß÷ ßù ÎÕ ßö ßø ±í ßó ÓÛ ßú Áç »¸ ßü ßû ¿¤ ÒÙ ßý à¡ ßî ßþ úý ࢠÇú ࣠ठॠঠÄÞ à¨ à§ à© àª ¼ß Éã Ìì ૠଠÁÖ ¼¤ ୠ஠௠ÊÒ ÈÇ à° Ç× Ä­ à± ²ç µí ÌÆ ̶ ²´ Ï´ ËÒ Êª À· ಠÆÃ ¸£ à³ ºÔ ൠഠච෠ภµ¾ ๠ຠ¸¤ ÈÈ úþ ༠¾õ à» û¡ ¶¸ འ࿠ྠàÀ ¸Ñ àÁ ¶é ÁÀ ¹ý àà àÄ à ¼í ÆÈ ¶¹ àÆ Ã¬ àŠϵ Çâ àÉ àË àÈ ÌÔ àÊ àÌ ÎÄ û¢ àÐ àÏ Ãö Ç­ ¸¥ àÎ àÍ Í± Ͳ àÑ ±î ¹ö »â àÒ àÓ àÕ ½Ã à× àÖ àØ ³Í àÚ û¤ àÙ àÜ àÛ ¸¼ Ψ ¶Ì ²¦ ¶ê ´á Îè àÞ àà û¥ àá ²Ñ àÝ û¦ »¹ ÄÁ àß û© û§ àä ¼î û¨ àâ ·¾ ÈÉ àã àþ û« àé ¸½ µå àæ Íý ûª ΰ Âö àè û¬ û® û­ û¯ àê ÎÖ ¶× Èü ÇÊ àë àí àð àì àï ¸ê ±Í àñ ¿ð àî ÎÜ û° àô ô¤ àò àõ àç àó º¼ àö à÷ Íþ û± àø àù û² àå àú ´Ä ¼¥ àû àü àý ±» á¡ É» ᢠ´¤ ᣠᤠᥠ᧠ᨠᦠÉÓ áª á© û³ ᬠ᫠᭠ᮠᰠᯠ¹ù á² á± ´Å ¿Ó ż á³ À¸ »º ±ù á´ ÍÑ Êã áµ ùì ÅÄ Í³ ¹Ã ¿½ ÃË Ò´ Ä® ²è ᶠᷠἠẠṠÚ ³¦ Ḡ°Ú Ȫ ÈÊ Î± á½ á» ÃÜ À¦ È« É­ ῠά ·Í áÀ á¾ ÈÖ áÁ á û´ °Û ¾ö áÇ áÄ Æí áà µ¦ áÊ áÅ áÆ áÉ áÈ É¥ Á ÁÁ µ¿ áË áÌ áÍ áÏ áÎ ±Ö á× Èè áÑ áÓ áÕ ¿¾ áÖ áÔ ¼À áÐ áÒ É ¾É áÙ áØ áÚ ¼¦ º¯ Å÷ áÛ ÄË áÝ Î¡ áÜ Áé áâ áä áå ÃÔ áã áà áÞ áß áá áè áæ áç áé áë áì áí áî áê áð áï áñ ÎÅ áô áò áó ´â Ìþ ÊÊ áö áõ á÷ áø áü áù áú áû áý áþ ⡠⢠⣠ȯ ÅР⤠Çò É´ ⥠ûµ ⦠Ū ³§ ¹Ä ⧠⨠⩠»© ⫠⪠⬠⭠û¸ û¶ û· û¹ Èé ⮠⯠óé â° â± â² »® â³ ÇÖ Ëß ±Î ±× â´ â¶ âµ Åð À¹ ݹ â· ÌÁ ⸠´Æ È× â¹ âº â» ÌÜ ÌÕ Ä¾ Áê â½ ½â ¾Ê âÀ â¿ â¾ Èý ´Ç ¸© âÆ âà ¿¿ ̲ â âÄ âÅ âÁ âÇ âÈ Ä¯ ´ã Ãå û» âÉ âÊ âÍ ¿ç ÆÄ âÎ ËÓ âË âÌ âÑ âÐ âÏ âÓ âÒ âÔ âÖ âÕ ÊÍ ½Ö ÎÆ â× Æ· âØ âÙ âÝ âÛ âÜ âÚ âÞ âß âà âá Ì· ââ Ìð âã ÃÎ Çê ¶ë û âä ¶º ÀÐ âå º½ âæ âç ¸¦ ºÕ âé û½ ÅÖ ºÖ µÎ ˤ ÇË Å× ¹Ü âë û¾ ¾Ë û¿ β ¹Å ¸§ È£ âí ûÀ âï ¸ë âî Äö âñ ³· âì Èê ±° ºì ÏÒ âð âò ÊË ÀÙ âô âõ âó ³Î âû âú ¼§ âü â÷ âý âø ÈØ âö âù 㢠㡠Ëá âþ °ë 㤠㣠¾Ì 㥠Áà 㧠㦠㨠âè âê 㪠㩠ûÁ ¼¨ Îé ¼Ò ã« ·· µÀ µ§ »ã Í´ ã± ã° ÁÄ ã­ ã¯ ½Ë ¿À 㮠㬠Ǫ ¾Í ɼ º× Åø ã² ã³ ãÉ ¶Ø Ͻ Áµ ã´ ²Ò Ä÷ Ê¡ ûÅ ûÇ ãµ µú 㶠㸠㹠ǩ 㺠㻠㼠¶Ù ²Ó ÆÅ ½¨ »ä ã½ ½© ²Ê Éà 㾠Èë ÁÅ ãÁ ã Çé ¿Á ã¿ Ãá ãÀ ¾Î °Ü µ© ãÃ Äø ãÄ ÀÇ Ì­ É£ ãÅ ãÆ ÃÕ ÎÇ ãÈ ãÇ ¼ï ãÊ °ð ãÍ ãË ²Ô ·Î ãÌ ¹Æ ¹ò Êæ ãÎ ËÔ ãÐ ÀÑ ±Ï ²º °¬ ãÏ ãÑ ãÒ ¾÷ ãÓ ³Ï ãÕ ·ê µæ ãÖ ¶õ ã× Àü ÆÍ Àà ºõ ãØ Ãâ Áë ãÚ ãÜ ãÙ ãÛ ·¢ ãÝ ·¦ µç ÍÒ ãß ãà ±® ãã ³ö ãâ ãá ãå ãÞ ãæ Î© ãç ãè ûÈ Ôô ãê ãé ãë ãì ε ãí ðï ¾Ï ãî ãï ½× Æ¸ ãð ûÉ Ã¨ ûË ãñ ü ãò ¶¥ Ñ¿ ÃÝ ¼³ ´È ãó ä¢ ãö µè ãõ ä¤ ãô ¾Ð ãø ãù Å« ãú ³Þ ¿Ú Éä ãü Âè ã÷ ãû ãý ºû ä¦ É® Ȧ Åù ¶Ú ä¥ ä£ Èµ ãþ ÃÞ Åû Åú ºö ä¸ ä¨ äª ä­ ä® ä« ä¬ ä© ä§ ä¡ ÊÏ ²Õ äµ ä² ä· ä¶ Çó ̧ »» ä° ä¹ ä´ ä³ ä¯ ûÌ ä± ´É ý Àý È¢ ä¾ È¤ Àá ä» ÈÏ ä¿ ÊÓ ÃÛ äº ä¼ ä½ äÀ ¼Ä ÆÆ äÅ äÄ äÁ ϶ äÊ äÎ äË äÇ äÈ äÍ ä ÒÕ äÉ äà äÌ äÒ ´Ê äÏ äÐ äÑ äÔ äÓ Èö äÕ Îü Êí äÚ ä× äÖ ÀÒ äÙ äÛ äØ äß äÜ äÝ äÆ äÞ äà äá ÊÆ äâ Ìâ ¶Î ·© äã Ê´ ¿è ̰ ää γ Çô ÁÆ Ç´ ½Í °À äé äç äå ´¡ ¾Ñ äê äè äæ äî äí äì äë äï äð Àº äñ äó äò ¸Ò Á¸ äõ Åü äô äö ʵ Áì ¹Ç ä÷ ÎÈ äù äú äû äü »å äý ·Ï µê µª å¡ Ìó ¹È äþ å¤ Ìæ Ǽ ɳ ½ã å£ ¼Ó ¹É »æ µé ʶ å¢ ÁÇ Ë º÷ »ç ÄÝ å§ Îß ºÙ å¨ ¿Â åª ¾Ò º° å© ½ª ¸¾ ÁÈ å¥ å« ûÎ å¦ ·Ð å® å² ·ë å­ å¶ ûÏ ¹Ê Íí °¼ å³ µë å° å± Åý å¯ å¬ ³¨ Àä ¸¨ å¸ åµ å· å´ ·Ñ ³ å¹ Áî åÆ ûÑ åÂ å¼ åÀ ¼ú °Ý å» åà åÇ ¹Ë ÌÖ ÄÖ å½ ûÐ åÅ åº Ã¾ å¿ °½ ÌÊ å¾ ¶Û Èì Áí ÎÐ ½ï åî ûÒ åÈ Àþ åÄ åÉ åË Äù åÎ åÊ ÊÔ ´Ë ÌË °Þ åÍ Îý åÌ ±ï Æì åÏ åÖ åÐ å× åÓ Çû ¼Ê åÕ åÒ åØ åÑ ½Ä Ë¥ ½Ì åÔ åà åÜ åß åÝ åá åÛ åÁ ÀÓ ÈË åÞ åÙ Á¡ ·Ò ½« ûÓ ¿¥ Á¶ åä åæ åç åã åå åÚ åâ åê åé Ëú ·« åè åì åë åï åñ »¼ åí åò åó ù¡ åô åú Å» åö åõ å÷ åø åù åû åü ´Ì åý åþ æ¡ ûÔ æ¢ æ£ æ¤ æ¥ æ¦ æ¨ æ§ æ© æª æ« æ® æ¬ æ­ ºá ·Ó ÃÖ È³ ½ð ÇÍ Èí æ¯ Øí æ° æ² Íå æ± æ´ æ³ ÍÓ æµ Èþ æ¶ æ¹ æ¸ æ· ûÕ æº ·² Á¢ µÁ æ¾ æ» æ¼ æ¿ æÀ æ½ ±© ²§ æÂ æÃ æÄ Íâ ½¬ æÆ æÅ ¿é æÇ æÈ æÉ ´å ´Í æÊ æË ËÝ Íã ÍÔ Ï· ¹Í æÎ ¼Ô æÍ æÏ ¼© ÂÑ æÐ ¹Ì Ì× æÑ æÒ æÓ æÔ æÕ ¼ª Ìí æ× Ã¿ æÖ æÙ æØ æÚ À» æÛ æÜ ʹ æÝ Áï æÞ æß Îþ æâ æá æà İ æã ¿¦ æä æå ϸ ææ æç æé æè È¥ Æù Ͼ È© æë ¾Ó ɪ æì æê ´Î ¸Ô »è Èî ¸ª Ëà æï æí ¹Î ¹Ï °é ºè ÇÙ °ß æô ÃÀ ÇØ ÂÛ æö æò æõ æð æó ˦ ¸Õ °ý æñ æø æù ƹ ¶» ç¦ Ç½ »é ¶¼ ÀÈ ÏÆ Ì® æ÷ ÀÔ µÓ æú æü æû æý æ Ǿ ı ç£ ç¢ æþ ¿Õ Éå ç¥ ç¤ ¹Ð ÏÓ çµ ç© çª ¼ð ç¨ ¹ø ç§ ç« Ä² Ê¢ Á£ ÂÜ ç¯ ç° ç¬ ç­ ç® ¹Ñ ç¶ ç² Éæ Ëì ɨ ç± ç´ ç³ ËÄ ç· ç¸ Á· ç¹ ç» ç¿ ç¼ çº Ç¿ ç½ ç¾ ²² çÅ çÀ çÁ ç ¡ çÄ çÃ çÆ çÇ çÈ ¿Ã ²é çÉ Î× ¼« ½­ »ê Ã× çÊ çË ±± çÌ çÍ çÎ çÏ çÐ ¶½ Úª çÑ Àå çÒ ¼Ë çÓ Ð° çÔ ÊÞ ´Ü Á¤ ½Ø Éñ ½® çÕ ¹Ò çÖ ÈÌ çä çØ ÂÉ Çõ ¸¿ ç× Á¥ çÙ Äú çÛ çÚ çÝ çÜ çÞ çà çß ´Ï çá çâ çã º± ÎÉ çå ¿§ ±ð çæ çç çè °ò çé çê Éç ¼Ç çì ³© °² çë çî ÇÎ ¿Ä ²Ö ˧ ·Ý ¶Ü çí ²ê ´£ ±ñ çò Îê ÂÝ ÉÄ çþ ²× çü çú çñ çï çð ¼ã ¶ì Ã÷ ÆÑ ±Ñ çô çó çù çõ çø û× ÌÐ ç÷ ²Ø ³ý çû çý ·Ô è£ è¬ è­ °« è´ °ñ è« èª è¥ è¤ è¢ è¡ Ãã Âû è§ è¦ è© Áð ·Õ ±Á è¨ ¹Ó Áñ ûØ èº è» ²Ù ²® è¸ ûÙ è® è¶ è½ è· èµ çö è³ è¯ ´Ð è± è¼ è² è¾ è° Çü Íé è¹ èÏ èÇ ¿û ûÚ µÆ ¶Ý è ²Û ¾Ô èÅ ºÚ ÅÑ èÊ Êî èÁ ²Ú ¸Ö É© èË è¿ ûÛ èÈ èÒ èà èÄ Æº èÉ èÆ Ë¨ èÌ °à èÀ èÎ èÍ Çë èÔ èß ³þ èâ èÐ èÕ Íî èÞ ûÜ ÍÕ Îª Ãø ³ë Éò èä Æ¡ °± èÝ èÙ Áò èÓ èÛ èà Ǭ °ª èØ èá Éø èÜ è× ¾Õ ½¯ ¼¬ ÌØ ÉÇ èç èð èÚ ³÷ ûÝ ¾ø èå èê Áó èæ èí Ãß èî ÍÖ èã ³¸ èé èì ̬ èï èè èë ù¥ Ë© Ï¡ èó èú èò ¼Ã èÑ ÊΠ̢ èù èø èô èõ ±¶ è÷ èñ ÄÕ èö °þ ¢ Êà èû é¡ ÈÙ èþ ¾Ö ¼É é£ ¶¾ ûÞ é¤ Éù èý ûß èÖ èü ÏÏ Æ¢ Éó ûà é« é± é² é¥ Çö é¯ é§ é© é³ é¨ é¬ ±ò Æå é­ é° é¦ Á¦ éª »§ ¿Å ·° Ìô Ìù ½ò ûâ é· éµ ÏÎ é´ Íõ é¶ é¸ é¹ é¼ éº Æ£ é» ÈÍ é® ½ó é½ é Áô éÁ é¢ éà ÁÉ é¾ éÀ é¿ Ý± Ý¢ éÅ éÄ Íö â¼ éÆ éÇ éÈ ¸× µÔ éÊ ÑÝ µõ κ ¶ó éË éÌ Ãî éÍ Æú °º ²ã éÒ éÓ éÎ »½ éÏ Ç éÐ éÑ éÛ éÕ éØ éÔ éÖ é× ¼Ø éÙ ÃÁ ·Ö ³Â éÜ ³¿ éá éÝ éà Ⱥ éÞ éß ÉÈ ÈÚ éâ Âý éì éè ²ë éæ Ëª éç éä éå éê éí éë éé éã ÃØ éô ̪ éò éó éî éð éñ éï Àæ Ϲ éø éù ê¡ ¿ª éû éþ éö éõ ê¢ ²Ü éü ê£ éý éú ij é÷ Çè ê§ Í» ê¦ ê¥ ê® ê¨ ê° Íæ ê³ êª ê« ê¯ ê² ê± ê© ê¬ ê½ ê¶ ê´ êµ êº ê» ³ª µÂ ê¹ ê¤ ûå ê¸ ê¼ ê· ê¾ êÀ ê¿ ê êÁ éÚ êÆ êà êÄ êÅ êÇ ·ì êÉ êÈ ½° ¹Ô Þ§ êÊ ½Ñ ³¹ êË ±Ò ¾× êÌ ¹Õ êÍ °á ɽ êÎ ¿ê êÕ êÒ Ãï êÓ êÐ ¶Þ êÏ êÖ ·¶ ÂÞ êÜ êØ Âµ ê× êÚ êÑ êÛ êÝ Èï êÙ êÞ êà ¸Ó êÔ °Á êß ºÛ Îö êá êâ Áõ ΢ êã ͵ êä êå Êä êæ ºÀ Σ êë êì ¾Ø êê ûæ Íç êç êé À½ ¿þ êè êí Ê£ êï êî ³ì Ë« êð ù¢ êü êò êó êô êõ êù êú êø êö êñ ê÷ êû ð· ²¨ êþ ¶ß êý ë¢ ë¡ ë¤ ë£ ë¥ ½± ë¦ ë§ ë¨ À¾ Í× ë© Ê¤ ÇÆ ëª ë« ¸« µ¬ ë¬ »ë ÇÁ ë­ ³Ð ë® ë° Í÷ ë¯ ¿Æ ë± ë² ë³ ´Ñ ë´ ëµ ë¶ ë· ³Ñ ë¸ ë¹ ëº ²ò ¿¨ ë» ë¼ ë½ ¸À Äû ë¾ ·× ¿Ö ëÁ Ƥ ëÀ ûç ·± ë¿ Â÷ µ­ ë ëà ¾Ù ·í ëÄ Ë¬ Àß µö Ìõ ÁÊ ëÅ ûè ¿Ç Ãð ¾Ú ëÆ ëÉ ëÊ º¾  ëÈ ¾Û ɾ ëÇ »ì ±Ó ëÎ ·Ø »î »í ÏÍ ëÍ ëÌ Á§ µÍ Ïà ³º ¾Ü ûé ëË ëÐ ëÑ ëÏ ¸Ø ÍÀ »ï ǧ ëÔ ÀÀ àͶ ë× ¸ì À¿ ëÓ ëØ ¸í ëÕ ëÖ ûê ëÒ Àâ ÆÉ Ã¯ ²Ý Èð µÃ ûë Ä´ ëÛ ëÙ ÃÌ ÀÁ ´Ò ëÚ ¿Û ÎÊ ÏÀ ëÜ ëç ĵ ëæ ûì ëã ëë ëä ëà Äü ëß ëÝ Í¡ »ð ëá ëÞ ûî ëå ½ô ¸Á Âú ËÅ ±Ú °â Æ¥ ëé ëè Ææ ëí ëâ ëì ëî ¸¬ ëê ¹Ö ¼Õ ëï ÍØ ëò ëõ ëó ɵ ëð ¶à ëô ëö ëú ë÷ ëù ëø ûï ëû ¼± ëý ëü Éè ì¡ ·Ù ëþ ì¢ ì£ µÄ æÁ ¾ù ì¤ ¸î ì¥ ûð ì¦ »¾ ÚÎ ì§ ì¨ ½² ì© ìª ì« ì¬ ì­ Ã« ì® ì° ì¯ Æ¦ ì± Ë­ ì² ì³ ì´ ìµ ÆÚ ¾Ý ì¶ ¹ë Ю ì· ì¸ É¿ ì¹ ìÁ ìº ì¼ ì» ì½ ËÆ ì¾ ì¿ ìÀ ì ³­ Äç Éé ºâ ¹× ÉÏ ²ß ÈÎ ìÅ ´Ó ÀÕ ìÄ ìÉ Ãù Ìã ìÇ ìÈ µ® ìÊ Çã Âß Èñ Ž ìÆ ËÇ ²ì ìÌ Ï¨ Ä ÏÅ »ñ ìË Â± ìÜ Á¨ Æø ÉÐ ìÏ »¿ »ò ¾Þ Çå ¸­ ìÎ ìÍ Éê ¼Á ÅÒ ûñ ûò ìÑ ìÒ ¹Ø ìÐ ìÓ ìÔ ìÖ Â£ ìÕ ´æ ìØ ì× ìÙ ûó ìÛ ìÝ ìÞ ÀÖ ¼Ï ìß ³Ò ìà Áö ìá ìâ Éë ûô µ¯ ìã Ķ ±Û ìä ¼ñ ¿ö ­ ìç ìæ ìå ìí ìë ìè ìê ìé ìì µ÷ ìð À× ìñ ¸Ù ìî ìï Ï© Ä· Á© ìò ìõ ìó ìô Í٠Ƨ ìø ìö ì÷ ìù í© ìü ìý ìû ìú Äý í¡ í¥ í¢ ìþ í£ í¤ í« í¦ ÀØ í¨ íª í§ í­ ½³ í¬ í® í¯ í² í± í° í´ í³ Ìö í¶ íµ í· í¸ íº í¹ ¿È í» ¶í í¼ í¾ í¿ íÀ í½ íÁ ¼Ö í µ° ·³ ûö ¸® íà Æð ž íÄ íÇ ¼´ íÆ íÅ ·Ú íÈ ³Ó íÊ ºÜ íÉ íÒ íÌ íÎ Êå íË íÍ íÑ íÏ µ± íÐ íÓ ÇÚ ÎØ ½´ íÔ Í¢ íÖ íÕ íÙ ÍÁ íØ ³í í× íÜ íÛ íÚ Å² íÝ íÞ íß ¹ì ·¥ íà íá íâ ¿É íã ¼­ íä íå Ò¡ Ñþ íæ åð íç ä ¿« ÇÀ íè ÊÕ ÄÔ ¹þ é ±ª Ëø ¿× ·Þ ¶á ÊÖ íé íë íê ²à Æö íì Ç÷ ų íí ½Ò íï Ì íþ íñ íò ÄÉ Âà Á÷ ƨ íð µÕ íù íö î¥ Æ© Ãà íó Äþ ÅÓ íô íø ¿à Çç ÄÌ À í÷ ® ¤ íõ °© Ï¢ íú Âá ½µ ¿Ê íü íû °ï íý ɯ î§ ÆÛ ¿ë ÃÙ ¶ø î¦ Í· ±¿ Ê× ²á î¡ î¢ î£ î¤ Æ» ã °ã î¨ î© ô£ ½ îª ±ó ÁÌ ¸¯ ÍÚ ûù î« Å¬ Áø ¼× î¬ î¯ ½å î­ Á« Áª °ä ÎË î± Èò î³ î² î° ãä ´Ô íî îµ î´ î¶ Í¸ Æá Ë® î· ¼Ù î¸ î¹ îº Å¡ °ê ¹Ù Ϻ î¾ ûú ·´ î» î¼ Éô ³Ô ͹ ¶¿ ÅÔ î¿ îÀ ûü îÁ ûý Å¢ îà î ÆÓ îÄ ½¶ ¼à ÇÛ Ãñ ¼ò ¿ì îÅ îÆ ¿Ý îÇ îÈ îÉ Íï ½· îË îÊ ¹Ú ¹ó »À îÎ ½æ îÍ îÌ Âé ¸ï Àà Ȱ ½¹ îÏ ¾ß îÒ îÐ îÑ îÔ îÓ ¾ú îÕ îÖ î× ÈÐ ºÓ ¼á îØ î٠Τ ½Å Ìî ÎÌ îÚ ¶â îÛ ü¡ Å£ ûþ îÞ ³ø ¿Ë ü¢ îÜ îÝ Äà ü¥ ü¦ ËÕ ¶ü ü£ ü¤ îà îá îß îã ü§ ü© Æß ³Ã ü¨ îç îä îæ îâ ïÏ îå Îë ¸Ú ü° üª ü¬ îï ü« Å´ îê îí îë îð ü­ îñ ü¯ îé ü® îö ±ô îè È­ îì ¾à ü± ¹Û ü³ ü´ ËÈ ¶ä ½Æ Ƽ ù¤ Á­ îô îî îó Ìà ĸ îõ îò ü² Á¬ îù îø î÷ ü¸ ˯ ü¼ üº ü¶ ü· ü» ½û üµ îú Êß ±Ô ÉÆ Ãò µø ùª îü ü¿ ¹Ý ü üÄ »¬ îû ¿í ¿î ï¡ ï£ üà üÁ ¾û ü¾ ï¢ ï¤ ü½ ¶Ó ÉÅ ¼â Ï£ îþ ºø Ï¿ ï¦ ï¥ ï§ îý ù£ Æé ÅÕ Ä× ï¬ üÆ ÃÃ ï¨ ï© ·­ ï« üÅ ¸° ïª ¾á ³ù ï° º¿ Áù ÄÊ üÇ ³» ï® ï¯ ÄÃ ï­ ï± ï· üÈ ïº ï¹ Å­ ï² ï³ ï¶ ï¸ üÉ ¶À ï» ïµ ï´ üÊ ï¿ ïÀ ïÁ ï¾ ï½ ¾â ƪ ï¼ ïÅ ïà üË ïÄ ïÂ Âø ïÆ ïÇ ïÉ üÌ üÍ ´Õ ïÈ Ìú ïÔ ïÊ ïÍ ïË ïÌ ïÎ ïÐ ïÑ ïÒ ïÕ ïÓ ïÖ ïØ ï× Ä¹ Ìç ïÙ Á® ïÚ ÊÄ ïÛ ³« ±¼ ´× üÎ ´Ö ïÜ ïÝ ïÞ ïß ïà ´Ø ³Õ ¹Þ ȶ ïâ ïá ïã ±Ü ïæ ïå ïä ïç ïê °Ç ïè ïì ïë ïî ïí ïï Æ® ïð ïñ ïó ïò Éì ïô ïõ ºå ïö ï÷ ËÉ ÁË °¤ ÂË ïø Éí ïû ïù ¹ß ïú ¸Â ÊÅ ïý ð¡ ïþ 𢠱¡ ¿Ø ½ü ´Ù ð£ Çæ 𥠱¢ ð¤ ÄÄ ÎÍ Æ« ïü Φ ¸± ÍÛ ¶ù δ ·¨ Ââ ç¡ ð¦ ³¬ ¿ï ³Ö ð¨ ð© ð§ ·ä ºÝ ¾ã üÑ ±£ ÎÙ ð« î® ðª üÒ ð® ð¬ ð­ ð¯ ð° Îì ð± ð² ÀÉ È» ¿ý ´ç ͺ ²í ½¸ ¸Û ðµ ð´ »ó ð¶ ð³ »¨ ðº ê­ ÒÖ ¿÷ ð¸ Î¥ Æñ ±« Àã ¼¶ Ê· ±À Îí Íë ð» ÅÅ ¼û ð¼ ð½ ¿Ì ð¾ Îî ð¹ ðÀ ð ðÁ ð¿ ðà ðÄ Áú ²â ðŠ̸ ðÆ ðÇ Ïª üÓ Û± ðÈ üÔ ðÉ ðÊ ðÎ üÕ ðË ðÌ ðÍ ðÏ üÖ ü× üØ ÀÄ üÙ Ì÷ ÀÅ ðÐ Èó ðÑ óÓ ÌÌ ðÒ ðÓ ðÔ ³× ðÖ ¿Ù ð× ·¤ ðØ ðÜ ðÚ ðÛ ³ó ðÙ ðÝ ðÞ °È ðß ðà ¾ä ðá µÇ ðä ðã ðâ ëñ ÊÜ ðå ðæ ðç ðè ðé ðê ´Ú ðë ðì Ç£ ðî ²» ðñ ð𠱤 ¶Á ÊÇ Äº º¢ ¹à ½ç ¿Ü ðó ðò Í ´è ÈÒ ÆÜ ¿ü ÎÎ ·Û ðö ðõ ËË Æ¬ ±Ð ð÷ ðô ÉÑ Íê ðø ðù ðû Âê ³Û ³Ü ðú ´é ¸² üÚ ´ê Å¿ Îà üÛ ¸Ü ðü ðý ðþ ñ¡ ñ£ ñ¢ É÷ ñ¤ ñ¥ ñ¦ ñ§ ñ© ñ¨ ñª Èô æÌ ¿© µ² ñ« ñ¬ Ò¬ Ý» ÈÓ °û °» »ô ˰ ¾þ ñ­ Ìß ñ® ÍÜ ±Â »Á ñ¯ ²î ñ° ñ± ñ³ ñ´ ñ¶ ñ² ñµ üÞ ´Û ñ· ñ¸ ñ¹ ñº ñ» ñ½ ñ¼ ñ¿ ñ ñ¾ ñÀ ñÁ ñà ¶Â ¼ó ñÄ ñÅ ¹á üà ñÆ ³¾ ÇÏ ñÇ ñÈ ÃÚ Æë ñÉ Çý ÂÌ ±Ø ¶î ¶ï Ãó ñÎ ¶ð ²ï ñÍ ñË ñÌ ñÊ ñØ ñÏ ñÐ ñÑ ñÒ ñÔ ñÓ ½Ù ñÕ ñ× µ³ ñÖ Áû ¸³ ñÙ ÂÍ ñÚ Æ­ ñÛ ñà ñÞ ñÝ ñß ñÜ ñâ üá ñá ñä ¶Ã ñã ñå ñæ ñè ñç ñé ñë ñê ¹ü ñì ñí ³¼ ñî ñï ¿ñ ñð ññ ñò ñó ¹â üâ üã ñô ñõ ñö ñ÷ ñø ȱ ñú ɦ ñû ñù ñý ñü ñþ ò¡ ò¢ ò£ ò¤ ò¥ ò¦ ò§ ò¨ ò© òª ò« ò¬ ò­ ò® ݵ ò¯ äø µ´ ³¡ º² ò± ò° Ì¥ ò³ ò´ ò² òµ Ëâ ò¶ µû Ï¥ üå ò· üä ò¹ °¾ üæ òº Ê« ò¸ ò» ò¼ ò½ ò¾ ò¿ Ëî »­ ºú Á¯ üç òÀ òà üè òÁ òÄ ¸ñ ò òÅ òÆ òÇ òË »ª Âä òÌ òÉ òÈ òÊ ·ß òÐ òÏ òÎ °³ üé òÚ òÖ ò× òÓ òÙ òÕ ³â ÏÌ òØ òÔ òÒ òÑ òÜ òß òÞ òÝ ÉÉ òÛ °ó òà òâ ³ï òÍ ±· òä òã òá í Ëð ÎÚ òå òæ òç òè òé Ä» òê È· òï òë òì ˱ ÌÄ ÆÐ òð òñ ƾ òî òí ²ª òù òø ±õ òö òõ òó ³û òò ¼² ²© ¹ã òü òû òú ò÷ òý òþ ó¥ ó¤ ó¦ ±­ ó¡ ó¢ ¹ô ̹ ó£ üë ˲ ó« üê ó§ ó¬ ó© ó¨ ·Ü ó­ ó® ó¯ óª òô ó° Äá ó´ óµ ó³ ó² ó¸ ó± ó¶ ó· óº ó¹ ó¼ ó½ ó¾ ÏÉ ó» Âë ºí ó¿ üí óÀ óÁ ó óà ¸´ óÄ óÅ ¼¯ óÆ óÇ óÈ óÉ óÌ óÊ Ï¼ óË Îï óÍ ÎÛ óÎ Çþ óÏ óÑ óÒ óÐ ¹í ÌÍ Ëã Ö÷ Ýà Ëû ²« óÔ µÐ óÕ óÖ ó× üî ¹õ óØ àÔ ÌÛ Âã óÙ óÛ óÚ óÜ óÝ óÞ óß óà óá óâ óã óä óå óæ óç óè Ť ¸Ý óê ÁÍ óë óì É¡ óí óî ã· ìÚ ðí óï óð óò óó óô Îð óñ óõ óö óø ó÷ óú óû óù ζ óü óý ãÔ óþ úÆ üÏ ùÔ ùß ùà ùõ ú¾ úÎ úÐ úû û£ ûº û ûà ûÄ ûÆ ûÊ ûÍ ûÖ ûá ûã ûä ûí ûõ û÷ ûø ûû ü¹ üÀ üÐ üÜ üÝ üß üì ¡ª üþ ¡ô ¡ð ¡ó ¡õ üý ¡Ê ¡Ë ¡ö ¡Ü ¡¤ ¡Ý ¡¥ ¡¿ £° £± £² £³ £´ £µ £¶ £· £¸ £¹ ¡§ ¡¨ ¡ã ¡á ¡ä ¡© ¡÷ £Á £Â £Ã £Ä £Å £Æ £Ç £È £É £Ê £Ë £Ì £Í £Î £Ï £Ð £Ñ £Ò £Ó £Ô £Õ £Ö £× £Ø £Ù £Ú ¡Î ¡À ¡Ï ¡° ¡² ¡® £á £â £ã £ä £å £æ £ç £è £é £ê £ë £ì £í £î £ï £ð £ñ £ò £ó £ô £õ £ö £÷ £ø £ù £ú ¡Ð ¡Ã ¡Ñ ¡Á Ž¡ Ž¢ Ž£ ޤ Ž¥ ަ ާ ލ Ž© Žª Ž« ެ Ž­ Ž® ޝ ް ޱ ޲ ޳ Ž´ ޵ ޶ Ž· ޏ ޹ Žº Ž» ޼ ޽ ޾ Ž¿ ŽÀ ŽÁ ŽÂ ŽÃ ŽÄ ŽÅ ŽÆ ŽÇ ŽÈ ŽÉ ŽÊ ŽË ŽÌ ŽÍ ŽÎ ŽÏ ŽÐ ŽÑ ŽÒ ŽÓ ŽÔ ŽÕ ŽÖ Ž× ŽØ ŽÙ ŽÚ ŽÛ ŽÜ ŽÝ ŽÞ Žß ¡ñ ¡ò ¢Ì ¡± üü ¡ï ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢¹ ¢Â ¢Ã ¢Ä ¢ë ¢ì ¢í ¢î ¢ï ¢ð ¢ñ ¦á ¦â ¦ã ¦ä ¦å ¦ç ¦é ¦ê ¦ì ¦ñ ¦ò ¦ó ¦ô ¦õ ¦ö ¦÷ ¦ø ¦ù ¦ú ¦û ¦ü §Â §Ã §Ä §Å §Æ §Ç §È §É §Ê §Ë §Ì §Í §Î §ò §ó §ô §õ §ö §÷ §ø §ù §ú §û §ü §ý §þ ©¡ ©¢ ©¤ ©¦ ©¨ ©© ©« ©¬ ©­ ©¯ ©° ©Á ©Â ©Ã ©Ä ©Å ©Æ ©Ç ©È ©É ©Ê ©Ë ©Ì ©Í ©Î ©Ï ©Ð ª¡ ª¢ ª£ ª¤ ª¥ ª¦ ª§ ª¨ ª© ªª ª« ª¬ ª­ ª® ª¯ ª° ª± ª² ª³ ª´ ªµ ª¶ ª· ª¸ ªº ª» ª¼ ª½ ª¾ ª¿ ªÀ ªÁ ªÂ ªÃ ªÄ ªÅ ªÆ ªÇ ªÈ ªÉ ªÊ ªË ªÌ ªÍ ªÎ ªÏ ªÐ ªÑ ªÒ ªÓ ªÔ ªÕ ªÖ ª× ªØ ªÙ ªÚ ªÛ ªÜ ªÝ ªÞ ªß ªà ªá ªâ ªã ªä ªå ªæ ªç ªè ªé ªê ªë ªì ªí ªî ªï ªð ªñ ªò ªó ªô ªõ ªö ª÷ «¡ «¢ «£ «¤ «¥ «¦ «§ «¨ «© «ª «« «¬ «­ «® «¯ «° «± «² «³ «´ «µ «¶ «· «¸ «¹ «º «» «½ «¾ «¿ «À «Á «Â «Ã «Å «Æ «Ç «È «É «Ê «Ë «Ì «Í «Î «Ï «Ð «Ñ «Ò «Ó «Ô «Õ «Ö «× «Ø «Ù «Ú «Û «Ü «Ý «Þ «ß «à «á «â «ã «ä «å «æ «ç «è «é «ê «ë «ì «í «î «ï «ð «ñ «ò «ó «ô «õ «ö «÷ °¡ °¢ °£ °¤ °¥ °¦ °§ °¨ °© °ª °« °¬ °­ °® °¯ °° °± °² °³ °´ °µ °¶ °· °¸ °¹ °º °» °¼ °½ °¾ °¿ °À °Á °Â °Ã °Ä °Å °Æ °Ç °È °É °Ê °Ë °Ì °Í °Î °Ï °Ð °Ñ °Ò °Ó °Ô °Õ °Ö °× °Ø °Ù °Ú °Û °Ü °Ý °Þ °ß °à °á °â °ã °ä °å °æ °ç °è °é °ê °ë °ì °í °î °ï °ð °ñ °ò °ó °ô °õ °ö °÷ °ø °ù °ú °û °ü °ý °þ ±¡ ±¢ ±£ ±¤ ±¥ ±¦ ±§ ±¨ ±© ±ª ±« ±¬ ±­ ±® ±¯ ±° ±± ±² ±³ ±´ ±µ ±¶ ±· ±¸ ±¹ ±º ±» ±¼ ±½ ±¾ ±¿ ±À ±Á ±Â ±Ã ±Ä ±Å ±Æ ±Ç ±È ±É ±Ê ±Ë ±Ì ±Í ±Î ±Ï ±Ð ±Ñ ±Ò ±Ó ±Ô ±Õ ±Ö ±× ±Ø ±Ù ±Ú ±Û ±Ü ±Ý ±Þ ±ß ±à ±á ±â ±ã ±ä ±å ±æ ±ç ±è ±é ±ê ±ë ±ì ±í ±î ±ï ±ð ±ñ ±ò ±ó ±ô ±õ ±ö ±÷ ±ø ±ù ±ú ±û ±ü ±ý ±þ ²¡ ²¢ ²£ ²¤ ²¥ ²¦ ²§ ²¨ ²© ²ª ²« ²¬ ²­ ²® ²¯ ²° ²± ²² ²³ ²´ ²µ ²¶ ²· ²¸ ²¹ ²º ²» ²¼ ²½ ²¾ ²¿ ²À ²Á ²Â ²Ã ²Ä ²Å ²Æ ²Ç ²È ²É ²Ê ²Ë ²Ì ²Í ²Î ²Ï ²Ð ²Ñ ²Ò ²Ó ²Ô ²Õ ²Ö ²× ²Ø ²Ù ²Ú ²Û ²Ü ²Ý ²Þ ²ß ²à ²á ²â ²ã ²ä ²å ²æ ²ç ²è ²é ²ê ²ë ²ì ²í ²î ²ï ²ð ²ñ ²ò ²ó ²ô ²õ ²ö ²÷ ²ø ²ù ²ú ²û ²ü ²ý ²þ ³¡ ³¢ ³£ ³¤ ³¥ ³¦ ³§ ³¨ ³© ³ª ³« ³¬ ³­ ³® ³¯ ³° ³± ³² ³³ ³´ ³µ ³¶ ³· ³¸ ³¹ ³º ³» ³¼ ³½ ³¾ ³¿ ³À ³Á ³Â ³Ã ³Ä ³Å ³Æ ³Ç ³È ³É ³Ê ³Ë ³Ì ³Í ³Î ³Ï ³Ð ³Ñ ³Ò ³Ó ³Ô ³Õ ³Ö ³× ³Ø ³Ù ³Ú ³Û ³Ü ³Ý ³Þ ³ß ³à ³á ³â ³ã ³ä ³å ³æ ³ç ³è ³é ³ê ³ë ³ì ³í ³î ³ï ³ð ³ñ ³ò ³ó ³ô ³õ ³ö ³÷ ³ø ³ù ³ú ³û ³ü ³ý ³þ ´¡ ´¢ ´£ ´¤ ´¥ ´¦ ´§ ´¨ ´© ´ª ´« ´¬ ´­ ´® ´¯ ´° ´± ´² ´³ ´´ ´µ ´¶ ´· ´¸ ´¹ ´º ´» ´¼ ´½ ´¾ ´¿ ´À ´Á ´Â ´Ã ´Ä ´Å ´Æ ´Ç ´È ´É ´Ê ´Ë ´Ì ´Í ´Î ´Ï ´Ð ´Ñ ´Ò ´Ó ´Ô ´Õ ´Ö ´× ´Ø ´Ù ´Ú ´Û ´Ü ´Ý ´Þ ´ß ´à ´á ´â ´ã ´ä ´å ´æ ´ç ´è ´é ´ê ´ë ´ì ´í ´î ´ï ´ð ´ñ ´ò ´ó ´ô ´õ ´ö ´÷ ´ø ´ù ´ú ´û ´ü ´ý ´þ µ¡ µ¢ µ£ µ¤ µ¥ µ¦ µ§ µ¨ µ© µª µ« µ¬ µ­ µ® µ¯ µ° µ± µ² µ³ µ´ µµ µ¶ µ· µ¸ µ¹ µº µ» µ¼ µ½ µ¾ µ¿ µÀ µÁ µÂ µÃ µÄ µÅ µÆ µÇ µÈ µÉ µÊ µË µÌ µÍ µÎ µÏ µÐ µÑ µÒ µÓ µÔ µÕ µÖ µ× µØ µÙ µÚ µÛ µÜ µÝ µÞ µß µà µá µâ µã µä µå µæ µç µè µé µê µë µì µí µî µï µð µñ µò µó µô µõ µö µ÷ µø µù µú µû µü µý µþ ¶¡ ¶¢ ¶£ ¶¤ ¶¥ ¶¦ ¶§ ¶¨ ¶© ¶ª ¶« ¶¬ ¶­ ¶® ¶¯ ¶° ¶± ¶² ¶³ ¶´ ¶µ ¶¶ ¶· ¶¸ ¶¹ ¶º ¶» ¶¼ ¶½ ¶¾ ¶¿ ¶À ¶Á ¶Â ¶Ã ¶Ä ¶Å ¶Æ ¶Ç ¶È ¶É ¶Ê ¶Ë ¶Ì ¶Í ¶Î ¶Ï ¶Ð ¶Ñ ¶Ò ¶Ó ¶Ô ¶Õ ¶Ö ¶× ¶Ø ¶Ù ¶Ú ¶Û ¶Ü ¶Ý ¶Þ ¶ß ¶à ¶á ¶â ¶ã ¶ä ¶å ¶æ ¶ç ¶è ¶é ¶ê ¶ë ¶ì ¶í ¶î ¶ï ¶ð ¶ñ ¶ò ¶ó ¶ô ¶õ ¶ö ¶÷ ¶ø ¶ù ¶ú ¶û ¶ü ¶ý ¶þ ·¡ ·¢ ·£ ·¤ ·¥ ·¦ ·§ ·¨ ·© ·ª ·« ·¬ ·­ ·® ·¯ ·° ·± ·² ·³ ·´ ·µ ·¶ ·· ·¸ ·¹ ·º ·» ·¼ ·½ ·¾ ·¿ ·À ·Á ·Â ·Ã ·Ä ·Å ·Æ ·Ç ·È ·É ·Ê ·Ë ·Ì ·Í ·Î ·Ï ·Ð ·Ñ ·Ò ·Ó ·Ô ·Õ ·Ö ·× ·Ø ·Ù ·Ú ·Û ·Ü ·Ý ·Þ ·ß ·à ·á ·â ·ã ·ä ·å ·æ ·ç ·è ·é ·ê ·ë ·ì ·í ·î ·ï ·ð ·ñ ·ò ·ó ·ô ·õ ·ö ·÷ ·ø ·ù ·ú ·û ·ü ·ý ·þ ¸¡ ¸¢ ¸£ ¸¤ ¸¥ ¸¦ ¸§ ¸¨ ¸© ¸ª ¸« ¸¬ ¸­ ¸® ¸¯ ¸° ¸± ¸² ¸³ ¸´ ¸µ ¸¶ ¸· ¸¸ ¸¹ ¸º ¸» ¸¼ ¸½ ¸¾ ¸¿ ¸À ¸Á ¸Â ¸Ã ¸Ä ¸Å ¸Æ ¸Ç ¸È ¸É ¸Ê ¸Ë ¸Ì ¸Í ¸Î ¸Ï ¸Ð ¸Ñ ¸Ò ¸Ó ¸Ô ¸Õ ¸Ö ¸× ¸Ø ¸Ù ¸Ú ¸Û ¸Ü ¸Ý ¸Þ ¸ß ¸à ¸á ¸â ¸ã ¸ä ¸å ¸æ ¸ç ¸è ¸é ¸ê ¸ë ¸ì ¸í ¸î ¸ï ¸ð ¸ñ ¸ò ¸ó ¸ô ¸õ ¸ö ¸÷ ¸ø ¸ù ¸ú ¸û ¸ü ¸ý ¸þ ¹¡ ¹¢ ¹£ ¹¤ ¹¥ ¹¦ ¹§ ¹¨ ¹© ¹ª ¹« ¹¬ ¹­ ¹® ¹¯ ¹° ¹± ¹² ¹³ ¹´ ¹µ ¹¶ ¹· ¹¸ ¹¹ ¹º ¹» ¹¼ ¹½ ¹¾ ¹¿ ¹À ¹Á ¹Â ¹Ã ¹Ä ¹Å ¹Æ ¹Ç ¹È ¹É ¹Ê ¹Ë ¹Ì ¹Í ¹Î ¹Ï ¹Ð ¹Ñ ¹Ò ¹Ó ¹Ô ¹Õ ¹Ö ¹× ¹Ø ¹Ù ¹Ú ¹Û ¹Ü ¹Ý ¹Þ ¹ß ¹à ¹á ¹â ¹ã ¹ä ¹å ¹æ ¹ç ¹è ¹é ¹ê ¹ë ¹ì ¹í ¹î ¹ï ¹ð ¹ñ ¹ò ¹ó ¹ô ¹õ ¹ö ¹÷ ¹ø ¹ù ¹ú ¹û ¹ü ¹ý ¹þ º¡ º¢ º£ º¤ º¥ º¦ º§ º¨ º© ºª º« º¬ º­ º® º¯ º° º± º² º³ º´ ºµ º¶ º· º¸ º¹ ºº º» º¼ º½ º¾ º¿ ºÀ ºÁ ºÂ ºÃ ºÄ ºÅ ºÆ ºÇ ºÈ ºÉ ºÊ ºË ºÌ ºÍ ºÎ ºÏ ºÐ ºÑ ºÒ ºÓ ºÔ ºÕ ºÖ º× ºØ ºÙ ºÚ ºÛ ºÜ ºÝ ºÞ ºß ºà ºá ºâ ºã ºä ºå ºæ ºç ºè ºé ºê ºë ºì ºí ºî ºï ºð ºñ ºò ºó ºô ºõ ºö º÷ ºø ºù ºú ºû ºü ºý ºþ »¡ »¢ »£ »¤ »¥ »¦ »§ »¨ »© »ª »« »¬ »­ »® »¯ »° »± »² »³ »´ »µ »¶ »· »¸ »¹ »º »» »¼ »½ »¾ »¿ »À »Á »Â »Ã »Ä »Å »Æ »Ç »È »É »Ê »Ë »Ì »Í »Î »Ï »Ð »Ñ »Ò »Ó »Ô »Õ »Ö »× »Ø »Ù »Ú »Û »Ü »Ý »Þ »ß »à »á »â »ã »ä »å »æ »ç »è »é »ê »ë »ì »í »î »ï »ð »ñ »ò »ó »ô »õ »ö »÷ »ø »ù »ú »û »ü »ý »þ ¼¡ ¼¢ ¼£ ¼¤ ¼¥ ¼¦ ¼§ ¼¨ ¼© ¼ª ¼« ¼¬ ¼­ ¼® ¼¯ ¼° ¼± ¼² ¼³ ¼´ ¼µ ¼¶ ¼· ¼¸ ¼¹ ¼º ¼» ¼¼ ¼½ ¼¾ ¼¿ ¼À ¼Á ¼Â ¼Ã ¼Ä ¼Å ¼Æ ¼Ç ¼È ¼É ¼Ê ¼Ë ¼Ì ¼Í ¼Î ¼Ï ¼Ð ¼Ñ ¼Ò ¼Ó ¼Ô ¼Õ ¼Ö ¼× ¼Ø ¼Ù ¼Ú ¼Û ¼Ü ¼Ý ¼Þ ¼ß ¼à ¼á ¼â ¼ã ¼ä ¼å ¼æ ¼ç ¼è ¼é ¼ê ¼ë ¼ì ¼í ¼î ¼ï ¼ð ¼ñ ¼ò ¼ó ¼ô ¼õ ¼ö ¼÷ ¼ø ¼ù ¼ú ¼û ¼ü ¼ý ¼þ ½¡ ½¢ ½£ ½¤ ½¥ ½¦ ½§ ½¨ ½© ½ª ½« ½¬ ½­ ½® ½¯ ½° ½± ½² ½³ ½´ ½µ ½¶ ½· ½¸ ½¹ ½º ½» ½¼ ½½ ½¾ ½¿ ½À ½Á ½Â ½Ã ½Ä ½Å ½Æ ½Ç ½È ½É ½Ê ½Ë ½Ì ½Í ½Î ½Ï ½Ð ½Ñ ½Ò ½Ó ½Ô ½Õ ½Ö ½× ½Ø ½Ù ½Ú ½Û ½Ü ½Ý ½Þ ½ß ½à ½á ½â ½ã ½ä ½å ½æ ½ç ½è ½é ½ê ½ë ½ì ½í ½î ½ï ½ð ½ñ ½ò ½ó ½ô ½õ ½ö ½÷ ½ø ½ù ½ú ½û ½ü ½ý ½þ ¾¡ ¾¢ ¾£ ¾¤ ¾¥ ¾¦ ¾§ ¾¨ ¾© ¾ª ¾« ¾¬ ¾­ ¾® ¾¯ ¾° ¾± ¾² ¾³ ¾´ ¾µ ¾¶ ¾· ¾¸ ¾¹ ¾º ¾» ¾¼ ¾½ ¾¾ ¾¿ ¾À ¾Á ¾Â ¾Ã ¾Ä ¾Å ¾Æ ¾Ç ¾È ¾É ¾Ê ¾Ë ¾Ì ¾Í ¾Î ¾Ï ¾Ð ¾Ñ ¾Ò ¾Ó ¾Ô ¾Õ ¾Ö ¾× ¾Ø ¾Ù ¾Ú ¾Û ¾Ü ¾Ý ¾Þ ¾ß ¾à ¾á ¾â ¾ã ¾ä ¾å ¾æ ¾ç ¾è ¾é ¾ê ¾ë ¾ì ¾í ¾î ¾ï ¾ð ¾ñ ¾ò ¾ó ¾ô ¾õ ¾ö ¾÷ ¾ø ¾ù ¾ú ¾û ¾ü ¾ý ¾þ ¿¡ ¿¢ ¿£ ¿¤ ¿¥ ¿¦ ¿§ ¿¨ ¿© ¿ª ¿« ¿¬ ¿­ ¿® ¿¯ ¿° ¿± ¿² ¿³ ¿´ ¿µ ¿¶ ¿· ¿¸ ¿¹ ¿º ¿» ¿¼ ¿½ ¿¾ ¿¿ ¿À ¿Á ¿Â ¿Ã ¿Ä ¿Å ¿Æ ¿Ç ¿È ¿É ¿Ê ¿Ë ¿Ì ¿Í ¿Î ¿Ï ¿Ð ¿Ñ ¿Ò ¿Ó ¿Ô ¿Õ ¿Ö ¿× ¿Ø ¿Ù ¿Ú ¿Û ¿Ü ¿Ý ¿Þ ¿ß ¿à ¿á ¿â ¿ã ¿ä ¿å ¿æ ¿ç ¿è ¿é ¿ê ¿ë ¿ì ¿í ¿î ¿ï ¿ð ¿ñ ¿ò ¿ó ¿ô ¿õ ¿ö ¿÷ ¿ø ¿ù ¿ú ¿û ¿ü ¿ý ¿þ À¡ À¢ À£ À¤ À¥ À¦ À§ À¨ À© Àª À« À¬ À­ À® À¯ À° À± À² À³ À´ Àµ À¶ À· À¸ À¹ Àº À» À¼ À½ À¾ À¿ ÀÀ ÀÁ À Àà ÀÄ ÀÅ ÀÆ ÀÇ ÀÈ ÀÉ ÀÊ ÀË ÀÌ ÀÍ ÀÎ ÀÏ ÀÐ ÀÑ ÀÒ ÀÓ ÀÔ ÀÕ ÀÖ À× ÀØ ÀÙ ÀÚ ÀÛ ÀÜ ÀÝ ÀÞ Àß Àà Àá Àâ Àã Àä Àå Àæ Àç Àè Àé Àê Àë Àì Àí Àî Àï Àð Àñ Àò Àó Àô Àõ Àö À÷ Àø Àù Àú Àû Àü Àý Àþ Á¡ Á¢ Á£ Á¤ Á¥ Á¦ Á§ Á¨ Á© Áª Á« Á¬ Á­ Á® Á¯ Á° Á± Á² Á³ Á´ Áµ Á¶ Á· Á¸ Á¹ Áº Á» Á¼ Á½ Á¾ Á¿ ÁÀ ÁÁ Á Áà ÁÄ ÁÅ ÁÆ ÁÇ ÁÈ ÁÉ ÁÊ ÁË ÁÌ ÁÍ ÁÎ ÁÏ ÁÐ ÁÑ ÁÒ ÁÓ ÁÔ ÁÕ ÁÖ Á× ÁØ ÁÙ ÁÚ ÁÛ ÁÜ ÁÝ ÁÞ Áß Áà Áá Áâ Áã Áä Áå Áæ Áç Áè Áé Áê Áë Áì Áí Áî Áï Áð Áñ Áò Áó Áô Áõ Áö Á÷ Áø Áù Áú Áû Áü Áý Áþ ¡ ¢ £ ¤ Â¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ ÂÀ ÂÁ  Âà ÂÄ ÂÅ ÂÆ ÂÇ ÂÈ ÂÉ ÂÊ ÂË ÂÌ ÂÍ ÂÎ ÂÏ ÂÐ ÂÑ ÂÒ ÂÓ ÂÔ ÂÕ ÂÖ Â× ÂØ ÂÙ ÂÚ ÂÛ ÂÜ ÂÝ ÂÞ Âß Âà Âá Ââ Âã Âä Âå Âæ Âç Âè Âé Âê Âë Âì Âí Âî Âï Âð Âñ Âò Âó Âô Âõ Âö Â÷ Âø Âù Âú Âû Âü Âý Âþ á â ã ä Ã¥ æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ ÃÀ ÃÁ àÃà ÃÄ ÃÅ ÃÆ ÃÇ ÃÈ ÃÉ ÃÊ ÃË ÃÌ ÃÍ ÃÎ ÃÏ ÃÐ ÃÑ ÃÒ ÃÓ ÃÔ ÃÕ ÃÖ Ã× ÃØ ÃÙ ÃÚ ÃÛ ÃÜ ÃÝ ÃÞ Ãß Ãà Ãá Ãâ Ãã Ãä Ãå Ãæ Ãç Ãè Ãé Ãê Ãë Ãì Ãí Ãî Ãï Ãð Ãñ Ãò Ãó Ãô Ãõ Ãö Ã÷ Ãø Ãù Ãú Ãû Ãü Ãý Ãþ Ä¡ Ä¢ Ä£ Ĥ Ä¥ Ħ ħ Ĩ Ä© Ī Ä« Ĭ Ä­ Ä® į İ ı IJ ij Ä´ ĵ Ķ Ä· ĸ Ĺ ĺ Ä» ļ Ľ ľ Ä¿ ÄÀ ÄÁ Ä Äà ÄÄ ÄÅ ÄÆ ÄÇ ÄÈ ÄÉ ÄÊ ÄË ÄÌ ÄÍ ÄÎ ÄÏ ÄÐ ÄÑ ÄÒ ÄÓ ÄÔ ÄÕ ÄÖ Ä× ÄØ ÄÙ ÄÚ ÄÛ ÄÜ ÄÝ ÄÞ Äß Äà Äá Äâ Äã Ää Äå Äæ Äç Äè Äé Äê Äë Äì Äí Äî Äï Äð Äñ Äò Äó Äô Äõ Äö Ä÷ Äø Äù Äú Äû Äü Äý Äþ Å¡ Å¢ Å£ Ť Å¥ Ŧ ŧ Ũ Å© Ū Å« Ŭ Å­ Å® ů Ű ű Ų ų Å´ ŵ Ŷ Å· Ÿ Ź ź Å» ż Ž ž Å¿ ÅÀ ÅÁ Å Åà ÅÄ ÅÅ ÅÆ ÅÇ ÅÈ ÅÉ ÅÊ ÅË ÅÌ ÅÍ ÅÎ ÅÏ ÅÐ ÅÑ ÅÒ ÅÓ ÅÔ ÅÕ ÅÖ Å× ÅØ ÅÙ ÅÚ ÅÛ ÅÜ ÅÝ ÅÞ Åß Åà Åá Åâ Åã Åä Åå Åæ Åç Åè Åé Åê Åë Åì Åí Åî Åï Åð Åñ Åò Åó Åô Åõ Åö Å÷ Åø Åù Åú Åû Åü Åý Åþ Æ¡ Æ¢ Æ£ Ƥ Æ¥ Ʀ Ƨ ƨ Æ© ƪ Æ« Ƭ Æ­ Æ® Ư ư Ʊ Ʋ Ƴ Æ´ Ƶ ƶ Æ· Ƹ ƹ ƺ Æ» Ƽ ƽ ƾ Æ¿ ÆÀ ÆÁ ÆÂ ÆÃ ÆÄ ÆÅ ÆÆ ÆÇ ÆÈ ÆÉ ÆÊ ÆË ÆÌ ÆÍ ÆÎ ÆÏ ÆÐ ÆÑ ÆÒ ÆÓ ÆÔ ÆÕ ÆÖ Æ× ÆØ ÆÙ ÆÚ ÆÛ ÆÜ ÆÝ ÆÞ Æß Æà Æá Æâ Æã Æä Æå Ææ Æç Æè Æé Æê Æë Æì Æí Æî Æï Æð Æñ Æò Æó Æô Æõ Æö Æ÷ Æø Æù Æú Æû Æü Æý Æþ Ç¡ Ç¢ Ç£ Ǥ Ç¥ Ǧ ǧ Ǩ Ç© Ǫ Ç« Ǭ Ç­ Ç® ǯ ǰ DZ Dz dz Ç´ ǵ Ƕ Ç· Ǹ ǹ Ǻ Ç» Ǽ ǽ Ǿ Ç¿ ÇÀ ÇÁ Ç Çà ÇÄ ÇÅ ÇÆ ÇÇ ÇÈ ÇÉ ÇÊ ÇË ÇÌ ÇÍ ÇÎ ÇÏ ÇÐ ÇÑ ÇÒ ÇÓ ÇÔ ÇÕ ÇÖ Ç× ÇØ ÇÙ ÇÚ ÇÛ ÇÜ ÇÝ ÇÞ Çß Çà Çá Çâ Çã Çä Çå Çæ Çç Çè Çé Çê Çë Çì Çí Çî Çï Çð Çñ Çò Çó Çô Çõ Çö Ç÷ Çø Çù Çú Çû Çü Çý Çþ È¡ È¢ È£ Ȥ È¥ Ȧ ȧ Ȩ È© Ȫ È« Ȭ È­ È® ȯ Ȱ ȱ Ȳ ȳ È´ ȵ ȶ È· ȸ ȹ Ⱥ È» ȼ Ƚ Ⱦ È¿ ÈÀ ÈÁ È Èà ÈÄ ÈÅ ÈÆ ÈÇ ÈÈ ÈÉ ÈÊ ÈË ÈÌ ÈÍ ÈÎ ÈÏ ÈÐ ÈÑ ÈÒ ÈÓ ÈÔ ÈÕ ÈÖ È× ÈØ ÈÙ ÈÚ ÈÛ ÈÜ ÈÝ ÈÞ Èß Èà Èá Èâ Èã Èä Èå Èæ Èç Èè Èé Èê Èë Èì Èí Èî Èï Èð Èñ Èò Èó Èô Èõ Èö È÷ Èø Èù Èú Èû Èü Èý Èþ É¡ É¢ É£ ɤ É¥ ɦ ɧ ɨ É© ɪ É« ɬ É­ É® ɯ ɰ ɱ ɲ ɳ É´ ɵ ɶ É· ɸ ɹ ɺ É» ɼ ɽ ɾ É¿ ÉÀ ÉÁ É Éà ÉÄ ÉÅ ÉÆ ÉÇ ÉÈ ÉÉ ÉÊ ÉË ÉÌ ÉÍ ÉÎ ÉÏ ÉÐ ÉÑ ÉÒ ÉÓ ÉÔ ÉÕ ÉÖ É× ÉØ ÉÙ ÉÚ ÉÛ ÉÜ ÉÝ ÉÞ Éß Éà Éá Éâ Éã Éä Éå Éæ Éç Éè Éé Éê Éë Éì Éí Éî Éï Éð Éñ Éò Éó Éô Éõ Éö É÷ Éø Éù Éú Éû Éü Éý Éþ Ê¡ Ê¢ Ê£ ʤ Ê¥ ʦ ʧ ʨ Ê© ʪ Ê« ʬ Ê­ Ê® ʯ ʰ ʱ ʲ ʳ Ê´ ʵ ʶ Ê· ʸ ʹ ʺ Ê» ʼ ʽ ʾ Ê¿ ÊÀ ÊÁ Ê Êà ÊÄ ÊÅ ÊÆ ÊÇ ÊÈ ÊÉ ÊÊ ÊË ÊÌ ÊÍ ÊÎ ÊÏ ÊÐ ÊÑ ÊÒ ÊÓ ÊÔ ÊÕ ÊÖ Ê× ÊØ ÊÙ ÊÚ ÊÛ ÊÜ ÊÝ ÊÞ Êß Êà Êá Êâ Êã Êä Êå Êæ Êç Êè Êé Êê Êë Êì Êí Êî Êï Êð Êñ Êò Êó Êô Êõ Êö Ê÷ Êø Êù Êú Êû Êü Êý Êþ Ë¡ Ë¢ Ë£ ˤ Ë¥ ˦ ˧ ˨ Ë© ˪ Ë« ˬ Ë­ Ë® ˯ ˰ ˱ ˲ ˳ Ë´ ˵ ˶ Ë· ˸ ˹ ˺ Ë» ˼ ˽ ˾ Ë¿ ËÀ ËÁ Ë Ëà ËÄ ËÅ ËÆ ËÇ ËÈ ËÉ ËÊ ËË ËÌ ËÍ ËÎ ËÏ ËÐ ËÑ ËÒ ËÓ ËÔ ËÕ ËÖ Ë× ËØ ËÙ ËÚ ËÛ ËÜ ËÝ ËÞ Ëß Ëà Ëá Ëâ Ëã Ëä Ëå Ëæ Ëç Ëè Ëé Ëê Ëë Ëì Ëí Ëî Ëï Ëð Ëñ Ëò Ëó Ëô Ëõ Ëö Ë÷ Ëø Ëù Ëú Ëû Ëü Ëý Ëþ Ì¡ Ì¢ Ì£ ̤ Ì¥ ̦ ̧ ̨ Ì© ̪ Ì« ̬ Ì­ Ì® ̯ ̰ ̱ ̲ ̳ Ì´ ̵ ̶ Ì· ̸ ̹ ̺ Ì» ̼ ̽ ̾ Ì¿ ÌÀ ÌÁ Ì Ìà ÌÄ ÌÅ ÌÆ ÌÇ ÌÈ ÌÉ ÌÊ ÌË ÌÌ ÌÍ ÌÎ ÌÏ ÌÐ ÌÑ ÌÒ ÌÓ ÌÔ ÌÕ ÌÖ Ì× ÌØ ÌÙ ÌÚ ÌÛ ÌÜ ÌÝ ÌÞ Ìß Ìà Ìá Ìâ Ìã Ìä Ìå Ìæ Ìç Ìè Ìé Ìê Ìë Ìì Ìí Ìî Ìï Ìð Ìñ Ìò Ìó Ìô Ìõ Ìö Ì÷ Ìø Ìù Ìú Ìû Ìü Ìý Ìþ Í¡ Í¢ Í£ ͤ Í¥ ͦ ͧ ͨ Í© ͪ Í« ͬ Í­ Í® ͯ Ͱ ͱ Ͳ ͳ Í´ ͵ Ͷ Í· ͸ ͹ ͺ Í» ͼ ͽ ; Í¿ ÍÀ ÍÁ Í Íà ÍÄ ÍÅ ÍÆ ÍÇ ÍÈ ÍÉ ÍÊ ÍË ÍÌ ÍÍ ÍÎ ÍÏ ÍÐ ÍÑ ÍÒ ÍÓ ÍÔ ÍÕ ÍÖ Í× ÍØ ÍÙ ÍÚ ÍÛ ÍÜ ÍÝ ÍÞ Íß Íà Íá Íâ Íã Íä Íå Íæ Íç Íè Íé Íê Íë Íì Íí Íî Íï Íð Íñ Íò Íó Íô Íõ Íö Í÷ Íø Íù Íú Íû Íü Íý Íþ Ρ ΢ Σ Τ Î¥ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο ÎÀ ÎÁ ΠÎà ÎÄ ÎÅ ÎÆ ÎÇ ÎÈ ÎÉ ÎÊ ÎË ÎÌ ÎÍ ÎÎ ÎÏ ÎÐ ÎÑ ÎÒ ÎÓ ÎÔ ÎÕ ÎÖ Î× ÎØ ÎÙ ÎÚ ÎÛ ÎÜ ÎÝ ÎÞ Îß Îà Îá Îâ Îã Îä Îå Îæ Îç Îè Îé Îê Îë Îì Îí Îî Îï Îð Îñ Îò Îó Îô Îõ Îö Î÷ Îø Îù Îú Îû Îü Îý Îþ Ï¡ Ï¢ Ï£ Ϥ Ï¥ Ϧ ϧ Ϩ Ï© Ϫ Ï« Ϭ Ï­ Ï® ϯ ϰ ϱ ϲ ϳ Ï´ ϵ ϶ Ï· ϸ Ϲ Ϻ Ï» ϼ Ͻ Ͼ Ï¿ ÏÀ ÏÁ Ï Ïà ÏÄ ÏÅ ÏÆ ÏÇ ÏÈ ÏÉ ÏÊ ÏË ÏÌ ÏÍ ÏÎ ÏÏ ÏÐ ÏÑ ÏÒ ÏÓ ÏÔ ÏÕ ÏÖ Ï× ÏØ ÏÙ ÏÚ ÏÛ ÏÜ ÏÝ ÏÞ Ïß Ïà Ïá Ïâ Ïã Ïä Ïå Ïæ Ïç Ïè Ïé Ïê Ïë Ïì Ïí Ïî Ïï Ïð Ïñ Ïò Ïó Ïô Ïõ Ïö Ï÷ Ïø Ïù Ïú Ïû Ïü Ïý Ïþ С Т У Ф Ð¥ Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ж з и й к л м н о п ÐÀ ÐÁ РÐà ÐÄ ÐÅ ÐÆ ÐÇ ÐÈ ÐÉ ÐÊ ÐË ÐÌ ÐÍ ÐÎ ÐÏ ÐÐ ÐÑ ÐÒ ÐÓ ÐÔ ÐÕ ÐÖ Ð× ÐØ ÐÙ ÐÚ ÐÛ ÐÜ ÐÝ ÐÞ Ðß Ðà Ðá Ðâ Ðã Ðä Ðå Ðæ Ðç Ðè Ðé Ðê Ðë Ðì Ðí Ðî Ðï Ðð Ðñ Ðò Ðó Ðô Ðõ Ðö Ð÷ Ðø Ðù Ðú Ðû Ðü Ðý Ðþ Ñ¡ Ñ¢ Ñ£ Ѥ Ñ¥ Ѧ ѧ Ѩ Ñ© Ѫ Ñ« Ѭ Ñ­ Ñ® ѯ Ѱ ѱ Ѳ ѳ Ñ´ ѵ Ѷ Ñ· Ѹ ѹ Ѻ Ñ» Ѽ ѽ Ѿ Ñ¿ ÑÀ ÑÁ Ñ Ñà ÑÄ ÑÅ ÑÆ ÑÇ ÑÈ ÑÉ ÑÊ ÑË ÑÌ ÑÍ ÑÎ ÑÏ ÑÐ ÑÑ ÑÒ ÑÓ ÑÔ ÑÕ ÑÖ Ñ× ÑØ ÑÙ ÑÚ ÑÛ ÑÜ ÑÝ ÑÞ Ñß Ñà Ñá Ñâ Ñã Ñä Ñå Ñæ Ñç Ñè Ñé Ñê Ñë Ñì Ñí Ñî Ñï Ñð Ññ Ñò Ñó Ñô Ñõ Ñö Ñ÷ Ñø Ñù Ñú Ñû Ñü Ñý Ñþ Ò¡ Ò¢ Ò£ Ò¤ Ò¥ Ò¦ Ò§ Ò¨ Ò© Òª Ò« Ò¬ Ò­ Ò® Ò¯ Ò° Ò± Ò² Ò³ Ò´ Òµ Ò¶ Ò· Ò¸ Ò¹ Òº Ò» Ò¼ Ò½ Ò¾ Ò¿ ÒÀ ÒÁ Ò Òà ÒÄ ÒÅ ÒÆ ÒÇ ÒÈ ÒÉ ÒÊ ÒË ÒÌ ÒÍ ÒÎ ÒÏ ÒÐ ÒÑ ÒÒ ÒÓ ÒÔ ÒÕ ÒÖ Ò× ÒØ ÒÙ ÒÚ ÒÛ ÒÜ ÒÝ ÒÞ Òß Òà Òá Òâ Òã Òä Òå Òæ Òç Òè Òé Òê Òë Òì Òí Òî Òï Òð Òñ Òò Òó Òô Òõ Òö Ò÷ Òø Òù Òú Òû Òü Òý Òþ Ó¡ Ó¢ Ó£ Ó¤ Ó¥ Ó¦ Ó§ Ó¨ Ó© Óª Ó« Ó¬ Ó­ Ó® Ó¯ Ó° Ó± Ó² Ó³ Ó´ Óµ Ó¶ Ó· Ó¸ Ó¹ Óº Ó» Ó¼ Ó½ Ó¾ Ó¿ ÓÀ ÓÁ Ó Óà ÓÄ ÓÅ ÓÆ ÓÇ ÓÈ ÓÉ ÓÊ ÓË ÓÌ ÓÍ ÓÎ ÓÏ ÓÐ ÓÑ ÓÒ ÓÓ ÓÔ ÓÕ ÓÖ Ó× ÓØ ÓÙ ÓÚ ÓÛ ÓÜ ÓÝ ÓÞ Óß Óà Óá Óâ Óã Óä Óå Óæ Óç Óè Óé Óê Óë Óì Óí Óî Óï Óð Óñ Óò Óó Óô Óõ Óö Ó÷ Óø Óù Óú Óû Óü Óý Óþ Ô¡ Ô¢ Ô£ Ô¤ Ô¥ Ô¦ Ô§ Ô¨ Ô© Ôª Ô« Ô¬ Ô­ Ô® Ô¯ Ô° Ô± Ô² Ô³ Ô´ Ôµ Ô¶ Ô· Ô¸ Ô¹ Ôº Ô» Ô¼ Ô½ Ô¾ Ô¿ ÔÀ ÔÁ Ô Ôà ÔÄ ÔÅ ÔÆ ÔÇ ÔÈ ÔÉ ÔÊ ÔË ÔÌ ÔÍ ÔÎ ÔÏ ÔÐ ÔÑ ÔÒ ÔÓ ÔÔ ÔÕ ÔÖ Ô× ÔØ ÔÙ ÔÚ ÔÛ ÔÜ ÔÝ ÔÞ Ôß Ôà Ôá Ôâ Ôã Ôä Ôå Ôæ Ôç Ôè Ôé Ôê Ôë Ôì Ôí Ôî Ôï Ôð Ôñ Ôò Ôó Ôô Ôõ Ôö Ô÷ Ôø Ôù Ôú Ôû Ôü Ôý Ôþ Õ¡ Õ¢ Õ£ Õ¤ Õ¥ Õ¦ Õ§ Õ¨ Õ© Õª Õ« Õ¬ Õ­ Õ® Õ¯ Õ° Õ± Õ² Õ³ Õ´ Õµ Õ¶ Õ· Õ¸ Õ¹ Õº Õ» Õ¼ Õ½ Õ¾ Õ¿ ÕÀ ÕÁ Õ Õà ÕÄ ÕÅ ÕÆ ÕÇ ÕÈ ÕÉ ÕÊ ÕË ÕÌ ÕÍ ÕÎ ÕÏ ÕÐ ÕÑ ÕÒ ÕÓ ÕÔ ÕÕ ÕÖ Õ× ÕØ ÕÙ ÕÚ ÕÛ ÕÜ ÕÝ ÕÞ Õß Õà Õá Õâ Õã Õä Õå Õæ Õç Õè Õé Õê Õë Õì Õí Õî Õï Õð Õñ Õò Õó Õô Õõ Õö Õ÷ Õø Õù Õú Õû Õü Õý Õþ Ö¡ Ö¢ Ö£ Ö¤ Ö¥ Ö¦ Ö§ Ö¨ Ö© Öª Ö« Ö¬ Ö­ Ö® Ö¯ Ö° Ö± Ö² Ö³ Ö´ Öµ Ö¶ Ö· Ö¸ Ö¹ Öº Ö» Ö¼ Ö½ Ö¾ Ö¿ ÖÀ ÖÁ Ö Öà ÖÄ ÖÅ ÖÆ ÖÇ ÖÈ ÖÉ ÖÊ ÖË ÖÌ ÖÍ ÖÎ ÖÏ ÖÐ ÖÑ ÖÒ ÖÓ ÖÔ ÖÕ ÖÖ Ö× ÖØ ÖÙ ÖÚ ÖÛ ÖÜ ÖÝ ÖÞ Öß Öà Öá Öâ Öã Öä Öå Öæ Öç Öè Öé Öê Öë Öì Öí Öî Öï Öð Öñ Öò Öó Öô Öõ Öö Ö÷ Öø Öù Öú Öû Öü Öý Öþ ס ×¢ ×£ פ ×¥ צ ×§ ר ש ת ׫ ׬ ×­ ×® ׯ ×° ×± ײ ׳ ×´ ×µ ×¶ ×· ׸ ×¹ ׺ ×» ×¼ ×½ ×¾ ׿ ×À ×Á × ×à ×Ä ×Šׯ ×Ç ×È ×É ×Ê ×Ë ×Ì ×Í ×Î ×Ï ×Ð ×Ñ ×Ò ×Ó ×Ô ×Õ ×Ö ×× ×Ø ×Ù ×Ú ×Û ×Ü ×Ý ×Þ ×ß ×à ×á ×â ×ã ×ä ×å ׿ ×ç ×è ×é ×ê ×ë ×ì ×í ×î ×ï ×ð ×ñ ×ò ×ó ×ô ×õ ×ö ×÷ ×ø ×ù ×ú ×û ×ü ×ý ×þ Ø¡ Ø¢ Ø£ ؤ Ø¥ ئ ا ب Ø© ت Ø« ج Ø­ Ø® د ذ ر ز س Ø´ ص ض Ø· ظ ع غ Ø» ؼ ؽ ؾ Ø¿ ØÀ ØÁ ØÂ ØÃ ØÄ ØÅ ØÆ ØÇ ØÈ ØÉ ØÊ ØË ØÌ ØÍ ØÎ ØÏ ØÐ ØÑ ØÒ ØÓ ØÔ ØÕ ØÖ Ø× ØØ ØÙ ØÚ ØÛ ØÜ ØÝ ØÞ Øß Øà Øá Øâ Øã Øä Øå Øæ Øç Øè Øé Øê Øë Øì Øí Øî Øï Øð Øñ Øò Øó Øô Øõ Øö Ø÷ Øø Øù Øú Øû Øü Øý Øþ Ù¡ Ù¢ Ù£ Ù¤ Ù¥ Ù¦ Ù§ Ù¨ Ù© Ùª Ù« Ù¬ Ù­ Ù® Ù¯ Ù° Ù± Ù² Ù³ Ù´ Ùµ Ù¶ Ù· Ù¸ Ù¹ Ùº Ù» Ù¼ Ù½ Ù¾ Ù¿ ÙÀ ÙÁ Ù Ùà ÙÄ ÙÅ ÙÆ ÙÇ ÙÈ ÙÉ ÙÊ ÙË ÙÌ ÙÍ ÙÎ ÙÏ ÙÐ ÙÑ ÙÒ ÙÓ ÙÔ ÙÕ ÙÖ Ù× ÙØ ÙÙ ÙÚ ÙÛ ÙÜ ÙÝ ÙÞ Ùß Ùà Ùá Ùâ Ùã Ùä Ùå Ùæ Ùç Ùè Ùé Ùê Ùë Ùì Ùí Ùî Ùï Ùð Ùñ Ùò Ùó Ùô Ùõ Ùö Ù÷ Ùø Ùù Ùú Ùû Ùü Ùý Ùþ Ú¡ Ú¢ Ú£ Ú¤ Ú¥ Ú¦ Ú§ Ú¨ Ú© Úª Ú« Ú¬ Ú­ Ú® Ú¯ Ú° Ú± Ú² Ú³ Ú´ Úµ Ú¶ Ú· Ú¸ Ú¹ Úº Ú» Ú¼ Ú½ Ú¾ Ú¿ ÚÀ ÚÁ Ú Úà ÚÄ ÚÅ ÚÆ ÚÇ ÚÈ ÚÉ ÚÊ ÚË ÚÌ ÚÍ ÚÎ ÚÏ ÚÐ ÚÑ ÚÒ ÚÓ ÚÔ ÚÕ ÚÖ Ú× ÚØ ÚÙ ÚÚ ÚÛ ÚÜ ÚÝ ÚÞ Úß Úà Úá Úâ Úã Úä Úå Úæ Úç Úè Úé Úê Úë Úì Úí Úî Úï Úð Úñ Úò Úó Úô Úõ Úö Ú÷ Úø Úù Úú Úû Úü Úý Úþ Û¡ Û¢ Û£ Û¤ Û¥ Û¦ Û§ Û¨ Û© Ûª Û« Û¬ Û­ Û® Û¯ Û° Û± Û² Û³ Û´ Ûµ Û¶ Û· Û¸ Û¹ Ûº Û» Û¼ Û½ Û¾ Û¿ ÛÀ ÛÁ Û Ûà ÛÄ ÛÅ ÛÆ ÛÇ ÛÈ ÛÉ ÛÊ ÛË ÛÌ ÛÍ ÛÎ ÛÏ ÛÐ ÛÑ ÛÒ ÛÓ ÛÔ ÛÕ ÛÖ Û× ÛØ ÛÙ ÛÚ ÛÛ ÛÜ ÛÝ ÛÞ Ûß Ûà Ûá Ûâ Ûã Ûä Ûå Ûæ Ûç Ûè Ûé Ûê Ûë Ûì Ûí Ûî Ûï Ûð Ûñ Ûò Ûó Ûô Ûõ Ûö Û÷ Ûø Ûù Ûú Ûû Ûü Ûý Ûþ Ü¡ Ü¢ Ü£ ܤ Ü¥ ܦ ܧ ܨ Ü© ܪ Ü« ܬ Ü­ Ü® ܯ ܰ ܱ ܲ ܳ Ü´ ܵ ܶ Ü· ܸ ܹ ܺ Ü» ܼ ܽ ܾ Ü¿ ÜÀ ÜÁ Ü Üà ÜÄ ÜÅ ÜÆ ÜÇ ÜÈ ÜÉ ÜÊ ÜË ÜÌ ÜÍ ÜÎ ÜÏ ÜÐ ÜÑ ÜÒ ÜÓ ÜÔ ÜÕ ÜÖ Ü× ÜØ ÜÙ ÜÚ ÜÛ ÜÜ ÜÝ ÜÞ Üß Üà Üá Üâ Üã Üä Üå Üæ Üç Üè Üé Üê Üë Üì Üí Üî Üï Üð Üñ Üò Üó Üô Üõ Üö Ü÷ Üø Üù Üú Üû Üü Üý Üþ Ý¡ Ý¢ Ý£ ݤ Ý¥ ݦ ݧ ݨ Ý© ݪ Ý« ݬ Ý­ Ý® ݯ ݰ ݱ ݲ ݳ Ý´ ݵ ݶ Ý· ݸ ݹ ݺ Ý» ݼ ݽ ݾ Ý¿ ÝÀ ÝÁ Ý Ýà ÝÄ ÝÅ ÝÆ ÝÇ ÝÈ ÝÉ ÝÊ ÝË ÝÌ ÝÍ ÝÎ ÝÏ ÝÐ ÝÑ ÝÒ ÝÓ ÝÔ ÝÕ ÝÖ Ý× ÝØ ÝÙ ÝÚ ÝÛ ÝÜ ÝÝ ÝÞ Ýß Ýà Ýá Ýâ Ýã Ýä Ýå Ýæ Ýç Ýè Ýé Ýê Ýë Ýì Ýí Ýî Ýï Ýð Ýñ Ýò Ýó Ýô Ýõ Ýö Ý÷ Ýø Ýù Ýú Ýû Ýü Ýý Ýþ Þ¡ Þ¢ Þ£ Þ¤ Þ¥ Þ¦ Þ§ Þ¨ Þ© Þª Þ« Þ¬ Þ­ Þ® Þ¯ Þ° Þ± Þ² Þ³ Þ´ Þµ Þ¶ Þ· Þ¸ Þ¹ Þº Þ» Þ¼ Þ½ Þ¾ Þ¿ ÞÀ ÞÁ Þ Þà ÞÄ ÞÅ ÞÆ ÞÇ ÞÈ ÞÉ ÞÊ ÞË ÞÌ ÞÍ ÞÎ ÞÏ ÞÐ ÞÑ ÞÒ ÞÓ ÞÔ ÞÕ ÞÖ Þ× ÞØ ÞÙ ÞÚ ÞÛ ÞÜ ÞÝ ÞÞ Þß Þà Þá Þâ Þã Þä Þå Þæ Þç Þè Þé Þê Þë Þì Þí Þî Þï Þð Þñ Þò Þó Þô Þõ Þö Þ÷ Þø Þù Þú Þû Þü Þý Þþ ß¡ ߢ ߣ ߤ ߥ ߦ ß§ ߨ ß© ߪ ß« ߬ ß­ ß® ߯ ß° ß± ß² ß³ ß´ ßµ ß¶ ß· ߸ ß¹ ߺ ß» ß¼ ß½ ß¾ ß¿ ßÀ ßÁ ß ßà ßÄ ßŠ߯ ßÇ ßÈ ßÉ ßÊ ßË ßÌ ßÍ ßÎ ßÏ ßÐ ßÑ ßÒ ßÓ ßÔ ßÕ ßÖ ß× ßØ ßÙ ßÚ ßÛ ßÜ ßÝ ßÞ ßß ßà ßá ßâ ßã ßä ßå ßæ ßç ßè ßé ßê ßë ßì ßí ßî ßï ßð ßñ ßò ßó ßô ßõ ßö ß÷ ßø ßù ßú ßû ßü ßý ßþ ࡠࢠ࣠ठॠঠৠਠ੠ઠૠଠୠ஠௠ఠౠಠೠഠൠච෠ภ๠ຠ໠༠འྠ࿠àÀ àÁ à àà àÄ àÅ àÆ àÇ àÈ àÉ àÊ àË àÌ àÍ àÎ àÏ àÐ àÑ àÒ àÓ àÔ àÕ àÖ à× àØ àÙ àÚ àÛ àÜ àÝ àÞ àß àà àá àâ àã àä àå àæ àç àè àé àê àë àì àí àî àï àð àñ àò àó àô àõ àö à÷ àø àù àú àû àü àý àþ ᡠᢠᣠᤠᥠᦠ᧠ᨠ᩠᪠᫠ᬠ᭠ᮠᯠᰠᱠᲠ᳠ᴠᵠᶠᷠḠṠẠỠἠὠᾠῠáÀ áÁ á áà áÄ áÅ áÆ áÇ áÈ áÉ áÊ áË áÌ áÍ áÎ áÏ áÐ áÑ áÒ áÓ áÔ áÕ áÖ á× áØ áÙ áÚ áÛ áÜ áÝ áÞ áß áà áá áâ áã áä áå áæ áç áè áé áê áë áì áí áî áï áð áñ áò áó áô áõ áö á÷ áø áù áú áû áü áý áþ ⡠⢠⣠⤠⥠⦠⧠⨠⩠⪠⫠⬠⭠⮠⯠ⰠⱠⲠⳠⴠⵠⶠⷠ⸠⹠⺠⻠⼠⽠⾠⿠âÀ âÁ â âà âÄ âÅ âÆ âÇ âÈ âÉ âÊ âË âÌ âÍ âÎ âÏ âÐ âÑ âÒ âÓ âÔ âÕ âÖ â× âØ âÙ âÚ âÛ âÜ âÝ âÞ âß âà âá ââ âã âä âå âæ âç âè âé âê âë âì âí âî âï âð âñ âò âó âô âõ âö â÷ âø âù âú âû âü âý âþ 㡠㢠㣠㤠㥠㦠㧠㨠㩠㪠㫠㬠㭠㮠㯠㰠㱠㲠㳠㴠㵠㶠㷠㸠㹠㺠㻠㼠㽠㾠㿠ãÀ ãÁ ã ãà ãÄ ãÅ ãÆ ãÇ ãÈ ãÉ ãÊ ãË ãÌ ãÍ ãÎ ãÏ ãÐ ãÑ ãÒ ãÓ ãÔ ãÕ ãÖ ã× ãØ ãÙ ãÚ ãÛ ãÜ ãÝ ãÞ ãß ãà ãá ãâ ãã ãä ãå ãæ ãç ãè ãé ãê ãë ãì ãí ãî ãï ãð ãñ ãò ãó ãô ãõ ãö ã÷ ãø ãù ãú ãû ãü ãý ãþ ä¡ ä¢ ä£ ä¤ ä¥ ä¦ ä§ ä¨ ä© äª ä« ä¬ ä­ ä® ä¯ ä° ä± ä² ä³ ä´ äµ ä¶ ä· ä¸ ä¹ äº ä» ä¼ ä½ ä¾ ä¿ äÀ äÁ ä äà äÄ äÅ äÆ äÇ äÈ äÉ äÊ äË äÌ äÍ äÎ äÏ äÐ äÑ äÒ äÓ äÔ äÕ äÖ ä× äØ äÙ äÚ äÛ äÜ äÝ äÞ äß äà äá äâ äã ää äå äæ äç äè äé äê äë äì äí äî äï äð äñ äò äó äô äõ äö ä÷ äø äù äú äû äü äý äþ å¡ å¢ å£ å¤ å¥ å¦ å§ å¨ å© åª å« å¬ å­ å® å¯ å° å± å² å³ å´ åµ å¶ å· å¸ å¹ åº å» å¼ å½ å¾ å¿ åÀ åÁ å åà åÄ åÅ åÆ åÇ åÈ åÉ åÊ åË åÌ åÍ åÎ åÏ åÐ åÑ åÒ åÓ åÔ åÕ åÖ å× åØ åÙ åÚ åÛ åÜ åÝ åÞ åß åà åá åâ åã åä åå åæ åç åè åé åê åë åì åí åî åï åð åñ åò åó åô åõ åö å÷ åø åù åú åû åü åý åþ æ¡ æ¢ æ£ æ¤ æ¥ æ¦ æ§ æ¨ æ© æª æ« æ¬ æ­ æ® æ¯ æ° æ± æ² æ³ æ´ æµ æ¶ æ· æ¸ æ¹ æº æ» æ¼ æ½ æ¾ æ¿ æÀ æÁ æÂ æÃ æÄ æÅ æÆ æÇ æÈ æÉ æÊ æË æÌ æÍ æÎ æÏ æÐ æÑ æÒ æÓ æÔ æÕ æÖ æ× æØ æÙ æÚ æÛ æÜ æÝ æÞ æß æà æá æâ æã æä æå ææ æç æè æé æê æë æì æí æî æï æð æñ æò æó æô æõ æö æ÷ æø æù æú æû æü æý æþ ç¡ ç¢ ç£ ç¤ ç¥ ç¦ ç§ ç¨ ç© çª ç« ç¬ ç­ ç® ç¯ ç° ç± ç² ç³ ç´ çµ ç¶ ç· ç¸ ç¹ çº ç» ç¼ ç½ ç¾ ç¿ çÀ çÁ ç çà çÄ çÅ çÆ çÇ çÈ çÉ çÊ çË çÌ çÍ çÎ çÏ çÐ çÑ çÒ çÓ çÔ çÕ çÖ ç× çØ çÙ çÚ çÛ çÜ çÝ çÞ çß çà çá çâ çã çä çå çæ çç çè çé çê çë çì çí çî çï çð çñ çò çó çô çõ çö ç÷ çø çù çú çû çü çý çþ è¡ è¢ è£ è¤ è¥ è¦ è§ è¨ è© èª è« è¬ è­ è® è¯ è° è± è² è³ è´ èµ è¶ è· è¸ è¹ èº è» è¼ è½ è¾ è¿ èÀ èÁ è èà èÄ èÅ èÆ èÇ èÈ èÉ èÊ èË èÌ èÍ èÎ èÏ èÐ èÑ èÒ èÓ èÔ èÕ èÖ è× èØ èÙ èÚ èÛ èÜ èÝ èÞ èß èà èá èâ èã èä èå èæ èç èè èé èê èë èì èí èî èï èð èñ èò èó èô èõ èö è÷ èø èù èú èû èü èý èþ é¡ é¢ é£ é¤ é¥ é¦ é§ é¨ é© éª é« é¬ é­ é® é¯ é° é± é² é³ é´ éµ é¶ é· é¸ é¹ éº é» é¼ é½ é¾ é¿ éÀ éÁ é éà éÄ éÅ éÆ éÇ éÈ éÉ éÊ éË éÌ éÍ éÎ éÏ éÐ éÑ éÒ éÓ éÔ éÕ éÖ é× éØ éÙ éÚ éÛ éÜ éÝ éÞ éß éà éá éâ éã éä éå éæ éç éè éé éê éë éì éí éî éï éð éñ éò éó éô éõ éö é÷ éø éù éú éû éü éý éþ ê¡ ê¢ ê£ ê¤ ê¥ ê¦ ê§ ê¨ ê© êª ê« ê¬ ê­ ê® ê¯ ê° ê± ê² ê³ ê´ êµ ê¶ ê· ê¸ ê¹ êº ê» ê¼ ê½ ê¾ ê¿ êÀ êÁ ê êà êÄ êÅ êÆ êÇ êÈ êÉ êÊ êË êÌ êÍ êÎ êÏ êÐ êÑ êÒ êÓ êÔ êÕ êÖ ê× êØ êÙ êÚ êÛ êÜ êÝ êÞ êß êà êá êâ êã êä êå êæ êç êè êé êê êë êì êí êî êï êð êñ êò êó êô êõ êö ê÷ êø êù êú êû êü êý êþ ë¡ ë¢ ë£ ë¤ ë¥ ë¦ ë§ ë¨ ë© ëª ë« ë¬ ë­ ë® ë¯ ë° ë± ë² ë³ ë´ ëµ ë¶ ë· ë¸ ë¹ ëº ë» ë¼ ë½ ë¾ ë¿ ëÀ ëÁ ë ëà ëÄ ëÅ ëÆ ëÇ ëÈ ëÉ ëÊ ëË ëÌ ëÍ ëÎ ëÏ ëÐ ëÑ ëÒ ëÓ ëÔ ëÕ ëÖ ë× ëØ ëÙ ëÚ ëÛ ëÜ ëÝ ëÞ ëß ëà ëá ëâ ëã ëä ëå ëæ ëç ëè ëé ëê ëë ëì ëí ëî ëï ëð ëñ ëò ëó ëô ëõ ëö ë÷ ëø ëù ëú ëû ëü ëý ëþ ì¡ ì¢ ì£ ì¤ ì¥ ì¦ ì§ ì¨ ì© ìª ì« ì¬ ì­ ì® ì¯ ì° ì± ì² ì³ ì´ ìµ ì¶ ì· ì¸ ì¹ ìº ì» ì¼ ì½ ì¾ ì¿ ìÀ ìÁ ì ìà ìÄ ìÅ ìÆ ìÇ ìÈ ìÉ ìÊ ìË ìÌ ìÍ ìÎ ìÏ ìÐ ìÑ ìÒ ìÓ ìÔ ìÕ ìÖ ì× ìØ ìÙ ìÚ ìÛ ìÜ ìÝ ìÞ ìß ìà ìá ìâ ìã ìä ìå ìæ ìç ìè ìé ìê ìë ìì ìí ìî ìï ìð ìñ ìò ìó ìô ìõ ìö ì÷ ìø ìù ìú ìû ìü ìý ìþ í¡ í¢ í£ í¤ í¥ í¦ í§ í¨ í© íª í« í¬ í­ í® í¯ í° í± í² í³ í´ íµ í¶ í· í¸ í¹ íº í» í¼ í½ í¾ í¿ íÀ íÁ í íà íÄ íÅ íÆ íÇ íÈ íÉ íÊ íË íÌ íÍ íÎ íÏ íÐ íÑ íÒ íÓ íÔ íÕ íÖ í× íØ íÙ íÚ íÛ íÜ íÝ íÞ íß íà íá íâ íã \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars-cseucpkdfmtjapanese.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars-cseucpkdfmtjapanese.html.headers new file mode 100644 index 00000000000..799f7c53a5e --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars-cseucpkdfmtjapanese.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=cseucpkdfmtjapanese diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars-x-euc-jp.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars-x-euc-jp.html new file mode 100755 index 00000000000..266b2de3fa6 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars-x-euc-jp.html @@ -0,0 +1 @@ +x-euc-jp characters\ ¡ø ¡¯ ¡ë ¡Þ ¡­ ¢ù ¡ß ¡à ¦¡ ¦¢ ¦£ ¦¤ ¦¥ ¦¦ ¦§ ¦¨ ¦© ¦ª ¦« ¦¬ ¦­ ¦® ¦¯ ¦° ¦± ¦² ¦³ ¦´ ¦µ ¦¶ ¦· ¦¸ ¦Á ¦Â ¦Ã ¦Ä ¦Å ¦Æ ¦Ç ¦È ¦É ¦Ê ¦Ë ¦Ì ¦Í ¦Î ¦Ï ¦Ð ¦Ñ ¦Ò ¦Ó ¦Ô ¦Õ ¦Ö ¦× ¦Ø §§ §¡ §¢ §£ §¤ §¥ §¦ §¨ §© §ª §« §¬ §­ §® §¯ §° §± §² §³ §´ §µ §¶ §· §¸ §¹ §º §» §¼ §½ §¾ §¿ §À §Á §Ñ §Ò §Ó §Ô §Õ §Ö §Ø §Ù §Ú §Û §Ü §Ý §Þ §ß §à §á §â §ã §ä §å §æ §ç §è §é §ê §ë §ì §í §î §ï §ð §ñ §× ¡¾ ¡½ ¡Æ ¡Ç ¡È ¡É ¢÷ ¢ø ¡Å ¡Ä ¢ó ¡ì ¡í ¢¨ ~ ¡î ­â ­ä ¢ò ­µ ­¶ ­· ­¸ ­¹ ­º ­» ­¼ ­½ ­¾ üñ üò üó üô üõ üö ü÷ üø üù üú ¢« ¢¬ ¢ª ¢­ ¢Í ¢Î ¢Ï ¢ß ¢Ð ¢à ¢º ¢» ­ô ¡Ý ¢å ¢ç ¡ç ­ø ¢Ü ¡Â ¢Ê ¢Ë ¢Á ¢À ¢é ¢ê ­ó ¡è ¢è ¢æ ¢â ¡â ¢á ¡å ¡æ ¢ã ¢ä ¢¾ ¢¿ ¢¼ ¢½ ¢Ý ­ù ¢Þ ­¡ ­¢ ­£ ­¤ ­¥ ­¦ ­§ ­¨ ­© ­ª ­« ­¬ ­­ ­® ­¯ ­° ­± ­² ­³ ­´ ¨¡ ¨¬ ¨¢ ¨­ ¨£ ¨® ¨¤ ¨¯ ¨¦ ¨± ¨¥ ¨° ¨§ ¨¼ ¨· ¨² ¨© ¨¾ ¨¹ ¨´ ¨¨ ¨¸ ¨½ ¨³ ¨ª ¨º ¨¿ ¨µ ¨« ¨» ¨À ¨¶ ¢£ ¢¢ ¢¥ ¢¤ ¢§ ¢¦ ¢¡ ¡þ ¡û ¡ý ¡ü ¢þ ¡ú ¡ù ¡ê ¡é ¢ö ¢õ ¢ô ¡¡ ¡¢ ¡£ ¡· ¡¹ ¡º ¡» ¡Ò ¡Ó ¡Ô ¡Õ ¡Ö ¡× ¡Ø ¡Ù ¡Ú ¡Û ¢© ¢® ¡Ì ¡Í ­à ­á ¤¡ ¤¢ ¤£ ¤¤ ¤¥ ¤¦ ¤§ ¤¨ ¤© ¤ª ¤« ¤¬ ¤­ ¤® ¤¯ ¤° ¤± ¤² ¤³ ¤´ ¤µ ¤¶ ¤· ¤¸ ¤¹ ¤º ¤» ¤¼ ¤½ ¤¾ ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó ¤Ô ¤Õ ¤Ö ¤× ¤Ø ¤Ù ¤Ú ¤Û ¤Ü ¤Ý ¤Þ ¤ß ¤à ¤á ¤â ¤ã ¤ä ¤å ¤æ ¤ç ¤è ¤é ¤ê ¤ë ¤ì ¤í ¤î ¤ï ¤ð ¤ñ ¤ò ¤ó ¡« ¡¬ ¡µ ¡¶ ¥¡ ¥¢ ¥£ ¥¤ ¥¥ ¥¦ ¥§ ¥¨ ¥© ¥ª ¥« ¥¬ ¥­ ¥® ¥¯ ¥° ¥± ¥² ¥³ ¥´ ¥µ ¥¶ ¥· ¥¸ ¥¹ ¥º ¥» ¥¼ ¥½ ¥¾ ¥¿ ¥À ¥Á ¥Â ¥Ã ¥Ä ¥Å ¥Æ ¥Ç ¥È ¥É ¥Ê ¥Ë ¥Ì ¥Í ¥Î ¥Ï ¥Ð ¥Ñ ¥Ò ¥Ó ¥Ô ¥Õ ¥Ö ¥× ¥Ø ¥Ù ¥Ú ¥Û ¥Ü ¥Ý ¥Þ ¥ß ¥à ¥á ¥â ¥ã ¥ä ¥å ¥æ ¥ç ¥è ¥é ¥ê ¥ë ¥ì ¥í ¥î ¥ï ¥ð ¥ñ ¥ò ¥ó ¥ô ¥õ ¥ö ¡¦ ¡¼ ¡³ ¡´ ­ê ­ë ­ì ­å ­æ ­ç ­è ­é ­Æ ­Ê ­Á ­Ä ­Â ­Ì ­Ë ­Å ­Í ­Ç ­Ï ­À ­Î ­Ã ­È ­É ­ß ­ï ­î ­í ­Ó ­Ô ­Ð ­Ñ ­Ò ­Ö ­Õ ­ã °ì Ãú ¼· Ëü ¾æ »° ¾å ²¼ ÉÔ Í¿ Т ±¯ ³î У À¤ Ò µÖ ʺ ¾ç ξ Ê ù­ Ф Ãæ Ð¥ ¶ú Ц ´Ý ð ¼ç Ч Ш Щ ǵ µ× Ç· Æã ¸Ã ˳ éÉ Ðª ¾è Ы ²µ ¶å ¸ð Ìé Ö¦ Íð Æý ´¥ µµ Ь Э λ ͽ Áè Я »ö Æó в ±¾ ¸ß ¸Þ °æ ÏË ÏÊ º³ °¡ г д е Ë´ ж ¸ò °ç Ëò µü µý µþ Äâ μ з и й ¿Í ½º ¿Î о м н µØ º£ ²ð л к Ê© »Æ »Å ¾ п ÉÕ Àç ¡¸ ÐÀ Рù® Âå Îá °Ê ÐÁ ²¾ ¶Ä Ãç ·ï Ðà Ǥ ù¯ ù° ´ë ù± ÐÄ °Ë ¸à ´ì Éú Ȳ µÙ ²ñ Ðç ÅÁ Çì ÐÆ ȼ Îâ ¿­ ù² »Ç »÷ ²À ÄÑ Ã¢ ÐÊ °Ì Äã ½» º´ ͤ ÂÎ ²¿ ù³ ÐÉ Í¾ ÐÅ ÐÇ ºî ÐÈ Õ¤ ÐÐ ÐÓ ÐÑ ²Â Ê» ÐË ÐÏ ¸ó »È ´¦ ÐÔ ÐÌ ùµ Îã »ø ÐÍ ÐÒ ù´ ù· ÐÕ ÐÎ ù¶ ¶¡ °Í ¶¢ ²Á Õ¥ Ëù Éî ¸ô ¿¯ η ÊØ ·¸ Â¥ ²ä ù¦ ½Ó ù¸ ÐÙ ÐÞ ÐÜ Ð× Â¯ ÐÚ ÐÝ ÐÛ ÊÝ ÐØ ¿® Ëó Ðß Ðà ½¤ Ðí ÇРɶ Ðè Êð ²¶ Ðì ù» Ðæ Ðï ÁÒ ¸Ä ÇÜ àÇ Ðî ÅÝ Ðã ¸ö ¸õ Ðá ù¼ ¼Ú Ðé ùº Êï ÃÍ Ðå ·ñ Ðâ Ðê Ðä ÎÑ Ðë ÏÁ ¶æ ·ð ù¹ ù¿ Ðð ù½ Ðñ Ðõ °Î ÊÐ Ðô Ðó Ð÷ Ðö Ää ·ò Ðø ù¾ ¼Å ¦ Äå ¶ö Ðù µ¶ Ðú Ðü ˵ ·æ ùÀ »± È÷ Ðû ºÅ Íà Ðþ Ñ£ Ðý ºÄ ½ý ·¹ Ѥ ¶Ï Ñ¡ Ñ¢ Ư Áü ¶£ ËÍ Ñ¥ ù ν Ѧ Ñ© ѧ ÁΠѨ Ѫ ùÁ Ѭ Ñ« ÊÈ µ· Ñ® ѯ ²¯ Ñ­ ¼ô Ѳ ѱ Ѱ ÐÖ Ñ³ ½þ Ñ´ Í¥ Ì٠Ѷ ѵ Ѹ Ñ· ѹ Ѻ °ô ¸µ ·» ½¼ Ãû ¶¤ Àè ¸÷ ùà ¹î Ѽ ÌÈ ÅÆ »ù Ñ» ѽ ÅÞ ³õ Ѿ ùÄ Æþ Á´ ÑÀ ÑÁ Ȭ ¸ø Ï» Ñ ¶¦ ʼ ¶ ¶ñ ŵ ·ó Ñà ÑÄ Æâ ±ß ÑÇ ºý ÑÆ ºÆ ÑÈ æî ÑÉ ËÁ ÑÊ ÑË ÑÌ ¾é ¼Ì ùÅ ´§ ÑÏ ÑÍ Ì½ ÑÎ ÉÚ ÑÐ ÑÑ ÑÒ Åß ÑÖ ÑÔ ÑÕ ÑÓ ºã Ñ× Ìê Îä ÑØ ùÆ À¨ ÑÙ ½Ú ÑÚ Ãü ο Åà ÒÅ ÑÛ ô¥ ¶Å ÑÜ ËÞ ½è Âü ÑÞ Æä ùÇ Ñß Ñà ³® Ñá ¶§ ÆÌ ±ú ½Ð È¡ Ñâ Åá ¿Ï Ñã ʬ ÀÚ ´¢ ´© Ñä Ñæ ·º Ñå ùÈ Îó ½é Ƚ ÊÌ Ñç Íø Ñè Ñé Åþ Ñê À© ºþ ·ô Ñë »É ¹ï Äæ Ñí § ºï Ñî Ñï Á° Ñì Ññ ˶ ¹ä Ñð ·õ ºÞ Çí Ñô Ñò Éû ¾ê Ñû ³ä Ñõ Ñó ÁÏ Ñ÷ Ñö ³Ä ·à Ñü έ Ñø Ñý Ñú Ñù ÎÏ ùÉ ¸ù ²Ã Îô ùÊ ½õ ÅØ ¹å Ò¢ Ò£ û¼ Îå Ï« Ò¥ ¸ú Ò¤ ³¯ ùË Ò¦ ËÖ Ä¼ ͦ ÊÙ Ò§ ðÕ Æ° Ò¨ ´ª ̳ ùÌ ¾¡ Ò© Êç Ò­ Àª Òª ¶Ð Ò« ´« ·® Ò® Ò¯ Ò° Ò± ¼Û ¸û ÌÞ ùÍ Ìè Æ÷ Êñ Ò² ùÎ Ò³ Òµ Ò· Ò¶ Ò¸ ²½ ËÌ ºü Ò¹ ÁÙ ¾¢ ¶© Òº ùÏ ÈÛ Ò» Ò¼ Ò½ Ò¾ ɤ ¶è °å Æ¿ Ò¿ ½½ Àé ÒÁ ÒÀ ¾£ ¸á Òà Ⱦ ÒÄ ÈÜ Â´ Âî ¶¨ Æî ñ Çî ËÎ ÒÆ Àê ·µ ÒÇ ÒÈ ±¬ °õ ´í ùР¨ µÑ Íñ ÒË ²· ÒÊ ¶ª ÒÌ Ìñ ùÑ ÒÍ ÎÒ ¸ü ¸¶ ÒÎ ÒÐ ÒÏ ¿ß ±¹ ±Þ ÒÑ ÒÒ ùÒ ¸· ÒÓ µî »² ÒÔ Ëô ºµ µÚ ͧ ÁÐ È¿ ¼ý ½Ç ¼è ¼õ ½ö ÈÀ ùÓ Ò× ±Ã ÁÑ ¸ý ¸Å ¶ç ÒÛ Ã¡ Âþ ¶« ¾¤ ÒÜ ÒÚ ²Ä Âæ ¼¸ »Ë ±¦ ³ð ¹æ »Ê ÒÝ ÒÞ µÉ ³Æ ¹ç µÈ Äß ±¥ Ʊ ̾ ¹¡ Íù ÅÇ ¸þ ·¯ Òç ¶ã ËÊ ÈÝ Òæ ´Þ Òá Òâ Òä Òå µÛ ¿á Ê­ Òã Òß ¸ã Òà Ϥ Êò Äè ¸â ¹ð Òè ÆÝ Òì ¼þ ¼ö Òï Òí Ì£ Òê Òó Òî Òñ ¸Æ Ì¿ Òò Òô Òö ùÖ ºð Ï Òë Òé Òõ Òð ùÕ Òø Ó£ Òú Òþ ù× Ó¡ Òû Ó¾ ºé ³± Òù Ó¥ °ö Ó¤ °¥ ÉÊ Ó¢ Òü Ò÷ Òý ºÈ Ó¦ °÷ Ó¯ Ó§ Ó¨ ¾¥ Ëé Ó­ Ó¬ ů Ó® Ó« ùØ ±´ º¶ ¿° Ó© Åâ Óª °¢ Ó´ Í£ ¾§ Óº Ó¹ Ó° Âà ӱ Âï Ó¶ ¾¦ Ó³ Ìä ·¼ Ó· Ó¸ Óµ Ó» Ó² ÓÁ ÓÆ Ó ӽ ÓÇ Á± ùÙ ÓÉ ¹¢ Ó¿ Ãý Óà Ӽ ´­ ´î ³å ÓÄ ÓÀ ·ö ÓÊ ÓÈ ÁÓ µÊ ¶¬ ÓÅ ¶ô ±Ä ÓÎ ÓÌ Ô§ ÓÑ ÓË ÓÏ ÓÍ »Ì ÓÐ ÓÓ ÓØ ÓÖ ÓÕ Ã² ²Å ÓÒ ÓÔ ¾¨ ±³ Ó× ²Þ Óâ ¾ü ÓÞ ÓÜ ÓÝ Óß ±½ Á¹ ÓÙ ÓÚ ³ú Óá ´ï Óä Óà Óã Ê® ÆÕ ȸ Óæ Óå ³Å Óç Óê Óé Óè ǹ Óë Óì Óî Óí Óð Óó Óñ Óï Óò Óô Óõ Óö Ó÷ Óø ÑÅ ¼ü »Í ²ó °ø ÃÄ Óù º¤ °Ï ¿Þ Óú ¸Ç ¹ñ Óü Óû Êà Óý Ô¡ Óþ Ô¢ Ô£ ·÷ ±à Ô¤ Ô¦ Ô¥ Ô¨ ÅÚ Ô© °µ ºß ·½ ÃÏ Ôª Ô« Ô­ Ô® ºä ¶Ñ Ë· Ô¬ Ô¯ ºÁ ¹£ ùÚ Ô³ º¥ ùÛ Ã³ Ô° ÄÚ Ô´ ¿â Ô² Ôµ ·¿ Ô¶ Ô· ¹¤ ³À Ô¹ Ôº ùÜ Ô» Ô¸ Ô± Ô¼ Ô½ ùÞ ùÝ Ëä ¾ë Ô¿ ÔÀ Ô¾ Ô Ǹ °è ÉÖ Ôà ¾ý ¼¹ ÇÝ ´ð ºë Ë٠Ʋ ·ø ÂÏ ÔÁ ÔÄ ÂÄ ÔÅ ÔÆ ÔÈ Äé ´® ô¡ ±á Êó ¾ì ÅÈ ºæ ÔΠʽ ÎÝ ²ô ÔÊ Áº ÔÍ Åã ÅÉ Åä ȹ ÄÍ ºÉ ÔÉ ±ö Ŷ ÔË ÔÇ ¿Ð ÔÏ ½Î ¶­ ÔÐ Êè Áý ÄÆ ùá ÔÒ ËÏ ÔÓ ÔØ ùâ ʯ Ô× ÔÑ ÔÔ ÔÖ º¦ ÊÉ ÔÙ ÃÅ ²õ ¾í ÔÛ ÔÚ ¹è ÔÜ ÔÞ ÔÝ Ôà ÔÕ Ôâ Ôá Ôß »Î ¿Ñ ÁÔ Ôã À¼ °í Çä ÄÛ Ôå Ôä Ôæ Ôç Ôè Ôé ÊÑ Ôê ùã ²Æ Ôë ͼ ³° ÒÉ ½È ¿ Ôì Ìë Ì´ Ôî Âç Å· ÂÀ É× Ôï Ôð ±û ¼º Ôñ °Ð Ôò Ôó ±â ´ñ Æà Êô Ô÷ ÁÕ Ôö ·À ùä ËÛ Ôõ Åå Ôù Ôø ùå ùæ Ôû Ôú ùç ±ü Ôü ¾© Ôþ Ã¥ Ôý ʳ ½÷ ÅÛ Õ¡ ¹¥ Õ¢ Ç¡ ÈÞ ÌÑ Ç¥ Õ« µ¸ ÍŠ̯ Ö¬ Õ£ Õ¦ ùè Š˸ ÅÊ Õ§ Ëå ùé ºÊ ¾ª Õ¨ »Ð »Ï °¹ ¸È À« °Ñ Õ¬ Õ­ Õª ±¸ ´¯ Õ© ÌŠɱ °¨ °ù »Ñ °Ò °£ Õ² Õ° ̼ Õ³ Õ± Õ¯ ¿± Õ® ÊÚ ¸ä Õ· Õ¸ ¾« Õ´ Ϭ ÇÌ Õ¶ º§ Õ¹ ÉØ Õº Õµ Ì» ÇÞ Õ» ɲ Õ¼ ÕÀ Õ½ ²Ç Õ¿ ¼» Õ¾ ·ù ÕÌ ÕÅ Õ Ãä ÕÁ Õà ÕÄ ÕÆ ÕÇ ´ò ÕÉ ÕÈ ÕÊ ¾î ÕÍ ÄÜ ±Å ÕË ÕÎ ÕÏ ÕÒ ÕÐ ÕÑ »Ò ÕÓ ¹¦ ÕÔ ùê »ú ¸ ÕÕ ÕÖ »Ú ¹§ ÌÒ µ¨ ¸É Õ× ³Ø ÕØ ¹ ÕÙ Ö£ ÕÚ ÕÛ ÕÜ ÕÞ Õß Õà Âð ±§ ¼é °Â Á× ´° ¼µ ¹¨ Åæ ½¡ ´± Ãè Äê °¸ µ¹ Êõ ¼Â µÒ Àë ¼¼ ͨ Õá µÜ ºË ³² ±ã ¾¬ ²È Õâ ÍÆ ½É ùë ¼ä Õã ´ó ÆÒ Ì© Õä Õå ÉÙ Õç ´¨ ¶÷ Õæ ùí ´² ¿² Õë »¡ ²É Õê Õè Õì Õé Ç« ÜÍ ¿³ Õí ùî ÎÀ Õî Õð Ãþ Õï À£ »û ÂÐ ¼÷ Éõ Àì ¼Í Õñ ¾­ Õò Õó °Ó º ¿Ò Õô Ƴ ¾® ¾¯ Õõ Àí ¾° ùï Õö Õ÷ Ìà Õø ¶Æ ½¢ Õù Õú ¼Ü ¿¬ Æô ¿Ô Èø Ç¢ ¶É Õû µï Õü ¶þ ÆÏ ²° »Ó Õý Ö¢ Ö¡ ¶ý Õþ Ÿ ° ÅË ¼È ÁØ Íú Ö¤ Ö¥ ÆÖ »³ Ö§ Ö¨ Ö© ´ô Öª Ö« ²¬ ùð Á» ´ä Ö­ ̨ ÂÒ ³Ù Ö¯ Ö± ´ß ùñ Ö® Ö° Ö³ Ö² Ö´ Öµ ƽ ¶® ²å Ö¶ Ö» Ö¹ Ê÷ Êö ùò Åç Ö¸ ½Ô Ö· ¿ò Ö¼ ºê Ö Öà ֽ ³³ Ö¾ ÖÇ ÖÆ ÖÅ ÖÁ ÖÀ ÖÄ ùó Êø ùö ÖË ÖÈ ÖÊ Íò ÖÉ ùô Ö¿ ¿ó ÖÌ ù÷ º· ÖÍ ÖÎ ÖÑ ÖÐ ÖÏ Åè Öº Ö× ÖÓ ÖÒ ÖÔ ÖÕ ÖØ ùø ùù Îæ ÖÙ ÖÖ ÖÚ ´à ÖÛ ùú ÖÝ ÖÜ ÖÞ Öß Àî ½£ ½ä Áã ¹© º¸ ¹ª µð Öà º¹ ¸Ê Öá ̦ Çà Öâ ¹« ´¬ ç ¶Ò »Ô ÉÛ ÈÁ Öã ´õ Öæ Ä¡ Öå Öä Öç Äë ¿ã »Õ ÀÊ ÂÓ µ¢ Ä¢ Öè Öé ¾ï ˹ Öì Öë Öê Éý Öó ËÚ Öí Öï Ëë Öî Öð Ȩ Öñ ʾ Öò ´³ Ê¿ ǯ Öô Öõ ¹¬ ´´ Öö ¸¸ ÍÄ Í© ´ö Öø Ä£ ¹­ ¾± Èß ¾² ½ø Äì Êù Ź ¹® ÉÜ Öù ÅÙ ºÂ ¸Ë Äí °Ã ½î ¹¯ ÍÇ Öú Öû ÇÑ Öü Î÷ Ï­ Öþ Öý ³Ç ס פ ×¥ ×£ ÉÀ ¾³ ×§ צ ×¢ ר ש ת ×­ ׫ ׬ ×® ±ä Äî ׯ ·ú ²ö Ƕ ×° Æû ÊÛ ×± Ï® ײ ÊÀ ×µ С б ¼° Æõ ×¶ µÝ Ĥ °ú ×· ʦ ¹° ÃÐ Äï ùû Ìï ¸¹ ¸Ì ׸ ×¹ ׿ ¼å ùü Ä¥ ¶¯ ׺ É« ÃÆ ×» ù¬ ×¼ ¶° ×½ ×¾ ×À Åö ×Á × ×à ״ ׳ ×Ä ·Á ɧ ùý ºÌ É· Ħ ÉË ×Å ¾´ ±Æ ׯ ×Ç Ìò Èà ×Ê ±ý À¬ ×É ×È ·Â ÂÔ ×Î ×Ì ×Ë Î§ ¸å ½ù ×Í ÅÌ ½¾ ÆÀ ×Ñ ×Ð ×Ï ×Ò ¸æ ×Ó Éü ½Û ×Ô Èù ÆÁ ħ ùþ Ű ×Õ µ« ¿´ ɬ ´÷ Ǧ ×Ö »Ö ˺ Ë» ±þ ×Û ú¡ Ãé ר ²÷ Ø­ ×Ú Ç° ×Ù ×× ¹ú ×Ý ×ã ×é ×á ÅÜ ×æ ÉÝ ×à ×å Îç »× ÂÕ ×Þ µÞ ×è À­ ±å ×â ²ø ×ç ¶± ×ä ×ê ×ì ×ö ×ô ×ñ ×ð Îø ×ò ¶² ¹± ½ú ×ù ×ë ú¢ ×ï ×ß ²ú ×ó ×õ ÃÑ º¨ ²¸ ×í ×ø ×÷ ¶³ © ³æ ·Ã ×î ×ú ×ý Ø¡ ú£ ¼½ ú¤ ا Äð ×û Ø¥ ²ù Ø£ ؤ ×þ Ø¢ ¸ç ͪ ´µ ±Ù ئ Ǻ °­ Èá ×Ü Ø¬ ذ Ìå Ø© Åé Ø® ¾ð د Æ× ÏÇ Ø« ú¦ ر ¹û ÀË ú¥ °Ô ت ب ÁÚ ×ü »´ ÂÆ ؽ ú¨ ÁÛ Ø¸ ص ض ¼æ ع ؼ Ø· ½¥ غ Ø´ Ìü Ìû ؾ Ø¿ °Õ ú© س ¶ò °¦ ´¶ ú§ Ø» ØÃ ØÂ ØÇ ú« ØÈ úª ØÆ ØÉ ØÁ ØÅ ØÊ ØË ØÀ »ü ØÄ ÂÖ ¹² ز ¿µ ØØ Êé ØÎ ØÏ ØÐ Ø× ØÖ Ëý ´· ØÔ ·Å ³´ ØÑ θ ØÓ °Ö ØÕ ØÌ ØÒ ØÙ ·Ä ØÍ ÍÝ Í« ØÜ Øà Áþ Îù Øá ØÞ ØÛ ú¬ ØÚ Øß ʰ Æ´ ·Æ Øâ ØÝ Øã ·û ²± Øë ´¸ Øé Øê º© Øè Øæ Øå Øì Øä Øî ²û Øð Øï Ĩ Øó Øñ Øç ·ü Øò Øö Øõ Ø÷ Øô Øø Øù Øú Êê Øü Øû ½¿ À® ²æ ²ü ú­ Øý °¿ ÀÌ Øþ ìà ١ ·á Ù¢ Àï Ù£ Ù¤ µº Ù¥ Ù¦ Ù§ Â× ¸Í Ìá ˼ ½ê Ù¨ Àð î½ Èâ ¼ê ºÍ Ù© ÂÇ Ê§ Âñ Ù¬ Ùª Ù­ Ù« Ù® ʱ °· ÉÞ Èã Ù¯ Ù² ¾µ µ» Ù° Ù· ¾¶ Ù± ÇÄ ÍÞ Ù³ Ù´ Ù¸ Åê Ùµ ¹³ ÀÞ ÙÆ È´ Âò ú® Èä Ú­ Êú Äñ Ëõ Ù» ²¡ Ãê ÙÄ Ã´ Ù¾ ÙÅ ÙÀ ÙÇ Ùà Ù Çï Ù¼ ²ý Ùº µñ Âó Ù¶ Ù¹ ¹´ ÀÛ ¾· ÙÁ ÇÒ µò ³È ³ç ¿¡ ÙÉ ÙÎ ÙÊ ·ý ÙÏ »¢ ¹é ½¦ Ù½ »ý ÙÌ »Ø ÙÍ °Ä ÙÈ Ä© µó ¶´ ÙË °§ ºÃ ¿¶ Äò ÈÔ ÙÑ ÁÞ Âª »« ÙÒ ÙÔ ÙÐ Êá Ľ ÁÜ Êû ¼Î Ùà Ùß ¿ø ·þ ÙÙ ¾¹ Æè DZ Ù× ÁÝ ¼ø ÙÜ ¾¸ ÙÖ ÙÛ ÇÓ ÙÕ ·¡ ³Ý ÙÝ Î« ºÎ õ ÙÚ ÀÜ ¹µ ¿ä ±æ Á¼ ÙØ µÅ ·Ç ÄÏ ÙÞ Áß Ùá Ùã · Ùé Ùä Ùæ ÉÁ Äó Ùç ͬ ÍÈ ´¹ °® Ùå Ùâ ´ø ±ç ú¯ Ùè ÍÉ Ùì » Ùó Ùí Ùê Ùñ ÙÓ Ùî Ùò È Åë Ùë Ùï ·È ºñ ÀÝ Ù÷ Ŧ ú° Ùô Ëà Ùõ Ùö ÌÎ À¢ ·â Ùý »µ Ùú Ùù Dz ú± Ƶ ű Ùû Ùü Éï ÇÅ »£ Àñ ËÐ ³É Ú¥ Ùþ ÍÊ Ú§ Ú£ Ú¤ Áà ú² Ú¢ Ù¿ Ú¦ Ú¡ Ú« Ú¬ ŧ Ú® »¤ Ú© µ¼ Ú¯ Ú¨ Ú³ Ú² Ú± Ú´ Ú¶ ¾ñ Úµ Ú¹ Ú· Ú¸ Ùð Ú» Úº Ùø Ú¼ Ú° »Ù Ú½ Ú¾ ÚÀ Ú¿ ÚÁ ²þ ¹¶ Êü À¯ ¸Î ÚÃ ÚÆ ú³ ÉÒ µß ÚÅ ÚÄ ÇÔ ÚÇ ¶µ ÚÉ ÚÈ ´º »¶ ÆØ ·É ¿ô ÚÊ À° Ũ Éß ÚË ÚÌ ÚÍ Ê¸ ÕÝ ÀÆ ÉÌ ºØ Èå Èà ÅÍ ÎÁ ÚÏ ¼Ð ÚÐ °¶ ¶Ô ÀÍ Éà ÚÑ »Â ÃÇ »Û ¿· ÚÒ Êý ±÷ »Ü ÚÕ ÚÓ ÚÖ Î¹ ÚÔ Àû Ú× Â² ÚØ ´ú ÚÚ ÚÙ ÚÛ ÚÜ ´û Æü ö µì »Ý Áá ½Ü °° ÚÝ ²¢ Úá ú´ ¹· Úà º« ¾º ú· Úß ¾» ÌÀ ºª °× ÀÎ úµ Úæ ú¹ À± ±Ç úº ½Õ Ëæ ºò ¾¼ ú¸ À§ ù¨ Úå Úã Úä ú¶ Ãë Û¦ Úê »þ ¹¸ Úè Úé ¿¸ Úç »¯ ú¼ ú½ Úì Úë Úð Úñ Úí ú» ³¢ Úî Úï ÈÕ Éá ·Ê Úò ú¿ À² ¾½ ÃÒ ¶Ç Úó Ú÷ ²Ë Úô Úö Úõ ½ë ÃÈ °Å Úø úÀ Úù úÁ Ī Îñ »Ã Êë ú ˽ Û¢ Úû Úþ Úý úà Úú Û¡ ÆÞ Úü Û£ ½ì Û¤ ÍË Çø Û¥ Û§ Û¨ Û© ¶Ê ±È ¹¹ Ûª Û« ½ñ Áâ úÄ ù« ÒØ Á¾ Á½ ÂØ ºÇ Ðò ·î Í­ Êþ Éþ úÅ Û¬ ºó Ä¿ Û­ ϯ ˾ Ä« Û® ´ü Û¯ Û° ÌÚ Ì¤ Ëö ËÜ »¥ Û² ¼ë ËÑ Û´ Û· Û¶ ´ù µà Û³ Ûµ Û¸ ¿ù Íû °É ºà ¼ ¼Ý ¾ó Û» ÅÎ Û¹ « Ûº ¾ò ÌÝ Û¼ Û½ Íè úÇ Û ¹º ÇÕ Û¿ Åì ÚÞ Úâ µÏ ÇÇ ÛÁ ¾¾ ÈÄ ÛÇ Èú Û¾ ÛÄ Ûà ÀÏ Ëí ÎÓ Ëç ²Ì »Þ ÏÈ ÛÆ ¿õ ÛÅ ÛÀ ¸Ï ÛÌ ÛÊ ²Í ÛÈ ÛÎ ÛÔ úÈ úÊ ÂÈ ÊÁ ÛÖ É¢ ÛÕ Çð Ë¿ ´» À÷ ½À ÄÓ Í® ÛÑ ÛÐ ÛÒ ÛÏ Û× ÛÍ ÛË ÛÓ ÛÉ Ãì Ìø ¼Æ ºô ºº Ëï ³Á úË ÄÎ ÆÊ ±É Àò À´ ·ª ÛÙ ¹» ³ü ÛÛ ³ô Ûá ÛÞ Àó ³Ë º¬ ³Ê ºÏ ÛÜ ·å ·Ë Åí úÌ ÛÚ °Æ ÛÝ Ûß ¶Í ·¬ úÉ ´¼ µË Ûâ ºù Ëñ »· Ûã ɰ Ûï ²³ Ûä Ûõ Ûå ΠÛì Çß Ûô Ûç °´ Ûé ¹¼ Ûë Ûê Ûæ Ûñ ¾¿ Ôí ¸è Íü Ûè Äô ³£ º­ Ûà Ûð ³á Ûî Ûò Åî ´þ ܲ ù© ÌÉ Û÷ ´ý Ûþ úÍ ËÀ Ü¡ Ü£ ܧ Ûù ê Åï Ü« Ûü ܨ Ü¢ ¿¹ ܬ À³ ܪ ´½ ÏÐ Ûö ܦ °Ø Ûø ̺ Ûý ¿¢ ÄÇ Ûó Ü¥ ¿ú ܯ ³ñ ¸¡ ܱ Ûú ܰ Ü© Ûû Ü­ Ü® Ü¿ ÆÎ ܤ Ü» ܽ ÄØ ÍÌ Éö ܸ ÂÊ Ü¾ Á¿ ܵ Ü ÜÁ Æï ÜÀ Æê úÏ ÜÄ Ü· ¶È ܺ ½Ý Çà ܼ ¶Ë Ü´ ܶ ܳ ϰ ³Ú ܹ Üà ³µ ºç ±Ý ÜÔ Ï± Ü× úÑ ¿º ÜÖ ÜÕ ÜÒ ÜÆ Üã ÜÅ ÜØ ÜÐ ÜË ÜÈ ÜÉ ÜÑ ô¢ ÜÎ ¹½ ÄÈ Áä ÜÌ ÜÇ ÜÊ ÍÍ Ëê ÜÏ ÜÙ úÒ Üá ÜÚ Üç Üå Üà Üß ÄÐ Áå ÜÝ ÜÛ Üâ Üè Èõ Üî Üé Üì Üæ Ãô ɸ ÜÜ Üä ¾À ÌÏ Üø Üë ¸¢ ²£ ³ß ÜÓ úÓ ¾Á Üð Ü÷ ¼ù ³ò î Üí úÕ Üò Üö ¶¶ µÌ Üô µ¡ ÆË Üó Üõ úÔ Üï úÖ Üñ ú× ³à ÃÉ Üü Üú ¸é Üù Ý¡ ÛØ Üû Üý Üþ ݬ ݨ Ûí ݧ ݦ Ý£ Üê Ý¥ ݤ ݪ Ϧ Ý­ ¶û Ý© Ý« úØ ú٠ȧ Ý® ݲ ݯ Íó ݰ ÜÞ Ý³ Ý´ ±µ ݶ ·ç ¼¡ ¶Õ ²¤ Íß Ý¸ Ý· ݺ µ½ ¶Ö ´¾ ݽ ݼ ݾ ²Î ÷ Ý¿ ´¿ ÝÁ ÝÀ Ý Ýà ÝÄ »ß Àµ º¡ Éð Êâ ÏÄ »õ ºÐ Îò ÝÅ ÝÆ »à ÝÇ ÝÈ ÝÊ ÝÉ ËØ ½Þ ¼ì »Ä ÝË ÝÍ ¿£ ÝÌ ÝÎ ÝÏ ÝÐ ÝÑ ÝÒ ÝÔ ÝÓ ÝÕ ²¥ ÃÊ ÝÖ »¦ ³Ì Ý× Å ÔÌ µ£ ÝØ ÝÙ Êì Ëè ÆÇ ÝÚ Èæ úÚ Èû ÌÓ ÝÛ ÝÝ ÝÜ Ýß ÝÞ Ýá »á ̱ Ýâ Ýã µ¤ Ýä Ýæ Ýå ¿å ɹ ±Ê ÈÅ úÛ Äõ ½Á µá ÈÆ ¼® Ýè ´À ±ø úÜ Æò Ýç ¹¾ ÃÓ Ýé Ýñ Ýê úÞ ÂÁ µâ Ýò ·è µ¥ Ýð Ýî Ýë Íà úÝ ÄÀ ÆÙ Ýì Ýô Ýó ·£ ²­ º» Ýí Ýï Ë× Âô Ë÷ Ýü Ýý ²Ï ʨ Ìý Þ¡ ¼£ ¾Â Ýø Ýþ ±è ¶· Ýõ Ýú Àô Çñ Èç Ý÷ Ë¡ Ýù Þ¤ úß Þ¢ Ýû Ë¢ ÇÈ µã Å¥ Ãí Þ¥ Þ£ ÂÙ Ýö ±Ë úà ÍÎ Þ° Þ¯ Àö Þ¬ Íì Æ¶ Þ¦ ÄÅ ±Ì ¹¿ Þ© ½§ Þ® Þ­ Þ¨ Þ« ³è Þª ÇÉ Î® ¾ô Àõ Þ¶ Þ´ ÉÍ Þ± Þ³ ±º ¹À ϲ ³½ Éâ úâ Íá ³¤ ¿» Þµ Þº úá ¾Ã Í° Þ· Þ² Þ¸ úã ÎÞ Åó ÆÂ úä ³¶ ±Õ Þ¾ ÞÁ Îà Íä ÞÈ Þ ޿ ÎÔ ÞÅ úå ½Ê ÞÇ ÞÌ Åñ ÞÊ ÞÄ Ã¸ ÞË ÞÀ ÞÆ ÞÍ °ü Þà ÞÎ ¿¼ úç ½ß Ê¥ º® úæ Þ» ÞÉ Åº úè À¶ ³é ºÑ ¾Ä Þ½ ½Â ·Ì Þ¼ ÞÒ ½í ¸º Þá ÞÛ µô ÅÏ ÞÖ Þß °¯ ±² úë ²¹ ÞØ ¬ ÞÏ ÞÑ ¹Á Þâ úé ÞÝ úì ÞÕ ÞÜ Ì« ÞÚ ÞÞ ¸Ð ¾Å ù úê ÞÔ Í¯ Þ× ÞÐ Åò ÞÓ ÞÙ ÏÑ ¼¾ Ëþ Þã È® Þï ¸» ½à Þå ί ¹Â Þò °î Þð Þä Þê Þì ÍÏ Þç Å® Þé úí Þñ Þë ÌÇ Þæ ¼¢ Þþ ³ê Þè Þí Þî Âì ÂÚ Þö Þü Þú Å© ߣ Þ÷ Þø Þà µù ɺ ¼¿ ¹÷ ϳ Þô ߢ ±é Áæ Çù ´Á Îú Ì¡ ÄÒ Þû Þý Á² ß¡ Þù Þó ´Ã ·é ߯ ߪ Àø ³ã ½á ß³ ߬ Ĭ ß© ÄÙ ßÌ ß¦ ߥ ß® ߨ ß§ ß­ À¡ ߤ úî ß° ß± ´Â ß¶ ßµ ß· ߺ Åà ߴ úï ߸ ·ã Âù ß² Ç» ß¹ ß¾ ß¼ ß¿ ß ߻ ¹ê Ǩ Þ¹ Íô ß½ ßÁ Âõ ßÀ ß« úð ïé ßÅ ßÉ ßÇ úñ úò ßà ßÄ ßÈ ßÆ ÉÎ ßÎ ßË ßÊ ßÍ ÆÔ ßÏ Ãõ Âí úó À¥ ßÐ ßÒ ßÑ Þõ ßÓ Æç ßÔ ²Ð Åô ³¥ µä ¼Þ ºÒ úô ϧ ¿æ ±ê ßÖ ßÕ úõ ß٠ú ßÜ ß× ßÛ ßÚ ÅÀ °Ù ù§ Îõ ßÞ ±¨ ßà ßß ßÝ ßØ Ë£ ßâ ú÷ ßá úö ±ë ßä ʲ ßã ̵ ¾Ç Á³ ¾Æ úù úú Îû ßê Àù ßæ ßë ±ì úø ßé Çá ßå ßè ¾È ÈÑ ßì ¼Ñ Àú ßï ßç ·§ ßí ÍÐ ßð ô¦ ½Ï ßñ ßò Ç® ßô ßõ úü dz Åõ ß÷ ßù ÎÕ ßö ßø ±í ßó ÓÛ ßú Áç »¸ ßü ßû ¿¤ ÒÙ ßý à¡ ßî ßþ úý ࢠÇú ࣠ठॠঠÄÞ à¨ à§ à© àª ¼ß Éã Ìì ૠଠÁÖ ¼¤ ୠ஠௠ÊÒ ÈÇ à° Ç× Ä­ à± ²ç µí ÌÆ ̶ ²´ Ï´ ËÒ Êª À· ಠÆÃ ¸£ à³ ºÔ ൠഠච෠ภµ¾ ๠ຠ¸¤ ÈÈ úþ ༠¾õ à» û¡ ¶¸ འ࿠ྠàÀ ¸Ñ àÁ ¶é ÁÀ ¹ý àà àÄ à ¼í ÆÈ ¶¹ àÆ Ã¬ àŠϵ Çâ àÉ àË àÈ ÌÔ àÊ àÌ ÎÄ û¢ àÐ àÏ Ãö Ç­ ¸¥ àÎ àÍ Í± Ͳ àÑ ±î ¹ö »â àÒ àÓ àÕ ½Ã à× àÖ àØ ³Í àÚ û¤ àÙ àÜ àÛ ¸¼ Ψ ¶Ì ²¦ ¶ê ´á Îè àÞ àà û¥ àá ²Ñ àÝ û¦ »¹ ÄÁ àß û© û§ àä ¼î û¨ àâ ·¾ ÈÉ àã àþ û« àé ¸½ µå àæ Íý ûª ΰ Âö àè û¬ û® û­ û¯ àê ÎÖ ¶× Èü ÇÊ àë àí àð àì àï ¸ê ±Í àñ ¿ð àî ÎÜ û° àô ô¤ àò àõ àç àó º¼ àö à÷ Íþ û± àø àù û² àå àú ´Ä ¼¥ àû àü àý ±» á¡ É» ᢠ´¤ ᣠᤠᥠ᧠ᨠᦠÉÓ áª á© û³ ᬠ᫠᭠ᮠᰠᯠ¹ù á² á± ´Å ¿Ó ż á³ À¸ »º ±ù á´ ÍÑ Êã áµ ùì ÅÄ Í³ ¹Ã ¿½ ÃË Ò´ Ä® ²è ᶠᷠἠẠṠÚ ³¦ Ḡ°Ú Ȫ ÈÊ Î± á½ á» ÃÜ À¦ È« É­ ῠά ·Í áÀ á¾ ÈÖ áÁ á û´ °Û ¾ö áÇ áÄ Æí áà µ¦ áÊ áÅ áÆ áÉ áÈ É¥ Á ÁÁ µ¿ áË áÌ áÍ áÏ áÎ ±Ö á× Èè áÑ áÓ áÕ ¿¾ áÖ áÔ ¼À áÐ áÒ É ¾É áÙ áØ áÚ ¼¦ º¯ Å÷ áÛ ÄË áÝ Î¡ áÜ Áé áâ áä áå ÃÔ áã áà áÞ áß áá áè áæ áç áé áë áì áí áî áê áð áï áñ ÎÅ áô áò áó ´â Ìþ ÊÊ áö áõ á÷ áø áü áù áú áû áý áþ ⡠⢠⣠ȯ ÅР⤠Çò É´ ⥠ûµ ⦠Ū ³§ ¹Ä ⧠⨠⩠»© ⫠⪠⬠⭠û¸ û¶ û· û¹ Èé ⮠⯠óé â° â± â² »® â³ ÇÖ Ëß ±Î ±× â´ â¶ âµ Åð À¹ ݹ â· ÌÁ ⸠´Æ È× â¹ âº â» ÌÜ ÌÕ Ä¾ Áê â½ ½â ¾Ê âÀ â¿ â¾ Èý ´Ç ¸© âÆ âà ¿¿ ̲ â âÄ âÅ âÁ âÇ âÈ Ä¯ ´ã Ãå û» âÉ âÊ âÍ ¿ç ÆÄ âÎ ËÓ âË âÌ âÑ âÐ âÏ âÓ âÒ âÔ âÖ âÕ ÊÍ ½Ö ÎÆ â× Æ· âØ âÙ âÝ âÛ âÜ âÚ âÞ âß âà âá Ì· ââ Ìð âã ÃÎ Çê ¶ë û âä ¶º ÀÐ âå º½ âæ âç ¸¦ ºÕ âé û½ ÅÖ ºÖ µÎ ˤ ÇË Å× ¹Ü âë û¾ ¾Ë û¿ β ¹Å ¸§ È£ âí ûÀ âï ¸ë âî Äö âñ ³· âì Èê ±° ºì ÏÒ âð âò ÊË ÀÙ âô âõ âó ³Î âû âú ¼§ âü â÷ âý âø ÈØ âö âù 㢠㡠Ëá âþ °ë 㤠㣠¾Ì 㥠Áà 㧠㦠㨠âè âê 㪠㩠ûÁ ¼¨ Îé ¼Ò ã« ·· µÀ µ§ »ã Í´ ã± ã° ÁÄ ã­ ã¯ ½Ë ¿À 㮠㬠Ǫ ¾Í ɼ º× Åø ã² ã³ ãÉ ¶Ø Ͻ Áµ ã´ ²Ò Ä÷ Ê¡ ûÅ ûÇ ãµ µú 㶠㸠㹠ǩ 㺠㻠㼠¶Ù ²Ó ÆÅ ½¨ »ä ã½ ½© ²Ê Éà 㾠Èë ÁÅ ãÁ ã Çé ¿Á ã¿ Ãá ãÀ ¾Î °Ü µ© ãÃ Äø ãÄ ÀÇ Ì­ É£ ãÅ ãÆ ÃÕ ÎÇ ãÈ ãÇ ¼ï ãÊ °ð ãÍ ãË ²Ô ·Î ãÌ ¹Æ ¹ò Êæ ãÎ ËÔ ãÐ ÀÑ ±Ï ²º °¬ ãÏ ãÑ ãÒ ¾÷ ãÓ ³Ï ãÕ ·ê µæ ãÖ ¶õ ã× Àü ÆÍ Àà ºõ ãØ Ãâ Áë ãÚ ãÜ ãÙ ãÛ ·¢ ãÝ ·¦ µç ÍÒ ãß ãà ±® ãã ³ö ãâ ãá ãå ãÞ ãæ Î© ãç ãè ûÈ Ôô ãê ãé ãë ãì ε ãí ðï ¾Ï ãî ãï ½× Æ¸ ãð ûÉ Ã¨ ûË ãñ ü ãò ¶¥ Ñ¿ ÃÝ ¼³ ´È ãó ä¢ ãö µè ãõ ä¤ ãô ¾Ð ãø ãù Å« ãú ³Þ ¿Ú Éä ãü Âè ã÷ ãû ãý ºû ä¦ É® Ȧ Åù ¶Ú ä¥ ä£ Èµ ãþ ÃÞ Åû Åú ºö ä¸ ä¨ äª ä­ ä® ä« ä¬ ä© ä§ ä¡ ÊÏ ²Õ äµ ä² ä· ä¶ Çó ̧ »» ä° ä¹ ä´ ä³ ä¯ ûÌ ä± ´É ý Àý È¢ ä¾ È¤ Àá ä» ÈÏ ä¿ ÊÓ ÃÛ äº ä¼ ä½ äÀ ¼Ä ÆÆ äÅ äÄ äÁ ϶ äÊ äÎ äË äÇ äÈ äÍ ä ÒÕ äÉ äà äÌ äÒ ´Ê äÏ äÐ äÑ äÔ äÓ Èö äÕ Îü Êí äÚ ä× äÖ ÀÒ äÙ äÛ äØ äß äÜ äÝ äÆ äÞ äà äá ÊÆ äâ Ìâ ¶Î ·© äã Ê´ ¿è ̰ ää γ Çô ÁÆ Ç´ ½Í °À äé äç äå ´¡ ¾Ñ äê äè äæ äî äí äì äë äï äð Àº äñ äó äò ¸Ò Á¸ äõ Åü äô äö ʵ Áì ¹Ç ä÷ ÎÈ äù äú äû äü »å äý ·Ï µê µª å¡ Ìó ¹È äþ å¤ Ìæ Ǽ ɳ ½ã å£ ¼Ó ¹É »æ µé ʶ å¢ ÁÇ Ë º÷ »ç ÄÝ å§ Îß ºÙ å¨ ¿Â åª ¾Ò º° å© ½ª ¸¾ ÁÈ å¥ å« ûÎ å¦ ·Ð å® å² ·ë å­ å¶ ûÏ ¹Ê Íí °¼ å³ µë å° å± Åý å¯ å¬ ³¨ Àä ¸¨ å¸ åµ å· å´ ·Ñ ³ å¹ Áî åÆ ûÑ åÂ å¼ åÀ ¼ú °Ý å» åà åÇ ¹Ë ÌÖ ÄÖ å½ ûÐ åÅ åº Ã¾ å¿ °½ ÌÊ å¾ ¶Û Èì Áí ÎÐ ½ï åî ûÒ åÈ Àþ åÄ åÉ åË Äù åÎ åÊ ÊÔ ´Ë ÌË °Þ åÍ Îý åÌ ±ï Æì åÏ åÖ åÐ å× åÓ Çû ¼Ê åÕ åÒ åØ åÑ ½Ä Ë¥ ½Ì åÔ åà åÜ åß åÝ åá åÛ åÁ ÀÓ ÈË åÞ åÙ Á¡ ·Ò ½« ûÓ ¿¥ Á¶ åä åæ åç åã åå åÚ åâ åê åé Ëú ·« åè åì åë åï åñ »¼ åí åò åó ù¡ åô åú Å» åö åõ å÷ åø åù åû åü ´Ì åý åþ æ¡ ûÔ æ¢ æ£ æ¤ æ¥ æ¦ æ¨ æ§ æ© æª æ« æ® æ¬ æ­ ºá ·Ó ÃÖ È³ ½ð ÇÍ Èí æ¯ Øí æ° æ² Íå æ± æ´ æ³ ÍÓ æµ Èþ æ¶ æ¹ æ¸ æ· ûÕ æº ·² Á¢ µÁ æ¾ æ» æ¼ æ¿ æÀ æ½ ±© ²§ æÂ æÃ æÄ Íâ ½¬ æÆ æÅ ¿é æÇ æÈ æÉ ´å ´Í æÊ æË ËÝ Íã ÍÔ Ï· ¹Í æÎ ¼Ô æÍ æÏ ¼© ÂÑ æÐ ¹Ì Ì× æÑ æÒ æÓ æÔ æÕ ¼ª Ìí æ× Ã¿ æÖ æÙ æØ æÚ À» æÛ æÜ ʹ æÝ Áï æÞ æß Îþ æâ æá æà İ æã ¿¦ æä æå ϸ ææ æç æé æè È¥ Æù Ͼ È© æë ¾Ó ɪ æì æê ´Î ¸Ô »è Èî ¸ª Ëà æï æí ¹Î ¹Ï °é ºè ÇÙ °ß æô ÃÀ ÇØ ÂÛ æö æò æõ æð æó ˦ ¸Õ °ý æñ æø æù ƹ ¶» ç¦ Ç½ »é ¶¼ ÀÈ ÏÆ Ì® æ÷ ÀÔ µÓ æú æü æû æý æ Ǿ ı ç£ ç¢ æþ ¿Õ Éå ç¥ ç¤ ¹Ð ÏÓ çµ ç© çª ¼ð ç¨ ¹ø ç§ ç« Ä² Ê¢ Á£ ÂÜ ç¯ ç° ç¬ ç­ ç® ¹Ñ ç¶ ç² Éæ Ëì ɨ ç± ç´ ç³ ËÄ ç· ç¸ Á· ç¹ ç» ç¿ ç¼ çº Ç¿ ç½ ç¾ ²² çÅ çÀ çÁ ç ¡ çÄ çÃ çÆ çÇ çÈ ¿Ã ²é çÉ Î× ¼« ½­ »ê Ã× çÊ çË ±± çÌ çÍ çÎ çÏ çÐ ¶½ Úª çÑ Àå çÒ ¼Ë çÓ Ð° çÔ ÊÞ ´Ü Á¤ ½Ø Éñ ½® çÕ ¹Ò çÖ ÈÌ çä çØ ÂÉ Çõ ¸¿ ç× Á¥ çÙ Äú çÛ çÚ çÝ çÜ çÞ çà çß ´Ï çá çâ çã º± ÎÉ çå ¿§ ±ð çæ çç çè °ò çé çê Éç ¼Ç çì ³© °² çë çî ÇÎ ¿Ä ²Ö ˧ ·Ý ¶Ü çí ²ê ´£ ±ñ çò Îê ÂÝ ÉÄ çþ ²× çü çú çñ çï çð ¼ã ¶ì Ã÷ ÆÑ ±Ñ çô çó çù çõ çø û× ÌÐ ç÷ ²Ø ³ý çû çý ·Ô è£ è¬ è­ °« è´ °ñ è« èª è¥ è¤ è¢ è¡ Ãã Âû è§ è¦ è© Áð ·Õ ±Á è¨ ¹Ó Áñ ûØ èº è» ²Ù ²® è¸ ûÙ è® è¶ è½ è· èµ çö è³ è¯ ´Ð è± è¼ è² è¾ è° Çü Íé è¹ èÏ èÇ ¿û ûÚ µÆ ¶Ý è ²Û ¾Ô èÅ ºÚ ÅÑ èÊ Êî èÁ ²Ú ¸Ö É© èË è¿ ûÛ èÈ èÒ èà èÄ Æº èÉ èÆ Ë¨ èÌ °à èÀ èÎ èÍ Çë èÔ èß ³þ èâ èÐ èÕ Íî èÞ ûÜ ÍÕ Îª Ãø ³ë Éò èä Æ¡ °± èÝ èÙ Áò èÓ èÛ èà Ǭ °ª èØ èá Éø èÜ è× ¾Õ ½¯ ¼¬ ÌØ ÉÇ èç èð èÚ ³÷ ûÝ ¾ø èå èê Áó èæ èí Ãß èî ÍÖ èã ³¸ èé èì ̬ èï èè èë ù¥ Ë© Ï¡ èó èú èò ¼Ã èÑ ÊΠ̢ èù èø èô èõ ±¶ è÷ èñ ÄÕ èö °þ ¢ Êà èû é¡ ÈÙ èþ ¾Ö ¼É é£ ¶¾ ûÞ é¤ Éù èý ûß èÖ èü ÏÏ Æ¢ Éó ûà é« é± é² é¥ Çö é¯ é§ é© é³ é¨ é¬ ±ò Æå é­ é° é¦ Á¦ éª »§ ¿Å ·° Ìô Ìù ½ò ûâ é· éµ ÏÎ é´ Íõ é¶ é¸ é¹ é¼ éº Æ£ é» ÈÍ é® ½ó é½ é Áô éÁ é¢ éà ÁÉ é¾ éÀ é¿ Ý± Ý¢ éÅ éÄ Íö â¼ éÆ éÇ éÈ ¸× µÔ éÊ ÑÝ µõ κ ¶ó éË éÌ Ãî éÍ Æú °º ²ã éÒ éÓ éÎ »½ éÏ Ç éÐ éÑ éÛ éÕ éØ éÔ éÖ é× ¼Ø éÙ ÃÁ ·Ö ³Â éÜ ³¿ éá éÝ éà Ⱥ éÞ éß ÉÈ ÈÚ éâ Âý éì éè ²ë éæ Ëª éç éä éå éê éí éë éé éã ÃØ éô ̪ éò éó éî éð éñ éï Àæ Ϲ éø éù ê¡ ¿ª éû éþ éö éõ ê¢ ²Ü éü ê£ éý éú ij é÷ Çè ê§ Í» ê¦ ê¥ ê® ê¨ ê° Íæ ê³ êª ê« ê¯ ê² ê± ê© ê¬ ê½ ê¶ ê´ êµ êº ê» ³ª µÂ ê¹ ê¤ ûå ê¸ ê¼ ê· ê¾ êÀ ê¿ ê êÁ éÚ êÆ êà êÄ êÅ êÇ ·ì êÉ êÈ ½° ¹Ô Þ§ êÊ ½Ñ ³¹ êË ±Ò ¾× êÌ ¹Õ êÍ °á ɽ êÎ ¿ê êÕ êÒ Ãï êÓ êÐ ¶Þ êÏ êÖ ·¶ ÂÞ êÜ êØ Âµ ê× êÚ êÑ êÛ êÝ Èï êÙ êÞ êà ¸Ó êÔ °Á êß ºÛ Îö êá êâ Áõ ΢ êã ͵ êä êå Êä êæ ºÀ Σ êë êì ¾Ø êê ûæ Íç êç êé À½ ¿þ êè êí Ê£ êï êî ³ì Ë« êð ù¢ êü êò êó êô êõ êù êú êø êö êñ ê÷ êû ð· ²¨ êþ ¶ß êý ë¢ ë¡ ë¤ ë£ ë¥ ½± ë¦ ë§ ë¨ À¾ Í× ë© Ê¤ ÇÆ ëª ë« ¸« µ¬ ë¬ »ë ÇÁ ë­ ³Ð ë® ë° Í÷ ë¯ ¿Æ ë± ë² ë³ ´Ñ ë´ ëµ ë¶ ë· ³Ñ ë¸ ë¹ ëº ²ò ¿¨ ë» ë¼ ë½ ¸À Äû ë¾ ·× ¿Ö ëÁ Ƥ ëÀ ûç ·± ë¿ Â÷ µ­ ë ëà ¾Ù ·í ëÄ Ë¬ Àß µö Ìõ ÁÊ ëÅ ûè ¿Ç Ãð ¾Ú ëÆ ëÉ ëÊ º¾  ëÈ ¾Û ɾ ëÇ »ì ±Ó ëÎ ·Ø »î »í ÏÍ ëÍ ëÌ Á§ µÍ Ïà ³º ¾Ü ûé ëË ëÐ ëÑ ëÏ ¸Ø ÍÀ »ï ǧ ëÔ ÀÀ àͶ ë× ¸ì À¿ ëÓ ëØ ¸í ëÕ ëÖ ûê ëÒ Àâ ÆÉ Ã¯ ²Ý Èð µÃ ûë Ä´ ëÛ ëÙ ÃÌ ÀÁ ´Ò ëÚ ¿Û ÎÊ ÏÀ ëÜ ëç ĵ ëæ ûì ëã ëë ëä ëà Äü ëß ëÝ Í¡ »ð ëá ëÞ ûî ëå ½ô ¸Á Âú ËÅ ±Ú °â Æ¥ ëé ëè Ææ ëí ëâ ëì ëî ¸¬ ëê ¹Ö ¼Õ ëï ÍØ ëò ëõ ëó ɵ ëð ¶à ëô ëö ëú ë÷ ëù ëø ûï ëû ¼± ëý ëü Éè ì¡ ·Ù ëþ ì¢ ì£ µÄ æÁ ¾ù ì¤ ¸î ì¥ ûð ì¦ »¾ ÚÎ ì§ ì¨ ½² ì© ìª ì« ì¬ ì­ Ã« ì® ì° ì¯ Æ¦ ì± Ë­ ì² ì³ ì´ ìµ ÆÚ ¾Ý ì¶ ¹ë Ю ì· ì¸ É¿ ì¹ ìÁ ìº ì¼ ì» ì½ ËÆ ì¾ ì¿ ìÀ ì ³­ Äç Éé ºâ ¹× ÉÏ ²ß ÈÎ ìÅ ´Ó ÀÕ ìÄ ìÉ Ãù Ìã ìÇ ìÈ µ® ìÊ Çã Âß Èñ Ž ìÆ ËÇ ²ì ìÌ Ï¨ Ä ÏÅ »ñ ìË Â± ìÜ Á¨ Æø ÉÐ ìÏ »¿ »ò ¾Þ Çå ¸­ ìÎ ìÍ Éê ¼Á ÅÒ ûñ ûò ìÑ ìÒ ¹Ø ìÐ ìÓ ìÔ ìÖ Â£ ìÕ ´æ ìØ ì× ìÙ ûó ìÛ ìÝ ìÞ ÀÖ ¼Ï ìß ³Ò ìà Áö ìá ìâ Éë ûô µ¯ ìã Ķ ±Û ìä ¼ñ ¿ö ­ ìç ìæ ìå ìí ìë ìè ìê ìé ìì µ÷ ìð À× ìñ ¸Ù ìî ìï Ï© Ä· Á© ìò ìõ ìó ìô Í٠Ƨ ìø ìö ì÷ ìù í© ìü ìý ìû ìú Äý í¡ í¥ í¢ ìþ í£ í¤ í« í¦ ÀØ í¨ íª í§ í­ ½³ í¬ í® í¯ í² í± í° í´ í³ Ìö í¶ íµ í· í¸ íº í¹ ¿È í» ¶í í¼ í¾ í¿ íÀ í½ íÁ ¼Ö í µ° ·³ ûö ¸® íà Æð ž íÄ íÇ ¼´ íÆ íÅ ·Ú íÈ ³Ó íÊ ºÜ íÉ íÒ íÌ íÎ Êå íË íÍ íÑ íÏ µ± íÐ íÓ ÇÚ ÎØ ½´ íÔ Í¢ íÖ íÕ íÙ ÍÁ íØ ³í í× íÜ íÛ íÚ Å² íÝ íÞ íß ¹ì ·¥ íà íá íâ ¿É íã ¼­ íä íå Ò¡ Ñþ íæ åð íç ä ¿« ÇÀ íè ÊÕ ÄÔ ¹þ é ±ª Ëø ¿× ·Þ ¶á ÊÖ íé íë íê ²à Æö íì Ç÷ ų íí ½Ò íï Ì íþ íñ íò ÄÉ Âà Á÷ ƨ íð µÕ íù íö î¥ Æ© Ãà íó Äþ ÅÓ íô íø ¿à Çç ÄÌ À í÷ ® ¤ íõ °© Ï¢ íú Âá ½µ ¿Ê íü íû °ï íý ɯ î§ ÆÛ ¿ë ÃÙ ¶ø î¦ Í· ±¿ Ê× ²á î¡ î¢ î£ î¤ Æ» ã °ã î¨ î© ô£ ½ îª ±ó ÁÌ ¸¯ ÍÚ ûù î« Å¬ Áø ¼× î¬ î¯ ½å î­ Á« Áª °ä ÎË î± Èò î³ î² î° ãä ´Ô íî îµ î´ î¶ Í¸ Æá Ë® î· ¼Ù î¸ î¹ îº Å¡ °ê ¹Ù Ϻ î¾ ûú ·´ î» î¼ Éô ³Ô ͹ ¶¿ ÅÔ î¿ îÀ ûü îÁ ûý Å¢ îà î ÆÓ îÄ ½¶ ¼à ÇÛ Ãñ ¼ò ¿ì îÅ îÆ ¿Ý îÇ îÈ îÉ Íï ½· îË îÊ ¹Ú ¹ó »À îÎ ½æ îÍ îÌ Âé ¸ï Àà Ȱ ½¹ îÏ ¾ß îÒ îÐ îÑ îÔ îÓ ¾ú îÕ îÖ î× ÈÐ ºÓ ¼á îØ î٠Τ ½Å Ìî ÎÌ îÚ ¶â îÛ ü¡ Å£ ûþ îÞ ³ø ¿Ë ü¢ îÜ îÝ Äà ü¥ ü¦ ËÕ ¶ü ü£ ü¤ îà îá îß îã ü§ ü© Æß ³Ã ü¨ îç îä îæ îâ ïÏ îå Îë ¸Ú ü° üª ü¬ îï ü« Å´ îê îí îë îð ü­ îñ ü¯ îé ü® îö ±ô îè È­ îì ¾à ü± ¹Û ü³ ü´ ËÈ ¶ä ½Æ Ƽ ù¤ Á­ îô îî îó Ìà ĸ îõ îò ü² Á¬ îù îø î÷ ü¸ ˯ ü¼ üº ü¶ ü· ü» ½û üµ îú Êß ±Ô ÉÆ Ãò µø ùª îü ü¿ ¹Ý ü üÄ »¬ îû ¿í ¿î ï¡ ï£ üà üÁ ¾û ü¾ ï¢ ï¤ ü½ ¶Ó ÉÅ ¼â Ï£ îþ ºø Ï¿ ï¦ ï¥ ï§ îý ù£ Æé ÅÕ Ä× ï¬ üÆ ÃÃ ï¨ ï© ·­ ï« üÅ ¸° ïª ¾á ³ù ï° º¿ Áù ÄÊ üÇ ³» ï® ï¯ ÄÃ ï­ ï± ï· üÈ ïº ï¹ Å­ ï² ï³ ï¶ ï¸ üÉ ¶À ï» ïµ ï´ üÊ ï¿ ïÀ ïÁ ï¾ ï½ ¾â ƪ ï¼ ïÅ ïà üË ïÄ ïÂ Âø ïÆ ïÇ ïÉ üÌ üÍ ´Õ ïÈ Ìú ïÔ ïÊ ïÍ ïË ïÌ ïÎ ïÐ ïÑ ïÒ ïÕ ïÓ ïÖ ïØ ï× Ä¹ Ìç ïÙ Á® ïÚ ÊÄ ïÛ ³« ±¼ ´× üÎ ´Ö ïÜ ïÝ ïÞ ïß ïà ´Ø ³Õ ¹Þ ȶ ïâ ïá ïã ±Ü ïæ ïå ïä ïç ïê °Ç ïè ïì ïë ïî ïí ïï Æ® ïð ïñ ïó ïò Éì ïô ïõ ºå ïö ï÷ ËÉ ÁË °¤ ÂË ïø Éí ïû ïù ¹ß ïú ¸Â ÊÅ ïý ð¡ ïþ 𢠱¡ ¿Ø ½ü ´Ù ð£ Çæ 𥠱¢ ð¤ ÄÄ ÎÍ Æ« ïü Φ ¸± ÍÛ ¶ù δ ·¨ Ââ ç¡ ð¦ ³¬ ¿ï ³Ö ð¨ ð© ð§ ·ä ºÝ ¾ã üÑ ±£ ÎÙ ð« î® ðª üÒ ð® ð¬ ð­ ð¯ ð° Îì ð± ð² ÀÉ È» ¿ý ´ç ͺ ²í ½¸ ¸Û ðµ ð´ »ó ð¶ ð³ »¨ ðº ê­ ÒÖ ¿÷ ð¸ Î¥ Æñ ±« Àã ¼¶ Ê· ±À Îí Íë ð» ÅÅ ¼û ð¼ ð½ ¿Ì ð¾ Îî ð¹ ðÀ ð ðÁ ð¿ ðà ðÄ Áú ²â ðŠ̸ ðÆ ðÇ Ïª üÓ Û± ðÈ üÔ ðÉ ðÊ ðÎ üÕ ðË ðÌ ðÍ ðÏ üÖ ü× üØ ÀÄ üÙ Ì÷ ÀÅ ðÐ Èó ðÑ óÓ ÌÌ ðÒ ðÓ ðÔ ³× ðÖ ¿Ù ð× ·¤ ðØ ðÜ ðÚ ðÛ ³ó ðÙ ðÝ ðÞ °È ðß ðà ¾ä ðá µÇ ðä ðã ðâ ëñ ÊÜ ðå ðæ ðç ðè ðé ðê ´Ú ðë ðì Ç£ ðî ²» ðñ ð𠱤 ¶Á ÊÇ Äº º¢ ¹à ½ç ¿Ü ðó ðò Í ´è ÈÒ ÆÜ ¿ü ÎÎ ·Û ðö ðõ ËË Æ¬ ±Ð ð÷ ðô ÉÑ Íê ðø ðù ðû Âê ³Û ³Ü ðú ´é ¸² üÚ ´ê Å¿ Îà üÛ ¸Ü ðü ðý ðþ ñ¡ ñ£ ñ¢ É÷ ñ¤ ñ¥ ñ¦ ñ§ ñ© ñ¨ ñª Èô æÌ ¿© µ² ñ« ñ¬ Ò¬ Ý» ÈÓ °û °» »ô ˰ ¾þ ñ­ Ìß ñ® ÍÜ ±Â »Á ñ¯ ²î ñ° ñ± ñ³ ñ´ ñ¶ ñ² ñµ üÞ ´Û ñ· ñ¸ ñ¹ ñº ñ» ñ½ ñ¼ ñ¿ ñ ñ¾ ñÀ ñÁ ñà ¶Â ¼ó ñÄ ñÅ ¹á üà ñÆ ³¾ ÇÏ ñÇ ñÈ ÃÚ Æë ñÉ Çý ÂÌ ±Ø ¶î ¶ï Ãó ñÎ ¶ð ²ï ñÍ ñË ñÌ ñÊ ñØ ñÏ ñÐ ñÑ ñÒ ñÔ ñÓ ½Ù ñÕ ñ× µ³ ñÖ Áû ¸³ ñÙ ÂÍ ñÚ Æ­ ñÛ ñà ñÞ ñÝ ñß ñÜ ñâ üá ñá ñä ¶Ã ñã ñå ñæ ñè ñç ñé ñë ñê ¹ü ñì ñí ³¼ ñî ñï ¿ñ ñð ññ ñò ñó ¹â üâ üã ñô ñõ ñö ñ÷ ñø ȱ ñú ɦ ñû ñù ñý ñü ñþ ò¡ ò¢ ò£ ò¤ ò¥ ò¦ ò§ ò¨ ò© òª ò« ò¬ ò­ ò® ݵ ò¯ äø µ´ ³¡ º² ò± ò° Ì¥ ò³ ò´ ò² òµ Ëâ ò¶ µû Ï¥ üå ò· üä ò¹ °¾ üæ òº Ê« ò¸ ò» ò¼ ò½ ò¾ ò¿ Ëî »­ ºú Á¯ üç òÀ òà üè òÁ òÄ ¸ñ ò òÅ òÆ òÇ òË »ª Âä òÌ òÉ òÈ òÊ ·ß òÐ òÏ òÎ °³ üé òÚ òÖ ò× òÓ òÙ òÕ ³â ÏÌ òØ òÔ òÒ òÑ òÜ òß òÞ òÝ ÉÉ òÛ °ó òà òâ ³ï òÍ ±· òä òã òá í Ëð ÎÚ òå òæ òç òè òé Ä» òê È· òï òë òì ˱ ÌÄ ÆÐ òð òñ ƾ òî òí ²ª òù òø ±õ òö òõ òó ³û òò ¼² ²© ¹ã òü òû òú ò÷ òý òþ ó¥ ó¤ ó¦ ±­ ó¡ ó¢ ¹ô ̹ ó£ üë ˲ ó« üê ó§ ó¬ ó© ó¨ ·Ü ó­ ó® ó¯ óª òô ó° Äá ó´ óµ ó³ ó² ó¸ ó± ó¶ ó· óº ó¹ ó¼ ó½ ó¾ ÏÉ ó» Âë ºí ó¿ üí óÀ óÁ ó óà ¸´ óÄ óÅ ¼¯ óÆ óÇ óÈ óÉ óÌ óÊ Ï¼ óË Îï óÍ ÎÛ óÎ Çþ óÏ óÑ óÒ óÐ ¹í ÌÍ Ëã Ö÷ Ýà Ëû ²« óÔ µÐ óÕ óÖ ó× üî ¹õ óØ àÔ ÌÛ Âã óÙ óÛ óÚ óÜ óÝ óÞ óß óà óá óâ óã óä óå óæ óç óè Ť ¸Ý óê ÁÍ óë óì É¡ óí óî ã· ìÚ ðí óï óð óò óó óô Îð óñ óõ óö óø ó÷ óú óû óù ζ óü óý ãÔ óþ úÆ üÏ ùÔ ùß ùà ùõ ú¾ úÎ úÐ úû û£ ûº û ûà ûÄ ûÆ ûÊ ûÍ ûÖ ûá ûã ûä ûí ûõ û÷ ûø ûû ü¹ üÀ üÐ üÜ üÝ üß üì ¡ª üþ ¡ô ¡ð ¡ó ¡õ üý ¡Ê ¡Ë ¡ö ¡Ü ¡¤ ¡Ý ¡¥ ¡¿ £° £± £² £³ £´ £µ £¶ £· £¸ £¹ ¡§ ¡¨ ¡ã ¡á ¡ä ¡© ¡÷ £Á £Â £Ã £Ä £Å £Æ £Ç £È £É £Ê £Ë £Ì £Í £Î £Ï £Ð £Ñ £Ò £Ó £Ô £Õ £Ö £× £Ø £Ù £Ú ¡Î ¡À ¡Ï ¡° ¡² ¡® £á £â £ã £ä £å £æ £ç £è £é £ê £ë £ì £í £î £ï £ð £ñ £ò £ó £ô £õ £ö £÷ £ø £ù £ú ¡Ð ¡Ã ¡Ñ ¡Á Ž¡ Ž¢ Ž£ ޤ Ž¥ ަ ާ ލ Ž© Žª Ž« ެ Ž­ Ž® ޝ ް ޱ ޲ ޳ Ž´ ޵ ޶ Ž· ޏ ޹ Žº Ž» ޼ ޽ ޾ Ž¿ ŽÀ ŽÁ ŽÂ ŽÃ ŽÄ ŽÅ ŽÆ ŽÇ ŽÈ ŽÉ ŽÊ ŽË ŽÌ ŽÍ ŽÎ ŽÏ ŽÐ ŽÑ ŽÒ ŽÓ ŽÔ ŽÕ ŽÖ Ž× ŽØ ŽÙ ŽÚ ŽÛ ŽÜ ŽÝ ŽÞ Žß ¡ñ ¡ò ¢Ì ¡± üü ¡ï ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢¹ ¢Â ¢Ã ¢Ä ¢ë ¢ì ¢í ¢î ¢ï ¢ð ¢ñ ¦á ¦â ¦ã ¦ä ¦å ¦ç ¦é ¦ê ¦ì ¦ñ ¦ò ¦ó ¦ô ¦õ ¦ö ¦÷ ¦ø ¦ù ¦ú ¦û ¦ü §Â §Ã §Ä §Å §Æ §Ç §È §É §Ê §Ë §Ì §Í §Î §ò §ó §ô §õ §ö §÷ §ø §ù §ú §û §ü §ý §þ ©¡ ©¢ ©¤ ©¦ ©¨ ©© ©« ©¬ ©­ ©¯ ©° ©Á ©Â ©Ã ©Ä ©Å ©Æ ©Ç ©È ©É ©Ê ©Ë ©Ì ©Í ©Î ©Ï ©Ð ª¡ ª¢ ª£ ª¤ ª¥ ª¦ ª§ ª¨ ª© ªª ª« ª¬ ª­ ª® ª¯ ª° ª± ª² ª³ ª´ ªµ ª¶ ª· ª¸ ªº ª» ª¼ ª½ ª¾ ª¿ ªÀ ªÁ ªÂ ªÃ ªÄ ªÅ ªÆ ªÇ ªÈ ªÉ ªÊ ªË ªÌ ªÍ ªÎ ªÏ ªÐ ªÑ ªÒ ªÓ ªÔ ªÕ ªÖ ª× ªØ ªÙ ªÚ ªÛ ªÜ ªÝ ªÞ ªß ªà ªá ªâ ªã ªä ªå ªæ ªç ªè ªé ªê ªë ªì ªí ªî ªï ªð ªñ ªò ªó ªô ªõ ªö ª÷ «¡ «¢ «£ «¤ «¥ «¦ «§ «¨ «© «ª «« «¬ «­ «® «¯ «° «± «² «³ «´ «µ «¶ «· «¸ «¹ «º «» «½ «¾ «¿ «À «Á «Â «Ã «Å «Æ «Ç «È «É «Ê «Ë «Ì «Í «Î «Ï «Ð «Ñ «Ò «Ó «Ô «Õ «Ö «× «Ø «Ù «Ú «Û «Ü «Ý «Þ «ß «à «á «â «ã «ä «å «æ «ç «è «é «ê «ë «ì «í «î «ï «ð «ñ «ò «ó «ô «õ «ö «÷ °¡ °¢ °£ °¤ °¥ °¦ °§ °¨ °© °ª °« °¬ °­ °® °¯ °° °± °² °³ °´ °µ °¶ °· °¸ °¹ °º °» °¼ °½ °¾ °¿ °À °Á °Â °Ã °Ä °Å °Æ °Ç °È °É °Ê °Ë °Ì °Í °Î °Ï °Ð °Ñ °Ò °Ó °Ô °Õ °Ö °× °Ø °Ù °Ú °Û °Ü °Ý °Þ °ß °à °á °â °ã °ä °å °æ °ç °è °é °ê °ë °ì °í °î °ï °ð °ñ °ò °ó °ô °õ °ö °÷ °ø °ù °ú °û °ü °ý °þ ±¡ ±¢ ±£ ±¤ ±¥ ±¦ ±§ ±¨ ±© ±ª ±« ±¬ ±­ ±® ±¯ ±° ±± ±² ±³ ±´ ±µ ±¶ ±· ±¸ ±¹ ±º ±» ±¼ ±½ ±¾ ±¿ ±À ±Á ±Â ±Ã ±Ä ±Å ±Æ ±Ç ±È ±É ±Ê ±Ë ±Ì ±Í ±Î ±Ï ±Ð ±Ñ ±Ò ±Ó ±Ô ±Õ ±Ö ±× ±Ø ±Ù ±Ú ±Û ±Ü ±Ý ±Þ ±ß ±à ±á ±â ±ã ±ä ±å ±æ ±ç ±è ±é ±ê ±ë ±ì ±í ±î ±ï ±ð ±ñ ±ò ±ó ±ô ±õ ±ö ±÷ ±ø ±ù ±ú ±û ±ü ±ý ±þ ²¡ ²¢ ²£ ²¤ ²¥ ²¦ ²§ ²¨ ²© ²ª ²« ²¬ ²­ ²® ²¯ ²° ²± ²² ²³ ²´ ²µ ²¶ ²· ²¸ ²¹ ²º ²» ²¼ ²½ ²¾ ²¿ ²À ²Á ²Â ²Ã ²Ä ²Å ²Æ ²Ç ²È ²É ²Ê ²Ë ²Ì ²Í ²Î ²Ï ²Ð ²Ñ ²Ò ²Ó ²Ô ²Õ ²Ö ²× ²Ø ²Ù ²Ú ²Û ²Ü ²Ý ²Þ ²ß ²à ²á ²â ²ã ²ä ²å ²æ ²ç ²è ²é ²ê ²ë ²ì ²í ²î ²ï ²ð ²ñ ²ò ²ó ²ô ²õ ²ö ²÷ ²ø ²ù ²ú ²û ²ü ²ý ²þ ³¡ ³¢ ³£ ³¤ ³¥ ³¦ ³§ ³¨ ³© ³ª ³« ³¬ ³­ ³® ³¯ ³° ³± ³² ³³ ³´ ³µ ³¶ ³· ³¸ ³¹ ³º ³» ³¼ ³½ ³¾ ³¿ ³À ³Á ³Â ³Ã ³Ä ³Å ³Æ ³Ç ³È ³É ³Ê ³Ë ³Ì ³Í ³Î ³Ï ³Ð ³Ñ ³Ò ³Ó ³Ô ³Õ ³Ö ³× ³Ø ³Ù ³Ú ³Û ³Ü ³Ý ³Þ ³ß ³à ³á ³â ³ã ³ä ³å ³æ ³ç ³è ³é ³ê ³ë ³ì ³í ³î ³ï ³ð ³ñ ³ò ³ó ³ô ³õ ³ö ³÷ ³ø ³ù ³ú ³û ³ü ³ý ³þ ´¡ ´¢ ´£ ´¤ ´¥ ´¦ ´§ ´¨ ´© ´ª ´« ´¬ ´­ ´® ´¯ ´° ´± ´² ´³ ´´ ´µ ´¶ ´· ´¸ ´¹ ´º ´» ´¼ ´½ ´¾ ´¿ ´À ´Á ´Â ´Ã ´Ä ´Å ´Æ ´Ç ´È ´É ´Ê ´Ë ´Ì ´Í ´Î ´Ï ´Ð ´Ñ ´Ò ´Ó ´Ô ´Õ ´Ö ´× ´Ø ´Ù ´Ú ´Û ´Ü ´Ý ´Þ ´ß ´à ´á ´â ´ã ´ä ´å ´æ ´ç ´è ´é ´ê ´ë ´ì ´í ´î ´ï ´ð ´ñ ´ò ´ó ´ô ´õ ´ö ´÷ ´ø ´ù ´ú ´û ´ü ´ý ´þ µ¡ µ¢ µ£ µ¤ µ¥ µ¦ µ§ µ¨ µ© µª µ« µ¬ µ­ µ® µ¯ µ° µ± µ² µ³ µ´ µµ µ¶ µ· µ¸ µ¹ µº µ» µ¼ µ½ µ¾ µ¿ µÀ µÁ µÂ µÃ µÄ µÅ µÆ µÇ µÈ µÉ µÊ µË µÌ µÍ µÎ µÏ µÐ µÑ µÒ µÓ µÔ µÕ µÖ µ× µØ µÙ µÚ µÛ µÜ µÝ µÞ µß µà µá µâ µã µä µå µæ µç µè µé µê µë µì µí µî µï µð µñ µò µó µô µõ µö µ÷ µø µù µú µû µü µý µþ ¶¡ ¶¢ ¶£ ¶¤ ¶¥ ¶¦ ¶§ ¶¨ ¶© ¶ª ¶« ¶¬ ¶­ ¶® ¶¯ ¶° ¶± ¶² ¶³ ¶´ ¶µ ¶¶ ¶· ¶¸ ¶¹ ¶º ¶» ¶¼ ¶½ ¶¾ ¶¿ ¶À ¶Á ¶Â ¶Ã ¶Ä ¶Å ¶Æ ¶Ç ¶È ¶É ¶Ê ¶Ë ¶Ì ¶Í ¶Î ¶Ï ¶Ð ¶Ñ ¶Ò ¶Ó ¶Ô ¶Õ ¶Ö ¶× ¶Ø ¶Ù ¶Ú ¶Û ¶Ü ¶Ý ¶Þ ¶ß ¶à ¶á ¶â ¶ã ¶ä ¶å ¶æ ¶ç ¶è ¶é ¶ê ¶ë ¶ì ¶í ¶î ¶ï ¶ð ¶ñ ¶ò ¶ó ¶ô ¶õ ¶ö ¶÷ ¶ø ¶ù ¶ú ¶û ¶ü ¶ý ¶þ ·¡ ·¢ ·£ ·¤ ·¥ ·¦ ·§ ·¨ ·© ·ª ·« ·¬ ·­ ·® ·¯ ·° ·± ·² ·³ ·´ ·µ ·¶ ·· ·¸ ·¹ ·º ·» ·¼ ·½ ·¾ ·¿ ·À ·Á ·Â ·Ã ·Ä ·Å ·Æ ·Ç ·È ·É ·Ê ·Ë ·Ì ·Í ·Î ·Ï ·Ð ·Ñ ·Ò ·Ó ·Ô ·Õ ·Ö ·× ·Ø ·Ù ·Ú ·Û ·Ü ·Ý ·Þ ·ß ·à ·á ·â ·ã ·ä ·å ·æ ·ç ·è ·é ·ê ·ë ·ì ·í ·î ·ï ·ð ·ñ ·ò ·ó ·ô ·õ ·ö ·÷ ·ø ·ù ·ú ·û ·ü ·ý ·þ ¸¡ ¸¢ ¸£ ¸¤ ¸¥ ¸¦ ¸§ ¸¨ ¸© ¸ª ¸« ¸¬ ¸­ ¸® ¸¯ ¸° ¸± ¸² ¸³ ¸´ ¸µ ¸¶ ¸· ¸¸ ¸¹ ¸º ¸» ¸¼ ¸½ ¸¾ ¸¿ ¸À ¸Á ¸Â ¸Ã ¸Ä ¸Å ¸Æ ¸Ç ¸È ¸É ¸Ê ¸Ë ¸Ì ¸Í ¸Î ¸Ï ¸Ð ¸Ñ ¸Ò ¸Ó ¸Ô ¸Õ ¸Ö ¸× ¸Ø ¸Ù ¸Ú ¸Û ¸Ü ¸Ý ¸Þ ¸ß ¸à ¸á ¸â ¸ã ¸ä ¸å ¸æ ¸ç ¸è ¸é ¸ê ¸ë ¸ì ¸í ¸î ¸ï ¸ð ¸ñ ¸ò ¸ó ¸ô ¸õ ¸ö ¸÷ ¸ø ¸ù ¸ú ¸û ¸ü ¸ý ¸þ ¹¡ ¹¢ ¹£ ¹¤ ¹¥ ¹¦ ¹§ ¹¨ ¹© ¹ª ¹« ¹¬ ¹­ ¹® ¹¯ ¹° ¹± ¹² ¹³ ¹´ ¹µ ¹¶ ¹· ¹¸ ¹¹ ¹º ¹» ¹¼ ¹½ ¹¾ ¹¿ ¹À ¹Á ¹Â ¹Ã ¹Ä ¹Å ¹Æ ¹Ç ¹È ¹É ¹Ê ¹Ë ¹Ì ¹Í ¹Î ¹Ï ¹Ð ¹Ñ ¹Ò ¹Ó ¹Ô ¹Õ ¹Ö ¹× ¹Ø ¹Ù ¹Ú ¹Û ¹Ü ¹Ý ¹Þ ¹ß ¹à ¹á ¹â ¹ã ¹ä ¹å ¹æ ¹ç ¹è ¹é ¹ê ¹ë ¹ì ¹í ¹î ¹ï ¹ð ¹ñ ¹ò ¹ó ¹ô ¹õ ¹ö ¹÷ ¹ø ¹ù ¹ú ¹û ¹ü ¹ý ¹þ º¡ º¢ º£ º¤ º¥ º¦ º§ º¨ º© ºª º« º¬ º­ º® º¯ º° º± º² º³ º´ ºµ º¶ º· º¸ º¹ ºº º» º¼ º½ º¾ º¿ ºÀ ºÁ ºÂ ºÃ ºÄ ºÅ ºÆ ºÇ ºÈ ºÉ ºÊ ºË ºÌ ºÍ ºÎ ºÏ ºÐ ºÑ ºÒ ºÓ ºÔ ºÕ ºÖ º× ºØ ºÙ ºÚ ºÛ ºÜ ºÝ ºÞ ºß ºà ºá ºâ ºã ºä ºå ºæ ºç ºè ºé ºê ºë ºì ºí ºî ºï ºð ºñ ºò ºó ºô ºõ ºö º÷ ºø ºù ºú ºû ºü ºý ºþ »¡ »¢ »£ »¤ »¥ »¦ »§ »¨ »© »ª »« »¬ »­ »® »¯ »° »± »² »³ »´ »µ »¶ »· »¸ »¹ »º »» »¼ »½ »¾ »¿ »À »Á »Â »Ã »Ä »Å »Æ »Ç »È »É »Ê »Ë »Ì »Í »Î »Ï »Ð »Ñ »Ò »Ó »Ô »Õ »Ö »× »Ø »Ù »Ú »Û »Ü »Ý »Þ »ß »à »á »â »ã »ä »å »æ »ç »è »é »ê »ë »ì »í »î »ï »ð »ñ »ò »ó »ô »õ »ö »÷ »ø »ù »ú »û »ü »ý »þ ¼¡ ¼¢ ¼£ ¼¤ ¼¥ ¼¦ ¼§ ¼¨ ¼© ¼ª ¼« ¼¬ ¼­ ¼® ¼¯ ¼° ¼± ¼² ¼³ ¼´ ¼µ ¼¶ ¼· ¼¸ ¼¹ ¼º ¼» ¼¼ ¼½ ¼¾ ¼¿ ¼À ¼Á ¼Â ¼Ã ¼Ä ¼Å ¼Æ ¼Ç ¼È ¼É ¼Ê ¼Ë ¼Ì ¼Í ¼Î ¼Ï ¼Ð ¼Ñ ¼Ò ¼Ó ¼Ô ¼Õ ¼Ö ¼× ¼Ø ¼Ù ¼Ú ¼Û ¼Ü ¼Ý ¼Þ ¼ß ¼à ¼á ¼â ¼ã ¼ä ¼å ¼æ ¼ç ¼è ¼é ¼ê ¼ë ¼ì ¼í ¼î ¼ï ¼ð ¼ñ ¼ò ¼ó ¼ô ¼õ ¼ö ¼÷ ¼ø ¼ù ¼ú ¼û ¼ü ¼ý ¼þ ½¡ ½¢ ½£ ½¤ ½¥ ½¦ ½§ ½¨ ½© ½ª ½« ½¬ ½­ ½® ½¯ ½° ½± ½² ½³ ½´ ½µ ½¶ ½· ½¸ ½¹ ½º ½» ½¼ ½½ ½¾ ½¿ ½À ½Á ½Â ½Ã ½Ä ½Å ½Æ ½Ç ½È ½É ½Ê ½Ë ½Ì ½Í ½Î ½Ï ½Ð ½Ñ ½Ò ½Ó ½Ô ½Õ ½Ö ½× ½Ø ½Ù ½Ú ½Û ½Ü ½Ý ½Þ ½ß ½à ½á ½â ½ã ½ä ½å ½æ ½ç ½è ½é ½ê ½ë ½ì ½í ½î ½ï ½ð ½ñ ½ò ½ó ½ô ½õ ½ö ½÷ ½ø ½ù ½ú ½û ½ü ½ý ½þ ¾¡ ¾¢ ¾£ ¾¤ ¾¥ ¾¦ ¾§ ¾¨ ¾© ¾ª ¾« ¾¬ ¾­ ¾® ¾¯ ¾° ¾± ¾² ¾³ ¾´ ¾µ ¾¶ ¾· ¾¸ ¾¹ ¾º ¾» ¾¼ ¾½ ¾¾ ¾¿ ¾À ¾Á ¾Â ¾Ã ¾Ä ¾Å ¾Æ ¾Ç ¾È ¾É ¾Ê ¾Ë ¾Ì ¾Í ¾Î ¾Ï ¾Ð ¾Ñ ¾Ò ¾Ó ¾Ô ¾Õ ¾Ö ¾× ¾Ø ¾Ù ¾Ú ¾Û ¾Ü ¾Ý ¾Þ ¾ß ¾à ¾á ¾â ¾ã ¾ä ¾å ¾æ ¾ç ¾è ¾é ¾ê ¾ë ¾ì ¾í ¾î ¾ï ¾ð ¾ñ ¾ò ¾ó ¾ô ¾õ ¾ö ¾÷ ¾ø ¾ù ¾ú ¾û ¾ü ¾ý ¾þ ¿¡ ¿¢ ¿£ ¿¤ ¿¥ ¿¦ ¿§ ¿¨ ¿© ¿ª ¿« ¿¬ ¿­ ¿® ¿¯ ¿° ¿± ¿² ¿³ ¿´ ¿µ ¿¶ ¿· ¿¸ ¿¹ ¿º ¿» ¿¼ ¿½ ¿¾ ¿¿ ¿À ¿Á ¿Â ¿Ã ¿Ä ¿Å ¿Æ ¿Ç ¿È ¿É ¿Ê ¿Ë ¿Ì ¿Í ¿Î ¿Ï ¿Ð ¿Ñ ¿Ò ¿Ó ¿Ô ¿Õ ¿Ö ¿× ¿Ø ¿Ù ¿Ú ¿Û ¿Ü ¿Ý ¿Þ ¿ß ¿à ¿á ¿â ¿ã ¿ä ¿å ¿æ ¿ç ¿è ¿é ¿ê ¿ë ¿ì ¿í ¿î ¿ï ¿ð ¿ñ ¿ò ¿ó ¿ô ¿õ ¿ö ¿÷ ¿ø ¿ù ¿ú ¿û ¿ü ¿ý ¿þ À¡ À¢ À£ À¤ À¥ À¦ À§ À¨ À© Àª À« À¬ À­ À® À¯ À° À± À² À³ À´ Àµ À¶ À· À¸ À¹ Àº À» À¼ À½ À¾ À¿ ÀÀ ÀÁ À Àà ÀÄ ÀÅ ÀÆ ÀÇ ÀÈ ÀÉ ÀÊ ÀË ÀÌ ÀÍ ÀÎ ÀÏ ÀÐ ÀÑ ÀÒ ÀÓ ÀÔ ÀÕ ÀÖ À× ÀØ ÀÙ ÀÚ ÀÛ ÀÜ ÀÝ ÀÞ Àß Àà Àá Àâ Àã Àä Àå Àæ Àç Àè Àé Àê Àë Àì Àí Àî Àï Àð Àñ Àò Àó Àô Àõ Àö À÷ Àø Àù Àú Àû Àü Àý Àþ Á¡ Á¢ Á£ Á¤ Á¥ Á¦ Á§ Á¨ Á© Áª Á« Á¬ Á­ Á® Á¯ Á° Á± Á² Á³ Á´ Áµ Á¶ Á· Á¸ Á¹ Áº Á» Á¼ Á½ Á¾ Á¿ ÁÀ ÁÁ Á Áà ÁÄ ÁÅ ÁÆ ÁÇ ÁÈ ÁÉ ÁÊ ÁË ÁÌ ÁÍ ÁÎ ÁÏ ÁÐ ÁÑ ÁÒ ÁÓ ÁÔ ÁÕ ÁÖ Á× ÁØ ÁÙ ÁÚ ÁÛ ÁÜ ÁÝ ÁÞ Áß Áà Áá Áâ Áã Áä Áå Áæ Áç Áè Áé Áê Áë Áì Áí Áî Áï Áð Áñ Áò Áó Áô Áõ Áö Á÷ Áø Áù Áú Áû Áü Áý Áþ ¡ ¢ £ ¤ Â¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ ÂÀ ÂÁ  Âà ÂÄ ÂÅ ÂÆ ÂÇ ÂÈ ÂÉ ÂÊ ÂË ÂÌ ÂÍ ÂÎ ÂÏ ÂÐ ÂÑ ÂÒ ÂÓ ÂÔ ÂÕ ÂÖ Â× ÂØ ÂÙ ÂÚ ÂÛ ÂÜ ÂÝ ÂÞ Âß Âà Âá Ââ Âã Âä Âå Âæ Âç Âè Âé Âê Âë Âì Âí Âî Âï Âð Âñ Âò Âó Âô Âõ Âö Â÷ Âø Âù Âú Âû Âü Âý Âþ á â ã ä Ã¥ æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ ÃÀ ÃÁ àÃà ÃÄ ÃÅ ÃÆ ÃÇ ÃÈ ÃÉ ÃÊ ÃË ÃÌ ÃÍ ÃÎ ÃÏ ÃÐ ÃÑ ÃÒ ÃÓ ÃÔ ÃÕ ÃÖ Ã× ÃØ ÃÙ ÃÚ ÃÛ ÃÜ ÃÝ ÃÞ Ãß Ãà Ãá Ãâ Ãã Ãä Ãå Ãæ Ãç Ãè Ãé Ãê Ãë Ãì Ãí Ãî Ãï Ãð Ãñ Ãò Ãó Ãô Ãõ Ãö Ã÷ Ãø Ãù Ãú Ãû Ãü Ãý Ãþ Ä¡ Ä¢ Ä£ Ĥ Ä¥ Ħ ħ Ĩ Ä© Ī Ä« Ĭ Ä­ Ä® į İ ı IJ ij Ä´ ĵ Ķ Ä· ĸ Ĺ ĺ Ä» ļ Ľ ľ Ä¿ ÄÀ ÄÁ Ä Äà ÄÄ ÄÅ ÄÆ ÄÇ ÄÈ ÄÉ ÄÊ ÄË ÄÌ ÄÍ ÄÎ ÄÏ ÄÐ ÄÑ ÄÒ ÄÓ ÄÔ ÄÕ ÄÖ Ä× ÄØ ÄÙ ÄÚ ÄÛ ÄÜ ÄÝ ÄÞ Äß Äà Äá Äâ Äã Ää Äå Äæ Äç Äè Äé Äê Äë Äì Äí Äî Äï Äð Äñ Äò Äó Äô Äõ Äö Ä÷ Äø Äù Äú Äû Äü Äý Äþ Å¡ Å¢ Å£ Ť Å¥ Ŧ ŧ Ũ Å© Ū Å« Ŭ Å­ Å® ů Ű ű Ų ų Å´ ŵ Ŷ Å· Ÿ Ź ź Å» ż Ž ž Å¿ ÅÀ ÅÁ Å Åà ÅÄ ÅÅ ÅÆ ÅÇ ÅÈ ÅÉ ÅÊ ÅË ÅÌ ÅÍ ÅÎ ÅÏ ÅÐ ÅÑ ÅÒ ÅÓ ÅÔ ÅÕ ÅÖ Å× ÅØ ÅÙ ÅÚ ÅÛ ÅÜ ÅÝ ÅÞ Åß Åà Åá Åâ Åã Åä Åå Åæ Åç Åè Åé Åê Åë Åì Åí Åî Åï Åð Åñ Åò Åó Åô Åõ Åö Å÷ Åø Åù Åú Åû Åü Åý Åþ Æ¡ Æ¢ Æ£ Ƥ Æ¥ Ʀ Ƨ ƨ Æ© ƪ Æ« Ƭ Æ­ Æ® Ư ư Ʊ Ʋ Ƴ Æ´ Ƶ ƶ Æ· Ƹ ƹ ƺ Æ» Ƽ ƽ ƾ Æ¿ ÆÀ ÆÁ ÆÂ ÆÃ ÆÄ ÆÅ ÆÆ ÆÇ ÆÈ ÆÉ ÆÊ ÆË ÆÌ ÆÍ ÆÎ ÆÏ ÆÐ ÆÑ ÆÒ ÆÓ ÆÔ ÆÕ ÆÖ Æ× ÆØ ÆÙ ÆÚ ÆÛ ÆÜ ÆÝ ÆÞ Æß Æà Æá Æâ Æã Æä Æå Ææ Æç Æè Æé Æê Æë Æì Æí Æî Æï Æð Æñ Æò Æó Æô Æõ Æö Æ÷ Æø Æù Æú Æû Æü Æý Æþ Ç¡ Ç¢ Ç£ Ǥ Ç¥ Ǧ ǧ Ǩ Ç© Ǫ Ç« Ǭ Ç­ Ç® ǯ ǰ DZ Dz dz Ç´ ǵ Ƕ Ç· Ǹ ǹ Ǻ Ç» Ǽ ǽ Ǿ Ç¿ ÇÀ ÇÁ Ç Çà ÇÄ ÇÅ ÇÆ ÇÇ ÇÈ ÇÉ ÇÊ ÇË ÇÌ ÇÍ ÇÎ ÇÏ ÇÐ ÇÑ ÇÒ ÇÓ ÇÔ ÇÕ ÇÖ Ç× ÇØ ÇÙ ÇÚ ÇÛ ÇÜ ÇÝ ÇÞ Çß Çà Çá Çâ Çã Çä Çå Çæ Çç Çè Çé Çê Çë Çì Çí Çî Çï Çð Çñ Çò Çó Çô Çõ Çö Ç÷ Çø Çù Çú Çû Çü Çý Çþ È¡ È¢ È£ Ȥ È¥ Ȧ ȧ Ȩ È© Ȫ È« Ȭ È­ È® ȯ Ȱ ȱ Ȳ ȳ È´ ȵ ȶ È· ȸ ȹ Ⱥ È» ȼ Ƚ Ⱦ È¿ ÈÀ ÈÁ È Èà ÈÄ ÈÅ ÈÆ ÈÇ ÈÈ ÈÉ ÈÊ ÈË ÈÌ ÈÍ ÈÎ ÈÏ ÈÐ ÈÑ ÈÒ ÈÓ ÈÔ ÈÕ ÈÖ È× ÈØ ÈÙ ÈÚ ÈÛ ÈÜ ÈÝ ÈÞ Èß Èà Èá Èâ Èã Èä Èå Èæ Èç Èè Èé Èê Èë Èì Èí Èî Èï Èð Èñ Èò Èó Èô Èõ Èö È÷ Èø Èù Èú Èû Èü Èý Èþ É¡ É¢ É£ ɤ É¥ ɦ ɧ ɨ É© ɪ É« ɬ É­ É® ɯ ɰ ɱ ɲ ɳ É´ ɵ ɶ É· ɸ ɹ ɺ É» ɼ ɽ ɾ É¿ ÉÀ ÉÁ É Éà ÉÄ ÉÅ ÉÆ ÉÇ ÉÈ ÉÉ ÉÊ ÉË ÉÌ ÉÍ ÉÎ ÉÏ ÉÐ ÉÑ ÉÒ ÉÓ ÉÔ ÉÕ ÉÖ É× ÉØ ÉÙ ÉÚ ÉÛ ÉÜ ÉÝ ÉÞ Éß Éà Éá Éâ Éã Éä Éå Éæ Éç Éè Éé Éê Éë Éì Éí Éî Éï Éð Éñ Éò Éó Éô Éõ Éö É÷ Éø Éù Éú Éû Éü Éý Éþ Ê¡ Ê¢ Ê£ ʤ Ê¥ ʦ ʧ ʨ Ê© ʪ Ê« ʬ Ê­ Ê® ʯ ʰ ʱ ʲ ʳ Ê´ ʵ ʶ Ê· ʸ ʹ ʺ Ê» ʼ ʽ ʾ Ê¿ ÊÀ ÊÁ Ê Êà ÊÄ ÊÅ ÊÆ ÊÇ ÊÈ ÊÉ ÊÊ ÊË ÊÌ ÊÍ ÊÎ ÊÏ ÊÐ ÊÑ ÊÒ ÊÓ ÊÔ ÊÕ ÊÖ Ê× ÊØ ÊÙ ÊÚ ÊÛ ÊÜ ÊÝ ÊÞ Êß Êà Êá Êâ Êã Êä Êå Êæ Êç Êè Êé Êê Êë Êì Êí Êî Êï Êð Êñ Êò Êó Êô Êõ Êö Ê÷ Êø Êù Êú Êû Êü Êý Êþ Ë¡ Ë¢ Ë£ ˤ Ë¥ ˦ ˧ ˨ Ë© ˪ Ë« ˬ Ë­ Ë® ˯ ˰ ˱ ˲ ˳ Ë´ ˵ ˶ Ë· ˸ ˹ ˺ Ë» ˼ ˽ ˾ Ë¿ ËÀ ËÁ Ë Ëà ËÄ ËÅ ËÆ ËÇ ËÈ ËÉ ËÊ ËË ËÌ ËÍ ËÎ ËÏ ËÐ ËÑ ËÒ ËÓ ËÔ ËÕ ËÖ Ë× ËØ ËÙ ËÚ ËÛ ËÜ ËÝ ËÞ Ëß Ëà Ëá Ëâ Ëã Ëä Ëå Ëæ Ëç Ëè Ëé Ëê Ëë Ëì Ëí Ëî Ëï Ëð Ëñ Ëò Ëó Ëô Ëõ Ëö Ë÷ Ëø Ëù Ëú Ëû Ëü Ëý Ëþ Ì¡ Ì¢ Ì£ ̤ Ì¥ ̦ ̧ ̨ Ì© ̪ Ì« ̬ Ì­ Ì® ̯ ̰ ̱ ̲ ̳ Ì´ ̵ ̶ Ì· ̸ ̹ ̺ Ì» ̼ ̽ ̾ Ì¿ ÌÀ ÌÁ Ì Ìà ÌÄ ÌÅ ÌÆ ÌÇ ÌÈ ÌÉ ÌÊ ÌË ÌÌ ÌÍ ÌÎ ÌÏ ÌÐ ÌÑ ÌÒ ÌÓ ÌÔ ÌÕ ÌÖ Ì× ÌØ ÌÙ ÌÚ ÌÛ ÌÜ ÌÝ ÌÞ Ìß Ìà Ìá Ìâ Ìã Ìä Ìå Ìæ Ìç Ìè Ìé Ìê Ìë Ìì Ìí Ìî Ìï Ìð Ìñ Ìò Ìó Ìô Ìõ Ìö Ì÷ Ìø Ìù Ìú Ìû Ìü Ìý Ìþ Í¡ Í¢ Í£ ͤ Í¥ ͦ ͧ ͨ Í© ͪ Í« ͬ Í­ Í® ͯ Ͱ ͱ Ͳ ͳ Í´ ͵ Ͷ Í· ͸ ͹ ͺ Í» ͼ ͽ ; Í¿ ÍÀ ÍÁ Í Íà ÍÄ ÍÅ ÍÆ ÍÇ ÍÈ ÍÉ ÍÊ ÍË ÍÌ ÍÍ ÍÎ ÍÏ ÍÐ ÍÑ ÍÒ ÍÓ ÍÔ ÍÕ ÍÖ Í× ÍØ ÍÙ ÍÚ ÍÛ ÍÜ ÍÝ ÍÞ Íß Íà Íá Íâ Íã Íä Íå Íæ Íç Íè Íé Íê Íë Íì Íí Íî Íï Íð Íñ Íò Íó Íô Íõ Íö Í÷ Íø Íù Íú Íû Íü Íý Íþ Ρ ΢ Σ Τ Î¥ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο ÎÀ ÎÁ ΠÎà ÎÄ ÎÅ ÎÆ ÎÇ ÎÈ ÎÉ ÎÊ ÎË ÎÌ ÎÍ ÎÎ ÎÏ ÎÐ ÎÑ ÎÒ ÎÓ ÎÔ ÎÕ ÎÖ Î× ÎØ ÎÙ ÎÚ ÎÛ ÎÜ ÎÝ ÎÞ Îß Îà Îá Îâ Îã Îä Îå Îæ Îç Îè Îé Îê Îë Îì Îí Îî Îï Îð Îñ Îò Îó Îô Îõ Îö Î÷ Îø Îù Îú Îû Îü Îý Îþ Ï¡ Ï¢ Ï£ Ϥ Ï¥ Ϧ ϧ Ϩ Ï© Ϫ Ï« Ϭ Ï­ Ï® ϯ ϰ ϱ ϲ ϳ Ï´ ϵ ϶ Ï· ϸ Ϲ Ϻ Ï» ϼ Ͻ Ͼ Ï¿ ÏÀ ÏÁ Ï Ïà ÏÄ ÏÅ ÏÆ ÏÇ ÏÈ ÏÉ ÏÊ ÏË ÏÌ ÏÍ ÏÎ ÏÏ ÏÐ ÏÑ ÏÒ ÏÓ ÏÔ ÏÕ ÏÖ Ï× ÏØ ÏÙ ÏÚ ÏÛ ÏÜ ÏÝ ÏÞ Ïß Ïà Ïá Ïâ Ïã Ïä Ïå Ïæ Ïç Ïè Ïé Ïê Ïë Ïì Ïí Ïî Ïï Ïð Ïñ Ïò Ïó Ïô Ïõ Ïö Ï÷ Ïø Ïù Ïú Ïû Ïü Ïý Ïþ С Т У Ф Ð¥ Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ж з и й к л м н о п ÐÀ ÐÁ РÐà ÐÄ ÐÅ ÐÆ ÐÇ ÐÈ ÐÉ ÐÊ ÐË ÐÌ ÐÍ ÐÎ ÐÏ ÐÐ ÐÑ ÐÒ ÐÓ ÐÔ ÐÕ ÐÖ Ð× ÐØ ÐÙ ÐÚ ÐÛ ÐÜ ÐÝ ÐÞ Ðß Ðà Ðá Ðâ Ðã Ðä Ðå Ðæ Ðç Ðè Ðé Ðê Ðë Ðì Ðí Ðî Ðï Ðð Ðñ Ðò Ðó Ðô Ðõ Ðö Ð÷ Ðø Ðù Ðú Ðû Ðü Ðý Ðþ Ñ¡ Ñ¢ Ñ£ Ѥ Ñ¥ Ѧ ѧ Ѩ Ñ© Ѫ Ñ« Ѭ Ñ­ Ñ® ѯ Ѱ ѱ Ѳ ѳ Ñ´ ѵ Ѷ Ñ· Ѹ ѹ Ѻ Ñ» Ѽ ѽ Ѿ Ñ¿ ÑÀ ÑÁ Ñ Ñà ÑÄ ÑÅ ÑÆ ÑÇ ÑÈ ÑÉ ÑÊ ÑË ÑÌ ÑÍ ÑÎ ÑÏ ÑÐ ÑÑ ÑÒ ÑÓ ÑÔ ÑÕ ÑÖ Ñ× ÑØ ÑÙ ÑÚ ÑÛ ÑÜ ÑÝ ÑÞ Ñß Ñà Ñá Ñâ Ñã Ñä Ñå Ñæ Ñç Ñè Ñé Ñê Ñë Ñì Ñí Ñî Ñï Ñð Ññ Ñò Ñó Ñô Ñõ Ñö Ñ÷ Ñø Ñù Ñú Ñû Ñü Ñý Ñþ Ò¡ Ò¢ Ò£ Ò¤ Ò¥ Ò¦ Ò§ Ò¨ Ò© Òª Ò« Ò¬ Ò­ Ò® Ò¯ Ò° Ò± Ò² Ò³ Ò´ Òµ Ò¶ Ò· Ò¸ Ò¹ Òº Ò» Ò¼ Ò½ Ò¾ Ò¿ ÒÀ ÒÁ Ò Òà ÒÄ ÒÅ ÒÆ ÒÇ ÒÈ ÒÉ ÒÊ ÒË ÒÌ ÒÍ ÒÎ ÒÏ ÒÐ ÒÑ ÒÒ ÒÓ ÒÔ ÒÕ ÒÖ Ò× ÒØ ÒÙ ÒÚ ÒÛ ÒÜ ÒÝ ÒÞ Òß Òà Òá Òâ Òã Òä Òå Òæ Òç Òè Òé Òê Òë Òì Òí Òî Òï Òð Òñ Òò Òó Òô Òõ Òö Ò÷ Òø Òù Òú Òû Òü Òý Òþ Ó¡ Ó¢ Ó£ Ó¤ Ó¥ Ó¦ Ó§ Ó¨ Ó© Óª Ó« Ó¬ Ó­ Ó® Ó¯ Ó° Ó± Ó² Ó³ Ó´ Óµ Ó¶ Ó· Ó¸ Ó¹ Óº Ó» Ó¼ Ó½ Ó¾ Ó¿ ÓÀ ÓÁ Ó Óà ÓÄ ÓÅ ÓÆ ÓÇ ÓÈ ÓÉ ÓÊ ÓË ÓÌ ÓÍ ÓÎ ÓÏ ÓÐ ÓÑ ÓÒ ÓÓ ÓÔ ÓÕ ÓÖ Ó× ÓØ ÓÙ ÓÚ ÓÛ ÓÜ ÓÝ ÓÞ Óß Óà Óá Óâ Óã Óä Óå Óæ Óç Óè Óé Óê Óë Óì Óí Óî Óï Óð Óñ Óò Óó Óô Óõ Óö Ó÷ Óø Óù Óú Óû Óü Óý Óþ Ô¡ Ô¢ Ô£ Ô¤ Ô¥ Ô¦ Ô§ Ô¨ Ô© Ôª Ô« Ô¬ Ô­ Ô® Ô¯ Ô° Ô± Ô² Ô³ Ô´ Ôµ Ô¶ Ô· Ô¸ Ô¹ Ôº Ô» Ô¼ Ô½ Ô¾ Ô¿ ÔÀ ÔÁ Ô Ôà ÔÄ ÔÅ ÔÆ ÔÇ ÔÈ ÔÉ ÔÊ ÔË ÔÌ ÔÍ ÔÎ ÔÏ ÔÐ ÔÑ ÔÒ ÔÓ ÔÔ ÔÕ ÔÖ Ô× ÔØ ÔÙ ÔÚ ÔÛ ÔÜ ÔÝ ÔÞ Ôß Ôà Ôá Ôâ Ôã Ôä Ôå Ôæ Ôç Ôè Ôé Ôê Ôë Ôì Ôí Ôî Ôï Ôð Ôñ Ôò Ôó Ôô Ôõ Ôö Ô÷ Ôø Ôù Ôú Ôû Ôü Ôý Ôþ Õ¡ Õ¢ Õ£ Õ¤ Õ¥ Õ¦ Õ§ Õ¨ Õ© Õª Õ« Õ¬ Õ­ Õ® Õ¯ Õ° Õ± Õ² Õ³ Õ´ Õµ Õ¶ Õ· Õ¸ Õ¹ Õº Õ» Õ¼ Õ½ Õ¾ Õ¿ ÕÀ ÕÁ Õ Õà ÕÄ ÕÅ ÕÆ ÕÇ ÕÈ ÕÉ ÕÊ ÕË ÕÌ ÕÍ ÕÎ ÕÏ ÕÐ ÕÑ ÕÒ ÕÓ ÕÔ ÕÕ ÕÖ Õ× ÕØ ÕÙ ÕÚ ÕÛ ÕÜ ÕÝ ÕÞ Õß Õà Õá Õâ Õã Õä Õå Õæ Õç Õè Õé Õê Õë Õì Õí Õî Õï Õð Õñ Õò Õó Õô Õõ Õö Õ÷ Õø Õù Õú Õû Õü Õý Õþ Ö¡ Ö¢ Ö£ Ö¤ Ö¥ Ö¦ Ö§ Ö¨ Ö© Öª Ö« Ö¬ Ö­ Ö® Ö¯ Ö° Ö± Ö² Ö³ Ö´ Öµ Ö¶ Ö· Ö¸ Ö¹ Öº Ö» Ö¼ Ö½ Ö¾ Ö¿ ÖÀ ÖÁ Ö Öà ÖÄ ÖÅ ÖÆ ÖÇ ÖÈ ÖÉ ÖÊ ÖË ÖÌ ÖÍ ÖÎ ÖÏ ÖÐ ÖÑ ÖÒ ÖÓ ÖÔ ÖÕ ÖÖ Ö× ÖØ ÖÙ ÖÚ ÖÛ ÖÜ ÖÝ ÖÞ Öß Öà Öá Öâ Öã Öä Öå Öæ Öç Öè Öé Öê Öë Öì Öí Öî Öï Öð Öñ Öò Öó Öô Öõ Öö Ö÷ Öø Öù Öú Öû Öü Öý Öþ ס ×¢ ×£ פ ×¥ צ ×§ ר ש ת ׫ ׬ ×­ ×® ׯ ×° ×± ײ ׳ ×´ ×µ ×¶ ×· ׸ ×¹ ׺ ×» ×¼ ×½ ×¾ ׿ ×À ×Á × ×à ×Ä ×Šׯ ×Ç ×È ×É ×Ê ×Ë ×Ì ×Í ×Î ×Ï ×Ð ×Ñ ×Ò ×Ó ×Ô ×Õ ×Ö ×× ×Ø ×Ù ×Ú ×Û ×Ü ×Ý ×Þ ×ß ×à ×á ×â ×ã ×ä ×å ׿ ×ç ×è ×é ×ê ×ë ×ì ×í ×î ×ï ×ð ×ñ ×ò ×ó ×ô ×õ ×ö ×÷ ×ø ×ù ×ú ×û ×ü ×ý ×þ Ø¡ Ø¢ Ø£ ؤ Ø¥ ئ ا ب Ø© ت Ø« ج Ø­ Ø® د ذ ر ز س Ø´ ص ض Ø· ظ ع غ Ø» ؼ ؽ ؾ Ø¿ ØÀ ØÁ ØÂ ØÃ ØÄ ØÅ ØÆ ØÇ ØÈ ØÉ ØÊ ØË ØÌ ØÍ ØÎ ØÏ ØÐ ØÑ ØÒ ØÓ ØÔ ØÕ ØÖ Ø× ØØ ØÙ ØÚ ØÛ ØÜ ØÝ ØÞ Øß Øà Øá Øâ Øã Øä Øå Øæ Øç Øè Øé Øê Øë Øì Øí Øî Øï Øð Øñ Øò Øó Øô Øõ Øö Ø÷ Øø Øù Øú Øû Øü Øý Øþ Ù¡ Ù¢ Ù£ Ù¤ Ù¥ Ù¦ Ù§ Ù¨ Ù© Ùª Ù« Ù¬ Ù­ Ù® Ù¯ Ù° Ù± Ù² Ù³ Ù´ Ùµ Ù¶ Ù· Ù¸ Ù¹ Ùº Ù» Ù¼ Ù½ Ù¾ Ù¿ ÙÀ ÙÁ Ù Ùà ÙÄ ÙÅ ÙÆ ÙÇ ÙÈ ÙÉ ÙÊ ÙË ÙÌ ÙÍ ÙÎ ÙÏ ÙÐ ÙÑ ÙÒ ÙÓ ÙÔ ÙÕ ÙÖ Ù× ÙØ ÙÙ ÙÚ ÙÛ ÙÜ ÙÝ ÙÞ Ùß Ùà Ùá Ùâ Ùã Ùä Ùå Ùæ Ùç Ùè Ùé Ùê Ùë Ùì Ùí Ùî Ùï Ùð Ùñ Ùò Ùó Ùô Ùõ Ùö Ù÷ Ùø Ùù Ùú Ùû Ùü Ùý Ùþ Ú¡ Ú¢ Ú£ Ú¤ Ú¥ Ú¦ Ú§ Ú¨ Ú© Úª Ú« Ú¬ Ú­ Ú® Ú¯ Ú° Ú± Ú² Ú³ Ú´ Úµ Ú¶ Ú· Ú¸ Ú¹ Úº Ú» Ú¼ Ú½ Ú¾ Ú¿ ÚÀ ÚÁ Ú Úà ÚÄ ÚÅ ÚÆ ÚÇ ÚÈ ÚÉ ÚÊ ÚË ÚÌ ÚÍ ÚÎ ÚÏ ÚÐ ÚÑ ÚÒ ÚÓ ÚÔ ÚÕ ÚÖ Ú× ÚØ ÚÙ ÚÚ ÚÛ ÚÜ ÚÝ ÚÞ Úß Úà Úá Úâ Úã Úä Úå Úæ Úç Úè Úé Úê Úë Úì Úí Úî Úï Úð Úñ Úò Úó Úô Úõ Úö Ú÷ Úø Úù Úú Úû Úü Úý Úþ Û¡ Û¢ Û£ Û¤ Û¥ Û¦ Û§ Û¨ Û© Ûª Û« Û¬ Û­ Û® Û¯ Û° Û± Û² Û³ Û´ Ûµ Û¶ Û· Û¸ Û¹ Ûº Û» Û¼ Û½ Û¾ Û¿ ÛÀ ÛÁ Û Ûà ÛÄ ÛÅ ÛÆ ÛÇ ÛÈ ÛÉ ÛÊ ÛË ÛÌ ÛÍ ÛÎ ÛÏ ÛÐ ÛÑ ÛÒ ÛÓ ÛÔ ÛÕ ÛÖ Û× ÛØ ÛÙ ÛÚ ÛÛ ÛÜ ÛÝ ÛÞ Ûß Ûà Ûá Ûâ Ûã Ûä Ûå Ûæ Ûç Ûè Ûé Ûê Ûë Ûì Ûí Ûî Ûï Ûð Ûñ Ûò Ûó Ûô Ûõ Ûö Û÷ Ûø Ûù Ûú Ûû Ûü Ûý Ûþ Ü¡ Ü¢ Ü£ ܤ Ü¥ ܦ ܧ ܨ Ü© ܪ Ü« ܬ Ü­ Ü® ܯ ܰ ܱ ܲ ܳ Ü´ ܵ ܶ Ü· ܸ ܹ ܺ Ü» ܼ ܽ ܾ Ü¿ ÜÀ ÜÁ Ü Üà ÜÄ ÜÅ ÜÆ ÜÇ ÜÈ ÜÉ ÜÊ ÜË ÜÌ ÜÍ ÜÎ ÜÏ ÜÐ ÜÑ ÜÒ ÜÓ ÜÔ ÜÕ ÜÖ Ü× ÜØ ÜÙ ÜÚ ÜÛ ÜÜ ÜÝ ÜÞ Üß Üà Üá Üâ Üã Üä Üå Üæ Üç Üè Üé Üê Üë Üì Üí Üî Üï Üð Üñ Üò Üó Üô Üõ Üö Ü÷ Üø Üù Üú Üû Üü Üý Üþ Ý¡ Ý¢ Ý£ ݤ Ý¥ ݦ ݧ ݨ Ý© ݪ Ý« ݬ Ý­ Ý® ݯ ݰ ݱ ݲ ݳ Ý´ ݵ ݶ Ý· ݸ ݹ ݺ Ý» ݼ ݽ ݾ Ý¿ ÝÀ ÝÁ Ý Ýà ÝÄ ÝÅ ÝÆ ÝÇ ÝÈ ÝÉ ÝÊ ÝË ÝÌ ÝÍ ÝÎ ÝÏ ÝÐ ÝÑ ÝÒ ÝÓ ÝÔ ÝÕ ÝÖ Ý× ÝØ ÝÙ ÝÚ ÝÛ ÝÜ ÝÝ ÝÞ Ýß Ýà Ýá Ýâ Ýã Ýä Ýå Ýæ Ýç Ýè Ýé Ýê Ýë Ýì Ýí Ýî Ýï Ýð Ýñ Ýò Ýó Ýô Ýõ Ýö Ý÷ Ýø Ýù Ýú Ýû Ýü Ýý Ýþ Þ¡ Þ¢ Þ£ Þ¤ Þ¥ Þ¦ Þ§ Þ¨ Þ© Þª Þ« Þ¬ Þ­ Þ® Þ¯ Þ° Þ± Þ² Þ³ Þ´ Þµ Þ¶ Þ· Þ¸ Þ¹ Þº Þ» Þ¼ Þ½ Þ¾ Þ¿ ÞÀ ÞÁ Þ Þà ÞÄ ÞÅ ÞÆ ÞÇ ÞÈ ÞÉ ÞÊ ÞË ÞÌ ÞÍ ÞÎ ÞÏ ÞÐ ÞÑ ÞÒ ÞÓ ÞÔ ÞÕ ÞÖ Þ× ÞØ ÞÙ ÞÚ ÞÛ ÞÜ ÞÝ ÞÞ Þß Þà Þá Þâ Þã Þä Þå Þæ Þç Þè Þé Þê Þë Þì Þí Þî Þï Þð Þñ Þò Þó Þô Þõ Þö Þ÷ Þø Þù Þú Þû Þü Þý Þþ ß¡ ߢ ߣ ߤ ߥ ߦ ß§ ߨ ß© ߪ ß« ߬ ß­ ß® ߯ ß° ß± ß² ß³ ß´ ßµ ß¶ ß· ߸ ß¹ ߺ ß» ß¼ ß½ ß¾ ß¿ ßÀ ßÁ ß ßà ßÄ ßŠ߯ ßÇ ßÈ ßÉ ßÊ ßË ßÌ ßÍ ßÎ ßÏ ßÐ ßÑ ßÒ ßÓ ßÔ ßÕ ßÖ ß× ßØ ßÙ ßÚ ßÛ ßÜ ßÝ ßÞ ßß ßà ßá ßâ ßã ßä ßå ßæ ßç ßè ßé ßê ßë ßì ßí ßî ßï ßð ßñ ßò ßó ßô ßõ ßö ß÷ ßø ßù ßú ßû ßü ßý ßþ ࡠࢠ࣠ठॠঠৠਠ੠ઠૠଠୠ஠௠ఠౠಠೠഠൠච෠ภ๠ຠ໠༠འྠ࿠àÀ àÁ à àà àÄ àÅ àÆ àÇ àÈ àÉ àÊ àË àÌ àÍ àÎ àÏ àÐ àÑ àÒ àÓ àÔ àÕ àÖ à× àØ àÙ àÚ àÛ àÜ àÝ àÞ àß àà àá àâ àã àä àå àæ àç àè àé àê àë àì àí àî àï àð àñ àò àó àô àõ àö à÷ àø àù àú àû àü àý àþ ᡠᢠᣠᤠᥠᦠ᧠ᨠ᩠᪠᫠ᬠ᭠ᮠᯠᰠᱠᲠ᳠ᴠᵠᶠᷠḠṠẠỠἠὠᾠῠáÀ áÁ á áà áÄ áÅ áÆ áÇ áÈ áÉ áÊ áË áÌ áÍ áÎ áÏ áÐ áÑ áÒ áÓ áÔ áÕ áÖ á× áØ áÙ áÚ áÛ áÜ áÝ áÞ áß áà áá áâ áã áä áå áæ áç áè áé áê áë áì áí áî áï áð áñ áò áó áô áõ áö á÷ áø áù áú áû áü áý áþ ⡠⢠⣠⤠⥠⦠⧠⨠⩠⪠⫠⬠⭠⮠⯠ⰠⱠⲠⳠⴠⵠⶠⷠ⸠⹠⺠⻠⼠⽠⾠⿠âÀ âÁ â âà âÄ âÅ âÆ âÇ âÈ âÉ âÊ âË âÌ âÍ âÎ âÏ âÐ âÑ âÒ âÓ âÔ âÕ âÖ â× âØ âÙ âÚ âÛ âÜ âÝ âÞ âß âà âá ââ âã âä âå âæ âç âè âé âê âë âì âí âî âï âð âñ âò âó âô âõ âö â÷ âø âù âú âû âü âý âþ 㡠㢠㣠㤠㥠㦠㧠㨠㩠㪠㫠㬠㭠㮠㯠㰠㱠㲠㳠㴠㵠㶠㷠㸠㹠㺠㻠㼠㽠㾠㿠ãÀ ãÁ ã ãà ãÄ ãÅ ãÆ ãÇ ãÈ ãÉ ãÊ ãË ãÌ ãÍ ãÎ ãÏ ãÐ ãÑ ãÒ ãÓ ãÔ ãÕ ãÖ ã× ãØ ãÙ ãÚ ãÛ ãÜ ãÝ ãÞ ãß ãà ãá ãâ ãã ãä ãå ãæ ãç ãè ãé ãê ãë ãì ãí ãî ãï ãð ãñ ãò ãó ãô ãõ ãö ã÷ ãø ãù ãú ãû ãü ãý ãþ ä¡ ä¢ ä£ ä¤ ä¥ ä¦ ä§ ä¨ ä© äª ä« ä¬ ä­ ä® ä¯ ä° ä± ä² ä³ ä´ äµ ä¶ ä· ä¸ ä¹ äº ä» ä¼ ä½ ä¾ ä¿ äÀ äÁ ä äà äÄ äÅ äÆ äÇ äÈ äÉ äÊ äË äÌ äÍ äÎ äÏ äÐ äÑ äÒ äÓ äÔ äÕ äÖ ä× äØ äÙ äÚ äÛ äÜ äÝ äÞ äß äà äá äâ äã ää äå äæ äç äè äé äê äë äì äí äî äï äð äñ äò äó äô äõ äö ä÷ äø äù äú äû äü äý äþ å¡ å¢ å£ å¤ å¥ å¦ å§ å¨ å© åª å« å¬ å­ å® å¯ å° å± å² å³ å´ åµ å¶ å· å¸ å¹ åº å» å¼ å½ å¾ å¿ åÀ åÁ å åà åÄ åÅ åÆ åÇ åÈ åÉ åÊ åË åÌ åÍ åÎ åÏ åÐ åÑ åÒ åÓ åÔ åÕ åÖ å× åØ åÙ åÚ åÛ åÜ åÝ åÞ åß åà åá åâ åã åä åå åæ åç åè åé åê åë åì åí åî åï åð åñ åò åó åô åõ åö å÷ åø åù åú åû åü åý åþ æ¡ æ¢ æ£ æ¤ æ¥ æ¦ æ§ æ¨ æ© æª æ« æ¬ æ­ æ® æ¯ æ° æ± æ² æ³ æ´ æµ æ¶ æ· æ¸ æ¹ æº æ» æ¼ æ½ æ¾ æ¿ æÀ æÁ æÂ æÃ æÄ æÅ æÆ æÇ æÈ æÉ æÊ æË æÌ æÍ æÎ æÏ æÐ æÑ æÒ æÓ æÔ æÕ æÖ æ× æØ æÙ æÚ æÛ æÜ æÝ æÞ æß æà æá æâ æã æä æå ææ æç æè æé æê æë æì æí æî æï æð æñ æò æó æô æõ æö æ÷ æø æù æú æû æü æý æþ ç¡ ç¢ ç£ ç¤ ç¥ ç¦ ç§ ç¨ ç© çª ç« ç¬ ç­ ç® ç¯ ç° ç± ç² ç³ ç´ çµ ç¶ ç· ç¸ ç¹ çº ç» ç¼ ç½ ç¾ ç¿ çÀ çÁ ç çà çÄ çÅ çÆ çÇ çÈ çÉ çÊ çË çÌ çÍ çÎ çÏ çÐ çÑ çÒ çÓ çÔ çÕ çÖ ç× çØ çÙ çÚ çÛ çÜ çÝ çÞ çß çà çá çâ çã çä çå çæ çç çè çé çê çë çì çí çî çï çð çñ çò çó çô çõ çö ç÷ çø çù çú çû çü çý çþ è¡ è¢ è£ è¤ è¥ è¦ è§ è¨ è© èª è« è¬ è­ è® è¯ è° è± è² è³ è´ èµ è¶ è· è¸ è¹ èº è» è¼ è½ è¾ è¿ èÀ èÁ è èà èÄ èÅ èÆ èÇ èÈ èÉ èÊ èË èÌ èÍ èÎ èÏ èÐ èÑ èÒ èÓ èÔ èÕ èÖ è× èØ èÙ èÚ èÛ èÜ èÝ èÞ èß èà èá èâ èã èä èå èæ èç èè èé èê èë èì èí èî èï èð èñ èò èó èô èõ èö è÷ èø èù èú èû èü èý èþ é¡ é¢ é£ é¤ é¥ é¦ é§ é¨ é© éª é« é¬ é­ é® é¯ é° é± é² é³ é´ éµ é¶ é· é¸ é¹ éº é» é¼ é½ é¾ é¿ éÀ éÁ é éà éÄ éÅ éÆ éÇ éÈ éÉ éÊ éË éÌ éÍ éÎ éÏ éÐ éÑ éÒ éÓ éÔ éÕ éÖ é× éØ éÙ éÚ éÛ éÜ éÝ éÞ éß éà éá éâ éã éä éå éæ éç éè éé éê éë éì éí éî éï éð éñ éò éó éô éõ éö é÷ éø éù éú éû éü éý éþ ê¡ ê¢ ê£ ê¤ ê¥ ê¦ ê§ ê¨ ê© êª ê« ê¬ ê­ ê® ê¯ ê° ê± ê² ê³ ê´ êµ ê¶ ê· ê¸ ê¹ êº ê» ê¼ ê½ ê¾ ê¿ êÀ êÁ ê êà êÄ êÅ êÆ êÇ êÈ êÉ êÊ êË êÌ êÍ êÎ êÏ êÐ êÑ êÒ êÓ êÔ êÕ êÖ ê× êØ êÙ êÚ êÛ êÜ êÝ êÞ êß êà êá êâ êã êä êå êæ êç êè êé êê êë êì êí êî êï êð êñ êò êó êô êõ êö ê÷ êø êù êú êû êü êý êþ ë¡ ë¢ ë£ ë¤ ë¥ ë¦ ë§ ë¨ ë© ëª ë« ë¬ ë­ ë® ë¯ ë° ë± ë² ë³ ë´ ëµ ë¶ ë· ë¸ ë¹ ëº ë» ë¼ ë½ ë¾ ë¿ ëÀ ëÁ ë ëà ëÄ ëÅ ëÆ ëÇ ëÈ ëÉ ëÊ ëË ëÌ ëÍ ëÎ ëÏ ëÐ ëÑ ëÒ ëÓ ëÔ ëÕ ëÖ ë× ëØ ëÙ ëÚ ëÛ ëÜ ëÝ ëÞ ëß ëà ëá ëâ ëã ëä ëå ëæ ëç ëè ëé ëê ëë ëì ëí ëî ëï ëð ëñ ëò ëó ëô ëõ ëö ë÷ ëø ëù ëú ëû ëü ëý ëþ ì¡ ì¢ ì£ ì¤ ì¥ ì¦ ì§ ì¨ ì© ìª ì« ì¬ ì­ ì® ì¯ ì° ì± ì² ì³ ì´ ìµ ì¶ ì· ì¸ ì¹ ìº ì» ì¼ ì½ ì¾ ì¿ ìÀ ìÁ ì ìà ìÄ ìÅ ìÆ ìÇ ìÈ ìÉ ìÊ ìË ìÌ ìÍ ìÎ ìÏ ìÐ ìÑ ìÒ ìÓ ìÔ ìÕ ìÖ ì× ìØ ìÙ ìÚ ìÛ ìÜ ìÝ ìÞ ìß ìà ìá ìâ ìã ìä ìå ìæ ìç ìè ìé ìê ìë ìì ìí ìî ìï ìð ìñ ìò ìó ìô ìõ ìö ì÷ ìø ìù ìú ìû ìü ìý ìþ í¡ í¢ í£ í¤ í¥ í¦ í§ í¨ í© íª í« í¬ í­ í® í¯ í° í± í² í³ í´ íµ í¶ í· í¸ í¹ íº í» í¼ í½ í¾ í¿ íÀ íÁ í íà íÄ íÅ íÆ íÇ íÈ íÉ íÊ íË íÌ íÍ íÎ íÏ íÐ íÑ íÒ íÓ íÔ íÕ íÖ í× íØ íÙ íÚ íÛ íÜ íÝ íÞ íß íà íá íâ íã \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars-x-euc-jp.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars-x-euc-jp.html.headers new file mode 100644 index 00000000000..fac56a312f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars-x-euc-jp.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=x-euc-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars.html new file mode 100755 index 00000000000..365e49d41d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars.html @@ -0,0 +1 @@ +euc-jp characters\ ¡ø ¡¯ ¡ë ¡Þ ¡­ ¢ù ¡ß ¡à ¦¡ ¦¢ ¦£ ¦¤ ¦¥ ¦¦ ¦§ ¦¨ ¦© ¦ª ¦« ¦¬ ¦­ ¦® ¦¯ ¦° ¦± ¦² ¦³ ¦´ ¦µ ¦¶ ¦· ¦¸ ¦Á ¦Â ¦Ã ¦Ä ¦Å ¦Æ ¦Ç ¦È ¦É ¦Ê ¦Ë ¦Ì ¦Í ¦Î ¦Ï ¦Ð ¦Ñ ¦Ò ¦Ó ¦Ô ¦Õ ¦Ö ¦× ¦Ø §§ §¡ §¢ §£ §¤ §¥ §¦ §¨ §© §ª §« §¬ §­ §® §¯ §° §± §² §³ §´ §µ §¶ §· §¸ §¹ §º §» §¼ §½ §¾ §¿ §À §Á §Ñ §Ò §Ó §Ô §Õ §Ö §Ø §Ù §Ú §Û §Ü §Ý §Þ §ß §à §á §â §ã §ä §å §æ §ç §è §é §ê §ë §ì §í §î §ï §ð §ñ §× ¡¾ ¡½ ¡Æ ¡Ç ¡È ¡É ¢÷ ¢ø ¡Å ¡Ä ¢ó ¡ì ¡í ¢¨ ~ ¡î ­â ­ä ¢ò ­µ ­¶ ­· ­¸ ­¹ ­º ­» ­¼ ­½ ­¾ üñ üò üó üô üõ üö ü÷ üø üù üú ¢« ¢¬ ¢ª ¢­ ¢Í ¢Î ¢Ï ¢ß ¢Ð ¢à ¢º ¢» ­ô ¡Ý ¢å ¢ç ¡ç ­ø ¢Ü ¡Â ¢Ê ¢Ë ¢Á ¢À ¢é ¢ê ­ó ¡è ¢è ¢æ ¢â ¡â ¢á ¡å ¡æ ¢ã ¢ä ¢¾ ¢¿ ¢¼ ¢½ ¢Ý ­ù ¢Þ ­¡ ­¢ ­£ ­¤ ­¥ ­¦ ­§ ­¨ ­© ­ª ­« ­¬ ­­ ­® ­¯ ­° ­± ­² ­³ ­´ ¨¡ ¨¬ ¨¢ ¨­ ¨£ ¨® ¨¤ ¨¯ ¨¦ ¨± ¨¥ ¨° ¨§ ¨¼ ¨· ¨² ¨© ¨¾ ¨¹ ¨´ ¨¨ ¨¸ ¨½ ¨³ ¨ª ¨º ¨¿ ¨µ ¨« ¨» ¨À ¨¶ ¢£ ¢¢ ¢¥ ¢¤ ¢§ ¢¦ ¢¡ ¡þ ¡û ¡ý ¡ü ¢þ ¡ú ¡ù ¡ê ¡é ¢ö ¢õ ¢ô ¡¡ ¡¢ ¡£ ¡· ¡¹ ¡º ¡» ¡Ò ¡Ó ¡Ô ¡Õ ¡Ö ¡× ¡Ø ¡Ù ¡Ú ¡Û ¢© ¢® ¡Ì ¡Í ­à ­á ¤¡ ¤¢ ¤£ ¤¤ ¤¥ ¤¦ ¤§ ¤¨ ¤© ¤ª ¤« ¤¬ ¤­ ¤® ¤¯ ¤° ¤± ¤² ¤³ ¤´ ¤µ ¤¶ ¤· ¤¸ ¤¹ ¤º ¤» ¤¼ ¤½ ¤¾ ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó ¤Ô ¤Õ ¤Ö ¤× ¤Ø ¤Ù ¤Ú ¤Û ¤Ü ¤Ý ¤Þ ¤ß ¤à ¤á ¤â ¤ã ¤ä ¤å ¤æ ¤ç ¤è ¤é ¤ê ¤ë ¤ì ¤í ¤î ¤ï ¤ð ¤ñ ¤ò ¤ó ¡« ¡¬ ¡µ ¡¶ ¥¡ ¥¢ ¥£ ¥¤ ¥¥ ¥¦ ¥§ ¥¨ ¥© ¥ª ¥« ¥¬ ¥­ ¥® ¥¯ ¥° ¥± ¥² ¥³ ¥´ ¥µ ¥¶ ¥· ¥¸ ¥¹ ¥º ¥» ¥¼ ¥½ ¥¾ ¥¿ ¥À ¥Á ¥Â ¥Ã ¥Ä ¥Å ¥Æ ¥Ç ¥È ¥É ¥Ê ¥Ë ¥Ì ¥Í ¥Î ¥Ï ¥Ð ¥Ñ ¥Ò ¥Ó ¥Ô ¥Õ ¥Ö ¥× ¥Ø ¥Ù ¥Ú ¥Û ¥Ü ¥Ý ¥Þ ¥ß ¥à ¥á ¥â ¥ã ¥ä ¥å ¥æ ¥ç ¥è ¥é ¥ê ¥ë ¥ì ¥í ¥î ¥ï ¥ð ¥ñ ¥ò ¥ó ¥ô ¥õ ¥ö ¡¦ ¡¼ ¡³ ¡´ ­ê ­ë ­ì ­å ­æ ­ç ­è ­é ­Æ ­Ê ­Á ­Ä ­Â ­Ì ­Ë ­Å ­Í ­Ç ­Ï ­À ­Î ­Ã ­È ­É ­ß ­ï ­î ­í ­Ó ­Ô ­Ð ­Ñ ­Ò ­Ö ­Õ ­ã °ì Ãú ¼· Ëü ¾æ »° ¾å ²¼ ÉÔ Í¿ Т ±¯ ³î У À¤ Ò µÖ ʺ ¾ç ξ Ê ù­ Ф Ãæ Ð¥ ¶ú Ц ´Ý ð ¼ç Ч Ш Щ ǵ µ× Ç· Æã ¸Ã ˳ éÉ Ðª ¾è Ы ²µ ¶å ¸ð Ìé Ö¦ Íð Æý ´¥ µµ Ь Э λ ͽ Áè Я »ö Æó в ±¾ ¸ß ¸Þ °æ ÏË ÏÊ º³ °¡ г д е Ë´ ж ¸ò °ç Ëò µü µý µþ Äâ μ з и й ¿Í ½º ¿Î о м н µØ º£ ²ð л к Ê© »Æ »Å ¾ п ÉÕ Àç ¡¸ ÐÀ Рù® Âå Îá °Ê ÐÁ ²¾ ¶Ä Ãç ·ï Ðà Ǥ ù¯ ù° ´ë ù± ÐÄ °Ë ¸à ´ì Éú Ȳ µÙ ²ñ Ðç ÅÁ Çì ÐÆ ȼ Îâ ¿­ ù² »Ç »÷ ²À ÄÑ Ã¢ ÐÊ °Ì Äã ½» º´ ͤ ÂÎ ²¿ ù³ ÐÉ Í¾ ÐÅ ÐÇ ºî ÐÈ Õ¤ ÐÐ ÐÓ ÐÑ ²Â Ê» ÐË ÐÏ ¸ó »È ´¦ ÐÔ ÐÌ ùµ Îã »ø ÐÍ ÐÒ ù´ ù· ÐÕ ÐÎ ù¶ ¶¡ °Í ¶¢ ²Á Õ¥ Ëù Éî ¸ô ¿¯ η ÊØ ·¸ Â¥ ²ä ù¦ ½Ó ù¸ ÐÙ ÐÞ ÐÜ Ð× Â¯ ÐÚ ÐÝ ÐÛ ÊÝ ÐØ ¿® Ëó Ðß Ðà ½¤ Ðí ÇРɶ Ðè Êð ²¶ Ðì ù» Ðæ Ðï ÁÒ ¸Ä ÇÜ àÇ Ðî ÅÝ Ðã ¸ö ¸õ Ðá ù¼ ¼Ú Ðé ùº Êï ÃÍ Ðå ·ñ Ðâ Ðê Ðä ÎÑ Ðë ÏÁ ¶æ ·ð ù¹ ù¿ Ðð ù½ Ðñ Ðõ °Î ÊÐ Ðô Ðó Ð÷ Ðö Ää ·ò Ðø ù¾ ¼Å ¦ Äå ¶ö Ðù µ¶ Ðú Ðü ˵ ·æ ùÀ »± È÷ Ðû ºÅ Íà Ðþ Ñ£ Ðý ºÄ ½ý ·¹ Ѥ ¶Ï Ñ¡ Ñ¢ Ư Áü ¶£ ËÍ Ñ¥ ù ν Ѧ Ñ© ѧ ÁΠѨ Ѫ ùÁ Ѭ Ñ« ÊÈ µ· Ñ® ѯ ²¯ Ñ­ ¼ô Ѳ ѱ Ѱ ÐÖ Ñ³ ½þ Ñ´ Í¥ Ì٠Ѷ ѵ Ѹ Ñ· ѹ Ѻ °ô ¸µ ·» ½¼ Ãû ¶¤ Àè ¸÷ ùà ¹î Ѽ ÌÈ ÅÆ »ù Ñ» ѽ ÅÞ ³õ Ѿ ùÄ Æþ Á´ ÑÀ ÑÁ Ȭ ¸ø Ï» Ñ ¶¦ ʼ ¶ ¶ñ ŵ ·ó Ñà ÑÄ Æâ ±ß ÑÇ ºý ÑÆ ºÆ ÑÈ æî ÑÉ ËÁ ÑÊ ÑË ÑÌ ¾é ¼Ì ùÅ ´§ ÑÏ ÑÍ Ì½ ÑÎ ÉÚ ÑÐ ÑÑ ÑÒ Åß ÑÖ ÑÔ ÑÕ ÑÓ ºã Ñ× Ìê Îä ÑØ ùÆ À¨ ÑÙ ½Ú ÑÚ Ãü ο Åà ÒÅ ÑÛ ô¥ ¶Å ÑÜ ËÞ ½è Âü ÑÞ Æä ùÇ Ñß Ñà ³® Ñá ¶§ ÆÌ ±ú ½Ð È¡ Ñâ Åá ¿Ï Ñã ʬ ÀÚ ´¢ ´© Ñä Ñæ ·º Ñå ùÈ Îó ½é Ƚ ÊÌ Ñç Íø Ñè Ñé Åþ Ñê À© ºþ ·ô Ñë »É ¹ï Äæ Ñí § ºï Ñî Ñï Á° Ñì Ññ ˶ ¹ä Ñð ·õ ºÞ Çí Ñô Ñò Éû ¾ê Ñû ³ä Ñõ Ñó ÁÏ Ñ÷ Ñö ³Ä ·à Ñü έ Ñø Ñý Ñú Ñù ÎÏ ùÉ ¸ù ²Ã Îô ùÊ ½õ ÅØ ¹å Ò¢ Ò£ û¼ Îå Ï« Ò¥ ¸ú Ò¤ ³¯ ùË Ò¦ ËÖ Ä¼ ͦ ÊÙ Ò§ ðÕ Æ° Ò¨ ´ª ̳ ùÌ ¾¡ Ò© Êç Ò­ Àª Òª ¶Ð Ò« ´« ·® Ò® Ò¯ Ò° Ò± ¼Û ¸û ÌÞ ùÍ Ìè Æ÷ Êñ Ò² ùÎ Ò³ Òµ Ò· Ò¶ Ò¸ ²½ ËÌ ºü Ò¹ ÁÙ ¾¢ ¶© Òº ùÏ ÈÛ Ò» Ò¼ Ò½ Ò¾ ɤ ¶è °å Æ¿ Ò¿ ½½ Àé ÒÁ ÒÀ ¾£ ¸á Òà Ⱦ ÒÄ ÈÜ Â´ Âî ¶¨ Æî ñ Çî ËÎ ÒÆ Àê ·µ ÒÇ ÒÈ ±¬ °õ ´í ùР¨ µÑ Íñ ÒË ²· ÒÊ ¶ª ÒÌ Ìñ ùÑ ÒÍ ÎÒ ¸ü ¸¶ ÒÎ ÒÐ ÒÏ ¿ß ±¹ ±Þ ÒÑ ÒÒ ùÒ ¸· ÒÓ µî »² ÒÔ Ëô ºµ µÚ ͧ ÁÐ È¿ ¼ý ½Ç ¼è ¼õ ½ö ÈÀ ùÓ Ò× ±Ã ÁÑ ¸ý ¸Å ¶ç ÒÛ Ã¡ Âþ ¶« ¾¤ ÒÜ ÒÚ ²Ä Âæ ¼¸ »Ë ±¦ ³ð ¹æ »Ê ÒÝ ÒÞ µÉ ³Æ ¹ç µÈ Äß ±¥ Ʊ ̾ ¹¡ Íù ÅÇ ¸þ ·¯ Òç ¶ã ËÊ ÈÝ Òæ ´Þ Òá Òâ Òä Òå µÛ ¿á Ê­ Òã Òß ¸ã Òà Ϥ Êò Äè ¸â ¹ð Òè ÆÝ Òì ¼þ ¼ö Òï Òí Ì£ Òê Òó Òî Òñ ¸Æ Ì¿ Òò Òô Òö ùÖ ºð Ï Òë Òé Òõ Òð ùÕ Òø Ó£ Òú Òþ ù× Ó¡ Òû Ó¾ ºé ³± Òù Ó¥ °ö Ó¤ °¥ ÉÊ Ó¢ Òü Ò÷ Òý ºÈ Ó¦ °÷ Ó¯ Ó§ Ó¨ ¾¥ Ëé Ó­ Ó¬ ů Ó® Ó« ùØ ±´ º¶ ¿° Ó© Åâ Óª °¢ Ó´ Í£ ¾§ Óº Ó¹ Ó° Âà ӱ Âï Ó¶ ¾¦ Ó³ Ìä ·¼ Ó· Ó¸ Óµ Ó» Ó² ÓÁ ÓÆ Ó ӽ ÓÇ Á± ùÙ ÓÉ ¹¢ Ó¿ Ãý Óà Ӽ ´­ ´î ³å ÓÄ ÓÀ ·ö ÓÊ ÓÈ ÁÓ µÊ ¶¬ ÓÅ ¶ô ±Ä ÓÎ ÓÌ Ô§ ÓÑ ÓË ÓÏ ÓÍ »Ì ÓÐ ÓÓ ÓØ ÓÖ ÓÕ Ã² ²Å ÓÒ ÓÔ ¾¨ ±³ Ó× ²Þ Óâ ¾ü ÓÞ ÓÜ ÓÝ Óß ±½ Á¹ ÓÙ ÓÚ ³ú Óá ´ï Óä Óà Óã Ê® ÆÕ ȸ Óæ Óå ³Å Óç Óê Óé Óè ǹ Óë Óì Óî Óí Óð Óó Óñ Óï Óò Óô Óõ Óö Ó÷ Óø ÑÅ ¼ü »Í ²ó °ø ÃÄ Óù º¤ °Ï ¿Þ Óú ¸Ç ¹ñ Óü Óû Êà Óý Ô¡ Óþ Ô¢ Ô£ ·÷ ±à Ô¤ Ô¦ Ô¥ Ô¨ ÅÚ Ô© °µ ºß ·½ ÃÏ Ôª Ô« Ô­ Ô® ºä ¶Ñ Ë· Ô¬ Ô¯ ºÁ ¹£ ùÚ Ô³ º¥ ùÛ Ã³ Ô° ÄÚ Ô´ ¿â Ô² Ôµ ·¿ Ô¶ Ô· ¹¤ ³À Ô¹ Ôº ùÜ Ô» Ô¸ Ô± Ô¼ Ô½ ùÞ ùÝ Ëä ¾ë Ô¿ ÔÀ Ô¾ Ô Ǹ °è ÉÖ Ôà ¾ý ¼¹ ÇÝ ´ð ºë Ë٠Ʋ ·ø ÂÏ ÔÁ ÔÄ ÂÄ ÔÅ ÔÆ ÔÈ Äé ´® ô¡ ±á Êó ¾ì ÅÈ ºæ ÔΠʽ ÎÝ ²ô ÔÊ Áº ÔÍ Åã ÅÉ Åä ȹ ÄÍ ºÉ ÔÉ ±ö Ŷ ÔË ÔÇ ¿Ð ÔÏ ½Î ¶­ ÔÐ Êè Áý ÄÆ ùá ÔÒ ËÏ ÔÓ ÔØ ùâ ʯ Ô× ÔÑ ÔÔ ÔÖ º¦ ÊÉ ÔÙ ÃÅ ²õ ¾í ÔÛ ÔÚ ¹è ÔÜ ÔÞ ÔÝ Ôà ÔÕ Ôâ Ôá Ôß »Î ¿Ñ ÁÔ Ôã À¼ °í Çä ÄÛ Ôå Ôä Ôæ Ôç Ôè Ôé ÊÑ Ôê ùã ²Æ Ôë ͼ ³° ÒÉ ½È ¿ Ôì Ìë Ì´ Ôî Âç Å· ÂÀ É× Ôï Ôð ±û ¼º Ôñ °Ð Ôò Ôó ±â ´ñ Æà Êô Ô÷ ÁÕ Ôö ·À ùä ËÛ Ôõ Åå Ôù Ôø ùå ùæ Ôû Ôú ùç ±ü Ôü ¾© Ôþ Ã¥ Ôý ʳ ½÷ ÅÛ Õ¡ ¹¥ Õ¢ Ç¡ ÈÞ ÌÑ Ç¥ Õ« µ¸ ÍŠ̯ Ö¬ Õ£ Õ¦ ùè Š˸ ÅÊ Õ§ Ëå ùé ºÊ ¾ª Õ¨ »Ð »Ï °¹ ¸È À« °Ñ Õ¬ Õ­ Õª ±¸ ´¯ Õ© ÌŠɱ °¨ °ù »Ñ °Ò °£ Õ² Õ° ̼ Õ³ Õ± Õ¯ ¿± Õ® ÊÚ ¸ä Õ· Õ¸ ¾« Õ´ Ϭ ÇÌ Õ¶ º§ Õ¹ ÉØ Õº Õµ Ì» ÇÞ Õ» ɲ Õ¼ ÕÀ Õ½ ²Ç Õ¿ ¼» Õ¾ ·ù ÕÌ ÕÅ Õ Ãä ÕÁ Õà ÕÄ ÕÆ ÕÇ ´ò ÕÉ ÕÈ ÕÊ ¾î ÕÍ ÄÜ ±Å ÕË ÕÎ ÕÏ ÕÒ ÕÐ ÕÑ »Ò ÕÓ ¹¦ ÕÔ ùê »ú ¸ ÕÕ ÕÖ »Ú ¹§ ÌÒ µ¨ ¸É Õ× ³Ø ÕØ ¹ ÕÙ Ö£ ÕÚ ÕÛ ÕÜ ÕÞ Õß Õà Âð ±§ ¼é °Â Á× ´° ¼µ ¹¨ Åæ ½¡ ´± Ãè Äê °¸ µ¹ Êõ ¼Â µÒ Àë ¼¼ ͨ Õá µÜ ºË ³² ±ã ¾¬ ²È Õâ ÍÆ ½É ùë ¼ä Õã ´ó ÆÒ Ì© Õä Õå ÉÙ Õç ´¨ ¶÷ Õæ ùí ´² ¿² Õë »¡ ²É Õê Õè Õì Õé Ç« ÜÍ ¿³ Õí ùî ÎÀ Õî Õð Ãþ Õï À£ »û ÂÐ ¼÷ Éõ Àì ¼Í Õñ ¾­ Õò Õó °Ó º ¿Ò Õô Ƴ ¾® ¾¯ Õõ Àí ¾° ùï Õö Õ÷ Ìà Õø ¶Æ ½¢ Õù Õú ¼Ü ¿¬ Æô ¿Ô Èø Ç¢ ¶É Õû µï Õü ¶þ ÆÏ ²° »Ó Õý Ö¢ Ö¡ ¶ý Õþ Ÿ ° ÅË ¼È ÁØ Íú Ö¤ Ö¥ ÆÖ »³ Ö§ Ö¨ Ö© ´ô Öª Ö« ²¬ ùð Á» ´ä Ö­ ̨ ÂÒ ³Ù Ö¯ Ö± ´ß ùñ Ö® Ö° Ö³ Ö² Ö´ Öµ ƽ ¶® ²å Ö¶ Ö» Ö¹ Ê÷ Êö ùò Åç Ö¸ ½Ô Ö· ¿ò Ö¼ ºê Ö Öà ֽ ³³ Ö¾ ÖÇ ÖÆ ÖÅ ÖÁ ÖÀ ÖÄ ùó Êø ùö ÖË ÖÈ ÖÊ Íò ÖÉ ùô Ö¿ ¿ó ÖÌ ù÷ º· ÖÍ ÖÎ ÖÑ ÖÐ ÖÏ Åè Öº Ö× ÖÓ ÖÒ ÖÔ ÖÕ ÖØ ùø ùù Îæ ÖÙ ÖÖ ÖÚ ´à ÖÛ ùú ÖÝ ÖÜ ÖÞ Öß Àî ½£ ½ä Áã ¹© º¸ ¹ª µð Öà º¹ ¸Ê Öá ̦ Çà Öâ ¹« ´¬ ç ¶Ò »Ô ÉÛ ÈÁ Öã ´õ Öæ Ä¡ Öå Öä Öç Äë ¿ã »Õ ÀÊ ÂÓ µ¢ Ä¢ Öè Öé ¾ï ˹ Öì Öë Öê Éý Öó ËÚ Öí Öï Ëë Öî Öð Ȩ Öñ ʾ Öò ´³ Ê¿ ǯ Öô Öõ ¹¬ ´´ Öö ¸¸ ÍÄ Í© ´ö Öø Ä£ ¹­ ¾± Èß ¾² ½ø Äì Êù Ź ¹® ÉÜ Öù ÅÙ ºÂ ¸Ë Äí °Ã ½î ¹¯ ÍÇ Öú Öû ÇÑ Öü Î÷ Ï­ Öþ Öý ³Ç ס פ ×¥ ×£ ÉÀ ¾³ ×§ צ ×¢ ר ש ת ×­ ׫ ׬ ×® ±ä Äî ׯ ·ú ²ö Ƕ ×° Æû ÊÛ ×± Ï® ײ ÊÀ ×µ С б ¼° Æõ ×¶ µÝ Ĥ °ú ×· ʦ ¹° ÃÐ Äï ùû Ìï ¸¹ ¸Ì ׸ ×¹ ׿ ¼å ùü Ä¥ ¶¯ ׺ É« ÃÆ ×» ù¬ ×¼ ¶° ×½ ×¾ ×À Åö ×Á × ×à ״ ׳ ×Ä ·Á ɧ ùý ºÌ É· Ħ ÉË ×Å ¾´ ±Æ ׯ ×Ç Ìò Èà ×Ê ±ý À¬ ×É ×È ·Â ÂÔ ×Î ×Ì ×Ë Î§ ¸å ½ù ×Í ÅÌ ½¾ ÆÀ ×Ñ ×Ð ×Ï ×Ò ¸æ ×Ó Éü ½Û ×Ô Èù ÆÁ ħ ùþ Ű ×Õ µ« ¿´ ɬ ´÷ Ǧ ×Ö »Ö ˺ Ë» ±þ ×Û ú¡ Ãé ר ²÷ Ø­ ×Ú Ç° ×Ù ×× ¹ú ×Ý ×ã ×é ×á ÅÜ ×æ ÉÝ ×à ×å Îç »× ÂÕ ×Þ µÞ ×è À­ ±å ×â ²ø ×ç ¶± ×ä ×ê ×ì ×ö ×ô ×ñ ×ð Îø ×ò ¶² ¹± ½ú ×ù ×ë ú¢ ×ï ×ß ²ú ×ó ×õ ÃÑ º¨ ²¸ ×í ×ø ×÷ ¶³ © ³æ ·Ã ×î ×ú ×ý Ø¡ ú£ ¼½ ú¤ ا Äð ×û Ø¥ ²ù Ø£ ؤ ×þ Ø¢ ¸ç ͪ ´µ ±Ù ئ Ǻ °­ Èá ×Ü Ø¬ ذ Ìå Ø© Åé Ø® ¾ð د Æ× ÏÇ Ø« ú¦ ر ¹û ÀË ú¥ °Ô ت ب ÁÚ ×ü »´ ÂÆ ؽ ú¨ ÁÛ Ø¸ ص ض ¼æ ع ؼ Ø· ½¥ غ Ø´ Ìü Ìû ؾ Ø¿ °Õ ú© س ¶ò °¦ ´¶ ú§ Ø» ØÃ ØÂ ØÇ ú« ØÈ úª ØÆ ØÉ ØÁ ØÅ ØÊ ØË ØÀ »ü ØÄ ÂÖ ¹² ز ¿µ ØØ Êé ØÎ ØÏ ØÐ Ø× ØÖ Ëý ´· ØÔ ·Å ³´ ØÑ θ ØÓ °Ö ØÕ ØÌ ØÒ ØÙ ·Ä ØÍ ÍÝ Í« ØÜ Øà Áþ Îù Øá ØÞ ØÛ ú¬ ØÚ Øß ʰ Æ´ ·Æ Øâ ØÝ Øã ·û ²± Øë ´¸ Øé Øê º© Øè Øæ Øå Øì Øä Øî ²û Øð Øï Ĩ Øó Øñ Øç ·ü Øò Øö Øõ Ø÷ Øô Øø Øù Øú Êê Øü Øû ½¿ À® ²æ ²ü ú­ Øý °¿ ÀÌ Øþ ìà ١ ·á Ù¢ Àï Ù£ Ù¤ µº Ù¥ Ù¦ Ù§ Â× ¸Í Ìá ˼ ½ê Ù¨ Àð î½ Èâ ¼ê ºÍ Ù© ÂÇ Ê§ Âñ Ù¬ Ùª Ù­ Ù« Ù® ʱ °· ÉÞ Èã Ù¯ Ù² ¾µ µ» Ù° Ù· ¾¶ Ù± ÇÄ ÍÞ Ù³ Ù´ Ù¸ Åê Ùµ ¹³ ÀÞ ÙÆ È´ Âò ú® Èä Ú­ Êú Äñ Ëõ Ù» ²¡ Ãê ÙÄ Ã´ Ù¾ ÙÅ ÙÀ ÙÇ Ùà Ù Çï Ù¼ ²ý Ùº µñ Âó Ù¶ Ù¹ ¹´ ÀÛ ¾· ÙÁ ÇÒ µò ³È ³ç ¿¡ ÙÉ ÙÎ ÙÊ ·ý ÙÏ »¢ ¹é ½¦ Ù½ »ý ÙÌ »Ø ÙÍ °Ä ÙÈ Ä© µó ¶´ ÙË °§ ºÃ ¿¶ Äò ÈÔ ÙÑ ÁÞ Âª »« ÙÒ ÙÔ ÙÐ Êá Ľ ÁÜ Êû ¼Î Ùà Ùß ¿ø ·þ ÙÙ ¾¹ Æè DZ Ù× ÁÝ ¼ø ÙÜ ¾¸ ÙÖ ÙÛ ÇÓ ÙÕ ·¡ ³Ý ÙÝ Î« ºÎ õ ÙÚ ÀÜ ¹µ ¿ä ±æ Á¼ ÙØ µÅ ·Ç ÄÏ ÙÞ Áß Ùá Ùã · Ùé Ùä Ùæ ÉÁ Äó Ùç ͬ ÍÈ ´¹ °® Ùå Ùâ ´ø ±ç ú¯ Ùè ÍÉ Ùì » Ùó Ùí Ùê Ùñ ÙÓ Ùî Ùò È Åë Ùë Ùï ·È ºñ ÀÝ Ù÷ Ŧ ú° Ùô Ëà Ùõ Ùö ÌÎ À¢ ·â Ùý »µ Ùú Ùù Dz ú± Ƶ ű Ùû Ùü Éï ÇÅ »£ Àñ ËÐ ³É Ú¥ Ùþ ÍÊ Ú§ Ú£ Ú¤ Áà ú² Ú¢ Ù¿ Ú¦ Ú¡ Ú« Ú¬ ŧ Ú® »¤ Ú© µ¼ Ú¯ Ú¨ Ú³ Ú² Ú± Ú´ Ú¶ ¾ñ Úµ Ú¹ Ú· Ú¸ Ùð Ú» Úº Ùø Ú¼ Ú° »Ù Ú½ Ú¾ ÚÀ Ú¿ ÚÁ ²þ ¹¶ Êü À¯ ¸Î ÚÃ ÚÆ ú³ ÉÒ µß ÚÅ ÚÄ ÇÔ ÚÇ ¶µ ÚÉ ÚÈ ´º »¶ ÆØ ·É ¿ô ÚÊ À° Ũ Éß ÚË ÚÌ ÚÍ Ê¸ ÕÝ ÀÆ ÉÌ ºØ Èå Èà ÅÍ ÎÁ ÚÏ ¼Ð ÚÐ °¶ ¶Ô ÀÍ Éà ÚÑ »Â ÃÇ »Û ¿· ÚÒ Êý ±÷ »Ü ÚÕ ÚÓ ÚÖ Î¹ ÚÔ Àû Ú× Â² ÚØ ´ú ÚÚ ÚÙ ÚÛ ÚÜ ´û Æü ö µì »Ý Áá ½Ü °° ÚÝ ²¢ Úá ú´ ¹· Úà º« ¾º ú· Úß ¾» ÌÀ ºª °× ÀÎ úµ Úæ ú¹ À± ±Ç úº ½Õ Ëæ ºò ¾¼ ú¸ À§ ù¨ Úå Úã Úä ú¶ Ãë Û¦ Úê »þ ¹¸ Úè Úé ¿¸ Úç »¯ ú¼ ú½ Úì Úë Úð Úñ Úí ú» ³¢ Úî Úï ÈÕ Éá ·Ê Úò ú¿ À² ¾½ ÃÒ ¶Ç Úó Ú÷ ²Ë Úô Úö Úõ ½ë ÃÈ °Å Úø úÀ Úù úÁ Ī Îñ »Ã Êë ú ˽ Û¢ Úû Úþ Úý úà Úú Û¡ ÆÞ Úü Û£ ½ì Û¤ ÍË Çø Û¥ Û§ Û¨ Û© ¶Ê ±È ¹¹ Ûª Û« ½ñ Áâ úÄ ù« ÒØ Á¾ Á½ ÂØ ºÇ Ðò ·î Í­ Êþ Éþ úÅ Û¬ ºó Ä¿ Û­ ϯ ˾ Ä« Û® ´ü Û¯ Û° ÌÚ Ì¤ Ëö ËÜ »¥ Û² ¼ë ËÑ Û´ Û· Û¶ ´ù µà Û³ Ûµ Û¸ ¿ù Íû °É ºà ¼ ¼Ý ¾ó Û» ÅÎ Û¹ « Ûº ¾ò ÌÝ Û¼ Û½ Íè úÇ Û ¹º ÇÕ Û¿ Åì ÚÞ Úâ µÏ ÇÇ ÛÁ ¾¾ ÈÄ ÛÇ Èú Û¾ ÛÄ Ûà ÀÏ Ëí ÎÓ Ëç ²Ì »Þ ÏÈ ÛÆ ¿õ ÛÅ ÛÀ ¸Ï ÛÌ ÛÊ ²Í ÛÈ ÛÎ ÛÔ úÈ úÊ ÂÈ ÊÁ ÛÖ É¢ ÛÕ Çð Ë¿ ´» À÷ ½À ÄÓ Í® ÛÑ ÛÐ ÛÒ ÛÏ Û× ÛÍ ÛË ÛÓ ÛÉ Ãì Ìø ¼Æ ºô ºº Ëï ³Á úË ÄÎ ÆÊ ±É Àò À´ ·ª ÛÙ ¹» ³ü ÛÛ ³ô Ûá ÛÞ Àó ³Ë º¬ ³Ê ºÏ ÛÜ ·å ·Ë Åí úÌ ÛÚ °Æ ÛÝ Ûß ¶Í ·¬ úÉ ´¼ µË Ûâ ºù Ëñ »· Ûã ɰ Ûï ²³ Ûä Ûõ Ûå ΠÛì Çß Ûô Ûç °´ Ûé ¹¼ Ûë Ûê Ûæ Ûñ ¾¿ Ôí ¸è Íü Ûè Äô ³£ º­ Ûà Ûð ³á Ûî Ûò Åî ´þ ܲ ù© ÌÉ Û÷ ´ý Ûþ úÍ ËÀ Ü¡ Ü£ ܧ Ûù ê Åï Ü« Ûü ܨ Ü¢ ¿¹ ܬ À³ ܪ ´½ ÏÐ Ûö ܦ °Ø Ûø ̺ Ûý ¿¢ ÄÇ Ûó Ü¥ ¿ú ܯ ³ñ ¸¡ ܱ Ûú ܰ Ü© Ûû Ü­ Ü® Ü¿ ÆÎ ܤ Ü» ܽ ÄØ ÍÌ Éö ܸ ÂÊ Ü¾ Á¿ ܵ Ü ÜÁ Æï ÜÀ Æê úÏ ÜÄ Ü· ¶È ܺ ½Ý Çà ܼ ¶Ë Ü´ ܶ ܳ ϰ ³Ú ܹ Üà ³µ ºç ±Ý ÜÔ Ï± Ü× úÑ ¿º ÜÖ ÜÕ ÜÒ ÜÆ Üã ÜÅ ÜØ ÜÐ ÜË ÜÈ ÜÉ ÜÑ ô¢ ÜÎ ¹½ ÄÈ Áä ÜÌ ÜÇ ÜÊ ÍÍ Ëê ÜÏ ÜÙ úÒ Üá ÜÚ Üç Üå Üà Üß ÄÐ Áå ÜÝ ÜÛ Üâ Üè Èõ Üî Üé Üì Üæ Ãô ɸ ÜÜ Üä ¾À ÌÏ Üø Üë ¸¢ ²£ ³ß ÜÓ úÓ ¾Á Üð Ü÷ ¼ù ³ò î Üí úÕ Üò Üö ¶¶ µÌ Üô µ¡ ÆË Üó Üõ úÔ Üï úÖ Üñ ú× ³à ÃÉ Üü Üú ¸é Üù Ý¡ ÛØ Üû Üý Üþ ݬ ݨ Ûí ݧ ݦ Ý£ Üê Ý¥ ݤ ݪ Ϧ Ý­ ¶û Ý© Ý« úØ ú٠ȧ Ý® ݲ ݯ Íó ݰ ÜÞ Ý³ Ý´ ±µ ݶ ·ç ¼¡ ¶Õ ²¤ Íß Ý¸ Ý· ݺ µ½ ¶Ö ´¾ ݽ ݼ ݾ ²Î ÷ Ý¿ ´¿ ÝÁ ÝÀ Ý Ýà ÝÄ »ß Àµ º¡ Éð Êâ ÏÄ »õ ºÐ Îò ÝÅ ÝÆ »à ÝÇ ÝÈ ÝÊ ÝÉ ËØ ½Þ ¼ì »Ä ÝË ÝÍ ¿£ ÝÌ ÝÎ ÝÏ ÝÐ ÝÑ ÝÒ ÝÔ ÝÓ ÝÕ ²¥ ÃÊ ÝÖ »¦ ³Ì Ý× Å ÔÌ µ£ ÝØ ÝÙ Êì Ëè ÆÇ ÝÚ Èæ úÚ Èû ÌÓ ÝÛ ÝÝ ÝÜ Ýß ÝÞ Ýá »á ̱ Ýâ Ýã µ¤ Ýä Ýæ Ýå ¿å ɹ ±Ê ÈÅ úÛ Äõ ½Á µá ÈÆ ¼® Ýè ´À ±ø úÜ Æò Ýç ¹¾ ÃÓ Ýé Ýñ Ýê úÞ ÂÁ µâ Ýò ·è µ¥ Ýð Ýî Ýë Íà úÝ ÄÀ ÆÙ Ýì Ýô Ýó ·£ ²­ º» Ýí Ýï Ë× Âô Ë÷ Ýü Ýý ²Ï ʨ Ìý Þ¡ ¼£ ¾Â Ýø Ýþ ±è ¶· Ýõ Ýú Àô Çñ Èç Ý÷ Ë¡ Ýù Þ¤ úß Þ¢ Ýû Ë¢ ÇÈ µã Å¥ Ãí Þ¥ Þ£ ÂÙ Ýö ±Ë úà ÍÎ Þ° Þ¯ Àö Þ¬ Íì Æ¶ Þ¦ ÄÅ ±Ì ¹¿ Þ© ½§ Þ® Þ­ Þ¨ Þ« ³è Þª ÇÉ Î® ¾ô Àõ Þ¶ Þ´ ÉÍ Þ± Þ³ ±º ¹À ϲ ³½ Éâ úâ Íá ³¤ ¿» Þµ Þº úá ¾Ã Í° Þ· Þ² Þ¸ úã ÎÞ Åó ÆÂ úä ³¶ ±Õ Þ¾ ÞÁ Îà Íä ÞÈ Þ ޿ ÎÔ ÞÅ úå ½Ê ÞÇ ÞÌ Åñ ÞÊ ÞÄ Ã¸ ÞË ÞÀ ÞÆ ÞÍ °ü Þà ÞÎ ¿¼ úç ½ß Ê¥ º® úæ Þ» ÞÉ Åº úè À¶ ³é ºÑ ¾Ä Þ½ ½Â ·Ì Þ¼ ÞÒ ½í ¸º Þá ÞÛ µô ÅÏ ÞÖ Þß °¯ ±² úë ²¹ ÞØ ¬ ÞÏ ÞÑ ¹Á Þâ úé ÞÝ úì ÞÕ ÞÜ Ì« ÞÚ ÞÞ ¸Ð ¾Å ù úê ÞÔ Í¯ Þ× ÞÐ Åò ÞÓ ÞÙ ÏÑ ¼¾ Ëþ Þã È® Þï ¸» ½à Þå ί ¹Â Þò °î Þð Þä Þê Þì ÍÏ Þç Å® Þé úí Þñ Þë ÌÇ Þæ ¼¢ Þþ ³ê Þè Þí Þî Âì ÂÚ Þö Þü Þú Å© ߣ Þ÷ Þø Þà µù ɺ ¼¿ ¹÷ ϳ Þô ߢ ±é Áæ Çù ´Á Îú Ì¡ ÄÒ Þû Þý Á² ß¡ Þù Þó ´Ã ·é ߯ ߪ Àø ³ã ½á ß³ ߬ Ĭ ß© ÄÙ ßÌ ß¦ ߥ ß® ߨ ß§ ß­ À¡ ߤ úî ß° ß± ´Â ß¶ ßµ ß· ߺ Åà ߴ úï ߸ ·ã Âù ß² Ç» ß¹ ß¾ ß¼ ß¿ ß ߻ ¹ê Ǩ Þ¹ Íô ß½ ßÁ Âõ ßÀ ß« úð ïé ßÅ ßÉ ßÇ úñ úò ßà ßÄ ßÈ ßÆ ÉÎ ßÎ ßË ßÊ ßÍ ÆÔ ßÏ Ãõ Âí úó À¥ ßÐ ßÒ ßÑ Þõ ßÓ Æç ßÔ ²Ð Åô ³¥ µä ¼Þ ºÒ úô ϧ ¿æ ±ê ßÖ ßÕ úõ ß٠ú ßÜ ß× ßÛ ßÚ ÅÀ °Ù ù§ Îõ ßÞ ±¨ ßà ßß ßÝ ßØ Ë£ ßâ ú÷ ßá úö ±ë ßä ʲ ßã ̵ ¾Ç Á³ ¾Æ úù úú Îû ßê Àù ßæ ßë ±ì úø ßé Çá ßå ßè ¾È ÈÑ ßì ¼Ñ Àú ßï ßç ·§ ßí ÍÐ ßð ô¦ ½Ï ßñ ßò Ç® ßô ßõ úü dz Åõ ß÷ ßù ÎÕ ßö ßø ±í ßó ÓÛ ßú Áç »¸ ßü ßû ¿¤ ÒÙ ßý à¡ ßî ßþ úý ࢠÇú ࣠ठॠঠÄÞ à¨ à§ à© àª ¼ß Éã Ìì ૠଠÁÖ ¼¤ ୠ஠௠ÊÒ ÈÇ à° Ç× Ä­ à± ²ç µí ÌÆ ̶ ²´ Ï´ ËÒ Êª À· ಠÆÃ ¸£ à³ ºÔ ൠഠච෠ภµ¾ ๠ຠ¸¤ ÈÈ úþ ༠¾õ à» û¡ ¶¸ འ࿠ྠàÀ ¸Ñ àÁ ¶é ÁÀ ¹ý àà àÄ à ¼í ÆÈ ¶¹ àÆ Ã¬ àŠϵ Çâ àÉ àË àÈ ÌÔ àÊ àÌ ÎÄ û¢ àÐ àÏ Ãö Ç­ ¸¥ àÎ àÍ Í± Ͳ àÑ ±î ¹ö »â àÒ àÓ àÕ ½Ã à× àÖ àØ ³Í àÚ û¤ àÙ àÜ àÛ ¸¼ Ψ ¶Ì ²¦ ¶ê ´á Îè àÞ àà û¥ àá ²Ñ àÝ û¦ »¹ ÄÁ àß û© û§ àä ¼î û¨ àâ ·¾ ÈÉ àã àþ û« àé ¸½ µå àæ Íý ûª ΰ Âö àè û¬ û® û­ û¯ àê ÎÖ ¶× Èü ÇÊ àë àí àð àì àï ¸ê ±Í àñ ¿ð àî ÎÜ û° àô ô¤ àò àõ àç àó º¼ àö à÷ Íþ û± àø àù û² àå àú ´Ä ¼¥ àû àü àý ±» á¡ É» ᢠ´¤ ᣠᤠᥠ᧠ᨠᦠÉÓ áª á© û³ ᬠ᫠᭠ᮠᰠᯠ¹ù á² á± ´Å ¿Ó ż á³ À¸ »º ±ù á´ ÍÑ Êã áµ ùì ÅÄ Í³ ¹Ã ¿½ ÃË Ò´ Ä® ²è ᶠᷠἠẠṠÚ ³¦ Ḡ°Ú Ȫ ÈÊ Î± á½ á» ÃÜ À¦ È« É­ ῠά ·Í áÀ á¾ ÈÖ áÁ á û´ °Û ¾ö áÇ áÄ Æí áà µ¦ áÊ áÅ áÆ áÉ áÈ É¥ Á ÁÁ µ¿ áË áÌ áÍ áÏ áÎ ±Ö á× Èè áÑ áÓ áÕ ¿¾ áÖ áÔ ¼À áÐ áÒ É ¾É áÙ áØ áÚ ¼¦ º¯ Å÷ áÛ ÄË áÝ Î¡ áÜ Áé áâ áä áå ÃÔ áã áà áÞ áß áá áè áæ áç áé áë áì áí áî áê áð áï áñ ÎÅ áô áò áó ´â Ìþ ÊÊ áö áõ á÷ áø áü áù áú áû áý áþ ⡠⢠⣠ȯ ÅР⤠Çò É´ ⥠ûµ ⦠Ū ³§ ¹Ä ⧠⨠⩠»© ⫠⪠⬠⭠û¸ û¶ û· û¹ Èé ⮠⯠óé â° â± â² »® â³ ÇÖ Ëß ±Î ±× â´ â¶ âµ Åð À¹ ݹ â· ÌÁ ⸠´Æ È× â¹ âº â» ÌÜ ÌÕ Ä¾ Áê â½ ½â ¾Ê âÀ â¿ â¾ Èý ´Ç ¸© âÆ âà ¿¿ ̲ â âÄ âÅ âÁ âÇ âÈ Ä¯ ´ã Ãå û» âÉ âÊ âÍ ¿ç ÆÄ âÎ ËÓ âË âÌ âÑ âÐ âÏ âÓ âÒ âÔ âÖ âÕ ÊÍ ½Ö ÎÆ â× Æ· âØ âÙ âÝ âÛ âÜ âÚ âÞ âß âà âá Ì· ââ Ìð âã ÃÎ Çê ¶ë û âä ¶º ÀÐ âå º½ âæ âç ¸¦ ºÕ âé û½ ÅÖ ºÖ µÎ ˤ ÇË Å× ¹Ü âë û¾ ¾Ë û¿ β ¹Å ¸§ È£ âí ûÀ âï ¸ë âî Äö âñ ³· âì Èê ±° ºì ÏÒ âð âò ÊË ÀÙ âô âõ âó ³Î âû âú ¼§ âü â÷ âý âø ÈØ âö âù 㢠㡠Ëá âþ °ë 㤠㣠¾Ì 㥠Áà 㧠㦠㨠âè âê 㪠㩠ûÁ ¼¨ Îé ¼Ò ã« ·· µÀ µ§ »ã Í´ ã± ã° ÁÄ ã­ ã¯ ½Ë ¿À 㮠㬠Ǫ ¾Í ɼ º× Åø ã² ã³ ãÉ ¶Ø Ͻ Áµ ã´ ²Ò Ä÷ Ê¡ ûÅ ûÇ ãµ µú 㶠㸠㹠ǩ 㺠㻠㼠¶Ù ²Ó ÆÅ ½¨ »ä ã½ ½© ²Ê Éà 㾠Èë ÁÅ ãÁ ã Çé ¿Á ã¿ Ãá ãÀ ¾Î °Ü µ© ãÃ Äø ãÄ ÀÇ Ì­ É£ ãÅ ãÆ ÃÕ ÎÇ ãÈ ãÇ ¼ï ãÊ °ð ãÍ ãË ²Ô ·Î ãÌ ¹Æ ¹ò Êæ ãÎ ËÔ ãÐ ÀÑ ±Ï ²º °¬ ãÏ ãÑ ãÒ ¾÷ ãÓ ³Ï ãÕ ·ê µæ ãÖ ¶õ ã× Àü ÆÍ Àà ºõ ãØ Ãâ Áë ãÚ ãÜ ãÙ ãÛ ·¢ ãÝ ·¦ µç ÍÒ ãß ãà ±® ãã ³ö ãâ ãá ãå ãÞ ãæ Î© ãç ãè ûÈ Ôô ãê ãé ãë ãì ε ãí ðï ¾Ï ãî ãï ½× Æ¸ ãð ûÉ Ã¨ ûË ãñ ü ãò ¶¥ Ñ¿ ÃÝ ¼³ ´È ãó ä¢ ãö µè ãõ ä¤ ãô ¾Ð ãø ãù Å« ãú ³Þ ¿Ú Éä ãü Âè ã÷ ãû ãý ºû ä¦ É® Ȧ Åù ¶Ú ä¥ ä£ Èµ ãþ ÃÞ Åû Åú ºö ä¸ ä¨ äª ä­ ä® ä« ä¬ ä© ä§ ä¡ ÊÏ ²Õ äµ ä² ä· ä¶ Çó ̧ »» ä° ä¹ ä´ ä³ ä¯ ûÌ ä± ´É ý Àý È¢ ä¾ È¤ Àá ä» ÈÏ ä¿ ÊÓ ÃÛ äº ä¼ ä½ äÀ ¼Ä ÆÆ äÅ äÄ äÁ ϶ äÊ äÎ äË äÇ äÈ äÍ ä ÒÕ äÉ äà äÌ äÒ ´Ê äÏ äÐ äÑ äÔ äÓ Èö äÕ Îü Êí äÚ ä× äÖ ÀÒ äÙ äÛ äØ äß äÜ äÝ äÆ äÞ äà äá ÊÆ äâ Ìâ ¶Î ·© äã Ê´ ¿è ̰ ää γ Çô ÁÆ Ç´ ½Í °À äé äç äå ´¡ ¾Ñ äê äè äæ äî äí äì äë äï äð Àº äñ äó äò ¸Ò Á¸ äõ Åü äô äö ʵ Áì ¹Ç ä÷ ÎÈ äù äú äû äü »å äý ·Ï µê µª å¡ Ìó ¹È äþ å¤ Ìæ Ǽ ɳ ½ã å£ ¼Ó ¹É »æ µé ʶ å¢ ÁÇ Ë º÷ »ç ÄÝ å§ Îß ºÙ å¨ ¿Â åª ¾Ò º° å© ½ª ¸¾ ÁÈ å¥ å« ûÎ å¦ ·Ð å® å² ·ë å­ å¶ ûÏ ¹Ê Íí °¼ å³ µë å° å± Åý å¯ å¬ ³¨ Àä ¸¨ å¸ åµ å· å´ ·Ñ ³ å¹ Áî åÆ ûÑ åÂ å¼ åÀ ¼ú °Ý å» åà åÇ ¹Ë ÌÖ ÄÖ å½ ûÐ åÅ åº Ã¾ å¿ °½ ÌÊ å¾ ¶Û Èì Áí ÎÐ ½ï åî ûÒ åÈ Àþ åÄ åÉ åË Äù åÎ åÊ ÊÔ ´Ë ÌË °Þ åÍ Îý åÌ ±ï Æì åÏ åÖ åÐ å× åÓ Çû ¼Ê åÕ åÒ åØ åÑ ½Ä Ë¥ ½Ì åÔ åà åÜ åß åÝ åá åÛ åÁ ÀÓ ÈË åÞ åÙ Á¡ ·Ò ½« ûÓ ¿¥ Á¶ åä åæ åç åã åå åÚ åâ åê åé Ëú ·« åè åì åë åï åñ »¼ åí åò åó ù¡ åô åú Å» åö åõ å÷ åø åù åû åü ´Ì åý åþ æ¡ ûÔ æ¢ æ£ æ¤ æ¥ æ¦ æ¨ æ§ æ© æª æ« æ® æ¬ æ­ ºá ·Ó ÃÖ È³ ½ð ÇÍ Èí æ¯ Øí æ° æ² Íå æ± æ´ æ³ ÍÓ æµ Èþ æ¶ æ¹ æ¸ æ· ûÕ æº ·² Á¢ µÁ æ¾ æ» æ¼ æ¿ æÀ æ½ ±© ²§ æÂ æÃ æÄ Íâ ½¬ æÆ æÅ ¿é æÇ æÈ æÉ ´å ´Í æÊ æË ËÝ Íã ÍÔ Ï· ¹Í æÎ ¼Ô æÍ æÏ ¼© ÂÑ æÐ ¹Ì Ì× æÑ æÒ æÓ æÔ æÕ ¼ª Ìí æ× Ã¿ æÖ æÙ æØ æÚ À» æÛ æÜ ʹ æÝ Áï æÞ æß Îþ æâ æá æà İ æã ¿¦ æä æå ϸ ææ æç æé æè È¥ Æù Ͼ È© æë ¾Ó ɪ æì æê ´Î ¸Ô »è Èî ¸ª Ëà æï æí ¹Î ¹Ï °é ºè ÇÙ °ß æô ÃÀ ÇØ ÂÛ æö æò æõ æð æó ˦ ¸Õ °ý æñ æø æù ƹ ¶» ç¦ Ç½ »é ¶¼ ÀÈ ÏÆ Ì® æ÷ ÀÔ µÓ æú æü æû æý æ Ǿ ı ç£ ç¢ æþ ¿Õ Éå ç¥ ç¤ ¹Ð ÏÓ çµ ç© çª ¼ð ç¨ ¹ø ç§ ç« Ä² Ê¢ Á£ ÂÜ ç¯ ç° ç¬ ç­ ç® ¹Ñ ç¶ ç² Éæ Ëì ɨ ç± ç´ ç³ ËÄ ç· ç¸ Á· ç¹ ç» ç¿ ç¼ çº Ç¿ ç½ ç¾ ²² çÅ çÀ çÁ ç ¡ çÄ çÃ çÆ çÇ çÈ ¿Ã ²é çÉ Î× ¼« ½­ »ê Ã× çÊ çË ±± çÌ çÍ çÎ çÏ çÐ ¶½ Úª çÑ Àå çÒ ¼Ë çÓ Ð° çÔ ÊÞ ´Ü Á¤ ½Ø Éñ ½® çÕ ¹Ò çÖ ÈÌ çä çØ ÂÉ Çõ ¸¿ ç× Á¥ çÙ Äú çÛ çÚ çÝ çÜ çÞ çà çß ´Ï çá çâ çã º± ÎÉ çå ¿§ ±ð çæ çç çè °ò çé çê Éç ¼Ç çì ³© °² çë çî ÇÎ ¿Ä ²Ö ˧ ·Ý ¶Ü çí ²ê ´£ ±ñ çò Îê ÂÝ ÉÄ çþ ²× çü çú çñ çï çð ¼ã ¶ì Ã÷ ÆÑ ±Ñ çô çó çù çõ çø û× ÌÐ ç÷ ²Ø ³ý çû çý ·Ô è£ è¬ è­ °« è´ °ñ è« èª è¥ è¤ è¢ è¡ Ãã Âû è§ è¦ è© Áð ·Õ ±Á è¨ ¹Ó Áñ ûØ èº è» ²Ù ²® è¸ ûÙ è® è¶ è½ è· èµ çö è³ è¯ ´Ð è± è¼ è² è¾ è° Çü Íé è¹ èÏ èÇ ¿û ûÚ µÆ ¶Ý è ²Û ¾Ô èÅ ºÚ ÅÑ èÊ Êî èÁ ²Ú ¸Ö É© èË è¿ ûÛ èÈ èÒ èà èÄ Æº èÉ èÆ Ë¨ èÌ °à èÀ èÎ èÍ Çë èÔ èß ³þ èâ èÐ èÕ Íî èÞ ûÜ ÍÕ Îª Ãø ³ë Éò èä Æ¡ °± èÝ èÙ Áò èÓ èÛ èà Ǭ °ª èØ èá Éø èÜ è× ¾Õ ½¯ ¼¬ ÌØ ÉÇ èç èð èÚ ³÷ ûÝ ¾ø èå èê Áó èæ èí Ãß èî ÍÖ èã ³¸ èé èì ̬ èï èè èë ù¥ Ë© Ï¡ èó èú èò ¼Ã èÑ ÊΠ̢ èù èø èô èõ ±¶ è÷ èñ ÄÕ èö °þ ¢ Êà èû é¡ ÈÙ èþ ¾Ö ¼É é£ ¶¾ ûÞ é¤ Éù èý ûß èÖ èü ÏÏ Æ¢ Éó ûà é« é± é² é¥ Çö é¯ é§ é© é³ é¨ é¬ ±ò Æå é­ é° é¦ Á¦ éª »§ ¿Å ·° Ìô Ìù ½ò ûâ é· éµ ÏÎ é´ Íõ é¶ é¸ é¹ é¼ éº Æ£ é» ÈÍ é® ½ó é½ é Áô éÁ é¢ éà ÁÉ é¾ éÀ é¿ Ý± Ý¢ éÅ éÄ Íö â¼ éÆ éÇ éÈ ¸× µÔ éÊ ÑÝ µõ κ ¶ó éË éÌ Ãî éÍ Æú °º ²ã éÒ éÓ éÎ »½ éÏ Ç éÐ éÑ éÛ éÕ éØ éÔ éÖ é× ¼Ø éÙ ÃÁ ·Ö ³Â éÜ ³¿ éá éÝ éà Ⱥ éÞ éß ÉÈ ÈÚ éâ Âý éì éè ²ë éæ Ëª éç éä éå éê éí éë éé éã ÃØ éô ̪ éò éó éî éð éñ éï Àæ Ϲ éø éù ê¡ ¿ª éû éþ éö éõ ê¢ ²Ü éü ê£ éý éú ij é÷ Çè ê§ Í» ê¦ ê¥ ê® ê¨ ê° Íæ ê³ êª ê« ê¯ ê² ê± ê© ê¬ ê½ ê¶ ê´ êµ êº ê» ³ª µÂ ê¹ ê¤ ûå ê¸ ê¼ ê· ê¾ êÀ ê¿ ê êÁ éÚ êÆ êà êÄ êÅ êÇ ·ì êÉ êÈ ½° ¹Ô Þ§ êÊ ½Ñ ³¹ êË ±Ò ¾× êÌ ¹Õ êÍ °á ɽ êÎ ¿ê êÕ êÒ Ãï êÓ êÐ ¶Þ êÏ êÖ ·¶ ÂÞ êÜ êØ Âµ ê× êÚ êÑ êÛ êÝ Èï êÙ êÞ êà ¸Ó êÔ °Á êß ºÛ Îö êá êâ Áõ ΢ êã ͵ êä êå Êä êæ ºÀ Σ êë êì ¾Ø êê ûæ Íç êç êé À½ ¿þ êè êí Ê£ êï êî ³ì Ë« êð ù¢ êü êò êó êô êõ êù êú êø êö êñ ê÷ êû ð· ²¨ êþ ¶ß êý ë¢ ë¡ ë¤ ë£ ë¥ ½± ë¦ ë§ ë¨ À¾ Í× ë© Ê¤ ÇÆ ëª ë« ¸« µ¬ ë¬ »ë ÇÁ ë­ ³Ð ë® ë° Í÷ ë¯ ¿Æ ë± ë² ë³ ´Ñ ë´ ëµ ë¶ ë· ³Ñ ë¸ ë¹ ëº ²ò ¿¨ ë» ë¼ ë½ ¸À Äû ë¾ ·× ¿Ö ëÁ Ƥ ëÀ ûç ·± ë¿ Â÷ µ­ ë ëà ¾Ù ·í ëÄ Ë¬ Àß µö Ìõ ÁÊ ëÅ ûè ¿Ç Ãð ¾Ú ëÆ ëÉ ëÊ º¾  ëÈ ¾Û ɾ ëÇ »ì ±Ó ëÎ ·Ø »î »í ÏÍ ëÍ ëÌ Á§ µÍ Ïà ³º ¾Ü ûé ëË ëÐ ëÑ ëÏ ¸Ø ÍÀ »ï ǧ ëÔ ÀÀ àͶ ë× ¸ì À¿ ëÓ ëØ ¸í ëÕ ëÖ ûê ëÒ Àâ ÆÉ Ã¯ ²Ý Èð µÃ ûë Ä´ ëÛ ëÙ ÃÌ ÀÁ ´Ò ëÚ ¿Û ÎÊ ÏÀ ëÜ ëç ĵ ëæ ûì ëã ëë ëä ëà Äü ëß ëÝ Í¡ »ð ëá ëÞ ûî ëå ½ô ¸Á Âú ËÅ ±Ú °â Æ¥ ëé ëè Ææ ëí ëâ ëì ëî ¸¬ ëê ¹Ö ¼Õ ëï ÍØ ëò ëõ ëó ɵ ëð ¶à ëô ëö ëú ë÷ ëù ëø ûï ëû ¼± ëý ëü Éè ì¡ ·Ù ëþ ì¢ ì£ µÄ æÁ ¾ù ì¤ ¸î ì¥ ûð ì¦ »¾ ÚÎ ì§ ì¨ ½² ì© ìª ì« ì¬ ì­ Ã« ì® ì° ì¯ Æ¦ ì± Ë­ ì² ì³ ì´ ìµ ÆÚ ¾Ý ì¶ ¹ë Ю ì· ì¸ É¿ ì¹ ìÁ ìº ì¼ ì» ì½ ËÆ ì¾ ì¿ ìÀ ì ³­ Äç Éé ºâ ¹× ÉÏ ²ß ÈÎ ìÅ ´Ó ÀÕ ìÄ ìÉ Ãù Ìã ìÇ ìÈ µ® ìÊ Çã Âß Èñ Ž ìÆ ËÇ ²ì ìÌ Ï¨ Ä ÏÅ »ñ ìË Â± ìÜ Á¨ Æø ÉÐ ìÏ »¿ »ò ¾Þ Çå ¸­ ìÎ ìÍ Éê ¼Á ÅÒ ûñ ûò ìÑ ìÒ ¹Ø ìÐ ìÓ ìÔ ìÖ Â£ ìÕ ´æ ìØ ì× ìÙ ûó ìÛ ìÝ ìÞ ÀÖ ¼Ï ìß ³Ò ìà Áö ìá ìâ Éë ûô µ¯ ìã Ķ ±Û ìä ¼ñ ¿ö ­ ìç ìæ ìå ìí ìë ìè ìê ìé ìì µ÷ ìð À× ìñ ¸Ù ìî ìï Ï© Ä· Á© ìò ìõ ìó ìô Í٠Ƨ ìø ìö ì÷ ìù í© ìü ìý ìû ìú Äý í¡ í¥ í¢ ìþ í£ í¤ í« í¦ ÀØ í¨ íª í§ í­ ½³ í¬ í® í¯ í² í± í° í´ í³ Ìö í¶ íµ í· í¸ íº í¹ ¿È í» ¶í í¼ í¾ í¿ íÀ í½ íÁ ¼Ö í µ° ·³ ûö ¸® íà Æð ž íÄ íÇ ¼´ íÆ íÅ ·Ú íÈ ³Ó íÊ ºÜ íÉ íÒ íÌ íÎ Êå íË íÍ íÑ íÏ µ± íÐ íÓ ÇÚ ÎØ ½´ íÔ Í¢ íÖ íÕ íÙ ÍÁ íØ ³í í× íÜ íÛ íÚ Å² íÝ íÞ íß ¹ì ·¥ íà íá íâ ¿É íã ¼­ íä íå Ò¡ Ñþ íæ åð íç ä ¿« ÇÀ íè ÊÕ ÄÔ ¹þ é ±ª Ëø ¿× ·Þ ¶á ÊÖ íé íë íê ²à Æö íì Ç÷ ų íí ½Ò íï Ì íþ íñ íò ÄÉ Âà Á÷ ƨ íð µÕ íù íö î¥ Æ© Ãà íó Äþ ÅÓ íô íø ¿à Çç ÄÌ À í÷ ® ¤ íõ °© Ï¢ íú Âá ½µ ¿Ê íü íû °ï íý ɯ î§ ÆÛ ¿ë ÃÙ ¶ø î¦ Í· ±¿ Ê× ²á î¡ î¢ î£ î¤ Æ» ã °ã î¨ î© ô£ ½ îª ±ó ÁÌ ¸¯ ÍÚ ûù î« Å¬ Áø ¼× î¬ î¯ ½å î­ Á« Áª °ä ÎË î± Èò î³ î² î° ãä ´Ô íî îµ î´ î¶ Í¸ Æá Ë® î· ¼Ù î¸ î¹ îº Å¡ °ê ¹Ù Ϻ î¾ ûú ·´ î» î¼ Éô ³Ô ͹ ¶¿ ÅÔ î¿ îÀ ûü îÁ ûý Å¢ îà î ÆÓ îÄ ½¶ ¼à ÇÛ Ãñ ¼ò ¿ì îÅ îÆ ¿Ý îÇ îÈ îÉ Íï ½· îË îÊ ¹Ú ¹ó »À îÎ ½æ îÍ îÌ Âé ¸ï Àà Ȱ ½¹ îÏ ¾ß îÒ îÐ îÑ îÔ îÓ ¾ú îÕ îÖ î× ÈÐ ºÓ ¼á îØ î٠Τ ½Å Ìî ÎÌ îÚ ¶â îÛ ü¡ Å£ ûþ îÞ ³ø ¿Ë ü¢ îÜ îÝ Äà ü¥ ü¦ ËÕ ¶ü ü£ ü¤ îà îá îß îã ü§ ü© Æß ³Ã ü¨ îç îä îæ îâ ïÏ îå Îë ¸Ú ü° üª ü¬ îï ü« Å´ îê îí îë îð ü­ îñ ü¯ îé ü® îö ±ô îè È­ îì ¾à ü± ¹Û ü³ ü´ ËÈ ¶ä ½Æ Ƽ ù¤ Á­ îô îî îó Ìà ĸ îõ îò ü² Á¬ îù îø î÷ ü¸ ˯ ü¼ üº ü¶ ü· ü» ½û üµ îú Êß ±Ô ÉÆ Ãò µø ùª îü ü¿ ¹Ý ü üÄ »¬ îû ¿í ¿î ï¡ ï£ üà üÁ ¾û ü¾ ï¢ ï¤ ü½ ¶Ó ÉÅ ¼â Ï£ îþ ºø Ï¿ ï¦ ï¥ ï§ îý ù£ Æé ÅÕ Ä× ï¬ üÆ ÃÃ ï¨ ï© ·­ ï« üÅ ¸° ïª ¾á ³ù ï° º¿ Áù ÄÊ üÇ ³» ï® ï¯ ÄÃ ï­ ï± ï· üÈ ïº ï¹ Å­ ï² ï³ ï¶ ï¸ üÉ ¶À ï» ïµ ï´ üÊ ï¿ ïÀ ïÁ ï¾ ï½ ¾â ƪ ï¼ ïÅ ïà üË ïÄ ïÂ Âø ïÆ ïÇ ïÉ üÌ üÍ ´Õ ïÈ Ìú ïÔ ïÊ ïÍ ïË ïÌ ïÎ ïÐ ïÑ ïÒ ïÕ ïÓ ïÖ ïØ ï× Ä¹ Ìç ïÙ Á® ïÚ ÊÄ ïÛ ³« ±¼ ´× üÎ ´Ö ïÜ ïÝ ïÞ ïß ïà ´Ø ³Õ ¹Þ ȶ ïâ ïá ïã ±Ü ïæ ïå ïä ïç ïê °Ç ïè ïì ïë ïî ïí ïï Æ® ïð ïñ ïó ïò Éì ïô ïõ ºå ïö ï÷ ËÉ ÁË °¤ ÂË ïø Éí ïû ïù ¹ß ïú ¸Â ÊÅ ïý ð¡ ïþ 𢠱¡ ¿Ø ½ü ´Ù ð£ Çæ 𥠱¢ ð¤ ÄÄ ÎÍ Æ« ïü Φ ¸± ÍÛ ¶ù δ ·¨ Ââ ç¡ ð¦ ³¬ ¿ï ³Ö ð¨ ð© ð§ ·ä ºÝ ¾ã üÑ ±£ ÎÙ ð« î® ðª üÒ ð® ð¬ ð­ ð¯ ð° Îì ð± ð² ÀÉ È» ¿ý ´ç ͺ ²í ½¸ ¸Û ðµ ð´ »ó ð¶ ð³ »¨ ðº ê­ ÒÖ ¿÷ ð¸ Î¥ Æñ ±« Àã ¼¶ Ê· ±À Îí Íë ð» ÅÅ ¼û ð¼ ð½ ¿Ì ð¾ Îî ð¹ ðÀ ð ðÁ ð¿ ðà ðÄ Áú ²â ðŠ̸ ðÆ ðÇ Ïª üÓ Û± ðÈ üÔ ðÉ ðÊ ðÎ üÕ ðË ðÌ ðÍ ðÏ üÖ ü× üØ ÀÄ üÙ Ì÷ ÀÅ ðÐ Èó ðÑ óÓ ÌÌ ðÒ ðÓ ðÔ ³× ðÖ ¿Ù ð× ·¤ ðØ ðÜ ðÚ ðÛ ³ó ðÙ ðÝ ðÞ °È ðß ðà ¾ä ðá µÇ ðä ðã ðâ ëñ ÊÜ ðå ðæ ðç ðè ðé ðê ´Ú ðë ðì Ç£ ðî ²» ðñ ð𠱤 ¶Á ÊÇ Äº º¢ ¹à ½ç ¿Ü ðó ðò Í ´è ÈÒ ÆÜ ¿ü ÎÎ ·Û ðö ðõ ËË Æ¬ ±Ð ð÷ ðô ÉÑ Íê ðø ðù ðû Âê ³Û ³Ü ðú ´é ¸² üÚ ´ê Å¿ Îà üÛ ¸Ü ðü ðý ðþ ñ¡ ñ£ ñ¢ É÷ ñ¤ ñ¥ ñ¦ ñ§ ñ© ñ¨ ñª Èô æÌ ¿© µ² ñ« ñ¬ Ò¬ Ý» ÈÓ °û °» »ô ˰ ¾þ ñ­ Ìß ñ® ÍÜ ±Â »Á ñ¯ ²î ñ° ñ± ñ³ ñ´ ñ¶ ñ² ñµ üÞ ´Û ñ· ñ¸ ñ¹ ñº ñ» ñ½ ñ¼ ñ¿ ñ ñ¾ ñÀ ñÁ ñà ¶Â ¼ó ñÄ ñÅ ¹á üà ñÆ ³¾ ÇÏ ñÇ ñÈ ÃÚ Æë ñÉ Çý ÂÌ ±Ø ¶î ¶ï Ãó ñÎ ¶ð ²ï ñÍ ñË ñÌ ñÊ ñØ ñÏ ñÐ ñÑ ñÒ ñÔ ñÓ ½Ù ñÕ ñ× µ³ ñÖ Áû ¸³ ñÙ ÂÍ ñÚ Æ­ ñÛ ñà ñÞ ñÝ ñß ñÜ ñâ üá ñá ñä ¶Ã ñã ñå ñæ ñè ñç ñé ñë ñê ¹ü ñì ñí ³¼ ñî ñï ¿ñ ñð ññ ñò ñó ¹â üâ üã ñô ñõ ñö ñ÷ ñø ȱ ñú ɦ ñû ñù ñý ñü ñþ ò¡ ò¢ ò£ ò¤ ò¥ ò¦ ò§ ò¨ ò© òª ò« ò¬ ò­ ò® ݵ ò¯ äø µ´ ³¡ º² ò± ò° Ì¥ ò³ ò´ ò² òµ Ëâ ò¶ µû Ï¥ üå ò· üä ò¹ °¾ üæ òº Ê« ò¸ ò» ò¼ ò½ ò¾ ò¿ Ëî »­ ºú Á¯ üç òÀ òà üè òÁ òÄ ¸ñ ò òÅ òÆ òÇ òË »ª Âä òÌ òÉ òÈ òÊ ·ß òÐ òÏ òÎ °³ üé òÚ òÖ ò× òÓ òÙ òÕ ³â ÏÌ òØ òÔ òÒ òÑ òÜ òß òÞ òÝ ÉÉ òÛ °ó òà òâ ³ï òÍ ±· òä òã òá í Ëð ÎÚ òå òæ òç òè òé Ä» òê È· òï òë òì ˱ ÌÄ ÆÐ òð òñ ƾ òî òí ²ª òù òø ±õ òö òõ òó ³û òò ¼² ²© ¹ã òü òû òú ò÷ òý òþ ó¥ ó¤ ó¦ ±­ ó¡ ó¢ ¹ô ̹ ó£ üë ˲ ó« üê ó§ ó¬ ó© ó¨ ·Ü ó­ ó® ó¯ óª òô ó° Äá ó´ óµ ó³ ó² ó¸ ó± ó¶ ó· óº ó¹ ó¼ ó½ ó¾ ÏÉ ó» Âë ºí ó¿ üí óÀ óÁ ó óà ¸´ óÄ óÅ ¼¯ óÆ óÇ óÈ óÉ óÌ óÊ Ï¼ óË Îï óÍ ÎÛ óÎ Çþ óÏ óÑ óÒ óÐ ¹í ÌÍ Ëã Ö÷ Ýà Ëû ²« óÔ µÐ óÕ óÖ ó× üî ¹õ óØ àÔ ÌÛ Âã óÙ óÛ óÚ óÜ óÝ óÞ óß óà óá óâ óã óä óå óæ óç óè Ť ¸Ý óê ÁÍ óë óì É¡ óí óî ã· ìÚ ðí óï óð óò óó óô Îð óñ óõ óö óø ó÷ óú óû óù ζ óü óý ãÔ óþ úÆ üÏ ùÔ ùß ùà ùõ ú¾ úÎ úÐ úû û£ ûº û ûà ûÄ ûÆ ûÊ ûÍ ûÖ ûá ûã ûä ûí ûõ û÷ ûø ûû ü¹ üÀ üÐ üÜ üÝ üß üì ¡ª üþ ¡ô ¡ð ¡ó ¡õ üý ¡Ê ¡Ë ¡ö ¡Ü ¡¤ ¡Ý ¡¥ ¡¿ £° £± £² £³ £´ £µ £¶ £· £¸ £¹ ¡§ ¡¨ ¡ã ¡á ¡ä ¡© ¡÷ £Á £Â £Ã £Ä £Å £Æ £Ç £È £É £Ê £Ë £Ì £Í £Î £Ï £Ð £Ñ £Ò £Ó £Ô £Õ £Ö £× £Ø £Ù £Ú ¡Î ¡À ¡Ï ¡° ¡² ¡® £á £â £ã £ä £å £æ £ç £è £é £ê £ë £ì £í £î £ï £ð £ñ £ò £ó £ô £õ £ö £÷ £ø £ù £ú ¡Ð ¡Ã ¡Ñ ¡Á Ž¡ Ž¢ Ž£ ޤ Ž¥ ަ ާ ލ Ž© Žª Ž« ެ Ž­ Ž® ޝ ް ޱ ޲ ޳ Ž´ ޵ ޶ Ž· ޏ ޹ Žº Ž» ޼ ޽ ޾ Ž¿ ŽÀ ŽÁ ŽÂ ŽÃ ŽÄ ŽÅ ŽÆ ŽÇ ŽÈ ŽÉ ŽÊ ŽË ŽÌ ŽÍ ŽÎ ŽÏ ŽÐ ŽÑ ŽÒ ŽÓ ŽÔ ŽÕ ŽÖ Ž× ŽØ ŽÙ ŽÚ ŽÛ ŽÜ ŽÝ ŽÞ Žß ¡ñ ¡ò ¢Ì ¡± üü ¡ï ¢¯ ¢° ¢± ¢² ¢³ ¢´ ¢µ ¢¶ ¢· ¢¸ ¢¹ ¢Â ¢Ã ¢Ä ¢ë ¢ì ¢í ¢î ¢ï ¢ð ¢ñ ¦á ¦â ¦ã ¦ä ¦å ¦ç ¦é ¦ê ¦ì ¦ñ ¦ò ¦ó ¦ô ¦õ ¦ö ¦÷ ¦ø ¦ù ¦ú ¦û ¦ü §Â §Ã §Ä §Å §Æ §Ç §È §É §Ê §Ë §Ì §Í §Î §ò §ó §ô §õ §ö §÷ §ø §ù §ú §û §ü §ý §þ ©¡ ©¢ ©¤ ©¦ ©¨ ©© ©« ©¬ ©­ ©¯ ©° ©Á ©Â ©Ã ©Ä ©Å ©Æ ©Ç ©È ©É ©Ê ©Ë ©Ì ©Í ©Î ©Ï ©Ð ª¡ ª¢ ª£ ª¤ ª¥ ª¦ ª§ ª¨ ª© ªª ª« ª¬ ª­ ª® ª¯ ª° ª± ª² ª³ ª´ ªµ ª¶ ª· ª¸ ªº ª» ª¼ ª½ ª¾ ª¿ ªÀ ªÁ ªÂ ªÃ ªÄ ªÅ ªÆ ªÇ ªÈ ªÉ ªÊ ªË ªÌ ªÍ ªÎ ªÏ ªÐ ªÑ ªÒ ªÓ ªÔ ªÕ ªÖ ª× ªØ ªÙ ªÚ ªÛ ªÜ ªÝ ªÞ ªß ªà ªá ªâ ªã ªä ªå ªæ ªç ªè ªé ªê ªë ªì ªí ªî ªï ªð ªñ ªò ªó ªô ªõ ªö ª÷ «¡ «¢ «£ «¤ «¥ «¦ «§ «¨ «© «ª «« «¬ «­ «® «¯ «° «± «² «³ «´ «µ «¶ «· «¸ «¹ «º «» «½ «¾ «¿ «À «Á «Â «Ã «Å «Æ «Ç «È «É «Ê «Ë «Ì «Í «Î «Ï «Ð «Ñ «Ò «Ó «Ô «Õ «Ö «× «Ø «Ù «Ú «Û «Ü «Ý «Þ «ß «à «á «â «ã «ä «å «æ «ç «è «é «ê «ë «ì «í «î «ï «ð «ñ «ò «ó «ô «õ «ö «÷ °¡ °¢ °£ °¤ °¥ °¦ °§ °¨ °© °ª °« °¬ °­ °® °¯ °° °± °² °³ °´ °µ °¶ °· °¸ °¹ °º °» °¼ °½ °¾ °¿ °À °Á °Â °Ã °Ä °Å °Æ °Ç °È °É °Ê °Ë °Ì °Í °Î °Ï °Ð °Ñ °Ò °Ó °Ô °Õ °Ö °× °Ø °Ù °Ú °Û °Ü °Ý °Þ °ß °à °á °â °ã °ä °å °æ °ç °è °é °ê °ë °ì °í °î °ï °ð °ñ °ò °ó °ô °õ °ö °÷ °ø °ù °ú °û °ü °ý °þ ±¡ ±¢ ±£ ±¤ ±¥ ±¦ ±§ ±¨ ±© ±ª ±« ±¬ ±­ ±® ±¯ ±° ±± ±² ±³ ±´ ±µ ±¶ ±· ±¸ ±¹ ±º ±» ±¼ ±½ ±¾ ±¿ ±À ±Á ±Â ±Ã ±Ä ±Å ±Æ ±Ç ±È ±É ±Ê ±Ë ±Ì ±Í ±Î ±Ï ±Ð ±Ñ ±Ò ±Ó ±Ô ±Õ ±Ö ±× ±Ø ±Ù ±Ú ±Û ±Ü ±Ý ±Þ ±ß ±à ±á ±â ±ã ±ä ±å ±æ ±ç ±è ±é ±ê ±ë ±ì ±í ±î ±ï ±ð ±ñ ±ò ±ó ±ô ±õ ±ö ±÷ ±ø ±ù ±ú ±û ±ü ±ý ±þ ²¡ ²¢ ²£ ²¤ ²¥ ²¦ ²§ ²¨ ²© ²ª ²« ²¬ ²­ ²® ²¯ ²° ²± ²² ²³ ²´ ²µ ²¶ ²· ²¸ ²¹ ²º ²» ²¼ ²½ ²¾ ²¿ ²À ²Á ²Â ²Ã ²Ä ²Å ²Æ ²Ç ²È ²É ²Ê ²Ë ²Ì ²Í ²Î ²Ï ²Ð ²Ñ ²Ò ²Ó ²Ô ²Õ ²Ö ²× ²Ø ²Ù ²Ú ²Û ²Ü ²Ý ²Þ ²ß ²à ²á ²â ²ã ²ä ²å ²æ ²ç ²è ²é ²ê ²ë ²ì ²í ²î ²ï ²ð ²ñ ²ò ²ó ²ô ²õ ²ö ²÷ ²ø ²ù ²ú ²û ²ü ²ý ²þ ³¡ ³¢ ³£ ³¤ ³¥ ³¦ ³§ ³¨ ³© ³ª ³« ³¬ ³­ ³® ³¯ ³° ³± ³² ³³ ³´ ³µ ³¶ ³· ³¸ ³¹ ³º ³» ³¼ ³½ ³¾ ³¿ ³À ³Á ³Â ³Ã ³Ä ³Å ³Æ ³Ç ³È ³É ³Ê ³Ë ³Ì ³Í ³Î ³Ï ³Ð ³Ñ ³Ò ³Ó ³Ô ³Õ ³Ö ³× ³Ø ³Ù ³Ú ³Û ³Ü ³Ý ³Þ ³ß ³à ³á ³â ³ã ³ä ³å ³æ ³ç ³è ³é ³ê ³ë ³ì ³í ³î ³ï ³ð ³ñ ³ò ³ó ³ô ³õ ³ö ³÷ ³ø ³ù ³ú ³û ³ü ³ý ³þ ´¡ ´¢ ´£ ´¤ ´¥ ´¦ ´§ ´¨ ´© ´ª ´« ´¬ ´­ ´® ´¯ ´° ´± ´² ´³ ´´ ´µ ´¶ ´· ´¸ ´¹ ´º ´» ´¼ ´½ ´¾ ´¿ ´À ´Á ´Â ´Ã ´Ä ´Å ´Æ ´Ç ´È ´É ´Ê ´Ë ´Ì ´Í ´Î ´Ï ´Ð ´Ñ ´Ò ´Ó ´Ô ´Õ ´Ö ´× ´Ø ´Ù ´Ú ´Û ´Ü ´Ý ´Þ ´ß ´à ´á ´â ´ã ´ä ´å ´æ ´ç ´è ´é ´ê ´ë ´ì ´í ´î ´ï ´ð ´ñ ´ò ´ó ´ô ´õ ´ö ´÷ ´ø ´ù ´ú ´û ´ü ´ý ´þ µ¡ µ¢ µ£ µ¤ µ¥ µ¦ µ§ µ¨ µ© µª µ« µ¬ µ­ µ® µ¯ µ° µ± µ² µ³ µ´ µµ µ¶ µ· µ¸ µ¹ µº µ» µ¼ µ½ µ¾ µ¿ µÀ µÁ µÂ µÃ µÄ µÅ µÆ µÇ µÈ µÉ µÊ µË µÌ µÍ µÎ µÏ µÐ µÑ µÒ µÓ µÔ µÕ µÖ µ× µØ µÙ µÚ µÛ µÜ µÝ µÞ µß µà µá µâ µã µä µå µæ µç µè µé µê µë µì µí µî µï µð µñ µò µó µô µõ µö µ÷ µø µù µú µû µü µý µþ ¶¡ ¶¢ ¶£ ¶¤ ¶¥ ¶¦ ¶§ ¶¨ ¶© ¶ª ¶« ¶¬ ¶­ ¶® ¶¯ ¶° ¶± ¶² ¶³ ¶´ ¶µ ¶¶ ¶· ¶¸ ¶¹ ¶º ¶» ¶¼ ¶½ ¶¾ ¶¿ ¶À ¶Á ¶Â ¶Ã ¶Ä ¶Å ¶Æ ¶Ç ¶È ¶É ¶Ê ¶Ë ¶Ì ¶Í ¶Î ¶Ï ¶Ð ¶Ñ ¶Ò ¶Ó ¶Ô ¶Õ ¶Ö ¶× ¶Ø ¶Ù ¶Ú ¶Û ¶Ü ¶Ý ¶Þ ¶ß ¶à ¶á ¶â ¶ã ¶ä ¶å ¶æ ¶ç ¶è ¶é ¶ê ¶ë ¶ì ¶í ¶î ¶ï ¶ð ¶ñ ¶ò ¶ó ¶ô ¶õ ¶ö ¶÷ ¶ø ¶ù ¶ú ¶û ¶ü ¶ý ¶þ ·¡ ·¢ ·£ ·¤ ·¥ ·¦ ·§ ·¨ ·© ·ª ·« ·¬ ·­ ·® ·¯ ·° ·± ·² ·³ ·´ ·µ ·¶ ·· ·¸ ·¹ ·º ·» ·¼ ·½ ·¾ ·¿ ·À ·Á ·Â ·Ã ·Ä ·Å ·Æ ·Ç ·È ·É ·Ê ·Ë ·Ì ·Í ·Î ·Ï ·Ð ·Ñ ·Ò ·Ó ·Ô ·Õ ·Ö ·× ·Ø ·Ù ·Ú ·Û ·Ü ·Ý ·Þ ·ß ·à ·á ·â ·ã ·ä ·å ·æ ·ç ·è ·é ·ê ·ë ·ì ·í ·î ·ï ·ð ·ñ ·ò ·ó ·ô ·õ ·ö ·÷ ·ø ·ù ·ú ·û ·ü ·ý ·þ ¸¡ ¸¢ ¸£ ¸¤ ¸¥ ¸¦ ¸§ ¸¨ ¸© ¸ª ¸« ¸¬ ¸­ ¸® ¸¯ ¸° ¸± ¸² ¸³ ¸´ ¸µ ¸¶ ¸· ¸¸ ¸¹ ¸º ¸» ¸¼ ¸½ ¸¾ ¸¿ ¸À ¸Á ¸Â ¸Ã ¸Ä ¸Å ¸Æ ¸Ç ¸È ¸É ¸Ê ¸Ë ¸Ì ¸Í ¸Î ¸Ï ¸Ð ¸Ñ ¸Ò ¸Ó ¸Ô ¸Õ ¸Ö ¸× ¸Ø ¸Ù ¸Ú ¸Û ¸Ü ¸Ý ¸Þ ¸ß ¸à ¸á ¸â ¸ã ¸ä ¸å ¸æ ¸ç ¸è ¸é ¸ê ¸ë ¸ì ¸í ¸î ¸ï ¸ð ¸ñ ¸ò ¸ó ¸ô ¸õ ¸ö ¸÷ ¸ø ¸ù ¸ú ¸û ¸ü ¸ý ¸þ ¹¡ ¹¢ ¹£ ¹¤ ¹¥ ¹¦ ¹§ ¹¨ ¹© ¹ª ¹« ¹¬ ¹­ ¹® ¹¯ ¹° ¹± ¹² ¹³ ¹´ ¹µ ¹¶ ¹· ¹¸ ¹¹ ¹º ¹» ¹¼ ¹½ ¹¾ ¹¿ ¹À ¹Á ¹Â ¹Ã ¹Ä ¹Å ¹Æ ¹Ç ¹È ¹É ¹Ê ¹Ë ¹Ì ¹Í ¹Î ¹Ï ¹Ð ¹Ñ ¹Ò ¹Ó ¹Ô ¹Õ ¹Ö ¹× ¹Ø ¹Ù ¹Ú ¹Û ¹Ü ¹Ý ¹Þ ¹ß ¹à ¹á ¹â ¹ã ¹ä ¹å ¹æ ¹ç ¹è ¹é ¹ê ¹ë ¹ì ¹í ¹î ¹ï ¹ð ¹ñ ¹ò ¹ó ¹ô ¹õ ¹ö ¹÷ ¹ø ¹ù ¹ú ¹û ¹ü ¹ý ¹þ º¡ º¢ º£ º¤ º¥ º¦ º§ º¨ º© ºª º« º¬ º­ º® º¯ º° º± º² º³ º´ ºµ º¶ º· º¸ º¹ ºº º» º¼ º½ º¾ º¿ ºÀ ºÁ ºÂ ºÃ ºÄ ºÅ ºÆ ºÇ ºÈ ºÉ ºÊ ºË ºÌ ºÍ ºÎ ºÏ ºÐ ºÑ ºÒ ºÓ ºÔ ºÕ ºÖ º× ºØ ºÙ ºÚ ºÛ ºÜ ºÝ ºÞ ºß ºà ºá ºâ ºã ºä ºå ºæ ºç ºè ºé ºê ºë ºì ºí ºî ºï ºð ºñ ºò ºó ºô ºõ ºö º÷ ºø ºù ºú ºû ºü ºý ºþ »¡ »¢ »£ »¤ »¥ »¦ »§ »¨ »© »ª »« »¬ »­ »® »¯ »° »± »² »³ »´ »µ »¶ »· »¸ »¹ »º »» »¼ »½ »¾ »¿ »À »Á »Â »Ã »Ä »Å »Æ »Ç »È »É »Ê »Ë »Ì »Í »Î »Ï »Ð »Ñ »Ò »Ó »Ô »Õ »Ö »× »Ø »Ù »Ú »Û »Ü »Ý »Þ »ß »à »á »â »ã »ä »å »æ »ç »è »é »ê »ë »ì »í »î »ï »ð »ñ »ò »ó »ô »õ »ö »÷ »ø »ù »ú »û »ü »ý »þ ¼¡ ¼¢ ¼£ ¼¤ ¼¥ ¼¦ ¼§ ¼¨ ¼© ¼ª ¼« ¼¬ ¼­ ¼® ¼¯ ¼° ¼± ¼² ¼³ ¼´ ¼µ ¼¶ ¼· ¼¸ ¼¹ ¼º ¼» ¼¼ ¼½ ¼¾ ¼¿ ¼À ¼Á ¼Â ¼Ã ¼Ä ¼Å ¼Æ ¼Ç ¼È ¼É ¼Ê ¼Ë ¼Ì ¼Í ¼Î ¼Ï ¼Ð ¼Ñ ¼Ò ¼Ó ¼Ô ¼Õ ¼Ö ¼× ¼Ø ¼Ù ¼Ú ¼Û ¼Ü ¼Ý ¼Þ ¼ß ¼à ¼á ¼â ¼ã ¼ä ¼å ¼æ ¼ç ¼è ¼é ¼ê ¼ë ¼ì ¼í ¼î ¼ï ¼ð ¼ñ ¼ò ¼ó ¼ô ¼õ ¼ö ¼÷ ¼ø ¼ù ¼ú ¼û ¼ü ¼ý ¼þ ½¡ ½¢ ½£ ½¤ ½¥ ½¦ ½§ ½¨ ½© ½ª ½« ½¬ ½­ ½® ½¯ ½° ½± ½² ½³ ½´ ½µ ½¶ ½· ½¸ ½¹ ½º ½» ½¼ ½½ ½¾ ½¿ ½À ½Á ½Â ½Ã ½Ä ½Å ½Æ ½Ç ½È ½É ½Ê ½Ë ½Ì ½Í ½Î ½Ï ½Ð ½Ñ ½Ò ½Ó ½Ô ½Õ ½Ö ½× ½Ø ½Ù ½Ú ½Û ½Ü ½Ý ½Þ ½ß ½à ½á ½â ½ã ½ä ½å ½æ ½ç ½è ½é ½ê ½ë ½ì ½í ½î ½ï ½ð ½ñ ½ò ½ó ½ô ½õ ½ö ½÷ ½ø ½ù ½ú ½û ½ü ½ý ½þ ¾¡ ¾¢ ¾£ ¾¤ ¾¥ ¾¦ ¾§ ¾¨ ¾© ¾ª ¾« ¾¬ ¾­ ¾® ¾¯ ¾° ¾± ¾² ¾³ ¾´ ¾µ ¾¶ ¾· ¾¸ ¾¹ ¾º ¾» ¾¼ ¾½ ¾¾ ¾¿ ¾À ¾Á ¾Â ¾Ã ¾Ä ¾Å ¾Æ ¾Ç ¾È ¾É ¾Ê ¾Ë ¾Ì ¾Í ¾Î ¾Ï ¾Ð ¾Ñ ¾Ò ¾Ó ¾Ô ¾Õ ¾Ö ¾× ¾Ø ¾Ù ¾Ú ¾Û ¾Ü ¾Ý ¾Þ ¾ß ¾à ¾á ¾â ¾ã ¾ä ¾å ¾æ ¾ç ¾è ¾é ¾ê ¾ë ¾ì ¾í ¾î ¾ï ¾ð ¾ñ ¾ò ¾ó ¾ô ¾õ ¾ö ¾÷ ¾ø ¾ù ¾ú ¾û ¾ü ¾ý ¾þ ¿¡ ¿¢ ¿£ ¿¤ ¿¥ ¿¦ ¿§ ¿¨ ¿© ¿ª ¿« ¿¬ ¿­ ¿® ¿¯ ¿° ¿± ¿² ¿³ ¿´ ¿µ ¿¶ ¿· ¿¸ ¿¹ ¿º ¿» ¿¼ ¿½ ¿¾ ¿¿ ¿À ¿Á ¿Â ¿Ã ¿Ä ¿Å ¿Æ ¿Ç ¿È ¿É ¿Ê ¿Ë ¿Ì ¿Í ¿Î ¿Ï ¿Ð ¿Ñ ¿Ò ¿Ó ¿Ô ¿Õ ¿Ö ¿× ¿Ø ¿Ù ¿Ú ¿Û ¿Ü ¿Ý ¿Þ ¿ß ¿à ¿á ¿â ¿ã ¿ä ¿å ¿æ ¿ç ¿è ¿é ¿ê ¿ë ¿ì ¿í ¿î ¿ï ¿ð ¿ñ ¿ò ¿ó ¿ô ¿õ ¿ö ¿÷ ¿ø ¿ù ¿ú ¿û ¿ü ¿ý ¿þ À¡ À¢ À£ À¤ À¥ À¦ À§ À¨ À© Àª À« À¬ À­ À® À¯ À° À± À² À³ À´ Àµ À¶ À· À¸ À¹ Àº À» À¼ À½ À¾ À¿ ÀÀ ÀÁ À Àà ÀÄ ÀÅ ÀÆ ÀÇ ÀÈ ÀÉ ÀÊ ÀË ÀÌ ÀÍ ÀÎ ÀÏ ÀÐ ÀÑ ÀÒ ÀÓ ÀÔ ÀÕ ÀÖ À× ÀØ ÀÙ ÀÚ ÀÛ ÀÜ ÀÝ ÀÞ Àß Àà Àá Àâ Àã Àä Àå Àæ Àç Àè Àé Àê Àë Àì Àí Àî Àï Àð Àñ Àò Àó Àô Àõ Àö À÷ Àø Àù Àú Àû Àü Àý Àþ Á¡ Á¢ Á£ Á¤ Á¥ Á¦ Á§ Á¨ Á© Áª Á« Á¬ Á­ Á® Á¯ Á° Á± Á² Á³ Á´ Áµ Á¶ Á· Á¸ Á¹ Áº Á» Á¼ Á½ Á¾ Á¿ ÁÀ ÁÁ Á Áà ÁÄ ÁÅ ÁÆ ÁÇ ÁÈ ÁÉ ÁÊ ÁË ÁÌ ÁÍ ÁÎ ÁÏ ÁÐ ÁÑ ÁÒ ÁÓ ÁÔ ÁÕ ÁÖ Á× ÁØ ÁÙ ÁÚ ÁÛ ÁÜ ÁÝ ÁÞ Áß Áà Áá Áâ Áã Áä Áå Áæ Áç Áè Áé Áê Áë Áì Áí Áî Áï Áð Áñ Áò Áó Áô Áõ Áö Á÷ Áø Áù Áú Áû Áü Áý Áþ ¡ ¢ £ ¤ Â¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ ÂÀ ÂÁ  Âà ÂÄ ÂÅ ÂÆ ÂÇ ÂÈ ÂÉ ÂÊ ÂË ÂÌ ÂÍ ÂÎ ÂÏ ÂÐ ÂÑ ÂÒ ÂÓ ÂÔ ÂÕ ÂÖ Â× ÂØ ÂÙ ÂÚ ÂÛ ÂÜ ÂÝ ÂÞ Âß Âà Âá Ââ Âã Âä Âå Âæ Âç Âè Âé Âê Âë Âì Âí Âî Âï Âð Âñ Âò Âó Âô Âõ Âö Â÷ Âø Âù Âú Âû Âü Âý Âþ á â ã ä Ã¥ æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ ÃÀ ÃÁ àÃà ÃÄ ÃÅ ÃÆ ÃÇ ÃÈ ÃÉ ÃÊ ÃË ÃÌ ÃÍ ÃÎ ÃÏ ÃÐ ÃÑ ÃÒ ÃÓ ÃÔ ÃÕ ÃÖ Ã× ÃØ ÃÙ ÃÚ ÃÛ ÃÜ ÃÝ ÃÞ Ãß Ãà Ãá Ãâ Ãã Ãä Ãå Ãæ Ãç Ãè Ãé Ãê Ãë Ãì Ãí Ãî Ãï Ãð Ãñ Ãò Ãó Ãô Ãõ Ãö Ã÷ Ãø Ãù Ãú Ãû Ãü Ãý Ãþ Ä¡ Ä¢ Ä£ Ĥ Ä¥ Ħ ħ Ĩ Ä© Ī Ä« Ĭ Ä­ Ä® į İ ı IJ ij Ä´ ĵ Ķ Ä· ĸ Ĺ ĺ Ä» ļ Ľ ľ Ä¿ ÄÀ ÄÁ Ä Äà ÄÄ ÄÅ ÄÆ ÄÇ ÄÈ ÄÉ ÄÊ ÄË ÄÌ ÄÍ ÄÎ ÄÏ ÄÐ ÄÑ ÄÒ ÄÓ ÄÔ ÄÕ ÄÖ Ä× ÄØ ÄÙ ÄÚ ÄÛ ÄÜ ÄÝ ÄÞ Äß Äà Äá Äâ Äã Ää Äå Äæ Äç Äè Äé Äê Äë Äì Äí Äî Äï Äð Äñ Äò Äó Äô Äõ Äö Ä÷ Äø Äù Äú Äû Äü Äý Äþ Å¡ Å¢ Å£ Ť Å¥ Ŧ ŧ Ũ Å© Ū Å« Ŭ Å­ Å® ů Ű ű Ų ų Å´ ŵ Ŷ Å· Ÿ Ź ź Å» ż Ž ž Å¿ ÅÀ ÅÁ Å Åà ÅÄ ÅÅ ÅÆ ÅÇ ÅÈ ÅÉ ÅÊ ÅË ÅÌ ÅÍ ÅÎ ÅÏ ÅÐ ÅÑ ÅÒ ÅÓ ÅÔ ÅÕ ÅÖ Å× ÅØ ÅÙ ÅÚ ÅÛ ÅÜ ÅÝ ÅÞ Åß Åà Åá Åâ Åã Åä Åå Åæ Åç Åè Åé Åê Åë Åì Åí Åî Åï Åð Åñ Åò Åó Åô Åõ Åö Å÷ Åø Åù Åú Åû Åü Åý Åþ Æ¡ Æ¢ Æ£ Ƥ Æ¥ Ʀ Ƨ ƨ Æ© ƪ Æ« Ƭ Æ­ Æ® Ư ư Ʊ Ʋ Ƴ Æ´ Ƶ ƶ Æ· Ƹ ƹ ƺ Æ» Ƽ ƽ ƾ Æ¿ ÆÀ ÆÁ ÆÂ ÆÃ ÆÄ ÆÅ ÆÆ ÆÇ ÆÈ ÆÉ ÆÊ ÆË ÆÌ ÆÍ ÆÎ ÆÏ ÆÐ ÆÑ ÆÒ ÆÓ ÆÔ ÆÕ ÆÖ Æ× ÆØ ÆÙ ÆÚ ÆÛ ÆÜ ÆÝ ÆÞ Æß Æà Æá Æâ Æã Æä Æå Ææ Æç Æè Æé Æê Æë Æì Æí Æî Æï Æð Æñ Æò Æó Æô Æõ Æö Æ÷ Æø Æù Æú Æû Æü Æý Æþ Ç¡ Ç¢ Ç£ Ǥ Ç¥ Ǧ ǧ Ǩ Ç© Ǫ Ç« Ǭ Ç­ Ç® ǯ ǰ DZ Dz dz Ç´ ǵ Ƕ Ç· Ǹ ǹ Ǻ Ç» Ǽ ǽ Ǿ Ç¿ ÇÀ ÇÁ Ç Çà ÇÄ ÇÅ ÇÆ ÇÇ ÇÈ ÇÉ ÇÊ ÇË ÇÌ ÇÍ ÇÎ ÇÏ ÇÐ ÇÑ ÇÒ ÇÓ ÇÔ ÇÕ ÇÖ Ç× ÇØ ÇÙ ÇÚ ÇÛ ÇÜ ÇÝ ÇÞ Çß Çà Çá Çâ Çã Çä Çå Çæ Çç Çè Çé Çê Çë Çì Çí Çî Çï Çð Çñ Çò Çó Çô Çõ Çö Ç÷ Çø Çù Çú Çû Çü Çý Çþ È¡ È¢ È£ Ȥ È¥ Ȧ ȧ Ȩ È© Ȫ È« Ȭ È­ È® ȯ Ȱ ȱ Ȳ ȳ È´ ȵ ȶ È· ȸ ȹ Ⱥ È» ȼ Ƚ Ⱦ È¿ ÈÀ ÈÁ È Èà ÈÄ ÈÅ ÈÆ ÈÇ ÈÈ ÈÉ ÈÊ ÈË ÈÌ ÈÍ ÈÎ ÈÏ ÈÐ ÈÑ ÈÒ ÈÓ ÈÔ ÈÕ ÈÖ È× ÈØ ÈÙ ÈÚ ÈÛ ÈÜ ÈÝ ÈÞ Èß Èà Èá Èâ Èã Èä Èå Èæ Èç Èè Èé Èê Èë Èì Èí Èî Èï Èð Èñ Èò Èó Èô Èõ Èö È÷ Èø Èù Èú Èû Èü Èý Èþ É¡ É¢ É£ ɤ É¥ ɦ ɧ ɨ É© ɪ É« ɬ É­ É® ɯ ɰ ɱ ɲ ɳ É´ ɵ ɶ É· ɸ ɹ ɺ É» ɼ ɽ ɾ É¿ ÉÀ ÉÁ É Éà ÉÄ ÉÅ ÉÆ ÉÇ ÉÈ ÉÉ ÉÊ ÉË ÉÌ ÉÍ ÉÎ ÉÏ ÉÐ ÉÑ ÉÒ ÉÓ ÉÔ ÉÕ ÉÖ É× ÉØ ÉÙ ÉÚ ÉÛ ÉÜ ÉÝ ÉÞ Éß Éà Éá Éâ Éã Éä Éå Éæ Éç Éè Éé Éê Éë Éì Éí Éî Éï Éð Éñ Éò Éó Éô Éõ Éö É÷ Éø Éù Éú Éû Éü Éý Éþ Ê¡ Ê¢ Ê£ ʤ Ê¥ ʦ ʧ ʨ Ê© ʪ Ê« ʬ Ê­ Ê® ʯ ʰ ʱ ʲ ʳ Ê´ ʵ ʶ Ê· ʸ ʹ ʺ Ê» ʼ ʽ ʾ Ê¿ ÊÀ ÊÁ Ê Êà ÊÄ ÊÅ ÊÆ ÊÇ ÊÈ ÊÉ ÊÊ ÊË ÊÌ ÊÍ ÊÎ ÊÏ ÊÐ ÊÑ ÊÒ ÊÓ ÊÔ ÊÕ ÊÖ Ê× ÊØ ÊÙ ÊÚ ÊÛ ÊÜ ÊÝ ÊÞ Êß Êà Êá Êâ Êã Êä Êå Êæ Êç Êè Êé Êê Êë Êì Êí Êî Êï Êð Êñ Êò Êó Êô Êõ Êö Ê÷ Êø Êù Êú Êû Êü Êý Êþ Ë¡ Ë¢ Ë£ ˤ Ë¥ ˦ ˧ ˨ Ë© ˪ Ë« ˬ Ë­ Ë® ˯ ˰ ˱ ˲ ˳ Ë´ ˵ ˶ Ë· ˸ ˹ ˺ Ë» ˼ ˽ ˾ Ë¿ ËÀ ËÁ Ë Ëà ËÄ ËÅ ËÆ ËÇ ËÈ ËÉ ËÊ ËË ËÌ ËÍ ËÎ ËÏ ËÐ ËÑ ËÒ ËÓ ËÔ ËÕ ËÖ Ë× ËØ ËÙ ËÚ ËÛ ËÜ ËÝ ËÞ Ëß Ëà Ëá Ëâ Ëã Ëä Ëå Ëæ Ëç Ëè Ëé Ëê Ëë Ëì Ëí Ëî Ëï Ëð Ëñ Ëò Ëó Ëô Ëõ Ëö Ë÷ Ëø Ëù Ëú Ëû Ëü Ëý Ëþ Ì¡ Ì¢ Ì£ ̤ Ì¥ ̦ ̧ ̨ Ì© ̪ Ì« ̬ Ì­ Ì® ̯ ̰ ̱ ̲ ̳ Ì´ ̵ ̶ Ì· ̸ ̹ ̺ Ì» ̼ ̽ ̾ Ì¿ ÌÀ ÌÁ Ì Ìà ÌÄ ÌÅ ÌÆ ÌÇ ÌÈ ÌÉ ÌÊ ÌË ÌÌ ÌÍ ÌÎ ÌÏ ÌÐ ÌÑ ÌÒ ÌÓ ÌÔ ÌÕ ÌÖ Ì× ÌØ ÌÙ ÌÚ ÌÛ ÌÜ ÌÝ ÌÞ Ìß Ìà Ìá Ìâ Ìã Ìä Ìå Ìæ Ìç Ìè Ìé Ìê Ìë Ìì Ìí Ìî Ìï Ìð Ìñ Ìò Ìó Ìô Ìõ Ìö Ì÷ Ìø Ìù Ìú Ìû Ìü Ìý Ìþ Í¡ Í¢ Í£ ͤ Í¥ ͦ ͧ ͨ Í© ͪ Í« ͬ Í­ Í® ͯ Ͱ ͱ Ͳ ͳ Í´ ͵ Ͷ Í· ͸ ͹ ͺ Í» ͼ ͽ ; Í¿ ÍÀ ÍÁ Í Íà ÍÄ ÍÅ ÍÆ ÍÇ ÍÈ ÍÉ ÍÊ ÍË ÍÌ ÍÍ ÍÎ ÍÏ ÍÐ ÍÑ ÍÒ ÍÓ ÍÔ ÍÕ ÍÖ Í× ÍØ ÍÙ ÍÚ ÍÛ ÍÜ ÍÝ ÍÞ Íß Íà Íá Íâ Íã Íä Íå Íæ Íç Íè Íé Íê Íë Íì Íí Íî Íï Íð Íñ Íò Íó Íô Íõ Íö Í÷ Íø Íù Íú Íû Íü Íý Íþ Ρ ΢ Σ Τ Î¥ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο ÎÀ ÎÁ ΠÎà ÎÄ ÎÅ ÎÆ ÎÇ ÎÈ ÎÉ ÎÊ ÎË ÎÌ ÎÍ ÎÎ ÎÏ ÎÐ ÎÑ ÎÒ ÎÓ ÎÔ ÎÕ ÎÖ Î× ÎØ ÎÙ ÎÚ ÎÛ ÎÜ ÎÝ ÎÞ Îß Îà Îá Îâ Îã Îä Îå Îæ Îç Îè Îé Îê Îë Îì Îí Îî Îï Îð Îñ Îò Îó Îô Îõ Îö Î÷ Îø Îù Îú Îû Îü Îý Îþ Ï¡ Ï¢ Ï£ Ϥ Ï¥ Ϧ ϧ Ϩ Ï© Ϫ Ï« Ϭ Ï­ Ï® ϯ ϰ ϱ ϲ ϳ Ï´ ϵ ϶ Ï· ϸ Ϲ Ϻ Ï» ϼ Ͻ Ͼ Ï¿ ÏÀ ÏÁ Ï Ïà ÏÄ ÏÅ ÏÆ ÏÇ ÏÈ ÏÉ ÏÊ ÏË ÏÌ ÏÍ ÏÎ ÏÏ ÏÐ ÏÑ ÏÒ ÏÓ ÏÔ ÏÕ ÏÖ Ï× ÏØ ÏÙ ÏÚ ÏÛ ÏÜ ÏÝ ÏÞ Ïß Ïà Ïá Ïâ Ïã Ïä Ïå Ïæ Ïç Ïè Ïé Ïê Ïë Ïì Ïí Ïî Ïï Ïð Ïñ Ïò Ïó Ïô Ïõ Ïö Ï÷ Ïø Ïù Ïú Ïû Ïü Ïý Ïþ С Т У Ф Ð¥ Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ж з и й к л м н о п ÐÀ ÐÁ РÐà ÐÄ ÐÅ ÐÆ ÐÇ ÐÈ ÐÉ ÐÊ ÐË ÐÌ ÐÍ ÐÎ ÐÏ ÐÐ ÐÑ ÐÒ ÐÓ ÐÔ ÐÕ ÐÖ Ð× ÐØ ÐÙ ÐÚ ÐÛ ÐÜ ÐÝ ÐÞ Ðß Ðà Ðá Ðâ Ðã Ðä Ðå Ðæ Ðç Ðè Ðé Ðê Ðë Ðì Ðí Ðî Ðï Ðð Ðñ Ðò Ðó Ðô Ðõ Ðö Ð÷ Ðø Ðù Ðú Ðû Ðü Ðý Ðþ Ñ¡ Ñ¢ Ñ£ Ѥ Ñ¥ Ѧ ѧ Ѩ Ñ© Ѫ Ñ« Ѭ Ñ­ Ñ® ѯ Ѱ ѱ Ѳ ѳ Ñ´ ѵ Ѷ Ñ· Ѹ ѹ Ѻ Ñ» Ѽ ѽ Ѿ Ñ¿ ÑÀ ÑÁ Ñ Ñà ÑÄ ÑÅ ÑÆ ÑÇ ÑÈ ÑÉ ÑÊ ÑË ÑÌ ÑÍ ÑÎ ÑÏ ÑÐ ÑÑ ÑÒ ÑÓ ÑÔ ÑÕ ÑÖ Ñ× ÑØ ÑÙ ÑÚ ÑÛ ÑÜ ÑÝ ÑÞ Ñß Ñà Ñá Ñâ Ñã Ñä Ñå Ñæ Ñç Ñè Ñé Ñê Ñë Ñì Ñí Ñî Ñï Ñð Ññ Ñò Ñó Ñô Ñõ Ñö Ñ÷ Ñø Ñù Ñú Ñû Ñü Ñý Ñþ Ò¡ Ò¢ Ò£ Ò¤ Ò¥ Ò¦ Ò§ Ò¨ Ò© Òª Ò« Ò¬ Ò­ Ò® Ò¯ Ò° Ò± Ò² Ò³ Ò´ Òµ Ò¶ Ò· Ò¸ Ò¹ Òº Ò» Ò¼ Ò½ Ò¾ Ò¿ ÒÀ ÒÁ Ò Òà ÒÄ ÒÅ ÒÆ ÒÇ ÒÈ ÒÉ ÒÊ ÒË ÒÌ ÒÍ ÒÎ ÒÏ ÒÐ ÒÑ ÒÒ ÒÓ ÒÔ ÒÕ ÒÖ Ò× ÒØ ÒÙ ÒÚ ÒÛ ÒÜ ÒÝ ÒÞ Òß Òà Òá Òâ Òã Òä Òå Òæ Òç Òè Òé Òê Òë Òì Òí Òî Òï Òð Òñ Òò Òó Òô Òõ Òö Ò÷ Òø Òù Òú Òû Òü Òý Òþ Ó¡ Ó¢ Ó£ Ó¤ Ó¥ Ó¦ Ó§ Ó¨ Ó© Óª Ó« Ó¬ Ó­ Ó® Ó¯ Ó° Ó± Ó² Ó³ Ó´ Óµ Ó¶ Ó· Ó¸ Ó¹ Óº Ó» Ó¼ Ó½ Ó¾ Ó¿ ÓÀ ÓÁ Ó Óà ÓÄ ÓÅ ÓÆ ÓÇ ÓÈ ÓÉ ÓÊ ÓË ÓÌ ÓÍ ÓÎ ÓÏ ÓÐ ÓÑ ÓÒ ÓÓ ÓÔ ÓÕ ÓÖ Ó× ÓØ ÓÙ ÓÚ ÓÛ ÓÜ ÓÝ ÓÞ Óß Óà Óá Óâ Óã Óä Óå Óæ Óç Óè Óé Óê Óë Óì Óí Óî Óï Óð Óñ Óò Óó Óô Óõ Óö Ó÷ Óø Óù Óú Óû Óü Óý Óþ Ô¡ Ô¢ Ô£ Ô¤ Ô¥ Ô¦ Ô§ Ô¨ Ô© Ôª Ô« Ô¬ Ô­ Ô® Ô¯ Ô° Ô± Ô² Ô³ Ô´ Ôµ Ô¶ Ô· Ô¸ Ô¹ Ôº Ô» Ô¼ Ô½ Ô¾ Ô¿ ÔÀ ÔÁ Ô Ôà ÔÄ ÔÅ ÔÆ ÔÇ ÔÈ ÔÉ ÔÊ ÔË ÔÌ ÔÍ ÔÎ ÔÏ ÔÐ ÔÑ ÔÒ ÔÓ ÔÔ ÔÕ ÔÖ Ô× ÔØ ÔÙ ÔÚ ÔÛ ÔÜ ÔÝ ÔÞ Ôß Ôà Ôá Ôâ Ôã Ôä Ôå Ôæ Ôç Ôè Ôé Ôê Ôë Ôì Ôí Ôî Ôï Ôð Ôñ Ôò Ôó Ôô Ôõ Ôö Ô÷ Ôø Ôù Ôú Ôû Ôü Ôý Ôþ Õ¡ Õ¢ Õ£ Õ¤ Õ¥ Õ¦ Õ§ Õ¨ Õ© Õª Õ« Õ¬ Õ­ Õ® Õ¯ Õ° Õ± Õ² Õ³ Õ´ Õµ Õ¶ Õ· Õ¸ Õ¹ Õº Õ» Õ¼ Õ½ Õ¾ Õ¿ ÕÀ ÕÁ Õ Õà ÕÄ ÕÅ ÕÆ ÕÇ ÕÈ ÕÉ ÕÊ ÕË ÕÌ ÕÍ ÕÎ ÕÏ ÕÐ ÕÑ ÕÒ ÕÓ ÕÔ ÕÕ ÕÖ Õ× ÕØ ÕÙ ÕÚ ÕÛ ÕÜ ÕÝ ÕÞ Õß Õà Õá Õâ Õã Õä Õå Õæ Õç Õè Õé Õê Õë Õì Õí Õî Õï Õð Õñ Õò Õó Õô Õõ Õö Õ÷ Õø Õù Õú Õû Õü Õý Õþ Ö¡ Ö¢ Ö£ Ö¤ Ö¥ Ö¦ Ö§ Ö¨ Ö© Öª Ö« Ö¬ Ö­ Ö® Ö¯ Ö° Ö± Ö² Ö³ Ö´ Öµ Ö¶ Ö· Ö¸ Ö¹ Öº Ö» Ö¼ Ö½ Ö¾ Ö¿ ÖÀ ÖÁ Ö Öà ÖÄ ÖÅ ÖÆ ÖÇ ÖÈ ÖÉ ÖÊ ÖË ÖÌ ÖÍ ÖÎ ÖÏ ÖÐ ÖÑ ÖÒ ÖÓ ÖÔ ÖÕ ÖÖ Ö× ÖØ ÖÙ ÖÚ ÖÛ ÖÜ ÖÝ ÖÞ Öß Öà Öá Öâ Öã Öä Öå Öæ Öç Öè Öé Öê Öë Öì Öí Öî Öï Öð Öñ Öò Öó Öô Öõ Öö Ö÷ Öø Öù Öú Öû Öü Öý Öþ ס ×¢ ×£ פ ×¥ צ ×§ ר ש ת ׫ ׬ ×­ ×® ׯ ×° ×± ײ ׳ ×´ ×µ ×¶ ×· ׸ ×¹ ׺ ×» ×¼ ×½ ×¾ ׿ ×À ×Á × ×à ×Ä ×Šׯ ×Ç ×È ×É ×Ê ×Ë ×Ì ×Í ×Î ×Ï ×Ð ×Ñ ×Ò ×Ó ×Ô ×Õ ×Ö ×× ×Ø ×Ù ×Ú ×Û ×Ü ×Ý ×Þ ×ß ×à ×á ×â ×ã ×ä ×å ׿ ×ç ×è ×é ×ê ×ë ×ì ×í ×î ×ï ×ð ×ñ ×ò ×ó ×ô ×õ ×ö ×÷ ×ø ×ù ×ú ×û ×ü ×ý ×þ Ø¡ Ø¢ Ø£ ؤ Ø¥ ئ ا ب Ø© ت Ø« ج Ø­ Ø® د ذ ر ز س Ø´ ص ض Ø· ظ ع غ Ø» ؼ ؽ ؾ Ø¿ ØÀ ØÁ ØÂ ØÃ ØÄ ØÅ ØÆ ØÇ ØÈ ØÉ ØÊ ØË ØÌ ØÍ ØÎ ØÏ ØÐ ØÑ ØÒ ØÓ ØÔ ØÕ ØÖ Ø× ØØ ØÙ ØÚ ØÛ ØÜ ØÝ ØÞ Øß Øà Øá Øâ Øã Øä Øå Øæ Øç Øè Øé Øê Øë Øì Øí Øî Øï Øð Øñ Øò Øó Øô Øõ Øö Ø÷ Øø Øù Øú Øû Øü Øý Øþ Ù¡ Ù¢ Ù£ Ù¤ Ù¥ Ù¦ Ù§ Ù¨ Ù© Ùª Ù« Ù¬ Ù­ Ù® Ù¯ Ù° Ù± Ù² Ù³ Ù´ Ùµ Ù¶ Ù· Ù¸ Ù¹ Ùº Ù» Ù¼ Ù½ Ù¾ Ù¿ ÙÀ ÙÁ Ù Ùà ÙÄ ÙÅ ÙÆ ÙÇ ÙÈ ÙÉ ÙÊ ÙË ÙÌ ÙÍ ÙÎ ÙÏ ÙÐ ÙÑ ÙÒ ÙÓ ÙÔ ÙÕ ÙÖ Ù× ÙØ ÙÙ ÙÚ ÙÛ ÙÜ ÙÝ ÙÞ Ùß Ùà Ùá Ùâ Ùã Ùä Ùå Ùæ Ùç Ùè Ùé Ùê Ùë Ùì Ùí Ùî Ùï Ùð Ùñ Ùò Ùó Ùô Ùõ Ùö Ù÷ Ùø Ùù Ùú Ùû Ùü Ùý Ùþ Ú¡ Ú¢ Ú£ Ú¤ Ú¥ Ú¦ Ú§ Ú¨ Ú© Úª Ú« Ú¬ Ú­ Ú® Ú¯ Ú° Ú± Ú² Ú³ Ú´ Úµ Ú¶ Ú· Ú¸ Ú¹ Úº Ú» Ú¼ Ú½ Ú¾ Ú¿ ÚÀ ÚÁ Ú Úà ÚÄ ÚÅ ÚÆ ÚÇ ÚÈ ÚÉ ÚÊ ÚË ÚÌ ÚÍ ÚÎ ÚÏ ÚÐ ÚÑ ÚÒ ÚÓ ÚÔ ÚÕ ÚÖ Ú× ÚØ ÚÙ ÚÚ ÚÛ ÚÜ ÚÝ ÚÞ Úß Úà Úá Úâ Úã Úä Úå Úæ Úç Úè Úé Úê Úë Úì Úí Úî Úï Úð Úñ Úò Úó Úô Úõ Úö Ú÷ Úø Úù Úú Úû Úü Úý Úþ Û¡ Û¢ Û£ Û¤ Û¥ Û¦ Û§ Û¨ Û© Ûª Û« Û¬ Û­ Û® Û¯ Û° Û± Û² Û³ Û´ Ûµ Û¶ Û· Û¸ Û¹ Ûº Û» Û¼ Û½ Û¾ Û¿ ÛÀ ÛÁ Û Ûà ÛÄ ÛÅ ÛÆ ÛÇ ÛÈ ÛÉ ÛÊ ÛË ÛÌ ÛÍ ÛÎ ÛÏ ÛÐ ÛÑ ÛÒ ÛÓ ÛÔ ÛÕ ÛÖ Û× ÛØ ÛÙ ÛÚ ÛÛ ÛÜ ÛÝ ÛÞ Ûß Ûà Ûá Ûâ Ûã Ûä Ûå Ûæ Ûç Ûè Ûé Ûê Ûë Ûì Ûí Ûî Ûï Ûð Ûñ Ûò Ûó Ûô Ûõ Ûö Û÷ Ûø Ûù Ûú Ûû Ûü Ûý Ûþ Ü¡ Ü¢ Ü£ ܤ Ü¥ ܦ ܧ ܨ Ü© ܪ Ü« ܬ Ü­ Ü® ܯ ܰ ܱ ܲ ܳ Ü´ ܵ ܶ Ü· ܸ ܹ ܺ Ü» ܼ ܽ ܾ Ü¿ ÜÀ ÜÁ Ü Üà ÜÄ ÜÅ ÜÆ ÜÇ ÜÈ ÜÉ ÜÊ ÜË ÜÌ ÜÍ ÜÎ ÜÏ ÜÐ ÜÑ ÜÒ ÜÓ ÜÔ ÜÕ ÜÖ Ü× ÜØ ÜÙ ÜÚ ÜÛ ÜÜ ÜÝ ÜÞ Üß Üà Üá Üâ Üã Üä Üå Üæ Üç Üè Üé Üê Üë Üì Üí Üî Üï Üð Üñ Üò Üó Üô Üõ Üö Ü÷ Üø Üù Üú Üû Üü Üý Üþ Ý¡ Ý¢ Ý£ ݤ Ý¥ ݦ ݧ ݨ Ý© ݪ Ý« ݬ Ý­ Ý® ݯ ݰ ݱ ݲ ݳ Ý´ ݵ ݶ Ý· ݸ ݹ ݺ Ý» ݼ ݽ ݾ Ý¿ ÝÀ ÝÁ Ý Ýà ÝÄ ÝÅ ÝÆ ÝÇ ÝÈ ÝÉ ÝÊ ÝË ÝÌ ÝÍ ÝÎ ÝÏ ÝÐ ÝÑ ÝÒ ÝÓ ÝÔ ÝÕ ÝÖ Ý× ÝØ ÝÙ ÝÚ ÝÛ ÝÜ ÝÝ ÝÞ Ýß Ýà Ýá Ýâ Ýã Ýä Ýå Ýæ Ýç Ýè Ýé Ýê Ýë Ýì Ýí Ýî Ýï Ýð Ýñ Ýò Ýó Ýô Ýõ Ýö Ý÷ Ýø Ýù Ýú Ýû Ýü Ýý Ýþ Þ¡ Þ¢ Þ£ Þ¤ Þ¥ Þ¦ Þ§ Þ¨ Þ© Þª Þ« Þ¬ Þ­ Þ® Þ¯ Þ° Þ± Þ² Þ³ Þ´ Þµ Þ¶ Þ· Þ¸ Þ¹ Þº Þ» Þ¼ Þ½ Þ¾ Þ¿ ÞÀ ÞÁ Þ Þà ÞÄ ÞÅ ÞÆ ÞÇ ÞÈ ÞÉ ÞÊ ÞË ÞÌ ÞÍ ÞÎ ÞÏ ÞÐ ÞÑ ÞÒ ÞÓ ÞÔ ÞÕ ÞÖ Þ× ÞØ ÞÙ ÞÚ ÞÛ ÞÜ ÞÝ ÞÞ Þß Þà Þá Þâ Þã Þä Þå Þæ Þç Þè Þé Þê Þë Þì Þí Þî Þï Þð Þñ Þò Þó Þô Þõ Þö Þ÷ Þø Þù Þú Þû Þü Þý Þþ ß¡ ߢ ߣ ߤ ߥ ߦ ß§ ߨ ß© ߪ ß« ߬ ß­ ß® ߯ ß° ß± ß² ß³ ß´ ßµ ß¶ ß· ߸ ß¹ ߺ ß» ß¼ ß½ ß¾ ß¿ ßÀ ßÁ ß ßà ßÄ ßŠ߯ ßÇ ßÈ ßÉ ßÊ ßË ßÌ ßÍ ßÎ ßÏ ßÐ ßÑ ßÒ ßÓ ßÔ ßÕ ßÖ ß× ßØ ßÙ ßÚ ßÛ ßÜ ßÝ ßÞ ßß ßà ßá ßâ ßã ßä ßå ßæ ßç ßè ßé ßê ßë ßì ßí ßî ßï ßð ßñ ßò ßó ßô ßõ ßö ß÷ ßø ßù ßú ßû ßü ßý ßþ ࡠࢠ࣠ठॠঠৠਠ੠ઠૠଠୠ஠௠ఠౠಠೠഠൠච෠ภ๠ຠ໠༠འྠ࿠àÀ àÁ à àà àÄ àÅ àÆ àÇ àÈ àÉ àÊ àË àÌ àÍ àÎ àÏ àÐ àÑ àÒ àÓ àÔ àÕ àÖ à× àØ àÙ àÚ àÛ àÜ àÝ àÞ àß àà àá àâ àã àä àå àæ àç àè àé àê àë àì àí àî àï àð àñ àò àó àô àõ àö à÷ àø àù àú àû àü àý àþ ᡠᢠᣠᤠᥠᦠ᧠ᨠ᩠᪠᫠ᬠ᭠ᮠᯠᰠᱠᲠ᳠ᴠᵠᶠᷠḠṠẠỠἠὠᾠῠáÀ áÁ á áà áÄ áÅ áÆ áÇ áÈ áÉ áÊ áË áÌ áÍ áÎ áÏ áÐ áÑ áÒ áÓ áÔ áÕ áÖ á× áØ áÙ áÚ áÛ áÜ áÝ áÞ áß áà áá áâ áã áä áå áæ áç áè áé áê áë áì áí áî áï áð áñ áò áó áô áõ áö á÷ áø áù áú áû áü áý áþ ⡠⢠⣠⤠⥠⦠⧠⨠⩠⪠⫠⬠⭠⮠⯠ⰠⱠⲠⳠⴠⵠⶠⷠ⸠⹠⺠⻠⼠⽠⾠⿠âÀ âÁ â âà âÄ âÅ âÆ âÇ âÈ âÉ âÊ âË âÌ âÍ âÎ âÏ âÐ âÑ âÒ âÓ âÔ âÕ âÖ â× âØ âÙ âÚ âÛ âÜ âÝ âÞ âß âà âá ââ âã âä âå âæ âç âè âé âê âë âì âí âî âï âð âñ âò âó âô âõ âö â÷ âø âù âú âû âü âý âþ 㡠㢠㣠㤠㥠㦠㧠㨠㩠㪠㫠㬠㭠㮠㯠㰠㱠㲠㳠㴠㵠㶠㷠㸠㹠㺠㻠㼠㽠㾠㿠ãÀ ãÁ ã ãà ãÄ ãÅ ãÆ ãÇ ãÈ ãÉ ãÊ ãË ãÌ ãÍ ãÎ ãÏ ãÐ ãÑ ãÒ ãÓ ãÔ ãÕ ãÖ ã× ãØ ãÙ ãÚ ãÛ ãÜ ãÝ ãÞ ãß ãà ãá ãâ ãã ãä ãå ãæ ãç ãè ãé ãê ãë ãì ãí ãî ãï ãð ãñ ãò ãó ãô ãõ ãö ã÷ ãø ãù ãú ãû ãü ãý ãþ ä¡ ä¢ ä£ ä¤ ä¥ ä¦ ä§ ä¨ ä© äª ä« ä¬ ä­ ä® ä¯ ä° ä± ä² ä³ ä´ äµ ä¶ ä· ä¸ ä¹ äº ä» ä¼ ä½ ä¾ ä¿ äÀ äÁ ä äà äÄ äÅ äÆ äÇ äÈ äÉ äÊ äË äÌ äÍ äÎ äÏ äÐ äÑ äÒ äÓ äÔ äÕ äÖ ä× äØ äÙ äÚ äÛ äÜ äÝ äÞ äß äà äá äâ äã ää äå äæ äç äè äé äê äë äì äí äî äï äð äñ äò äó äô äõ äö ä÷ äø äù äú äû äü äý äþ å¡ å¢ å£ å¤ å¥ å¦ å§ å¨ å© åª å« å¬ å­ å® å¯ å° å± å² å³ å´ åµ å¶ å· å¸ å¹ åº å» å¼ å½ å¾ å¿ åÀ åÁ å åà åÄ åÅ åÆ åÇ åÈ åÉ åÊ åË åÌ åÍ åÎ åÏ åÐ åÑ åÒ åÓ åÔ åÕ åÖ å× åØ åÙ åÚ åÛ åÜ åÝ åÞ åß åà åá åâ åã åä åå åæ åç åè åé åê åë åì åí åî åï åð åñ åò åó åô åõ åö å÷ åø åù åú åû åü åý åþ æ¡ æ¢ æ£ æ¤ æ¥ æ¦ æ§ æ¨ æ© æª æ« æ¬ æ­ æ® æ¯ æ° æ± æ² æ³ æ´ æµ æ¶ æ· æ¸ æ¹ æº æ» æ¼ æ½ æ¾ æ¿ æÀ æÁ æÂ æÃ æÄ æÅ æÆ æÇ æÈ æÉ æÊ æË æÌ æÍ æÎ æÏ æÐ æÑ æÒ æÓ æÔ æÕ æÖ æ× æØ æÙ æÚ æÛ æÜ æÝ æÞ æß æà æá æâ æã æä æå ææ æç æè æé æê æë æì æí æî æï æð æñ æò æó æô æõ æö æ÷ æø æù æú æû æü æý æþ ç¡ ç¢ ç£ ç¤ ç¥ ç¦ ç§ ç¨ ç© çª ç« ç¬ ç­ ç® ç¯ ç° ç± ç² ç³ ç´ çµ ç¶ ç· ç¸ ç¹ çº ç» ç¼ ç½ ç¾ ç¿ çÀ çÁ ç çà çÄ çÅ çÆ çÇ çÈ çÉ çÊ çË çÌ çÍ çÎ çÏ çÐ çÑ çÒ çÓ çÔ çÕ çÖ ç× çØ çÙ çÚ çÛ çÜ çÝ çÞ çß çà çá çâ çã çä çå çæ çç çè çé çê çë çì çí çî çï çð çñ çò çó çô çõ çö ç÷ çø çù çú çû çü çý çþ è¡ è¢ è£ è¤ è¥ è¦ è§ è¨ è© èª è« è¬ è­ è® è¯ è° è± è² è³ è´ èµ è¶ è· è¸ è¹ èº è» è¼ è½ è¾ è¿ èÀ èÁ è èà èÄ èÅ èÆ èÇ èÈ èÉ èÊ èË èÌ èÍ èÎ èÏ èÐ èÑ èÒ èÓ èÔ èÕ èÖ è× èØ èÙ èÚ èÛ èÜ èÝ èÞ èß èà èá èâ èã èä èå èæ èç èè èé èê èë èì èí èî èï èð èñ èò èó èô èõ èö è÷ èø èù èú èû èü èý èþ é¡ é¢ é£ é¤ é¥ é¦ é§ é¨ é© éª é« é¬ é­ é® é¯ é° é± é² é³ é´ éµ é¶ é· é¸ é¹ éº é» é¼ é½ é¾ é¿ éÀ éÁ é éà éÄ éÅ éÆ éÇ éÈ éÉ éÊ éË éÌ éÍ éÎ éÏ éÐ éÑ éÒ éÓ éÔ éÕ éÖ é× éØ éÙ éÚ éÛ éÜ éÝ éÞ éß éà éá éâ éã éä éå éæ éç éè éé éê éë éì éí éî éï éð éñ éò éó éô éõ éö é÷ éø éù éú éû éü éý éþ ê¡ ê¢ ê£ ê¤ ê¥ ê¦ ê§ ê¨ ê© êª ê« ê¬ ê­ ê® ê¯ ê° ê± ê² ê³ ê´ êµ ê¶ ê· ê¸ ê¹ êº ê» ê¼ ê½ ê¾ ê¿ êÀ êÁ ê êà êÄ êÅ êÆ êÇ êÈ êÉ êÊ êË êÌ êÍ êÎ êÏ êÐ êÑ êÒ êÓ êÔ êÕ êÖ ê× êØ êÙ êÚ êÛ êÜ êÝ êÞ êß êà êá êâ êã êä êå êæ êç êè êé êê êë êì êí êî êï êð êñ êò êó êô êõ êö ê÷ êø êù êú êû êü êý êþ ë¡ ë¢ ë£ ë¤ ë¥ ë¦ ë§ ë¨ ë© ëª ë« ë¬ ë­ ë® ë¯ ë° ë± ë² ë³ ë´ ëµ ë¶ ë· ë¸ ë¹ ëº ë» ë¼ ë½ ë¾ ë¿ ëÀ ëÁ ë ëà ëÄ ëÅ ëÆ ëÇ ëÈ ëÉ ëÊ ëË ëÌ ëÍ ëÎ ëÏ ëÐ ëÑ ëÒ ëÓ ëÔ ëÕ ëÖ ë× ëØ ëÙ ëÚ ëÛ ëÜ ëÝ ëÞ ëß ëà ëá ëâ ëã ëä ëå ëæ ëç ëè ëé ëê ëë ëì ëí ëî ëï ëð ëñ ëò ëó ëô ëõ ëö ë÷ ëø ëù ëú ëû ëü ëý ëþ ì¡ ì¢ ì£ ì¤ ì¥ ì¦ ì§ ì¨ ì© ìª ì« ì¬ ì­ ì® ì¯ ì° ì± ì² ì³ ì´ ìµ ì¶ ì· ì¸ ì¹ ìº ì» ì¼ ì½ ì¾ ì¿ ìÀ ìÁ ì ìà ìÄ ìÅ ìÆ ìÇ ìÈ ìÉ ìÊ ìË ìÌ ìÍ ìÎ ìÏ ìÐ ìÑ ìÒ ìÓ ìÔ ìÕ ìÖ ì× ìØ ìÙ ìÚ ìÛ ìÜ ìÝ ìÞ ìß ìà ìá ìâ ìã ìä ìå ìæ ìç ìè ìé ìê ìë ìì ìí ìî ìï ìð ìñ ìò ìó ìô ìõ ìö ì÷ ìø ìù ìú ìû ìü ìý ìþ í¡ í¢ í£ í¤ í¥ í¦ í§ í¨ í© íª í« í¬ í­ í® í¯ í° í± í² í³ í´ íµ í¶ í· í¸ í¹ íº í» í¼ í½ í¾ í¿ íÀ íÁ í íà íÄ íÅ íÆ íÇ íÈ íÉ íÊ íË íÌ íÍ íÎ íÏ íÐ íÑ íÒ íÓ íÔ íÕ íÖ í× íØ íÙ íÚ íÛ íÜ íÝ íÞ íß íà íá íâ íã \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars.html.headers new file mode 100644 index 00000000000..9a64388b411 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_chars.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_errors.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_errors.html new file mode 100755 index 00000000000..39f67b9c435 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_errors.html @@ -0,0 +1,8 @@ + + + + +EUC-JP characters + +° °µ° °°° ÿ °µÿ °µ‘ °1 °ÿ °  ¢¹ + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_errors.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_errors.html.headers new file mode 100644 index 00000000000..9a64388b411 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/eucjp_errors.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=euc-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/jis0208_index.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/jis0208_index.js new file mode 100644 index 00000000000..1c9a10fb4d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/jis0208_index.js @@ -0,0 +1,3 @@ +// index is ShiftJIS index pointer, value is Unicode codepoint (dec) +// this is copy-pasted from the json version of the index belonging to the Encoding spec +var jis0208 = [12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null] diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/jis0212_index.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/jis0212_index.js new file mode 100644 index 00000000000..cc720fe0c33 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/euc-jp/jis0212_index.js @@ -0,0 +1,3 @@ +// index is an index pointer, value is Unicode codepoint (dec) +// this is copy-pasted from the json version of the index belonging to the Encoding spec +var jis0212 = [null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null] diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html new file mode 100644 index 00000000000..73d8a2f2d0a --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-csiso2022jp.html @@ -0,0 +1,63 @@ + + + + +csiso2022jp decoding + + + + + + + + + + + + + + + +
+ + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-errors.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-errors.html new file mode 100644 index 00000000000..23ea8481258 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode-errors.html @@ -0,0 +1,107 @@ + + + + +ISO 2022-JP decoding errors + + + + + + + + + + + + + +
+ + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html new file mode 100644 index 00000000000..192e25e38b3 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decode.html @@ -0,0 +1,63 @@ + + + + +ISO 2022-JP decoding + + + + + + + + + + + + + + + +
+ + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decoder.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decoder.js new file mode 100644 index 00000000000..75ef5386b31 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-decoder.js @@ -0,0 +1,206 @@ +function dec2char(n) { + // converts a decimal number to a Unicode character + // n: the dec codepoint value to be converted + if (n <= 0xffff) { + out = String.fromCharCode(n); + } else if (n <= 0x10ffff) { + n -= 0x10000; + out = + String.fromCharCode(0xd800 | (n >> 10)) + + String.fromCharCode(0xdc00 | (n & 0x3ff)); + } else out = "dec2char error: Code point out of range: " + n; + return out; +} + +function getIndexPtr(cp, index) { + for (p = 0; p < index.length; p++) { + if (index[p] == cp) { + return p; + } + } + return null; +} + +function iso2022jpDecoder(stream) { + stream = stream.replace(/%/g, " "); + stream = stream.replace(/[\s]+/g, " ").trim(); + var bytes = stream.split(" "); + for (i = 0; i < bytes.length; i++) bytes[i] = parseInt(bytes[i], 16); + var endofstream = 2000000; + //bytes.push(endofstream) + var out = ""; + var decState = "ascii"; + var outState = "ascii"; + var isoLead = 0x00; + var outFlag = false; + var cp, ptr, lead; + + var finished = false; + while (!finished) { + if (bytes.length == 0) byte = endofstream; + else var byte = bytes.shift(); + //byte = bytes.shift() + + switch (decState) { + case "ascii": + if (byte == 0x1b) { + decState = "escStart"; + continue; + } else if ( + byte >= 0x00 && + byte <= 0x7f && + byte !== 0x0e && + byte !== 0x0f && + byte !== 0x1b + ) { + outFlag = false; + out += dec2char(byte); + continue; + } else if (byte == endofstream) { + finished = true; + continue; + } else { + outFlag = false; + out += "�"; + continue; + } + break; + case "roman": + if (byte == 0x1b) { + decState = "escStart"; + continue; + } else if (byte == 0x5c) { + outFlag = false; + out += dec2char(0xa5); + continue; + } else if (byte == 0x7e) { + outFlag = false; + out += dec2char(0x203e); + continue; + } else if ( + byte >= 0x00 && + byte <= 0x7f && + byte !== 0x0e && + byte !== 0x0f && + byte !== 0x1b && + byte !== 0x5c && + byte !== 0x7e + ) { + outFlag = false; + out += dec2char(byte); + continue; + } else if (byte == endofstream) { + finished = true; + continue; + } else { + outFlag = false; + out += "�"; + continue; + } + break; + case "katakana": + if (byte == 0x1b) { + decState = "escStart"; + continue; + } else if (byte >= 0x21 && byte <= 0x5f) { + outFlag = false; + out += dec2char(0xff61 + byte - 0x21); + continue; + } else if (byte == endofstream) { + finished = true; + continue; + } else { + outFlag = false; + out += "�"; + continue; + } + break; + case "leadbyte": + if (byte == 0x1b) { + decState = "escStart"; + continue; + } else if (byte >= 0x21 && byte <= 0x7e) { + outFlag = false; + isoLead = byte; + decState = "trailbyte"; + continue; + } else if (byte == endofstream) { + finished = true; + continue; + } else { + outFlag = false; + out += "�"; + continue; + } + break; + case "trailbyte": + if (byte == 0x1b) { + decState = "escStart"; + out += "�"; + continue; + } else if (byte >= 0x21 && byte <= 0x7e) { + decState = "leadbyte"; + ptr = (isoLead - 0x21) * 94 + byte - 0x21; + cp = jis0208[ptr]; + if (cp == null) { + out += "�"; + continue; + } + out += dec2char(cp); + continue; + } else if (byte == endofstream) { + decState = "leadbyte"; + bytes.unshift(byte); + out += "�"; + continue; + } else { + decState = "leadbyte"; + out += "�"; + continue; + } + break; + case "escStart": + if (byte == 0x24 || byte == 0x28) { + isoLead = byte; + decState = "escape"; + continue; + } else { + bytes.unshift(byte); + outFlag = false; + decState = outState; + out += "�"; + continue; + } + break; + case "escape": + lead = isoLead; + isoLead = 0x00; + var state = null; + if (lead == 0x28 && byte == 0x42) state = "ascii"; + if (lead == 0x28 && byte == 0x4a) state = "roman"; + if (lead == 0x28 && byte == 0x49) state = "katakana"; + if (lead == 0x24 && (byte == 0x40 || byte == 0x42)) + state = "leadbyte"; + if (state != null) { + decState = state; + outState = state; + var outputflag = false; + outputflag = outFlag; + outFlag = true; + if (outputflag == false) continue; + else { + out += "�"; + continue; + } + } + bytes.unshift(lead); + bytes.unshift(byte); + outFlag = false; + decState = outState; + out += "�"; + continue; + break; + } + } + return out; +} diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html new file mode 100644 index 00000000000..8089b83a42b --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html @@ -0,0 +1,237 @@ + + + + +csiso2022jp encoding (form) + + + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html.headers new file mode 100644 index 00000000000..547bbcb4505 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=csiso2022jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html new file mode 100644 index 00000000000..efb493bace4 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html @@ -0,0 +1,187 @@ + + + + +ISO 2022 JP encoding errors (form, han) + + + + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html.headers new file mode 100644 index 00000000000..51324ea2d35 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-2022-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html new file mode 100644 index 00000000000..ab61d60382b --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html @@ -0,0 +1,152 @@ + + + + +ISO 2022 JP encoding errors (form, hangul) + + + + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html.headers new file mode 100644 index 00000000000..51324ea2d35 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-2022-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html new file mode 100644 index 00000000000..6ffb6209670 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html @@ -0,0 +1,196 @@ + + + + +ISO 2022 JP encoding errors (form, misc) + + + + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html.headers new file mode 100644 index 00000000000..51324ea2d35 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-2022-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-stateful.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-stateful.html new file mode 100644 index 00000000000..c95b13d1d65 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-stateful.html @@ -0,0 +1,61 @@ + + +Encoding: ISO-2022-JP unencodable replacement in form submission + + + + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html new file mode 100644 index 00000000000..f196c31b38a --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html @@ -0,0 +1,146 @@ + + + + +ISO 2022 JP encoding (form) + + + + + + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html.headers new file mode 100644 index 00000000000..51324ea2d35 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-2022-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-ascii.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-ascii.html new file mode 100644 index 00000000000..d5a747b12e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-ascii.html @@ -0,0 +1,72 @@ + + + + +ISO 2022-JP encoding (href) + + + + + + + + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html new file mode 100644 index 00000000000..a13556357d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html @@ -0,0 +1,100 @@ + + + + +ISO 2022-JP encoding errors (href, han) + + + + + + + + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html.headers new file mode 100644 index 00000000000..51324ea2d35 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-han.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-2022-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html new file mode 100644 index 00000000000..78090e77690 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html @@ -0,0 +1,65 @@ + + + + +ISO 2022-JP encoding errors (href, hangul) + + + + + + + + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html.headers new file mode 100644 index 00000000000..51324ea2d35 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-hangul.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-2022-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html new file mode 100644 index 00000000000..2c0a2be556a --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html @@ -0,0 +1,109 @@ + + + + +ISO 2022-JP encoding errors (href, misc) + + + + + + + + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html.headers new file mode 100644 index 00000000000..51324ea2d35 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href-errors-misc.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-2022-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html new file mode 100644 index 00000000000..dcea8fcdec4 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html @@ -0,0 +1,63 @@ + + + + +ISO 2022-JP encoding (href) + + + + + + + + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html.headers new file mode 100644 index 00000000000..51324ea2d35 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-href.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-2022-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encoder.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encoder.js new file mode 100644 index 00000000000..9f07d0b6f40 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encoder.js @@ -0,0 +1,246 @@ +// set up a sparse array of all unicode codepoints listed in the index +// this will be used for lookup in iso2022jpEncoded +var jis0208CPs = []; // index is unicode cp, value is pointer +for (var p = 0; p < jis0208.length; p++) { + if (jis0208[p] != null && jis0208CPs[jis0208[p]] == null) { + jis0208CPs[jis0208[p]] = p; + } +} + +// set up mappings for half/full width katakana +// index is a katakana index pointer, value is Unicode codepoint (dec) +// this is copy-pasted from the json version of the index belonging to the Encoding spec +var iso2022jpkatakana = [ + 12290, + 12300, + 12301, + 12289, + 12539, + 12530, + 12449, + 12451, + 12453, + 12455, + 12457, + 12515, + 12517, + 12519, + 12483, + 12540, + 12450, + 12452, + 12454, + 12456, + 12458, + 12459, + 12461, + 12463, + 12465, + 12467, + 12469, + 12471, + 12473, + 12475, + 12477, + 12479, + 12481, + 12484, + 12486, + 12488, + 12490, + 12491, + 12492, + 12493, + 12494, + 12495, + 12498, + 12501, + 12504, + 12507, + 12510, + 12511, + 12512, + 12513, + 12514, + 12516, + 12518, + 12520, + 12521, + 12522, + 12523, + 12524, + 12525, + 12527, + 12531, + 12443, + 12444 +]; + +function chars2cps(chars) { + // this is needed because of javascript's handling of supplementary characters + // char: a string of unicode characters + // returns an array of decimal code point values + var haut = 0; + var out = []; + for (var i = 0; i < chars.length; i++) { + var b = chars.charCodeAt(i); + if (b < 0 || b > 0xffff) { + alert( + "Error in chars2cps: byte out of range " + b.toString(16) + "!" + ); + } + if (haut != 0) { + if (0xdc00 <= b && b <= 0xdfff) { + out.push(0x10000 + ((haut - 0xd800) << 10) + (b - 0xdc00)); + haut = 0; + continue; + } else { + alert( + "Error in chars2cps: surrogate out of range " + + haut.toString(16) + + "!" + ); + haut = 0; + } + } + if (0xd800 <= b && b <= 0xdbff) { + haut = b; + } else { + out.push(b); + } + } + return out; +} + +function iso2022jpEncoder(stream) { + var cps = chars2cps(stream); + var endofstream = 2000000; + var out = ""; + var encState = "ascii"; + var finished = false; + var cp, ptr; + + while (!finished) { + if (cps.length == 0) cp = endofstream; + else cp = cps.shift(); + if (cp == endofstream && encState != "ascii") { + cps.unshift(cp); + encState = "ascii"; + out += " 1B 28 42"; + continue; + } + if (cp == endofstream && encState == "ascii") { + finished = true; + continue; + } + if ( + (encState === "ascii" || encState === "roman") && + (cp === 0x0e || cp === 0x0f || cp === 0x1b) + ) { + //out += ' &#'+cp+';' + // continue + return null; + } + if (encState == "ascii" && cp >= 0x00 && cp <= 0x7f) { + out += " " + cp.toString(16).toUpperCase(); + continue; + } + if ( + encState == "roman" && + ((cp >= 0x00 && cp <= 0x7f && cp !== 0x5c && cp !== 0x7e) || + cp == 0xa5 || + cp == 0x203e) + ) { + if (cp >= 0x00 && cp <= 0x7f) { + // ASCII + out += " " + cp.toString(16).toUpperCase(); + continue; + } + if (cp == 0xa5) { + out += " 5C"; + continue; + } + if (cp == 0x203e) { + out += " 7E"; + continue; + } + } + if (encState != "ascii" && cp >= 0x00 && cp <= 0x7f) { + cps.unshift(cp); + encState = "ascii"; + out += " 1B 28 42"; + continue; + } + if ((cp == 0xa5 || cp == 0x203e) && encState != "roman") { + cps.unshift(cp); + encState = "roman"; + out += " 1B 28 4A"; + continue; + } + if (cp == 0x2212) cp = 0xff0d; + if (cp >= 0xff61 && cp <= 0xff9f) { + cp = iso2022jpkatakana[cp - 0xff61]; + } + ptr = jis0208CPs[cp]; + if (ptr == null) { + //out += ' &#'+cp+';' + //continue + return null; + } + if (encState != "jis0208") { + cps.unshift(cp); + encState = "jis0208"; + out += " 1B 24 42"; + continue; + } + var lead = Math.floor(ptr / 94) + 0x21; + var trail = ptr % 94 + 0x21; + out += + " " + + lead.toString(16).toUpperCase() + + " " + + trail.toString(16).toUpperCase(); + } + return out.trim(); +} + +function convertToHex(str) { + // converts a string of ASCII characters to hex byte codes + var out = ""; + var result; + for (var c = 0; c < str.length; c++) { + result = + str + .charCodeAt(c) + .toString(16) + .toUpperCase() + " "; + out += result; + } + return out; +} + +function normalizeStr(str) { + var out = ""; + for (var c = 0; c < str.length; c++) { + if ( + str.charAt(c) == "%" && + str.charAt(c + 1) != "%" && + str.charAt(c + 2) != "%" + ) { + out += String.fromCodePoint( + parseInt(str.charAt(c + 1) + str.charAt(c + 2), 16) + ); + c += 2; + } else out += str.charAt(c); + } + var result = ""; + for (var o = 0; o < out.length; o++) { + result += + "%" + + out + .charCodeAt(o) + .toString(16) + .toUpperCase(); + } + return result.replace(/%1B%28%42$/, ""); +} diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars-csiso2022jp.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars-csiso2022jp.html new file mode 100755 index 00000000000..84104cb4d60 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars-csiso2022jp.html @@ -0,0 +1,7330 @@ +csiso2022jp characters +(J\(B +$B!x(B +$B!/(B +$B!k(B +$B!^(B +$B!-(B +$B"y(B +$B!_(B +$B!`(B +$B&!(B +$B&"(B +$B&#(B +$B&$(B +$B&%(B +$B&&(B +$B&'(B +$B&((B +$B&)(B +$B&*(B +$B&+(B +$B&,(B +$B&-(B +$B&.(B +$B&/(B +$B&0(B +$B&1(B +$B&2(B +$B&3(B +$B&4(B +$B&5(B +$B&6(B +$B&7(B +$B&8(B +$B&A(B +$B&B(B +$B&C(B +$B&D(B +$B&E(B +$B&F(B +$B&G(B +$B&H(B +$B&I(B +$B&J(B +$B&K(B +$B&L(B +$B&M(B +$B&N(B +$B&O(B +$B&P(B +$B&Q(B +$B&R(B +$B&S(B +$B&T(B +$B&U(B +$B&V(B +$B&W(B +$B&X(B +$B''(B +$B'!(B +$B'"(B +$B'#(B +$B'$(B +$B'%(B +$B'&(B +$B'((B +$B')(B +$B'*(B +$B'+(B +$B',(B +$B'-(B +$B'.(B +$B'/(B +$B'0(B +$B'1(B +$B'2(B +$B'3(B +$B'4(B +$B'5(B +$B'6(B +$B'7(B +$B'8(B +$B'9(B +$B':(B +$B';(B +$B'<(B +$B'=(B +$B'>(B +$B'?(B +$B'@(B +$B'A(B +$B'Q(B +$B'R(B +$B'S(B +$B'T(B +$B'U(B +$B'V(B +$B'X(B +$B'Y(B +$B'Z(B +$B'[(B +$B'\(B +$B'](B +$B'^(B +$B'_(B +$B'`(B +$B'a(B +$B'b(B +$B'c(B +$B'd(B +$B'e(B +$B'f(B +$B'g(B +$B'h(B +$B'i(B +$B'j(B +$B'k(B +$B'l(B +$B'm(B +$B'n(B +$B'o(B +$B'p(B +$B'q(B +$B'W(B +$B!>(B +$B!=(B +$B!F(B +$B!G(B +$B!H(B +$B!I(B +$B"w(B +$B"x(B +$B!E(B +$B!D(B +$B"s(B +$B!l(B +$B!m(B +$B"((B +(J~(B +$B!n(B +$B-b(B +$B-d(B +$B"r(B +$B-5(B +$B-6(B +$B-7(B +$B-8(B +$B-9(B +$B-:(B +$B-;(B +$B-<(B +$B-=(B +$B->(B +$B|q(B +$B|r(B +$B|s(B +$B|t(B +$B|u(B +$B|v(B +$B|w(B +$B|x(B +$B|y(B +$B|z(B +$B"+(B +$B",(B +$B"*(B +$B"-(B +$B"M(B +$B"N(B +$B"O(B +$B"_(B +$B"P(B +$B"`(B +$B":(B +$B";(B +$B-t(B +$B!](B +$B"e(B +$B"g(B +$B!g(B +$B-x(B +$B"\(B +$B!B(B +$B"J(B +$B"K(B +$B"A(B +$B"@(B +$B"i(B +$B"j(B +$B-s(B +$B!h(B +$B"h(B +$B"f(B +$B"b(B +$B!b(B +$B"a(B +$B!e(B +$B!f(B +$B"c(B +$B"d(B +$B">(B +$B"?(B +$B"<(B +$B"=(B +$B"](B +$B-y(B +$B"^(B +$B-!(B +$B-"(B +$B-#(B +$B-$(B +$B-%(B +$B-&(B +$B-'(B +$B-((B +$B-)(B +$B-*(B +$B-+(B +$B-,(B +$B--(B +$B-.(B +$B-/(B +$B-0(B +$B-1(B +$B-2(B +$B-3(B +$B-4(B +$B(!(B +$B(,(B +$B("(B +$B(-(B +$B(#(B +$B(.(B +$B($(B +$B(/(B +$B(&(B +$B(1(B +$B(%(B +$B(0(B +$B('(B +$B(<(B +$B(7(B +$B(2(B +$B()(B +$B(>(B +$B(9(B +$B(4(B +$B(((B +$B(8(B +$B(=(B +$B(3(B +$B(*(B +$B(:(B +$B(?(B +$B(5(B +$B(+(B +$B(;(B +$B(@(B +$B(6(B +$B"#(B +$B""(B +$B"%(B +$B"$(B +$B"'(B +$B"&(B +$B"!(B +$B!~(B +$B!{(B +$B!}(B +$B!|(B +$B"~(B +$B!z(B +$B!y(B +$B!j(B +$B!i(B +$B"v(B +$B"u(B +$B"t(B +$B!!(B +$B!"(B +$B!#(B +$B!7(B +$B!9(B +$B!:(B +$B!;(B +$B!R(B +$B!S(B +$B!T(B +$B!U(B +$B!V(B +$B!W(B +$B!X(B +$B!Y(B +$B!Z(B +$B![(B +$B")(B +$B".(B +$B!L(B +$B!M(B +$B-`(B +$B-a(B +$B$!(B +$B$"(B +$B$#(B +$B$$(B +$B$%(B +$B$&(B +$B$'(B +$B$((B +$B$)(B +$B$*(B +$B$+(B +$B$,(B +$B$-(B +$B$.(B +$B$/(B +$B$0(B +$B$1(B +$B$2(B +$B$3(B +$B$4(B +$B$5(B +$B$6(B +$B$7(B +$B$8(B +$B$9(B +$B$:(B +$B$;(B +$B$<(B +$B$=(B +$B$>(B +$B$?(B +$B$@(B +$B$A(B +$B$B(B +$B$C(B +$B$D(B +$B$E(B +$B$F(B +$B$G(B +$B$H(B +$B$I(B +$B$J(B +$B$K(B +$B$L(B +$B$M(B +$B$N(B +$B$O(B +$B$P(B +$B$Q(B +$B$R(B +$B$S(B +$B$T(B +$B$U(B +$B$V(B +$B$W(B +$B$X(B +$B$Y(B +$B$Z(B +$B$[(B +$B$\(B +$B$](B +$B$^(B +$B$_(B +$B$`(B +$B$a(B +$B$b(B +$B$c(B +$B$d(B +$B$e(B +$B$f(B +$B$g(B +$B$h(B +$B$i(B +$B$j(B +$B$k(B +$B$l(B +$B$m(B +$B$n(B +$B$o(B +$B$p(B +$B$q(B +$B$r(B +$B$s(B +$B!+(B +$B!,(B +$B!5(B +$B!6(B +$B%!(B +$B%"(B +$B%#(B +$B%$(B +$B%%(B +$B%&(B +$B%'(B +$B%((B +$B%)(B +$B%*(B +$B%+(B +$B%,(B +$B%-(B +$B%.(B +$B%/(B +$B%0(B +$B%1(B +$B%2(B +$B%3(B +$B%4(B +$B%5(B +$B%6(B +$B%7(B +$B%8(B +$B%9(B +$B%:(B +$B%;(B +$B%<(B +$B%=(B +$B%>(B +$B%?(B +$B%@(B +$B%A(B +$B%B(B +$B%C(B +$B%D(B +$B%E(B +$B%F(B +$B%G(B +$B%H(B +$B%I(B +$B%J(B +$B%K(B +$B%L(B +$B%M(B +$B%N(B +$B%O(B +$B%P(B +$B%Q(B +$B%R(B +$B%S(B +$B%T(B +$B%U(B +$B%V(B +$B%W(B +$B%X(B +$B%Y(B +$B%Z(B +$B%[(B +$B%\(B +$B%](B +$B%^(B +$B%_(B +$B%`(B +$B%a(B +$B%b(B +$B%c(B +$B%d(B +$B%e(B +$B%f(B +$B%g(B +$B%h(B +$B%i(B +$B%j(B +$B%k(B +$B%l(B +$B%m(B +$B%n(B +$B%o(B +$B%p(B +$B%q(B +$B%r(B +$B%s(B +$B%t(B +$B%u(B +$B%v(B +$B!&(B +$B!<(B +$B!3(B +$B!4(B +$B-j(B +$B-k(B +$B-l(B +$B-e(B +$B-f(B +$B-g(B +$B-h(B +$B-i(B +$B-F(B +$B-J(B +$B-A(B +$B-D(B +$B-B(B +$B-L(B +$B-K(B +$B-E(B +$B-M(B +$B-G(B +$B-O(B +$B-@(B +$B-N(B +$B-C(B +$B-H(B +$B-I(B +$B-_(B +$B-o(B +$B-n(B +$B-m(B +$B-S(B +$B-T(B +$B-P(B +$B-Q(B +$B-R(B +$B-V(B +$B-U(B +$B-c(B +$B0l(B +$BCz(B +$B<7(B +$BK|(B +$B>f(B +$B;0(B +$B>e(B +$B2<(B +$BIT(B +$BM?(B +$BP"(B +$B1/(B +$B3n(B +$BP#(B +$B@$(B +$BRB(B +$B5V(B +$BJ:(B +$B>g(B +$BN>(B +$BJB(B +$By-(B +$BP$(B +$BCf(B +$BP%(B +$B6z(B +$BP&(B +$B4](B +$BC0(B +$B +$BP'(B +$BP((B +$BP)(B +$BG5(B +$B5W(B +$BG7(B +$BFc(B +$B8C(B +$BK3(B +$BiI(B +$BP*(B +$B>h(B +$BP+(B +$B25(B +$B6e(B +$B8p(B +$BLi(B +$BV&(B +$BMp(B +$BF}(B +$B4%(B +$B55(B +$BP,(B +$BP-(B +$BN;(B +$BM=(B +$BAh(B +$BP/(B +$B;v(B +$BFs(B +$BP2(B +$B1>(B +$B8_(B +$B8^(B +$B0f(B +$BOK(B +$BOJ(B +$B:3(B +$B0!(B +$BP3(B +$BP4(B +$BP5(B +$BK4(B +$BP6(B +$B8r(B +$B0g(B +$BKr(B +$B5|(B +$B5}(B +$B5~(B +$BDb(B +$BN<(B +$BP7(B +$BP8(B +$BP9(B +$B?M(B +$B=:(B +$B?N(B +$BP>(B +$BP<(B +$BP=(B +$B5X(B +$B:#(B +$B2p(B +$BP;(B +$BP:(B +$BJ)(B +$B;F(B +$B;E(B +$BB>(B +$BP?(B +$BIU(B +$B@g(B +$B!8(B +$BP@(B +$BPB(B +$By.(B +$BBe(B +$BNa(B +$B0J(B +$BPA(B +$B2>(B +$B6D(B +$BCg(B +$B7o(B +$BPC(B +$BG$(B +$By/(B +$By0(B +$B4k(B +$By1(B +$BPD(B +$B0K(B +$B8`(B +$B4l(B +$BIz(B +$BH2(B +$B5Y(B +$B2q(B +$BPg(B +$BEA(B +$BGl(B +$BPF(B +$BH<(B +$BNb(B +$B?-(B +$By2(B +$B;G(B +$B;w(B +$B2@(B +$BDQ(B +$BC"(B +$BPJ(B +$B0L(B +$BDc(B +$B=;(B +$B:4(B +$BM$(B +$BBN(B +$B2?(B +$By3(B +$BPI(B +$BM>(B +$BPE(B +$BPG(B +$B:n(B +$BPH(B +$BU$(B +$BPP(B +$BPS(B +$BPQ(B +$B2B(B +$BJ;(B +$BPK(B +$BPO(B +$B8s(B +$B;H(B +$B4&(B +$BPT(B +$BPL(B +$By5(B +$BNc(B +$B;x(B +$BPM(B +$BPR(B +$By4(B +$By7(B +$BPU(B +$BPN(B +$By6(B +$B6!(B +$B0M(B +$B6"(B +$B2A(B +$BU%(B +$BKy(B +$BIn(B +$B8t(B +$B?/(B +$BN7(B +$BJX(B +$B78(B +$BB%(B +$B2d(B +$By&(B +$B=S(B +$By8(B +$BPY(B +$BP^(B +$BP\(B +$BPW(B +$BB/(B +$BPZ(B +$BP](B +$BP[(B +$BJ](B +$BPX(B +$B?.(B +$BKs(B +$BP_(B +$BP`(B +$B=$(B +$BPm(B +$BGP(B +$BI6(B +$BPh(B +$BJp(B +$B26(B +$BPl(B +$By;(B +$BPf(B +$BPo(B +$BAR(B +$B8D(B +$BG\(B +$B`G(B +$BPn(B +$BE](B +$BPc(B +$B8v(B +$B8u(B +$BPa(B +$By<(B +$B +$BPi(B +$By:(B +$BJo(B +$BCM(B +$BPe(B +$B7q(B +$BPb(B +$BPj(B +$BPd(B +$BNQ(B +$BPk(B +$BOA(B +$B6f(B +$B7p(B +$By9(B +$By?(B +$BPp(B +$By=(B +$BPq(B +$BPu(B +$B0N(B +$BJP(B +$BPt(B +$BPs(B +$BPw(B +$BPv(B +$BDd(B +$B7r(B +$BPx(B +$By>(B +$B +$BB&(B +$BDe(B +$B6v(B +$BPy(B +$B56(B +$BPz(B +$BP|(B +$BK5(B +$B7f(B +$By@(B +$B;1(B +$BHw(B +$BP{(B +$B:E(B +$BMC(B +$BP~(B +$BQ#(B +$BP}(B +$B:D(B +$B=}(B +$B79(B +$BQ$(B +$B6O(B +$BQ!(B +$BQ"(B +$BF/(B +$BA|(B +$B6#(B +$BKM(B +$BQ%(B +$ByB(B +$BN=(B +$BQ&(B +$BQ)(B +$BQ'(B +$BAN(B +$BQ((B +$BQ*(B +$ByA(B +$BQ,(B +$BQ+(B +$BJH(B +$B57(B +$BQ.(B +$BQ/(B +$B2/(B +$BQ-(B +$B +$BQ2(B +$BQ1(B +$BQ0(B +$BPV(B +$BQ3(B +$B=~(B +$BQ4(B +$BM%(B +$BLY(B +$BQ6(B +$BQ5(B +$BQ8(B +$BQ7(B +$BQ9(B +$BQ:(B +$B0t(B +$B85(B +$B7;(B +$B=<(B +$BC{(B +$B6$(B +$B@h(B +$B8w(B +$ByC(B +$B9n(B +$BQ<(B +$BLH(B +$BEF(B +$B;y(B +$BQ;(B +$BQ=(B +$BE^(B +$B3u(B +$BQ>(B +$ByD(B +$BF~(B +$BA4(B +$BQ@(B +$BQA(B +$BH,(B +$B8x(B +$BO;(B +$BQB(B +$B6&(B +$BJ<(B +$BB6(B +$B6q(B +$BE5(B +$B7s(B +$BQC(B +$BQD(B +$BFb(B +$B1_(B +$BQG(B +$B:}(B +$BQF(B +$B:F(B +$BQH(B +$Bfn(B +$BQI(B +$BKA(B +$BQJ(B +$BQK(B +$BQL(B +$B>i(B +$B +$ByE(B +$B4'(B +$BQO(B +$BQM(B +$BL=(B +$BQN(B +$BIZ(B +$BQP(B +$BQQ(B +$BQR(B +$BE_(B +$BQV(B +$BQT(B +$BQU(B +$BQS(B +$B:c(B +$BQW(B +$BLj(B +$BNd(B +$BQX(B +$ByF(B +$B@((B +$BQY(B +$B=Z(B +$BQZ(B +$BC|(B +$BN?(B +$BE`(B +$BRE(B +$BQ[(B +$Bt%(B +$B6E(B +$BQ\(B +$BK^(B +$B=h(B +$BB|(B +$BQ^(B +$BFd(B +$ByG(B +$BQ_(B +$BQ`(B +$B3.(B +$BQa(B +$B6'(B +$BFL(B +$B1z(B +$B=P(B +$BH!(B +$BQb(B +$BEa(B +$B?O(B +$BQc(B +$BJ,(B +$B@Z(B +$B4"(B +$B4)(B +$BQd(B +$BQf(B +$B7:(B +$BQe(B +$ByH(B +$BNs(B +$B=i(B +$BH=(B +$BJL(B +$BQg(B +$BMx(B +$BQh(B +$BQi(B +$BE~(B +$BQj(B +$B@)(B +$B:~(B +$B7t(B +$BQk(B +$B;I(B +$B9o(B +$BDf(B +$BQm(B +$BB'(B +$B:o(B +$BQn(B +$BQo(B +$BA0(B +$BQl(B +$BQq(B +$BK6(B +$B9d(B +$BQp(B +$B7u(B +$B:^(B +$BGm(B +$BQt(B +$BQr(B +$BI{(B +$B>j(B +$BQ{(B +$B3d(B +$BQu(B +$BQs(B +$BAO(B +$BQw(B +$BQv(B +$B3D(B +$B7`(B +$BQ|(B +$BN-(B +$BQx(B +$BQ}(B +$BQz(B +$BQy(B +$BNO(B +$ByI(B +$B8y(B +$B2C(B +$BNt(B +$ByJ(B +$B=u(B +$BEX(B +$B9e(B +$BR"(B +$BR#(B +$B{<(B +$BNe(B +$BO+(B +$BR%(B +$B8z(B +$BR$(B +$B3/(B +$ByK(B +$BR&(B +$BKV(B +$BD<(B +$BM&(B +$BJY(B +$BR'(B +$BpU(B +$BF0(B +$BR((B +$B4*(B +$BL3(B +$ByL(B +$B>!(B +$BR)(B +$BJg(B +$BR-(B +$B@*(B +$BR*(B +$B6P(B +$BR+(B +$B4+(B +$B7.(B +$BR.(B +$BR/(B +$BR0(B +$BR1(B +$B<[(B +$B8{(B +$BL^(B +$ByM(B +$BLh(B +$BFw(B +$BJq(B +$BR2(B +$ByN(B +$BR3(B +$BR5(B +$BR7(B +$BR6(B +$BR8(B +$B2=(B +$BKL(B +$B:|(B +$BR9(B +$BAY(B +$B>"(B +$B6)(B +$BR:(B +$ByO(B +$BH[(B +$BR;(B +$BR<(B +$BR=(B +$BR>(B +$BI$(B +$B6h(B +$B0e(B +$BF?(B +$BR?(B +$B==(B +$B@i(B +$BRA(B +$BR@(B +$B>#(B +$B8a(B +$BRC(B +$BH>(B +$BRD(B +$BH\(B +$BB4(B +$BBn(B +$B6((B +$BFn(B +$BC1(B +$BGn(B +$BKN(B +$BRF(B +$B@j(B +$B75(B +$BRG(B +$BRH(B +$B1,(B +$B0u(B +$B4m(B +$ByP(B +$BB((B +$B5Q(B +$BMq(B +$BRK(B +$B27(B +$BRJ(B +$B6*(B +$BRL(B +$BLq(B +$ByQ(B +$BRM(B +$BNR(B +$B8|(B +$B86(B +$BRN(B +$BRP(B +$BRO(B +$B?_(B +$B19(B +$B1^(B +$BRQ(B +$BRR(B +$ByR(B +$B87(B +$BRS(B +$B5n(B +$B;2(B +$BRT(B +$BKt(B +$B:5(B +$B5Z(B +$BM'(B +$BAP(B +$BH?(B +$B<}(B +$B=G(B +$B +$B +$B=v(B +$BH@(B +$ByS(B +$BRW(B +$B1C(B +$BAQ(B +$B8}(B +$B8E(B +$B6g(B +$BR[(B +$BC!(B +$BB~(B +$B6+(B +$B>$(B +$BR\(B +$BRZ(B +$B2D(B +$BBf(B +$B<8(B +$B;K(B +$B1&(B +$B3p(B +$B9f(B +$B;J(B +$BR](B +$BR^(B +$B5I(B +$B3F(B +$B9g(B +$B5H(B +$BD_(B +$B1%(B +$BF1(B +$BL>(B +$B9!(B +$BMy(B +$BEG(B +$B8~(B +$B7/(B +$BRg(B +$B6c(B +$BKJ(B +$BH](B +$BRf(B +$B4^(B +$BRa(B +$BRb(B +$BRd(B +$BRe(B +$B5[(B +$B?a(B +$BJ-(B +$BRc(B +$BR_(B +$B8c(B +$BR`(B +$BO$(B +$BJr(B +$BDh(B +$B8b(B +$B9p(B +$BRh(B +$BF](B +$BRl(B +$B<~(B +$B +$BRo(B +$BRm(B +$BL#(B +$BRj(B +$BRs(B +$BRn(B +$BRq(B +$B8F(B +$BL?(B +$BRr(B +$BRt(B +$BRv(B +$ByV(B +$B:p(B +$BOB(B +$BRk(B +$BRi(B +$BRu(B +$BRp(B +$ByU(B +$BRx(B +$BS#(B +$BRz(B +$BR~(B +$ByW(B +$BS!(B +$BR{(B +$BS>(B +$B:i(B +$B31(B +$BRy(B +$BS%(B +$B0v(B +$BS$(B +$B0%(B +$BIJ(B +$BS"(B +$BR|(B +$BRw(B +$BR}(B +$B:H(B +$BS&(B +$B0w(B +$BS/(B +$BS'(B +$BS((B +$B>%(B +$BKi(B +$BS-(B +$BS,(B +$BE/(B +$BS.(B +$BS+(B +$ByX(B +$B14(B +$B:6(B +$B?0(B +$BS)(B +$BEb(B +$BS*(B +$B0"(B +$BS4(B +$BM#(B +$B>'(B +$BS:(B +$BS9(B +$BS0(B +$BBC(B +$BS1(B +$BBo(B +$BS6(B +$B>&(B +$BS3(B +$BLd(B +$B7<(B +$BS7(B +$BS8(B +$BS5(B +$BS;(B +$BS2(B +$BSA(B +$BSF(B +$BSB(B +$BS=(B +$BSG(B +$BA1(B +$ByY(B +$BSI(B +$B9"(B +$BS?(B +$BC}(B +$BSC(B +$BS<(B +$B4-(B +$B4n(B +$B3e(B +$BSD(B +$BS@(B +$B7v(B +$BSJ(B +$BSH(B +$BAS(B +$B5J(B +$B6,(B +$BSE(B +$B6t(B +$B1D(B +$BSN(B +$BSL(B +$BT'(B +$BSQ(B +$BSK(B +$BSO(B +$BSM(B +$B;L(B +$BSP(B +$BSS(B +$BSX(B +$BSV(B +$BSU(B +$BC2(B +$B2E(B +$BSR(B +$BST(B +$B>((B +$B13(B +$BSW(B +$B2^(B +$BSb(B +$B>|(B +$BS^(B +$BS\(B +$BS](B +$BS_(B +$B1=(B +$BA9(B +$BSY(B +$BSZ(B +$B3z(B +$BSa(B +$B4o(B +$BSd(B +$BS`(B +$BSc(B +$BJ.(B +$BFU(B +$BH8(B +$BSf(B +$BSe(B +$B3E(B +$BSg(B +$BSj(B +$BSi(B +$BSh(B +$BG9(B +$BSk(B +$BSl(B +$BSn(B +$BSm(B +$BSp(B +$BSs(B +$BSq(B +$BSo(B +$BSr(B +$BSt(B +$BSu(B +$BSv(B +$BSw(B +$BSx(B +$BQE(B +$B<|(B +$B;M(B +$B2s(B +$B0x(B +$BCD(B +$BSy(B +$B:$(B +$B0O(B +$B?^(B +$BSz(B +$B8G(B +$B9q(B +$BS|(B +$BS{(B +$BJ`(B +$BS}(B +$BT!(B +$BS~(B +$BT"(B +$BT#(B +$B7w(B +$B1`(B +$BT$(B +$BT&(B +$BT%(B +$BT((B +$BEZ(B +$BT)(B +$B05(B +$B:_(B +$B7=(B +$BCO(B +$BT*(B +$BT+(B +$BT-(B +$BT.(B +$B:d(B +$B6Q(B +$BK7(B +$BT,(B +$BT/(B +$B:A(B +$B9#(B +$ByZ(B +$BT3(B +$B:%(B +$By[(B +$BC3(B +$BT0(B +$BDZ(B +$BT4(B +$B?b(B +$BT2(B +$BT5(B +$B7?(B +$BT6(B +$BT7(B +$B9$(B +$B3@(B +$BT9(B +$BT:(B +$By\(B +$BT;(B +$BT8(B +$BT1(B +$BT<(B +$BT=(B +$By^(B +$By](B +$BKd(B +$B>k(B +$BT?(B +$BT@(B +$BT>(B +$BTB(B +$BG8(B +$B0h(B +$BIV(B +$BTC(B +$B>}(B +$B<9(B +$BG](B +$B4p(B +$B:k(B +$BKY(B +$BF2(B +$B7x(B +$BBO(B +$BTA(B +$BTD(B +$BBD(B +$BTE(B +$BTF(B +$BTH(B +$BDi(B +$B4.(B +$Bt!(B +$B1a(B +$BJs(B +$B>l(B +$BEH(B +$B:f(B +$BTN(B +$BJ=(B +$BN](B +$B2t(B +$BTJ(B +$BA:(B +$BTM(B +$BEc(B +$BEI(B +$BEd(B +$BH9(B +$BDM(B +$B:I(B +$BTI(B +$B1v(B +$BE6(B +$BTK(B +$BTG(B +$B?P(B +$BTO(B +$B=N(B +$B6-(B +$BTP(B +$BJh(B +$BA}(B +$BDF(B +$Bya(B +$BTR(B +$BKO(B +$BTS(B +$BTX(B +$Byb(B +$BJ/(B +$BTW(B +$BTQ(B +$BTT(B +$BTV(B +$B:&(B +$BJI(B +$BTY(B +$BCE(B +$B2u(B +$B>m(B +$BT[(B +$BTZ(B +$B9h(B +$BT\(B +$BT^(B +$BT](B +$BT`(B +$BTU(B +$BTb(B +$BTa(B +$BT_(B +$B;N(B +$B?Q(B +$BAT(B +$BTc(B +$B@<(B +$B0m(B +$BGd(B +$BD[(B +$BTe(B +$BTd(B +$BTf(B +$BTg(B +$BTh(B +$BTi(B +$BJQ(B +$BTj(B +$Byc(B +$B2F(B +$BTk(B +$BM<(B +$B30(B +$BRI(B +$B=H(B +$BB?(B +$BTl(B +$BLk(B +$BL4(B +$BTn(B +$BBg(B +$BE7(B +$BB@(B +$BIW(B +$BTo(B +$BTp(B +$B1{(B +$B<:(B +$BTq(B +$B0P(B +$BTr(B +$BTs(B +$B1b(B +$B4q(B +$BF`(B +$BJt(B +$BTw(B +$BAU(B +$BTv(B +$B7@(B +$Byd(B +$BK[(B +$BTu(B +$BEe(B +$BTy(B +$BTx(B +$Bye(B +$Byf(B +$BT{(B +$BTz(B +$Byg(B +$B1|(B +$BT|(B +$B>)(B +$BT~(B +$BC%(B +$BT}(B +$BJ3(B +$B=w(B +$BE[(B +$BU!(B +$B9%(B +$BU"(B +$BG!(B +$BH^(B +$BLQ(B +$BG%(B +$BU+(B +$B58(B +$BME(B +$BL/(B +$BV,(B +$BU#(B +$BU&(B +$Byh(B +$BBE(B +$BK8(B +$BEJ(B +$BU'(B +$BKe(B +$Byi(B +$B:J(B +$B>*(B +$BU((B +$B;P(B +$B;O(B +$B09(B +$B8H(B +$B@+(B +$B0Q(B +$BU,(B +$BU-(B +$BU*(B +$B18(B +$B4/(B +$BU)(B +$BLE(B +$BI1(B +$B0((B +$B0y(B +$B;Q(B +$B0R(B +$B0#(B +$BU2(B +$BU0(B +$BL<(B +$BU3(B +$BU1(B +$BU/(B +$B?1(B +$BU.(B +$BJZ(B +$B8d(B +$BU7(B +$BU8(B +$B>+(B +$BU4(B +$BO,(B +$BGL(B +$BU6(B +$B:'(B +$BU9(B +$BIX(B +$BU:(B +$BU5(B +$BL;(B +$BG^(B +$BU;(B +$BI2(B +$BU<(B +$BU@(B +$BU=(B +$B2G(B +$BU?(B +$B<;(B +$BU>(B +$B7y(B +$BUL(B +$BUE(B +$BUB(B +$BCd(B +$BUA(B +$BUC(B +$BUD(B +$BUF(B +$BUG(B +$B4r(B +$BUI(B +$BUH(B +$BUJ(B +$B>n(B +$BUM(B +$BD\(B +$B1E(B +$BUK(B +$BUN(B +$BUO(B +$BUR(B +$BUP(B +$BUQ(B +$B;R(B +$BUS(B +$B9&(B +$BUT(B +$Byj(B +$B;z(B +$BB8(B +$BUU(B +$BUV(B +$B;Z(B +$B9'(B +$BLR(B +$B5((B +$B8I(B +$BUW(B +$B3X(B +$BUX(B +$BB9(B +$BUY(B +$BV#(B +$BUZ(B +$BU[(B +$BU\(B +$BU^(B +$BU_(B +$BU`(B +$BBp(B +$B1'(B +$B +$B0B(B +$BAW(B +$B40(B +$B<5(B +$B9((B +$BEf(B +$B=!(B +$B41(B +$BCh(B +$BDj(B +$B08(B +$B59(B +$BJu(B +$B +$B5R(B +$B@k(B +$B<<(B +$BM((B +$BUa(B +$B5\(B +$B:K(B +$B32(B +$B1c(B +$B>,(B +$B2H(B +$BUb(B +$BMF(B +$B=I(B +$Byk(B +$B +$BUc(B +$B4s(B +$BFR(B +$BL)(B +$BUd(B +$BUe(B +$BIY(B +$BUg(B +$B4((B +$B6w(B +$BUf(B +$Bym(B +$B42(B +$B?2(B +$BUk(B +$B;!(B +$B2I(B +$BUj(B +$BUh(B +$BUl(B +$BUi(B +$BG+(B +$B\M(B +$B?3(B +$BUm(B +$Byn(B +$BN@(B +$BUn(B +$BUp(B +$BC~(B +$BUo(B +$B@#(B +$B;{(B +$BBP(B +$B +$BIu(B +$B@l(B +$B +$BUq(B +$B>-(B +$BUr(B +$BUs(B +$B0S(B +$BB:(B +$B?R(B +$BUt(B +$BF3(B +$B>.(B +$B>/(B +$BUu(B +$B@m(B +$B>0(B +$Byo(B +$BUv(B +$BUw(B +$BL`(B +$BUx(B +$B6F(B +$B="(B +$BUy(B +$BUz(B +$B<\(B +$B?,(B +$BFt(B +$B?T(B +$BHx(B +$BG"(B +$B6I(B +$BU{(B +$B5o(B +$BU|(B +$B6~(B +$BFO(B +$B20(B +$B;S(B +$BU}(B +$BV"(B +$BV!(B +$B6}(B +$BU~(B +$BE8(B +$BB0(B +$BEK(B +$B +$BAX(B +$BMz(B +$BV$(B +$BV%(B +$BFV(B +$B;3(B +$BV'(B +$BV((B +$BV)(B +$B4t(B +$BV*(B +$BV+(B +$B2,(B +$Byp(B +$BA;(B +$B4d(B +$BV-(B +$BL((B +$BBR(B +$B3Y(B +$BV/(B +$BV1(B +$B4_(B +$Byq(B +$BV.(B +$BV0(B +$BV3(B +$BV2(B +$BV4(B +$BV5(B +$BF=(B +$B6.(B +$B2e(B +$BV6(B +$BV;(B +$BV9(B +$BJw(B +$BJv(B +$Byr(B +$BEg(B +$BV8(B +$B=T(B +$BV7(B +$B?r(B +$BV<(B +$B:j(B +$BVB(B +$BVC(B +$BV=(B +$B33(B +$BV>(B +$BVG(B +$BVF(B +$BVE(B +$BVA(B +$BV@(B +$BVD(B +$Bys(B +$BJx(B +$Byv(B +$BVK(B +$BVH(B +$BVJ(B +$BMr(B +$BVI(B +$Byt(B +$BV?(B +$B?s(B +$BVL(B +$Byw(B +$B:7(B +$BVM(B +$BVN(B +$BVQ(B +$BVP(B +$BVO(B +$BEh(B +$BV:(B +$BVW(B +$BVS(B +$BVR(B +$BVT(B +$BVU(B +$BVX(B +$Byx(B +$Byy(B +$BNf(B +$BVY(B +$BVV(B +$BVZ(B +$B4`(B +$BV[(B +$Byz(B +$BV](B +$BV\(B +$BV^(B +$BV_(B +$B@n(B +$B=#(B +$B=d(B +$BAc(B +$B9)(B +$B:8(B +$B9*(B +$B5p(B +$BV`(B +$B:9(B +$B8J(B +$BVa(B +$BL&(B +$BGC(B +$BVb(B +$B9+(B +$B4,(B +$BC'(B +$B6R(B +$B;T(B +$BI[(B +$BHA(B +$BVc(B +$B4u(B +$BVf(B +$BD!(B +$BVe(B +$BVd(B +$BVg(B +$BDk(B +$B?c(B +$B;U(B +$B@J(B +$BBS(B +$B5"(B +$BD"(B +$BVh(B +$BVi(B +$B>o(B +$BK9(B +$BVl(B +$BVk(B +$BVj(B +$BI}(B +$BVs(B +$BKZ(B +$BVm(B +$BVo(B +$BKk(B +$BVn(B +$BVp(B +$BH((B +$BVq(B +$BJ>(B +$BVr(B +$B43(B +$BJ?(B +$BG/(B +$BVt(B +$BVu(B +$B9,(B +$B44(B +$BVv(B +$B88(B +$BMD(B +$BM)(B +$B4v(B +$BVx(B +$BD#(B +$B9-(B +$B>1(B +$BH_(B +$B>2(B +$B=x(B +$BDl(B +$BJy(B +$BE9(B +$B9.(B +$BI\(B +$BVy(B +$BEY(B +$B:B(B +$B8K(B +$BDm(B +$B0C(B +$B=n(B +$B9/(B +$BMG(B +$BVz(B +$BV{(B +$BGQ(B +$BV|(B +$BNw(B +$BO-(B +$BV~(B +$BV}(B +$B3G(B +$BW!(B +$BW$(B +$BW%(B +$BW#(B +$BI@(B +$B>3(B +$BW'(B +$BW&(B +$BW"(B +$BW((B +$BW)(B +$BW*(B +$BW-(B +$BW+(B +$BW,(B +$BW.(B +$B1d(B +$BDn(B +$BW/(B +$B7z(B +$B2v(B +$BG6(B +$BW0(B +$BF{(B +$BJ[(B +$BW1(B +$BO.(B +$BW2(B +$BJ@(B +$BW5(B +$BP!(B +$BP1(B +$B<0(B +$BFu(B +$BW6(B +$B5](B +$BD$(B +$B0z(B +$BW7(B +$BJ&(B +$B90(B +$BCP(B +$BDo(B +$By{(B +$BLo(B +$B89(B +$B8L(B +$BW8(B +$BW9(B +$BW?(B +$B +$By|(B +$BD%(B +$B6/(B +$BW:(B +$BI+(B +$BCF(B +$BW;(B +$By,(B +$BW<(B +$B60(B +$BW=(B +$BW>(B +$BW@(B +$BEv(B +$BWA(B +$BWB(B +$BWC(B +$BW4(B +$BW3(B +$BWD(B +$B7A(B +$BI'(B +$By}(B +$B:L(B +$BI7(B +$BD&(B +$BIK(B +$BWE(B +$B>4(B +$B1F(B +$BWF(B +$BWG(B +$BLr(B +$BH`(B +$BWJ(B +$B1}(B +$B@,(B +$BWI(B +$BWH(B +$B7B(B +$BBT(B +$BWN(B +$BWL(B +$BWK(B +$BN'(B +$B8e(B +$B=y(B +$BWM(B +$BEL(B +$B=>(B +$BF@(B +$BWQ(B +$BWP(B +$BWO(B +$BWR(B +$B8f(B +$BWS(B +$BI|(B +$B=[(B +$BWT(B +$BHy(B +$BFA(B +$BD'(B +$By~(B +$BE0(B +$BWU(B +$B5+(B +$B?4(B +$BI,(B +$B4w(B +$BG&(B +$BWV(B +$B;V(B +$BK:(B +$BK;(B +$B1~(B +$BW[(B +$Bz!(B +$BCi(B +$BWX(B +$B2w(B +$BX-(B +$BWZ(B +$BG0(B +$BWY(B +$BWW(B +$B9z(B +$BW](B +$BWc(B +$BWi(B +$BWa(B +$BE\(B +$BWf(B +$BI](B +$BW`(B +$BWe(B +$BNg(B +$B;W(B +$BBU(B +$BW^(B +$B5^(B +$BWh(B +$B@-(B +$B1e(B +$BWb(B +$B2x(B +$BWg(B +$B61(B +$BWd(B +$BWj(B +$BWl(B +$BWv(B +$BWt(B +$BWq(B +$BWp(B +$BNx(B +$BWr(B +$B62(B +$B91(B +$B=z(B +$BWy(B +$BWk(B +$Bz"(B +$BWo(B +$BW_(B +$B2z(B +$BWs(B +$BWu(B +$BCQ(B +$B:((B +$B28(B +$BWm(B +$BWx(B +$BWw(B +$B63(B +$BB)(B +$B3f(B +$B7C(B +$BWn(B +$BWz(B +$BW}(B +$BX!(B +$Bz#(B +$B<=(B +$Bz$(B +$BX'(B +$BDp(B +$BW{(B +$BX%(B +$B2y(B +$BX#(B +$BX$(B +$BW~(B +$BX"(B +$B8g(B +$BM*(B +$B45(B +$B1Y(B +$BX&(B +$BG:(B +$B0-(B +$BHa(B +$BW\(B +$BX,(B +$BX0(B +$BLe(B +$BX)(B +$BEi(B +$BX.(B +$B>p(B +$BX/(B +$BFW(B +$BOG(B +$BX+(B +$Bz&(B +$BX1(B +$B9{(B +$B@K(B +$Bz%(B +$B0T(B +$BX*(B +$BX((B +$BAZ(B +$BW|(B +$B;4(B +$BBF(B +$BX=(B +$Bz((B +$BA[(B +$BX8(B +$BX5(B +$BX6(B +$B +$BX9(B +$BX<(B +$BX7(B +$B=%(B +$BX:(B +$BX4(B +$BL|(B +$BL{(B +$BX>(B +$BX?(B +$B0U(B +$Bz)(B +$BX3(B +$B6r(B +$B0&(B +$B46(B +$Bz'(B +$BX;(B +$BXC(B +$BXB(B +$BXG(B +$Bz+(B +$BXH(B +$Bz*(B +$BXF(B +$BXI(B +$BXA(B +$BXE(B +$BXJ(B +$BXK(B +$BX@(B +$B;|(B +$BXD(B +$BBV(B +$B92(B +$BX2(B +$B?5(B +$BXX(B +$BJi(B +$BXN(B +$BXO(B +$BXP(B +$BXW(B +$BXV(B +$BK}(B +$B47(B +$BXT(B +$B7E(B +$B34(B +$BXQ(B +$BN8(B +$BXS(B +$B0V(B +$BXU(B +$BXL(B +$BXR(B +$BXY(B +$B7D(B +$BXM(B +$BM](B +$BM+(B +$BX\(B +$BX`(B +$BA~(B +$BNy(B +$BXa(B +$BX^(B +$BX[(B +$Bz,(B +$BXZ(B +$BX_(B +$BJ0(B +$BF4(B +$B7F(B +$BXb(B +$BX](B +$BXc(B +$B7{(B +$B21(B +$BXk(B +$B48(B +$BXi(B +$BXj(B +$B:)(B +$BXh(B +$BXf(B +$BXe(B +$BXl(B +$BXd(B +$BXn(B +$B2{(B +$BXp(B +$BXo(B +$BD((B +$BXs(B +$BXq(B +$BXg(B +$B7|(B +$BXr(B +$BXv(B +$BXu(B +$BXw(B +$BXt(B +$BXx(B +$BXy(B +$BXz(B +$BJj(B +$BX|(B +$BX{(B +$B=?(B +$B@.(B +$B2f(B +$B2|(B +$Bz-(B +$BX}(B +$B0?(B +$B@L(B +$BX~(B +$BlC(B +$BY!(B +$B7a(B +$BY"(B +$B@o(B +$BY#(B +$BY$(B +$B5:(B +$BY%(B +$BY&(B +$BY'(B +$BBW(B +$B8M(B +$BLa(B +$BK<(B +$B=j(B +$BY((B +$B@p(B +$Bn=(B +$BHb(B +$B +$B:M(B +$BY)(B +$BBG(B +$BJ'(B +$BBq(B +$BY,(B +$BY*(B +$BY-(B +$BY+(B +$BY.(B +$BJ1(B +$B07(B +$BI^(B +$BHc(B +$BY/(B +$BY2(B +$B>5(B +$B5;(B +$BY0(B +$BY7(B +$B>6(B +$BY1(B +$BGD(B +$BM^(B +$BY3(B +$BY4(B +$BY8(B +$BEj(B +$BY5(B +$B93(B +$B@^(B +$BYF(B +$BH4(B +$BBr(B +$Bz.(B +$BHd(B +$BZ-(B +$BJz(B +$BDq(B +$BKu(B +$BY;(B +$B2!(B +$BCj(B +$BYD(B +$BC4(B +$BY>(B +$BYE(B +$BY@(B +$BYG(B +$BYC(B +$BYB(B +$BGo(B +$BY<(B +$B2}(B +$BY:(B +$B5q(B +$BBs(B +$BY6(B +$BY9(B +$B94(B +$B@[(B +$B>7(B +$BYA(B +$BGR(B +$B5r(B +$B3H(B +$B3g(B +$B?!(B +$BYI(B +$BYN(B +$BYJ(B +$B7}(B +$BYO(B +$B;"(B +$B9i(B +$B=&(B +$BY=(B +$B;}(B +$BYL(B +$B;X(B +$BYM(B +$B0D(B +$BYH(B +$BD)(B +$B5s(B +$B64(B +$BYK(B +$B0'(B +$B:C(B +$B?6(B +$BDr(B +$BHT(B +$BYQ(B +$BA^(B +$BB*(B +$B;+(B +$BYR(B +$BYT(B +$BYP(B +$BJa(B +$BD=(B +$BA\(B +$BJ{(B +$B +$BY`(B +$BY_(B +$B?x(B +$B7~(B +$BYY(B +$B>9(B +$BFh(B +$BG1(B +$BYW(B +$BA](B +$B +$BY\(B +$B>8(B +$BYV(B +$BY[(B +$BGS(B +$BYU(B +$B7!(B +$B3](B +$BY](B +$BN+(B +$B:N(B +$BC5(B +$BYZ(B +$B@\(B +$B95(B +$B?d(B +$B1f(B +$BA<(B +$BYX(B +$B5E(B +$B7G(B +$BDO(B +$BY^(B +$BA_(B +$BYa(B +$BYc(B +$BB7(B +$BYi(B +$BYd(B +$BYf(B +$BIA(B +$BDs(B +$BYg(B +$BM,(B +$BMH(B +$B49(B +$B0.(B +$BYe(B +$BYb(B +$B4x(B +$B1g(B +$Bz/(B +$BYh(B +$BMI(B +$BYl(B +$BB;(B +$BYs(B +$BYm(B +$BYj(B +$BYq(B +$BYS(B +$BYn(B +$BYr(B +$BHB(B +$BEk(B +$BYk(B +$BYo(B +$B7H(B +$B:q(B +$B@](B +$BYw(B +$BE&(B +$Bz0(B +$BYt(B +$BK`(B +$BYu(B +$BYv(B +$BLN(B +$B@"(B +$B7b(B +$BY}(B +$B;5(B +$BYz(B +$BYy(B +$BG2(B +$Bz1(B +$BF5(B +$BE1(B +$BY{(B +$BY|(B +$BIo(B +$BGE(B +$B;#(B +$B@q(B +$BKP(B +$B3I(B +$BZ%(B +$BY~(B +$BMJ(B +$BZ'(B +$BZ#(B +$BZ$(B +$BA`(B +$Bz2(B +$BZ"(B +$BY?(B +$BZ&(B +$BZ!(B +$BZ+(B +$BZ,(B +$BE'(B +$BZ.(B +$B;$(B +$BZ)(B +$B5<(B +$BZ/(B +$BZ((B +$BZ3(B +$BZ2(B +$BZ1(B +$BZ4(B +$BZ6(B +$B>q(B +$BZ5(B +$BZ9(B +$BZ7(B +$BZ8(B +$BYp(B +$BZ;(B +$BZ:(B +$BYx(B +$BZ<(B +$BZ0(B +$B;Y(B +$BZ=(B +$BZ>(B +$BZ@(B +$BZ?(B +$BZA(B +$B2~(B +$B96(B +$BJ|(B +$B@/(B +$B8N(B +$BZC(B +$BZF(B +$Bz3(B +$BIR(B +$B5_(B +$BZE(B +$BZD(B +$BGT(B +$BZG(B +$B65(B +$BZI(B +$BZH(B +$B4:(B +$B;6(B +$BFX(B +$B7I(B +$B?t(B +$BZJ(B +$B@0(B +$BE((B +$BI_(B +$BZK(B +$BZL(B +$BZM(B +$BJ8(B +$BU](B +$B@F(B +$BIL(B +$B:X(B +$BHe(B +$BHC(B +$BEM(B +$BNA(B +$BZO(B +$B +$BZP(B +$B06(B +$B6T(B +$B@M(B +$BI`(B +$BZQ(B +$B;B(B +$BCG(B +$B;[(B +$B?7(B +$BZR(B +$BJ}(B +$B1w(B +$B;\(B +$BZU(B +$BZS(B +$BZV(B +$BN9(B +$BZT(B +$B@{(B +$BZW(B +$BB2(B +$BZX(B +$B4z(B +$BZZ(B +$BZY(B +$BZ[(B +$BZ\(B +$B4{(B +$BF|(B +$BC6(B +$B5l(B +$B;](B +$BAa(B +$B=\(B +$B00(B +$BZ](B +$B2"(B +$BZa(B +$Bz4(B +$B97(B +$BZ`(B +$B:+(B +$B>:(B +$Bz7(B +$BZ_(B +$B>;(B +$BL@(B +$B:*(B +$B0W(B +$B@N(B +$Bz5(B +$BZf(B +$Bz9(B +$B@1(B +$B1G(B +$Bz:(B +$B=U(B +$BKf(B +$B:r(B +$B><(B +$Bz8(B +$B@'(B +$By((B +$BZe(B +$BZc(B +$BZd(B +$Bz6(B +$BCk(B +$B[&(B +$BZj(B +$B;~(B +$B98(B +$BZh(B +$BZi(B +$B?8(B +$BZg(B +$B;/(B +$Bz<(B +$Bz=(B +$BZl(B +$BZk(B +$BZp(B +$BZq(B +$BZm(B +$Bz;(B +$B3"(B +$BZn(B +$BZo(B +$BHU(B +$BIa(B +$B7J(B +$BZr(B +$Bz?(B +$B@2(B +$B>=(B +$BCR(B +$B6G(B +$BZs(B +$BZw(B +$B2K(B +$BZt(B +$BZv(B +$BZu(B +$B=k(B +$BCH(B +$B0E(B +$BZx(B +$Bz@(B +$BZy(B +$BzA(B +$BD*(B +$BNq(B +$B;C(B +$BJk(B +$BzB(B +$BK=(B +$B["(B +$BZ{(B +$BZ~(B +$BZ}(B +$BzC(B +$BZz(B +$B[!(B +$BF^(B +$BZ|(B +$B[#(B +$B=l(B +$B[$(B +$BMK(B +$BGx(B +$B[%(B +$B['(B +$B[((B +$B[)(B +$B6J(B +$B1H(B +$B99(B +$B[*(B +$B[+(B +$B=q(B +$BAb(B +$BzD(B +$By+(B +$BRX(B +$BA>(B +$BA=(B +$BBX(B +$B:G(B +$BPr(B +$B7n(B +$BM-(B +$BJ~(B +$BI~(B +$BzE(B +$B[,(B +$B:s(B +$BD?(B +$B[-(B +$BO/(B +$BK>(B +$BD+(B +$B[.(B +$B4|(B +$B[/(B +$B[0(B +$BLZ(B +$BL$(B +$BKv(B +$BK\(B +$B;%(B +$B[2(B +$B +$BKQ(B +$B[4(B +$B[7(B +$B[6(B +$B4y(B +$B5`(B +$B[3(B +$B[5(B +$B[8(B +$B?y(B +$BM{(B +$B0I(B +$B:`(B +$BB<(B +$B<](B +$B>s(B +$B[;(B +$BEN(B +$B[9(B +$BB+(B +$B[:(B +$B>r(B +$BL](B +$B[<(B +$B[=(B +$BMh(B +$BzG(B +$B[B(B +$B9:(B +$BGU(B +$B[?(B +$BEl(B +$BZ^(B +$BZb(B +$B5O(B +$BGG(B +$B[A(B +$B>>(B +$BHD(B +$B[G(B +$BHz(B +$B[>(B +$B[D(B +$B[C(B +$B@O(B +$BKm(B +$BNS(B +$BKg(B +$B2L(B +$B;^(B +$BOH(B +$B[F(B +$B?u(B +$B[E(B +$B[@(B +$B8O(B +$B[L(B +$B[J(B +$B2M(B +$B[H(B +$B[N(B +$B[T(B +$BzH(B +$BzJ(B +$BBH(B +$BJA(B +$B[V(B +$BI"(B +$B[U(B +$BGp(B +$BK?(B +$B4;(B +$B@w(B +$B=@(B +$BDS(B +$BM.(B +$B[Q(B +$B[P(B +$B[R(B +$B[O(B +$B[W(B +$B[M(B +$B[K(B +$B[S(B +$B[I(B +$BCl(B +$BLx(B +$B +$B:t(B +$B::(B +$BKo(B +$B3A(B +$BzK(B +$BDN(B +$BFJ(B +$B1I(B +$B@r(B +$B@4(B +$B7*(B +$B[Y(B +$B9;(B +$B3|(B +$B[[(B +$B3t(B +$B[a(B +$B[^(B +$B@s(B +$B3K(B +$B:,(B +$B3J(B +$B:O(B +$B[\(B +$B7e(B +$B7K(B +$BEm(B +$BzL(B +$B[Z(B +$B0F(B +$B[](B +$B[_(B +$B6M(B +$B7,(B +$BzI(B +$B4<(B +$B5K(B +$B[b(B +$B:y(B +$BKq(B +$B;7(B +$B[c(B +$BI0(B +$B[o(B +$B23(B +$B[d(B +$B[u(B +$B[e(B +$BNB(B +$B[l(B +$BG_(B +$B[t(B +$B[g(B +$B04(B +$B[i(B +$B9<(B +$B[k(B +$B[j(B +$B[f(B +$B[q(B +$B>?(B +$BTm(B +$B8h(B +$BM|(B +$B[h(B +$BDt(B +$B3#(B +$B:-(B +$B[`(B +$B[p(B +$B3a(B +$B[n(B +$B[r(B +$BEn(B +$B4~(B +$B\2(B +$By)(B +$BLI(B +$B[w(B +$B4}(B +$B[~(B +$BzM(B +$BK@(B +$B\!(B +$B\#(B +$B\'(B +$B[y(B +$BC*(B +$BEo(B +$B\+(B +$B[|(B +$B\((B +$B\"(B +$B?9(B +$B\,(B +$B@3(B +$B\*(B +$B4=(B +$BOP(B +$B[v(B +$B\&(B +$B0X(B +$B[x(B +$BL:(B +$B[}(B +$B?"(B +$BDG(B +$B[s(B +$B\%(B +$B?z(B +$B\/(B +$B3q(B +$B8!(B +$B\1(B +$B[z(B +$B\0(B +$B\)(B +$B[{(B +$B\-(B +$B\.(B +$B\?(B +$BFN(B +$B\$(B +$B\;(B +$B\=(B +$BDX(B +$BML(B +$BIv(B +$B\8(B +$BBJ(B +$B\>(B +$BA?(B +$B\5(B +$B\B(B +$B\A(B +$BFo(B +$B\@(B +$BFj(B +$BzO(B +$B\D(B +$B\7(B +$B6H(B +$B\:(B +$B=](B +$BG`(B +$B\<(B +$B6K(B +$B\4(B +$B\6(B +$B\3(B +$BO0(B +$B3Z(B +$B\9(B +$B\C(B +$B35(B +$B:g(B +$B1](B +$B\T(B +$BO1(B +$B\W(B +$BzQ(B +$B?:(B +$B\V(B +$B\U(B +$B\R(B +$B\F(B +$B\c(B +$B\E(B +$B\X(B +$B\P(B +$B\K(B +$B\H(B +$B\I(B +$B\Q(B +$Bt"(B +$B\N(B +$B9=(B +$BDH(B +$BAd(B +$B\L(B +$B\G(B +$B\J(B +$BMM(B +$BKj(B +$B\O(B +$B\Y(B +$BzR(B +$B\a(B +$B\Z(B +$B\g(B +$B\e(B +$B\`(B +$B\_(B +$BDP(B +$BAe(B +$B\](B +$B\[(B +$B\b(B +$B\h(B +$BHu(B +$B\n(B +$B\i(B +$B\l(B +$B\f(B +$BCt(B +$BI8(B +$B\\(B +$B\d(B +$B>@(B +$BLO(B +$B\x(B +$B\k(B +$B8"(B +$B2#(B +$B3_(B +$B\S(B +$BzS(B +$B>A(B +$B\p(B +$B\w(B +$B +$B3r(B +$BC.(B +$B\m(B +$BzU(B +$B\r(B +$B\v(B +$B66(B +$B5L(B +$B\t(B +$B5!(B +$BFK(B +$B\s(B +$B\u(B +$BzT(B +$B\o(B +$BzV(B +$B\q(B +$BzW(B +$B3`(B +$BCI(B +$B\|(B +$B\z(B +$B8i(B +$B\y(B +$B]!(B +$B[X(B +$B\{(B +$B\}(B +$B\~(B +$B],(B +$B]((B +$B[m(B +$B]'(B +$B]&(B +$B]#(B +$B\j(B +$B]%(B +$B]$(B +$B]*(B +$BO&(B +$B]-(B +$B6{(B +$B])(B +$B]+(B +$BzX(B +$BzY(B +$BH'(B +$B].(B +$B]2(B +$B]/(B +$BMs(B +$B]0(B +$B\^(B +$B]3(B +$B]4(B +$B15(B +$B]6(B +$B7g(B +$B +$B6U(B +$B2$(B +$BM_(B +$B]8(B +$B]7(B +$B]:(B +$B5=(B +$B6V(B +$B4>(B +$B]=(B +$B]<(B +$B]>(B +$B2N(B +$BC7(B +$B]?(B +$B4?(B +$B]A(B +$B]@(B +$B]B(B +$B]C(B +$B]D(B +$B;_(B +$B@5(B +$B:!(B +$BIp(B +$BJb(B +$BOD(B +$B;u(B +$B:P(B +$BNr(B +$B]E(B +$B]F(B +$B;`(B +$B]G(B +$B]H(B +$B]J(B +$B]I(B +$BKX(B +$B=^(B +$B +$B;D(B +$B]K(B +$B]M(B +$B?#(B +$B]L(B +$B]N(B +$B]O(B +$B]P(B +$B]Q(B +$B]R(B +$B]T(B +$B]S(B +$B]U(B +$B2%(B +$BCJ(B +$B]V(B +$B;&(B +$B3L(B +$B]W(B +$BEB(B +$BTL(B +$B5#(B +$B]X(B +$B]Y(B +$BJl(B +$BKh(B +$BFG(B +$B]Z(B +$BHf(B +$BzZ(B +$BH{(B +$BLS(B +$B][(B +$B]](B +$B]\(B +$B]_(B +$B]^(B +$B]a(B +$B;a(B +$BL1(B +$B]b(B +$B]c(B +$B5$(B +$B]d(B +$B]f(B +$B]e(B +$B?e(B +$BI9(B +$B1J(B +$BHE(B +$Bz[(B +$BDu(B +$B=A(B +$B5a(B +$BHF(B +$B<.(B +$B]h(B +$B4@(B +$B1x(B +$Bz\(B +$BFr(B +$B]g(B +$B9>(B +$BCS(B +$B]i(B +$B]q(B +$B]j(B +$Bz^(B +$BBA(B +$B5b(B +$B]r(B +$B7h(B +$B5%(B +$B]p(B +$B]n(B +$B]k(B +$BM`(B +$Bz](B +$BD@(B +$BFY(B +$B]l(B +$B]t(B +$B]s(B +$B7#(B +$B2-(B +$B:;(B +$B]m(B +$B]o(B +$BKW(B +$BBt(B +$BKw(B +$B]|(B +$B]}(B +$B2O(B +$BJ((B +$BL}(B +$B^!(B +$B<#(B +$B>B(B +$B]x(B +$B]~(B +$B1h(B +$B67(B +$B]u(B +$B]z(B +$B@t(B +$BGq(B +$BHg(B +$B]w(B +$BK!(B +$B]y(B +$B^$(B +$Bz_(B +$B^"(B +$B]{(B +$BK"(B +$BGH(B +$B5c(B +$BE%(B +$BCm(B +$B^%(B +$B^#(B +$BBY(B +$B]v(B +$B1K(B +$Bz`(B +$BMN(B +$B^0(B +$B^/(B +$B@v(B +$B^,(B +$BMl(B +$BF6(B +$B^&(B +$BDE(B +$B1L(B +$B9?(B +$B^)(B +$B='(B +$B^.(B +$B^-(B +$B^((B +$B^+(B +$B3h(B +$B^*(B +$BGI(B +$BN.(B +$B>t(B +$B@u(B +$B^6(B +$B^4(B +$BIM(B +$B^1(B +$B^3(B +$B1:(B +$B9@(B +$BO2(B +$B3=(B +$BIb(B +$Bzb(B +$BMa(B +$B3$(B +$B?;(B +$B^5(B +$B^:(B +$Bza(B +$B>C(B +$BM0(B +$B^7(B +$B^2(B +$B^8(B +$Bzc(B +$BN^(B +$BEs(B +$BFB(B +$Bzd(B +$B36(B +$B1U(B +$B^>(B +$B^A(B +$BNC(B +$BMd(B +$B^H(B +$B^B(B +$B^?(B +$BNT(B +$B^E(B +$Bze(B +$B=J(B +$B^G(B +$B^L(B +$BEq(B +$B^J(B +$B^D(B +$BC8(B +$B^K(B +$B^@(B +$B^F(B +$B^M(B +$B0|(B +$B^C(B +$B^N(B +$B?<(B +$Bzg(B +$B=_(B +$BJ%(B +$B:.(B +$Bzf(B +$B^;(B +$B^I(B +$BE:(B +$Bzh(B +$B@6(B +$B3i(B +$B:Q(B +$B>D(B +$B^=(B +$B=B(B +$B7L(B +$B^<(B +$B^R(B +$B=m(B +$B8:(B +$B^a(B +$B^[(B +$B5t(B +$BEO(B +$B^V(B +$B^_(B +$B0/(B +$B12(B +$Bzk(B +$B29(B +$B^X(B +$BB,(B +$B^O(B +$B^Q(B +$B9A(B +$B^b(B +$Bzi(B +$B^](B +$Bzl(B +$B^U(B +$B^\(B +$BL+(B +$B^Z(B +$B^^(B +$B8P(B +$B>E(B +$BC9(B +$Bzj(B +$B^T(B +$BM/(B +$B^W(B +$B^P(B +$BEr(B +$B^S(B +$B^Y(B +$BOQ(B +$B<>(B +$BK~(B +$B^c(B +$BH.(B +$B^o(B +$B8;(B +$B=`(B +$B^e(B +$BN/(B +$B9B(B +$B^r(B +$B0n(B +$B^p(B +$B^d(B +$B^j(B +$B^l(B +$BMO(B +$B^g(B +$BE.(B +$B^i(B +$Bzm(B +$B^q(B +$B^k(B +$BLG(B +$B^f(B +$B<"(B +$B^~(B +$B3j(B +$B^h(B +$B^m(B +$B^n(B +$BBl(B +$BBZ(B +$B^v(B +$B^|(B +$B^z(B +$BE)(B +$B_#(B +$B^w(B +$B^x(B +$B^`(B +$B5y(B +$BI:(B +$B +$B9w(B +$BO3(B +$B^t(B +$B_"(B +$B1i(B +$BAf(B +$BGy(B +$B4A(B +$BNz(B +$BL!(B +$BDR(B +$B^{(B +$B^}(B +$BA2(B +$B_!(B +$B^y(B +$B^s(B +$B4C(B +$B7i(B +$B_/(B +$B_*(B +$B@x(B +$B3c(B +$B=a(B +$B_3(B +$B_,(B +$BD,(B +$B_)(B +$BDY(B +$B_L(B +$B_&(B +$B_%(B +$B_.(B +$B_((B +$B_'(B +$B_-(B +$B@!(B +$B_$(B +$Bzn(B +$B_0(B +$B_1(B +$B4B(B +$B_6(B +$B_5(B +$B_7(B +$B_:(B +$BEC(B +$B_4(B +$Bzo(B +$B_8(B +$B7c(B +$BBy(B +$B_2(B +$BG;(B +$B_9(B +$B_>(B +$B_<(B +$B_?(B +$B_B(B +$B_;(B +$B9j(B +$BG((B +$B^9(B +$BMt(B +$B_=(B +$B_A(B +$BBu(B +$B_@(B +$B_+(B +$Bzp(B +$Boi(B +$B_E(B +$B_I(B +$B_G(B +$Bzq(B +$Bzr(B +$B_C(B +$B_D(B +$B_H(B +$B_F(B +$BIN(B +$B_N(B +$B_K(B +$B_J(B +$B_M(B +$BFT(B +$B_O(B +$BCu(B +$BBm(B +$Bzs(B +$B@%(B +$B_P(B +$B_R(B +$B_Q(B +$B^u(B +$B_S(B +$BFg(B +$B_T(B +$B2P(B +$BEt(B +$B3%(B +$B5d(B +$B<^(B +$B:R(B +$Bzt(B +$BO'(B +$B?f(B +$B1j(B +$B_V(B +$B_U(B +$Bzu(B +$B_Y(B +$BC:(B +$B_\(B +$B_W(B +$B_[(B +$B_Z(B +$BE@(B +$B0Y(B +$By'(B +$BNu(B +$B_^(B +$B1((B +$B_`(B +$B__(B +$B_](B +$B_X(B +$BK#(B +$B_b(B +$Bzw(B +$B_a(B +$Bzv(B +$B1k(B +$B_d(B +$BJ2(B +$B_c(B +$BL5(B +$B>G(B +$BA3(B +$B>F(B +$Bzy(B +$Bzz(B +$BN{(B +$B_j(B +$B@y(B +$B_f(B +$B_k(B +$B1l(B +$Bzx(B +$B_i(B +$BGa(B +$B_e(B +$B_h(B +$B>H(B +$BHQ(B +$B_l(B +$B +$B@z(B +$B_o(B +$B_g(B +$B7'(B +$B_m(B +$BMP(B +$B_p(B +$Bt&(B +$B=O(B +$B_q(B +$B_r(B +$BG.(B +$B_t(B +$B_u(B +$Bz|(B +$BG3(B +$BEu(B +$B_w(B +$B_y(B +$BNU(B +$B_v(B +$B_x(B +$B1m(B +$B_s(B +$BS[(B +$B_z(B +$BAg(B +$B;8(B +$B_|(B +$B_{(B +$B?$(B +$BRY(B +$B_}(B +$B`!(B +$B_n(B +$B_~(B +$Bz}(B +$B`"(B +$BGz(B +$B`#(B +$B`$(B +$B`%(B +$B`&(B +$BD^(B +$B`((B +$B`'(B +$B`)(B +$B`*(B +$B<_(B +$BIc(B +$BLl(B +$B`+(B +$B`,(B +$BAV(B +$B<$(B +$B`-(B +$B`.(B +$B`/(B +$BJR(B +$BHG(B +$B`0(B +$BGW(B +$BD-(B +$B`1(B +$B2g(B +$B5m(B +$BLF(B +$BL6(B +$B24(B +$BO4(B +$BKR(B +$BJ*(B +$B@7(B +$B`2(B +$BFC(B +$B8#(B +$B`3(B +$B:T(B +$B`5(B +$B`4(B +$B`6(B +$B`7(B +$B`8(B +$B5>(B +$B`9(B +$B`:(B +$B8$(B +$BHH(B +$Bz~(B +$B`<(B +$B>u(B +$B`;(B +$B{!(B +$B68(B +$B`=(B +$B`?(B +$B`>(B +$B`@(B +$B8Q(B +$B`A(B +$B6i(B +$BA@(B +$B9}(B +$B`C(B +$B`D(B +$B`B(B +$B +$BFH(B +$B69(B +$B`F(B +$BC,(B +$B`E(B +$BO5(B +$BGb(B +$B`I(B +$B`K(B +$B`H(B +$BLT(B +$B`J(B +$B`L(B +$BND(B +$B{"(B +$B`P(B +$B`O(B +$BCv(B +$BG-(B +$B8%(B +$B`N(B +$B`M(B +$BM1(B +$BM2(B +$B`Q(B +$B1n(B +$B9v(B +$B;b(B +$B`R(B +$B`S(B +$B`U(B +$B=C(B +$B`W(B +$B`V(B +$B`X(B +$B3M(B +$B`Z(B +$B{$(B +$B`Y(B +$B`\(B +$B`[(B +$B8<(B +$BN((B +$B6L(B +$B2&(B +$B6j(B +$B4a(B +$BNh(B +$B`^(B +$B``(B +$B{%(B +$B`a(B +$B2Q(B +$B`](B +$B{&(B +$B;9(B +$BDA(B +$B`_(B +$B{)(B +$B{'(B +$B`d(B +$B +$B{((B +$B`b(B +$B7>(B +$BHI(B +$B`c(B +$B`~(B +$B{+(B +$B`i(B +$B8=(B +$B5e(B +$B`f(B +$BM}(B +$B{*(B +$BN0(B +$BBv(B +$B`h(B +$B{,(B +$B{.(B +$B{-(B +$B{/(B +$B`j(B +$BNV(B +$B6W(B +$BH|(B +$BGJ(B +$B`k(B +$B`m(B +$B`p(B +$B`l(B +$B`o(B +$B8j(B +$B1M(B +$B`q(B +$B?p(B +$B`n(B +$BN\(B +$B{0(B +$B`t(B +$Bt$(B +$B`r(B +$B`u(B +$B`g(B +$B`s(B +$B:<(B +$B`v(B +$B`w(B +$BM~(B +$B{1(B +$B`x(B +$B`y(B +$B{2(B +$B`e(B +$B`z(B +$B4D(B +$B<%(B +$B`{(B +$B`|(B +$B`}(B +$B1;(B +$Ba!(B +$BI;(B +$Ba"(B +$B4$(B +$Ba#(B +$Ba$(B +$Ba%(B +$Ba'(B +$Ba((B +$Ba&(B +$BIS(B +$Ba*(B +$Ba)(B +$B{3(B +$Ba,(B +$Ba+(B +$Ba-(B +$Ba.(B +$Ba0(B +$Ba/(B +$B9y(B +$Ba2(B +$Ba1(B +$B4E(B +$B?S(B +$BE<(B +$Ba3(B +$B@8(B +$B;:(B +$B1y(B +$Ba4(B +$BMQ(B +$BJc(B +$Ba5(B +$Byl(B +$BED(B +$BM3(B +$B9C(B +$B?=(B +$BCK(B +$BR4(B +$BD.(B +$B2h(B +$Ba6(B +$Ba7(B +$Ba<(B +$Ba:(B +$Ba9(B +$BZB(B +$B3&(B +$Ba8(B +$B0Z(B +$BH*(B +$BHJ(B +$BN1(B +$Ba=(B +$Ba;(B +$BC\(B +$B@&(B +$BH+(B +$BI-(B +$Ba?(B +$BN,(B +$B7M(B +$Ba@(B +$Ba>(B +$BHV(B +$BaA(B +$BaB(B +$B{4(B +$B0[(B +$B>v(B +$BaG(B +$BaD(B +$BFm(B +$BaC(B +$B5&(B +$BaJ(B +$BaE(B +$BaF(B +$BaI(B +$BaH(B +$BI%(B +$BAB(B +$BAA(B +$B5?(B +$BaK(B +$BaL(B +$BaM(B +$BaO(B +$BaN(B +$B1V(B +$BaW(B +$BHh(B +$BaQ(B +$BaS(B +$BaU(B +$B?>(B +$BaV(B +$BaT(B +$B<@(B +$BaP(B +$BaR(B +$BIB(B +$B>I(B +$BaY(B +$BaX(B +$BaZ(B +$B<&(B +$B:/(B +$BEw(B +$Ba[(B +$BDK(B +$Ba](B +$BN!(B +$Ba\(B +$BAi(B +$Bab(B +$Bad(B +$Bae(B +$BCT(B +$Bac(B +$Ba`(B +$Ba^(B +$Ba_(B +$Baa(B +$Bah(B +$Baf(B +$Bag(B +$Bai(B +$Bak(B +$Bal(B +$Bam(B +$Ban(B +$Baj(B +$Bap(B +$Bao(B +$Baq(B +$BNE(B +$Bat(B +$Bar(B +$Bas(B +$B4b(B +$BL~(B +$BJJ(B +$Bav(B +$Bau(B +$Baw(B +$Bax(B +$Ba|(B +$Bay(B +$Baz(B +$Ba{(B +$Ba}(B +$Ba~(B +$Bb!(B +$Bb"(B +$Bb#(B +$BH/(B +$BEP(B +$Bb$(B +$BGr(B +$BI4(B +$Bb%(B +$B{5(B +$Bb&(B +$BE*(B +$B3'(B +$B9D(B +$Bb'(B +$Bb((B +$Bb)(B +$B;)(B +$Bb+(B +$Bb*(B +$Bb,(B +$Bb-(B +$B{8(B +$B{6(B +$B{7(B +$B{9(B +$BHi(B +$Bb.(B +$Bb/(B +$Bsi(B +$Bb0(B +$Bb1(B +$Bb2(B +$B;.(B +$Bb3(B +$BGV(B +$BK_(B +$B1N(B +$B1W(B +$Bb4(B +$Bb6(B +$Bb5(B +$BEp(B +$B@9(B +$B]9(B +$Bb7(B +$BLA(B +$Bb8(B +$B4F(B +$BHW(B +$Bb9(B +$Bb:(B +$Bb;(B +$BL\(B +$BLU(B +$BD>(B +$BAj(B +$Bb=(B +$B=b(B +$B>J(B +$Bb@(B +$Bb?(B +$Bb>(B +$BH}(B +$B4G(B +$B8)(B +$BbF(B +$BbC(B +$B??(B +$BL2(B +$BbB(B +$BbD(B +$BbE(B +$BbA(B +$BbG(B +$BbH(B +$BD/(B +$B4c(B +$BCe(B +$B{;(B +$BbI(B +$BbJ(B +$BbM(B +$B?g(B +$BFD(B +$BbN(B +$BKS(B +$BbK(B +$BbL(B +$BbQ(B +$BbP(B +$BbO(B +$BbS(B +$BbR(B +$BbT(B +$BbV(B +$BbU(B +$BJM(B +$B=V(B +$BNF(B +$BbW(B +$BF7(B +$BbX(B +$BbY(B +$Bb](B +$Bb[(B +$Bb\(B +$BbZ(B +$Bb^(B +$Bb_(B +$Bb`(B +$Bba(B +$BL7(B +$Bbb(B +$BLp(B +$Bbc(B +$BCN(B +$BGj(B +$B6k(B +$BC;(B +$Bbd(B +$B6:(B +$B@P(B +$Bbe(B +$B:=(B +$Bbf(B +$Bbg(B +$B8&(B +$B:U(B +$Bbi(B +$B{=(B +$BEV(B +$B:V(B +$B5N(B +$BK$(B +$BGK(B +$BEW(B +$B9\(B +$Bbk(B +$B{>(B +$B>K(B +$B{?(B +$BN2(B +$B9E(B +$B8'(B +$BH#(B +$Bbm(B +$B{@(B +$Bbo(B +$B8k(B +$Bbn(B +$BDv(B +$Bbq(B +$B37(B +$Bbl(B +$BHj(B +$B10(B +$B:l(B +$BOR(B +$Bbp(B +$Bbr(B +$BJK(B +$B@Y(B +$Bbt(B +$Bbu(B +$Bbs(B +$B3N(B +$Bb{(B +$Bbz(B +$B<'(B +$Bb|(B +$Bbw(B +$Bb}(B +$Bbx(B +$BHX(B +$Bbv(B +$Bby(B +$Bc"(B +$Bc!(B +$BKa(B +$Bb~(B +$B0k(B +$Bc$(B +$Bc#(B +$B>L(B +$Bc%(B +$BAC(B +$Bc'(B +$Bc&(B +$Bc((B +$Bbh(B +$Bbj(B +$Bc*(B +$Bc)(B +$B{A(B +$B<((B +$BNi(B +$B +$Bc+(B +$B77(B +$B5@(B +$B5'(B +$B;c(B +$BM4(B +$Bc1(B +$Bc0(B +$BAD(B +$Bc-(B +$Bc/(B +$B=K(B +$B?@(B +$Bc.(B +$Bc,(B +$BG*(B +$B>M(B +$BI<(B +$B:W(B +$BEx(B +$Bc2(B +$Bc3(B +$BcI(B +$B6X(B +$BO=(B +$BA5(B +$Bc4(B +$B2R(B +$BDw(B +$BJ!(B +$B{E(B +$B{G(B +$Bc5(B +$B5z(B +$Bc6(B +$Bc8(B +$Bc9(B +$BG)(B +$Bc:(B +$Bc;(B +$Bc<(B +$B6Y(B +$B2S(B +$BFE(B +$B=((B +$B;d(B +$Bc=(B +$B=)(B +$B2J(B +$BIC(B +$Bc>(B +$BHk(B +$BAE(B +$BcA(B +$BcB(B +$BGi(B +$B?A(B +$Bc?(B +$BCa(B +$Bc@(B +$B>N(B +$B0\(B +$B5)(B +$BcC(B +$BDx(B +$BcD(B +$B@G(B +$BL-(B +$BI#(B +$BcE(B +$BcF(B +$BCU(B +$BNG(B +$BcH(B +$BcG(B +$B +$BcJ(B +$B0p(B +$BcM(B +$BcK(B +$B2T(B +$B7N(B +$BcL(B +$B9F(B +$B9r(B +$BJf(B +$BcN(B +$BKT(B +$BcP(B +$B@Q(B +$B1O(B +$B2:(B +$B0,(B +$BcO(B +$BcQ(B +$BcR(B +$B>w(B +$BcS(B +$B3O(B +$BcU(B +$B7j(B +$B5f(B +$BcV(B +$B6u(B +$BcW(B +$B@|(B +$BFM(B +$B@`(B +$B:u(B +$BcX(B +$BCb(B +$BAk(B +$BcZ(B +$Bc\(B +$BcY(B +$Bc[(B +$B7"(B +$Bc](B +$B7&(B +$B5g(B +$BMR(B +$Bc_(B +$Bc`(B +$B1.(B +$Bcc(B +$B3v(B +$Bcb(B +$Bca(B +$Bce(B +$Bc^(B +$Bcf(B +$BN)(B +$Bcg(B +$Bch(B +$B{H(B +$BTt(B +$Bcj(B +$Bci(B +$Bck(B +$Bcl(B +$BN5(B +$Bcm(B +$Bpo(B +$B>O(B +$Bcn(B +$Bco(B +$B=W(B +$BF8(B +$Bcp(B +$B{I(B +$BC((B +$B{K(B +$Bcq(B +$BC<(B +$Bcr(B +$B6%(B +$BQ?(B +$BC](B +$B<3(B +$B4H(B +$Bcs(B +$Bd"(B +$Bcv(B +$B5h(B +$Bcu(B +$Bd$(B +$Bct(B +$B>P(B +$Bcx(B +$Bcy(B +$BE+(B +$Bcz(B +$B3^(B +$B?Z(B +$BId(B +$Bc|(B +$BBh(B +$Bcw(B +$Bc{(B +$Bc}(B +$B:{(B +$Bd&(B +$BI.(B +$BH&(B +$BEy(B +$B6Z(B +$Bd%(B +$Bd#(B +$BH5(B +$Bc~(B +$BC^(B +$BE{(B +$BEz(B +$B:v(B +$Bd8(B +$Bd((B +$Bd*(B +$Bd-(B +$Bd.(B +$Bd+(B +$Bd,(B +$Bd)(B +$Bd'(B +$Bd!(B +$BJO(B +$B2U(B +$Bd5(B +$Bd2(B +$Bd7(B +$Bd6(B +$BGs(B +$BL'(B +$B;;(B +$Bd0(B +$Bd9(B +$Bd4(B +$Bd3(B +$Bd/(B +$B{L(B +$Bd1(B +$B4I(B +$BC=(B +$B@}(B +$BH"(B +$Bd>(B +$BH$(B +$B@a(B +$Bd;(B +$BHO(B +$Bd?(B +$BJS(B +$BC[(B +$Bd:(B +$Bd<(B +$Bd=(B +$Bd@(B +$B +$BFF(B +$BdE(B +$BdD(B +$BdA(B +$BO6(B +$BdJ(B +$BdN(B +$BdK(B +$BdG(B +$BdH(B +$BdM(B +$BdB(B +$BRU(B +$BdI(B +$BdC(B +$BdL(B +$BdR(B +$B4J(B +$BdO(B +$BdP(B +$BdQ(B +$BdT(B +$BdS(B +$BHv(B +$BdU(B +$BN|(B +$BJm(B +$BdZ(B +$BdW(B +$BdV(B +$B@R(B +$BdY(B +$Bd[(B +$BdX(B +$Bd_(B +$Bd\(B +$Bd](B +$BdF(B +$Bd^(B +$Bd`(B +$Bda(B +$BJF(B +$Bdb(B +$BLb(B +$B6N(B +$B7)(B +$Bdc(B +$BJ4(B +$B?h(B +$BL0(B +$Bdd(B +$BN3(B +$BGt(B +$BAF(B +$BG4(B +$B=M(B +$B0@(B +$Bdi(B +$Bdg(B +$Bde(B +$B4!(B +$B>Q(B +$Bdj(B +$Bdh(B +$Bdf(B +$Bdn(B +$Bdm(B +$Bdl(B +$Bdk(B +$Bdo(B +$Bdp(B +$B@:(B +$Bdq(B +$Bds(B +$Bdr(B +$B8R(B +$BA8(B +$Bdu(B +$BE|(B +$Bdt(B +$Bdv(B +$BJ5(B +$BAl(B +$B9G(B +$Bdw(B +$BNH(B +$Bdy(B +$Bdz(B +$Bd{(B +$Bd|(B +$B;e(B +$Bd}(B +$B7O(B +$B5j(B +$B5*(B +$Be!(B +$BLs(B +$B9H(B +$Bd~(B +$Be$(B +$BLf(B +$BG<(B +$BI3(B +$B=c(B +$Be#(B +$B +$B9I(B +$B;f(B +$B5i(B +$BJ6(B +$Be"(B +$BAG(B +$BKB(B +$B:w(B +$B;g(B +$BD](B +$Be'(B +$BN_(B +$B:Y(B +$Be((B +$B?B(B +$Be*(B +$B>R(B +$B:0(B +$Be)(B +$B=*(B +$B8>(B +$BAH(B +$Be%(B +$Be+(B +$B{N(B +$Be&(B +$B7P(B +$Be.(B +$Be2(B +$B7k(B +$Be-(B +$Be6(B +$B{O(B +$B9J(B +$BMm(B +$B0<(B +$Be3(B +$B5k(B +$Be0(B +$Be1(B +$BE}(B +$Be/(B +$Be,(B +$B3((B +$B@d(B +$B8((B +$Be8(B +$Be5(B +$Be7(B +$Be4(B +$B7Q(B +$BB3(B +$Be9(B +$BAn(B +$BeF(B +$B{Q(B +$BeB(B +$Be<(B +$Be@(B +$B +$B0](B +$Be;(B +$BeC(B +$BeG(B +$B9K(B +$BLV(B +$BDV(B +$Be=(B +$B{P(B +$BeE(B +$Be:(B +$BC>(B +$Be?(B +$B0=(B +$BLJ(B +$Be>(B +$B6[(B +$BHl(B +$BAm(B +$BNP(B +$B=o(B +$Ben(B +$B{R(B +$BeH(B +$B@~(B +$BeD(B +$BeI(B +$BeK(B +$BDy(B +$BeN(B +$BeJ(B +$BJT(B +$B4K(B +$BLK(B +$B0^(B +$BeM(B +$BN}(B +$BeL(B +$B1o(B +$BFl(B +$BeO(B +$BeV(B +$BeP(B +$BeW(B +$BeS(B +$BG{(B +$B +$BeU(B +$BeR(B +$BeX(B +$BeQ(B +$B=D(B +$BK%(B +$B=L(B +$BeT(B +$Be`(B +$Be\(B +$Be_(B +$Be](B +$Bea(B +$Be[(B +$BeA(B +$B@S(B +$BHK(B +$Be^(B +$BeY(B +$BA!(B +$B7R(B +$B=+(B +$B{S(B +$B?%(B +$BA6(B +$Bed(B +$Bef(B +$Beg(B +$Bec(B +$Bee(B +$BeZ(B +$Beb(B +$Bej(B +$Bei(B +$BKz(B +$B7+(B +$Beh(B +$Bel(B +$Bek(B +$Beo(B +$Beq(B +$B;<(B +$Bem(B +$Ber(B +$Bes(B +$By!(B +$Bet(B +$Bez(B +$BE;(B +$Bev(B +$Beu(B +$Bew(B +$Bex(B +$Bey(B +$Be{(B +$Be|(B +$B4L(B +$Be}(B +$Be~(B +$Bf!(B +$B{T(B +$Bf"(B +$Bf#(B +$Bf$(B +$Bf%(B +$Bf&(B +$Bf((B +$Bf'(B +$Bf)(B +$Bf*(B +$Bf+(B +$Bf.(B +$Bf,(B +$Bf-(B +$B:a(B +$B7S(B +$BCV(B +$BH3(B +$B=p(B +$BGM(B +$BHm(B +$Bf/(B +$BXm(B +$Bf0(B +$Bf2(B +$BMe(B +$Bf1(B +$Bf4(B +$Bf3(B +$BMS(B +$Bf5(B +$BH~(B +$Bf6(B +$Bf9(B +$Bf8(B +$Bf7(B +$B{U(B +$Bf:(B +$B72(B +$BA"(B +$B5A(B +$Bf>(B +$Bf;(B +$Bf<(B +$Bf?(B +$Bf@(B +$Bf=(B +$B1)(B +$B2'(B +$BfB(B +$BfC(B +$BfD(B +$BMb(B +$B=,(B +$BfF(B +$BfE(B +$B?i(B +$BfG(B +$BfH(B +$BfI(B +$B4e(B +$B4M(B +$BfJ(B +$BfK(B +$BK](B +$BMc(B +$BMT(B +$BO7(B +$B9M(B +$BfN(B +$B +$BfM(B +$BfO(B +$B<)(B +$BBQ(B +$BfP(B +$B9L(B +$BLW(B +$BfQ(B +$BfR(B +$BfS(B +$BfT(B +$BfU(B +$B<*(B +$BLm(B +$BfW(B +$BC?(B +$BfV(B +$BfY(B +$BfX(B +$BfZ(B +$B@;(B +$Bf[(B +$Bf\(B +$BJ9(B +$Bf](B +$BAo(B +$Bf^(B +$Bf_(B +$BN~(B +$Bfb(B +$Bfa(B +$Bf`(B +$BD0(B +$Bfc(B +$B?&(B +$Bfd(B +$Bfe(B +$BO8(B +$Bff(B +$Bfg(B +$Bfi(B +$Bfh(B +$BH%(B +$BFy(B +$BO>(B +$BH)(B +$Bfk(B +$B>S(B +$BI*(B +$Bfl(B +$Bfj(B +$B4N(B +$B8T(B +$B;h(B +$BHn(B +$B8*(B +$BKC(B +$Bfo(B +$Bfm(B +$B9N(B +$B9O(B +$B0i(B +$B:h(B +$BGY(B +$B0_(B +$Bft(B +$BC@(B +$BGX(B +$BB[(B +$Bfv(B +$Bfr(B +$Bfu(B +$Bfp(B +$Bfs(B +$BK&(B +$B8U(B +$B0}(B +$Bfq(B +$Bfx(B +$Bfy(B +$BF9(B +$B6;(B +$Bg&(B +$BG=(B +$B;i(B +$B6<(B +$B@H(B +$BOF(B +$BL.(B +$Bfw(B +$B@T(B +$B5S(B +$Bfz(B +$Bf|(B +$Bf{(B +$Bf}(B +$BC&(B +$BG>(B +$BD1(B +$Bg#(B +$Bg"(B +$Bf~(B +$B?U(B +$BIe(B +$Bg%(B +$Bg$(B +$B9P(B +$BOS(B +$Bg5(B +$Bg)(B +$Bg*(B +$B +$Bg((B +$B9x(B +$Bg'(B +$Bg+(B +$BD2(B +$BJ"(B +$BA#(B +$BB\(B +$Bg/(B +$Bg0(B +$Bg,(B +$Bg-(B +$Bg.(B +$B9Q(B +$Bg6(B +$Bg2(B +$BIf(B +$BKl(B +$BI((B +$Bg1(B +$Bg4(B +$Bg3(B +$BKD(B +$Bg7(B +$Bg8(B +$BA7(B +$Bg9(B +$Bg;(B +$Bg?(B +$Bg<(B +$Bg:(B +$BG?(B +$Bg=(B +$Bg>(B +$B22(B +$BgE(B +$Bg@(B +$BgA(B +$BgB(B +$BB!(B +$BgD(B +$BgC(B +$BgF(B +$BgG(B +$BgH(B +$B?C(B +$B2i(B +$BgI(B +$BNW(B +$B<+(B +$B=-(B +$B;j(B +$BCW(B +$BgJ(B +$BgK(B +$B11(B +$BgL(B +$BgM(B +$BgN(B +$BgO(B +$BgP(B +$B6=(B +$BZ*(B +$BgQ(B +$B@e(B +$BgR(B +$B +$BgS(B +$BP0(B +$BgT(B +$BJ^(B +$B4\(B +$BA$(B +$B=X(B +$BIq(B +$B=.(B +$BgU(B +$B9R(B +$BgV(B +$BHL(B +$Bgd(B +$BgX(B +$BBI(B +$BGu(B +$B8?(B +$BgW(B +$BA%(B +$BgY(B +$BDz(B +$Bg[(B +$BgZ(B +$Bg](B +$Bg\(B +$Bg^(B +$Bg`(B +$Bg_(B +$B4O(B +$Bga(B +$Bgb(B +$Bgc(B +$B:1(B +$BNI(B +$Bge(B +$B?'(B +$B1p(B +$Bgf(B +$Bgg(B +$Bgh(B +$B0r(B +$Bgi(B +$Bgj(B +$BIg(B +$B +$Bgl(B +$B3)(B +$B02(B +$Bgk(B +$Bgn(B +$BGN(B +$B?D(B +$B2V(B +$BK'(B +$B7](B +$B6\(B +$Bgm(B +$B2j(B +$B4#(B +$B1q(B +$Bgr(B +$BNj(B +$BB](B +$BID(B +$Bg~(B +$B2W(B +$Bg|(B +$Bgz(B +$Bgq(B +$Bgo(B +$Bgp(B +$B +$B6l(B +$BCw(B +$BFQ(B +$B1Q(B +$Bgt(B +$Bgs(B +$Bgy(B +$Bgu(B +$Bgx(B +$B{W(B +$BLP(B +$Bgw(B +$B2X(B +$B3}(B +$Bg{(B +$Bg}(B +$B7T(B +$Bh#(B +$Bh,(B +$Bh-(B +$B0+(B +$Bh4(B +$B0q(B +$Bh+(B +$Bh*(B +$Bh%(B +$Bh$(B +$Bh"(B +$Bh!(B +$BCc(B +$BB{(B +$Bh'(B +$Bh&(B +$Bh)(B +$BAp(B +$B7U(B +$B1A(B +$Bh((B +$B9S(B +$BAq(B +$B{X(B +$Bh:(B +$Bh;(B +$B2Y(B +$B2.(B +$Bh8(B +$B{Y(B +$Bh.(B +$Bh6(B +$Bh=(B +$Bh7(B +$Bh5(B +$Bgv(B +$Bh3(B +$Bh/(B +$B4P(B +$Bh1(B +$Bh<(B +$Bh2(B +$Bh>(B +$Bh0(B +$BG|(B +$BMi(B +$Bh9(B +$BhO(B +$BhG(B +$B?{(B +$B{Z(B +$B5F(B +$B6](B +$BhB(B +$B2[(B +$B>T(B +$BhE(B +$B:Z(B +$BEQ(B +$BhJ(B +$BJn(B +$BhA(B +$B2Z(B +$B8V(B +$BI)(B +$BhK(B +$Bh?(B +$B{[(B +$BhH(B +$BhR(B +$BhC(B +$BhD(B +$BF:(B +$BhI(B +$BhF(B +$BK((B +$BhL(B +$B0`(B +$Bh@(B +$BhN(B +$BhM(B +$BGk(B +$BhT(B +$Bh_(B +$B3~(B +$Bhb(B +$BhP(B +$BhU(B +$BMn(B +$Bh^(B +$B{\(B +$BMU(B +$BN*(B +$BCx(B +$B3k(B +$BIr(B +$Bhd(B +$BF!(B +$B01(B +$Bh](B +$BhY(B +$BAr(B +$BhS(B +$Bh[(B +$Bh`(B +$BG,(B +$B0*(B +$BhX(B +$Bha(B +$BIx(B +$Bh\(B +$BhW(B +$B>U(B +$B=/(B +$B<,(B +$BLX(B +$BIG(B +$Bhg(B +$Bhp(B +$BhZ(B +$B3w(B +$B{](B +$B>x(B +$Bhe(B +$Bhj(B +$BAs(B +$Bhf(B +$Bhm(B +$BC_(B +$Bhn(B +$BMV(B +$Bhc(B +$B38(B +$Bhi(B +$Bhl(B +$BL,(B +$Bho(B +$Bhh(B +$Bhk(B +$By%(B +$BK)(B +$BO!(B +$Bhs(B +$Bhz(B +$Bhr(B +$B +$BhQ(B +$BJN(B +$BL"(B +$Bhy(B +$Bhx(B +$Bht(B +$Bhu(B +$B16(B +$Bhw(B +$Bhq(B +$BDU(B +$Bhv(B +$B0~(B +$BB"(B +$BJC(B +$Bh{(B +$Bi!(B +$BHY(B +$Bh~(B +$B>V(B +$B +$Bi#(B +$B6>(B +$B{^(B +$Bi$(B +$BIy(B +$Bh}(B +$B{_(B +$BhV(B +$Bh|(B +$BOO(B +$BF"(B +$BIs(B +$B{`(B +$Bi+(B +$Bi1(B +$Bi2(B +$Bi%(B +$BGv(B +$Bi/(B +$Bi'(B +$Bi)(B +$Bi3(B +$Bi((B +$Bi,(B +$B1r(B +$BFe(B +$Bi-(B +$Bi0(B +$Bi&(B +$BA&(B +$Bi*(B +$B;'(B +$B?E(B +$B70(B +$BLt(B +$BLy(B +$B=r(B +$B{b(B +$Bi7(B +$Bi5(B +$BON(B +$Bi4(B +$BMu(B +$Bi6(B +$Bi8(B +$Bi9(B +$Bi<(B +$Bi:(B +$BF#(B +$Bi;(B +$BHM(B +$Bi.(B +$B=s(B +$Bi=(B +$BiB(B +$BAt(B +$BiA(B +$Bi"(B +$BiC(B +$BAI(B +$Bi>(B +$Bi@(B +$Bi?(B +$B]1(B +$B]"(B +$BiE(B +$BiD(B +$BMv(B +$Bb<(B +$BiF(B +$BiG(B +$BiH(B +$B8W(B +$B5T(B +$BiJ(B +$BQ](B +$B5u(B +$BN:(B +$B6s(B +$BiK(B +$BiL(B +$BCn(B +$BiM(B +$BFz(B +$B0:(B +$B2c(B +$BiR(B +$BiS(B +$BiN(B +$B;=(B +$BiO(B +$BGB(B +$BiP(B +$BiQ(B +$Bi[(B +$BiU(B +$BiX(B +$BiT(B +$BiV(B +$BiW(B +$B +$BiY(B +$BCA(B +$B7V(B +$B3B(B +$Bi\(B +$B3?(B +$Bia(B +$Bi](B +$Bi`(B +$BH:(B +$Bi^(B +$Bi_(B +$BIH(B +$BHZ(B +$Bib(B +$BB}(B +$Bil(B +$Bih(B +$B2k(B +$Bif(B +$BK*(B +$Big(B +$Bid(B +$Bie(B +$Bij(B +$Bim(B +$Bik(B +$Bii(B +$Bic(B +$BCX(B +$Bit(B +$BL*(B +$Bir(B +$Bis(B +$Bin(B +$Bip(B +$Biq(B +$Bio(B +$B@f(B +$BO9(B +$Bix(B +$Biy(B +$Bj!(B +$B?*(B +$Bi{(B +$Bi~(B +$Biv(B +$Biu(B +$Bj"(B +$B2\(B +$Bi|(B +$Bj#(B +$Bi}(B +$Biz(B +$BD3(B +$Biw(B +$BGh(B +$Bj'(B +$BM;(B +$Bj&(B +$Bj%(B +$Bj.(B +$Bj((B +$Bj0(B +$BMf(B +$Bj3(B +$Bj*(B +$Bj+(B +$Bj/(B +$Bj2(B +$Bj1(B +$Bj)(B +$Bj,(B +$Bj=(B +$Bj6(B +$Bj4(B +$Bj5(B +$Bj:(B +$Bj;(B +$B3*(B +$B5B(B +$Bj9(B +$Bj$(B +$B{e(B +$Bj8(B +$Bj<(B +$Bj7(B +$Bj>(B +$Bj@(B +$Bj?(B +$BjB(B +$BjA(B +$BiZ(B +$BjF(B +$BjC(B +$BjD(B +$BjE(B +$BjG(B +$B7l(B +$BjI(B +$BjH(B +$B=0(B +$B9T(B +$B^'(B +$BjJ(B +$B=Q(B +$B39(B +$BjK(B +$B1R(B +$B>W(B +$BjL(B +$B9U(B +$BjM(B +$B0a(B +$BI=(B +$BjN(B +$B?j(B +$BjU(B +$BjR(B +$BCo(B +$BjS(B +$BjP(B +$B6^(B +$BjO(B +$BjV(B +$B76(B +$BB^(B +$Bj\(B +$BjX(B +$BB5(B +$BjW(B +$BjZ(B +$BjQ(B +$Bj[(B +$Bj](B +$BHo(B +$BjY(B +$Bj^(B +$Bj`(B +$B8S(B +$BjT(B +$B0A(B +$Bj_(B +$B:[(B +$BNv(B +$Bja(B +$Bjb(B +$BAu(B +$BN"(B +$Bjc(B +$BM5(B +$Bjd(B +$Bje(B +$BJd(B +$Bjf(B +$B:@(B +$BN#(B +$Bjk(B +$Bjl(B +$B>X(B +$Bjj(B +$B{f(B +$BMg(B +$Bjg(B +$Bji(B +$B@=(B +$B?~(B +$Bjh(B +$Bjm(B +$BJ#(B +$Bjo(B +$Bjn(B +$B3l(B +$BK+(B +$Bjp(B +$By"(B +$Bj|(B +$Bjr(B +$Bjs(B +$Bjt(B +$Bju(B +$Bjy(B +$Bjz(B +$Bjx(B +$Bjv(B +$Bjq(B +$Bjw(B +$Bj{(B +$Bp7(B +$B2((B +$Bj~(B +$B6_(B +$Bj}(B +$Bk"(B +$Bk!(B +$Bk$(B +$Bk#(B +$Bk%(B +$B=1(B +$Bk&(B +$Bk'(B +$Bk((B +$B@>(B +$BMW(B +$Bk)(B +$BJ$(B +$BGF(B +$Bk*(B +$Bk+(B +$B8+(B +$B5,(B +$Bk,(B +$B;k(B +$BGA(B +$Bk-(B +$B3P(B +$Bk.(B +$Bk0(B +$BMw(B +$Bk/(B +$B?F(B +$Bk1(B +$Bk2(B +$Bk3(B +$B4Q(B +$Bk4(B +$Bk5(B +$Bk6(B +$Bk7(B +$B3Q(B +$Bk8(B +$Bk9(B +$Bk:(B +$B2r(B +$B?((B +$Bk;(B +$Bk<(B +$Bk=(B +$B8@(B +$BD{(B +$Bk>(B +$B7W(B +$B?V(B +$BkA(B +$BF$(B +$Bk@(B +$B{g(B +$B71(B +$Bk?(B +$BBw(B +$B5-(B +$BkB(B +$BkC(B +$B>Y(B +$B7m(B +$BkD(B +$BK,(B +$B@_(B +$B5v(B +$BLu(B +$BAJ(B +$BkE(B +$B{h(B +$B?G(B +$BCp(B +$B>Z(B +$BkF(B +$BkI(B +$BkJ(B +$B:>(B +$BBB(B +$BkH(B +$B>[(B +$BI>(B +$BkG(B +$B;l(B +$B1S(B +$BkN(B +$B7X(B +$B;n(B +$B;m(B +$BOM(B +$BkM(B +$BkL(B +$BA'(B +$B5M(B +$BOC(B +$B3:(B +$B>\(B +$B{i(B +$BkK(B +$BkP(B +$BkQ(B +$BkO(B +$B8X(B +$BM@(B +$B;o(B +$BG'(B +$BkT(B +$B@@(B +$BCB(B +$BM6(B +$BkW(B +$B8l(B +$B@?(B +$BkS(B +$BkX(B +$B8m(B +$BkU(B +$BkV(B +$B{j(B +$BkR(B +$B@b(B +$BFI(B +$BC/(B +$B2](B +$BHp(B +$B5C(B +$B{k(B +$BD4(B +$Bk[(B +$BkY(B +$BCL(B +$B@A(B +$B4R(B +$BkZ(B +$B?[(B +$BNJ(B +$BO@(B +$Bk\(B +$Bkg(B +$BD5(B +$Bkf(B +$B{l(B +$Bkc(B +$Bkk(B +$Bkd(B +$Bk`(B +$BD|(B +$Bk_(B +$Bk](B +$BM!(B +$B;p(B +$Bka(B +$Bk^(B +$B{n(B +$Bke(B +$B=t(B +$B8A(B +$BBz(B +$BKE(B +$B1Z(B +$B0b(B +$BF%(B +$Bki(B +$Bkh(B +$BFf(B +$Bkm(B +$Bkb(B +$Bkl(B +$Bkn(B +$B8,(B +$Bkj(B +$B9V(B +$B +$Bko(B +$BMX(B +$Bkr(B +$Bku(B +$Bks(B +$BI5(B +$Bkp(B +$B6`(B +$Bkt(B +$Bkv(B +$Bkz(B +$Bkw(B +$Bky(B +$Bkx(B +$B{o(B +$Bk{(B +$B<1(B +$Bk}(B +$Bk|(B +$BIh(B +$Bl!(B +$B7Y(B +$Bk~(B +$Bl"(B +$Bl#(B +$B5D(B +$BfA(B +$B>y(B +$Bl$(B +$B8n(B +$Bl%(B +$B{p(B +$Bl&(B +$B;>(B +$BZN(B +$Bl'(B +$Bl((B +$B=2(B +$Bl)(B +$Bl*(B +$Bl+(B +$Bl,(B +$Bl-(B +$BC+(B +$Bl.(B +$Bl0(B +$Bl/(B +$BF&(B +$Bl1(B +$BK-(B +$Bl2(B +$Bl3(B +$Bl4(B +$Bl5(B +$BFZ(B +$B>](B +$Bl6(B +$B9k(B +$BP.(B +$Bl7(B +$Bl8(B +$BI?(B +$Bl9(B +$BlA(B +$Bl:(B +$Bl<(B +$Bl;(B +$Bl=(B +$BKF(B +$Bl>(B +$Bl?(B +$Bl@(B +$BlB(B +$B3-(B +$BDg(B +$BIi(B +$B:b(B +$B9W(B +$BIO(B +$B2_(B +$BHN(B +$BlE(B +$B4S(B +$B@U(B +$BlD(B +$BlI(B +$BCy(B +$BLc(B +$BlG(B +$BlH(B +$B5.(B +$BlJ(B +$BGc(B +$BB_(B +$BHq(B +$BE=(B +$BlF(B +$BKG(B +$B2l(B +$BlL(B +$BO((B +$BDB(B +$BOE(B +$B;q(B +$BlK(B +$BB1(B +$Bl\(B +$BA((B +$BFx(B +$BIP(B +$BlO(B +$B;?(B +$B;r(B +$B>^(B +$BGe(B +$B8-(B +$BlN(B +$BlM(B +$BIj(B +$B +$BER(B +$B{q(B +$B{r(B +$BlQ(B +$BlR(B +$B9X(B +$BlP(B +$BlS(B +$BlT(B +$BlV(B +$BB#(B +$BlU(B +$B4f(B +$BlX(B +$BlW(B +$BlY(B +$B{s(B +$Bl[(B +$Bl](B +$Bl^(B +$B@V(B +$B +$Bl_(B +$B3R(B +$Bl`(B +$BAv(B +$Bla(B +$Blb(B +$BIk(B +$B{t(B +$B5/(B +$Blc(B +$BD6(B +$B1[(B +$Bld(B +$B +$B?v(B +$BB-(B +$Blg(B +$Blf(B +$Ble(B +$Blm(B +$Blk(B +$Blh(B +$Blj(B +$Bli(B +$Bll(B +$B5w(B +$Blp(B +$B@W(B +$Blq(B +$B8Y(B +$Bln(B +$Blo(B +$BO)(B +$BD7(B +$BA)(B +$Blr(B +$Blu(B +$Bls(B +$Blt(B +$BMY(B +$BF'(B +$Blx(B +$Blv(B +$Blw(B +$Bly(B +$Bm)(B +$Bl|(B +$Bl}(B +$Bl{(B +$Blz(B +$BD}(B +$Bm!(B +$Bm%(B +$Bm"(B +$Bl~(B +$Bm#(B +$Bm$(B +$Bm+(B +$Bm&(B +$B@X(B +$Bm((B +$Bm*(B +$Bm'(B +$Bm-(B +$B=3(B +$Bm,(B +$Bm.(B +$Bm/(B +$Bm2(B +$Bm1(B +$Bm0(B +$Bm4(B +$Bm3(B +$BLv(B +$Bm6(B +$Bm5(B +$Bm7(B +$Bm8(B +$Bm:(B +$Bm9(B +$B?H(B +$Bm;(B +$B6m(B +$Bm<(B +$Bm>(B +$Bm?(B +$Bm@(B +$Bm=(B +$BmA(B +$B +$BmB(B +$B50(B +$B73(B +$B{v(B +$B8.(B +$BmC(B +$BFp(B +$BE>(B +$BmD(B +$BmG(B +$B<4(B +$BmF(B +$BmE(B +$B7Z(B +$BmH(B +$B3S(B +$BmJ(B +$B:\(B +$BmI(B +$BmR(B +$BmL(B +$BmN(B +$BJe(B +$BmK(B +$BmM(B +$BmQ(B +$BmO(B +$B51(B +$BmP(B +$BmS(B +$BGZ(B +$BNX(B +$B=4(B +$BmT(B +$BM"(B +$BmV(B +$BmU(B +$BmY(B +$BMA(B +$BmX(B +$B3m(B +$BmW(B +$Bm\(B +$Bm[(B +$BmZ(B +$BE2(B +$Bm](B +$Bm^(B +$Bm_(B +$B9l(B +$B7%(B +$Bm`(B +$Bma(B +$Bmb(B +$B?I(B +$Bmc(B +$B<-(B +$Bmd(B +$Bme(B +$BR!(B +$BQ~(B +$Bmf(B +$Bep(B +$Bmg(B +$BC$(B +$B?+(B +$BG@(B +$Bmh(B +$BJU(B +$BDT(B +$B9~(B +$BC)(B +$B1*(B +$BKx(B +$B?W(B +$B7^(B +$B6a(B +$BJV(B +$Bmi(B +$Bmk(B +$Bmj(B +$B2`(B +$BFv(B +$Bml(B +$BGw(B +$BE3(B +$Bmm(B +$B=R(B +$Bmo(B +$BLB(B +$Bm~(B +$Bmq(B +$Bmr(B +$BDI(B +$BB`(B +$BAw(B +$BF((B +$Bmp(B +$B5U(B +$Bmy(B +$Bmv(B +$Bn%(B +$BF)(B +$BC`(B +$Bms(B +$BD~(B +$BES(B +$Bmt(B +$Bmx(B +$B?`(B +$BGg(B +$BDL(B +$B@B(B +$Bmw(B +$BB.(B +$BB$(B +$Bmu(B +$B0)(B +$BO"(B +$Bmz(B +$BBa(B +$B=5(B +$B?J(B +$Bm|(B +$Bm{(B +$B0o(B +$Bm}(B +$BI/(B +$Bn'(B +$BF[(B +$B?k(B +$BCY(B +$B6x(B +$Bn&(B +$BM7(B +$B1?(B +$BJW(B +$B2a(B +$Bn!(B +$Bn"(B +$Bn#(B +$Bn$(B +$BF;(B +$BC#(B +$B0c(B +$Bn((B +$Bn)(B +$Bt#(B +$BB=(B +$Bn*(B +$B1s(B +$BAL(B +$B8/(B +$BMZ(B +$B{y(B +$Bn+(B +$BE,(B +$BAx(B +$B +$Bn,(B +$Bn/(B +$B=e(B +$Bn-(B +$BA+(B +$BA*(B +$B0d(B +$BNK(B +$Bn1(B +$BHr(B +$Bn3(B +$Bn2(B +$Bn0(B +$Bcd(B +$B4T(B +$Bmn(B +$Bn5(B +$Bn4(B +$Bn6(B +$BM8(B +$BFa(B +$BK.(B +$Bn7(B +$B +$Bn8(B +$Bn9(B +$Bn:(B +$BE!(B +$B0j(B +$B9Y(B +$BO:(B +$Bn>(B +$B{z(B +$B74(B +$Bn;(B +$Bn<(B +$BIt(B +$B3T(B +$BM9(B +$B6?(B +$BET(B +$Bn?(B +$Bn@(B +$B{|(B +$BnA(B +$B{}(B +$BE"(B +$BnC(B +$BnB(B +$BFS(B +$BnD(B +$B=6(B +$B<`(B +$BG[(B +$BCq(B +$B +$B?l(B +$BnE(B +$BnF(B +$B?](B +$BnG(B +$BnH(B +$BnI(B +$BMo(B +$B=7(B +$BnK(B +$BnJ(B +$B9Z(B +$B9s(B +$B;@(B +$BnN(B +$B=f(B +$BnM(B +$BnL(B +$BBi(B +$B8o(B +$B@C(B +$BH0(B +$B=9(B +$BnO(B +$B>_(B +$BnR(B +$BnP(B +$BnQ(B +$BnT(B +$BnS(B +$B>z(B +$BnU(B +$BnV(B +$BnW(B +$BHP(B +$B:S(B +$B +$BnX(B +$BnY(B +$BN$(B +$B=E(B +$BLn(B +$BNL(B +$BnZ(B +$B6b(B +$Bn[(B +$B|!(B +$BE#(B +$B{~(B +$Bn^(B +$B3x(B +$B?K(B +$B|"(B +$Bn\(B +$Bn](B +$BD`(B +$B|%(B +$B|&(B +$BKU(B +$B6|(B +$B|#(B +$B|$(B +$Bn`(B +$Bna(B +$Bn_(B +$Bnc(B +$B|'(B +$B|)(B +$BF_(B +$B3C(B +$B|((B +$Bng(B +$Bnd(B +$Bnf(B +$Bnb(B +$BoO(B +$Bne(B +$BNk(B +$B8Z(B +$B|0(B +$B|*(B +$B|,(B +$Bno(B +$B|+(B +$BE4(B +$Bnj(B +$Bnm(B +$Bnk(B +$Bnp(B +$B|-(B +$Bnq(B +$B|/(B +$Bni(B +$B|.(B +$Bnv(B +$B1t(B +$Bnh(B +$BH-(B +$Bnl(B +$B>`(B +$B|1(B +$B9[(B +$B|3(B +$B|4(B +$BKH(B +$B6d(B +$B=F(B +$BF<(B +$By$(B +$BA-(B +$Bnt(B +$Bnn(B +$Bns(B +$BLC(B +$BD8(B +$Bnu(B +$Bnr(B +$B|2(B +$BA,(B +$Bny(B +$Bnx(B +$Bnw(B +$B|8(B +$BK/(B +$B|<(B +$B|:(B +$B|6(B +$B|7(B +$B|;(B +$B={(B +$B|5(B +$Bnz(B +$BJ_(B +$B1T(B +$BIF(B +$BCr(B +$B5x(B +$By*(B +$Bn|(B +$B|?(B +$B9](B +$B|B(B +$B|D(B +$B;,(B +$Bn{(B +$B?m(B +$B?n(B +$Bo!(B +$Bo#(B +$B|C(B +$B|A(B +$B>{(B +$B|>(B +$Bo"(B +$Bo$(B +$B|=(B +$B6S(B +$BIE(B +$B +$BO#(B +$Bn~(B +$B:x(B +$BO?(B +$Bo&(B +$Bo%(B +$Bo'(B +$Bn}(B +$By#(B +$BFi(B +$BEU(B +$BDW(B +$Bo,(B +$B|F(B +$BCC(B +$Bo((B +$Bo)(B +$B7-(B +$Bo+(B +$B|E(B +$B80(B +$Bo*(B +$B>a(B +$B3y(B +$Bo0(B +$B:?(B +$BAy(B +$BDJ(B +$B|G(B +$B3;(B +$Bo.(B +$Bo/(B +$BDC(B +$Bo-(B +$Bo1(B +$Bo7(B +$B|H(B +$Bo:(B +$Bo9(B +$BE-(B +$Bo2(B +$Bo3(B +$Bo6(B +$Bo8(B +$B|I(B +$B6@(B +$Bo;(B +$Bo5(B +$Bo4(B +$B|J(B +$Bo?(B +$Bo@(B +$BoA(B +$Bo>(B +$Bo=(B +$B>b(B +$BF*(B +$Bo<(B +$BoE(B +$BoC(B +$B|K(B +$BoD(B +$BoB(B +$BBx(B +$BoF(B +$BoG(B +$BoI(B +$B|L(B +$B|M(B +$B4U(B +$BoH(B +$BLz(B +$BoT(B +$BoJ(B +$BoM(B +$BoK(B +$BoL(B +$BoN(B +$BoP(B +$BoQ(B +$BoR(B +$BoU(B +$BoS(B +$BoV(B +$BoX(B +$BoW(B +$BD9(B +$BLg(B +$BoY(B +$BA.(B +$BoZ(B +$BJD(B +$Bo[(B +$B3+(B +$B1<(B +$B4W(B +$B|N(B +$B4V(B +$Bo\(B +$Bo](B +$Bo^(B +$Bo_(B +$Bo`(B +$B4X(B +$B3U(B +$B9^(B +$BH6(B +$Bob(B +$Boa(B +$Boc(B +$B1\(B +$Bof(B +$Boe(B +$Bod(B +$Bog(B +$Boj(B +$B0G(B +$Boh(B +$Bol(B +$Bok(B +$Bon(B +$Bom(B +$Boo(B +$BF.(B +$Bop(B +$Boq(B +$Bos(B +$Bor(B +$BIl(B +$Bot(B +$Bou(B +$B:e(B +$Bov(B +$Bow(B +$BKI(B +$BAK(B +$B0$(B +$BBK(B +$Box(B +$BIm(B +$Bo{(B +$Boy(B +$B9_(B +$Boz(B +$B8B(B +$BJE(B +$Bo}(B +$Bp!(B +$Bo~(B +$Bp"(B +$B1!(B +$B?X(B +$B=|(B +$B4Y(B +$Bp#(B +$BGf(B +$Bp%(B +$B1"(B +$Bp$(B +$BDD(B +$BNM(B +$BF+(B +$Bo|(B +$BN&(B +$B81(B +$BM[(B +$B6y(B +$BN4(B +$B7((B +$BBb(B +$Bg!(B +$Bp&(B +$B3,(B +$B?o(B +$B3V(B +$Bp((B +$Bp)(B +$Bp'(B +$B7d(B +$B:](B +$B>c(B +$B|Q(B +$B1#(B +$BNY(B +$Bp+(B +$Bn.(B +$Bp*(B +$B|R(B +$Bp.(B +$Bp,(B +$Bp-(B +$Bp/(B +$Bp0(B +$BNl(B +$Bp1(B +$Bp2(B +$B@I(B +$BH;(B +$B?}(B +$B4g(B +$BM:(B +$B2m(B +$B=8(B +$B8[(B +$Bp5(B +$Bp4(B +$B;s(B +$Bp6(B +$Bp3(B +$B;((B +$Bp:(B +$Bj-(B +$BRV(B +$B?w(B +$Bp8(B +$BN%(B +$BFq(B +$B1+(B +$B@c(B +$B<6(B +$BJ7(B +$B1@(B +$BNm(B +$BMk(B +$Bp;(B +$BEE(B +$B<{(B +$Bp<(B +$Bp=(B +$B?L(B +$Bp>(B +$BNn(B +$Bp9(B +$Bp@(B +$BpB(B +$BpA(B +$Bp?(B +$BpC(B +$BpD(B +$BAz(B +$B2b(B +$BpE(B +$BL8(B +$BpF(B +$BpG(B +$BO*(B +$B|S(B +$B[1(B +$BpH(B +$B|T(B +$BpI(B +$BpJ(B +$BpN(B +$B|U(B +$BpK(B +$BpL(B +$BpM(B +$BpO(B +$B|V(B +$B|W(B +$B|X(B +$B@D(B +$B|Y(B +$BLw(B +$B@E(B +$BpP(B +$BHs(B +$BpQ(B +$BsS(B +$BLL(B +$BpR(B +$BpS(B +$BpT(B +$B3W(B +$BpV(B +$B?Y(B +$BpW(B +$B7$(B +$BpX(B +$Bp\(B +$BpZ(B +$Bp[(B +$B3s(B +$BpY(B +$Bp](B +$Bp^(B +$B0H(B +$Bp_(B +$Bp`(B +$B>d(B +$Bpa(B +$B5G(B +$Bpd(B +$Bpc(B +$Bpb(B +$Bkq(B +$BJ\(B +$Bpe(B +$Bpf(B +$Bpg(B +$Bph(B +$Bpi(B +$Bpj(B +$B4Z(B +$Bpk(B +$Bpl(B +$BG#(B +$Bpn(B +$B2;(B +$Bpq(B +$Bpp(B +$B1$(B +$B6A(B +$BJG(B +$BD:(B +$B:"(B +$B9`(B +$B=g(B +$B?\(B +$Bps(B +$Bpr(B +$BMB(B +$B4h(B +$BHR(B +$BF\(B +$B?|(B +$BNN(B +$B7[(B +$Bpv(B +$Bpu(B +$BKK(B +$BF,(B +$B1P(B +$Bpw(B +$Bpt(B +$BIQ(B +$BMj(B +$Bpx(B +$Bpy(B +$Bp{(B +$BBj(B +$B3[(B +$B3\(B +$Bpz(B +$B4i(B +$B82(B +$B|Z(B +$B4j(B +$BE?(B +$BN`(B +$B|[(B +$B8\(B +$Bp|(B +$Bp}(B +$Bp~(B +$Bq!(B +$Bq#(B +$Bq"(B +$BIw(B +$Bq$(B +$Bq%(B +$Bq&(B +$Bq'(B +$Bq)(B +$Bq((B +$Bq*(B +$BHt(B +$BfL(B +$B?)(B +$B52(B +$Bq+(B +$Bq,(B +$BR,(B +$B];(B +$BHS(B +$B0{(B +$B0;(B +$B;t(B +$BK0(B +$B>~(B +$Bq-(B +$BL_(B +$Bq.(B +$BM\(B +$B1B(B +$B;A(B +$Bq/(B +$B2n(B +$Bq0(B +$Bq1(B +$Bq3(B +$Bq4(B +$Bq6(B +$Bq2(B +$Bq5(B +$B|^(B +$B4[(B +$Bq7(B +$Bq8(B +$Bq9(B +$Bq:(B +$Bq;(B +$Bq=(B +$Bq<(B +$Bq?(B +$BqB(B +$Bq>(B +$Bq@(B +$BqA(B +$BqC(B +$B6B(B +$B +$BqD(B +$BqE(B +$B9a(B +$B|`(B +$BqF(B +$B3>(B +$BGO(B +$BqG(B +$BqH(B +$BCZ(B +$BFk(B +$BqI(B +$BG}(B +$BBL(B +$B1X(B +$B6n(B +$B6o(B +$BCs(B +$BqN(B +$B6p(B +$B2o(B +$BqM(B +$BqK(B +$BqL(B +$BqJ(B +$BqX(B +$BqO(B +$BqP(B +$BqQ(B +$BqR(B +$BqT(B +$BqS(B +$B=Y(B +$BqU(B +$BqW(B +$B53(B +$BqV(B +$BA{(B +$B83(B +$BqY(B +$BBM(B +$BqZ(B +$BF-(B +$Bq[(B +$Bq`(B +$Bq^(B +$Bq](B +$Bq_(B +$Bq\(B +$Bqb(B +$B|a(B +$Bqa(B +$Bqd(B +$B6C(B +$Bqc(B +$Bqe(B +$Bqf(B +$Bqh(B +$Bqg(B +$Bqi(B +$Bqk(B +$Bqj(B +$B9|(B +$Bql(B +$Bqm(B +$B3<(B +$Bqn(B +$Bqo(B +$B?q(B +$Bqp(B +$Bqq(B +$Bqr(B +$Bqs(B +$B9b(B +$B|b(B +$B|c(B +$Bqt(B +$Bqu(B +$Bqv(B +$Bqw(B +$Bqx(B +$BH1(B +$Bqz(B +$BI&(B +$Bq{(B +$Bqy(B +$Bq}(B +$Bq|(B +$Bq~(B +$Br!(B +$Br"(B +$Br#(B +$Br$(B +$Br%(B +$Br&(B +$Br'(B +$Br((B +$Br)(B +$Br*(B +$Br+(B +$Br,(B +$Br-(B +$Br.(B +$B]5(B +$Br/(B +$Bdx(B +$B54(B +$B3!(B +$B:2(B +$Br1(B +$Br0(B +$BL%(B +$Br3(B +$Br4(B +$Br2(B +$Br5(B +$BKb(B +$Br6(B +$B5{(B +$BO%(B +$B|e(B +$Br7(B +$B|d(B +$Br9(B +$B0>(B +$B|f(B +$Br:(B +$BJ+(B +$Br8(B +$Br;(B +$Br<(B +$Br=(B +$Br>(B +$Br?(B +$BKn(B +$B;-(B +$B:z(B +$BA/(B +$B|g(B +$Br@(B +$BrC(B +$B|h(B +$BrA(B +$BrD(B +$B8q(B +$BrB(B +$BrE(B +$BrF(B +$BrG(B +$BrK(B +$B;*(B +$BBd(B +$BrL(B +$BrI(B +$BrH(B +$BrJ(B +$B7_(B +$BrP(B +$BrO(B +$BrN(B +$B03(B +$B|i(B +$BrZ(B +$BrV(B +$BrW(B +$BrS(B +$BrY(B +$BrU(B +$B3b(B +$BOL(B +$BrX(B +$BrT(B +$BrR(B +$BrQ(B +$Br\(B +$Br_(B +$Br^(B +$Br](B +$BII(B +$Br[(B +$B0s(B +$Br`(B +$Brb(B +$B3o(B +$BrM(B +$B17(B +$Brd(B +$Brc(B +$Bra(B +$BC-(B +$BKp(B +$BNZ(B +$Bre(B +$Brf(B +$Brg(B +$Brh(B +$Bri(B +$BD;(B +$Brj(B +$BH7(B +$Bro(B +$Brk(B +$Brl(B +$BK1(B +$BLD(B +$BFP(B +$Brp(B +$Brq(B +$BF>(B +$Brn(B +$Brm(B +$B2*(B +$Bry(B +$Brx(B +$B1u(B +$Brv(B +$Bru(B +$Brs(B +$B3{(B +$Brr(B +$B<2(B +$B2)(B +$B9c(B +$Br|(B +$Br{(B +$Brz(B +$Brw(B +$Br}(B +$Br~(B +$Bs%(B +$Bs$(B +$Bs&(B +$B1-(B +$Bs!(B +$Bs"(B +$B9t(B +$BL9(B +$Bs#(B +$B|k(B +$BK2(B +$Bs+(B +$B|j(B +$Bs'(B +$Bs,(B +$Bs)(B +$Bs((B +$B7\(B +$Bs-(B +$Bs.(B +$Bs/(B +$Bs*(B +$Brt(B +$Bs0(B +$BDa(B +$Bs4(B +$Bs5(B +$Bs3(B +$Bs2(B +$Bs8(B +$Bs1(B +$Bs6(B +$Bs7(B +$Bs:(B +$Bs9(B +$Bs<(B +$Bs=(B +$Bs>(B +$BOI(B +$Bs;(B +$BBk(B +$B:m(B +$Bs?(B +$B|m(B +$Bs@(B +$BsA(B +$BsB(B +$BsC(B +$B84(B +$BsD(B +$BsE(B +$B +$BsF(B +$BsG(B +$BsH(B +$BsI(B +$BsL(B +$BsJ(B +$BO<(B +$BsK(B +$BNo(B +$BsM(B +$BN[(B +$BsN(B +$BG~(B +$BsO(B +$BsQ(B +$BsR(B +$BsP(B +$B9m(B +$BLM(B +$BKc(B +$BVw(B +$B]`(B +$BK{(B +$B2+(B +$BsT(B +$B5P(B +$BsU(B +$BsV(B +$BsW(B +$B|n(B +$B9u(B +$BsX(B +$B`T(B +$BL[(B +$BBc(B +$BsY(B +$Bs[(B +$BsZ(B +$Bs\(B +$Bs](B +$Bs^(B +$Bs_(B +$Bs`(B +$Bsa(B +$Bsb(B +$Bsc(B +$Bsd(B +$Bse(B +$Bsf(B +$Bsg(B +$Bsh(B +$BE$(B +$B8](B +$Bsj(B +$BAM(B +$Bsk(B +$Bsl(B +$BI!(B +$Bsm(B +$Bsn(B +$Bc7(B +$BlZ(B +$Bpm(B +$Bso(B +$Bsp(B +$Bsr(B +$Bss(B +$Bst(B +$BNp(B +$Bsq(B +$Bsu(B +$Bsv(B +$Bsx(B +$Bsw(B +$Bsz(B +$Bs{(B +$Bsy(B +$BN6(B +$Bs|(B +$Bs}(B +$BcT(B +$Bs~(B +$BzF(B +$B|O(B +$ByT(B +$By_(B +$By`(B +$Byu(B +$Bz>(B +$BzN(B +$BzP(B +$Bz{(B +$B{#(B +$B{:(B +$B{B(B +$B{C(B +$B{D(B +$B{F(B +$B{J(B +$B{M(B +$B{V(B +$B{a(B +$B{c(B +$B{d(B +$B{m(B +$B{u(B +$B{w(B +$B{x(B +$B{{(B +$B|9(B +$B|@(B +$B|P(B +$B|\(B +$B|](B +$B|_(B +$B|l(B +$B!*(B +$B|~(B +$B!t(B +$B!p(B +$B!s(B +$B!u(B +$B|}(B +$B!J(B +$B!K(B +$B!v(B +$B!\(B +$B!$(B +$B!](B +$B!%(B +$B!?(B +$B#0(B +$B#1(B +$B#2(B +$B#3(B +$B#4(B +$B#5(B +$B#6(B +$B#7(B +$B#8(B +$B#9(B +$B!'(B +$B!((B +$B!c(B +$B!a(B +$B!d(B +$B!)(B +$B!w(B +$B#A(B +$B#B(B +$B#C(B +$B#D(B +$B#E(B +$B#F(B +$B#G(B +$B#H(B +$B#I(B +$B#J(B +$B#K(B +$B#L(B +$B#M(B +$B#N(B +$B#O(B +$B#P(B +$B#Q(B +$B#R(B +$B#S(B +$B#T(B +$B#U(B +$B#V(B +$B#W(B +$B#X(B +$B#Y(B +$B#Z(B +$B!N(B +$B!@(B +$B!O(B +$B!0(B +$B!2(B +$B!.(B +$B#a(B +$B#b(B +$B#c(B +$B#d(B +$B#e(B +$B#f(B +$B#g(B +$B#h(B +$B#i(B +$B#j(B +$B#k(B +$B#l(B +$B#m(B +$B#n(B +$B#o(B +$B#p(B +$B#q(B +$B#r(B +$B#s(B +$B#t(B +$B#u(B +$B#v(B +$B#w(B +$B#x(B +$B#y(B +$B#z(B +$B!P(B +$B!C(B +$B!Q(B +$B!A(B +$B!q(B +$B!r(B +$B"L(B +$B!1(B +$B||(B +$B!o(B \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars-csiso2022jp.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars-csiso2022jp.html.headers new file mode 100644 index 00000000000..547bbcb4505 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars-csiso2022jp.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=csiso2022jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars.html new file mode 100755 index 00000000000..aa42723c79c --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars.html @@ -0,0 +1,7330 @@ +ISO 2022-JP characters +(J\(B +$B!x(B +$B!/(B +$B!k(B +$B!^(B +$B!-(B +$B"y(B +$B!_(B +$B!`(B +$B&!(B +$B&"(B +$B&#(B +$B&$(B +$B&%(B +$B&&(B +$B&'(B +$B&((B +$B&)(B +$B&*(B +$B&+(B +$B&,(B +$B&-(B +$B&.(B +$B&/(B +$B&0(B +$B&1(B +$B&2(B +$B&3(B +$B&4(B +$B&5(B +$B&6(B +$B&7(B +$B&8(B +$B&A(B +$B&B(B +$B&C(B +$B&D(B +$B&E(B +$B&F(B +$B&G(B +$B&H(B +$B&I(B +$B&J(B +$B&K(B +$B&L(B +$B&M(B +$B&N(B +$B&O(B +$B&P(B +$B&Q(B +$B&R(B +$B&S(B +$B&T(B +$B&U(B +$B&V(B +$B&W(B +$B&X(B +$B''(B +$B'!(B +$B'"(B +$B'#(B +$B'$(B +$B'%(B +$B'&(B +$B'((B +$B')(B +$B'*(B +$B'+(B +$B',(B +$B'-(B +$B'.(B +$B'/(B +$B'0(B +$B'1(B +$B'2(B +$B'3(B +$B'4(B +$B'5(B +$B'6(B +$B'7(B +$B'8(B +$B'9(B +$B':(B +$B';(B +$B'<(B +$B'=(B +$B'>(B +$B'?(B +$B'@(B +$B'A(B +$B'Q(B +$B'R(B +$B'S(B +$B'T(B +$B'U(B +$B'V(B +$B'X(B +$B'Y(B +$B'Z(B +$B'[(B +$B'\(B +$B'](B +$B'^(B +$B'_(B +$B'`(B +$B'a(B +$B'b(B +$B'c(B +$B'd(B +$B'e(B +$B'f(B +$B'g(B +$B'h(B +$B'i(B +$B'j(B +$B'k(B +$B'l(B +$B'm(B +$B'n(B +$B'o(B +$B'p(B +$B'q(B +$B'W(B +$B!>(B +$B!=(B +$B!F(B +$B!G(B +$B!H(B +$B!I(B +$B"w(B +$B"x(B +$B!E(B +$B!D(B +$B"s(B +$B!l(B +$B!m(B +$B"((B +(J~(B +$B!n(B +$B-b(B +$B-d(B +$B"r(B +$B-5(B +$B-6(B +$B-7(B +$B-8(B +$B-9(B +$B-:(B +$B-;(B +$B-<(B +$B-=(B +$B->(B +$B|q(B +$B|r(B +$B|s(B +$B|t(B +$B|u(B +$B|v(B +$B|w(B +$B|x(B +$B|y(B +$B|z(B +$B"+(B +$B",(B +$B"*(B +$B"-(B +$B"M(B +$B"N(B +$B"O(B +$B"_(B +$B"P(B +$B"`(B +$B":(B +$B";(B +$B-t(B +$B!](B +$B"e(B +$B"g(B +$B!g(B +$B-x(B +$B"\(B +$B!B(B +$B"J(B +$B"K(B +$B"A(B +$B"@(B +$B"i(B +$B"j(B +$B-s(B +$B!h(B +$B"h(B +$B"f(B +$B"b(B +$B!b(B +$B"a(B +$B!e(B +$B!f(B +$B"c(B +$B"d(B +$B">(B +$B"?(B +$B"<(B +$B"=(B +$B"](B +$B-y(B +$B"^(B +$B-!(B +$B-"(B +$B-#(B +$B-$(B +$B-%(B +$B-&(B +$B-'(B +$B-((B +$B-)(B +$B-*(B +$B-+(B +$B-,(B +$B--(B +$B-.(B +$B-/(B +$B-0(B +$B-1(B +$B-2(B +$B-3(B +$B-4(B +$B(!(B +$B(,(B +$B("(B +$B(-(B +$B(#(B +$B(.(B +$B($(B +$B(/(B +$B(&(B +$B(1(B +$B(%(B +$B(0(B +$B('(B +$B(<(B +$B(7(B +$B(2(B +$B()(B +$B(>(B +$B(9(B +$B(4(B +$B(((B +$B(8(B +$B(=(B +$B(3(B +$B(*(B +$B(:(B +$B(?(B +$B(5(B +$B(+(B +$B(;(B +$B(@(B +$B(6(B +$B"#(B +$B""(B +$B"%(B +$B"$(B +$B"'(B +$B"&(B +$B"!(B +$B!~(B +$B!{(B +$B!}(B +$B!|(B +$B"~(B +$B!z(B +$B!y(B +$B!j(B +$B!i(B +$B"v(B +$B"u(B +$B"t(B +$B!!(B +$B!"(B +$B!#(B +$B!7(B +$B!9(B +$B!:(B +$B!;(B +$B!R(B +$B!S(B +$B!T(B +$B!U(B +$B!V(B +$B!W(B +$B!X(B +$B!Y(B +$B!Z(B +$B![(B +$B")(B +$B".(B +$B!L(B +$B!M(B +$B-`(B +$B-a(B +$B$!(B +$B$"(B +$B$#(B +$B$$(B +$B$%(B +$B$&(B +$B$'(B +$B$((B +$B$)(B +$B$*(B +$B$+(B +$B$,(B +$B$-(B +$B$.(B +$B$/(B +$B$0(B +$B$1(B +$B$2(B +$B$3(B +$B$4(B +$B$5(B +$B$6(B +$B$7(B +$B$8(B +$B$9(B +$B$:(B +$B$;(B +$B$<(B +$B$=(B +$B$>(B +$B$?(B +$B$@(B +$B$A(B +$B$B(B +$B$C(B +$B$D(B +$B$E(B +$B$F(B +$B$G(B +$B$H(B +$B$I(B +$B$J(B +$B$K(B +$B$L(B +$B$M(B +$B$N(B +$B$O(B +$B$P(B +$B$Q(B +$B$R(B +$B$S(B +$B$T(B +$B$U(B +$B$V(B +$B$W(B +$B$X(B +$B$Y(B +$B$Z(B +$B$[(B +$B$\(B +$B$](B +$B$^(B +$B$_(B +$B$`(B +$B$a(B +$B$b(B +$B$c(B +$B$d(B +$B$e(B +$B$f(B +$B$g(B +$B$h(B +$B$i(B +$B$j(B +$B$k(B +$B$l(B +$B$m(B +$B$n(B +$B$o(B +$B$p(B +$B$q(B +$B$r(B +$B$s(B +$B!+(B +$B!,(B +$B!5(B +$B!6(B +$B%!(B +$B%"(B +$B%#(B +$B%$(B +$B%%(B +$B%&(B +$B%'(B +$B%((B +$B%)(B +$B%*(B +$B%+(B +$B%,(B +$B%-(B +$B%.(B +$B%/(B +$B%0(B +$B%1(B +$B%2(B +$B%3(B +$B%4(B +$B%5(B +$B%6(B +$B%7(B +$B%8(B +$B%9(B +$B%:(B +$B%;(B +$B%<(B +$B%=(B +$B%>(B +$B%?(B +$B%@(B +$B%A(B +$B%B(B +$B%C(B +$B%D(B +$B%E(B +$B%F(B +$B%G(B +$B%H(B +$B%I(B +$B%J(B +$B%K(B +$B%L(B +$B%M(B +$B%N(B +$B%O(B +$B%P(B +$B%Q(B +$B%R(B +$B%S(B +$B%T(B +$B%U(B +$B%V(B +$B%W(B +$B%X(B +$B%Y(B +$B%Z(B +$B%[(B +$B%\(B +$B%](B +$B%^(B +$B%_(B +$B%`(B +$B%a(B +$B%b(B +$B%c(B +$B%d(B +$B%e(B +$B%f(B +$B%g(B +$B%h(B +$B%i(B +$B%j(B +$B%k(B +$B%l(B +$B%m(B +$B%n(B +$B%o(B +$B%p(B +$B%q(B +$B%r(B +$B%s(B +$B%t(B +$B%u(B +$B%v(B +$B!&(B +$B!<(B +$B!3(B +$B!4(B +$B-j(B +$B-k(B +$B-l(B +$B-e(B +$B-f(B +$B-g(B +$B-h(B +$B-i(B +$B-F(B +$B-J(B +$B-A(B +$B-D(B +$B-B(B +$B-L(B +$B-K(B +$B-E(B +$B-M(B +$B-G(B +$B-O(B +$B-@(B +$B-N(B +$B-C(B +$B-H(B +$B-I(B +$B-_(B +$B-o(B +$B-n(B +$B-m(B +$B-S(B +$B-T(B +$B-P(B +$B-Q(B +$B-R(B +$B-V(B +$B-U(B +$B-c(B +$B0l(B +$BCz(B +$B<7(B +$BK|(B +$B>f(B +$B;0(B +$B>e(B +$B2<(B +$BIT(B +$BM?(B +$BP"(B +$B1/(B +$B3n(B +$BP#(B +$B@$(B +$BRB(B +$B5V(B +$BJ:(B +$B>g(B +$BN>(B +$BJB(B +$By-(B +$BP$(B +$BCf(B +$BP%(B +$B6z(B +$BP&(B +$B4](B +$BC0(B +$B +$BP'(B +$BP((B +$BP)(B +$BG5(B +$B5W(B +$BG7(B +$BFc(B +$B8C(B +$BK3(B +$BiI(B +$BP*(B +$B>h(B +$BP+(B +$B25(B +$B6e(B +$B8p(B +$BLi(B +$BV&(B +$BMp(B +$BF}(B +$B4%(B +$B55(B +$BP,(B +$BP-(B +$BN;(B +$BM=(B +$BAh(B +$BP/(B +$B;v(B +$BFs(B +$BP2(B +$B1>(B +$B8_(B +$B8^(B +$B0f(B +$BOK(B +$BOJ(B +$B:3(B +$B0!(B +$BP3(B +$BP4(B +$BP5(B +$BK4(B +$BP6(B +$B8r(B +$B0g(B +$BKr(B +$B5|(B +$B5}(B +$B5~(B +$BDb(B +$BN<(B +$BP7(B +$BP8(B +$BP9(B +$B?M(B +$B=:(B +$B?N(B +$BP>(B +$BP<(B +$BP=(B +$B5X(B +$B:#(B +$B2p(B +$BP;(B +$BP:(B +$BJ)(B +$B;F(B +$B;E(B +$BB>(B +$BP?(B +$BIU(B +$B@g(B +$B!8(B +$BP@(B +$BPB(B +$By.(B +$BBe(B +$BNa(B +$B0J(B +$BPA(B +$B2>(B +$B6D(B +$BCg(B +$B7o(B +$BPC(B +$BG$(B +$By/(B +$By0(B +$B4k(B +$By1(B +$BPD(B +$B0K(B +$B8`(B +$B4l(B +$BIz(B +$BH2(B +$B5Y(B +$B2q(B +$BPg(B +$BEA(B +$BGl(B +$BPF(B +$BH<(B +$BNb(B +$B?-(B +$By2(B +$B;G(B +$B;w(B +$B2@(B +$BDQ(B +$BC"(B +$BPJ(B +$B0L(B +$BDc(B +$B=;(B +$B:4(B +$BM$(B +$BBN(B +$B2?(B +$By3(B +$BPI(B +$BM>(B +$BPE(B +$BPG(B +$B:n(B +$BPH(B +$BU$(B +$BPP(B +$BPS(B +$BPQ(B +$B2B(B +$BJ;(B +$BPK(B +$BPO(B +$B8s(B +$B;H(B +$B4&(B +$BPT(B +$BPL(B +$By5(B +$BNc(B +$B;x(B +$BPM(B +$BPR(B +$By4(B +$By7(B +$BPU(B +$BPN(B +$By6(B +$B6!(B +$B0M(B +$B6"(B +$B2A(B +$BU%(B +$BKy(B +$BIn(B +$B8t(B +$B?/(B +$BN7(B +$BJX(B +$B78(B +$BB%(B +$B2d(B +$By&(B +$B=S(B +$By8(B +$BPY(B +$BP^(B +$BP\(B +$BPW(B +$BB/(B +$BPZ(B +$BP](B +$BP[(B +$BJ](B +$BPX(B +$B?.(B +$BKs(B +$BP_(B +$BP`(B +$B=$(B +$BPm(B +$BGP(B +$BI6(B +$BPh(B +$BJp(B +$B26(B +$BPl(B +$By;(B +$BPf(B +$BPo(B +$BAR(B +$B8D(B +$BG\(B +$B`G(B +$BPn(B +$BE](B +$BPc(B +$B8v(B +$B8u(B +$BPa(B +$By<(B +$B +$BPi(B +$By:(B +$BJo(B +$BCM(B +$BPe(B +$B7q(B +$BPb(B +$BPj(B +$BPd(B +$BNQ(B +$BPk(B +$BOA(B +$B6f(B +$B7p(B +$By9(B +$By?(B +$BPp(B +$By=(B +$BPq(B +$BPu(B +$B0N(B +$BJP(B +$BPt(B +$BPs(B +$BPw(B +$BPv(B +$BDd(B +$B7r(B +$BPx(B +$By>(B +$B +$BB&(B +$BDe(B +$B6v(B +$BPy(B +$B56(B +$BPz(B +$BP|(B +$BK5(B +$B7f(B +$By@(B +$B;1(B +$BHw(B +$BP{(B +$B:E(B +$BMC(B +$BP~(B +$BQ#(B +$BP}(B +$B:D(B +$B=}(B +$B79(B +$BQ$(B +$B6O(B +$BQ!(B +$BQ"(B +$BF/(B +$BA|(B +$B6#(B +$BKM(B +$BQ%(B +$ByB(B +$BN=(B +$BQ&(B +$BQ)(B +$BQ'(B +$BAN(B +$BQ((B +$BQ*(B +$ByA(B +$BQ,(B +$BQ+(B +$BJH(B +$B57(B +$BQ.(B +$BQ/(B +$B2/(B +$BQ-(B +$B +$BQ2(B +$BQ1(B +$BQ0(B +$BPV(B +$BQ3(B +$B=~(B +$BQ4(B +$BM%(B +$BLY(B +$BQ6(B +$BQ5(B +$BQ8(B +$BQ7(B +$BQ9(B +$BQ:(B +$B0t(B +$B85(B +$B7;(B +$B=<(B +$BC{(B +$B6$(B +$B@h(B +$B8w(B +$ByC(B +$B9n(B +$BQ<(B +$BLH(B +$BEF(B +$B;y(B +$BQ;(B +$BQ=(B +$BE^(B +$B3u(B +$BQ>(B +$ByD(B +$BF~(B +$BA4(B +$BQ@(B +$BQA(B +$BH,(B +$B8x(B +$BO;(B +$BQB(B +$B6&(B +$BJ<(B +$BB6(B +$B6q(B +$BE5(B +$B7s(B +$BQC(B +$BQD(B +$BFb(B +$B1_(B +$BQG(B +$B:}(B +$BQF(B +$B:F(B +$BQH(B +$Bfn(B +$BQI(B +$BKA(B +$BQJ(B +$BQK(B +$BQL(B +$B>i(B +$B +$ByE(B +$B4'(B +$BQO(B +$BQM(B +$BL=(B +$BQN(B +$BIZ(B +$BQP(B +$BQQ(B +$BQR(B +$BE_(B +$BQV(B +$BQT(B +$BQU(B +$BQS(B +$B:c(B +$BQW(B +$BLj(B +$BNd(B +$BQX(B +$ByF(B +$B@((B +$BQY(B +$B=Z(B +$BQZ(B +$BC|(B +$BN?(B +$BE`(B +$BRE(B +$BQ[(B +$Bt%(B +$B6E(B +$BQ\(B +$BK^(B +$B=h(B +$BB|(B +$BQ^(B +$BFd(B +$ByG(B +$BQ_(B +$BQ`(B +$B3.(B +$BQa(B +$B6'(B +$BFL(B +$B1z(B +$B=P(B +$BH!(B +$BQb(B +$BEa(B +$B?O(B +$BQc(B +$BJ,(B +$B@Z(B +$B4"(B +$B4)(B +$BQd(B +$BQf(B +$B7:(B +$BQe(B +$ByH(B +$BNs(B +$B=i(B +$BH=(B +$BJL(B +$BQg(B +$BMx(B +$BQh(B +$BQi(B +$BE~(B +$BQj(B +$B@)(B +$B:~(B +$B7t(B +$BQk(B +$B;I(B +$B9o(B +$BDf(B +$BQm(B +$BB'(B +$B:o(B +$BQn(B +$BQo(B +$BA0(B +$BQl(B +$BQq(B +$BK6(B +$B9d(B +$BQp(B +$B7u(B +$B:^(B +$BGm(B +$BQt(B +$BQr(B +$BI{(B +$B>j(B +$BQ{(B +$B3d(B +$BQu(B +$BQs(B +$BAO(B +$BQw(B +$BQv(B +$B3D(B +$B7`(B +$BQ|(B +$BN-(B +$BQx(B +$BQ}(B +$BQz(B +$BQy(B +$BNO(B +$ByI(B +$B8y(B +$B2C(B +$BNt(B +$ByJ(B +$B=u(B +$BEX(B +$B9e(B +$BR"(B +$BR#(B +$B{<(B +$BNe(B +$BO+(B +$BR%(B +$B8z(B +$BR$(B +$B3/(B +$ByK(B +$BR&(B +$BKV(B +$BD<(B +$BM&(B +$BJY(B +$BR'(B +$BpU(B +$BF0(B +$BR((B +$B4*(B +$BL3(B +$ByL(B +$B>!(B +$BR)(B +$BJg(B +$BR-(B +$B@*(B +$BR*(B +$B6P(B +$BR+(B +$B4+(B +$B7.(B +$BR.(B +$BR/(B +$BR0(B +$BR1(B +$B<[(B +$B8{(B +$BL^(B +$ByM(B +$BLh(B +$BFw(B +$BJq(B +$BR2(B +$ByN(B +$BR3(B +$BR5(B +$BR7(B +$BR6(B +$BR8(B +$B2=(B +$BKL(B +$B:|(B +$BR9(B +$BAY(B +$B>"(B +$B6)(B +$BR:(B +$ByO(B +$BH[(B +$BR;(B +$BR<(B +$BR=(B +$BR>(B +$BI$(B +$B6h(B +$B0e(B +$BF?(B +$BR?(B +$B==(B +$B@i(B +$BRA(B +$BR@(B +$B>#(B +$B8a(B +$BRC(B +$BH>(B +$BRD(B +$BH\(B +$BB4(B +$BBn(B +$B6((B +$BFn(B +$BC1(B +$BGn(B +$BKN(B +$BRF(B +$B@j(B +$B75(B +$BRG(B +$BRH(B +$B1,(B +$B0u(B +$B4m(B +$ByP(B +$BB((B +$B5Q(B +$BMq(B +$BRK(B +$B27(B +$BRJ(B +$B6*(B +$BRL(B +$BLq(B +$ByQ(B +$BRM(B +$BNR(B +$B8|(B +$B86(B +$BRN(B +$BRP(B +$BRO(B +$B?_(B +$B19(B +$B1^(B +$BRQ(B +$BRR(B +$ByR(B +$B87(B +$BRS(B +$B5n(B +$B;2(B +$BRT(B +$BKt(B +$B:5(B +$B5Z(B +$BM'(B +$BAP(B +$BH?(B +$B<}(B +$B=G(B +$B +$B +$B=v(B +$BH@(B +$ByS(B +$BRW(B +$B1C(B +$BAQ(B +$B8}(B +$B8E(B +$B6g(B +$BR[(B +$BC!(B +$BB~(B +$B6+(B +$B>$(B +$BR\(B +$BRZ(B +$B2D(B +$BBf(B +$B<8(B +$B;K(B +$B1&(B +$B3p(B +$B9f(B +$B;J(B +$BR](B +$BR^(B +$B5I(B +$B3F(B +$B9g(B +$B5H(B +$BD_(B +$B1%(B +$BF1(B +$BL>(B +$B9!(B +$BMy(B +$BEG(B +$B8~(B +$B7/(B +$BRg(B +$B6c(B +$BKJ(B +$BH](B +$BRf(B +$B4^(B +$BRa(B +$BRb(B +$BRd(B +$BRe(B +$B5[(B +$B?a(B +$BJ-(B +$BRc(B +$BR_(B +$B8c(B +$BR`(B +$BO$(B +$BJr(B +$BDh(B +$B8b(B +$B9p(B +$BRh(B +$BF](B +$BRl(B +$B<~(B +$B +$BRo(B +$BRm(B +$BL#(B +$BRj(B +$BRs(B +$BRn(B +$BRq(B +$B8F(B +$BL?(B +$BRr(B +$BRt(B +$BRv(B +$ByV(B +$B:p(B +$BOB(B +$BRk(B +$BRi(B +$BRu(B +$BRp(B +$ByU(B +$BRx(B +$BS#(B +$BRz(B +$BR~(B +$ByW(B +$BS!(B +$BR{(B +$BS>(B +$B:i(B +$B31(B +$BRy(B +$BS%(B +$B0v(B +$BS$(B +$B0%(B +$BIJ(B +$BS"(B +$BR|(B +$BRw(B +$BR}(B +$B:H(B +$BS&(B +$B0w(B +$BS/(B +$BS'(B +$BS((B +$B>%(B +$BKi(B +$BS-(B +$BS,(B +$BE/(B +$BS.(B +$BS+(B +$ByX(B +$B14(B +$B:6(B +$B?0(B +$BS)(B +$BEb(B +$BS*(B +$B0"(B +$BS4(B +$BM#(B +$B>'(B +$BS:(B +$BS9(B +$BS0(B +$BBC(B +$BS1(B +$BBo(B +$BS6(B +$B>&(B +$BS3(B +$BLd(B +$B7<(B +$BS7(B +$BS8(B +$BS5(B +$BS;(B +$BS2(B +$BSA(B +$BSF(B +$BSB(B +$BS=(B +$BSG(B +$BA1(B +$ByY(B +$BSI(B +$B9"(B +$BS?(B +$BC}(B +$BSC(B +$BS<(B +$B4-(B +$B4n(B +$B3e(B +$BSD(B +$BS@(B +$B7v(B +$BSJ(B +$BSH(B +$BAS(B +$B5J(B +$B6,(B +$BSE(B +$B6t(B +$B1D(B +$BSN(B +$BSL(B +$BT'(B +$BSQ(B +$BSK(B +$BSO(B +$BSM(B +$B;L(B +$BSP(B +$BSS(B +$BSX(B +$BSV(B +$BSU(B +$BC2(B +$B2E(B +$BSR(B +$BST(B +$B>((B +$B13(B +$BSW(B +$B2^(B +$BSb(B +$B>|(B +$BS^(B +$BS\(B +$BS](B +$BS_(B +$B1=(B +$BA9(B +$BSY(B +$BSZ(B +$B3z(B +$BSa(B +$B4o(B +$BSd(B +$BS`(B +$BSc(B +$BJ.(B +$BFU(B +$BH8(B +$BSf(B +$BSe(B +$B3E(B +$BSg(B +$BSj(B +$BSi(B +$BSh(B +$BG9(B +$BSk(B +$BSl(B +$BSn(B +$BSm(B +$BSp(B +$BSs(B +$BSq(B +$BSo(B +$BSr(B +$BSt(B +$BSu(B +$BSv(B +$BSw(B +$BSx(B +$BQE(B +$B<|(B +$B;M(B +$B2s(B +$B0x(B +$BCD(B +$BSy(B +$B:$(B +$B0O(B +$B?^(B +$BSz(B +$B8G(B +$B9q(B +$BS|(B +$BS{(B +$BJ`(B +$BS}(B +$BT!(B +$BS~(B +$BT"(B +$BT#(B +$B7w(B +$B1`(B +$BT$(B +$BT&(B +$BT%(B +$BT((B +$BEZ(B +$BT)(B +$B05(B +$B:_(B +$B7=(B +$BCO(B +$BT*(B +$BT+(B +$BT-(B +$BT.(B +$B:d(B +$B6Q(B +$BK7(B +$BT,(B +$BT/(B +$B:A(B +$B9#(B +$ByZ(B +$BT3(B +$B:%(B +$By[(B +$BC3(B +$BT0(B +$BDZ(B +$BT4(B +$B?b(B +$BT2(B +$BT5(B +$B7?(B +$BT6(B +$BT7(B +$B9$(B +$B3@(B +$BT9(B +$BT:(B +$By\(B +$BT;(B +$BT8(B +$BT1(B +$BT<(B +$BT=(B +$By^(B +$By](B +$BKd(B +$B>k(B +$BT?(B +$BT@(B +$BT>(B +$BTB(B +$BG8(B +$B0h(B +$BIV(B +$BTC(B +$B>}(B +$B<9(B +$BG](B +$B4p(B +$B:k(B +$BKY(B +$BF2(B +$B7x(B +$BBO(B +$BTA(B +$BTD(B +$BBD(B +$BTE(B +$BTF(B +$BTH(B +$BDi(B +$B4.(B +$Bt!(B +$B1a(B +$BJs(B +$B>l(B +$BEH(B +$B:f(B +$BTN(B +$BJ=(B +$BN](B +$B2t(B +$BTJ(B +$BA:(B +$BTM(B +$BEc(B +$BEI(B +$BEd(B +$BH9(B +$BDM(B +$B:I(B +$BTI(B +$B1v(B +$BE6(B +$BTK(B +$BTG(B +$B?P(B +$BTO(B +$B=N(B +$B6-(B +$BTP(B +$BJh(B +$BA}(B +$BDF(B +$Bya(B +$BTR(B +$BKO(B +$BTS(B +$BTX(B +$Byb(B +$BJ/(B +$BTW(B +$BTQ(B +$BTT(B +$BTV(B +$B:&(B +$BJI(B +$BTY(B +$BCE(B +$B2u(B +$B>m(B +$BT[(B +$BTZ(B +$B9h(B +$BT\(B +$BT^(B +$BT](B +$BT`(B +$BTU(B +$BTb(B +$BTa(B +$BT_(B +$B;N(B +$B?Q(B +$BAT(B +$BTc(B +$B@<(B +$B0m(B +$BGd(B +$BD[(B +$BTe(B +$BTd(B +$BTf(B +$BTg(B +$BTh(B +$BTi(B +$BJQ(B +$BTj(B +$Byc(B +$B2F(B +$BTk(B +$BM<(B +$B30(B +$BRI(B +$B=H(B +$BB?(B +$BTl(B +$BLk(B +$BL4(B +$BTn(B +$BBg(B +$BE7(B +$BB@(B +$BIW(B +$BTo(B +$BTp(B +$B1{(B +$B<:(B +$BTq(B +$B0P(B +$BTr(B +$BTs(B +$B1b(B +$B4q(B +$BF`(B +$BJt(B +$BTw(B +$BAU(B +$BTv(B +$B7@(B +$Byd(B +$BK[(B +$BTu(B +$BEe(B +$BTy(B +$BTx(B +$Bye(B +$Byf(B +$BT{(B +$BTz(B +$Byg(B +$B1|(B +$BT|(B +$B>)(B +$BT~(B +$BC%(B +$BT}(B +$BJ3(B +$B=w(B +$BE[(B +$BU!(B +$B9%(B +$BU"(B +$BG!(B +$BH^(B +$BLQ(B +$BG%(B +$BU+(B +$B58(B +$BME(B +$BL/(B +$BV,(B +$BU#(B +$BU&(B +$Byh(B +$BBE(B +$BK8(B +$BEJ(B +$BU'(B +$BKe(B +$Byi(B +$B:J(B +$B>*(B +$BU((B +$B;P(B +$B;O(B +$B09(B +$B8H(B +$B@+(B +$B0Q(B +$BU,(B +$BU-(B +$BU*(B +$B18(B +$B4/(B +$BU)(B +$BLE(B +$BI1(B +$B0((B +$B0y(B +$B;Q(B +$B0R(B +$B0#(B +$BU2(B +$BU0(B +$BL<(B +$BU3(B +$BU1(B +$BU/(B +$B?1(B +$BU.(B +$BJZ(B +$B8d(B +$BU7(B +$BU8(B +$B>+(B +$BU4(B +$BO,(B +$BGL(B +$BU6(B +$B:'(B +$BU9(B +$BIX(B +$BU:(B +$BU5(B +$BL;(B +$BG^(B +$BU;(B +$BI2(B +$BU<(B +$BU@(B +$BU=(B +$B2G(B +$BU?(B +$B<;(B +$BU>(B +$B7y(B +$BUL(B +$BUE(B +$BUB(B +$BCd(B +$BUA(B +$BUC(B +$BUD(B +$BUF(B +$BUG(B +$B4r(B +$BUI(B +$BUH(B +$BUJ(B +$B>n(B +$BUM(B +$BD\(B +$B1E(B +$BUK(B +$BUN(B +$BUO(B +$BUR(B +$BUP(B +$BUQ(B +$B;R(B +$BUS(B +$B9&(B +$BUT(B +$Byj(B +$B;z(B +$BB8(B +$BUU(B +$BUV(B +$B;Z(B +$B9'(B +$BLR(B +$B5((B +$B8I(B +$BUW(B +$B3X(B +$BUX(B +$BB9(B +$BUY(B +$BV#(B +$BUZ(B +$BU[(B +$BU\(B +$BU^(B +$BU_(B +$BU`(B +$BBp(B +$B1'(B +$B +$B0B(B +$BAW(B +$B40(B +$B<5(B +$B9((B +$BEf(B +$B=!(B +$B41(B +$BCh(B +$BDj(B +$B08(B +$B59(B +$BJu(B +$B +$B5R(B +$B@k(B +$B<<(B +$BM((B +$BUa(B +$B5\(B +$B:K(B +$B32(B +$B1c(B +$B>,(B +$B2H(B +$BUb(B +$BMF(B +$B=I(B +$Byk(B +$B +$BUc(B +$B4s(B +$BFR(B +$BL)(B +$BUd(B +$BUe(B +$BIY(B +$BUg(B +$B4((B +$B6w(B +$BUf(B +$Bym(B +$B42(B +$B?2(B +$BUk(B +$B;!(B +$B2I(B +$BUj(B +$BUh(B +$BUl(B +$BUi(B +$BG+(B +$B\M(B +$B?3(B +$BUm(B +$Byn(B +$BN@(B +$BUn(B +$BUp(B +$BC~(B +$BUo(B +$B@#(B +$B;{(B +$BBP(B +$B +$BIu(B +$B@l(B +$B +$BUq(B +$B>-(B +$BUr(B +$BUs(B +$B0S(B +$BB:(B +$B?R(B +$BUt(B +$BF3(B +$B>.(B +$B>/(B +$BUu(B +$B@m(B +$B>0(B +$Byo(B +$BUv(B +$BUw(B +$BL`(B +$BUx(B +$B6F(B +$B="(B +$BUy(B +$BUz(B +$B<\(B +$B?,(B +$BFt(B +$B?T(B +$BHx(B +$BG"(B +$B6I(B +$BU{(B +$B5o(B +$BU|(B +$B6~(B +$BFO(B +$B20(B +$B;S(B +$BU}(B +$BV"(B +$BV!(B +$B6}(B +$BU~(B +$BE8(B +$BB0(B +$BEK(B +$B +$BAX(B +$BMz(B +$BV$(B +$BV%(B +$BFV(B +$B;3(B +$BV'(B +$BV((B +$BV)(B +$B4t(B +$BV*(B +$BV+(B +$B2,(B +$Byp(B +$BA;(B +$B4d(B +$BV-(B +$BL((B +$BBR(B +$B3Y(B +$BV/(B +$BV1(B +$B4_(B +$Byq(B +$BV.(B +$BV0(B +$BV3(B +$BV2(B +$BV4(B +$BV5(B +$BF=(B +$B6.(B +$B2e(B +$BV6(B +$BV;(B +$BV9(B +$BJw(B +$BJv(B +$Byr(B +$BEg(B +$BV8(B +$B=T(B +$BV7(B +$B?r(B +$BV<(B +$B:j(B +$BVB(B +$BVC(B +$BV=(B +$B33(B +$BV>(B +$BVG(B +$BVF(B +$BVE(B +$BVA(B +$BV@(B +$BVD(B +$Bys(B +$BJx(B +$Byv(B +$BVK(B +$BVH(B +$BVJ(B +$BMr(B +$BVI(B +$Byt(B +$BV?(B +$B?s(B +$BVL(B +$Byw(B +$B:7(B +$BVM(B +$BVN(B +$BVQ(B +$BVP(B +$BVO(B +$BEh(B +$BV:(B +$BVW(B +$BVS(B +$BVR(B +$BVT(B +$BVU(B +$BVX(B +$Byx(B +$Byy(B +$BNf(B +$BVY(B +$BVV(B +$BVZ(B +$B4`(B +$BV[(B +$Byz(B +$BV](B +$BV\(B +$BV^(B +$BV_(B +$B@n(B +$B=#(B +$B=d(B +$BAc(B +$B9)(B +$B:8(B +$B9*(B +$B5p(B +$BV`(B +$B:9(B +$B8J(B +$BVa(B +$BL&(B +$BGC(B +$BVb(B +$B9+(B +$B4,(B +$BC'(B +$B6R(B +$B;T(B +$BI[(B +$BHA(B +$BVc(B +$B4u(B +$BVf(B +$BD!(B +$BVe(B +$BVd(B +$BVg(B +$BDk(B +$B?c(B +$B;U(B +$B@J(B +$BBS(B +$B5"(B +$BD"(B +$BVh(B +$BVi(B +$B>o(B +$BK9(B +$BVl(B +$BVk(B +$BVj(B +$BI}(B +$BVs(B +$BKZ(B +$BVm(B +$BVo(B +$BKk(B +$BVn(B +$BVp(B +$BH((B +$BVq(B +$BJ>(B +$BVr(B +$B43(B +$BJ?(B +$BG/(B +$BVt(B +$BVu(B +$B9,(B +$B44(B +$BVv(B +$B88(B +$BMD(B +$BM)(B +$B4v(B +$BVx(B +$BD#(B +$B9-(B +$B>1(B +$BH_(B +$B>2(B +$B=x(B +$BDl(B +$BJy(B +$BE9(B +$B9.(B +$BI\(B +$BVy(B +$BEY(B +$B:B(B +$B8K(B +$BDm(B +$B0C(B +$B=n(B +$B9/(B +$BMG(B +$BVz(B +$BV{(B +$BGQ(B +$BV|(B +$BNw(B +$BO-(B +$BV~(B +$BV}(B +$B3G(B +$BW!(B +$BW$(B +$BW%(B +$BW#(B +$BI@(B +$B>3(B +$BW'(B +$BW&(B +$BW"(B +$BW((B +$BW)(B +$BW*(B +$BW-(B +$BW+(B +$BW,(B +$BW.(B +$B1d(B +$BDn(B +$BW/(B +$B7z(B +$B2v(B +$BG6(B +$BW0(B +$BF{(B +$BJ[(B +$BW1(B +$BO.(B +$BW2(B +$BJ@(B +$BW5(B +$BP!(B +$BP1(B +$B<0(B +$BFu(B +$BW6(B +$B5](B +$BD$(B +$B0z(B +$BW7(B +$BJ&(B +$B90(B +$BCP(B +$BDo(B +$By{(B +$BLo(B +$B89(B +$B8L(B +$BW8(B +$BW9(B +$BW?(B +$B +$By|(B +$BD%(B +$B6/(B +$BW:(B +$BI+(B +$BCF(B +$BW;(B +$By,(B +$BW<(B +$B60(B +$BW=(B +$BW>(B +$BW@(B +$BEv(B +$BWA(B +$BWB(B +$BWC(B +$BW4(B +$BW3(B +$BWD(B +$B7A(B +$BI'(B +$By}(B +$B:L(B +$BI7(B +$BD&(B +$BIK(B +$BWE(B +$B>4(B +$B1F(B +$BWF(B +$BWG(B +$BLr(B +$BH`(B +$BWJ(B +$B1}(B +$B@,(B +$BWI(B +$BWH(B +$B7B(B +$BBT(B +$BWN(B +$BWL(B +$BWK(B +$BN'(B +$B8e(B +$B=y(B +$BWM(B +$BEL(B +$B=>(B +$BF@(B +$BWQ(B +$BWP(B +$BWO(B +$BWR(B +$B8f(B +$BWS(B +$BI|(B +$B=[(B +$BWT(B +$BHy(B +$BFA(B +$BD'(B +$By~(B +$BE0(B +$BWU(B +$B5+(B +$B?4(B +$BI,(B +$B4w(B +$BG&(B +$BWV(B +$B;V(B +$BK:(B +$BK;(B +$B1~(B +$BW[(B +$Bz!(B +$BCi(B +$BWX(B +$B2w(B +$BX-(B +$BWZ(B +$BG0(B +$BWY(B +$BWW(B +$B9z(B +$BW](B +$BWc(B +$BWi(B +$BWa(B +$BE\(B +$BWf(B +$BI](B +$BW`(B +$BWe(B +$BNg(B +$B;W(B +$BBU(B +$BW^(B +$B5^(B +$BWh(B +$B@-(B +$B1e(B +$BWb(B +$B2x(B +$BWg(B +$B61(B +$BWd(B +$BWj(B +$BWl(B +$BWv(B +$BWt(B +$BWq(B +$BWp(B +$BNx(B +$BWr(B +$B62(B +$B91(B +$B=z(B +$BWy(B +$BWk(B +$Bz"(B +$BWo(B +$BW_(B +$B2z(B +$BWs(B +$BWu(B +$BCQ(B +$B:((B +$B28(B +$BWm(B +$BWx(B +$BWw(B +$B63(B +$BB)(B +$B3f(B +$B7C(B +$BWn(B +$BWz(B +$BW}(B +$BX!(B +$Bz#(B +$B<=(B +$Bz$(B +$BX'(B +$BDp(B +$BW{(B +$BX%(B +$B2y(B +$BX#(B +$BX$(B +$BW~(B +$BX"(B +$B8g(B +$BM*(B +$B45(B +$B1Y(B +$BX&(B +$BG:(B +$B0-(B +$BHa(B +$BW\(B +$BX,(B +$BX0(B +$BLe(B +$BX)(B +$BEi(B +$BX.(B +$B>p(B +$BX/(B +$BFW(B +$BOG(B +$BX+(B +$Bz&(B +$BX1(B +$B9{(B +$B@K(B +$Bz%(B +$B0T(B +$BX*(B +$BX((B +$BAZ(B +$BW|(B +$B;4(B +$BBF(B +$BX=(B +$Bz((B +$BA[(B +$BX8(B +$BX5(B +$BX6(B +$B +$BX9(B +$BX<(B +$BX7(B +$B=%(B +$BX:(B +$BX4(B +$BL|(B +$BL{(B +$BX>(B +$BX?(B +$B0U(B +$Bz)(B +$BX3(B +$B6r(B +$B0&(B +$B46(B +$Bz'(B +$BX;(B +$BXC(B +$BXB(B +$BXG(B +$Bz+(B +$BXH(B +$Bz*(B +$BXF(B +$BXI(B +$BXA(B +$BXE(B +$BXJ(B +$BXK(B +$BX@(B +$B;|(B +$BXD(B +$BBV(B +$B92(B +$BX2(B +$B?5(B +$BXX(B +$BJi(B +$BXN(B +$BXO(B +$BXP(B +$BXW(B +$BXV(B +$BK}(B +$B47(B +$BXT(B +$B7E(B +$B34(B +$BXQ(B +$BN8(B +$BXS(B +$B0V(B +$BXU(B +$BXL(B +$BXR(B +$BXY(B +$B7D(B +$BXM(B +$BM](B +$BM+(B +$BX\(B +$BX`(B +$BA~(B +$BNy(B +$BXa(B +$BX^(B +$BX[(B +$Bz,(B +$BXZ(B +$BX_(B +$BJ0(B +$BF4(B +$B7F(B +$BXb(B +$BX](B +$BXc(B +$B7{(B +$B21(B +$BXk(B +$B48(B +$BXi(B +$BXj(B +$B:)(B +$BXh(B +$BXf(B +$BXe(B +$BXl(B +$BXd(B +$BXn(B +$B2{(B +$BXp(B +$BXo(B +$BD((B +$BXs(B +$BXq(B +$BXg(B +$B7|(B +$BXr(B +$BXv(B +$BXu(B +$BXw(B +$BXt(B +$BXx(B +$BXy(B +$BXz(B +$BJj(B +$BX|(B +$BX{(B +$B=?(B +$B@.(B +$B2f(B +$B2|(B +$Bz-(B +$BX}(B +$B0?(B +$B@L(B +$BX~(B +$BlC(B +$BY!(B +$B7a(B +$BY"(B +$B@o(B +$BY#(B +$BY$(B +$B5:(B +$BY%(B +$BY&(B +$BY'(B +$BBW(B +$B8M(B +$BLa(B +$BK<(B +$B=j(B +$BY((B +$B@p(B +$Bn=(B +$BHb(B +$B +$B:M(B +$BY)(B +$BBG(B +$BJ'(B +$BBq(B +$BY,(B +$BY*(B +$BY-(B +$BY+(B +$BY.(B +$BJ1(B +$B07(B +$BI^(B +$BHc(B +$BY/(B +$BY2(B +$B>5(B +$B5;(B +$BY0(B +$BY7(B +$B>6(B +$BY1(B +$BGD(B +$BM^(B +$BY3(B +$BY4(B +$BY8(B +$BEj(B +$BY5(B +$B93(B +$B@^(B +$BYF(B +$BH4(B +$BBr(B +$Bz.(B +$BHd(B +$BZ-(B +$BJz(B +$BDq(B +$BKu(B +$BY;(B +$B2!(B +$BCj(B +$BYD(B +$BC4(B +$BY>(B +$BYE(B +$BY@(B +$BYG(B +$BYC(B +$BYB(B +$BGo(B +$BY<(B +$B2}(B +$BY:(B +$B5q(B +$BBs(B +$BY6(B +$BY9(B +$B94(B +$B@[(B +$B>7(B +$BYA(B +$BGR(B +$B5r(B +$B3H(B +$B3g(B +$B?!(B +$BYI(B +$BYN(B +$BYJ(B +$B7}(B +$BYO(B +$B;"(B +$B9i(B +$B=&(B +$BY=(B +$B;}(B +$BYL(B +$B;X(B +$BYM(B +$B0D(B +$BYH(B +$BD)(B +$B5s(B +$B64(B +$BYK(B +$B0'(B +$B:C(B +$B?6(B +$BDr(B +$BHT(B +$BYQ(B +$BA^(B +$BB*(B +$B;+(B +$BYR(B +$BYT(B +$BYP(B +$BJa(B +$BD=(B +$BA\(B +$BJ{(B +$B +$BY`(B +$BY_(B +$B?x(B +$B7~(B +$BYY(B +$B>9(B +$BFh(B +$BG1(B +$BYW(B +$BA](B +$B +$BY\(B +$B>8(B +$BYV(B +$BY[(B +$BGS(B +$BYU(B +$B7!(B +$B3](B +$BY](B +$BN+(B +$B:N(B +$BC5(B +$BYZ(B +$B@\(B +$B95(B +$B?d(B +$B1f(B +$BA<(B +$BYX(B +$B5E(B +$B7G(B +$BDO(B +$BY^(B +$BA_(B +$BYa(B +$BYc(B +$BB7(B +$BYi(B +$BYd(B +$BYf(B +$BIA(B +$BDs(B +$BYg(B +$BM,(B +$BMH(B +$B49(B +$B0.(B +$BYe(B +$BYb(B +$B4x(B +$B1g(B +$Bz/(B +$BYh(B +$BMI(B +$BYl(B +$BB;(B +$BYs(B +$BYm(B +$BYj(B +$BYq(B +$BYS(B +$BYn(B +$BYr(B +$BHB(B +$BEk(B +$BYk(B +$BYo(B +$B7H(B +$B:q(B +$B@](B +$BYw(B +$BE&(B +$Bz0(B +$BYt(B +$BK`(B +$BYu(B +$BYv(B +$BLN(B +$B@"(B +$B7b(B +$BY}(B +$B;5(B +$BYz(B +$BYy(B +$BG2(B +$Bz1(B +$BF5(B +$BE1(B +$BY{(B +$BY|(B +$BIo(B +$BGE(B +$B;#(B +$B@q(B +$BKP(B +$B3I(B +$BZ%(B +$BY~(B +$BMJ(B +$BZ'(B +$BZ#(B +$BZ$(B +$BA`(B +$Bz2(B +$BZ"(B +$BY?(B +$BZ&(B +$BZ!(B +$BZ+(B +$BZ,(B +$BE'(B +$BZ.(B +$B;$(B +$BZ)(B +$B5<(B +$BZ/(B +$BZ((B +$BZ3(B +$BZ2(B +$BZ1(B +$BZ4(B +$BZ6(B +$B>q(B +$BZ5(B +$BZ9(B +$BZ7(B +$BZ8(B +$BYp(B +$BZ;(B +$BZ:(B +$BYx(B +$BZ<(B +$BZ0(B +$B;Y(B +$BZ=(B +$BZ>(B +$BZ@(B +$BZ?(B +$BZA(B +$B2~(B +$B96(B +$BJ|(B +$B@/(B +$B8N(B +$BZC(B +$BZF(B +$Bz3(B +$BIR(B +$B5_(B +$BZE(B +$BZD(B +$BGT(B +$BZG(B +$B65(B +$BZI(B +$BZH(B +$B4:(B +$B;6(B +$BFX(B +$B7I(B +$B?t(B +$BZJ(B +$B@0(B +$BE((B +$BI_(B +$BZK(B +$BZL(B +$BZM(B +$BJ8(B +$BU](B +$B@F(B +$BIL(B +$B:X(B +$BHe(B +$BHC(B +$BEM(B +$BNA(B +$BZO(B +$B +$BZP(B +$B06(B +$B6T(B +$B@M(B +$BI`(B +$BZQ(B +$B;B(B +$BCG(B +$B;[(B +$B?7(B +$BZR(B +$BJ}(B +$B1w(B +$B;\(B +$BZU(B +$BZS(B +$BZV(B +$BN9(B +$BZT(B +$B@{(B +$BZW(B +$BB2(B +$BZX(B +$B4z(B +$BZZ(B +$BZY(B +$BZ[(B +$BZ\(B +$B4{(B +$BF|(B +$BC6(B +$B5l(B +$B;](B +$BAa(B +$B=\(B +$B00(B +$BZ](B +$B2"(B +$BZa(B +$Bz4(B +$B97(B +$BZ`(B +$B:+(B +$B>:(B +$Bz7(B +$BZ_(B +$B>;(B +$BL@(B +$B:*(B +$B0W(B +$B@N(B +$Bz5(B +$BZf(B +$Bz9(B +$B@1(B +$B1G(B +$Bz:(B +$B=U(B +$BKf(B +$B:r(B +$B><(B +$Bz8(B +$B@'(B +$By((B +$BZe(B +$BZc(B +$BZd(B +$Bz6(B +$BCk(B +$B[&(B +$BZj(B +$B;~(B +$B98(B +$BZh(B +$BZi(B +$B?8(B +$BZg(B +$B;/(B +$Bz<(B +$Bz=(B +$BZl(B +$BZk(B +$BZp(B +$BZq(B +$BZm(B +$Bz;(B +$B3"(B +$BZn(B +$BZo(B +$BHU(B +$BIa(B +$B7J(B +$BZr(B +$Bz?(B +$B@2(B +$B>=(B +$BCR(B +$B6G(B +$BZs(B +$BZw(B +$B2K(B +$BZt(B +$BZv(B +$BZu(B +$B=k(B +$BCH(B +$B0E(B +$BZx(B +$Bz@(B +$BZy(B +$BzA(B +$BD*(B +$BNq(B +$B;C(B +$BJk(B +$BzB(B +$BK=(B +$B["(B +$BZ{(B +$BZ~(B +$BZ}(B +$BzC(B +$BZz(B +$B[!(B +$BF^(B +$BZ|(B +$B[#(B +$B=l(B +$B[$(B +$BMK(B +$BGx(B +$B[%(B +$B['(B +$B[((B +$B[)(B +$B6J(B +$B1H(B +$B99(B +$B[*(B +$B[+(B +$B=q(B +$BAb(B +$BzD(B +$By+(B +$BRX(B +$BA>(B +$BA=(B +$BBX(B +$B:G(B +$BPr(B +$B7n(B +$BM-(B +$BJ~(B +$BI~(B +$BzE(B +$B[,(B +$B:s(B +$BD?(B +$B[-(B +$BO/(B +$BK>(B +$BD+(B +$B[.(B +$B4|(B +$B[/(B +$B[0(B +$BLZ(B +$BL$(B +$BKv(B +$BK\(B +$B;%(B +$B[2(B +$B +$BKQ(B +$B[4(B +$B[7(B +$B[6(B +$B4y(B +$B5`(B +$B[3(B +$B[5(B +$B[8(B +$B?y(B +$BM{(B +$B0I(B +$B:`(B +$BB<(B +$B<](B +$B>s(B +$B[;(B +$BEN(B +$B[9(B +$BB+(B +$B[:(B +$B>r(B +$BL](B +$B[<(B +$B[=(B +$BMh(B +$BzG(B +$B[B(B +$B9:(B +$BGU(B +$B[?(B +$BEl(B +$BZ^(B +$BZb(B +$B5O(B +$BGG(B +$B[A(B +$B>>(B +$BHD(B +$B[G(B +$BHz(B +$B[>(B +$B[D(B +$B[C(B +$B@O(B +$BKm(B +$BNS(B +$BKg(B +$B2L(B +$B;^(B +$BOH(B +$B[F(B +$B?u(B +$B[E(B +$B[@(B +$B8O(B +$B[L(B +$B[J(B +$B2M(B +$B[H(B +$B[N(B +$B[T(B +$BzH(B +$BzJ(B +$BBH(B +$BJA(B +$B[V(B +$BI"(B +$B[U(B +$BGp(B +$BK?(B +$B4;(B +$B@w(B +$B=@(B +$BDS(B +$BM.(B +$B[Q(B +$B[P(B +$B[R(B +$B[O(B +$B[W(B +$B[M(B +$B[K(B +$B[S(B +$B[I(B +$BCl(B +$BLx(B +$B +$B:t(B +$B::(B +$BKo(B +$B3A(B +$BzK(B +$BDN(B +$BFJ(B +$B1I(B +$B@r(B +$B@4(B +$B7*(B +$B[Y(B +$B9;(B +$B3|(B +$B[[(B +$B3t(B +$B[a(B +$B[^(B +$B@s(B +$B3K(B +$B:,(B +$B3J(B +$B:O(B +$B[\(B +$B7e(B +$B7K(B +$BEm(B +$BzL(B +$B[Z(B +$B0F(B +$B[](B +$B[_(B +$B6M(B +$B7,(B +$BzI(B +$B4<(B +$B5K(B +$B[b(B +$B:y(B +$BKq(B +$B;7(B +$B[c(B +$BI0(B +$B[o(B +$B23(B +$B[d(B +$B[u(B +$B[e(B +$BNB(B +$B[l(B +$BG_(B +$B[t(B +$B[g(B +$B04(B +$B[i(B +$B9<(B +$B[k(B +$B[j(B +$B[f(B +$B[q(B +$B>?(B +$BTm(B +$B8h(B +$BM|(B +$B[h(B +$BDt(B +$B3#(B +$B:-(B +$B[`(B +$B[p(B +$B3a(B +$B[n(B +$B[r(B +$BEn(B +$B4~(B +$B\2(B +$By)(B +$BLI(B +$B[w(B +$B4}(B +$B[~(B +$BzM(B +$BK@(B +$B\!(B +$B\#(B +$B\'(B +$B[y(B +$BC*(B +$BEo(B +$B\+(B +$B[|(B +$B\((B +$B\"(B +$B?9(B +$B\,(B +$B@3(B +$B\*(B +$B4=(B +$BOP(B +$B[v(B +$B\&(B +$B0X(B +$B[x(B +$BL:(B +$B[}(B +$B?"(B +$BDG(B +$B[s(B +$B\%(B +$B?z(B +$B\/(B +$B3q(B +$B8!(B +$B\1(B +$B[z(B +$B\0(B +$B\)(B +$B[{(B +$B\-(B +$B\.(B +$B\?(B +$BFN(B +$B\$(B +$B\;(B +$B\=(B +$BDX(B +$BML(B +$BIv(B +$B\8(B +$BBJ(B +$B\>(B +$BA?(B +$B\5(B +$B\B(B +$B\A(B +$BFo(B +$B\@(B +$BFj(B +$BzO(B +$B\D(B +$B\7(B +$B6H(B +$B\:(B +$B=](B +$BG`(B +$B\<(B +$B6K(B +$B\4(B +$B\6(B +$B\3(B +$BO0(B +$B3Z(B +$B\9(B +$B\C(B +$B35(B +$B:g(B +$B1](B +$B\T(B +$BO1(B +$B\W(B +$BzQ(B +$B?:(B +$B\V(B +$B\U(B +$B\R(B +$B\F(B +$B\c(B +$B\E(B +$B\X(B +$B\P(B +$B\K(B +$B\H(B +$B\I(B +$B\Q(B +$Bt"(B +$B\N(B +$B9=(B +$BDH(B +$BAd(B +$B\L(B +$B\G(B +$B\J(B +$BMM(B +$BKj(B +$B\O(B +$B\Y(B +$BzR(B +$B\a(B +$B\Z(B +$B\g(B +$B\e(B +$B\`(B +$B\_(B +$BDP(B +$BAe(B +$B\](B +$B\[(B +$B\b(B +$B\h(B +$BHu(B +$B\n(B +$B\i(B +$B\l(B +$B\f(B +$BCt(B +$BI8(B +$B\\(B +$B\d(B +$B>@(B +$BLO(B +$B\x(B +$B\k(B +$B8"(B +$B2#(B +$B3_(B +$B\S(B +$BzS(B +$B>A(B +$B\p(B +$B\w(B +$B +$B3r(B +$BC.(B +$B\m(B +$BzU(B +$B\r(B +$B\v(B +$B66(B +$B5L(B +$B\t(B +$B5!(B +$BFK(B +$B\s(B +$B\u(B +$BzT(B +$B\o(B +$BzV(B +$B\q(B +$BzW(B +$B3`(B +$BCI(B +$B\|(B +$B\z(B +$B8i(B +$B\y(B +$B]!(B +$B[X(B +$B\{(B +$B\}(B +$B\~(B +$B],(B +$B]((B +$B[m(B +$B]'(B +$B]&(B +$B]#(B +$B\j(B +$B]%(B +$B]$(B +$B]*(B +$BO&(B +$B]-(B +$B6{(B +$B])(B +$B]+(B +$BzX(B +$BzY(B +$BH'(B +$B].(B +$B]2(B +$B]/(B +$BMs(B +$B]0(B +$B\^(B +$B]3(B +$B]4(B +$B15(B +$B]6(B +$B7g(B +$B +$B6U(B +$B2$(B +$BM_(B +$B]8(B +$B]7(B +$B]:(B +$B5=(B +$B6V(B +$B4>(B +$B]=(B +$B]<(B +$B]>(B +$B2N(B +$BC7(B +$B]?(B +$B4?(B +$B]A(B +$B]@(B +$B]B(B +$B]C(B +$B]D(B +$B;_(B +$B@5(B +$B:!(B +$BIp(B +$BJb(B +$BOD(B +$B;u(B +$B:P(B +$BNr(B +$B]E(B +$B]F(B +$B;`(B +$B]G(B +$B]H(B +$B]J(B +$B]I(B +$BKX(B +$B=^(B +$B +$B;D(B +$B]K(B +$B]M(B +$B?#(B +$B]L(B +$B]N(B +$B]O(B +$B]P(B +$B]Q(B +$B]R(B +$B]T(B +$B]S(B +$B]U(B +$B2%(B +$BCJ(B +$B]V(B +$B;&(B +$B3L(B +$B]W(B +$BEB(B +$BTL(B +$B5#(B +$B]X(B +$B]Y(B +$BJl(B +$BKh(B +$BFG(B +$B]Z(B +$BHf(B +$BzZ(B +$BH{(B +$BLS(B +$B][(B +$B]](B +$B]\(B +$B]_(B +$B]^(B +$B]a(B +$B;a(B +$BL1(B +$B]b(B +$B]c(B +$B5$(B +$B]d(B +$B]f(B +$B]e(B +$B?e(B +$BI9(B +$B1J(B +$BHE(B +$Bz[(B +$BDu(B +$B=A(B +$B5a(B +$BHF(B +$B<.(B +$B]h(B +$B4@(B +$B1x(B +$Bz\(B +$BFr(B +$B]g(B +$B9>(B +$BCS(B +$B]i(B +$B]q(B +$B]j(B +$Bz^(B +$BBA(B +$B5b(B +$B]r(B +$B7h(B +$B5%(B +$B]p(B +$B]n(B +$B]k(B +$BM`(B +$Bz](B +$BD@(B +$BFY(B +$B]l(B +$B]t(B +$B]s(B +$B7#(B +$B2-(B +$B:;(B +$B]m(B +$B]o(B +$BKW(B +$BBt(B +$BKw(B +$B]|(B +$B]}(B +$B2O(B +$BJ((B +$BL}(B +$B^!(B +$B<#(B +$B>B(B +$B]x(B +$B]~(B +$B1h(B +$B67(B +$B]u(B +$B]z(B +$B@t(B +$BGq(B +$BHg(B +$B]w(B +$BK!(B +$B]y(B +$B^$(B +$Bz_(B +$B^"(B +$B]{(B +$BK"(B +$BGH(B +$B5c(B +$BE%(B +$BCm(B +$B^%(B +$B^#(B +$BBY(B +$B]v(B +$B1K(B +$Bz`(B +$BMN(B +$B^0(B +$B^/(B +$B@v(B +$B^,(B +$BMl(B +$BF6(B +$B^&(B +$BDE(B +$B1L(B +$B9?(B +$B^)(B +$B='(B +$B^.(B +$B^-(B +$B^((B +$B^+(B +$B3h(B +$B^*(B +$BGI(B +$BN.(B +$B>t(B +$B@u(B +$B^6(B +$B^4(B +$BIM(B +$B^1(B +$B^3(B +$B1:(B +$B9@(B +$BO2(B +$B3=(B +$BIb(B +$Bzb(B +$BMa(B +$B3$(B +$B?;(B +$B^5(B +$B^:(B +$Bza(B +$B>C(B +$BM0(B +$B^7(B +$B^2(B +$B^8(B +$Bzc(B +$BN^(B +$BEs(B +$BFB(B +$Bzd(B +$B36(B +$B1U(B +$B^>(B +$B^A(B +$BNC(B +$BMd(B +$B^H(B +$B^B(B +$B^?(B +$BNT(B +$B^E(B +$Bze(B +$B=J(B +$B^G(B +$B^L(B +$BEq(B +$B^J(B +$B^D(B +$BC8(B +$B^K(B +$B^@(B +$B^F(B +$B^M(B +$B0|(B +$B^C(B +$B^N(B +$B?<(B +$Bzg(B +$B=_(B +$BJ%(B +$B:.(B +$Bzf(B +$B^;(B +$B^I(B +$BE:(B +$Bzh(B +$B@6(B +$B3i(B +$B:Q(B +$B>D(B +$B^=(B +$B=B(B +$B7L(B +$B^<(B +$B^R(B +$B=m(B +$B8:(B +$B^a(B +$B^[(B +$B5t(B +$BEO(B +$B^V(B +$B^_(B +$B0/(B +$B12(B +$Bzk(B +$B29(B +$B^X(B +$BB,(B +$B^O(B +$B^Q(B +$B9A(B +$B^b(B +$Bzi(B +$B^](B +$Bzl(B +$B^U(B +$B^\(B +$BL+(B +$B^Z(B +$B^^(B +$B8P(B +$B>E(B +$BC9(B +$Bzj(B +$B^T(B +$BM/(B +$B^W(B +$B^P(B +$BEr(B +$B^S(B +$B^Y(B +$BOQ(B +$B<>(B +$BK~(B +$B^c(B +$BH.(B +$B^o(B +$B8;(B +$B=`(B +$B^e(B +$BN/(B +$B9B(B +$B^r(B +$B0n(B +$B^p(B +$B^d(B +$B^j(B +$B^l(B +$BMO(B +$B^g(B +$BE.(B +$B^i(B +$Bzm(B +$B^q(B +$B^k(B +$BLG(B +$B^f(B +$B<"(B +$B^~(B +$B3j(B +$B^h(B +$B^m(B +$B^n(B +$BBl(B +$BBZ(B +$B^v(B +$B^|(B +$B^z(B +$BE)(B +$B_#(B +$B^w(B +$B^x(B +$B^`(B +$B5y(B +$BI:(B +$B +$B9w(B +$BO3(B +$B^t(B +$B_"(B +$B1i(B +$BAf(B +$BGy(B +$B4A(B +$BNz(B +$BL!(B +$BDR(B +$B^{(B +$B^}(B +$BA2(B +$B_!(B +$B^y(B +$B^s(B +$B4C(B +$B7i(B +$B_/(B +$B_*(B +$B@x(B +$B3c(B +$B=a(B +$B_3(B +$B_,(B +$BD,(B +$B_)(B +$BDY(B +$B_L(B +$B_&(B +$B_%(B +$B_.(B +$B_((B +$B_'(B +$B_-(B +$B@!(B +$B_$(B +$Bzn(B +$B_0(B +$B_1(B +$B4B(B +$B_6(B +$B_5(B +$B_7(B +$B_:(B +$BEC(B +$B_4(B +$Bzo(B +$B_8(B +$B7c(B +$BBy(B +$B_2(B +$BG;(B +$B_9(B +$B_>(B +$B_<(B +$B_?(B +$B_B(B +$B_;(B +$B9j(B +$BG((B +$B^9(B +$BMt(B +$B_=(B +$B_A(B +$BBu(B +$B_@(B +$B_+(B +$Bzp(B +$Boi(B +$B_E(B +$B_I(B +$B_G(B +$Bzq(B +$Bzr(B +$B_C(B +$B_D(B +$B_H(B +$B_F(B +$BIN(B +$B_N(B +$B_K(B +$B_J(B +$B_M(B +$BFT(B +$B_O(B +$BCu(B +$BBm(B +$Bzs(B +$B@%(B +$B_P(B +$B_R(B +$B_Q(B +$B^u(B +$B_S(B +$BFg(B +$B_T(B +$B2P(B +$BEt(B +$B3%(B +$B5d(B +$B<^(B +$B:R(B +$Bzt(B +$BO'(B +$B?f(B +$B1j(B +$B_V(B +$B_U(B +$Bzu(B +$B_Y(B +$BC:(B +$B_\(B +$B_W(B +$B_[(B +$B_Z(B +$BE@(B +$B0Y(B +$By'(B +$BNu(B +$B_^(B +$B1((B +$B_`(B +$B__(B +$B_](B +$B_X(B +$BK#(B +$B_b(B +$Bzw(B +$B_a(B +$Bzv(B +$B1k(B +$B_d(B +$BJ2(B +$B_c(B +$BL5(B +$B>G(B +$BA3(B +$B>F(B +$Bzy(B +$Bzz(B +$BN{(B +$B_j(B +$B@y(B +$B_f(B +$B_k(B +$B1l(B +$Bzx(B +$B_i(B +$BGa(B +$B_e(B +$B_h(B +$B>H(B +$BHQ(B +$B_l(B +$B +$B@z(B +$B_o(B +$B_g(B +$B7'(B +$B_m(B +$BMP(B +$B_p(B +$Bt&(B +$B=O(B +$B_q(B +$B_r(B +$BG.(B +$B_t(B +$B_u(B +$Bz|(B +$BG3(B +$BEu(B +$B_w(B +$B_y(B +$BNU(B +$B_v(B +$B_x(B +$B1m(B +$B_s(B +$BS[(B +$B_z(B +$BAg(B +$B;8(B +$B_|(B +$B_{(B +$B?$(B +$BRY(B +$B_}(B +$B`!(B +$B_n(B +$B_~(B +$Bz}(B +$B`"(B +$BGz(B +$B`#(B +$B`$(B +$B`%(B +$B`&(B +$BD^(B +$B`((B +$B`'(B +$B`)(B +$B`*(B +$B<_(B +$BIc(B +$BLl(B +$B`+(B +$B`,(B +$BAV(B +$B<$(B +$B`-(B +$B`.(B +$B`/(B +$BJR(B +$BHG(B +$B`0(B +$BGW(B +$BD-(B +$B`1(B +$B2g(B +$B5m(B +$BLF(B +$BL6(B +$B24(B +$BO4(B +$BKR(B +$BJ*(B +$B@7(B +$B`2(B +$BFC(B +$B8#(B +$B`3(B +$B:T(B +$B`5(B +$B`4(B +$B`6(B +$B`7(B +$B`8(B +$B5>(B +$B`9(B +$B`:(B +$B8$(B +$BHH(B +$Bz~(B +$B`<(B +$B>u(B +$B`;(B +$B{!(B +$B68(B +$B`=(B +$B`?(B +$B`>(B +$B`@(B +$B8Q(B +$B`A(B +$B6i(B +$BA@(B +$B9}(B +$B`C(B +$B`D(B +$B`B(B +$B +$BFH(B +$B69(B +$B`F(B +$BC,(B +$B`E(B +$BO5(B +$BGb(B +$B`I(B +$B`K(B +$B`H(B +$BLT(B +$B`J(B +$B`L(B +$BND(B +$B{"(B +$B`P(B +$B`O(B +$BCv(B +$BG-(B +$B8%(B +$B`N(B +$B`M(B +$BM1(B +$BM2(B +$B`Q(B +$B1n(B +$B9v(B +$B;b(B +$B`R(B +$B`S(B +$B`U(B +$B=C(B +$B`W(B +$B`V(B +$B`X(B +$B3M(B +$B`Z(B +$B{$(B +$B`Y(B +$B`\(B +$B`[(B +$B8<(B +$BN((B +$B6L(B +$B2&(B +$B6j(B +$B4a(B +$BNh(B +$B`^(B +$B``(B +$B{%(B +$B`a(B +$B2Q(B +$B`](B +$B{&(B +$B;9(B +$BDA(B +$B`_(B +$B{)(B +$B{'(B +$B`d(B +$B +$B{((B +$B`b(B +$B7>(B +$BHI(B +$B`c(B +$B`~(B +$B{+(B +$B`i(B +$B8=(B +$B5e(B +$B`f(B +$BM}(B +$B{*(B +$BN0(B +$BBv(B +$B`h(B +$B{,(B +$B{.(B +$B{-(B +$B{/(B +$B`j(B +$BNV(B +$B6W(B +$BH|(B +$BGJ(B +$B`k(B +$B`m(B +$B`p(B +$B`l(B +$B`o(B +$B8j(B +$B1M(B +$B`q(B +$B?p(B +$B`n(B +$BN\(B +$B{0(B +$B`t(B +$Bt$(B +$B`r(B +$B`u(B +$B`g(B +$B`s(B +$B:<(B +$B`v(B +$B`w(B +$BM~(B +$B{1(B +$B`x(B +$B`y(B +$B{2(B +$B`e(B +$B`z(B +$B4D(B +$B<%(B +$B`{(B +$B`|(B +$B`}(B +$B1;(B +$Ba!(B +$BI;(B +$Ba"(B +$B4$(B +$Ba#(B +$Ba$(B +$Ba%(B +$Ba'(B +$Ba((B +$Ba&(B +$BIS(B +$Ba*(B +$Ba)(B +$B{3(B +$Ba,(B +$Ba+(B +$Ba-(B +$Ba.(B +$Ba0(B +$Ba/(B +$B9y(B +$Ba2(B +$Ba1(B +$B4E(B +$B?S(B +$BE<(B +$Ba3(B +$B@8(B +$B;:(B +$B1y(B +$Ba4(B +$BMQ(B +$BJc(B +$Ba5(B +$Byl(B +$BED(B +$BM3(B +$B9C(B +$B?=(B +$BCK(B +$BR4(B +$BD.(B +$B2h(B +$Ba6(B +$Ba7(B +$Ba<(B +$Ba:(B +$Ba9(B +$BZB(B +$B3&(B +$Ba8(B +$B0Z(B +$BH*(B +$BHJ(B +$BN1(B +$Ba=(B +$Ba;(B +$BC\(B +$B@&(B +$BH+(B +$BI-(B +$Ba?(B +$BN,(B +$B7M(B +$Ba@(B +$Ba>(B +$BHV(B +$BaA(B +$BaB(B +$B{4(B +$B0[(B +$B>v(B +$BaG(B +$BaD(B +$BFm(B +$BaC(B +$B5&(B +$BaJ(B +$BaE(B +$BaF(B +$BaI(B +$BaH(B +$BI%(B +$BAB(B +$BAA(B +$B5?(B +$BaK(B +$BaL(B +$BaM(B +$BaO(B +$BaN(B +$B1V(B +$BaW(B +$BHh(B +$BaQ(B +$BaS(B +$BaU(B +$B?>(B +$BaV(B +$BaT(B +$B<@(B +$BaP(B +$BaR(B +$BIB(B +$B>I(B +$BaY(B +$BaX(B +$BaZ(B +$B<&(B +$B:/(B +$BEw(B +$Ba[(B +$BDK(B +$Ba](B +$BN!(B +$Ba\(B +$BAi(B +$Bab(B +$Bad(B +$Bae(B +$BCT(B +$Bac(B +$Ba`(B +$Ba^(B +$Ba_(B +$Baa(B +$Bah(B +$Baf(B +$Bag(B +$Bai(B +$Bak(B +$Bal(B +$Bam(B +$Ban(B +$Baj(B +$Bap(B +$Bao(B +$Baq(B +$BNE(B +$Bat(B +$Bar(B +$Bas(B +$B4b(B +$BL~(B +$BJJ(B +$Bav(B +$Bau(B +$Baw(B +$Bax(B +$Ba|(B +$Bay(B +$Baz(B +$Ba{(B +$Ba}(B +$Ba~(B +$Bb!(B +$Bb"(B +$Bb#(B +$BH/(B +$BEP(B +$Bb$(B +$BGr(B +$BI4(B +$Bb%(B +$B{5(B +$Bb&(B +$BE*(B +$B3'(B +$B9D(B +$Bb'(B +$Bb((B +$Bb)(B +$B;)(B +$Bb+(B +$Bb*(B +$Bb,(B +$Bb-(B +$B{8(B +$B{6(B +$B{7(B +$B{9(B +$BHi(B +$Bb.(B +$Bb/(B +$Bsi(B +$Bb0(B +$Bb1(B +$Bb2(B +$B;.(B +$Bb3(B +$BGV(B +$BK_(B +$B1N(B +$B1W(B +$Bb4(B +$Bb6(B +$Bb5(B +$BEp(B +$B@9(B +$B]9(B +$Bb7(B +$BLA(B +$Bb8(B +$B4F(B +$BHW(B +$Bb9(B +$Bb:(B +$Bb;(B +$BL\(B +$BLU(B +$BD>(B +$BAj(B +$Bb=(B +$B=b(B +$B>J(B +$Bb@(B +$Bb?(B +$Bb>(B +$BH}(B +$B4G(B +$B8)(B +$BbF(B +$BbC(B +$B??(B +$BL2(B +$BbB(B +$BbD(B +$BbE(B +$BbA(B +$BbG(B +$BbH(B +$BD/(B +$B4c(B +$BCe(B +$B{;(B +$BbI(B +$BbJ(B +$BbM(B +$B?g(B +$BFD(B +$BbN(B +$BKS(B +$BbK(B +$BbL(B +$BbQ(B +$BbP(B +$BbO(B +$BbS(B +$BbR(B +$BbT(B +$BbV(B +$BbU(B +$BJM(B +$B=V(B +$BNF(B +$BbW(B +$BF7(B +$BbX(B +$BbY(B +$Bb](B +$Bb[(B +$Bb\(B +$BbZ(B +$Bb^(B +$Bb_(B +$Bb`(B +$Bba(B +$BL7(B +$Bbb(B +$BLp(B +$Bbc(B +$BCN(B +$BGj(B +$B6k(B +$BC;(B +$Bbd(B +$B6:(B +$B@P(B +$Bbe(B +$B:=(B +$Bbf(B +$Bbg(B +$B8&(B +$B:U(B +$Bbi(B +$B{=(B +$BEV(B +$B:V(B +$B5N(B +$BK$(B +$BGK(B +$BEW(B +$B9\(B +$Bbk(B +$B{>(B +$B>K(B +$B{?(B +$BN2(B +$B9E(B +$B8'(B +$BH#(B +$Bbm(B +$B{@(B +$Bbo(B +$B8k(B +$Bbn(B +$BDv(B +$Bbq(B +$B37(B +$Bbl(B +$BHj(B +$B10(B +$B:l(B +$BOR(B +$Bbp(B +$Bbr(B +$BJK(B +$B@Y(B +$Bbt(B +$Bbu(B +$Bbs(B +$B3N(B +$Bb{(B +$Bbz(B +$B<'(B +$Bb|(B +$Bbw(B +$Bb}(B +$Bbx(B +$BHX(B +$Bbv(B +$Bby(B +$Bc"(B +$Bc!(B +$BKa(B +$Bb~(B +$B0k(B +$Bc$(B +$Bc#(B +$B>L(B +$Bc%(B +$BAC(B +$Bc'(B +$Bc&(B +$Bc((B +$Bbh(B +$Bbj(B +$Bc*(B +$Bc)(B +$B{A(B +$B<((B +$BNi(B +$B +$Bc+(B +$B77(B +$B5@(B +$B5'(B +$B;c(B +$BM4(B +$Bc1(B +$Bc0(B +$BAD(B +$Bc-(B +$Bc/(B +$B=K(B +$B?@(B +$Bc.(B +$Bc,(B +$BG*(B +$B>M(B +$BI<(B +$B:W(B +$BEx(B +$Bc2(B +$Bc3(B +$BcI(B +$B6X(B +$BO=(B +$BA5(B +$Bc4(B +$B2R(B +$BDw(B +$BJ!(B +$B{E(B +$B{G(B +$Bc5(B +$B5z(B +$Bc6(B +$Bc8(B +$Bc9(B +$BG)(B +$Bc:(B +$Bc;(B +$Bc<(B +$B6Y(B +$B2S(B +$BFE(B +$B=((B +$B;d(B +$Bc=(B +$B=)(B +$B2J(B +$BIC(B +$Bc>(B +$BHk(B +$BAE(B +$BcA(B +$BcB(B +$BGi(B +$B?A(B +$Bc?(B +$BCa(B +$Bc@(B +$B>N(B +$B0\(B +$B5)(B +$BcC(B +$BDx(B +$BcD(B +$B@G(B +$BL-(B +$BI#(B +$BcE(B +$BcF(B +$BCU(B +$BNG(B +$BcH(B +$BcG(B +$B +$BcJ(B +$B0p(B +$BcM(B +$BcK(B +$B2T(B +$B7N(B +$BcL(B +$B9F(B +$B9r(B +$BJf(B +$BcN(B +$BKT(B +$BcP(B +$B@Q(B +$B1O(B +$B2:(B +$B0,(B +$BcO(B +$BcQ(B +$BcR(B +$B>w(B +$BcS(B +$B3O(B +$BcU(B +$B7j(B +$B5f(B +$BcV(B +$B6u(B +$BcW(B +$B@|(B +$BFM(B +$B@`(B +$B:u(B +$BcX(B +$BCb(B +$BAk(B +$BcZ(B +$Bc\(B +$BcY(B +$Bc[(B +$B7"(B +$Bc](B +$B7&(B +$B5g(B +$BMR(B +$Bc_(B +$Bc`(B +$B1.(B +$Bcc(B +$B3v(B +$Bcb(B +$Bca(B +$Bce(B +$Bc^(B +$Bcf(B +$BN)(B +$Bcg(B +$Bch(B +$B{H(B +$BTt(B +$Bcj(B +$Bci(B +$Bck(B +$Bcl(B +$BN5(B +$Bcm(B +$Bpo(B +$B>O(B +$Bcn(B +$Bco(B +$B=W(B +$BF8(B +$Bcp(B +$B{I(B +$BC((B +$B{K(B +$Bcq(B +$BC<(B +$Bcr(B +$B6%(B +$BQ?(B +$BC](B +$B<3(B +$B4H(B +$Bcs(B +$Bd"(B +$Bcv(B +$B5h(B +$Bcu(B +$Bd$(B +$Bct(B +$B>P(B +$Bcx(B +$Bcy(B +$BE+(B +$Bcz(B +$B3^(B +$B?Z(B +$BId(B +$Bc|(B +$BBh(B +$Bcw(B +$Bc{(B +$Bc}(B +$B:{(B +$Bd&(B +$BI.(B +$BH&(B +$BEy(B +$B6Z(B +$Bd%(B +$Bd#(B +$BH5(B +$Bc~(B +$BC^(B +$BE{(B +$BEz(B +$B:v(B +$Bd8(B +$Bd((B +$Bd*(B +$Bd-(B +$Bd.(B +$Bd+(B +$Bd,(B +$Bd)(B +$Bd'(B +$Bd!(B +$BJO(B +$B2U(B +$Bd5(B +$Bd2(B +$Bd7(B +$Bd6(B +$BGs(B +$BL'(B +$B;;(B +$Bd0(B +$Bd9(B +$Bd4(B +$Bd3(B +$Bd/(B +$B{L(B +$Bd1(B +$B4I(B +$BC=(B +$B@}(B +$BH"(B +$Bd>(B +$BH$(B +$B@a(B +$Bd;(B +$BHO(B +$Bd?(B +$BJS(B +$BC[(B +$Bd:(B +$Bd<(B +$Bd=(B +$Bd@(B +$B +$BFF(B +$BdE(B +$BdD(B +$BdA(B +$BO6(B +$BdJ(B +$BdN(B +$BdK(B +$BdG(B +$BdH(B +$BdM(B +$BdB(B +$BRU(B +$BdI(B +$BdC(B +$BdL(B +$BdR(B +$B4J(B +$BdO(B +$BdP(B +$BdQ(B +$BdT(B +$BdS(B +$BHv(B +$BdU(B +$BN|(B +$BJm(B +$BdZ(B +$BdW(B +$BdV(B +$B@R(B +$BdY(B +$Bd[(B +$BdX(B +$Bd_(B +$Bd\(B +$Bd](B +$BdF(B +$Bd^(B +$Bd`(B +$Bda(B +$BJF(B +$Bdb(B +$BLb(B +$B6N(B +$B7)(B +$Bdc(B +$BJ4(B +$B?h(B +$BL0(B +$Bdd(B +$BN3(B +$BGt(B +$BAF(B +$BG4(B +$B=M(B +$B0@(B +$Bdi(B +$Bdg(B +$Bde(B +$B4!(B +$B>Q(B +$Bdj(B +$Bdh(B +$Bdf(B +$Bdn(B +$Bdm(B +$Bdl(B +$Bdk(B +$Bdo(B +$Bdp(B +$B@:(B +$Bdq(B +$Bds(B +$Bdr(B +$B8R(B +$BA8(B +$Bdu(B +$BE|(B +$Bdt(B +$Bdv(B +$BJ5(B +$BAl(B +$B9G(B +$Bdw(B +$BNH(B +$Bdy(B +$Bdz(B +$Bd{(B +$Bd|(B +$B;e(B +$Bd}(B +$B7O(B +$B5j(B +$B5*(B +$Be!(B +$BLs(B +$B9H(B +$Bd~(B +$Be$(B +$BLf(B +$BG<(B +$BI3(B +$B=c(B +$Be#(B +$B +$B9I(B +$B;f(B +$B5i(B +$BJ6(B +$Be"(B +$BAG(B +$BKB(B +$B:w(B +$B;g(B +$BD](B +$Be'(B +$BN_(B +$B:Y(B +$Be((B +$B?B(B +$Be*(B +$B>R(B +$B:0(B +$Be)(B +$B=*(B +$B8>(B +$BAH(B +$Be%(B +$Be+(B +$B{N(B +$Be&(B +$B7P(B +$Be.(B +$Be2(B +$B7k(B +$Be-(B +$Be6(B +$B{O(B +$B9J(B +$BMm(B +$B0<(B +$Be3(B +$B5k(B +$Be0(B +$Be1(B +$BE}(B +$Be/(B +$Be,(B +$B3((B +$B@d(B +$B8((B +$Be8(B +$Be5(B +$Be7(B +$Be4(B +$B7Q(B +$BB3(B +$Be9(B +$BAn(B +$BeF(B +$B{Q(B +$BeB(B +$Be<(B +$Be@(B +$B +$B0](B +$Be;(B +$BeC(B +$BeG(B +$B9K(B +$BLV(B +$BDV(B +$Be=(B +$B{P(B +$BeE(B +$Be:(B +$BC>(B +$Be?(B +$B0=(B +$BLJ(B +$Be>(B +$B6[(B +$BHl(B +$BAm(B +$BNP(B +$B=o(B +$Ben(B +$B{R(B +$BeH(B +$B@~(B +$BeD(B +$BeI(B +$BeK(B +$BDy(B +$BeN(B +$BeJ(B +$BJT(B +$B4K(B +$BLK(B +$B0^(B +$BeM(B +$BN}(B +$BeL(B +$B1o(B +$BFl(B +$BeO(B +$BeV(B +$BeP(B +$BeW(B +$BeS(B +$BG{(B +$B +$BeU(B +$BeR(B +$BeX(B +$BeQ(B +$B=D(B +$BK%(B +$B=L(B +$BeT(B +$Be`(B +$Be\(B +$Be_(B +$Be](B +$Bea(B +$Be[(B +$BeA(B +$B@S(B +$BHK(B +$Be^(B +$BeY(B +$BA!(B +$B7R(B +$B=+(B +$B{S(B +$B?%(B +$BA6(B +$Bed(B +$Bef(B +$Beg(B +$Bec(B +$Bee(B +$BeZ(B +$Beb(B +$Bej(B +$Bei(B +$BKz(B +$B7+(B +$Beh(B +$Bel(B +$Bek(B +$Beo(B +$Beq(B +$B;<(B +$Bem(B +$Ber(B +$Bes(B +$By!(B +$Bet(B +$Bez(B +$BE;(B +$Bev(B +$Beu(B +$Bew(B +$Bex(B +$Bey(B +$Be{(B +$Be|(B +$B4L(B +$Be}(B +$Be~(B +$Bf!(B +$B{T(B +$Bf"(B +$Bf#(B +$Bf$(B +$Bf%(B +$Bf&(B +$Bf((B +$Bf'(B +$Bf)(B +$Bf*(B +$Bf+(B +$Bf.(B +$Bf,(B +$Bf-(B +$B:a(B +$B7S(B +$BCV(B +$BH3(B +$B=p(B +$BGM(B +$BHm(B +$Bf/(B +$BXm(B +$Bf0(B +$Bf2(B +$BMe(B +$Bf1(B +$Bf4(B +$Bf3(B +$BMS(B +$Bf5(B +$BH~(B +$Bf6(B +$Bf9(B +$Bf8(B +$Bf7(B +$B{U(B +$Bf:(B +$B72(B +$BA"(B +$B5A(B +$Bf>(B +$Bf;(B +$Bf<(B +$Bf?(B +$Bf@(B +$Bf=(B +$B1)(B +$B2'(B +$BfB(B +$BfC(B +$BfD(B +$BMb(B +$B=,(B +$BfF(B +$BfE(B +$B?i(B +$BfG(B +$BfH(B +$BfI(B +$B4e(B +$B4M(B +$BfJ(B +$BfK(B +$BK](B +$BMc(B +$BMT(B +$BO7(B +$B9M(B +$BfN(B +$B +$BfM(B +$BfO(B +$B<)(B +$BBQ(B +$BfP(B +$B9L(B +$BLW(B +$BfQ(B +$BfR(B +$BfS(B +$BfT(B +$BfU(B +$B<*(B +$BLm(B +$BfW(B +$BC?(B +$BfV(B +$BfY(B +$BfX(B +$BfZ(B +$B@;(B +$Bf[(B +$Bf\(B +$BJ9(B +$Bf](B +$BAo(B +$Bf^(B +$Bf_(B +$BN~(B +$Bfb(B +$Bfa(B +$Bf`(B +$BD0(B +$Bfc(B +$B?&(B +$Bfd(B +$Bfe(B +$BO8(B +$Bff(B +$Bfg(B +$Bfi(B +$Bfh(B +$BH%(B +$BFy(B +$BO>(B +$BH)(B +$Bfk(B +$B>S(B +$BI*(B +$Bfl(B +$Bfj(B +$B4N(B +$B8T(B +$B;h(B +$BHn(B +$B8*(B +$BKC(B +$Bfo(B +$Bfm(B +$B9N(B +$B9O(B +$B0i(B +$B:h(B +$BGY(B +$B0_(B +$Bft(B +$BC@(B +$BGX(B +$BB[(B +$Bfv(B +$Bfr(B +$Bfu(B +$Bfp(B +$Bfs(B +$BK&(B +$B8U(B +$B0}(B +$Bfq(B +$Bfx(B +$Bfy(B +$BF9(B +$B6;(B +$Bg&(B +$BG=(B +$B;i(B +$B6<(B +$B@H(B +$BOF(B +$BL.(B +$Bfw(B +$B@T(B +$B5S(B +$Bfz(B +$Bf|(B +$Bf{(B +$Bf}(B +$BC&(B +$BG>(B +$BD1(B +$Bg#(B +$Bg"(B +$Bf~(B +$B?U(B +$BIe(B +$Bg%(B +$Bg$(B +$B9P(B +$BOS(B +$Bg5(B +$Bg)(B +$Bg*(B +$B +$Bg((B +$B9x(B +$Bg'(B +$Bg+(B +$BD2(B +$BJ"(B +$BA#(B +$BB\(B +$Bg/(B +$Bg0(B +$Bg,(B +$Bg-(B +$Bg.(B +$B9Q(B +$Bg6(B +$Bg2(B +$BIf(B +$BKl(B +$BI((B +$Bg1(B +$Bg4(B +$Bg3(B +$BKD(B +$Bg7(B +$Bg8(B +$BA7(B +$Bg9(B +$Bg;(B +$Bg?(B +$Bg<(B +$Bg:(B +$BG?(B +$Bg=(B +$Bg>(B +$B22(B +$BgE(B +$Bg@(B +$BgA(B +$BgB(B +$BB!(B +$BgD(B +$BgC(B +$BgF(B +$BgG(B +$BgH(B +$B?C(B +$B2i(B +$BgI(B +$BNW(B +$B<+(B +$B=-(B +$B;j(B +$BCW(B +$BgJ(B +$BgK(B +$B11(B +$BgL(B +$BgM(B +$BgN(B +$BgO(B +$BgP(B +$B6=(B +$BZ*(B +$BgQ(B +$B@e(B +$BgR(B +$B +$BgS(B +$BP0(B +$BgT(B +$BJ^(B +$B4\(B +$BA$(B +$B=X(B +$BIq(B +$B=.(B +$BgU(B +$B9R(B +$BgV(B +$BHL(B +$Bgd(B +$BgX(B +$BBI(B +$BGu(B +$B8?(B +$BgW(B +$BA%(B +$BgY(B +$BDz(B +$Bg[(B +$BgZ(B +$Bg](B +$Bg\(B +$Bg^(B +$Bg`(B +$Bg_(B +$B4O(B +$Bga(B +$Bgb(B +$Bgc(B +$B:1(B +$BNI(B +$Bge(B +$B?'(B +$B1p(B +$Bgf(B +$Bgg(B +$Bgh(B +$B0r(B +$Bgi(B +$Bgj(B +$BIg(B +$B +$Bgl(B +$B3)(B +$B02(B +$Bgk(B +$Bgn(B +$BGN(B +$B?D(B +$B2V(B +$BK'(B +$B7](B +$B6\(B +$Bgm(B +$B2j(B +$B4#(B +$B1q(B +$Bgr(B +$BNj(B +$BB](B +$BID(B +$Bg~(B +$B2W(B +$Bg|(B +$Bgz(B +$Bgq(B +$Bgo(B +$Bgp(B +$B +$B6l(B +$BCw(B +$BFQ(B +$B1Q(B +$Bgt(B +$Bgs(B +$Bgy(B +$Bgu(B +$Bgx(B +$B{W(B +$BLP(B +$Bgw(B +$B2X(B +$B3}(B +$Bg{(B +$Bg}(B +$B7T(B +$Bh#(B +$Bh,(B +$Bh-(B +$B0+(B +$Bh4(B +$B0q(B +$Bh+(B +$Bh*(B +$Bh%(B +$Bh$(B +$Bh"(B +$Bh!(B +$BCc(B +$BB{(B +$Bh'(B +$Bh&(B +$Bh)(B +$BAp(B +$B7U(B +$B1A(B +$Bh((B +$B9S(B +$BAq(B +$B{X(B +$Bh:(B +$Bh;(B +$B2Y(B +$B2.(B +$Bh8(B +$B{Y(B +$Bh.(B +$Bh6(B +$Bh=(B +$Bh7(B +$Bh5(B +$Bgv(B +$Bh3(B +$Bh/(B +$B4P(B +$Bh1(B +$Bh<(B +$Bh2(B +$Bh>(B +$Bh0(B +$BG|(B +$BMi(B +$Bh9(B +$BhO(B +$BhG(B +$B?{(B +$B{Z(B +$B5F(B +$B6](B +$BhB(B +$B2[(B +$B>T(B +$BhE(B +$B:Z(B +$BEQ(B +$BhJ(B +$BJn(B +$BhA(B +$B2Z(B +$B8V(B +$BI)(B +$BhK(B +$Bh?(B +$B{[(B +$BhH(B +$BhR(B +$BhC(B +$BhD(B +$BF:(B +$BhI(B +$BhF(B +$BK((B +$BhL(B +$B0`(B +$Bh@(B +$BhN(B +$BhM(B +$BGk(B +$BhT(B +$Bh_(B +$B3~(B +$Bhb(B +$BhP(B +$BhU(B +$BMn(B +$Bh^(B +$B{\(B +$BMU(B +$BN*(B +$BCx(B +$B3k(B +$BIr(B +$Bhd(B +$BF!(B +$B01(B +$Bh](B +$BhY(B +$BAr(B +$BhS(B +$Bh[(B +$Bh`(B +$BG,(B +$B0*(B +$BhX(B +$Bha(B +$BIx(B +$Bh\(B +$BhW(B +$B>U(B +$B=/(B +$B<,(B +$BLX(B +$BIG(B +$Bhg(B +$Bhp(B +$BhZ(B +$B3w(B +$B{](B +$B>x(B +$Bhe(B +$Bhj(B +$BAs(B +$Bhf(B +$Bhm(B +$BC_(B +$Bhn(B +$BMV(B +$Bhc(B +$B38(B +$Bhi(B +$Bhl(B +$BL,(B +$Bho(B +$Bhh(B +$Bhk(B +$By%(B +$BK)(B +$BO!(B +$Bhs(B +$Bhz(B +$Bhr(B +$B +$BhQ(B +$BJN(B +$BL"(B +$Bhy(B +$Bhx(B +$Bht(B +$Bhu(B +$B16(B +$Bhw(B +$Bhq(B +$BDU(B +$Bhv(B +$B0~(B +$BB"(B +$BJC(B +$Bh{(B +$Bi!(B +$BHY(B +$Bh~(B +$B>V(B +$B +$Bi#(B +$B6>(B +$B{^(B +$Bi$(B +$BIy(B +$Bh}(B +$B{_(B +$BhV(B +$Bh|(B +$BOO(B +$BF"(B +$BIs(B +$B{`(B +$Bi+(B +$Bi1(B +$Bi2(B +$Bi%(B +$BGv(B +$Bi/(B +$Bi'(B +$Bi)(B +$Bi3(B +$Bi((B +$Bi,(B +$B1r(B +$BFe(B +$Bi-(B +$Bi0(B +$Bi&(B +$BA&(B +$Bi*(B +$B;'(B +$B?E(B +$B70(B +$BLt(B +$BLy(B +$B=r(B +$B{b(B +$Bi7(B +$Bi5(B +$BON(B +$Bi4(B +$BMu(B +$Bi6(B +$Bi8(B +$Bi9(B +$Bi<(B +$Bi:(B +$BF#(B +$Bi;(B +$BHM(B +$Bi.(B +$B=s(B +$Bi=(B +$BiB(B +$BAt(B +$BiA(B +$Bi"(B +$BiC(B +$BAI(B +$Bi>(B +$Bi@(B +$Bi?(B +$B]1(B +$B]"(B +$BiE(B +$BiD(B +$BMv(B +$Bb<(B +$BiF(B +$BiG(B +$BiH(B +$B8W(B +$B5T(B +$BiJ(B +$BQ](B +$B5u(B +$BN:(B +$B6s(B +$BiK(B +$BiL(B +$BCn(B +$BiM(B +$BFz(B +$B0:(B +$B2c(B +$BiR(B +$BiS(B +$BiN(B +$B;=(B +$BiO(B +$BGB(B +$BiP(B +$BiQ(B +$Bi[(B +$BiU(B +$BiX(B +$BiT(B +$BiV(B +$BiW(B +$B +$BiY(B +$BCA(B +$B7V(B +$B3B(B +$Bi\(B +$B3?(B +$Bia(B +$Bi](B +$Bi`(B +$BH:(B +$Bi^(B +$Bi_(B +$BIH(B +$BHZ(B +$Bib(B +$BB}(B +$Bil(B +$Bih(B +$B2k(B +$Bif(B +$BK*(B +$Big(B +$Bid(B +$Bie(B +$Bij(B +$Bim(B +$Bik(B +$Bii(B +$Bic(B +$BCX(B +$Bit(B +$BL*(B +$Bir(B +$Bis(B +$Bin(B +$Bip(B +$Biq(B +$Bio(B +$B@f(B +$BO9(B +$Bix(B +$Biy(B +$Bj!(B +$B?*(B +$Bi{(B +$Bi~(B +$Biv(B +$Biu(B +$Bj"(B +$B2\(B +$Bi|(B +$Bj#(B +$Bi}(B +$Biz(B +$BD3(B +$Biw(B +$BGh(B +$Bj'(B +$BM;(B +$Bj&(B +$Bj%(B +$Bj.(B +$Bj((B +$Bj0(B +$BMf(B +$Bj3(B +$Bj*(B +$Bj+(B +$Bj/(B +$Bj2(B +$Bj1(B +$Bj)(B +$Bj,(B +$Bj=(B +$Bj6(B +$Bj4(B +$Bj5(B +$Bj:(B +$Bj;(B +$B3*(B +$B5B(B +$Bj9(B +$Bj$(B +$B{e(B +$Bj8(B +$Bj<(B +$Bj7(B +$Bj>(B +$Bj@(B +$Bj?(B +$BjB(B +$BjA(B +$BiZ(B +$BjF(B +$BjC(B +$BjD(B +$BjE(B +$BjG(B +$B7l(B +$BjI(B +$BjH(B +$B=0(B +$B9T(B +$B^'(B +$BjJ(B +$B=Q(B +$B39(B +$BjK(B +$B1R(B +$B>W(B +$BjL(B +$B9U(B +$BjM(B +$B0a(B +$BI=(B +$BjN(B +$B?j(B +$BjU(B +$BjR(B +$BCo(B +$BjS(B +$BjP(B +$B6^(B +$BjO(B +$BjV(B +$B76(B +$BB^(B +$Bj\(B +$BjX(B +$BB5(B +$BjW(B +$BjZ(B +$BjQ(B +$Bj[(B +$Bj](B +$BHo(B +$BjY(B +$Bj^(B +$Bj`(B +$B8S(B +$BjT(B +$B0A(B +$Bj_(B +$B:[(B +$BNv(B +$Bja(B +$Bjb(B +$BAu(B +$BN"(B +$Bjc(B +$BM5(B +$Bjd(B +$Bje(B +$BJd(B +$Bjf(B +$B:@(B +$BN#(B +$Bjk(B +$Bjl(B +$B>X(B +$Bjj(B +$B{f(B +$BMg(B +$Bjg(B +$Bji(B +$B@=(B +$B?~(B +$Bjh(B +$Bjm(B +$BJ#(B +$Bjo(B +$Bjn(B +$B3l(B +$BK+(B +$Bjp(B +$By"(B +$Bj|(B +$Bjr(B +$Bjs(B +$Bjt(B +$Bju(B +$Bjy(B +$Bjz(B +$Bjx(B +$Bjv(B +$Bjq(B +$Bjw(B +$Bj{(B +$Bp7(B +$B2((B +$Bj~(B +$B6_(B +$Bj}(B +$Bk"(B +$Bk!(B +$Bk$(B +$Bk#(B +$Bk%(B +$B=1(B +$Bk&(B +$Bk'(B +$Bk((B +$B@>(B +$BMW(B +$Bk)(B +$BJ$(B +$BGF(B +$Bk*(B +$Bk+(B +$B8+(B +$B5,(B +$Bk,(B +$B;k(B +$BGA(B +$Bk-(B +$B3P(B +$Bk.(B +$Bk0(B +$BMw(B +$Bk/(B +$B?F(B +$Bk1(B +$Bk2(B +$Bk3(B +$B4Q(B +$Bk4(B +$Bk5(B +$Bk6(B +$Bk7(B +$B3Q(B +$Bk8(B +$Bk9(B +$Bk:(B +$B2r(B +$B?((B +$Bk;(B +$Bk<(B +$Bk=(B +$B8@(B +$BD{(B +$Bk>(B +$B7W(B +$B?V(B +$BkA(B +$BF$(B +$Bk@(B +$B{g(B +$B71(B +$Bk?(B +$BBw(B +$B5-(B +$BkB(B +$BkC(B +$B>Y(B +$B7m(B +$BkD(B +$BK,(B +$B@_(B +$B5v(B +$BLu(B +$BAJ(B +$BkE(B +$B{h(B +$B?G(B +$BCp(B +$B>Z(B +$BkF(B +$BkI(B +$BkJ(B +$B:>(B +$BBB(B +$BkH(B +$B>[(B +$BI>(B +$BkG(B +$B;l(B +$B1S(B +$BkN(B +$B7X(B +$B;n(B +$B;m(B +$BOM(B +$BkM(B +$BkL(B +$BA'(B +$B5M(B +$BOC(B +$B3:(B +$B>\(B +$B{i(B +$BkK(B +$BkP(B +$BkQ(B +$BkO(B +$B8X(B +$BM@(B +$B;o(B +$BG'(B +$BkT(B +$B@@(B +$BCB(B +$BM6(B +$BkW(B +$B8l(B +$B@?(B +$BkS(B +$BkX(B +$B8m(B +$BkU(B +$BkV(B +$B{j(B +$BkR(B +$B@b(B +$BFI(B +$BC/(B +$B2](B +$BHp(B +$B5C(B +$B{k(B +$BD4(B +$Bk[(B +$BkY(B +$BCL(B +$B@A(B +$B4R(B +$BkZ(B +$B?[(B +$BNJ(B +$BO@(B +$Bk\(B +$Bkg(B +$BD5(B +$Bkf(B +$B{l(B +$Bkc(B +$Bkk(B +$Bkd(B +$Bk`(B +$BD|(B +$Bk_(B +$Bk](B +$BM!(B +$B;p(B +$Bka(B +$Bk^(B +$B{n(B +$Bke(B +$B=t(B +$B8A(B +$BBz(B +$BKE(B +$B1Z(B +$B0b(B +$BF%(B +$Bki(B +$Bkh(B +$BFf(B +$Bkm(B +$Bkb(B +$Bkl(B +$Bkn(B +$B8,(B +$Bkj(B +$B9V(B +$B +$Bko(B +$BMX(B +$Bkr(B +$Bku(B +$Bks(B +$BI5(B +$Bkp(B +$B6`(B +$Bkt(B +$Bkv(B +$Bkz(B +$Bkw(B +$Bky(B +$Bkx(B +$B{o(B +$Bk{(B +$B<1(B +$Bk}(B +$Bk|(B +$BIh(B +$Bl!(B +$B7Y(B +$Bk~(B +$Bl"(B +$Bl#(B +$B5D(B +$BfA(B +$B>y(B +$Bl$(B +$B8n(B +$Bl%(B +$B{p(B +$Bl&(B +$B;>(B +$BZN(B +$Bl'(B +$Bl((B +$B=2(B +$Bl)(B +$Bl*(B +$Bl+(B +$Bl,(B +$Bl-(B +$BC+(B +$Bl.(B +$Bl0(B +$Bl/(B +$BF&(B +$Bl1(B +$BK-(B +$Bl2(B +$Bl3(B +$Bl4(B +$Bl5(B +$BFZ(B +$B>](B +$Bl6(B +$B9k(B +$BP.(B +$Bl7(B +$Bl8(B +$BI?(B +$Bl9(B +$BlA(B +$Bl:(B +$Bl<(B +$Bl;(B +$Bl=(B +$BKF(B +$Bl>(B +$Bl?(B +$Bl@(B +$BlB(B +$B3-(B +$BDg(B +$BIi(B +$B:b(B +$B9W(B +$BIO(B +$B2_(B +$BHN(B +$BlE(B +$B4S(B +$B@U(B +$BlD(B +$BlI(B +$BCy(B +$BLc(B +$BlG(B +$BlH(B +$B5.(B +$BlJ(B +$BGc(B +$BB_(B +$BHq(B +$BE=(B +$BlF(B +$BKG(B +$B2l(B +$BlL(B +$BO((B +$BDB(B +$BOE(B +$B;q(B +$BlK(B +$BB1(B +$Bl\(B +$BA((B +$BFx(B +$BIP(B +$BlO(B +$B;?(B +$B;r(B +$B>^(B +$BGe(B +$B8-(B +$BlN(B +$BlM(B +$BIj(B +$B +$BER(B +$B{q(B +$B{r(B +$BlQ(B +$BlR(B +$B9X(B +$BlP(B +$BlS(B +$BlT(B +$BlV(B +$BB#(B +$BlU(B +$B4f(B +$BlX(B +$BlW(B +$BlY(B +$B{s(B +$Bl[(B +$Bl](B +$Bl^(B +$B@V(B +$B +$Bl_(B +$B3R(B +$Bl`(B +$BAv(B +$Bla(B +$Blb(B +$BIk(B +$B{t(B +$B5/(B +$Blc(B +$BD6(B +$B1[(B +$Bld(B +$B +$B?v(B +$BB-(B +$Blg(B +$Blf(B +$Ble(B +$Blm(B +$Blk(B +$Blh(B +$Blj(B +$Bli(B +$Bll(B +$B5w(B +$Blp(B +$B@W(B +$Blq(B +$B8Y(B +$Bln(B +$Blo(B +$BO)(B +$BD7(B +$BA)(B +$Blr(B +$Blu(B +$Bls(B +$Blt(B +$BMY(B +$BF'(B +$Blx(B +$Blv(B +$Blw(B +$Bly(B +$Bm)(B +$Bl|(B +$Bl}(B +$Bl{(B +$Blz(B +$BD}(B +$Bm!(B +$Bm%(B +$Bm"(B +$Bl~(B +$Bm#(B +$Bm$(B +$Bm+(B +$Bm&(B +$B@X(B +$Bm((B +$Bm*(B +$Bm'(B +$Bm-(B +$B=3(B +$Bm,(B +$Bm.(B +$Bm/(B +$Bm2(B +$Bm1(B +$Bm0(B +$Bm4(B +$Bm3(B +$BLv(B +$Bm6(B +$Bm5(B +$Bm7(B +$Bm8(B +$Bm:(B +$Bm9(B +$B?H(B +$Bm;(B +$B6m(B +$Bm<(B +$Bm>(B +$Bm?(B +$Bm@(B +$Bm=(B +$BmA(B +$B +$BmB(B +$B50(B +$B73(B +$B{v(B +$B8.(B +$BmC(B +$BFp(B +$BE>(B +$BmD(B +$BmG(B +$B<4(B +$BmF(B +$BmE(B +$B7Z(B +$BmH(B +$B3S(B +$BmJ(B +$B:\(B +$BmI(B +$BmR(B +$BmL(B +$BmN(B +$BJe(B +$BmK(B +$BmM(B +$BmQ(B +$BmO(B +$B51(B +$BmP(B +$BmS(B +$BGZ(B +$BNX(B +$B=4(B +$BmT(B +$BM"(B +$BmV(B +$BmU(B +$BmY(B +$BMA(B +$BmX(B +$B3m(B +$BmW(B +$Bm\(B +$Bm[(B +$BmZ(B +$BE2(B +$Bm](B +$Bm^(B +$Bm_(B +$B9l(B +$B7%(B +$Bm`(B +$Bma(B +$Bmb(B +$B?I(B +$Bmc(B +$B<-(B +$Bmd(B +$Bme(B +$BR!(B +$BQ~(B +$Bmf(B +$Bep(B +$Bmg(B +$BC$(B +$B?+(B +$BG@(B +$Bmh(B +$BJU(B +$BDT(B +$B9~(B +$BC)(B +$B1*(B +$BKx(B +$B?W(B +$B7^(B +$B6a(B +$BJV(B +$Bmi(B +$Bmk(B +$Bmj(B +$B2`(B +$BFv(B +$Bml(B +$BGw(B +$BE3(B +$Bmm(B +$B=R(B +$Bmo(B +$BLB(B +$Bm~(B +$Bmq(B +$Bmr(B +$BDI(B +$BB`(B +$BAw(B +$BF((B +$Bmp(B +$B5U(B +$Bmy(B +$Bmv(B +$Bn%(B +$BF)(B +$BC`(B +$Bms(B +$BD~(B +$BES(B +$Bmt(B +$Bmx(B +$B?`(B +$BGg(B +$BDL(B +$B@B(B +$Bmw(B +$BB.(B +$BB$(B +$Bmu(B +$B0)(B +$BO"(B +$Bmz(B +$BBa(B +$B=5(B +$B?J(B +$Bm|(B +$Bm{(B +$B0o(B +$Bm}(B +$BI/(B +$Bn'(B +$BF[(B +$B?k(B +$BCY(B +$B6x(B +$Bn&(B +$BM7(B +$B1?(B +$BJW(B +$B2a(B +$Bn!(B +$Bn"(B +$Bn#(B +$Bn$(B +$BF;(B +$BC#(B +$B0c(B +$Bn((B +$Bn)(B +$Bt#(B +$BB=(B +$Bn*(B +$B1s(B +$BAL(B +$B8/(B +$BMZ(B +$B{y(B +$Bn+(B +$BE,(B +$BAx(B +$B +$Bn,(B +$Bn/(B +$B=e(B +$Bn-(B +$BA+(B +$BA*(B +$B0d(B +$BNK(B +$Bn1(B +$BHr(B +$Bn3(B +$Bn2(B +$Bn0(B +$Bcd(B +$B4T(B +$Bmn(B +$Bn5(B +$Bn4(B +$Bn6(B +$BM8(B +$BFa(B +$BK.(B +$Bn7(B +$B +$Bn8(B +$Bn9(B +$Bn:(B +$BE!(B +$B0j(B +$B9Y(B +$BO:(B +$Bn>(B +$B{z(B +$B74(B +$Bn;(B +$Bn<(B +$BIt(B +$B3T(B +$BM9(B +$B6?(B +$BET(B +$Bn?(B +$Bn@(B +$B{|(B +$BnA(B +$B{}(B +$BE"(B +$BnC(B +$BnB(B +$BFS(B +$BnD(B +$B=6(B +$B<`(B +$BG[(B +$BCq(B +$B +$B?l(B +$BnE(B +$BnF(B +$B?](B +$BnG(B +$BnH(B +$BnI(B +$BMo(B +$B=7(B +$BnK(B +$BnJ(B +$B9Z(B +$B9s(B +$B;@(B +$BnN(B +$B=f(B +$BnM(B +$BnL(B +$BBi(B +$B8o(B +$B@C(B +$BH0(B +$B=9(B +$BnO(B +$B>_(B +$BnR(B +$BnP(B +$BnQ(B +$BnT(B +$BnS(B +$B>z(B +$BnU(B +$BnV(B +$BnW(B +$BHP(B +$B:S(B +$B +$BnX(B +$BnY(B +$BN$(B +$B=E(B +$BLn(B +$BNL(B +$BnZ(B +$B6b(B +$Bn[(B +$B|!(B +$BE#(B +$B{~(B +$Bn^(B +$B3x(B +$B?K(B +$B|"(B +$Bn\(B +$Bn](B +$BD`(B +$B|%(B +$B|&(B +$BKU(B +$B6|(B +$B|#(B +$B|$(B +$Bn`(B +$Bna(B +$Bn_(B +$Bnc(B +$B|'(B +$B|)(B +$BF_(B +$B3C(B +$B|((B +$Bng(B +$Bnd(B +$Bnf(B +$Bnb(B +$BoO(B +$Bne(B +$BNk(B +$B8Z(B +$B|0(B +$B|*(B +$B|,(B +$Bno(B +$B|+(B +$BE4(B +$Bnj(B +$Bnm(B +$Bnk(B +$Bnp(B +$B|-(B +$Bnq(B +$B|/(B +$Bni(B +$B|.(B +$Bnv(B +$B1t(B +$Bnh(B +$BH-(B +$Bnl(B +$B>`(B +$B|1(B +$B9[(B +$B|3(B +$B|4(B +$BKH(B +$B6d(B +$B=F(B +$BF<(B +$By$(B +$BA-(B +$Bnt(B +$Bnn(B +$Bns(B +$BLC(B +$BD8(B +$Bnu(B +$Bnr(B +$B|2(B +$BA,(B +$Bny(B +$Bnx(B +$Bnw(B +$B|8(B +$BK/(B +$B|<(B +$B|:(B +$B|6(B +$B|7(B +$B|;(B +$B={(B +$B|5(B +$Bnz(B +$BJ_(B +$B1T(B +$BIF(B +$BCr(B +$B5x(B +$By*(B +$Bn|(B +$B|?(B +$B9](B +$B|B(B +$B|D(B +$B;,(B +$Bn{(B +$B?m(B +$B?n(B +$Bo!(B +$Bo#(B +$B|C(B +$B|A(B +$B>{(B +$B|>(B +$Bo"(B +$Bo$(B +$B|=(B +$B6S(B +$BIE(B +$B +$BO#(B +$Bn~(B +$B:x(B +$BO?(B +$Bo&(B +$Bo%(B +$Bo'(B +$Bn}(B +$By#(B +$BFi(B +$BEU(B +$BDW(B +$Bo,(B +$B|F(B +$BCC(B +$Bo((B +$Bo)(B +$B7-(B +$Bo+(B +$B|E(B +$B80(B +$Bo*(B +$B>a(B +$B3y(B +$Bo0(B +$B:?(B +$BAy(B +$BDJ(B +$B|G(B +$B3;(B +$Bo.(B +$Bo/(B +$BDC(B +$Bo-(B +$Bo1(B +$Bo7(B +$B|H(B +$Bo:(B +$Bo9(B +$BE-(B +$Bo2(B +$Bo3(B +$Bo6(B +$Bo8(B +$B|I(B +$B6@(B +$Bo;(B +$Bo5(B +$Bo4(B +$B|J(B +$Bo?(B +$Bo@(B +$BoA(B +$Bo>(B +$Bo=(B +$B>b(B +$BF*(B +$Bo<(B +$BoE(B +$BoC(B +$B|K(B +$BoD(B +$BoB(B +$BBx(B +$BoF(B +$BoG(B +$BoI(B +$B|L(B +$B|M(B +$B4U(B +$BoH(B +$BLz(B +$BoT(B +$BoJ(B +$BoM(B +$BoK(B +$BoL(B +$BoN(B +$BoP(B +$BoQ(B +$BoR(B +$BoU(B +$BoS(B +$BoV(B +$BoX(B +$BoW(B +$BD9(B +$BLg(B +$BoY(B +$BA.(B +$BoZ(B +$BJD(B +$Bo[(B +$B3+(B +$B1<(B +$B4W(B +$B|N(B +$B4V(B +$Bo\(B +$Bo](B +$Bo^(B +$Bo_(B +$Bo`(B +$B4X(B +$B3U(B +$B9^(B +$BH6(B +$Bob(B +$Boa(B +$Boc(B +$B1\(B +$Bof(B +$Boe(B +$Bod(B +$Bog(B +$Boj(B +$B0G(B +$Boh(B +$Bol(B +$Bok(B +$Bon(B +$Bom(B +$Boo(B +$BF.(B +$Bop(B +$Boq(B +$Bos(B +$Bor(B +$BIl(B +$Bot(B +$Bou(B +$B:e(B +$Bov(B +$Bow(B +$BKI(B +$BAK(B +$B0$(B +$BBK(B +$Box(B +$BIm(B +$Bo{(B +$Boy(B +$B9_(B +$Boz(B +$B8B(B +$BJE(B +$Bo}(B +$Bp!(B +$Bo~(B +$Bp"(B +$B1!(B +$B?X(B +$B=|(B +$B4Y(B +$Bp#(B +$BGf(B +$Bp%(B +$B1"(B +$Bp$(B +$BDD(B +$BNM(B +$BF+(B +$Bo|(B +$BN&(B +$B81(B +$BM[(B +$B6y(B +$BN4(B +$B7((B +$BBb(B +$Bg!(B +$Bp&(B +$B3,(B +$B?o(B +$B3V(B +$Bp((B +$Bp)(B +$Bp'(B +$B7d(B +$B:](B +$B>c(B +$B|Q(B +$B1#(B +$BNY(B +$Bp+(B +$Bn.(B +$Bp*(B +$B|R(B +$Bp.(B +$Bp,(B +$Bp-(B +$Bp/(B +$Bp0(B +$BNl(B +$Bp1(B +$Bp2(B +$B@I(B +$BH;(B +$B?}(B +$B4g(B +$BM:(B +$B2m(B +$B=8(B +$B8[(B +$Bp5(B +$Bp4(B +$B;s(B +$Bp6(B +$Bp3(B +$B;((B +$Bp:(B +$Bj-(B +$BRV(B +$B?w(B +$Bp8(B +$BN%(B +$BFq(B +$B1+(B +$B@c(B +$B<6(B +$BJ7(B +$B1@(B +$BNm(B +$BMk(B +$Bp;(B +$BEE(B +$B<{(B +$Bp<(B +$Bp=(B +$B?L(B +$Bp>(B +$BNn(B +$Bp9(B +$Bp@(B +$BpB(B +$BpA(B +$Bp?(B +$BpC(B +$BpD(B +$BAz(B +$B2b(B +$BpE(B +$BL8(B +$BpF(B +$BpG(B +$BO*(B +$B|S(B +$B[1(B +$BpH(B +$B|T(B +$BpI(B +$BpJ(B +$BpN(B +$B|U(B +$BpK(B +$BpL(B +$BpM(B +$BpO(B +$B|V(B +$B|W(B +$B|X(B +$B@D(B +$B|Y(B +$BLw(B +$B@E(B +$BpP(B +$BHs(B +$BpQ(B +$BsS(B +$BLL(B +$BpR(B +$BpS(B +$BpT(B +$B3W(B +$BpV(B +$B?Y(B +$BpW(B +$B7$(B +$BpX(B +$Bp\(B +$BpZ(B +$Bp[(B +$B3s(B +$BpY(B +$Bp](B +$Bp^(B +$B0H(B +$Bp_(B +$Bp`(B +$B>d(B +$Bpa(B +$B5G(B +$Bpd(B +$Bpc(B +$Bpb(B +$Bkq(B +$BJ\(B +$Bpe(B +$Bpf(B +$Bpg(B +$Bph(B +$Bpi(B +$Bpj(B +$B4Z(B +$Bpk(B +$Bpl(B +$BG#(B +$Bpn(B +$B2;(B +$Bpq(B +$Bpp(B +$B1$(B +$B6A(B +$BJG(B +$BD:(B +$B:"(B +$B9`(B +$B=g(B +$B?\(B +$Bps(B +$Bpr(B +$BMB(B +$B4h(B +$BHR(B +$BF\(B +$B?|(B +$BNN(B +$B7[(B +$Bpv(B +$Bpu(B +$BKK(B +$BF,(B +$B1P(B +$Bpw(B +$Bpt(B +$BIQ(B +$BMj(B +$Bpx(B +$Bpy(B +$Bp{(B +$BBj(B +$B3[(B +$B3\(B +$Bpz(B +$B4i(B +$B82(B +$B|Z(B +$B4j(B +$BE?(B +$BN`(B +$B|[(B +$B8\(B +$Bp|(B +$Bp}(B +$Bp~(B +$Bq!(B +$Bq#(B +$Bq"(B +$BIw(B +$Bq$(B +$Bq%(B +$Bq&(B +$Bq'(B +$Bq)(B +$Bq((B +$Bq*(B +$BHt(B +$BfL(B +$B?)(B +$B52(B +$Bq+(B +$Bq,(B +$BR,(B +$B];(B +$BHS(B +$B0{(B +$B0;(B +$B;t(B +$BK0(B +$B>~(B +$Bq-(B +$BL_(B +$Bq.(B +$BM\(B +$B1B(B +$B;A(B +$Bq/(B +$B2n(B +$Bq0(B +$Bq1(B +$Bq3(B +$Bq4(B +$Bq6(B +$Bq2(B +$Bq5(B +$B|^(B +$B4[(B +$Bq7(B +$Bq8(B +$Bq9(B +$Bq:(B +$Bq;(B +$Bq=(B +$Bq<(B +$Bq?(B +$BqB(B +$Bq>(B +$Bq@(B +$BqA(B +$BqC(B +$B6B(B +$B +$BqD(B +$BqE(B +$B9a(B +$B|`(B +$BqF(B +$B3>(B +$BGO(B +$BqG(B +$BqH(B +$BCZ(B +$BFk(B +$BqI(B +$BG}(B +$BBL(B +$B1X(B +$B6n(B +$B6o(B +$BCs(B +$BqN(B +$B6p(B +$B2o(B +$BqM(B +$BqK(B +$BqL(B +$BqJ(B +$BqX(B +$BqO(B +$BqP(B +$BqQ(B +$BqR(B +$BqT(B +$BqS(B +$B=Y(B +$BqU(B +$BqW(B +$B53(B +$BqV(B +$BA{(B +$B83(B +$BqY(B +$BBM(B +$BqZ(B +$BF-(B +$Bq[(B +$Bq`(B +$Bq^(B +$Bq](B +$Bq_(B +$Bq\(B +$Bqb(B +$B|a(B +$Bqa(B +$Bqd(B +$B6C(B +$Bqc(B +$Bqe(B +$Bqf(B +$Bqh(B +$Bqg(B +$Bqi(B +$Bqk(B +$Bqj(B +$B9|(B +$Bql(B +$Bqm(B +$B3<(B +$Bqn(B +$Bqo(B +$B?q(B +$Bqp(B +$Bqq(B +$Bqr(B +$Bqs(B +$B9b(B +$B|b(B +$B|c(B +$Bqt(B +$Bqu(B +$Bqv(B +$Bqw(B +$Bqx(B +$BH1(B +$Bqz(B +$BI&(B +$Bq{(B +$Bqy(B +$Bq}(B +$Bq|(B +$Bq~(B +$Br!(B +$Br"(B +$Br#(B +$Br$(B +$Br%(B +$Br&(B +$Br'(B +$Br((B +$Br)(B +$Br*(B +$Br+(B +$Br,(B +$Br-(B +$Br.(B +$B]5(B +$Br/(B +$Bdx(B +$B54(B +$B3!(B +$B:2(B +$Br1(B +$Br0(B +$BL%(B +$Br3(B +$Br4(B +$Br2(B +$Br5(B +$BKb(B +$Br6(B +$B5{(B +$BO%(B +$B|e(B +$Br7(B +$B|d(B +$Br9(B +$B0>(B +$B|f(B +$Br:(B +$BJ+(B +$Br8(B +$Br;(B +$Br<(B +$Br=(B +$Br>(B +$Br?(B +$BKn(B +$B;-(B +$B:z(B +$BA/(B +$B|g(B +$Br@(B +$BrC(B +$B|h(B +$BrA(B +$BrD(B +$B8q(B +$BrB(B +$BrE(B +$BrF(B +$BrG(B +$BrK(B +$B;*(B +$BBd(B +$BrL(B +$BrI(B +$BrH(B +$BrJ(B +$B7_(B +$BrP(B +$BrO(B +$BrN(B +$B03(B +$B|i(B +$BrZ(B +$BrV(B +$BrW(B +$BrS(B +$BrY(B +$BrU(B +$B3b(B +$BOL(B +$BrX(B +$BrT(B +$BrR(B +$BrQ(B +$Br\(B +$Br_(B +$Br^(B +$Br](B +$BII(B +$Br[(B +$B0s(B +$Br`(B +$Brb(B +$B3o(B +$BrM(B +$B17(B +$Brd(B +$Brc(B +$Bra(B +$BC-(B +$BKp(B +$BNZ(B +$Bre(B +$Brf(B +$Brg(B +$Brh(B +$Bri(B +$BD;(B +$Brj(B +$BH7(B +$Bro(B +$Brk(B +$Brl(B +$BK1(B +$BLD(B +$BFP(B +$Brp(B +$Brq(B +$BF>(B +$Brn(B +$Brm(B +$B2*(B +$Bry(B +$Brx(B +$B1u(B +$Brv(B +$Bru(B +$Brs(B +$B3{(B +$Brr(B +$B<2(B +$B2)(B +$B9c(B +$Br|(B +$Br{(B +$Brz(B +$Brw(B +$Br}(B +$Br~(B +$Bs%(B +$Bs$(B +$Bs&(B +$B1-(B +$Bs!(B +$Bs"(B +$B9t(B +$BL9(B +$Bs#(B +$B|k(B +$BK2(B +$Bs+(B +$B|j(B +$Bs'(B +$Bs,(B +$Bs)(B +$Bs((B +$B7\(B +$Bs-(B +$Bs.(B +$Bs/(B +$Bs*(B +$Brt(B +$Bs0(B +$BDa(B +$Bs4(B +$Bs5(B +$Bs3(B +$Bs2(B +$Bs8(B +$Bs1(B +$Bs6(B +$Bs7(B +$Bs:(B +$Bs9(B +$Bs<(B +$Bs=(B +$Bs>(B +$BOI(B +$Bs;(B +$BBk(B +$B:m(B +$Bs?(B +$B|m(B +$Bs@(B +$BsA(B +$BsB(B +$BsC(B +$B84(B +$BsD(B +$BsE(B +$B +$BsF(B +$BsG(B +$BsH(B +$BsI(B +$BsL(B +$BsJ(B +$BO<(B +$BsK(B +$BNo(B +$BsM(B +$BN[(B +$BsN(B +$BG~(B +$BsO(B +$BsQ(B +$BsR(B +$BsP(B +$B9m(B +$BLM(B +$BKc(B +$BVw(B +$B]`(B +$BK{(B +$B2+(B +$BsT(B +$B5P(B +$BsU(B +$BsV(B +$BsW(B +$B|n(B +$B9u(B +$BsX(B +$B`T(B +$BL[(B +$BBc(B +$BsY(B +$Bs[(B +$BsZ(B +$Bs\(B +$Bs](B +$Bs^(B +$Bs_(B +$Bs`(B +$Bsa(B +$Bsb(B +$Bsc(B +$Bsd(B +$Bse(B +$Bsf(B +$Bsg(B +$Bsh(B +$BE$(B +$B8](B +$Bsj(B +$BAM(B +$Bsk(B +$Bsl(B +$BI!(B +$Bsm(B +$Bsn(B +$Bc7(B +$BlZ(B +$Bpm(B +$Bso(B +$Bsp(B +$Bsr(B +$Bss(B +$Bst(B +$BNp(B +$Bsq(B +$Bsu(B +$Bsv(B +$Bsx(B +$Bsw(B +$Bsz(B +$Bs{(B +$Bsy(B +$BN6(B +$Bs|(B +$Bs}(B +$BcT(B +$Bs~(B +$BzF(B +$B|O(B +$ByT(B +$By_(B +$By`(B +$Byu(B +$Bz>(B +$BzN(B +$BzP(B +$Bz{(B +$B{#(B +$B{:(B +$B{B(B +$B{C(B +$B{D(B +$B{F(B +$B{J(B +$B{M(B +$B{V(B +$B{a(B +$B{c(B +$B{d(B +$B{m(B +$B{u(B +$B{w(B +$B{x(B +$B{{(B +$B|9(B +$B|@(B +$B|P(B +$B|\(B +$B|](B +$B|_(B +$B|l(B +$B!*(B +$B|~(B +$B!t(B +$B!p(B +$B!s(B +$B!u(B +$B|}(B +$B!J(B +$B!K(B +$B!v(B +$B!\(B +$B!$(B +$B!](B +$B!%(B +$B!?(B +$B#0(B +$B#1(B +$B#2(B +$B#3(B +$B#4(B +$B#5(B +$B#6(B +$B#7(B +$B#8(B +$B#9(B +$B!'(B +$B!((B +$B!c(B +$B!a(B +$B!d(B +$B!)(B +$B!w(B +$B#A(B +$B#B(B +$B#C(B +$B#D(B +$B#E(B +$B#F(B +$B#G(B +$B#H(B +$B#I(B +$B#J(B +$B#K(B +$B#L(B +$B#M(B +$B#N(B +$B#O(B +$B#P(B +$B#Q(B +$B#R(B +$B#S(B +$B#T(B +$B#U(B +$B#V(B +$B#W(B +$B#X(B +$B#Y(B +$B#Z(B +$B!N(B +$B!@(B +$B!O(B +$B!0(B +$B!2(B +$B!.(B +$B#a(B +$B#b(B +$B#c(B +$B#d(B +$B#e(B +$B#f(B +$B#g(B +$B#h(B +$B#i(B +$B#j(B +$B#k(B +$B#l(B +$B#m(B +$B#n(B +$B#o(B +$B#p(B +$B#q(B +$B#r(B +$B#s(B +$B#t(B +$B#u(B +$B#v(B +$B#w(B +$B#x(B +$B#y(B +$B#z(B +$B!P(B +$B!C(B +$B!Q(B +$B!A(B +$B!q(B +$B!r(B +$B"L(B +$B!1(B +$B||(B +$B!o(B diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars.html.headers new file mode 100644 index 00000000000..51324ea2d35 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_chars.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-2022-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_errors.html b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_errors.html new file mode 100755 index 00000000000..aeed3defabd --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_errors.html @@ -0,0 +1,8 @@ + + + + +ISO-2022-jp characters + +$ByV(B (J(B (Ie(B $BV(B $B$t(B $By(B eyV(B $eyV(B + diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_errors.html.headers b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_errors.html.headers new file mode 100644 index 00000000000..51324ea2d35 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp_errors.html.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-2022-jp diff --git a/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/jis0208_index.js b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/jis0208_index.js new file mode 100644 index 00000000000..1c9a10fb4d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/jis0208_index.js @@ -0,0 +1,3 @@ +// index is ShiftJIS index pointer, value is Unicode codepoint (dec) +// this is copy-pasted from the json version of the index belonging to the Encoding spec +var jis0208 = [12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null] diff --git a/tests/wpt/web-platform-tests/encrypted-media/encrypted-media-default-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/encrypted-media/encrypted-media-default-feature-policy.https.sub.html index e1ad3c5881b..a5114262ad0 100644 --- a/tests/wpt/web-platform-tests/encrypted-media/encrypted-media-default-feature-policy.https.sub.html +++ b/tests/wpt/web-platform-tests/encrypted-media/encrypted-media-default-feature-policy.https.sub.html @@ -9,8 +9,7 @@ run_all_fp_tests_allow_self( 'https://{{domains[www]}}:{{ports[https][0]}}', 'encrypted-media', - 'SecurityError: requestMediaKeySystemAccess is disabled by feature ' + - 'policy.', + 'SecurityError', function() { return navigator.requestMediaKeySystemAccess('org.w3.clearkey', [{ sessionTypes: [ 'temporary' ], diff --git a/tests/wpt/web-platform-tests/eventsource/interfaces.html b/tests/wpt/web-platform-tests/eventsource/interfaces.html index 443d7467e07..2935927fd32 100644 --- a/tests/wpt/web-platform-tests/eventsource/interfaces.html +++ b/tests/wpt/web-platform-tests/eventsource/interfaces.html @@ -9,7 +9,7 @@
diff --git a/tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js b/tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js index 8140e78f31f..b08d560d143 100644 --- a/tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js +++ b/tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js @@ -81,7 +81,7 @@ function test_feature_in_iframe(feature_name, feature_promise_factory) { if (location.hash.includes(feature_name)) { feature_promise_factory().then( () => window.parent.postMessage('#OK', '*'), - (e) => window.parent.postMessage('#' + e.toString(), '*')); + (e) => window.parent.postMessage('#' + e.name, '*')); } } diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/request-headers-case.any.js b/tests/wpt/web-platform-tests/fetch/api/basic/request-headers-case.any.js new file mode 100644 index 00000000000..549744fb05b --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/basic/request-headers-case.any.js @@ -0,0 +1,11 @@ +promise_test(() => { + return fetch("/XMLHttpRequest/resources/echo-headers.py", {headers: [["THIS-is-A-test", 1], ["THIS-IS-A-TEST", 2]] }).then(res => res.text()).then(body => { + assert_regexp_match(body, /THIS-is-A-test: 1, 2/) + }) +}, "Multiple headers with the same name, different case (THIS-is-A-test first)") + +promise_test(() => { + return fetch("/XMLHttpRequest/resources/echo-headers.py", {headers: [["THIS-IS-A-TEST", 1], ["THIS-is-A-test", 2]] }).then(res => res.text()).then(body => { + assert_regexp_match(body, /THIS-IS-A-TEST: 1, 2/) + }) +}, "Multiple headers with the same name, different case (THIS-IS-A-TEST first)") diff --git a/tests/wpt/web-platform-tests/fetch/api/cors/cors-filtering.js b/tests/wpt/web-platform-tests/fetch/api/cors/cors-filtering.js index 3a7cc165073..1feaa5924f6 100644 --- a/tests/wpt/web-platform-tests/fetch/api/cors/cors-filtering.js +++ b/tests/wpt/web-platform-tests/fetch/api/cors/cors-filtering.js @@ -56,14 +56,14 @@ corsFilter(url, "Pragma", "no-cache", false); corsFilter(url, "Age", "27", true); corsFilter(url, "Server", "wptServe" , true); corsFilter(url, "Warning", "Mind the gap" , true); -corsFilter(url, "Content-Length", "0" , true); +corsFilter(url, "Content-Length", "3" , true); // top.txt contains "top" corsFilter(url, "Set-Cookie", "name=value" , true); corsFilter(url, "Set-Cookie2", "name=value" , true); corsExposeFilter(url, "Age", "27", false); corsExposeFilter(url, "Server", "wptServe" , false); corsExposeFilter(url, "Warning", "Mind the gap" , false); -corsExposeFilter(url, "Content-Length", "0" , false); +corsExposeFilter(url, "Content-Length", "3" , false); corsExposeFilter(url, "Set-Cookie", "name=value" , true); corsExposeFilter(url, "Set-Cookie2", "name=value" , true); diff --git a/tests/wpt/web-platform-tests/gamepad/idlharness.html b/tests/wpt/web-platform-tests/gamepad/idlharness.html index 559d2ef8ad2..e78a56be498 100644 --- a/tests/wpt/web-platform-tests/gamepad/idlharness.html +++ b/tests/wpt/web-platform-tests/gamepad/idlharness.html @@ -52,7 +52,7 @@ dictionary GamepadEventInit : EventInit }; partial interface Navigator { - Gamepad[] getGamepads(); + sequence getGamepads(); }; + + + + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload.tentative.html b/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload.tentative.html new file mode 100644 index 00000000000..3e021c65ac8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload.tentative.html @@ -0,0 +1,37 @@ + + + +Navigation in onload handler + + + + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-1.tentative.html b/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-1.tentative.html new file mode 100644 index 00000000000..53a2dab1bc2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-1.tentative.html @@ -0,0 +1,15 @@ + + + + + Navigation in onload handler through form submission + + + +
+ + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-2.tentative.html b/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-2.tentative.html new file mode 100644 index 00000000000..10cc69ae0f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-2.tentative.html @@ -0,0 +1,22 @@ + + + + + Navigation in onload handler through form submission + + + + + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-dynamic-iframe.tentative.html b/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-dynamic-iframe.tentative.html new file mode 100644 index 00000000000..ebf663fadb8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-dynamic-iframe.tentative.html @@ -0,0 +1,16 @@ + + + + + Navigation in onload handler through form submission in a dynamically created iframe + + + + + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-iframe.tentative.html b/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-iframe.tentative.html new file mode 100644 index 00000000000..1c45fada5a3 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-session-history-of-browsing-contexts/navigation-in-onload_form-submission-iframe.tentative.html @@ -0,0 +1,10 @@ + + + + + Navigation in onload handler through form submission in an iframe + + + + + diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html index 06d96b11372..2820b75b21d 100644 --- a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html +++ b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html @@ -184,17 +184,20 @@ addTest(function() { }, "[[GetOwnProperty]] - Properties on cross-origin objects should be reported |own|"); function checkPropertyDescriptor(desc, propName, expectWritable) { - var isSymbol = (typeof(propName) == "symbol"); + const isSymbol = typeof(propName) === "symbol"; + const isArrayIndexPropertyName = !isSymbol && !isNaN(parseInt(propName, 10)); propName = String(propName); assert_true(isObject(desc), "property descriptor for " + propName + " should exist"); assert_equals(desc.configurable, true, "property descriptor for " + propName + " should be configurable"); - if (isSymbol) { - assert_equals(desc.enumerable, false, "symbol-property descriptor for " + propName + " should not be enumerable"); - assert_true("value" in desc, - "property descriptor for " + propName + " should be a value descriptor"); - assert_equals(desc.value, undefined, + if (!isArrayIndexPropertyName) { + assert_equals(desc.enumerable, false, "property descriptor for " + propName + " should not be enumerable"); + if(isSymbol) { + assert_true("value" in desc, + "property descriptor for " + propName + " should be a value descriptor"); + assert_equals(desc.value, undefined, "symbol-named cross-origin visible prop " + propName + " should come back as undefined"); + } } else { assert_equals(desc.enumerable, true, "property descriptor for " + propName + " should be enumerable"); } @@ -265,16 +268,15 @@ addTest(function() { let i = 0; for (var prop in C) { i++; - assert_true(whitelistedWindowPropNames.includes(prop), prop + " is not safelisted for a cross-origin Window"); + assert_true(whitelistedWindowIndices.includes(prop), prop + " is not safelisted for a cross-origin Window"); } - assert_equals(i, whitelistedWindowPropNames.length, "Enumerate all safelisted cross-origin Window properties"); + assert_equals(i, whitelistedWindowIndices.length, "Enumerate all enumerable safelisted cross-origin Window properties"); i = 0; for (var prop in C.location) { i++; - assert_true(whitelistedLocationPropNames.includes(prop), prop + " is not safelisted for a cross-origin Location"); } - assert_equals(i, whitelistedLocationPropNames.length, "Enumerate all safelisted cross-origin Location properties"); -}, "Can only enumerate safelisted properties"); + assert_equals(i, 0, "There's nothing to enumerate for cross-origin Location properties"); +}, "Can only enumerate safelisted enumerable properties"); /* * [[OwnPropertyKeys]] @@ -285,13 +287,12 @@ addTest(function() { whitelistedWindowPropNames, "Object.getOwnPropertyNames() gives the right answer for cross-origin Window"); assert_array_equals(Object.keys(C).sort(), - whitelistedWindowPropNames, + whitelistedWindowIndices, "Object.keys() gives the right answer for cross-origin Window"); assert_array_equals(Object.getOwnPropertyNames(C.location).sort(), whitelistedLocationPropNames, "Object.getOwnPropertyNames() gives the right answer for cross-origin Location"); - assert_array_equals(Object.keys(C.location).sort(), - whitelistedLocationPropNames, + assert_equals(Object.keys(C.location).length, 0, "Object.keys() gives the right answer for cross-origin Location"); }, "[[OwnPropertyKeys]] should return all properties from cross-origin objects"); diff --git a/tests/wpt/web-platform-tests/html/dom/documents/resource-metadata-management/document-lastModified-01.html b/tests/wpt/web-platform-tests/html/dom/documents/resource-metadata-management/document-lastModified-01.html index e67c04fc8dd..cfe9086527e 100644 --- a/tests/wpt/web-platform-tests/html/dom/documents/resource-metadata-management/document-lastModified-01.html +++ b/tests/wpt/web-platform-tests/html/dom/documents/resource-metadata-management/document-lastModified-01.html @@ -39,13 +39,11 @@ } var t = async_test("Date returned by lastModified is current after timeout."); - setTimeout(function() { - t.step(function() { - var new_modified = Date.parse(document.lastModified) / 1000; - var new_expected = Math.round(new Date() / 1000); - assert_approx_equals(new_modified, new_expected, 2.5, - "(initial value was " + initial_modified + ")"); - t.done(); - }); + t.step_timeout(function() { + var new_modified = Date.parse(document.lastModified) / 1000; + var new_expected = Math.round(new Date() / 1000); + assert_approx_equals(new_modified, new_expected, 2.5, + "(initial value was " + initial_modified + ")"); + t.done(); }, 4000); diff --git a/tests/wpt/web-platform-tests/html/editing/focus/processing-model/preventScroll.html b/tests/wpt/web-platform-tests/html/editing/focus/processing-model/preventScroll.html index fda9480e8b9..97d341b30ec 100644 --- a/tests/wpt/web-platform-tests/html/editing/focus/processing-model/preventScroll.html +++ b/tests/wpt/web-platform-tests/html/editing/focus/processing-model/preventScroll.html @@ -67,7 +67,8 @@ onload = () => { test(() => { resetState(win); elm.focus({preventScroll: true}); - assert_false(isEntirelyInView(elm, win)); + assert_equals(win.scrollX, 0); + assert_equals(win.scrollY, 0); }, 'elm.focus({preventScroll: true})'); done(); diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html new file mode 100644 index 00000000000..3d9d45ec949 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1-ref.html @@ -0,0 +1,2 @@ + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1a.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1a.html new file mode 100644 index 00000000000..ba891d5021a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1a.html @@ -0,0 +1,5 @@ + + +Test that body's marginwidth attribute has the right effect in standards mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1b.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1b.html new file mode 100644 index 00000000000..431f74be29f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1b.html @@ -0,0 +1,5 @@ + + +Test that body's marginwidth attribute has the right effect in quirks mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1c.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1c.html new file mode 100644 index 00000000000..84eb4cfe824 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1c.html @@ -0,0 +1,5 @@ + + +Test that body's leftmargin/rightmargin attributes have the right effect in standards mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1d.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1d.html new file mode 100644 index 00000000000..938d4c2c0b3 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1d.html @@ -0,0 +1,5 @@ + + +Test that body's leftmargin/rightmargin attributes have the right effect in quirks mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1e.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1e.html new file mode 100644 index 00000000000..8cc463fb154 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1e.html @@ -0,0 +1,5 @@ + + +Test that iframe's marginwidth attribute has the right effect in standards mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1f.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1f.html new file mode 100644 index 00000000000..2f123b392c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1f.html @@ -0,0 +1,5 @@ + + +Test that iframe's marginwidth attribute has the right effect in quirks mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1g.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1g.html new file mode 100644 index 00000000000..052455390ce --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1g.html @@ -0,0 +1,5 @@ + + +Test that body's style margin takes precedence over everything else in standards mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1h.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1h.html new file mode 100644 index 00000000000..6778945494e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1h.html @@ -0,0 +1,5 @@ + + +Test that body's style margin takes precedence over everything else in quirks mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1i.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1i.html new file mode 100644 index 00000000000..95e21e36260 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1i.html @@ -0,0 +1,5 @@ + + +Test that body's marginwidth attribute takes precedence over other body margin presentational attributes in standards mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1j.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1j.html new file mode 100644 index 00000000000..4f945853d8a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1j.html @@ -0,0 +1,5 @@ + + +Test that body's marginwidth attribute takes precedence over other body margin presentational attributes in quirks mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1k.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1k.html new file mode 100644 index 00000000000..c05cd24e2de --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1k.html @@ -0,0 +1,5 @@ + + +Test that body's leftmargin/rightmargin attributes take precedence over iframe marginwidth in standards mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1l.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1l.html new file mode 100644 index 00000000000..f53d2c5a1d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-1l.html @@ -0,0 +1,5 @@ + + +Test that body's leftmargin/rightmargin attributes take precedence over iframe marginwidth in quirks mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html new file mode 100644 index 00000000000..1bda1a8928d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2-ref.html @@ -0,0 +1,2 @@ + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2a.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2a.html new file mode 100644 index 00000000000..9091ab2c782 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2a.html @@ -0,0 +1,5 @@ + + +Test that body's marginheight attribute has the right effect in standards mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2b.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2b.html new file mode 100644 index 00000000000..dd7d74b6354 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2b.html @@ -0,0 +1,5 @@ + + +Test that body's marginheight attribute has the right effect in quirks mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2c.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2c.html new file mode 100644 index 00000000000..f72e4b6c712 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2c.html @@ -0,0 +1,5 @@ + + +Test that body's topmargin/bottommargin attributes have the right effect in standards mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2d.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2d.html new file mode 100644 index 00000000000..40799b22774 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2d.html @@ -0,0 +1,5 @@ + + +Test that body's topmargin/bottommargin attributes have the right effect in quirks mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2e.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2e.html new file mode 100644 index 00000000000..bab012bcf06 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2e.html @@ -0,0 +1,5 @@ + + +Test that iframe's marginheight attribute has the right effect in standards mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2f.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2f.html new file mode 100644 index 00000000000..103cde96d92 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2f.html @@ -0,0 +1,5 @@ + + +Test that iframe's marginheight attribute has the right effect in quirks mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2g.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2g.html new file mode 100644 index 00000000000..b87acacefed --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2g.html @@ -0,0 +1,5 @@ + + +Test that body's style margin takes precedence over everything else in standards mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2h.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2h.html new file mode 100644 index 00000000000..53f5267f715 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2h.html @@ -0,0 +1,5 @@ + + +Test that body's style margin takes precedence over everything else in quirks mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2i.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2i.html new file mode 100644 index 00000000000..642972ea336 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2i.html @@ -0,0 +1,5 @@ + + +Test that body's marginheight attribute takes precedence over other body margin presentational attributes in standards mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2j.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2j.html new file mode 100644 index 00000000000..f1b1689f1f1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2j.html @@ -0,0 +1,5 @@ + + +Test that body's marginheight attribute takes precedence over other body margin presentational attributes in quirks mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2k.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2k.html new file mode 100644 index 00000000000..d11febeb5d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2k.html @@ -0,0 +1,5 @@ + + +Test that body's topmargin/bottommargin attributes take precedence over iframe marginheight in standards mode + + diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2l.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2l.html new file mode 100644 index 00000000000..2f947b984f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-page/body-margin-2l.html @@ -0,0 +1,5 @@ + + +Test that body's topmargin/bottommargin attributes take precedence over iframe marginheight in quirks mode + + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/activeCues.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/activeCues.html index 689ec12be0c..de66d5cb0eb 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/activeCues.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/activeCues.html @@ -78,10 +78,10 @@ test1.step(function(){ var c3 = new VTTCue(0, 2, "text3"); t1.addCue(c3); assert_equals(t1.activeCues.length, 1, "t1.activeCues.length after adding a cue in the same script"); - setTimeout(test3.step_func(function(){ + test3.step_timeout(function(){ assert_equals(t1.activeCues.length, 2, "t1.activeCues.length after the event loop has spun"); test3.done(); - }, 0)); + }, 0); }); test2.done(); }); diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html index 2ca0a5180cd..cd1ebb9e492 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html @@ -14,14 +14,14 @@ var e = document.createElement(tagName); e.src = src; assert_equals(e.currentSrc, ''); - setTimeout(t.step_func(function() { + t.step_timeout(function() { if (src == '') { assert_equals(e.currentSrc, ''); } else { assert_equals(e.currentSrc, e.src); } t.done(); - }), 0); + }, 0); }, tagName + '.currentSrc after setting src attribute "' + src + '"'); async_test(function(t) { @@ -30,14 +30,14 @@ s.src = src; e.appendChild(s); assert_equals(e.currentSrc, ''); - setTimeout(t.step_func(function() { + t.step_timeout(function() { if (src == '') { assert_equals(e.currentSrc, ''); } else { assert_equals(e.currentSrc, s.src); } t.done(); - }), 0); + }, 0); }, tagName + '.currentSrc after adding source element with src attribute "' + src + '"'); }); }); diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-to-other-document.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-to-other-document.html index 342771dbd5b..77b4a288d89 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-to-other-document.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-to-other-document.html @@ -15,10 +15,10 @@ async_test(function(t) { assert_false(v.paused, 'paused after playing'); document.querySelector('iframe').contentDocument.body.appendChild(v); assert_false(v.paused, 'paused after moving'); - setTimeout(t.step_func(function() { + t.step_timeout(function() { assert_false(v.paused, 'paused after stable state') t.done(); - }), 0); + }, 0); }); v.onpause = t.step_func(function() { assert_unreached(); }); }); diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-within-document.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-within-document.html index a28322d4d5b..911aa7b5c96 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-within-document.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-within-document.html @@ -15,10 +15,10 @@ async_test(function(t) { assert_false(v.paused, 'paused after playing'); document.getElementById('elsewhere').appendChild(v); assert_false(v.paused, 'paused after moving'); - setTimeout(t.step_func(function() { + t.step_timeout(function() { assert_false(v.paused, 'paused after stable state') t.done(); - }), 0); + }, 0); }); v.onpause = t.step_func(function() { assert_unreached(); }); }); diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html index 3b5849a351d..c2180f5fba5 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html @@ -9,13 +9,13 @@ async_test(function(t) { var v = document.querySelector('video'); v.play(); - setTimeout(t.step_func(function() { + t.step_timeout(function() { assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState after stable state'); assert_false(v.paused, 'paused after stable state'); v.parentNode.removeChild(v); assert_false(v.paused, 'paused after removing'); - v.onpause = t.step_func(function() { t.done(); }); - }), 0); + v.onpause = t.step_func_done(); + }, 0); }); diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document.html index 7a4b0bc0d22..54258440378 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document.html @@ -26,10 +26,10 @@ async_test(function(t) { assert_true(v.paused, 'paused in pause event'); // re-insert and verify that it stays paused document.body.appendChild(v); - setTimeout(t.step_func(function() { + t.step_timeout(function() { assert_true(v.paused, 'paused after re-inserting'); t.done(); - }), 0); + }, 0); }); })); }); diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cloneNode.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cloneNode.html index 1159a52ff1f..9e0f0bf9007 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cloneNode.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cloneNode.html @@ -20,7 +20,7 @@ async_test(function(t) { assert_equals(elm.readyState, elm.NONE, 'elm.readyState after appening to video setting mode'); elm.src = 'resources/track.vtt?pipe=trickle(d1)'; assert_equals(elm.readyState, elm.NONE, 'elm.readyState after setting src'); - setTimeout(t.step_func_done(function() { + t.step_timeout(function() { assert_equals(elm.readyState, elm.LOADING, 'elm.readyState in setTimeout'); var clone = elm.cloneNode(true); assert_equals(clone.readyState, clone.NONE, 'clone.readyState after element creation'); @@ -28,7 +28,8 @@ async_test(function(t) { clone.track.mode = 'showing'; assert_equals(clone.readyState, clone.NONE, 'clone.readyState after appending to video and setting mode'); assert_not_equals(clone.track, elm.track, 'clone.track and elm.track'); - }), 0); + t.done(); + }, 0); }, document.title+', loading'); async_test(function(t) { diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-canvas-element/imagedata.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-canvas-element/imagedata.html index b5b4d0de275..61331956e49 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-canvas-element/imagedata.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-canvas-element/imagedata.html @@ -40,7 +40,7 @@ test(function() { assert_throws("IndexSizeError", function() { new ImageData(new Uint8ClampedArray(16), 4, 3); }); -}, "ImageData(buffer, w, h), buffer.lenght == 4 * w * h must be true"); +}, "ImageData(buffer, w, h), buffer.length == 4 * w * h must be true"); test(function() { assert_throws(new TypeError(), function() { diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html b/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html index a46b83fadd1..66b5e30a04e 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html @@ -112,7 +112,7 @@ // // This is unfortunately racy in that we might _still_ get spurious // passes. I'm not sure how best to handle that. - setTimeout(this.step_func(function() { + this.step_timeout(function() { var q = false; element.onselect = this.step_func_done(function(e) { assert_true(q, "event should be queued"); @@ -122,7 +122,7 @@ }); element.setRangeText("foobar2", 0, 6); q = true; - }), 10); + }, 10); }, element.id + " setRangeText fires a select event"); }) diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/checkbox.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/checkbox.html index b1ccc64c167..c48083d6855 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/checkbox.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/checkbox.html @@ -102,7 +102,7 @@ */ assert_true(checkbox5.checked); assert_false(checkbox5.indeterminate); - window.setTimeout(t5.step_func(function(e) { + t5.step_timeout(function() { /* The click event has finished being dispatched, so the checkedness and determinateness have been toggled back by now because the event @@ -111,7 +111,7 @@ assert_false(checkbox5.checked); assert_false(checkbox5.indeterminate); t5.done(); - }), 0); + }, 0); }); t5.step(function(){ @@ -129,7 +129,7 @@ */ assert_true(checkbox6.checked); assert_true(checkbox6.indeterminate); - window.setTimeout(t6.step_func(function(e) { + t6.step_timeout(function() { /* The click event has finished being dispatched, so the checkedness and determinateness have been toggled back by now because the event @@ -138,7 +138,7 @@ assert_false(checkbox6.checked); assert_false(checkbox6.indeterminate); t6.done(); - }), 0); + }, 0); }); t6.step(function(){ diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-option-element/option-text-setter.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-option-element/option-text-setter.html new file mode 100644 index 00000000000..83a45b43573 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-option-element/option-text-setter.html @@ -0,0 +1,24 @@ + + + +
+ +
+ diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/toggleEvent.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/toggleEvent.html index da255a3842d..4635ba27712 100644 --- a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/toggleEvent.html +++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/toggleEvent.html @@ -111,10 +111,10 @@ loop = true; } }); - setTimeout(t6.step_func(function() { + t6.step_timeout(function() { assert_true(loop); t6.done(); - }), 0); + }, 0); details7.ontoggle = t7.step_func_done(function(evt) { assert_true(details7.open); @@ -139,19 +139,19 @@ // The toggle event should be fired once when declaring details9 with open // attribute. details9.open = true; // opens details9 - setTimeout(t9.step_func(function() { + t9.step_timeout(function() { assert_true(details9.open); assert_true(toggleFiredOnDetails9); t9.done(); - }), 0); + }, 0); details10.ontoggle = t10.step_func_done(function(evt) { assert_unreached("toggle event fired on closed details element"); }); details10.open = false; // closes details10 - setTimeout(t10.step_func(function() { + t10.step_timeout(function() { assert_false(details10.open); t10.done(); - }), 0); + }, 0); diff --git a/tests/wpt/web-platform-tests/html/syntax/parsing/DOMContentLoaded-defer-support.js b/tests/wpt/web-platform-tests/html/syntax/parsing/DOMContentLoaded-defer-support.js index 28487111eaa..35ce9327bfc 100644 --- a/tests/wpt/web-platform-tests/html/syntax/parsing/DOMContentLoaded-defer-support.js +++ b/tests/wpt/web-platform-tests/html/syntax/parsing/DOMContentLoaded-defer-support.js @@ -2,12 +2,13 @@ t.step(function() { assert_false(dcl, "DOMContentLoaded should not have fired before executing " + "a defer script"); - setTimeout(t.step_func(function() { + t.step_timeout(function() { assert_false(dcl, "DOMContentLoaded should not have fired before " + "executing a task queued from a defer script"); - setTimeout(t.step_func_done(function() { + t.step_timeout(function() { assert_true(dcl, "DOMContentLoaded should have fired in a task that " + "was queued after the DOMContentLoaded task was queued"); - }), 0); - }), 0); + t.done(); + }, 0); + }, 0); }); diff --git a/tests/wpt/web-platform-tests/html/webappapis/animation-frames/same-dispatch-time.html b/tests/wpt/web-platform-tests/html/webappapis/animation-frames/same-dispatch-time.html index e92eb61e993..28e94f1e338 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/animation-frames/same-dispatch-time.html +++ b/tests/wpt/web-platform-tests/html/webappapis/animation-frames/same-dispatch-time.html @@ -9,7 +9,7 @@
diff --git a/tests/wpt/web-platform-tests/innerText/multiple-text-nodes.window.js b/tests/wpt/web-platform-tests/innerText/multiple-text-nodes.window.js new file mode 100644 index 00000000000..3d504b682e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/innerText/multiple-text-nodes.window.js @@ -0,0 +1,15 @@ +async_test(t => { + const div = document.body.appendChild(document.createElement("div")); + t.add_cleanup(() => div.remove()); + const t1 = div.appendChild(new Text("")); + div.appendChild(new Text("")); + const t2 = div.appendChild(new Text("")); + const t3 = div.appendChild(new Text("")); + t.step_timeout(() => { + t1.data = "X"; + t2.data = " "; + t3.data = "Y"; + assert_equals(div.innerText, "X Y"); + t.done(); + }, 100); +}, "Ensure multiple text nodes get rendered properly"); diff --git a/tests/wpt/web-platform-tests/interfaces/dedicated-workers.idl b/tests/wpt/web-platform-tests/interfaces/dedicated-workers.idl index 14259dc0ff6..eaed7af3d20 100644 --- a/tests/wpt/web-platform-tests/interfaces/dedicated-workers.idl +++ b/tests/wpt/web-platform-tests/interfaces/dedicated-workers.idl @@ -1,7 +1,7 @@ // ----------------------------------------------------------------------------- // DOM // ----------------------------------------------------------------------------- -[Exposed=(Window,Worker)] +[Constructor(), Exposed=(Window,Worker)] interface EventTarget { void addEventListener(DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options); void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options); diff --git a/tests/wpt/web-platform-tests/interfaces/geolocation-sensor.idl b/tests/wpt/web-platform-tests/interfaces/geolocation-sensor.idl new file mode 100644 index 00000000000..7c2e247e46d --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/geolocation-sensor.idl @@ -0,0 +1,10 @@ +[Constructor(optional SensorOptions options), Exposed=Window] +interface GeolocationSensor : Sensor { + readonly attribute unrestricted double? latitude; + readonly attribute unrestricted double? longitude; + readonly attribute unrestricted double? altitude; + readonly attribute unrestricted double? accuracy; + readonly attribute unrestricted double? altitudeAccuracy; + readonly attribute unrestricted double? heading; + readonly attribute unrestricted double? speed; +}; diff --git a/tests/wpt/web-platform-tests/interfaces/mediacapture-main.idl b/tests/wpt/web-platform-tests/interfaces/mediacapture-main.idl index 13593c78687..498bd3ebf9f 100644 --- a/tests/wpt/web-platform-tests/interfaces/mediacapture-main.idl +++ b/tests/wpt/web-platform-tests/interfaces/mediacapture-main.idl @@ -158,7 +158,7 @@ interface MediaDeviceInfo { readonly attribute MediaDeviceKind kind; readonly attribute DOMString label; readonly attribute DOMString groupId; - serializer = {attribute}; + [Default] object toJSON(); }; enum MediaDeviceKind { diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc-pc.idl b/tests/wpt/web-platform-tests/interfaces/webrtc-pc.idl index 944e6300fea..ae20055920b 100644 --- a/tests/wpt/web-platform-tests/interfaces/webrtc-pc.idl +++ b/tests/wpt/web-platform-tests/interfaces/webrtc-pc.idl @@ -157,7 +157,7 @@ enum RTCSdpType { interface RTCSessionDescription { readonly attribute RTCSdpType type; readonly attribute DOMString sdp; - serializer = {attribute}; + [Default] object toJSON(); }; dictionary RTCSessionDescriptionInit { @@ -180,15 +180,15 @@ interface RTCIceCandidate { readonly attribute RTCIceTcpCandidateType? tcpType; readonly attribute DOMString? relatedAddress; readonly attribute unsigned short? relatedPort; - readonly attribute DOMString? ufrag; - serializer = {candidate, sdpMid, sdpMLineIndex, ufrag}; + readonly attribute DOMString? usernameFragment; + RTCIceCandidateInit toJSON(); }; dictionary RTCIceCandidateInit { DOMString candidate = ""; DOMString? sdpMid = null; unsigned short? sdpMLineIndex = null; - DOMString ufrag; + DOMString usernameFragment; }; enum RTCIceProtocol { diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist index 67afeb9cdf5..71e4998573f 100644 --- a/tests/wpt/web-platform-tests/lint.whitelist +++ b/tests/wpt/web-platform-tests/lint.whitelist @@ -10,7 +10,6 @@ CR AT EOL: svg/import/* INDENT TABS: .gitmodules -INDENT TABS: app-uri/* INDENT TABS: conformance-checkers/* INDENT TABS: content-security-policy/* INDENT TABS: custom-elements/* @@ -23,28 +22,22 @@ INDENT TABS: touch-events/* INDENT TABS: web-animations/* INDENT TABS: webaudio/* INDENT TABS: webvtt/* -INDENT TABS: XMLHttpRequest/* INDENT TABS: encoding/legacy*/* -INDENT TABS: encrypted-media/polyfill/Makefile TRAILING WHITESPACE: 2dcontext/tools/current-work-canvas.xhtml -TRAILING WHITESPACE: app-uri/* TRAILING WHITESPACE: battery-status/* TRAILING WHITESPACE: conformance-checkers/* TRAILING WHITESPACE: content-security-policy/* TRAILING WHITESPACE: custom-elements/* TRAILING WHITESPACE: html-longdesc/* -TRAILING WHITESPACE: microdata/* TRAILING WHITESPACE: old-tests/* TRAILING WHITESPACE: pointerevents/* -TRAILING WHITESPACE: progress-events/* TRAILING WHITESPACE: shadow-dom/* TRAILING WHITESPACE: svg/import/* TRAILING WHITESPACE: tools/* TRAILING WHITESPACE: webaudio/* TRAILING WHITESPACE: WebIDL/* TRAILING WHITESPACE: webvtt/* -TRAILING WHITESPACE: XMLHttpRequest/* TRAILING WHITESPACE: encoding/legacy*/* ## File types that should never be checked ## @@ -111,18 +104,10 @@ PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/empty.xhtml PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/minimal_html.svg PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/minimal_html.xhtml -# These have undefined entities; should probably find a way to define them -PARSE-FAILED:ext-xhtml-pubid/the-xhtml-syntax/parsing-xhtml-documents/xhtml-pubid-1.xhtml -PARSE-FAILED:ext-xhtml-pubid/the-xhtml-syntax/parsing-xhtml-documents/xhtml-pubid-2.xhtml -PARSE-FAILED:ext-xhtml-pubid/the-xhtml-syntax/parsing-xhtml-documents/xhtml-pubid-3.xhtml - # Test generation files containing print statements PRINT STATEMENT:dom/nodes/Document-createElement-namespace-tests/generate.py PRINT STATEMENT:encrypted-media/polyfill/make-polyfill-tests.py -# Should probably be fixed. -W3C-TEST.ORG:subresource-integrity/refresh-header.js.headers - # semi-legitimate use of console.* CONSOLE:console/* CONSOLE:streams/resources/test-utils.js @@ -136,10 +121,6 @@ CONSOLE:annotation-model/scripts/ajv.min.js CONSOLE:annotation-model/scripts/showdown.min.js CR AT EOL: annotation-model/scripts/showdown.min.js -# use of console in a public library - annotation-protocol ensures -# it is not actually used -CONSOLE:annotation-protocol/scripts/uuid.js - # Lint doesn't know about sub.svg I guess PARSE-FAILED:content-security-policy/svg/including.sub.svg @@ -148,11 +129,6 @@ PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/empty.xml PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/minimal_html.xml PARSE-FAILED:acid/acid3/empty.xml -# The patches may have trailing whitespace -TRAILING WHITESPACE:webgl/tools/*.patch -# The tests under this directory are not done by us -*:webgl/conformance-1.0.3/* - # setTimeout usage (should probably mostly be fixed) SET TIMEOUT: *-manual.* SET TIMEOUT: 2dcontext/* @@ -168,7 +144,6 @@ SET TIMEOUT: css/selectors/selector-placeholder-shown-type-change-003.html SET TIMEOUT: css/selectors/selector-read-write-type-change-002.html SET TIMEOUT: css/selectors/selector-required-type-change-002.html SET TIMEOUT: css/css-fonts/font-display/font-display.html -SET TIMEOUT: encrypted-media/Google/migrated_to_root_disabled/encrypted-media-utils.js SET TIMEOUT: encrypted-media/polyfill/chrome-polyfill.js SET TIMEOUT: encrypted-media/polyfill/clearkey-polyfill.js SET TIMEOUT: encrypted-media/scripts/playback-temporary-events.js @@ -182,21 +157,11 @@ SET TIMEOUT: html/browsers/history/the-history-interface/* SET TIMEOUT: html/browsers/history/the-location-interface/* SET TIMEOUT: html/browsers/offline/* SET TIMEOUT: html/browsers/the-window-object/* -SET TIMEOUT: html/browsers/windows/auxiliary-browsing-contexts/resources/close-opener.html -SET TIMEOUT: html/dom/documents/dom-tree-accessors/Document.currentScript.html -SET TIMEOUT: html/dom/documents/resource-metadata-management/document-lastModified-01.html SET TIMEOUT: html/dom/dynamic-markup-insertion/opening-the-input-stream/* SET TIMEOUT: html/editing/dnd/* -SET TIMEOUT: html/infrastructure/urls/resolving-urls/query-encoding/resources/resolve-url.js -SET TIMEOUT: html/semantics/embedded-content/media-elements/* SET TIMEOUT: html/semantics/embedded-content/the-iframe-element/* SET TIMEOUT: html/semantics/embedded-content/the-img-element/* -SET TIMEOUT: html/semantics/forms/textfieldselection/textfieldselection-setRangeText.html -SET TIMEOUT: html/semantics/forms/the-input-element/checkbox.html -SET TIMEOUT: html/semantics/interactive-elements/the-details-element/toggleEvent.html SET TIMEOUT: html/semantics/scripting-1/the-script-element/* -SET TIMEOUT: html/syntax/parsing/DOMContentLoaded-defer-support.js -SET TIMEOUT: html/webappapis/animation-frames/same-dispatch-time.html SET TIMEOUT: html/webappapis/scripting/event-loops/* SET TIMEOUT: html/webappapis/scripting/events/event-handler-processing-algorithm-error/* SET TIMEOUT: html/webappapis/scripting/processing-model-2/* @@ -208,10 +173,8 @@ SET TIMEOUT: mixed-content/generic/sanity-checker.js SET TIMEOUT: navigation-timing/* SET TIMEOUT: offscreen-canvas/the-offscreen-canvas/* SET TIMEOUT: old-tests/submission/Microsoft/history/history_000.htm -SET TIMEOUT: old-tests/submission/Microsoft/sandbox/* -SET TIMEOUT: old-tests/submission/Microsoft/structuredclone/structuredclone_0.html -SET TIMEOUT: old-tests/webdriver/timeouts/res/implicit_waits_tests.html SET TIMEOUT: page-visibility/resources/pagevistestharness.js +SET TIMEOUT: paint-timing/resources/subframe-painting.html SET TIMEOUT: payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub.html SET TIMEOUT: payment-request/payment-request-response-id.html SET TIMEOUT: pointerevents/pointerevent_support.js @@ -258,11 +221,6 @@ SET TIMEOUT: websockets/* SET TIMEOUT: webstorage/eventTestHarness.js SET TIMEOUT: webvtt/* SET TIMEOUT: workers/* -SET TIMEOUT: XMLHttpRequest/abort-during-done.htm -SET TIMEOUT: XMLHttpRequest/abort-during-headers-received.htm -SET TIMEOUT: XMLHttpRequest/abort-during-loading.htm -SET TIMEOUT: XMLHttpRequest/open-url-multi-window-6.htm -SET TIMEOUT: XMLHttpRequest/xmlhttprequest-timeout-reused.html SET TIMEOUT: XMLHttpRequest/resources/init.htm SET TIMEOUT: XMLHttpRequest/resources/xmlhttprequest-timeout.js @@ -302,7 +260,6 @@ GENERATE_TESTS: css/css-tables/width-distribution/distribution-algo-min-content- GENERATE_TESTS: css/css-tables/width-distribution/distribution-algo-min-content-percent-guess.html GENERATE_TESTS: css/css-tables/width-distribution/distribution-algo-min-content-specified-guess.1.html GENERATE_TESTS: css/css-tables/width-distribution/distribution-algo-min-content-specified-guess.html -GENERATE_TESTS: css/work-in-progress/ttwf_sf/divya/index-002.html GENERATE_TESTS: css/cssom/index-002.html GENERATE_TESTS: dom/nodes/case.js GENERATE_TESTS: dom/ranges/Range-cloneRange.html @@ -337,15 +294,13 @@ GENERATE_TESTS: shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/w GENERATE_TESTS: shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-003.html # Intentional use of setTimeout +SET TIMEOUT: html/browsers/windows/auxiliary-browsing-contexts/resources/close-opener.html +SET TIMEOUT: html/dom/documents/dom-tree-accessors/Document.currentScript.html SET TIMEOUT: html/webappapis/timers/* # setTimeout use in reftests SET TIMEOUT: acid/acid3/test.html -# CI scripts -PRINT STATEMENT:check_stability.py -W3C-TEST.ORG:check_stability.py - # Travis W3C-TEST.ORG:.travis.yml @@ -367,12 +322,6 @@ TRAILING WHITESPACE: css/css-writing-modes/tools/generators/ucd/Blocks.txt CONSOLE: css/css-writing-modes/tools/generators/unicode-data.js -## Give up on work-in-progress for now -TRAILING WHITESPACE: css/work-in-progress/* -INDENT TABS: css/work-in-progress/* -CR AT EOL: css/work-in-progress/* - - ## Test plans and implementation reports *: css/*/reports/* *: css/*/test-plan/* @@ -382,7 +331,6 @@ CR AT EOL: css/work-in-progress/* OPEN-NO-MODE: css/* PARSE-FAILED: css/* PRINT STATEMENT: css/* -W3C-TEST.ORG: css/* CONTENT-VISUAL: css/* CONTENT-MANUAL: css/* @@ -439,14 +387,11 @@ SUPPORT-WRONG-DIR: css/vendor-imports/mozilla/mozilla-central-reftests/backgroun SUPPORT-WRONG-DIR: css/vendor-imports/mozilla/mozilla-central-reftests/background/reticule-tr.png SUPPORT-WRONG-DIR: css/vendor-imports/mozilla/mozilla-central-reftests/background/reticule.png SUPPORT-WRONG-DIR: css/vendor-imports/mozilla/mozilla-central-reftests/masking/blank.html -SUPPORT-WRONG-DIR: css/vendor-imports/mozilla/mozilla-central-reftests/transforms/green.html -SUPPORT-WRONG-DIR: css/WOFF2/manifest.txt SUPPORT-WRONG-DIR: css/WOFF2/testcaseindex.xht NON-EXISTENT-REF: css/css-masking/clip-path-svg-content/clip-path-clip-rule-008.svg ## Whitespace rules that we can't enforce yet -INDENT TABS: css/.gitmodules INDENT TABS: css/compositing/* INDENT TABS: css/CSS2/* INDENT TABS: css/css-align/* @@ -486,7 +431,6 @@ INDENT TABS: css/WOFF2/* ## Things we're stopping from getting worse -CONSOLE: css/*/support/check-layout-th.js CONSOLE: css/css-regions/elements/support/Three.js CONSOLE: css/css-regions/interactivity/selection/support/js/selection-test-helper.js CONSOLE: css/css-regions/stacking-context/javascript-stacking-context-002.html @@ -498,9 +442,6 @@ CONSOLE: css/css-writing-modes/orthogonal-parent-shrink-to-fit-001*.html CONSOLE: css/css-writing-modes/tools/generators/gulpfile.js CONSOLE: css/css-writing-modes/tools/generators/text-orientation-generator.js CONSOLE: css/cssom/index-002.html -CONSOLE: css/work-in-progress/mozilla/mochitest-simplified/packed.js -CONSOLE: css/work-in-progress/ttwf_sf/divya/index-002.html -CONSOLE: css/work-in-progress/ttwf_tokyo/hiromitsuuuuu/test_font_face_parser.html TRAILING WHITESPACE: css/CSS2/generated-content/before-after-positioned-002.html TRAILING WHITESPACE: css/CSS2/generated-content/before-after-positioned-003.html @@ -610,19 +551,6 @@ SET TIMEOUT: css/selectors/focus-within-shadow-002.html SET TIMEOUT: css/selectors/focus-within-shadow-003.html SET TIMEOUT: css/selectors/focus-within-shadow-004.html SET TIMEOUT: css/selectors/focus-within-shadow-005.html -SET TIMEOUT: css/work-in-progress/apple/css-transforms/scripts/prefixfree.min.js -SET TIMEOUT: css/work-in-progress/aryehgregor/transitions/test_transitions.html -SET TIMEOUT: css/work-in-progress/aryehgregor/transitions/test_transitions_per_property.html -SET TIMEOUT: css/work-in-progress/gabriele/css-xml-dom/js/prototype.js -SET TIMEOUT: css/work-in-progress/hixie/no-pass-condition/box-float-clear-004-demo.html -SET TIMEOUT: css/work-in-progress/hp/th/collapsible2.js -SET TIMEOUT: css/work-in-progress/microsoft/CSS3/animations/* -SET TIMEOUT: css/work-in-progress/microsoft/CSS3/selectors/dynamicEmpty.htm -SET TIMEOUT: css/work-in-progress/microsoft/CSS3/transitions/* -SET TIMEOUT: css/work-in-progress/mozilla/mochitest-simplified/SimpleTest.js -SET TIMEOUT: css/work-in-progress/mozilla/mochitest-simplified/packed.js -SET TIMEOUT: css/work-in-progress/opera/animations/* -SET TIMEOUT: css/work-in-progress/ttwf_sf/houzhenyu/flex-item-change-width.html ## Build system stuff CSS-COLLIDING-TEST-NAME: css/*/OWNERS @@ -665,7 +593,6 @@ CSS-COLLIDING-SUPPORT-NAME: css/css-regions/interactivity/resizing/support/util. # More duplicated copies of the above CSS-COLLIDING-SUPPORT-NAME: css/support/pattern-rgr-grg-rgr.png -CSS-COLLIDING-SUPPORT-NAME: css/CSS2/archive/raw-tests/css1tests/support/pattern-rgr-grg-rgr.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/floats-clear/support/pattern-rgr-grg-rgr.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/media/support/pattern-rgr-grg-rgr.png CSS-COLLIDING-SUPPORT-NAME: css/cssom-view/support/pattern-rgr-grg-rgr.png @@ -710,7 +637,6 @@ CSS-COLLIDING-SUPPORT-NAME: css/css-shapes/support/pattern-grg-rgr-grg.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/ui/support/pattern-grg-rgr-grg.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/normal-flow/support/pattern-grg-rgr-grg.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/margin-padding-clear/support/pattern-grg-rgr-grg.png -CSS-COLLIDING-SUPPORT-NAME: css/CSS2/archive/raw-tests/css1tests/support/pattern-grg-rgr-grg.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/syntax/support/pattern-grg-rgr-grg.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/zindex/support/pattern-grg-rgr-grg.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/colors/support/pattern-grg-rgr-grg.png @@ -747,7 +673,6 @@ CSS-COLLIDING-SUPPORT-NAME: css/css-style-attr/support/swatch-red.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/text/support/swatch-red.png CSS-COLLIDING-SUPPORT-NAME: css/css-multicol/support/swatch-red.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/values/support/swatch-red.png -CSS-COLLIDING-SUPPORT-NAME: css/CSS2/archive/raw-tests/css1tests/support/swatch-red.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/box-display/support/swatch-red.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/generated-content/support/swatch-red.png CSS-COLLIDING-SUPPORT-NAME: css/support/support/swatch-red.png @@ -789,7 +714,6 @@ CSS-COLLIDING-SUPPORT-NAME: css/css-values/support/swatch-green.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/csswg-issues/submitted/css2.1/support/swatch-green.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/borders/support/swatch-green.png CSS-COLLIDING-SUPPORT-NAME: css/filter-effects/support/swatch-green.png -CSS-COLLIDING-SUPPORT-NAME: css/CSS2/archive/raw-tests/css1tests/support/swatch-green.png CSS-COLLIDING-SUPPORT-NAME: css/support/support/swatch-green.png CSS-COLLIDING-SUPPORT-NAME: css/cssom/support/swatch-green.png CSS-COLLIDING-SUPPORT-NAME: css/css-writing-modes/support/swatch-green.png @@ -863,7 +787,6 @@ CSS-COLLIDING-SUPPORT-NAME: css/CSS2/support/50x50-green.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/ui/support/animated.gif CSS-COLLIDING-SUPPORT-NAME: css/CSS2/backgrounds/support/animated.gif CSS-COLLIDING-SUPPORT-NAME: css/css-shapes/shape-outside/shape-image/support/animated.gif -CSS-COLLIDING-SUPPORT-NAME: css/CSS2/archive/raw-tests/css1tests/support/pattern-gg-gr.png CSS-COLLIDING-SUPPORT-NAME: css/CSS2/css1/support/pattern-gg-gr.png CSS-COLLIDING-SUPPORT-NAME: css/css-display/support/util.js CSS-COLLIDING-SUPPORT-NAME: css/CSS2/normal-flow/support/replaced-min-max-1.png @@ -879,61 +802,61 @@ MISSING-LINK: css/css-fonts/variations/font-parse-numeric-stretch-style-weight.h MISSING-LINK: css/css-fonts/variations/variable-box-font.html MISSING-LINK: css/css-fonts/variations/variable-gpos-m2b.html MISSING-LINK: css/css-fonts/variations/variable-gsub.html -MISSING-LINK: css/css-paint-api/background-image-alpha.html -MISSING-LINK: css/css-paint-api/background-image-multiple.html -MISSING-LINK: css/css-paint-api/background-image-tiled.html -MISSING-LINK: css/css-paint-api/geometry-background-image-001.html -MISSING-LINK: css/css-paint-api/geometry-background-image-002.html -MISSING-LINK: css/css-paint-api/geometry-background-image-tiled-001.html -MISSING-LINK: css/css-paint-api/geometry-background-image-tiled-002.html -MISSING-LINK: css/css-paint-api/geometry-background-image-tiled-003.html -MISSING-LINK: css/css-paint-api/geometry-border-image-001.html -MISSING-LINK: css/css-paint-api/geometry-border-image-002.html -MISSING-LINK: css/css-paint-api/geometry-border-image-003.html -MISSING-LINK: css/css-paint-api/geometry-border-image-004.html -MISSING-LINK: css/css-paint-api/invalid-image-constructor-error.html -MISSING-LINK: css/css-paint-api/invalid-image-paint-error.html -MISSING-LINK: css/css-paint-api/invalid-image-pending-script.html -MISSING-LINK: css/css-paint-api/overdraw.html -MISSING-LINK: css/css-paint-api/paint-arguments.html -MISSING-LINK: css/css-paint-api/paint-function-arguments.html -MISSING-LINK: css/css-paint-api/paint2d-composite.html -MISSING-LINK: css/css-paint-api/paint2d-filter.html -MISSING-LINK: css/css-paint-api/paint2d-gradient.html -MISSING-LINK: css/css-paint-api/paint2d-image.html -MISSING-LINK: css/css-paint-api/paint2d-paths.html -MISSING-LINK: css/css-paint-api/paint2d-rects.html -MISSING-LINK: css/css-paint-api/paint2d-shadows.html -MISSING-LINK: css/css-paint-api/paint2d-transform.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-001.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-002.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-003.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-004.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-005.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-006.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-007.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-008.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-009.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-010.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-011.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-012.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-013.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-014.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-015.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-016.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-017.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-018.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-019.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-020.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-021.html -MISSING-LINK: css/css-paint-api/parse-input-arguments-022.html -MISSING-LINK: css/css-paint-api/registered-properties-in-custom-paint.html -MISSING-LINK: css/css-paint-api/style-background-image.html -MISSING-LINK: css/css-paint-api/style-before-pseudo.html -MISSING-LINK: css/css-paint-api/style-first-letter-pseudo.html -MISSING-LINK: css/css-paint-api/valid-image-after-load.html -MISSING-LINK: css/css-paint-api/valid-image-before-load.html -MISSING-LINK: css/css-paint-api/hidpi/device-pixel-ratio.html +MISSING-LINK: css/css-paint-api/background-image-alpha.https.html +MISSING-LINK: css/css-paint-api/background-image-multiple.https.html +MISSING-LINK: css/css-paint-api/background-image-tiled.https.html +MISSING-LINK: css/css-paint-api/geometry-background-image-001.https.html +MISSING-LINK: css/css-paint-api/geometry-background-image-002.https.html +MISSING-LINK: css/css-paint-api/geometry-background-image-tiled-001.https.html +MISSING-LINK: css/css-paint-api/geometry-background-image-tiled-002.https.html +MISSING-LINK: css/css-paint-api/geometry-background-image-tiled-003.https.html +MISSING-LINK: css/css-paint-api/geometry-border-image-001.https.html +MISSING-LINK: css/css-paint-api/geometry-border-image-002.https.html +MISSING-LINK: css/css-paint-api/geometry-border-image-003.https.html +MISSING-LINK: css/css-paint-api/geometry-border-image-004.https.html +MISSING-LINK: css/css-paint-api/invalid-image-constructor-error.https.html +MISSING-LINK: css/css-paint-api/invalid-image-paint-error.https.html +MISSING-LINK: css/css-paint-api/invalid-image-pending-script.https.html +MISSING-LINK: css/css-paint-api/overdraw.https.html +MISSING-LINK: css/css-paint-api/paint-arguments.https.html +MISSING-LINK: css/css-paint-api/paint-function-arguments.https.html +MISSING-LINK: css/css-paint-api/paint2d-composite.https.html +MISSING-LINK: css/css-paint-api/paint2d-filter.https.html +MISSING-LINK: css/css-paint-api/paint2d-gradient.https.html +MISSING-LINK: css/css-paint-api/paint2d-image.https.html +MISSING-LINK: css/css-paint-api/paint2d-paths.https.html +MISSING-LINK: css/css-paint-api/paint2d-rects.https.html +MISSING-LINK: css/css-paint-api/paint2d-shadows.https.html +MISSING-LINK: css/css-paint-api/paint2d-transform.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-001.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-002.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-003.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-004.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-005.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-006.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-007.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-008.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-009.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-010.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-011.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-012.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-013.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-014.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-015.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-016.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-017.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-018.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-019.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-020.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-021.https.html +MISSING-LINK: css/css-paint-api/parse-input-arguments-022.https.html +MISSING-LINK: css/css-paint-api/registered-properties-in-custom-paint.https.html +MISSING-LINK: css/css-paint-api/style-background-image.https.html +MISSING-LINK: css/css-paint-api/style-before-pseudo.https.html +MISSING-LINK: css/css-paint-api/style-first-letter-pseudo.https.html +MISSING-LINK: css/css-paint-api/valid-image-after-load.https.html +MISSING-LINK: css/css-paint-api/valid-image-before-load.https.html +MISSING-LINK: css/css-paint-api/hidpi/device-pixel-ratio.https.html MISSING-LINK: css/css-scroll-anchoring/abspos-containing-block-outside-scroller.html MISSING-LINK: css/css-scroll-anchoring/abspos-contributes-to-static-parent-bounds.html MISSING-LINK: css/css-scroll-anchoring/ancestor-change-heuristic.html @@ -1014,5 +937,3 @@ CONSOLE:payment-request/payment-request-response-id.html # Tests that use WebKit/Blink testing APIs LAYOUTTESTS APIS: css/css-regions/interactivity/* -LAYOUTTESTS APIS: css/work-in-progress/opera/css-device-adapt/template.blink.html -LAYOUTTESTS APIS: webgl/conformance-1.0.3/* diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html index 12e64925847..f0f07da2122 100644 --- a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html +++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html @@ -37,7 +37,7 @@ run_all_fp_tests_allow_self( cross_domain, 'microphone', - '[object NavigatorUserMediaError]', + 'NotAllowedError', function() { return promise_factory('microphone'); }); @@ -45,7 +45,7 @@ run_all_fp_tests_allow_self( cross_domain, 'camera', - '[object NavigatorUserMediaError]', + 'NotAllowedError', function() { return promise_factory('camera'); }); @@ -53,7 +53,7 @@ run_all_fp_tests_allow_self( cross_domain, 'camera; microphone', - '[object NavigatorUserMediaError]', + 'NotAllowedError', function() { return promise_factory('camera; microphone'); }); diff --git a/tests/wpt/web-platform-tests/netinfo/netinfo-basics.html b/tests/wpt/web-platform-tests/netinfo/netinfo-basics.html index 4cee9e410d5..7d08e12280a 100644 --- a/tests/wpt/web-platform-tests/netinfo/netinfo-basics.html +++ b/tests/wpt/web-platform-tests/netinfo/netinfo-basics.html @@ -11,6 +11,10 @@ test(function() { "ethernet", "mixed", "none", "other", "unknown", "wifi", "wimax"], 'type is unexpected'); }, "type attribute"); +test(function() { + assert_in_array(navigator.connection.saveData, [false, true], 'saveData is unexpected'); +}, "saveData attribute"); + test(function() { assert_greater_than_equal(navigator.connection.downlinkMax, 0); }, "downlinkMax attribute"); diff --git a/tests/wpt/web-platform-tests/paint-timing/child-painting-first-image.html b/tests/wpt/web-platform-tests/paint-timing/child-painting-first-image.html new file mode 100644 index 00000000000..99f761f10a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/paint-timing/child-painting-first-image.html @@ -0,0 +1,26 @@ + + + + + + + + diff --git a/tests/wpt/web-platform-tests/paint-timing/first-contentful-paint.html b/tests/wpt/web-platform-tests/paint-timing/first-contentful-paint.html index 570ce4be21c..d8eabefe12f 100644 --- a/tests/wpt/web-platform-tests/paint-timing/first-contentful-paint.html +++ b/tests/wpt/web-platform-tests/paint-timing/first-contentful-paint.html @@ -46,8 +46,16 @@ async_test(function (t) { assert_equals(moreBufferedEntries.length, 2, "FP and FCP."); assert_equals(moreBufferedEntries[0].entryType, "paint"); assert_equals(moreBufferedEntries[0].name, "first-paint"); + const fpEntriesGotByName = + performance.getEntriesByName('first-paint'); + assert_equals(fpEntriesGotByName.length, 1); + assert_equals(moreBufferedEntries[0], fpEntriesGotByName[0]); assert_equals(moreBufferedEntries[1].entryType, "paint"); assert_equals(moreBufferedEntries[1].name, "first-contentful-paint"); + const fcpEntriesGotByName = + performance.getEntriesByName('first-contentful-paint'); + assert_equals(fcpEntriesGotByName.length, 1); + assert_equals(moreBufferedEntries[1], fcpEntriesGotByName[0]); t.done(); }); } diff --git a/tests/wpt/web-platform-tests/paint-timing/first-image-child.html b/tests/wpt/web-platform-tests/paint-timing/first-image-child.html new file mode 100644 index 00000000000..0622ddef96b --- /dev/null +++ b/tests/wpt/web-platform-tests/paint-timing/first-image-child.html @@ -0,0 +1,47 @@ + + +Performance Paint Timing Test: child ignores parent FCP + + + + +
+ + + + diff --git a/tests/wpt/web-platform-tests/paint-timing/resources/subframe-painting.html b/tests/wpt/web-platform-tests/paint-timing/resources/subframe-painting.html new file mode 100644 index 00000000000..5fb5e28d8a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/paint-timing/resources/subframe-painting.html @@ -0,0 +1,26 @@ + + +
+ + + diff --git a/tests/wpt/web-platform-tests/paint-timing/resources/subframe-sending-paint.html b/tests/wpt/web-platform-tests/paint-timing/resources/subframe-sending-paint.html new file mode 100644 index 00000000000..f372bd6f4f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/paint-timing/resources/subframe-sending-paint.html @@ -0,0 +1,13 @@ + + diff --git a/tests/wpt/web-platform-tests/payment-request/payment-request-response-id.html b/tests/wpt/web-platform-tests/payment-request/payment-request-response-id.html deleted file mode 100644 index 90a2cfbb843..00000000000 --- a/tests/wpt/web-platform-tests/payment-request/payment-request-response-id.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - PaymentRequest identifier manual test - - -
-

PaymentRequest identifier manual test

-

Perform the following steps:

-
    -
  • Press 'Buy'
  • -
  • In the payment dialog make sure a payment app is selected
  • -
  • In the payment dialog press 'Pay'
  • -
  • In the launched payment app perform steps to do the payment
  • -
  • The response will be processed and below should display 'my_payment_id'
  • -
-

No payment will be processed.

-

Price: USD $55.00

-

-
-

-  
-
-
-
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_support.js b/tests/wpt/web-platform-tests/pointerevents/pointerevent_support.js
index 0ed40101f37..64f13486f42 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_support.js
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_support.js
@@ -161,10 +161,13 @@ function updateDescriptionSecondStepTouchActionElement(target, scrollReturnInter
     document.getElementById('desc').innerHTML = "Test Description: Try to scroll element RIGHT moving your outside of the red border";
 }
 
-function updateDescriptionThirdStepTouchActionElement(target, scrollReturnInterval) {
+function updateDescriptionThirdStepTouchActionElement(target, scrollReturnInterval, callback = null) {
     window.step_timeout(function() {
-    objectScroller(target, 'left', 0);}
-    , scrollReturnInterval);
+        objectScroller(target, 'left', 0);
+        if (callback) {
+            callback();
+        }
+    }, scrollReturnInterval);
     document.getElementById('desc').innerHTML = "Test Description: Try to scroll element DOWN then RIGHT starting your touch inside of the element. Then tap complete button";
 }
 
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-button-test_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-button-test_touch-manual.html
index c57f869ef63..c7c5d9a4408 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-button-test_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-button-test_touch-manual.html
@@ -88,10 +88,11 @@
 
                         if(xScrollIsReceived && yScrollIsReceived) {
                             test_touchaction_div.done();
-                            updateDescriptionThirdStepTouchActionElement(target0, scrollReturnInterval);
-                            setTimeout(function() {
-                                isFirstPart = false;
-                            }, 2 * scrollReturnInterval); // avoid immediate triggering while scroll is still being performed
+                            updateDescriptionThirdStepTouchActionElement(target0, scrollReturnInterval, function () {
+                                setTimeout(function() {
+                                    isFirstPart = false;
+                                }, scrollReturnInterval); // avoid immediate triggering while scroll is still being performed
+                            });
                         }
                     }
                     else {
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-span-test_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-span-test_touch-manual.html
index 41635e0bf94..61f0e8d329a 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-span-test_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-span-test_touch-manual.html
@@ -91,14 +91,15 @@
 
                         if(xScrollIsReceived && yScrollIsReceived) {
                             test_touchaction_div.done();
-                            updateDescriptionThirdStepTouchActionElement(target0, scrollReturnInterval);
-                            setTimeout(function() {
-                                isFirstPart = false;
-                                xScr0 = target0.scrollLeft;
-                                xScr0 = target0.scrollLeft;
-                                xScrollIsReceived = false;
-                                yScrollIsReceived = false;
-                            }, 2 * scrollReturnInterval); // avoid immediate triggering while scroll is still being performed
+                            updateDescriptionThirdStepTouchActionElement(target0, scrollReturnInterval, function () {
+                                setTimeout(function() {
+                                    isFirstPart = false;
+                                    xScr0 = target0.scrollLeft;
+                                    xScr0 = target0.scrollLeft;
+                                    xScrollIsReceived = false;
+                                    yScrollIsReceived = false;
+                                }, scrollReturnInterval); // avoid immediate triggering while scroll is still being performed
+                            });
                         }
                     }
                 });
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-table-test_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-table-test_touch-manual.html
index fcc3a3e7cad..d09979e1e5a 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-table-test_touch-manual.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-table-test_touch-manual.html
@@ -103,10 +103,11 @@
 
                         if(xScrollIsReceived && yScrollIsReceived) {
                             test_touchaction_row.done();
-                            updateDescriptionThirdStepTable(target0, scrollReturnInterval);
-                            setTimeout(function() {
-                                isFirstPart = false;
-                            }, 2 * scrollReturnInterval); // avoid immediate triggering while scroll is still being performed
+                            updateDescriptionThirdStepTable(target0, scrollReturnInterval, function() {
+                                setTimeout(function() {
+                                    isFirstPart = false;
+                                }, scrollReturnInterval); // avoid immediate triggering while scroll is still being performed
+                            });
                         }
                     }
                     else {
@@ -123,9 +124,12 @@
                 document.getElementById('desc').innerHTML = "Test Description: Try to scroll element RIGHT staring your touch over the Row 1";
             }
 
-            function updateDescriptionThirdStepTable(target, scrollReturnInterval) {
+            function updateDescriptionThirdStepTable(target, scrollReturnInterval, callback = null) {
                 window.setTimeout(function() {
                     objectScroller(target, 'left', 0);
+                    if (callback) {
+                        callback();
+                    }
                 }
                 , scrollReturnInterval);
                 document.getElementById('desc').innerHTML = "Test Description: Try to scroll element DOWN then RIGHT starting your touch inside of the Cell 3";
diff --git a/tests/wpt/web-platform-tests/preload/modulepreload.html b/tests/wpt/web-platform-tests/preload/modulepreload.html
new file mode 100644
index 00000000000..160b37afca2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/preload/modulepreload.html
@@ -0,0 +1,92 @@
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/preload/resources/module1.js b/tests/wpt/web-platform-tests/preload/resources/module1.js
new file mode 100644
index 00000000000..9c3b675de70
--- /dev/null
+++ b/tests/wpt/web-platform-tests/preload/resources/module1.js
@@ -0,0 +1,2 @@
+import { y } from './module2.js';
+export let x = y + 1;
diff --git a/tests/wpt/web-platform-tests/preload/resources/module2.js b/tests/wpt/web-platform-tests/preload/resources/module2.js
new file mode 100644
index 00000000000..e4e3217b8c1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/preload/resources/module2.js
@@ -0,0 +1 @@
+export let y = 1;
diff --git a/tests/wpt/web-platform-tests/preload/resources/syntax-error.js b/tests/wpt/web-platform-tests/preload/resources/syntax-error.js
new file mode 100644
index 00000000000..471697a43bf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/preload/resources/syntax-error.js
@@ -0,0 +1 @@
+;-)
diff --git a/tests/wpt/web-platform-tests/resource-timing/resource_subframe_self_navigation.html b/tests/wpt/web-platform-tests/resource-timing/resource_subframe_self_navigation.html
new file mode 100644
index 00000000000..5843f883072
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resource-timing/resource_subframe_self_navigation.html
@@ -0,0 +1,53 @@
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/notify_parent.html b/tests/wpt/web-platform-tests/resource-timing/resources/notify_parent.html
new file mode 100644
index 00000000000..c104f3c8f06
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resource-timing/resources/notify_parent.html
@@ -0,0 +1,4 @@
+
+
diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/self_navigation.html b/tests/wpt/web-platform-tests/resource-timing/resources/self_navigation.html
new file mode 100644
index 00000000000..beb12f5da55
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resource-timing/resources/self_navigation.html
@@ -0,0 +1 @@
+
diff --git a/tests/wpt/web-platform-tests/resources/testdriver-vendor.js b/tests/wpt/web-platform-tests/resources/testdriver-vendor.js
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/wpt/web-platform-tests/resources/testdriver-vendor.js.headers b/tests/wpt/web-platform-tests/resources/testdriver-vendor.js.headers
new file mode 100644
index 00000000000..6805c323df5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/testdriver-vendor.js.headers
@@ -0,0 +1 @@
+Content-Type: text/javascript; charset=utf-8
diff --git a/tests/wpt/web-platform-tests/resources/testdriver.js b/tests/wpt/web-platform-tests/resources/testdriver.js
new file mode 100644
index 00000000000..a6aa298ccd0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/testdriver.js
@@ -0,0 +1,101 @@
+(function() {
+    "use strict";
+
+    function getInViewCenterPoint(rect) {
+        var left = Math.max(0, rect.left);
+        var right = Math.min(window.innerWidth, rect.right);
+        var top = Math.max(0, rect.top);
+        var bottom = Math.min(window.innerHeight, rect.bottom);
+
+        var x = 0.5 * (left + right);
+        var y = 0.5 * (top + bottom);
+
+        return [x, y];
+    }
+
+    function getPointerInteractablePaintTree(element) {
+        if (!window.document.contains(element)) {
+            return [];
+        }
+
+        var rectangles = element.getClientRects();
+
+        if (rectangles.length === 0) {
+            return [];
+        }
+
+        var centerPoint = getInViewCenterPoint(rectangles[0]);
+
+        if ("elementsFromPoint" in document) {
+            return document.elementsFromPoint(centerPoint[0], centerPoint[1]);
+        } else if ("msElementsFromPoint" in document) {
+            var rv = document.msElementsFromPoint(centerPoint[0], centerPoint[1]);
+            return Array.prototype.slice.call(rv ? rv : []);
+        } else {
+            throw new Error("document.elementsFromPoint unsupported");
+        }
+    }
+
+    function inView(element) {
+        var pointerInteractablePaintTree = getPointerInteractablePaintTree(element);
+        return pointerInteractablePaintTree.indexOf(element) !== -1;
+    }
+
+
+    /**
+     * @namespace
+     */
+    window.test_driver = {
+        /**
+         * Triggers a user-initiated click
+         *
+         * This matches the behaviour of the {@link
+         * https://w3c.github.io/webdriver/webdriver-spec.html#element-click|WebDriver
+         * Element Click command}.
+         *
+         * @param {Element} element - element to be clicked
+         * @returns {Promise} fulfilled after click occurs, or rejected in
+         *                    the cases the WebDriver command errors
+         */
+        click: function(element) {
+            if (window.top !== window) {
+                return Promise.reject(new Error("can only click in top-level window"));
+            }
+
+            if (!window.document.contains(element)) {
+                return Promise.reject(new Error("element in different document or shadow tree"));
+            }
+
+            if (!inView(element)) {
+                element.scrollIntoView({behavior: "instant",
+                                        block: "end",
+                                        inline: "nearest"});
+            }
+
+            var pointerInteractablePaintTree = getPointerInteractablePaintTree(element);
+            if (pointerInteractablePaintTree.length === 0 ||
+                !element.contains(pointerInteractablePaintTree[0])) {
+                return Promise.reject(new Error("element click intercepted error"));
+            }
+
+            var rect = element.getClientRects()[0];
+            var centerPoint = getInViewCenterPoint(rect);
+            return window.test_driver_internal.click(element,
+                                                     {x: centerPoint[0],
+                                                      y: centerPoint[1]});
+        }
+    };
+
+    window.test_driver_internal = {
+        /**
+         * Triggers a user-initated click
+         *
+         * @param {Element} element - element to be clicked
+         * @param {{x: number, y: number} coords - viewport coordinates to click at
+         * @returns {Promise} fulfilled after click occurs or rejected if click fails
+         */
+        click: function(element, coords) {
+            return Promise.reject(new Error("unimplemented"));
+        }
+    };
+})();
diff --git a/tests/wpt/web-platform-tests/resources/testdriver.js.headers b/tests/wpt/web-platform-tests/resources/testdriver.js.headers
new file mode 100644
index 00000000000..6805c323df5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/testdriver.js.headers
@@ -0,0 +1 @@
+Content-Type: text/javascript; charset=utf-8
diff --git a/tests/wpt/web-platform-tests/resources/testharness.css.headers b/tests/wpt/web-platform-tests/resources/testharness.css.headers
index 3d2c3342b7c..e828b629858 100644
--- a/tests/wpt/web-platform-tests/resources/testharness.css.headers
+++ b/tests/wpt/web-platform-tests/resources/testharness.css.headers
@@ -1 +1,2 @@
 Content-Type: text/css;charset=utf-8
+Cache-Control: max-age=3600
diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js
index 55e1158da0b..d4d35ff4540 100644
--- a/tests/wpt/web-platform-tests/resources/testharness.js
+++ b/tests/wpt/web-platform-tests/resources/testharness.js
@@ -2258,12 +2258,29 @@ policies and contribution forms [3].
         }
         var node = output_document.getElementById("log");
         if (!node) {
-            if (!document.body || document.readyState == "loading") {
+            if (!document.readyState == "loading") {
                 return;
             }
-            node = output_document.createElement("div");
+            node = output_document.createElementNS("http://www.w3.org/1999/xhtml", "div");
             node.id = "log";
-            output_document.body.appendChild(node);
+            if (output_document.body) {
+                output_document.body.appendChild(node);
+            } else {
+                var is_svg = false;
+                var output_window = output_document.defaultView;
+                if (output_window && "SVGSVGElement" in output_window) {
+                    is_svg = output_document.documentElement instanceof output_window.SVGSVGElement;
+                }
+                if (is_svg) {
+                    var foreignObject = output_document.createElementNS("http://www.w3.org/2000/svg", "foreignObject");
+                    foreignObject.setAttribute("width", "100%");
+                    foreignObject.setAttribute("height", "100%");
+                    output_document.documentElement.appendChild(foreignObject);
+                    foreignObject.appendChild(node);
+                } else {
+                    output_document.documentElement.appendChild(node);
+                }
+            }
         }
         this.output_document = output_document;
         this.output_node = node;
diff --git a/tests/wpt/web-platform-tests/resources/testharness.js.headers b/tests/wpt/web-platform-tests/resources/testharness.js.headers
index 6805c323df5..5e8f640c665 100644
--- a/tests/wpt/web-platform-tests/resources/testharness.js.headers
+++ b/tests/wpt/web-platform-tests/resources/testharness.js.headers
@@ -1 +1,2 @@
 Content-Type: text/javascript; charset=utf-8
+Cache-Control: max-age=3600
diff --git a/tests/wpt/web-platform-tests/resources/testharnessreport.js.headers b/tests/wpt/web-platform-tests/resources/testharnessreport.js.headers
index 6805c323df5..5e8f640c665 100644
--- a/tests/wpt/web-platform-tests/resources/testharnessreport.js.headers
+++ b/tests/wpt/web-platform-tests/resources/testharnessreport.js.headers
@@ -1 +1,2 @@
 Content-Type: text/javascript; charset=utf-8
+Cache-Control: max-age=3600
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html
index f0dad6a7b28..aa3c74a13bb 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html
@@ -8,9 +8,11 @@
 promise_test(function(t) {
     var script = 'resources/registration-attribute-worker.js';
     var scope = 'resources/scope/registration-attribute';
-
+    var registration;
     return service_worker_unregister_and_register(t, script, scope)
-      .then(function(registration) {
+      .then(function(reg) {
+          registration = reg;
+          add_result_callback(function() { registration.unregister(); });
           return wait_for_state(t, registration.installing, 'activated');
         })
       .then(function() { return with_iframe(scope); })
@@ -30,8 +32,76 @@ promise_test(function(t) {
               expected_events_seen.toString(),
               'Service Worker should respond to fetch');
           frame.remove();
-          return service_worker_unregister_and_done(t, scope);
+          return registration.unregister();
         });
-  }, 'Verify registration attribute on ServiceWorkerGlobalScope');
+  }, 'Verify registration attributes on ServiceWorkerGlobalScope');
+
+promise_test(function(t) {
+    var script = 'resources/registration-attribute-worker.js';
+    var newer_script = 'resources/registration-attribute-newer-worker.js';
+    var scope = 'resources/scope/registration-attribute';
+    var newer_worker;
+    var registration;
+
+    return service_worker_unregister_and_register(t, script, scope)
+      .then(function(reg) {
+          registration = reg;
+          add_result_callback(function() { registration.unregister(); });
+          return wait_for_state(t, registration.installing, 'activated');
+        })
+      .then(function() {
+          return navigator.serviceWorker.register(newer_script, {scope: scope});
+        })
+      .then(function(reg) {
+          assert_equals(reg, registration);
+          newer_worker = registration.installing;
+          return wait_for_state(t, registration.installing, 'activated');
+        })
+      .then(function() {
+          var channel = new MessageChannel;
+          var saw_message = new Promise(function(resolve) {
+              channel.port1.onmessage = function(e) { resolve(e.data); };
+            });
+          newer_worker.postMessage({port: channel.port2}, [channel.port2]);
+          return saw_message;
+        })
+      .then(function(results) {
+          var script_url = normalizeURL(script);
+          var newer_script_url = normalizeURL(newer_script);
+          var expectations = [
+            'evaluate',
+            '  installing: empty',
+            '  waiting: empty',
+            '  active: ' + script_url,
+            'updatefound',
+            '  installing: ' + newer_script_url,
+            '  waiting: empty',
+            '  active: ' + script_url,
+            'install',
+            '  installing: ' + newer_script_url,
+            '  waiting: empty',
+            '  active: ' + script_url,
+            'statechange(installed)',
+            '  installing: empty',
+            '  waiting: ' + newer_script_url,
+            '  active: ' + script_url,
+            'statechange(activating)',
+            '  installing: empty',
+            '  waiting: empty',
+            '  active: ' + newer_script_url,
+            'activate',
+            '  installing: empty',
+            '  waiting: empty',
+            '  active: ' + newer_script_url,
+            'statechange(activated)',
+            '  installing: empty',
+            '  waiting: empty',
+            '  active: ' + newer_script_url,
+          ];
+          assert_array_equals(results, expectations);
+          return registration.unregister();
+        });
+  }, 'Verify registration attributes on ServiceWorkerGlobalScope of the ' +
+     'newer worker');
 
 
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-newer-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-newer-worker.js
new file mode 100644
index 00000000000..44f3e2e8e9b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-newer-worker.js
@@ -0,0 +1,33 @@
+// TODO(nhiroki): stop using global states because service workers can be killed
+// at any point. Instead, we could post a message to the page on each event via
+// Client object (http://crbug.com/558244).
+var results = [];
+
+function stringify(worker) {
+  return worker ? worker.scriptURL : 'empty';
+}
+
+function record(event_name) {
+  results.push(event_name);
+  results.push('  installing: ' + stringify(self.registration.installing));
+  results.push('  waiting: ' + stringify(self.registration.waiting));
+  results.push('  active: ' + stringify(self.registration.active));
+}
+
+record('evaluate');
+
+self.registration.addEventListener('updatefound', function() {
+    record('updatefound');
+    var worker = self.registration.installing;
+    self.registration.installing.addEventListener('statechange', function() {
+        record('statechange(' + worker.state + ')');
+      });
+  });
+
+self.addEventListener('install', function(e) { record('install'); });
+
+self.addEventListener('activate', function(e) { record('activate'); });
+
+self.addEventListener('message', function(e) {
+    e.data.port.postMessage(results);
+  });
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-worker.js
index c98acbcfb06..315f4375932 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-worker.js
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-worker.js
@@ -1,8 +1,15 @@
 importScripts('../../resources/test-helpers.sub.js');
 importScripts('../../resources/worker-testharness.js');
 
+// TODO(nhiroki): stop using global states because service workers can be killed
+// at any point. Instead, we could post a message to the page on each event via
+// Client object (http://crbug.com/558244).
 var events_seen = [];
 
+// TODO(nhiroki): Move these assertions to registration-attribute.html because
+// an assertion failure on the worker is not shown on the result page and
+// handled as timeout. See registration-attribute-newer-worker.js for example.
+
 assert_equals(
   self.registration.scope,
   normalizeURL('scope/registration-attribute'),
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/unregister-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/unregister-worker.js
index 6cee5365428..6da397dd152 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/unregister-worker.js
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/unregister-worker.js
@@ -6,18 +6,20 @@ if (matchQuery('?evaluation'))
   self.registration.unregister();
 
 self.addEventListener('install', function(e) {
-    if (matchQuery('?install'))
+    if (matchQuery('?install')) {
+      // Don't do waitUntil(unregister()) as that would deadlock as specified.
       self.registration.unregister();
+    }
   });
 
 self.addEventListener('activate', function(e) {
     if (matchQuery('?activate'))
-      self.registration.unregister();
+      e.waitUntil(self.registration.unregister());
   });
 
 self.addEventListener('message', function(e) {
-    self.registration.unregister()
+    e.waitUntil(self.registration.unregister()
       .then(function(result) {
           e.data.port.postMessage({result: result});
-        });
+        }));
   });
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/update-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/update-worker.js
index 63c4534b7ef..8be8a1ffebe 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/update-worker.js
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/resources/update-worker.js
@@ -1,6 +1,3 @@
-importScripts('../../resources/test-helpers.sub.js');
-importScripts('../../resources/worker-testharness.js');
-
 var events_seen = [];
 
 self.registration.addEventListener('updatefound', function() {
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/activation.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/activation.https.html
index 75fdff813ed..82138dda466 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/activation.https.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/activation.https.html
@@ -4,6 +4,7 @@
 
 
 
+
 
+
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/detached-context.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/detached-context.https.html
new file mode 100644
index 00000000000..d345982343f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/detached-context.https.html
@@ -0,0 +1,122 @@
+
+
+Service WorkerRegistration from a removed iframe
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-partial-stream.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-partial-stream.https.html
new file mode 100644
index 00000000000..505cef29726
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-partial-stream.https.html
@@ -0,0 +1,62 @@
+
+
+respondWith streams data to an intercepted fetch()
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/registration-iframe.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/registration-iframe.https.html
index d6a2c3b5519..ae39ddfea3e 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/registration-iframe.https.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/registration-iframe.https.html
@@ -4,6 +4,7 @@
 
 
 
+
 
+
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-network-error-controllee-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-network-error-controllee-iframe.html
index e28f623934e..f6c1919bbcf 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-network-error-controllee-iframe.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-network-error-controllee-iframe.html
@@ -54,7 +54,7 @@ function run_tests() {
 }
 
 if (!navigator.serviceWorker.controller)
-  window.parent.notify_done('FAIL: no controller');
+  window.parent.notify_test_done('FAIL: no controller');
 else
   run_tests();
 
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-argument-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-argument-iframe.html
index 33b47e78a34..0ebd1ca8153 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-argument-iframe.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-argument-iframe.html
@@ -49,7 +49,7 @@ function run_tests() {
 }
 
 if (!navigator.serviceWorker.controller)
-  window.parent.notify_done('FAIL: no controller');
+  window.parent.notify_test_done('FAIL: no controller');
 else
   run_tests();
 
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-partial-stream-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-partial-stream-worker.js
new file mode 100644
index 00000000000..b7307f29f57
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-respond-with-partial-stream-worker.js
@@ -0,0 +1,28 @@
+let waitUntilResolve;
+
+let bodyController;
+
+self.addEventListener('message', evt => {
+  if (evt.data === 'done') {
+    bodyController.close();
+    waitUntilResolve();
+  }
+});
+
+self.addEventListener('fetch', evt => {
+  if (!evt.request.url.includes('partial-stream.txt')) {
+    return;
+  }
+
+  evt.waitUntil(new Promise(resolve => waitUntilResolve = resolve));
+
+  let body = new ReadableStream({
+    start: controller => {
+      let encoder = new TextEncoder();
+      controller.enqueue(encoder.encode('partial-stream-content'));
+      bodyController = controller;
+    },
+  });
+
+  evt.respondWith(new Response(body));
+});
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/interfaces-idls.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/interfaces-idls.js
index 9d0b4f18efe..814a5df4617 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/interfaces-idls.js
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/interfaces-idls.js
@@ -76,6 +76,12 @@ enum ServiceWorkerState {
   "redundant"
 };
 
+enum ServiceWorkerUpdateViaCache {
+    "imports",
+    "all",
+    "none"
+};
+
 [SecureContext, Exposed=(Window,Worker)]
 interface ServiceWorkerRegistration : EventTarget {
   readonly attribute ServiceWorker? installing;
@@ -93,7 +99,7 @@ interface ServiceWorkerRegistration : EventTarget {
   attribute EventHandler onupdatefound;
 };
 
-[Exposed=(Window,Worker)]
+[Constructor(), Exposed=(Window,Worker)]
 interface EventTarget {
   void addEventListener(DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options);
   void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options);
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/interfaces-worker.sub.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/interfaces-worker.sub.js
index ef333cb8400..89cf5033178 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/interfaces-worker.sub.js
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/interfaces-worker.sub.js
@@ -73,3 +73,7 @@ test(function() {
       'http://{{host}}/',
       'FetchEvent.request.url should return the value it was initialized to');
   }, 'Event constructors');
+
+test(() => {
+    assert_false('XMLHttpRequest' in self);
+  }, 'xhr is not exposed');
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/respond-with-body-accessed-response-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/respond-with-body-accessed-response-iframe.html
new file mode 100644
index 00000000000..7be31487949
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/respond-with-body-accessed-response-iframe.html
@@ -0,0 +1,20 @@
+
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/respond-with-body-accessed-response-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/respond-with-body-accessed-response-worker.js
new file mode 100644
index 00000000000..c602109bc68
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/respond-with-body-accessed-response-worker.js
@@ -0,0 +1,93 @@
+importScripts('/common/get-host-info.sub.js');
+importScripts('test-helpers.sub.js');
+
+function getQueryParams(url) {
+  var search = (new URL(url)).search;
+  if (!search) {
+    return {};
+  }
+  var ret = {};
+  var params = search.substring(1).split('&');
+  params.forEach(function(param) {
+      var element = param.split('=');
+      ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]);
+    });
+  return ret;
+}
+
+function createResponse(params) {
+  if (params['type'] == 'basic') {
+    return fetch('respond-with-body-accessed-response.jsonp');
+  }
+  if (params['type'] == 'opaque') {
+    return fetch(get_host_info()['HTTPS_REMOTE_ORIGIN'] + base_path() +
+          'respond-with-body-accessed-response.jsonp',
+          {mode: 'no-cors'});
+  }
+  if (params['type'] == 'default') {
+    return Promise.resolve(new Response('callback(\'OK\');'));
+  }
+
+  return Promise.reject(new Error('unexpected type :' + params['type']));
+}
+
+function cloneResponseIfNeeded(params, response) {
+  if (params['clone'] == '1') {
+    return response.clone();
+  } else if (params['clone'] == '2') {
+    response.clone();
+    return response;
+  }
+  return response;
+}
+
+function passThroughCacheIfNeeded(params, request, response) {
+  return new Promise(function(resolve) {
+      if (params['passThroughCache'] == 'true') {
+        var cache_name = request.url;
+        var cache;
+        self.caches.delete(cache_name)
+          .then(function() {
+              return self.caches.open(cache_name);
+            })
+          .then(function(c) {
+              cache = c;
+              return cache.put(request, response);
+            })
+          .then(function() {
+              return cache.match(request.url);
+            })
+          .then(function(res) {
+              // Touch .body here to test the behavior after touching it.
+              res.body;
+              resolve(res);
+            });
+      } else {
+        resolve(response);
+      }
+    })
+}
+
+self.addEventListener('fetch', function(event) {
+    if (event.request.url.indexOf('TestRequest') == -1) {
+      return;
+    }
+    var params = getQueryParams(event.request.url);
+    event.respondWith(
+        createResponse(params)
+          .then(function(response) {
+              // Touch .body here to test the behavior after touching it.
+              response.body;
+              return cloneResponseIfNeeded(params, response);
+            })
+          .then(function(response) {
+              // Touch .body here to test the behavior after touching it.
+              response.body;
+              return passThroughCacheIfNeeded(params, event.request, response);
+            })
+          .then(function(response) {
+              // Touch .body here to test the behavior after touching it.
+              response.body;
+              return response;
+            }));
+  });
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/respond-with-body-accessed-response.jsonp b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/respond-with-body-accessed-response.jsonp
new file mode 100644
index 00000000000..b9c28f51f90
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/respond-with-body-accessed-response.jsonp
@@ -0,0 +1 @@
+callback('OK');
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/sandboxed-iframe-navigator-serviceworker-iframe.html b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/sandboxed-iframe-navigator-serviceworker-iframe.html
new file mode 100644
index 00000000000..1d682e47ef5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/sandboxed-iframe-navigator-serviceworker-iframe.html
@@ -0,0 +1,25 @@
+
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/websocket-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/websocket-worker.js
new file mode 100644
index 00000000000..bb2dc81e553
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/websocket-worker.js
@@ -0,0 +1,35 @@
+let port;
+let received = false;
+
+function reportFailure(details) {
+  port.postMessage('FAIL: ' + details);
+}
+
+onmessage = event => {
+  port = event.source;
+
+  const ws = new WebSocket('wss://{{host}}:{{ports[wss][0]}}/echo');
+  ws.onopen = () => {
+    ws.send('Hello');
+  };
+  ws.onmessage = msg => {
+    if (msg.data !== 'Hello') {
+      reportFailure('Unexpected reply: ' + msg.data);
+      return;
+    }
+
+    received = true;
+    ws.close();
+  };
+  ws.onclose = (event) => {
+    if (!received) {
+      reportFailure('Closed before receiving reply: ' + event.code);
+      return;
+    }
+
+    port.postMessage('PASS');
+  };
+  ws.onerror = () => {
+    reportFailure('Got an error event');
+  };
+};
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xhr.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xhr.js
deleted file mode 100644
index 387c4a48ed5..00000000000
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xhr.js
+++ /dev/null
@@ -1,6 +0,0 @@
-self.addEventListener('activate', function(event) {
-    event.waitUntil(clients.claim());
-  });
-self.addEventListener('message', function(event) {
-    event.data.port.postMessage({xhr: !!("XMLHttpRequest" in self)});
-  });
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/respond-with-body-accessed-response.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/respond-with-body-accessed-response.https.html
new file mode 100644
index 00000000000..f6713d89216
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/respond-with-body-accessed-response.https.html
@@ -0,0 +1,54 @@
+
+Service Worker responds with .body accessed response.
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/sandboxed-iframe-navigator-serviceworker.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/sandboxed-iframe-navigator-serviceworker.https.html
new file mode 100644
index 00000000000..a58525f4222
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/sandboxed-iframe-navigator-serviceworker.https.html
@@ -0,0 +1,115 @@
+
+Accessing navigator.serviceWorker in sandboxed iframe.
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/waiting.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/waiting.https.html
index eff9c80a4f6..2b0dbc9485b 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/waiting.https.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/waiting.https.html
@@ -5,40 +5,36 @@
 
 
 
+
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https.html
new file mode 100644
index 00000000000..cda9d6fe67e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https.html
@@ -0,0 +1,27 @@
+
+Service Worker: WebSockets can be created in a Service Worker
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/xhr.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/xhr.https.html
deleted file mode 100644
index 0805cf84dfa..00000000000
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/xhr.https.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-Service Worker: XHR doesn't exist
-
-
-
-
-
diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.dedicatedworker.html b/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.dedicatedworker.html
new file mode 100644
index 00000000000..300dc851875
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.dedicatedworker.html
@@ -0,0 +1,11 @@
+
+
+reentrant-strategies.js dedicated worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.html b/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.html
new file mode 100644
index 00000000000..e2a6406bd46
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.html
@@ -0,0 +1,12 @@
+
+
+reentrant-strategies.js browser context wrapper file
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.js b/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.js
new file mode 100644
index 00000000000..47dd3bf3c7d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.js
@@ -0,0 +1,269 @@
+'use strict';
+
+// The size() function of the readable strategy can re-entrantly call back into the ReadableStream implementation. This
+// makes it risky to cache state across the call to ReadableStreamDefaultControllerEnqueue. These tests attempt to catch
+// such errors. They are separated from the other strategy tests because no real user code should ever do anything like
+// this.
+
+if (self.importScripts) {
+  self.importScripts('/resources/testharness.js');
+  self.importScripts('../resources/recording-streams.js');
+  self.importScripts('../resources/rs-utils.js');
+  self.importScripts('../resources/test-utils.js');
+}
+
+const error1 = new Error('error1');
+error1.name = 'error1';
+
+promise_test(() => {
+  let controller;
+  let calls = 0;
+  const rs = new ReadableStream({
+    start(c) {
+      controller = c;
+    }
+  }, {
+    size() {
+      ++calls;
+      if (calls < 2) {
+        controller.enqueue('b');
+      }
+      return 1;
+    }
+  });
+  controller.enqueue('a');
+  controller.close();
+  return readableStreamToArray(rs)
+      .then(array => assert_array_equals(array, ['b', 'a'], 'array should contain two chunks'));
+}, 'enqueue() inside size() should work');
+
+promise_test(() => {
+  let controller;
+  const rs = new ReadableStream({
+    start(c) {
+      controller = c;
+    }
+  }, {
+    size() {
+      // The queue is empty.
+      controller.close();
+      // The state has gone from "readable" to "closed".
+      return 1;
+      // This chunk will be enqueued, but will be impossible to read because the state is already "closed".
+    }
+  });
+  controller.enqueue('a');
+  return readableStreamToArray(rs)
+      .then(array => assert_array_equals(array, [], 'array should contain no chunks'));
+  // The chunk 'a' is still in rs's queue. It is closed so 'a' cannot be read.
+}, 'close() inside size() should not crash');
+
+promise_test(() => {
+  let controller;
+  let calls = 0;
+  const rs = new ReadableStream({
+    start(c) {
+      controller = c;
+    }
+  }, {
+    size() {
+      ++calls;
+      if (calls === 2) {
+        // The queue contains one chunk.
+        controller.close();
+        // The state is still "readable", but closeRequest is now true.
+      }
+      return 1;
+    }
+  });
+  controller.enqueue('a');
+  controller.enqueue('b');
+  return readableStreamToArray(rs)
+      .then(array => assert_array_equals(array, ['a', 'b'], 'array should contain two chunks'));
+}, 'close request inside size() should work');
+
+promise_test(t => {
+  let controller;
+  const rs = new ReadableStream({
+    start(c) {
+      controller = c;
+    }
+  }, {
+    size() {
+      controller.error(error1);
+      return 1;
+    }
+  });
+  controller.enqueue('a');
+  return promise_rejects(t, error1, rs.getReader().read(), 'read() should reject');
+}, 'error() inside size() should work');
+
+promise_test(() => {
+  let controller;
+  const rs = new ReadableStream({
+    start(c) {
+      controller = c;
+    }
+  }, {
+    size() {
+      assert_equals(controller.desiredSize, 1, 'desiredSize should be 1');
+      return 1;
+    },
+    highWaterMark: 1
+  });
+  controller.enqueue('a');
+  controller.close();
+  return readableStreamToArray(rs)
+      .then(array => assert_array_equals(array, ['a'], 'array should contain one chunk'));
+}, 'desiredSize inside size() should work');
+
+promise_test(t => {
+  let cancelPromise;
+  let controller;
+  const rs = new ReadableStream({
+    start(c) {
+      controller = c;
+    },
+    cancel: t.step_func(reason => {
+      assert_equals(reason, error1, 'reason should be error1');
+      assert_throws(new TypeError(), () => controller.enqueue(), 'enqueue() should throw');
+    })
+  }, {
+    size() {
+      cancelPromise = rs.cancel(error1);
+      return 1;
+    },
+    highWaterMark: Infinity
+  });
+  controller.enqueue('a');
+  const reader = rs.getReader();
+  return Promise.all([
+    reader.closed,
+    cancelPromise
+  ]);
+}, 'cancel() inside size() should work');
+
+promise_test(() => {
+  let controller;
+  let pipeToPromise;
+  const ws = recordingWritableStream();
+  const rs = new ReadableStream({
+    start(c) {
+      controller = c;
+    }
+  }, {
+    size() {
+      if (!pipeToPromise) {
+        pipeToPromise = rs.pipeTo(ws);
+      }
+      return 1;
+    },
+    highWaterMark: 1
+  });
+  controller.enqueue('a');
+  assert_not_equals(pipeToPromise, undefined);
+
+  // Some pipeTo() implementations need an additional chunk enqueued in order for the first one to be processed. See
+  // https://github.com/whatwg/streams/issues/794 for background.
+  controller.enqueue('a');
+
+  // Give pipeTo() a chance to process the queued chunks.
+  return delay(0).then(() => {
+    assert_array_equals(ws.events, ['write', 'a', 'write', 'a'], 'ws should contain two chunks');
+    controller.close();
+    return pipeToPromise;
+  }).then(() => {
+    assert_array_equals(ws.events, ['write', 'a', 'write', 'a', 'close'], 'target should have been closed');
+  });
+}, 'pipeTo() inside size() should behave as expected');
+
+promise_test(() => {
+  let controller;
+  let readPromise;
+  let calls = 0;
+  let readResolved = false;
+  let reader;
+  const rs = new ReadableStream({
+    start(c) {
+      controller = c;
+    }
+  }, {
+    size() {
+      // This is triggered by controller.enqueue(). The queue is empty and there are no pending reads. This read is
+      // added to the list of pending reads.
+      readPromise = reader.read();
+      ++calls;
+      return 1;
+    },
+    highWaterMark: 0
+  });
+  reader = rs.getReader();
+  controller.enqueue('a');
+  readPromise.then(() => {
+    readResolved = true;
+  });
+  return flushAsyncEvents().then(() => {
+    assert_false(readResolved);
+    controller.enqueue('b');
+    assert_equals(calls, 1, 'size() should have been called once');
+    return delay(0);
+  }).then(() => {
+    assert_true(readResolved);
+    assert_equals(calls, 1, 'size() should only be called once');
+    return readPromise;
+  }).then(({ value, done }) => {
+    assert_false(done, 'done should be false');
+    // See https://github.com/whatwg/streams/issues/794 for why this chunk is not 'a'.
+    assert_equals(value, 'b', 'chunk should have been read');
+    assert_equals(calls, 1, 'calls should still be 1');
+    return reader.read();
+  }).then(({ value, done }) => {
+    assert_false(done, 'done should be false again');
+    assert_equals(value, 'a', 'chunk a should come after b');
+  });
+}, 'read() inside of size() should behave as expected');
+
+promise_test(() => {
+  let controller;
+  let reader;
+  const rs = new ReadableStream({
+    start(c) {
+      controller = c;
+    }
+  }, {
+    size() {
+      reader = rs.getReader();
+      return 1;
+    }
+  });
+  controller.enqueue('a');
+  return reader.read().then(({ value, done }) => {
+    assert_false(done, 'done should be false');
+    assert_equals(value, 'a', 'value should be a');
+  });
+}, 'getReader() inside size() should work');
+
+promise_test(() => {
+  let controller;
+  let branch1;
+  let branch2;
+  const rs = new ReadableStream({
+    start(c) {
+      controller = c;
+    }
+  }, {
+    size() {
+      [branch1, branch2] = rs.tee();
+      return 1;
+    }
+  });
+  controller.enqueue('a');
+  assert_true(rs.locked, 'rs should be locked');
+  controller.close();
+  return Promise.all([
+    readableStreamToArray(branch1).then(array => assert_array_equals(array, ['a'], 'branch1 should have one chunk')),
+    readableStreamToArray(branch2).then(array => assert_array_equals(array, ['a'], 'branch2 should have one chunk'))
+  ]);
+}, 'tee() inside size() should work');
+
+done();
diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.serviceworker.https.html b/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.serviceworker.https.html
new file mode 100644
index 00000000000..6c1813d1385
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.serviceworker.https.html
@@ -0,0 +1,12 @@
+
+
+reentrant-strategies.js service worker wrapper file
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.sharedworker.html b/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.sharedworker.html
new file mode 100644
index 00000000000..4415a3fb9b3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/readable-streams/reentrant-strategies.sharedworker.html
@@ -0,0 +1,11 @@
+
+
+reentrant-strategies.js shared worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/tee.js b/tests/wpt/web-platform-tests/streams/readable-streams/tee.js
index 485f2af7ab5..d5d357fb91a 100644
--- a/tests/wpt/web-platform-tests/streams/readable-streams/tee.js
+++ b/tests/wpt/web-platform-tests/streams/readable-streams/tee.js
@@ -251,4 +251,29 @@ promise_test(t => {
 
 }, 'ReadableStream teeing: erroring the original should immediately error the branches');
 
+test(t => {
+
+  // Copy original global.
+  const oldReadableStream = ReadableStream;
+  const getReader = ReadableStream.prototype.getReader;
+
+  const origRS = new ReadableStream();
+
+  // Replace the global ReadableStream constructor with one that doesn't work.
+  ReadableStream = function() {
+    throw new Error('global ReadableStream constructor called');
+  };
+  t.add_cleanup(() => {
+    ReadableStream = oldReadableStream;
+  });
+
+  // This will probably fail if the global ReadableStream constructor was used.
+  const [rs1, rs2] = origRS.tee();
+
+  // These will definitely fail if the global ReadableStream constructor was used.
+  assert_not_equals(getReader.call(rs1), undefined, 'getReader should work on rs1');
+  assert_not_equals(getReader.call(rs2), undefined, 'getReader should work on rs2');
+
+}, 'ReadableStreamTee should not use a modified ReadableStream constructor from the global object');
+
 done();
diff --git a/tests/wpt/web-platform-tests/streams/resources/recording-streams.js b/tests/wpt/web-platform-tests/streams/resources/recording-streams.js
index 3f949313f97..34d02a143dc 100644
--- a/tests/wpt/web-platform-tests/streams/resources/recording-streams.js
+++ b/tests/wpt/web-platform-tests/streams/resources/recording-streams.js
@@ -86,3 +86,45 @@ self.recordingWritableStream = (extras = {}, strategy) => {
 
   return stream;
 };
+
+self.recordingTransformStream = (extras = {}, writableStrategy, readableStrategy) => {
+  let controllerToCopyOver;
+  const stream = new TransformStream({
+    start(controller) {
+      controllerToCopyOver = controller;
+
+      if (extras.start) {
+        return extras.start(controller);
+      }
+
+      return undefined;
+    },
+
+    transform(chunk, controller) {
+      stream.events.push('transform', chunk);
+
+      if (extras.transform) {
+        return extras.transform(chunk, controller);
+      }
+
+      controller.enqueue(chunk);
+
+      return undefined;
+    },
+
+    flush(controller) {
+      stream.events.push('flush');
+
+      if (extras.flush) {
+        return extras.flush(controller);
+      }
+
+      return undefined;
+    }
+  }, writableStrategy, readableStrategy);
+
+  stream.controller = controllerToCopyOver;
+  stream.events = [];
+
+  return stream;
+};
diff --git a/tests/wpt/web-platform-tests/streams/resources/test-utils.js b/tests/wpt/web-platform-tests/streams/resources/test-utils.js
index 4c58e75f784..871ab49fa81 100644
--- a/tests/wpt/web-platform-tests/streams/resources/test-utils.js
+++ b/tests/wpt/web-platform-tests/streams/resources/test-utils.js
@@ -7,7 +7,7 @@ self.getterRejects = (t, obj, getterName, target) => {
 };
 
 self.getterRejectsForAll = (t, obj, getterName, targets) => {
-  return Promise.all(targets.map(target => getterRejects(t, obj, getterName, target)));
+  return Promise.all(targets.map(target => self.getterRejects(t, obj, getterName, target)));
 };
 
 self.methodRejects = (t, obj, methodName, target, args) => {
@@ -17,8 +17,8 @@ self.methodRejects = (t, obj, methodName, target, args) => {
                          methodName + ' should reject with a TypeError');
 };
 
-self.methodRejectsForAll =  (t, obj, methodName, targets, args) => {
-  return Promise.all(targets.map(target => methodRejects(t, obj, methodName, target, args)));
+self.methodRejectsForAll = (t, obj, methodName, targets, args) => {
+  return Promise.all(targets.map(target => self.methodRejects(t, obj, methodName, target, args)));
 };
 
 self.getterThrows = (obj, getterName, target) => {
@@ -28,8 +28,8 @@ self.getterThrows = (obj, getterName, target) => {
 };
 
 self.getterThrowsForAll = (obj, getterName, targets) => {
-  targets.forEach(target => getterThrows(obj, getterName, target));
-}
+  targets.forEach(target => self.getterThrows(obj, getterName, target));
+};
 
 self.methodThrows = (obj, methodName, target, args) => {
   const method = obj[methodName];
@@ -39,8 +39,13 @@ self.methodThrows = (obj, methodName, target, args) => {
 };
 
 self.methodThrowsForAll = (obj, methodName, targets, args) => {
-  targets.forEach(target => methodThrows(obj, methodName, target, args));
-}
+  targets.forEach(target => self.methodThrows(obj, methodName, target, args));
+};
+
+self.constructorThrowsForAll = (constructor, firstArgs) => {
+  firstArgs.forEach(firstArg => assert_throws(new TypeError(), () => new constructor(firstArg),
+                                              'constructor should throw a TypeError'));
+};
 
 self.garbageCollect = () => {
   if (self.gc) {
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.dedicatedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.dedicatedworker.html
new file mode 100644
index 00000000000..36d10f505f9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.dedicatedworker.html
@@ -0,0 +1,11 @@
+
+
+backpressure.js dedicated worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.html b/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.html
new file mode 100644
index 00000000000..65f056f5805
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.html
@@ -0,0 +1,11 @@
+
+
+backpressure.js browser context wrapper file
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.js b/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.js
new file mode 100644
index 00000000000..7446b770901
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.js
@@ -0,0 +1,200 @@
+'use strict';
+
+if (self.importScripts) {
+  self.importScripts('/resources/testharness.js');
+  self.importScripts('../resources/recording-streams.js');
+  self.importScripts('../resources/test-utils.js');
+}
+
+const error1 = new Error('error1 message');
+error1.name = 'error1';
+
+promise_test(() => {
+  const ts = recordingTransformStream();
+  const writer = ts.writable.getWriter();
+  // This call never resolves.
+  writer.write('a');
+  return flushAsyncEvents().then(() => {
+    assert_array_equals(ts.events, [], 'transform should not be called');
+  });
+}, 'backpressure allows no transforms with a default identity transform and no reader');
+
+promise_test(() => {
+  const ts = recordingTransformStream({}, undefined, { highWaterMark: 1 });
+  const writer = ts.writable.getWriter();
+  // This call to write() resolves asynchronously.
+  writer.write('a');
+  // This call to write() waits for backpressure that is never relieved and never calls transform().
+  writer.write('b');
+  return flushAsyncEvents().then(() => {
+    assert_array_equals(ts.events, ['transform', 'a'], 'transform should be called once');
+  });
+}, 'backpressure only allows one transform() with a identity transform with a readable HWM of 1 and no reader');
+
+promise_test(() => {
+  // Without a transform() implementation, recordingTransformStream() never enqueues anything.
+  const ts = recordingTransformStream({
+    transform() {
+      // Discard all chunks. As a result, the readable side is never full enough to exert backpressure and transform()
+      // keeps being called.
+    }
+  }, undefined, { highWaterMark: 1 });
+  const writer = ts.writable.getWriter();
+  const writePromises = [];
+  for (let i = 0; i < 4; ++i) {
+    writePromises.push(writer.write(i));
+  }
+  return Promise.all(writePromises).then(() => {
+    assert_array_equals(ts.events, ['transform', 0, 'transform', 1, 'transform', 2, 'transform', 3],
+                        'all 4 events should be transformed');
+  });
+}, 'transform() should keep being called as long as there is no backpressure');
+
+promise_test(() => {
+  const ts = new TransformStream({}, undefined, { highWaterMark: 1 });
+  const writer = ts.writable.getWriter();
+  const reader = ts.readable.getReader();
+  const events = [];
+  const writerPromises = [
+    writer.write('a').then(() => events.push('a')),
+    writer.write('b').then(() => events.push('b')),
+    writer.close().then(() => events.push('closed'))];
+  return delay(0).then(() => {
+    assert_array_equals(events, ['a'], 'the first write should have resolved');
+    return reader.read();
+  }).then(({ value, done }) => {
+    assert_false(done, 'done should not be true');
+    assert_equals('a', value, 'value should be "a"');
+    return delay(0);
+  }).then(() => {
+    assert_array_equals(events, ['a', 'b', 'closed'], 'both writes and close() should have resolved');
+    return reader.read();
+  }).then(({ value, done }) => {
+    assert_false(done, 'done should still not be true');
+    assert_equals('b', value, 'value should be "b"');
+    return reader.read();
+  }).then(({ done }) => {
+    assert_true(done, 'done should be true');
+    return writerPromises;
+  });
+}, 'writes should resolve as soon as transform completes');
+
+promise_test(() => {
+  const ts = new TransformStream(undefined, undefined, { highWaterMark: 0 });
+  const writer = ts.writable.getWriter();
+  const reader = ts.readable.getReader();
+  const readPromise = reader.read();
+  writer.write('a');
+  return readPromise.then(({ value, done }) => {
+    assert_false(done, 'not done');
+    assert_equals(value, 'a', 'value should be "a"');
+  });
+}, 'calling pull() before the first write() with backpressure should work');
+
+promise_test(() => {
+  let reader;
+  const ts = recordingTransformStream({
+    transform(chunk, controller) {
+      controller.enqueue(chunk);
+      return reader.read();
+    }
+  }, undefined, { highWaterMark: 1 });
+  const writer = ts.writable.getWriter();
+  reader = ts.readable.getReader();
+  return writer.write('a');
+}, 'transform() should be able to read the chunk it just enqueued');
+
+promise_test(() => {
+  let resolveTransform;
+  const transformPromise = new Promise(resolve => {
+    resolveTransform = resolve;
+  });
+  const ts = recordingTransformStream({
+    transform() {
+      return transformPromise;
+    }
+  }, undefined, new CountQueuingStrategy({ highWaterMark: Infinity }));
+  const writer = ts.writable.getWriter();
+  assert_equals(writer.desiredSize, 1, 'desiredSize should be 1');
+  return delay(0).then(() => {
+    writer.write('a');
+    assert_array_equals(ts.events, ['transform', 'a']);
+    assert_equals(writer.desiredSize, 0, 'desiredSize should be 0');
+    return flushAsyncEvents();
+  }).then(() => {
+    assert_equals(writer.desiredSize, 0, 'desiredSize should still be 0');
+    resolveTransform();
+    return delay(0);
+  }).then(() => {
+    assert_equals(writer.desiredSize, 1, 'desiredSize should be 1');
+  });
+}, 'blocking transform() should cause backpressure');
+
+promise_test(t => {
+  const ts = new TransformStream();
+  ts.readable.cancel(error1);
+  return promise_rejects(t, error1, ts.writable.getWriter().closed, 'closed should reject');
+}, 'writer.closed should resolve after readable is canceled during start');
+
+promise_test(t => {
+  const ts = new TransformStream({}, undefined, { highWaterMark: 0 });
+  return delay(0).then(() => {
+    ts.readable.cancel(error1);
+    return promise_rejects(t, error1, ts.writable.getWriter().closed, 'closed should reject');
+  });
+}, 'writer.closed should resolve after readable is canceled with backpressure');
+
+promise_test(t => {
+  const ts = new TransformStream({}, undefined, { highWaterMark: 1 });
+  return delay(0).then(() => {
+    ts.readable.cancel(error1);
+    return promise_rejects(t, error1, ts.writable.getWriter().closed, 'closed should reject');
+  });
+}, 'writer.closed should resolve after readable is canceled with no backpressure');
+
+promise_test(() => {
+  const ts = new TransformStream({}, undefined, { highWaterMark: 1 });
+  const writer = ts.writable.getWriter();
+  return delay(0).then(() => {
+    const writePromise = writer.write('a');
+    ts.readable.cancel(error1);
+    return writePromise;
+  });
+}, 'cancelling the readable should cause a pending write to resolve');
+
+promise_test(t => {
+  const rs = new ReadableStream();
+  const ts = new TransformStream();
+  const pipePromise = rs.pipeTo(ts.writable);
+  ts.readable.cancel(error1);
+  return promise_rejects(t, error1, pipePromise, 'promise returned from pipeTo() should be rejected');
+}, 'cancelling the readable side of a TransformStream should abort an empty pipe');
+
+promise_test(t => {
+  const rs = new ReadableStream();
+  const ts = new TransformStream();
+  const pipePromise = rs.pipeTo(ts.writable);
+  return delay(0).then(() => {
+    ts.readable.cancel(error1);
+    return promise_rejects(t, error1, pipePromise, 'promise returned from pipeTo() should be rejected');
+  });
+}, 'cancelling the readable side of a TransformStream should abort an empty pipe after startup');
+
+promise_test(t => {
+  const rs = new ReadableStream({
+    start(controller) {
+      controller.enqueue('a');
+      controller.enqueue('b');
+      controller.enqueue('c');
+    }
+  });
+  const ts = new TransformStream();
+  const pipePromise = rs.pipeTo(ts.writable);
+  // Allow data to flow into the pipe.
+  return delay(0).then(() => {
+    ts.readable.cancel(error1);
+    return promise_rejects(t, error1, pipePromise, 'promise returned from pipeTo() should be rejected');
+  });
+}, 'cancelling the readable side of a TransformStream should abort a full pipe');
+
+done();
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.serviceworker.https.html b/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.serviceworker.https.html
new file mode 100644
index 00000000000..493feaa69ff
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.serviceworker.https.html
@@ -0,0 +1,12 @@
+
+
+backpressure.js service worker wrapper file
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.sharedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.sharedworker.html
new file mode 100644
index 00000000000..0a16b99ee90
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/backpressure.sharedworker.html
@@ -0,0 +1,11 @@
+
+
+backpressure.js shared worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.dedicatedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.dedicatedworker.html
new file mode 100644
index 00000000000..bb3f11a90e2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.dedicatedworker.html
@@ -0,0 +1,11 @@
+
+
+brand-checks.js dedicated worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.html b/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.html
new file mode 100644
index 00000000000..98d2e281ffa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.html
@@ -0,0 +1,10 @@
+
+
+brand-checks.js browser context wrapper file
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.js b/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.js
new file mode 100644
index 00000000000..0dd0d91b318
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.js
@@ -0,0 +1,79 @@
+'use strict';
+
+if (self.importScripts) {
+  self.importScripts('/resources/testharness.js');
+  self.importScripts('../resources/test-utils.js');
+}
+
+const TransformStreamDefaultController = getTransformStreamDefaultControllerConstructor();
+
+function getTransformStreamDefaultControllerConstructor() {
+  return realTSDefaultController().constructor;
+}
+
+function fakeTS() {
+  return Object.setPrototypeOf({
+    get readable() { return new ReadableStream(); },
+    get writable() { return new WritableStream(); }
+  }, TransformStream.prototype);
+}
+
+function realTS() {
+  return new TransformStream();
+}
+
+function fakeTSDefaultController() {
+  return Object.setPrototypeOf({
+    get desiredSize() { return 1; },
+    enqueue() { },
+    close() { },
+    error() { }
+  }, TransformStreamDefaultController.prototype);
+}
+
+function realTSDefaultController() {
+  let controller;
+  new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  });
+  return controller;
+}
+
+test(() => {
+  getterThrowsForAll(TransformStream.prototype, 'readable',
+                     [fakeTS(), realTSDefaultController(), undefined, null]);
+}, 'TransformStream.prototype.readable enforces a brand check');
+
+test(() => {
+  getterThrowsForAll(TransformStream.prototype, 'writable',
+                     [fakeTS(), realTSDefaultController(), undefined, null]);
+}, 'TransformStream.prototype.writable enforces a brand check');
+
+test(() => {
+  constructorThrowsForAll(TransformStreamDefaultController,
+                          [fakeTS(), realTS(), realTSDefaultController(), undefined, null]);
+}, 'TransformStreamDefaultConstructor enforces a brand check and doesn\'t permit independent construction');
+
+test(() => {
+  getterThrowsForAll(TransformStreamDefaultController.prototype, 'desiredSize',
+                     [fakeTSDefaultController(), realTS(), undefined, null]);
+}, 'TransformStreamDefaultController.prototype.desiredSize enforces a brand check');
+
+test(() => {
+  methodThrowsForAll(TransformStreamDefaultController.prototype, 'enqueue',
+                     [fakeTSDefaultController(), realTS(), undefined, null]);
+}, 'TransformStreamDefaultController.prototype.enqueue enforces a brand check');
+
+test(() => {
+  methodThrowsForAll(TransformStreamDefaultController.prototype, 'terminate',
+                     [fakeTSDefaultController(), realTS(), undefined, null]);
+}, 'TransformStreamDefaultController.prototype.terminate enforces a brand check');
+
+test(() => {
+  methodThrowsForAll(TransformStreamDefaultController.prototype, 'error',
+                     [fakeTSDefaultController(), realTS(), undefined, null]);
+}, 'TransformStreamDefaultController.prototype.error enforces a brand check');
+
+done();
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.serviceworker.https.html b/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.serviceworker.https.html
new file mode 100644
index 00000000000..2439cdb95e9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.serviceworker.https.html
@@ -0,0 +1,12 @@
+
+
+brand-checks.js service worker wrapper file
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.sharedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.sharedworker.html
new file mode 100644
index 00000000000..cff72eca463
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/brand-checks.sharedworker.html
@@ -0,0 +1,11 @@
+
+
+brand-checks.js shared worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/errors.dedicatedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/errors.dedicatedworker.html
new file mode 100644
index 00000000000..078591779a8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/errors.dedicatedworker.html
@@ -0,0 +1,11 @@
+
+
+errors.js dedicated worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/errors.html b/tests/wpt/web-platform-tests/streams/transform-streams/errors.html
new file mode 100644
index 00000000000..3a07b47e2cf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/errors.html
@@ -0,0 +1,10 @@
+
+
+errors.js browser context wrapper file
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/errors.js b/tests/wpt/web-platform-tests/streams/transform-streams/errors.js
new file mode 100644
index 00000000000..83f4984c5bb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/errors.js
@@ -0,0 +1,339 @@
+'use strict';
+
+if (self.importScripts) {
+  self.importScripts('/resources/testharness.js');
+  self.importScripts('../resources/test-utils.js');
+}
+
+const thrownError = new Error('bad things are happening!');
+thrownError.name = 'error1';
+
+promise_test(t => {
+  const ts = new TransformStream({
+    transform() {
+      throw thrownError;
+    }
+  });
+
+  const reader = ts.readable.getReader();
+
+  const writer = ts.writable.getWriter();
+
+  return Promise.all([
+    promise_rejects(t, thrownError, writer.write('a'),
+                    'writable\'s write should reject with the thrown error'),
+    promise_rejects(t, thrownError, reader.read(),
+                    'readable\'s read should reject with the thrown error'),
+    promise_rejects(t, thrownError, reader.closed,
+                    'readable\'s closed should be rejected with the thrown error'),
+    promise_rejects(t, thrownError, writer.closed,
+                    'writable\'s closed should be rejected with the thrown error')
+  ]);
+}, 'TransformStream errors thrown in transform put the writable and readable in an errored state');
+
+promise_test(t => {
+  const ts = new TransformStream({
+    transform() {
+    },
+    flush() {
+      throw thrownError;
+    }
+  });
+
+  const reader = ts.readable.getReader();
+
+  const writer = ts.writable.getWriter();
+
+  return Promise.all([
+    writer.write('a'),
+    promise_rejects(t, thrownError, writer.close(),
+                    'writable\'s close should reject with the thrown error'),
+    promise_rejects(t, thrownError, reader.read(),
+                    'readable\'s read should reject with the thrown error'),
+    promise_rejects(t, thrownError, reader.closed,
+                    'readable\'s closed should be rejected with the thrown error'),
+    promise_rejects(t, thrownError, writer.closed,
+                    'writable\'s closed should be rejected with the thrown error')
+  ]);
+}, 'TransformStream errors thrown in flush put the writable and readable in an errored state');
+
+test(() => {
+  new TransformStream({
+    start(c) {
+      c.enqueue('a');
+      c.error(new Error('generic error'));
+      assert_throws(new TypeError(), () => c.enqueue('b'), 'enqueue() should throw');
+    }
+  });
+}, 'errored TransformStream should not enqueue new chunks');
+
+promise_test(t => {
+  const ts = new TransformStream({
+    start() {
+      return flushAsyncEvents().then(() => {
+        throw thrownError;
+      });
+    },
+    transform: t.unreached_func('transform should not be called'),
+    flush: t.unreached_func('flush should not be called')
+  });
+
+  const writer = ts.writable.getWriter();
+  const reader = ts.readable.getReader();
+  return Promise.all([
+    promise_rejects(t, thrownError, writer.write('a'), 'writer should reject with thrownError'),
+    promise_rejects(t, thrownError, writer.close(), 'close() should reject with thrownError'),
+    promise_rejects(t, thrownError, reader.read(), 'reader should reject with thrownError')
+  ]);
+}, 'TransformStream transformer.start() rejected promise should error the stream');
+
+promise_test(t => {
+  const controllerError = new Error('start failure');
+  controllerError.name = 'controllerError';
+  const ts = new TransformStream({
+    start(c) {
+      return flushAsyncEvents()
+        .then(() => {
+          c.error(controllerError);
+          throw new Error('ignored error');
+        });
+    },
+    transform: t.unreached_func('transform should never be called if start() fails'),
+    flush: t.unreached_func('flush should never be called if start() fails')
+  });
+
+  const writer = ts.writable.getWriter();
+  const reader = ts.readable.getReader();
+  return Promise.all([
+    promise_rejects(t, controllerError, writer.write('a'), 'writer should reject with controllerError'),
+    promise_rejects(t, controllerError, writer.close(), 'close should reject with same error'),
+    promise_rejects(t, controllerError, reader.read(), 'reader should reject with same error')
+  ]);
+}, 'when controller.error is followed by a rejection, the error reason should come from controller.error');
+
+test(() => {
+  assert_throws(new URIError(), () => new TransformStream({
+    start() { throw new URIError('start thrown error'); },
+    transform() {}
+  }), 'constructor should throw');
+}, 'TransformStream constructor should throw when start does');
+
+test(() => {
+  const strategy = {
+    size() { throw new URIError('size thrown error'); }
+  };
+
+  assert_throws(new URIError(), () => new TransformStream({
+    start(c) {
+      c.enqueue('a');
+    },
+    transform() {}
+  }, undefined, strategy), 'constructor should throw the same error strategy.size throws');
+}, 'when strategy.size throws inside start(), the constructor should throw the same error');
+
+test(() => {
+  const controllerError = new URIError('controller.error');
+
+  let controller;
+  const strategy = {
+    size() {
+      controller.error(controllerError);
+      throw new Error('redundant error');
+    }
+  };
+
+  assert_throws(new URIError(), () => new TransformStream({
+    start(c) {
+      controller = c;
+      c.enqueue('a');
+    },
+    transform() {}
+  }, undefined, strategy), 'the first error should be thrown');
+}, 'when strategy.size calls controller.error() then throws, the constructor should throw the first error');
+
+promise_test(t => {
+  const ts = new TransformStream();
+  const writer = ts.writable.getWriter();
+  const closedPromise = writer.closed;
+  return Promise.all([
+    ts.readable.cancel(thrownError),
+    promise_rejects(t, thrownError, closedPromise, 'closed should throw a TypeError')
+  ]);
+}, 'cancelling the readable side should error the writable');
+
+promise_test(t => {
+  let controller;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  });
+  const writer = ts.writable.getWriter();
+  const reader = ts.readable.getReader();
+  const writePromise = writer.write('a');
+  const closePromise = writer.close();
+  controller.error(thrownError);
+  return Promise.all([
+    promise_rejects(t, thrownError, reader.closed, 'reader.closed should reject'),
+    promise_rejects(t, thrownError, writePromise, 'writePromise should reject'),
+    promise_rejects(t, thrownError, closePromise, 'closePromise should reject')]);
+}, 'it should be possible to error the readable between close requested and complete');
+
+promise_test(t => {
+  const ts = new TransformStream({
+    transform(chunk, controller) {
+      controller.enqueue(chunk);
+      controller.terminate();
+      throw thrownError;
+    }
+  }, undefined, { highWaterMark: 1 });
+  const writePromise = ts.writable.getWriter().write('a');
+  const closedPromise = ts.readable.getReader().closed;
+  return Promise.all([
+    promise_rejects(t, thrownError, writePromise, 'write() should reject'),
+    promise_rejects(t, thrownError, closedPromise, 'reader.closed should reject')
+  ]);
+}, 'an exception from transform() should error the stream if terminate has been requested but not completed');
+
+promise_test(t => {
+  const ts = new TransformStream();
+  const writer = ts.writable.getWriter();
+  // The microtask following transformer.start() hasn't completed yet, so the abort is queued and not notified to the
+  // TransformStream yet.
+  const abortPromise = writer.abort(thrownError);
+  const cancelPromise = ts.readable.cancel(new Error('cancel reason'));
+  return Promise.all([
+    abortPromise,
+    cancelPromise,
+    promise_rejects(t, new TypeError(), writer.closed, 'writer.closed should reject with a TypeError')]);
+}, 'abort should set the close reason for the writable when it happens before cancel during start, but cancel should ' +
+             'still succeed');
+
+promise_test(t => {
+  let resolveTransform;
+  const transformPromise = new Promise(resolve => {
+    resolveTransform = resolve;
+  });
+  const ts = new TransformStream({
+    transform() {
+      return transformPromise;
+    }
+  }, undefined, { highWaterMark: 2 });
+  const writer = ts.writable.getWriter();
+  return delay(0).then(() => {
+    const writePromise = writer.write();
+    const abortPromise = writer.abort(thrownError);
+    const cancelPromise = ts.readable.cancel(new Error('cancel reason'));
+    resolveTransform();
+    return Promise.all([
+      writePromise,
+      abortPromise,
+      cancelPromise,
+      promise_rejects(t, new TypeError(), writer.closed, 'writer.closed should reject with a TypeError')]);
+  });
+}, 'abort should set the close reason for the writable when it happens before cancel during underlying sink write, ' +
+             'but cancel should still succeed');
+
+const ignoredError = new Error('ignoredError');
+ignoredError.name = 'ignoredError';
+
+promise_test(t => {
+  const ts = new TransformStream({
+    start(controller) {
+      controller.error(thrownError);
+      controller.error(ignoredError);
+    }
+  });
+  return promise_rejects(t, thrownError, ts.writable.abort(), 'abort() should reject with thrownError');
+}, 'controller.error() should do nothing the second time it is called');
+
+promise_test(t => {
+  let controller;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  });
+  const cancelPromise = ts.readable.cancel(thrownError);
+  controller.error(ignoredError);
+  return Promise.all([
+    cancelPromise,
+    promise_rejects(t, thrownError, ts.writable.getWriter().closed, 'closed should reject with thrownError')
+  ]);
+}, 'controller.error() should do nothing after readable.cancel()');
+
+promise_test(t => {
+  let controller;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  });
+  return ts.writable.abort().then(() => {
+    controller.error(ignoredError);
+    return promise_rejects(t, new TypeError(), ts.writable.getWriter().closed, 'closed should reject with a TypeError');
+  });
+}, 'controller.error() should do nothing after writable.abort() has completed');
+
+promise_test(t => {
+  let controller;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    },
+    transform() {
+      throw thrownError;
+    }
+  }, undefined, { highWaterMark: Infinity });
+  const writer = ts.writable.getWriter();
+  return promise_rejects(t, thrownError, writer.write(), 'write() should reject').then(() => {
+    controller.error();
+    return promise_rejects(t, thrownError, writer.closed, 'closed should reject with thrownError');
+  });
+}, 'controller.error() should do nothing after a transformer method has thrown an exception');
+
+promise_test(t => {
+  let controller;
+  let calls = 0;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    },
+    transform() {
+      ++calls;
+    }
+  }, undefined, { highWaterMark: 1 });
+  return delay(0).then(() => {
+    // Create backpressure.
+    controller.enqueue('a');
+    const writer = ts.writable.getWriter();
+    // transform() will not be called until backpressure is relieved.
+    const writePromise = writer.write('b');
+    assert_equals(calls, 0, 'transform() should not have been called');
+    controller.error(thrownError);
+    // Now backpressure has been relieved and the write can proceed.
+    return promise_rejects(t, thrownError, writePromise, 'write() should reject').then(() => {
+      assert_equals(calls, 0, 'transform() should not be called');
+    });
+  });
+}, 'erroring during write with backpressure should result in the write failing');
+
+promise_test(t => {
+  const ts = new TransformStream({}, undefined, { highWaterMark: 0 });
+  return delay(0).then(() => {
+    const writer = ts.writable.getWriter();
+    // write should start synchronously
+    const writePromise = writer.write(0);
+    // The underlying sink's abort() is not called until the write() completes.
+    const abortPromise = writer.abort();
+    // Perform a read to relieve backpressure and permit the write() to complete.
+    const readPromise = ts.readable.getReader().read();
+    return Promise.all([
+      promise_rejects(t, new TypeError(), readPromise, 'read() should reject'),
+      promise_rejects(t, new TypeError(), writePromise, 'write() should reject'),
+      abortPromise
+    ]);
+  });
+}, 'a write() that was waiting for backpressure should reject if the writable is aborted');
+
+done();
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/errors.serviceworker.https.html b/tests/wpt/web-platform-tests/streams/transform-streams/errors.serviceworker.https.html
new file mode 100644
index 00000000000..85707ebb8ce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/errors.serviceworker.https.html
@@ -0,0 +1,12 @@
+
+
+errors.js service worker wrapper file
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/errors.sharedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/errors.sharedworker.html
new file mode 100644
index 00000000000..011d843ffa2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/errors.sharedworker.html
@@ -0,0 +1,11 @@
+
+
+errors.js shared worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/flush.dedicatedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/flush.dedicatedworker.html
new file mode 100644
index 00000000000..4633c1e3180
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/flush.dedicatedworker.html
@@ -0,0 +1,11 @@
+
+
+flush.js dedicated worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/flush.html b/tests/wpt/web-platform-tests/streams/transform-streams/flush.html
new file mode 100644
index 00000000000..af437b44e03
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/flush.html
@@ -0,0 +1,10 @@
+
+
+flush.js browser context wrapper file
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/flush.js b/tests/wpt/web-platform-tests/streams/transform-streams/flush.js
new file mode 100644
index 00000000000..1e9909a7041
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/flush.js
@@ -0,0 +1,136 @@
+'use strict';
+
+if (self.importScripts) {
+  self.importScripts('../resources/test-utils.js');
+  self.importScripts('/resources/testharness.js');
+}
+
+promise_test(() => {
+  let flushCalled = false;
+  const ts = new TransformStream({
+    transform() { },
+    flush() {
+      flushCalled = true;
+    }
+  });
+
+  return ts.writable.getWriter().close().then(() => {
+    return assert_true(flushCalled, 'closing the writable triggers the transform flush immediately');
+  });
+}, 'TransformStream flush is called immediately when the writable is closed, if no writes are queued');
+
+promise_test(() => {
+  let flushCalled = false;
+  let resolveTransform;
+  const ts = new TransformStream({
+    transform() {
+      return new Promise(resolve => {
+        resolveTransform = resolve;
+      });
+    },
+    flush() {
+      flushCalled = true;
+      return new Promise(() => {}); // never resolves
+    }
+  }, undefined, { highWaterMark: 1 });
+
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+  writer.close();
+  assert_false(flushCalled, 'closing the writable does not immediately call flush if writes are not finished');
+
+  let rsClosed = false;
+  ts.readable.getReader().closed.then(() => {
+    rsClosed = true;
+  });
+
+  return delay(0).then(() => {
+    assert_false(flushCalled, 'closing the writable does not asynchronously call flush if writes are not finished');
+    resolveTransform();
+    return delay(0);
+  }).then(() => {
+    assert_true(flushCalled, 'flush is eventually called');
+    assert_false(rsClosed, 'if flushPromise does not resolve, the readable does not become closed');
+  });
+}, 'TransformStream flush is called after all queued writes finish, once the writable is closed');
+
+promise_test(() => {
+  let c;
+  const ts = new TransformStream({
+    start(controller) {
+      c = controller;
+    },
+    transform() {
+    },
+    flush() {
+      c.enqueue('x');
+      c.enqueue('y');
+    }
+  });
+
+  const reader = ts.readable.getReader();
+
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+  writer.close();
+  return reader.read().then(result1 => {
+    assert_equals(result1.value, 'x', 'the first chunk read is the first one enqueued in flush');
+    assert_equals(result1.done, false, 'the first chunk read is the first one enqueued in flush');
+
+    return reader.read().then(result2 => {
+      assert_equals(result2.value, 'y', 'the second chunk read is the second one enqueued in flush');
+      assert_equals(result2.done, false, 'the second chunk read is the second one enqueued in flush');
+    });
+  });
+}, 'TransformStream flush gets a chance to enqueue more into the readable');
+
+promise_test(() => {
+  let c;
+  const ts = new TransformStream({
+    start(controller) {
+      c = controller;
+    },
+    transform() {
+    },
+    flush() {
+      c.enqueue('x');
+      c.enqueue('y');
+      return delay(0);
+    }
+  });
+
+  const reader = ts.readable.getReader();
+
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+  writer.close();
+
+  return Promise.all([
+    reader.read().then(result1 => {
+      assert_equals(result1.value, 'x', 'the first chunk read is the first one enqueued in flush');
+      assert_equals(result1.done, false, 'the first chunk read is the first one enqueued in flush');
+
+      return reader.read().then(result2 => {
+        assert_equals(result2.value, 'y', 'the second chunk read is the second one enqueued in flush');
+        assert_equals(result2.done, false, 'the second chunk read is the second one enqueued in flush');
+      });
+    }),
+    reader.closed.then(() => {
+      assert_true(true, 'readable reader becomes closed');
+    })
+  ]);
+}, 'TransformStream flush gets a chance to enqueue more into the readable, and can then async close');
+
+const error1 = new Error('error1');
+error1.name = 'error1';
+
+promise_test(t => {
+  const ts = new TransformStream({
+    flush(controller) {
+      controller.error(error1);
+    }
+  });
+  return promise_rejects(t, error1, ts.writable.getWriter().close(), 'close() should reject');
+}, 'error() during flush should cause writer.close() to reject');
+
+done();
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/flush.serviceworker.https.html b/tests/wpt/web-platform-tests/streams/transform-streams/flush.serviceworker.https.html
new file mode 100644
index 00000000000..37d067a5084
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/flush.serviceworker.https.html
@@ -0,0 +1,12 @@
+
+
+flush.js service worker wrapper file
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/flush.sharedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/flush.sharedworker.html
new file mode 100644
index 00000000000..d57bb81b358
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/flush.sharedworker.html
@@ -0,0 +1,11 @@
+
+
+flush.js shared worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/general.dedicatedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/general.dedicatedworker.html
new file mode 100644
index 00000000000..86e480139e8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/general.dedicatedworker.html
@@ -0,0 +1,11 @@
+
+
+general.js dedicated worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/general.html b/tests/wpt/web-platform-tests/streams/transform-streams/general.html
new file mode 100644
index 00000000000..975cd009fd1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/general.html
@@ -0,0 +1,11 @@
+
+
+general.js browser context wrapper file
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/general.js b/tests/wpt/web-platform-tests/streams/transform-streams/general.js
new file mode 100644
index 00000000000..02614c495c2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/general.js
@@ -0,0 +1,444 @@
+'use strict';
+
+if (self.importScripts) {
+  self.importScripts('/resources/testharness.js');
+  self.importScripts('../resources/test-utils.js');
+  self.importScripts('../resources/rs-utils.js');
+}
+
+test(() => {
+  new TransformStream({ transform() { } });
+}, 'TransformStream can be constructed with a transform function');
+
+test(() => {
+  new TransformStream();
+  new TransformStream({});
+}, 'TransformStream can be constructed with no transform function');
+
+test(() => {
+  const ts = new TransformStream({ transform() { } });
+  const proto = Object.getPrototypeOf(ts);
+
+  const writableStream = Object.getOwnPropertyDescriptor(proto, 'writable');
+  assert_true(writableStream !== undefined, 'it has a writable property');
+  assert_false(writableStream.enumerable, 'writable should be non-enumerable');
+  assert_equals(typeof writableStream.get, 'function', 'writable should have a getter');
+  assert_equals(writableStream.set, undefined, 'writable should not have a setter');
+  assert_true(writableStream.configurable, 'writable should be configurable');
+  assert_true(ts.writable instanceof WritableStream, 'writable is an instance of WritableStream');
+  assert_not_equals(WritableStream.prototype.getWriter.call(ts.writable), undefined,
+                    'writable should pass WritableStream brand check');
+
+  const readableStream = Object.getOwnPropertyDescriptor(proto, 'readable');
+  assert_true(readableStream !== undefined, 'it has a readable property');
+  assert_false(readableStream.enumerable, 'readable should be non-enumerable');
+  assert_equals(typeof readableStream.get, 'function', 'readable should have a getter');
+  assert_equals(readableStream.set, undefined, 'readable should not have a setter');
+  assert_true(readableStream.configurable, 'readable should be configurable');
+  assert_true(ts.readable instanceof ReadableStream, 'readable is an instance of ReadableStream');
+  assert_not_equals(ReadableStream.prototype.getReader.call(ts.readable), undefined,
+                    'readable should pass ReadableStream brand check');
+}, 'TransformStream instances must have writable and readable properties of the correct types');
+
+test(() => {
+  const ts = new TransformStream({ transform() { } });
+
+  const writer = ts.writable.getWriter();
+  assert_equals(writer.desiredSize, 1, 'writer.desiredSize should be 1');
+}, 'TransformStream writable starts in the writable state');
+
+
+promise_test(() => {
+  const ts = new TransformStream();
+
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+  assert_equals(writer.desiredSize, 0, 'writer.desiredSize should be 0 after write()');
+
+  return ts.readable.getReader().read().then(result => {
+    assert_equals(result.value, 'a',
+      'result from reading the readable is the same as was written to writable');
+    assert_false(result.done, 'stream should not be done');
+
+    return delay(0).then(() => assert_equals(writer.desiredSize, 1, 'desiredSize should be 1 again'));
+  });
+}, 'Identity TransformStream: can read from readable what is put into writable');
+
+promise_test(() => {
+  let c;
+  const ts = new TransformStream({
+    start(controller) {
+      c = controller;
+    },
+    transform(chunk) {
+      c.enqueue(chunk.toUpperCase());
+    }
+  });
+
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+
+  return ts.readable.getReader().read().then(result => {
+    assert_equals(result.value, 'A',
+      'result from reading the readable is the transformation of what was written to writable');
+    assert_false(result.done, 'stream should not be done');
+  });
+}, 'Uppercaser sync TransformStream: can read from readable transformed version of what is put into writable');
+
+promise_test(() => {
+  let c;
+  const ts = new TransformStream({
+    start(controller) {
+      c = controller;
+    },
+    transform(chunk) {
+      c.enqueue(chunk.toUpperCase());
+      c.enqueue(chunk.toUpperCase());
+    }
+  });
+
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+
+  const reader = ts.readable.getReader();
+
+  return reader.read().then(result1 => {
+    assert_equals(result1.value, 'A',
+      'the first chunk read is the transformation of the single chunk written');
+    assert_false(result1.done, 'stream should not be done');
+
+    return reader.read().then(result2 => {
+      assert_equals(result2.value, 'A',
+        'the second chunk read is also the transformation of the single chunk written');
+      assert_false(result2.done, 'stream should not be done');
+    });
+  });
+}, 'Uppercaser-doubler sync TransformStream: can read both chunks put into the readable');
+
+promise_test(() => {
+  let c;
+  const ts = new TransformStream({
+    start(controller) {
+      c = controller;
+    },
+    transform(chunk) {
+      return delay(0).then(() => c.enqueue(chunk.toUpperCase()));
+    }
+  });
+
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+
+  return ts.readable.getReader().read().then(result => {
+    assert_equals(result.value, 'A',
+      'result from reading the readable is the transformation of what was written to writable');
+    assert_false(result.done, 'stream should not be done');
+  });
+}, 'Uppercaser async TransformStream: can read from readable transformed version of what is put into writable');
+
+promise_test(() => {
+  let doSecondEnqueue;
+  let returnFromTransform;
+  const ts = new TransformStream({
+    transform(chunk, controller) {
+      delay(0).then(() => controller.enqueue(chunk.toUpperCase()));
+      doSecondEnqueue = () => controller.enqueue(chunk.toUpperCase());
+      return new Promise(resolve => {
+        returnFromTransform = resolve;
+      });
+    }
+  });
+
+  const reader = ts.readable.getReader();
+
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+
+  return reader.read().then(result1 => {
+    assert_equals(result1.value, 'A',
+      'the first chunk read is the transformation of the single chunk written');
+    assert_false(result1.done, 'stream should not be done');
+    doSecondEnqueue();
+
+    return reader.read().then(result2 => {
+      assert_equals(result2.value, 'A',
+        'the second chunk read is also the transformation of the single chunk written');
+      assert_false(result2.done, 'stream should not be done');
+      returnFromTransform();
+    });
+  });
+}, 'Uppercaser-doubler async TransformStream: can read both chunks put into the readable');
+
+promise_test(() => {
+  const ts = new TransformStream({ transform() { } });
+
+  const writer = ts.writable.getWriter();
+  writer.close();
+
+  return Promise.all([writer.closed, ts.readable.getReader().closed]);
+}, 'TransformStream: by default, closing the writable closes the readable (when there are no queued writes)');
+
+promise_test(() => {
+  let transformResolve;
+  const transformPromise = new Promise(resolve => {
+    transformResolve = resolve;
+  });
+  const ts = new TransformStream({
+    transform() {
+      return transformPromise;
+    }
+  }, undefined, { highWaterMark: 1 });
+
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+  writer.close();
+
+  let rsClosed = false;
+  ts.readable.getReader().closed.then(() => {
+    rsClosed = true;
+  });
+
+  return delay(0).then(() => {
+    assert_equals(rsClosed, false, 'readable is not closed after a tick');
+    transformResolve();
+
+    return writer.closed.then(() => {
+      // TODO: Is this expectation correct?
+      assert_equals(rsClosed, true, 'readable is closed at that point');
+    });
+  });
+}, 'TransformStream: by default, closing the writable waits for transforms to finish before closing both');
+
+promise_test(() => {
+  let c;
+  const ts = new TransformStream({
+    start(controller) {
+      c = controller;
+    },
+    transform() {
+      c.enqueue('x');
+      c.enqueue('y');
+      return delay(0);
+    }
+  });
+
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+  writer.close();
+
+  const readableChunks = readableStreamToArray(ts.readable);
+
+  return writer.closed.then(() => {
+    return readableChunks.then(chunks => {
+      assert_array_equals(chunks, ['x', 'y'], 'both enqueued chunks can be read from the readable');
+    });
+  });
+}, 'TransformStream: by default, closing the writable closes the readable after sync enqueues and async done');
+
+promise_test(() => {
+  let c;
+  const ts = new TransformStream({
+    start(controller) {
+      c = controller;
+    },
+    transform() {
+      return delay(0)
+          .then(() => c.enqueue('x'))
+          .then(() => c.enqueue('y'))
+          .then(() => delay(0));
+    }
+  });
+
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+  writer.close();
+
+  const readableChunks = readableStreamToArray(ts.readable);
+
+  return writer.closed.then(() => {
+    return readableChunks.then(chunks => {
+      assert_array_equals(chunks, ['x', 'y'], 'both enqueued chunks can be read from the readable');
+    });
+  });
+}, 'TransformStream: by default, closing the writable closes the readable after async enqueues and async done');
+
+promise_test(() => {
+  let c;
+  const ts = new TransformStream({
+    suffix: '-suffix',
+
+    start(controller) {
+      c = controller;
+      c.enqueue('start' + this.suffix);
+    },
+
+    transform(chunk) {
+      c.enqueue(chunk + this.suffix);
+    },
+
+    flush() {
+      c.enqueue('flushed' + this.suffix);
+    }
+  });
+
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+  writer.close();
+
+  const readableChunks = readableStreamToArray(ts.readable);
+
+  return writer.closed.then(() => {
+    return readableChunks.then(chunks => {
+      assert_array_equals(chunks, ['start-suffix', 'a-suffix', 'flushed-suffix'], 'all enqueued chunks have suffixes');
+    });
+  });
+}, 'Transform stream should call transformer methods as methods');
+
+promise_test(() => {
+  function functionWithOverloads() {}
+  functionWithOverloads.apply = () => assert_unreached('apply() should not be called');
+  functionWithOverloads.call = () => assert_unreached('call() should not be called');
+  const ts = new TransformStream({
+    start: functionWithOverloads,
+    transform: functionWithOverloads,
+    flush: functionWithOverloads
+  });
+  const writer = ts.writable.getWriter();
+  writer.write('a');
+  writer.close();
+
+  return readableStreamToArray(ts.readable);
+}, 'methods should not not have .apply() or .call() called');
+
+promise_test(t => {
+  let startCalled = false;
+  let startDone = false;
+  let transformDone = false;
+  let flushDone = false;
+  const ts = new TransformStream({
+    start() {
+      startCalled = true;
+      return flushAsyncEvents().then(() => {
+        startDone = true;
+      });
+    },
+    transform() {
+      return t.step(() => {
+        assert_true(startDone, 'transform() should not be called until the promise returned from start() has resolved');
+        return flushAsyncEvents().then(() => {
+          transformDone = true;
+        });
+      });
+    },
+    flush() {
+      return t.step(() => {
+        assert_true(transformDone,
+                    'flush() should not be called until the promise returned from transform() has resolved');
+        return flushAsyncEvents().then(() => {
+          flushDone = true;
+        });
+      });
+    }
+  }, undefined, { highWaterMark: 1 });
+
+  assert_true(startCalled, 'start() should be called synchronously');
+
+  const writer = ts.writable.getWriter();
+  const writePromise = writer.write('a');
+  return writer.close().then(() => {
+    assert_true(flushDone, 'promise returned from flush() should have resolved');
+    return writePromise;
+  });
+}, 'TransformStream start, transform, and flush should be strictly ordered');
+
+promise_test(() => {
+  let transformCalled = false;
+  const ts = new TransformStream({
+    transform() {
+      transformCalled = true;
+    }
+  }, undefined, { highWaterMark: Infinity });
+  // transform() is only called synchronously when there is no backpressure and all microtasks have run.
+  return delay(0).then(() => {
+    const writePromise = ts.writable.getWriter().write();
+    assert_true(transformCalled, 'transform() should have been called');
+    return writePromise;
+  });
+}, 'it should be possible to call transform() synchronously');
+
+promise_test(() => {
+  const ts = new TransformStream({}, undefined, { highWaterMark: 0 });
+
+  const writer = ts.writable.getWriter();
+  writer.close();
+
+  return Promise.all([writer.closed, ts.readable.getReader().closed]);
+}, 'closing the writable should close the readable when there are no queued chunks, even with backpressure');
+
+test(() => {
+  new TransformStream({
+    start(controller) {
+      controller.terminate();
+      assert_throws(new TypeError(), () => controller.enqueue(), 'enqueue should throw');
+    }
+  });
+}, 'enqueue() should throw after controller.terminate()');
+
+promise_test(() => {
+  let controller;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  });
+  const cancelPromise = ts.readable.cancel();
+  assert_throws(new TypeError(), () => controller.enqueue(), 'enqueue should throw');
+  return cancelPromise;
+}, 'enqueue() should throw after readable.cancel()');
+
+test(() => {
+  new TransformStream({
+    start(controller) {
+      controller.terminate();
+      controller.terminate();
+    }
+  });
+}, 'controller.terminate() should do nothing the second time it is called');
+
+promise_test(t => {
+  let controller;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  });
+  const cancelReason = { name: 'cancelReason' };
+  const cancelPromise = ts.readable.cancel(cancelReason);
+  controller.terminate();
+  return Promise.all([
+    cancelPromise,
+    promise_rejects(t, cancelReason, ts.writable.getWriter().closed, 'closed should reject with cancelReason')
+  ]);
+}, 'terminate() should do nothing after readable.cancel()');
+
+promise_test(() => {
+  let calls = 0;
+  new TransformStream({
+    start() {
+      ++calls;
+    }
+  });
+  return flushAsyncEvents().then(() => {
+    assert_equals(calls, 1, 'start() should have been called exactly once');
+  });
+}, 'start() should not be called twice');
+
+test(() => {
+  assert_throws(new RangeError(), () => new TransformStream({ readableType: 'bytes' }), 'constructor should throw');
+}, 'specifying a defined readableType should throw');
+
+test(() => {
+  assert_throws(new RangeError(), () => new TransformStream({ writableType: 'bytes' }), 'constructor should throw');
+}, 'specifying a defined writableType should throw');
+
+done();
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/general.serviceworker.https.html b/tests/wpt/web-platform-tests/streams/transform-streams/general.serviceworker.https.html
new file mode 100644
index 00000000000..d1de7c342c0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/general.serviceworker.https.html
@@ -0,0 +1,12 @@
+
+
+general.js service worker wrapper file
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/general.sharedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/general.sharedworker.html
new file mode 100644
index 00000000000..dceea8ac8b9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/general.sharedworker.html
@@ -0,0 +1,11 @@
+
+
+general.js shared worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.dedicatedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.dedicatedworker.html
new file mode 100644
index 00000000000..6352938dc1b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.dedicatedworker.html
@@ -0,0 +1,11 @@
+
+
+lipfuzz.js dedicated worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.html b/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.html
new file mode 100644
index 00000000000..5003375f30f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.html
@@ -0,0 +1,10 @@
+
+
+lipfuzz.js browser context wrapper file
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.js b/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.js
new file mode 100644
index 00000000000..5c33e1549c4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.js
@@ -0,0 +1,168 @@
+'use strict';
+
+if (self.importScripts) {
+  self.importScripts('/resources/testharness.js');
+}
+
+class LipFuzzTransformer {
+  constructor(substitutions) {
+    this.substitutions = substitutions;
+    this.partialChunk = '';
+    this.lastIndex = undefined;
+  }
+
+  transform(chunk, controller) {
+    chunk = this.partialChunk + chunk;
+    this.partialChunk = '';
+    // lastIndex is the index of the first character after the last substitution.
+    this.lastIndex = 0;
+    chunk = chunk.replace(/\{\{([a-zA-Z0-9_-]+)\}\}/g, this.replaceTag.bind(this));
+    // Regular expression for an incomplete template at the end of a string.
+    const partialAtEndRegexp = /\{(\{([a-zA-Z0-9_-]+(\})?)?)?$/g;
+    // Avoid looking at any characters that have already been substituted.
+    partialAtEndRegexp.lastIndex = this.lastIndex;
+    this.lastIndex = undefined;
+    const match = partialAtEndRegexp.exec(chunk);
+    if (match) {
+      this.partialChunk = chunk.substring(match.index);
+      chunk = chunk.substring(0, match.index);
+    }
+    controller.enqueue(chunk);
+  }
+
+  flush(controller) {
+    if (this.partialChunk.length > 0) {
+      controller.enqueue(this.partialChunk);
+    }
+  }
+
+  replaceTag(match, p1, offset) {
+    let replacement = this.substitutions[p1];
+    if (replacement === undefined) {
+      replacement = '';
+    }
+    this.lastIndex = offset + replacement.length;
+    return replacement;
+  }
+}
+
+const substitutions = {
+  in1: 'out1',
+  in2: 'out2',
+  quine: '{{quine}}',
+  bogusPartial: '{{incompleteResult}'
+};
+
+const cases = [
+  {
+    input: [''],
+    output: ['']
+  },
+  {
+    input: [],
+    output: []
+  },
+  {
+    input: ['{{in1}}'],
+    output: ['out1']
+  },
+  {
+    input: ['z{{in1}}'],
+    output: ['zout1']
+  },
+  {
+    input: ['{{in1}}q'],
+    output: ['out1q']
+  },
+  {
+    input: ['{{in1}}{{in1}'],
+    output: ['out1', '{{in1}']
+  },
+  {
+    input: ['{{in1}}{{in1}', '}'],
+    output: ['out1', 'out1']
+  },
+  {
+    input: ['{{in1', '}}'],
+    output: ['', 'out1']
+  },
+  {
+    input: ['{{', 'in1}}'],
+    output: ['', 'out1']
+  },
+  {
+    input: ['{', '{in1}}'],
+    output: ['', 'out1']
+  },
+  {
+    input: ['{{', 'in1}'],
+    output: ['', '', '{{in1}']
+  },
+  {
+    input: ['{'],
+    output: ['', '{']
+  },
+  {
+    input: ['{', ''],
+    output: ['', '', '{']
+  },
+  {
+    input: ['{', '{', 'i', 'n', '1', '}', '}'],
+    output: ['', '', '', '', '', '', 'out1']
+  },
+  {
+    input: ['{{in1}}{{in2}}{{in1}}'],
+    output: ['out1out2out1']
+  },
+  {
+    input: ['{{wrong}}'],
+    output: ['']
+  },
+  {
+    input: ['{{wron', 'g}}'],
+    output: ['', '']
+  },
+  {
+    input: ['{{quine}}'],
+    output: ['{{quine}}']
+  },
+  {
+    input: ['{{bogusPartial}}'],
+    output: ['{{incompleteResult}']
+  },
+  {
+    input: ['{{bogusPartial}}}'],
+    output: ['{{incompleteResult}}']
+  }
+];
+
+for (const testCase of cases) {
+  const inputChunks = testCase.input;
+  const outputChunks = testCase.output;
+  promise_test(() => {
+    const lft = new TransformStream(new LipFuzzTransformer(substitutions));
+    const writer = lft.writable.getWriter();
+    const promises = [];
+    for (const inputChunk of inputChunks) {
+      promises.push(writer.write(inputChunk));
+    }
+    promises.push(writer.close());
+    const reader = lft.readable.getReader();
+    let readerChain = Promise.resolve();
+    for (const outputChunk of outputChunks) {
+      readerChain = readerChain.then(() => {
+        return reader.read().then(({ value, done }) => {
+          assert_false(done, `done should be false when reading ${outputChunk}`);
+          assert_equals(value, outputChunk, `value should match outputChunk`);
+        });
+      });
+    }
+    readerChain = readerChain.then(() => {
+      return reader.read().then(({ done }) => assert_true(done, `done should be true`));
+    });
+    promises.push(readerChain);
+    return Promise.all(promises);
+  }, `testing "${inputChunks}" (length ${inputChunks.length})`);
+}
+
+done();
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.serviceworker.https.html b/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.serviceworker.https.html
new file mode 100644
index 00000000000..8af3b5f6512
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.serviceworker.https.html
@@ -0,0 +1,12 @@
+
+
+lipfuzz.js service worker wrapper file
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.sharedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.sharedworker.html
new file mode 100644
index 00000000000..9536ed1c14c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/lipfuzz.sharedworker.html
@@ -0,0 +1,11 @@
+
+
+lipfuzz.js shared worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.dedicatedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.dedicatedworker.html
new file mode 100644
index 00000000000..327bc92f75d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.dedicatedworker.html
@@ -0,0 +1,11 @@
+
+
+patched-global.js dedicated worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.html b/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.html
new file mode 100644
index 00000000000..869e9109e02
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.html
@@ -0,0 +1,10 @@
+
+
+patched-global.js browser context wrapper file
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.js b/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.js
new file mode 100644
index 00000000000..d27b9cdd119
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.js
@@ -0,0 +1,53 @@
+'use strict';
+
+// Tests which patch the global environment are kept separate to avoid interfering with other tests.
+
+if (self.importScripts) {
+  self.importScripts('/resources/testharness.js');
+}
+
+// eslint-disable-next-line no-extend-native, accessor-pairs
+Object.defineProperty(Object.prototype, 'highWaterMark', {
+  set() { throw new Error('highWaterMark setter called'); }
+});
+
+// eslint-disable-next-line no-extend-native, accessor-pairs
+Object.defineProperty(Object.prototype, 'size', {
+  set() { throw new Error('size setter called'); }
+});
+
+test(() => {
+  assert_not_equals(new TransformStream(), null, 'constructor should work');
+}, 'TransformStream constructor should not call setters for highWaterMark or size');
+
+test(t => {
+  /* eslint-disable no-native-reassign */
+
+  const oldReadableStream = ReadableStream;
+  const oldWritableStream = WritableStream;
+  const getReader = ReadableStream.prototype.getReader;
+  const getWriter = WritableStream.prototype.getWriter;
+
+  // Replace ReadableStream and WritableStream with broken versions.
+  ReadableStream = function () {
+    throw new Error('Called the global ReadableStream constructor');
+  };
+  WritableStream = function () {
+    throw new Error('Called the global WritableStream constructor');
+  };
+  t.add_cleanup(() => {
+    ReadableStream = oldReadableStream;
+    WritableStream = oldWritableStream;
+  });
+
+  const ts = new TransformStream();
+
+  // Just to be sure, ensure the readable and writable pass brand checks.
+  assert_not_equals(getReader.call(ts.readable), undefined,
+                    'getReader should work when called on ts.readable');
+  assert_not_equals(getWriter.call(ts.writable), undefined,
+                    'getWriter should work when called on ts.writable');
+  /* eslint-enable no-native-reassign */
+}, 'TransformStream should use the original value of ReadableStream and WritableStream');
+
+done();
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.serviceworker.https.html b/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.serviceworker.https.html
new file mode 100644
index 00000000000..addb438ba6f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.serviceworker.https.html
@@ -0,0 +1,12 @@
+
+
+patched-global.js service worker wrapper file
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.sharedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.sharedworker.html
new file mode 100644
index 00000000000..6dba52fa67f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/patched-global.sharedworker.html
@@ -0,0 +1,11 @@
+
+
+patched-global.js shared worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.dedicatedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.dedicatedworker.html
new file mode 100644
index 00000000000..300dc851875
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.dedicatedworker.html
@@ -0,0 +1,11 @@
+
+
+reentrant-strategies.js dedicated worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.html b/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.html
new file mode 100644
index 00000000000..e2a6406bd46
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.html
@@ -0,0 +1,12 @@
+
+
+reentrant-strategies.js browser context wrapper file
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.js b/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.js
new file mode 100644
index 00000000000..436552b9475
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.js
@@ -0,0 +1,324 @@
+'use strict';
+
+// The size() function of readableStrategy can re-entrantly call back into the TransformStream implementation. This
+// makes it risky to cache state across the call to ReadableStreamDefaultControllerEnqueue. These tests attempt to catch
+// such errors. They are separated from the other strategy tests because no real user code should ever do anything like
+// this.
+//
+// There is no such issue with writableStrategy size() because it is never called from within TransformStream
+// algorithms.
+
+if (self.importScripts) {
+  self.importScripts('/resources/testharness.js');
+  self.importScripts('../resources/recording-streams.js');
+  self.importScripts('../resources/rs-utils.js');
+  self.importScripts('../resources/test-utils.js');
+}
+
+const error1 = new Error('error1');
+error1.name = 'error1';
+
+promise_test(() => {
+  let controller;
+  let calls = 0;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  }, undefined, {
+    size() {
+      ++calls;
+      if (calls < 2) {
+        controller.enqueue('b');
+      }
+      return 1;
+    },
+    highWaterMark: Infinity
+  });
+  const writer = ts.writable.getWriter();
+  return Promise.all([writer.write('a'), writer.close()])
+      .then(() => readableStreamToArray(ts.readable))
+      .then(array => assert_array_equals(array, ['b', 'a'], 'array should contain two chunks'));
+}, 'enqueue() inside size() should work');
+
+promise_test(() => {
+  let controller;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  }, undefined, {
+    size() {
+      // The readable queue is empty.
+      controller.terminate();
+      // The readable state has gone from "readable" to "closed".
+      return 1;
+      // This chunk will be enqueued, but will be impossible to read because the state is already "closed".
+    },
+    highWaterMark: Infinity
+  });
+  const writer = ts.writable.getWriter();
+  return writer.write('a')
+      .then(() => readableStreamToArray(ts.readable))
+      .then(array => assert_array_equals(array, [], 'array should contain no chunks'));
+  // The chunk 'a' is still in readable's queue. readable is closed so 'a' cannot be read. writable's queue is empty and
+  // it is still writable.
+}, 'terminate() inside size() should work');
+
+promise_test(t => {
+  let controller;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  }, undefined, {
+    size() {
+      controller.error(error1);
+      return 1;
+    },
+    highWaterMark: Infinity
+  });
+  const writer = ts.writable.getWriter();
+  return writer.write('a')
+      .then(() => promise_rejects(t, error1, ts.readable.getReader().read(), 'read() should reject'));
+}, 'error() inside size() should work');
+
+promise_test(() => {
+  let controller;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  }, undefined, {
+    size() {
+      assert_equals(controller.desiredSize, 1, 'desiredSize should be 1');
+      return 1;
+    },
+    highWaterMark: 1
+  });
+  const writer = ts.writable.getWriter();
+  return Promise.all([writer.write('a'), writer.close()])
+      .then(() => readableStreamToArray(ts.readable))
+      .then(array => assert_array_equals(array, ['a'], 'array should contain one chunk'));
+}, 'desiredSize inside size() should work');
+
+promise_test(t => {
+  let cancelPromise;
+  const ts = new TransformStream({}, undefined, {
+    size() {
+      cancelPromise = ts.readable.cancel(error1);
+      return 1;
+    },
+    highWaterMark: Infinity
+  });
+  const writer = ts.writable.getWriter();
+  return writer.write('a')
+      .then(() => {
+        promise_rejects(t, error1, writer.closed, 'writer.closed should reject');
+        return cancelPromise;
+      });
+}, 'readable cancel() inside size() should work');
+
+promise_test(() => {
+  let controller;
+  let pipeToPromise;
+  const ws = recordingWritableStream();
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  }, undefined, {
+    size() {
+      if (!pipeToPromise) {
+        pipeToPromise = ts.readable.pipeTo(ws);
+      }
+      return 1;
+    },
+    highWaterMark: 1
+  });
+  // Allow promise returned by start() to resolve so that enqueue() will happen synchronously.
+  return delay(0).then(() => {
+    controller.enqueue('a');
+    assert_not_equals(pipeToPromise, undefined);
+
+    // Some pipeTo() implementations need an additional chunk enqueued in order for the first one to be processed. See
+    // https://github.com/whatwg/streams/issues/794 for background.
+    controller.enqueue('a');
+
+    // Give pipeTo() a chance to process the queued chunks.
+    return delay(0);
+  }).then(() => {
+    assert_array_equals(ws.events, ['write', 'a', 'write', 'a'], 'ws should contain two chunks');
+    controller.terminate();
+    return pipeToPromise;
+  }).then(() => {
+    assert_array_equals(ws.events, ['write', 'a', 'write', 'a', 'close'], 'target should have been closed');
+  });
+}, 'pipeTo() inside size() should work');
+
+promise_test(() => {
+  let controller;
+  let readPromise;
+  let calls = 0;
+  let reader;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  }, undefined, {
+    size() {
+      // This is triggered by controller.enqueue(). The queue is empty and there are no pending reads. pull() is called
+      // synchronously, allowing transform() to proceed asynchronously. This results in a second call to enqueue(),
+      // which resolves this pending read() without calling size() again.
+      readPromise = reader.read();
+      ++calls;
+      return 1;
+    },
+    highWaterMark: 0
+  });
+  reader = ts.readable.getReader();
+  const writer = ts.writable.getWriter();
+  let writeResolved = false;
+  const writePromise = writer.write('b').then(() => {
+    writeResolved = true;
+  });
+  return flushAsyncEvents().then(() => {
+    assert_false(writeResolved);
+    controller.enqueue('a');
+    assert_equals(calls, 1, 'size() should have been called once');
+    return delay(0);
+  }).then(() => {
+    assert_true(writeResolved);
+    assert_equals(calls, 1, 'size() should only be called once');
+    return readPromise;
+  }).then(({ value, done }) => {
+    assert_false(done, 'done should be false');
+    // See https://github.com/whatwg/streams/issues/794 for why this chunk is not 'a'.
+    assert_equals(value, 'b', 'chunk should have been read');
+    assert_equals(calls, 1, 'calls should still be 1');
+    return writePromise;
+  });
+}, 'read() inside of size() should work');
+
+promise_test(() => {
+  let writer;
+  let writePromise1;
+  let calls = 0;
+  const ts = new TransformStream({}, undefined, {
+    size() {
+      ++calls;
+      if (calls < 2) {
+        writePromise1 = writer.write('a');
+      }
+      return 1;
+    },
+    highWaterMark: Infinity
+  });
+  writer = ts.writable.getWriter();
+  // Give pull() a chance to be called.
+  return delay(0).then(() => {
+    // This write results in a synchronous call to transform(), enqueue(), and size().
+    const writePromise2 = writer.write('b');
+    assert_equals(calls, 1, 'size() should have been called once');
+    return Promise.all([writePromise1, writePromise2, writer.close()]);
+  }).then(() => {
+    assert_equals(calls, 2, 'size() should have been called twice');
+    return readableStreamToArray(ts.readable);
+  }).then(array => {
+    assert_array_equals(array, ['b', 'a'], 'both chunks should have been enqueued');
+    assert_equals(calls, 2, 'calls should still be 2');
+  });
+}, 'writer.write() inside size() should work');
+
+promise_test(() => {
+  let controller;
+  let writer;
+  let writePromise;
+  let calls = 0;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  }, undefined, {
+    size() {
+      ++calls;
+      if (calls < 2) {
+        writePromise = writer.write('a');
+      }
+      return 1;
+    },
+    highWaterMark: Infinity
+  });
+  writer = ts.writable.getWriter();
+  // Give pull() a chance to be called.
+  return delay(0).then(() => {
+    // This enqueue results in synchronous calls to size(), write(), transform() and enqueue().
+    controller.enqueue('b');
+    assert_equals(calls, 2, 'size() should have been called twice');
+    return Promise.all([writePromise, writer.close()]);
+  }).then(() => {
+    return readableStreamToArray(ts.readable);
+  }).then(array => {
+    // Because one call to enqueue() is nested inside the other, they finish in the opposite order that they were
+    // called, so the chunks end up reverse order.
+    assert_array_equals(array, ['a', 'b'], 'both chunks should have been enqueued');
+    assert_equals(calls, 2, 'calls should still be 2');
+  });
+}, 'synchronous writer.write() inside size() should work');
+
+promise_test(() => {
+  let writer;
+  let closePromise;
+  let controller;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  }, undefined, {
+    size() {
+      closePromise = writer.close();
+      return 1;
+    },
+    highWaterMark: 1
+  });
+  writer = ts.writable.getWriter();
+  const reader = ts.readable.getReader();
+  // Wait for the promise returned by start() to be resolved so that the call to close() will result in a synchronous
+  // call to TransformStreamDefaultSink.
+  return delay(0).then(() => {
+    controller.enqueue('a');
+    return reader.read();
+  }).then(({ value, done }) => {
+    assert_false(done, 'done should be false');
+    assert_equals(value, 'a', 'value should be correct');
+    return reader.read();
+  }).then(({ done }) => {
+    assert_true(done, 'done should be true');
+    return closePromise;
+  });
+}, 'writer.close() inside size() should work');
+
+promise_test(t => {
+  let abortPromise;
+  let controller;
+  const ts = new TransformStream({
+    start(c) {
+      controller = c;
+    }
+  }, undefined, {
+    size() {
+      abortPromise = ts.writable.abort(error1);
+      return 1;
+    },
+    highWaterMark: 1
+  });
+  const reader = ts.readable.getReader();
+  // Wait for the promise returned by start() to be resolved so that the call to abort() will result in a synchronous
+  // call to TransformStreamDefaultSink.
+  return delay(0).then(() => {
+    controller.enqueue('a');
+    return Promise.all([promise_rejects(t, new TypeError(), reader.read(), 'read() should reject'), abortPromise]);
+  });
+}, 'writer.abort() inside size() should work');
+
+done();
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.serviceworker.https.html b/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.serviceworker.https.html
new file mode 100644
index 00000000000..6c1813d1385
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.serviceworker.https.html
@@ -0,0 +1,12 @@
+
+
+reentrant-strategies.js service worker wrapper file
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.sharedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.sharedworker.html
new file mode 100644
index 00000000000..4415a3fb9b3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/reentrant-strategies.sharedworker.html
@@ -0,0 +1,11 @@
+
+
+reentrant-strategies.js shared worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/strategies.dedicatedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.dedicatedworker.html
new file mode 100644
index 00000000000..9dba120fea8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.dedicatedworker.html
@@ -0,0 +1,11 @@
+
+
+strategies.js dedicated worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/strategies.html b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.html
new file mode 100644
index 00000000000..b445963bd9b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.html
@@ -0,0 +1,11 @@
+
+
+strategies.js browser context wrapper file
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/strategies.js b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.js
new file mode 100644
index 00000000000..60481a9c623
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.js
@@ -0,0 +1,92 @@
+'use strict';
+
+// Here we just test that the strategies are correctly passed to the readable and writable sides. We assume that
+// ReadableStream and WritableStream will correctly apply the strategies when they are being used by a TransformStream
+// and so it isn't necessary to repeat their tests here.
+
+if (self.importScripts) {
+  self.importScripts('/resources/testharness.js');
+  self.importScripts('../resources/recording-streams.js');
+  self.importScripts('../resources/test-utils.js');
+}
+
+test(() => {
+  const ts = new TransformStream({}, { highWaterMark: 17 });
+  assert_equals(ts.writable.getWriter().desiredSize, 17, 'desiredSize should be 17');
+}, 'writableStrategy highWaterMark should work');
+
+promise_test(() => {
+  const ts = recordingTransformStream({}, undefined, { highWaterMark: 9 });
+  const writer = ts.writable.getWriter();
+  for (let i = 0; i < 10; ++i) {
+    writer.write(i);
+  }
+  return delay(0).then(() => {
+    assert_array_equals(ts.events, [
+      'transform', 0, 'transform', 1, 'transform', 2, 'transform', 3, 'transform', 4,
+      'transform', 5, 'transform', 6, 'transform', 7, 'transform', 8],
+                        'transform() should have been called 9 times');
+  });
+}, 'readableStrategy highWaterMark should work');
+
+promise_test(t => {
+  let writableSizeCalled = false;
+  let readableSizeCalled = false;
+  let transformCalled = false;
+  const ts = new TransformStream(
+    {
+      transform(chunk, controller) {
+        t.step(() => {
+          transformCalled = true;
+          assert_true(writableSizeCalled, 'writableStrategy.size() should have been called');
+          assert_false(readableSizeCalled, 'readableStrategy.size() should not have been called');
+          controller.enqueue(chunk);
+          assert_true(readableSizeCalled, 'readableStrategy.size() should have been called');
+        });
+      }
+    },
+    {
+      size() {
+        writableSizeCalled = true;
+        return 1;
+      }
+    },
+    {
+      size() {
+        readableSizeCalled = true;
+        return 1;
+      },
+      highWaterMark: Infinity
+    });
+  return ts.writable.getWriter().write().then(() => {
+    assert_true(transformCalled, 'transform() should be called');
+  });
+}, 'writable should have the correct size() function');
+
+test(() => {
+  const ts = new TransformStream();
+  const writer = ts.writable.getWriter();
+  assert_equals(writer.desiredSize, 1, 'default writable HWM is 1');
+  // There should be no size function, but a size function that always returns 1 is indistinguishable.
+  writer.write(undefined);
+  assert_equals(writer.desiredSize, 0, 'default chunk size is 1');
+}, 'default writable strategy should be equivalent to { highWaterMark: 1 }');
+
+promise_test(t => {
+  const ts = new TransformStream({
+    transform(chunk, controller) {
+      return t.step(() => {
+        assert_equals(controller.desiredSize, 0, 'desiredSize should be 0');
+        controller.enqueue(undefined);
+        // The first chunk enqueued is consumed by the pending read().
+        assert_equals(controller.desiredSize, 0, 'desiredSize should still be 0');
+        controller.enqueue(undefined);
+        assert_equals(controller.desiredSize, -1, 'desiredSize should be -1');
+      });
+    }
+  });
+  const writePromise = ts.writable.getWriter().write();
+  return ts.readable.getReader().read().then(() => writePromise);
+}, 'default readable strategy should be equivalent to { highWaterMark: 0 }');
+
+done();
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/strategies.serviceworker.https.html b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.serviceworker.https.html
new file mode 100644
index 00000000000..f0a9f213f19
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.serviceworker.https.html
@@ -0,0 +1,12 @@
+
+
+strategies.js service worker wrapper file
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/strategies.sharedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.sharedworker.html
new file mode 100644
index 00000000000..cd0b2be708c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.sharedworker.html
@@ -0,0 +1,11 @@
+
+
+strategies.js shared worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/terminate.dedicatedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/terminate.dedicatedworker.html
new file mode 100644
index 00000000000..403e3bf8cce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/terminate.dedicatedworker.html
@@ -0,0 +1,11 @@
+
+
+terminate.js dedicated worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/terminate.html b/tests/wpt/web-platform-tests/streams/transform-streams/terminate.html
new file mode 100644
index 00000000000..c75136e1e54
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/terminate.html
@@ -0,0 +1,11 @@
+
+
+terminate.js browser context wrapper file
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/terminate.js b/tests/wpt/web-platform-tests/streams/transform-streams/terminate.js
new file mode 100644
index 00000000000..36c6fbd379b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/terminate.js
@@ -0,0 +1,105 @@
+'use strict';
+
+if (self.importScripts) {
+  self.importScripts('/resources/testharness.js');
+  self.importScripts('../resources/recording-streams.js');
+  self.importScripts('../resources/test-utils.js');
+}
+
+promise_test(t => {
+  const ts = recordingTransformStream({}, undefined, { highWaterMark: 0 });
+  const rs = new ReadableStream({
+    start(controller) {
+      controller.enqueue(0);
+    }
+  });
+  let pipeToRejected = false;
+  const pipeToPromise = promise_rejects(t, new TypeError(), rs.pipeTo(ts.writable), 'pipeTo should reject').then(() => {
+    pipeToRejected = true;
+  });
+  return delay(0).then(() => {
+    assert_array_equals(ts.events, [], 'transform() should have seen no chunks');
+    assert_false(pipeToRejected, 'pipeTo() should not have rejected yet');
+    ts.controller.terminate();
+    return pipeToPromise;
+  }).then(() => {
+    assert_array_equals(ts.events, [], 'transform() should still have seen no chunks');
+    assert_true(pipeToRejected, 'pipeToRejected must be true');
+  });
+}, 'controller.terminate() should error pipeTo()');
+
+promise_test(t => {
+  const ts = recordingTransformStream({}, undefined, { highWaterMark: 1 });
+  const rs = new ReadableStream({
+    start(controller) {
+      controller.enqueue(0);
+      controller.enqueue(1);
+    }
+  });
+  const pipeToPromise = rs.pipeTo(ts.writable);
+  return delay(0).then(() => {
+    assert_array_equals(ts.events, ['transform', 0], 'transform() should have seen one chunk');
+    ts.controller.terminate();
+    return promise_rejects(t, new TypeError(), pipeToPromise, 'pipeTo() should reject');
+  }).then(() => {
+    assert_array_equals(ts.events, ['transform', 0], 'transform() should still have seen only one chunk');
+  });
+}, 'controller.terminate() should prevent remaining chunks from being processed');
+
+test(() => {
+  new TransformStream({
+    start(controller) {
+      controller.enqueue(0);
+      controller.terminate();
+      assert_throws(new TypeError(), () => controller.enqueue(1), 'enqueue should throw');
+    }
+  });
+}, 'controller.enqueue() should throw after controller.terminate()');
+
+const error1 = new Error('error1');
+error1.name = 'error1';
+
+promise_test(t => {
+  const ts = new TransformStream({
+    start(controller) {
+      controller.enqueue(0);
+      controller.terminate();
+      controller.error(error1);
+    }
+  });
+  return Promise.all([
+    promise_rejects(t, new TypeError(), ts.writable.abort(), 'abort() should reject with a TypeError'),
+    promise_rejects(t, error1, ts.readable.cancel(), 'cancel() should reject with error1'),
+    promise_rejects(t, error1, ts.readable.getReader().closed, 'closed should reject with error1')
+  ]);
+}, 'controller.error() after controller.terminate() with queued chunk should error the readable');
+
+promise_test(t => {
+  const ts = new TransformStream({
+    start(controller) {
+      controller.terminate();
+      controller.error(error1);
+    }
+  });
+  return Promise.all([
+    promise_rejects(t, new TypeError(), ts.writable.abort(), 'abort() should reject with a TypeError'),
+    ts.readable.cancel(),
+    ts.readable.getReader().closed
+  ]);
+}, 'controller.error() after controller.terminate() without queued chunk should do nothing');
+
+promise_test(() => {
+  const ts = new TransformStream({
+    flush(controller) {
+      controller.terminate();
+    }
+  });
+  const writer = ts.writable.getWriter();
+  return Promise.all([
+    writer.close(),
+    writer.closed,
+    ts.readable.getReader().closed
+  ]);
+}, 'controller.terminate() inside flush() should not prevent writer.close() from succeeding');
+
+done();
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/terminate.serviceworker.https.html b/tests/wpt/web-platform-tests/streams/transform-streams/terminate.serviceworker.https.html
new file mode 100644
index 00000000000..f5715f6fd01
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/terminate.serviceworker.https.html
@@ -0,0 +1,12 @@
+
+
+terminate.js service worker wrapper file
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/terminate.sharedworker.html b/tests/wpt/web-platform-tests/streams/transform-streams/terminate.sharedworker.html
new file mode 100644
index 00000000000..3af58a1c143
--- /dev/null
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/terminate.sharedworker.html
@@ -0,0 +1,11 @@
+
+
+terminate.js shared worker wrapper file
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/svg/OWNERS b/tests/wpt/web-platform-tests/svg/OWNERS
index b85bcce6c5b..852a7475d52 100644
--- a/tests/wpt/web-platform-tests/svg/OWNERS
+++ b/tests/wpt/web-platform-tests/svg/OWNERS
@@ -1,2 +1,4 @@
 @heycam
 @nikosandronikos
+@boggydigital
+@ewilligers
diff --git a/tests/wpt/web-platform-tests/svg/extensibility/interfaces/foreignObject-graphics.svg b/tests/wpt/web-platform-tests/svg/extensibility/interfaces/foreignObject-graphics.svg
new file mode 100644
index 00000000000..000c107b53b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/extensibility/interfaces/foreignObject-graphics.svg
@@ -0,0 +1,18 @@
+
+
+  
+    
+    
+    
+  
+  
+  
+  
+  
+
diff --git a/tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-001.html b/tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-001.html
new file mode 100644
index 00000000000..5619e0ba690
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-001.html
@@ -0,0 +1,28 @@
+
+
+CSS Test: use element doesn't cross shadow tree boundaries in selector-matching
+
+
+
+
+

+ You should see a green square, and no red. +

+ + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-002.html b/tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-002.html new file mode 100644 index 00000000000..643f20d16d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-002.html @@ -0,0 +1,33 @@ + + +CSS Test: use element doesn't cross shadow tree boundaries in selector-matching + + + + +

+ You should see a green square, and no red. +

+ + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-ref.html b/tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-ref.html new file mode 100644 index 00000000000..dae3fc1173b --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/linking/reftests/use-descendant-combinator-ref.html @@ -0,0 +1,12 @@ + + +CSS Test reference +

+ You should see a green square, and no red. +

+ + + diff --git a/tests/wpt/web-platform-tests/svg/struct/UnknownElement/interface.svg b/tests/wpt/web-platform-tests/svg/struct/UnknownElement/interface.svg new file mode 100644 index 00000000000..862e5fde273 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/struct/UnknownElement/interface.svg @@ -0,0 +1,19 @@ + + +Interface of unknown element + + + + + + + +test(function() { + var e = document.getElementById("target"); + assert_equals(e.__proto__, SVGUnknownElement.prototype); +}); + + diff --git a/tests/wpt/web-platform-tests/svg/types/scripted/SVGLength.html b/tests/wpt/web-platform-tests/svg/types/scripted/SVGLength.html index 22256c05771..2b043b99a62 100644 --- a/tests/wpt/web-platform-tests/svg/types/scripted/SVGLength.html +++ b/tests/wpt/web-platform-tests/svg/types/scripted/SVGLength.html @@ -90,6 +90,12 @@ test(function() { assert_equals(length.valueInSpecifiedUnits, 2); assert_equals(length.unitType, SVGLength.SVG_LENGTHTYPE_PX); + assert_throws("SyntaxError", function() { length.valueAsString = ''; }); + assert_equals(length.valueAsString, "2px"); + assert_equals(length.value, 2); + assert_equals(length.valueInSpecifiedUnits, 2); + assert_equals(length.unitType, SVGLength.SVG_LENGTHTYPE_PX); + // Check setting invalid 'value' arguments. assert_throws(new TypeError(), function() { length.value = NaN; }); assert_throws(new TypeError(), function() { length.value = Infinity; }); @@ -104,4 +110,4 @@ test(function() { assert_equals(length.valueInSpecifiedUnits, 2); assert_equals(length.unitType, SVGLength.SVG_LENGTHTYPE_PX); }); - \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/tools/ci/ci_manifest.sh b/tests/wpt/web-platform-tests/tools/ci/ci_manifest.sh index 90dea16651c..f13a70f9354 100644 --- a/tests/wpt/web-platform-tests/tools/ci/ci_manifest.sh +++ b/tests/wpt/web-platform-tests/tools/ci/ci_manifest.sh @@ -6,6 +6,7 @@ cd $WPT_ROOT mkdir -p ~/meta +python tools/ci/tag_master.py ./wpt manifest -p ~/meta/MANIFEST.json cp ~/meta/MANIFEST.json $WPT_MANIFEST_FILE # Force overwrite of any existing file diff --git a/tests/wpt/web-platform-tests/tools/ci/tag_master.py b/tests/wpt/web-platform-tests/tools/ci/tag_master.py new file mode 100644 index 00000000000..4404a195ef6 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/ci/tag_master.py @@ -0,0 +1,92 @@ +import base64 +import json +import logging +import os +import sys +import urllib2 + +here = os.path.abspath(os.path.dirname(__file__)) +wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir)) + +if not(wpt_root in sys.path): + sys.path.append(wpt_root) + +from tools.wpt.testfiles import get_git_cmd + +logging.basicConfig() +logger = logging.getLogger(__name__) + + +def get_pr(repo, owner, rev): + url = ("https://api.github.com/search/issues?q=type:pr+is:merged+repo:%s/%s+%s" % + (repo, owner, rev)) + try: + resp = urllib2.urlopen(url) + except Exception as e: + logger.error(e) + return None + + if resp.code != 200: + logger.error("Got HTTP status %s" % resp.code) + return None + + try: + data = json.loads(resp.read()) + except ValueError: + logger.error("Failed to read response as JSON") + return None + + items = data["items"] + if len(items) == 0: + logger.error("No PR found for master") + return None + if len(items) > 1: + logger.warning("Found multiple PRs for master") + + pr = items[0] + + return pr["number"] + + +def tag(repo, owner, sha, tag): + data = json.dumps({"ref": "refs/tags/%s" % tag, + "sha": sha}) + try: + url = "https://api.github.com/repos/%s/%s/git/refs" % (repo, owner) + req = urllib2.Request(url, data=data) + + base64string = base64.b64encode('%s' % (os.environ["GH_TOKEN"])) + req.add_header("Authorization", "Basic %s" % base64string) + + opener = urllib2.build_opener(urllib2.HTTPSHandler()) + + resp = opener.open(req) + except Exception as e: + logger.error("Tag creation failed:\n%s" % e) + return + + if resp.code != 201: + logger.error("Got HTTP status %s" % resp.code) + else: + logger.info("Tagged master as %s" % tag) + + +def main(): + owner, repo = os.environ["TRAVIS_REPO_SLUG"].split("/", 1) + if os.environ["TRAVIS_PULL_REQUEST"] != "false": + logger.info("Not tagging for PR") + return + if os.environ["TRAVIS_BRANCH"] != "master": + logger.info("Not tagging for non-master branch") + return + + git = get_git_cmd(wpt_root) + head_rev = git("rev-parse", "HEAD") + + pr = get_pr(owner, repo, head_rev) + if pr is not None: + tag(owner, repo, head_rev, "merge_pr_%s" % pr) + + +if __name__ == "__main__": + main() diff --git a/tests/wpt/web-platform-tests/tools/lint/lint.py b/tests/wpt/web-platform-tests/tools/lint/lint.py index 1a5ee1c1b17..271b9f1441b 100644 --- a/tests/wpt/web-platform-tests/tools/lint/lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/lint.py @@ -515,14 +515,26 @@ def check_parsed(repo_root, path, f, css_mode): if all(seen_elements[name] for name in required_elements): break + if source_file.testdriver_nodes: + if len(source_file.testdriver_nodes) > 1: + errors.append(("MULTIPLE-TESTDRIVER", + "More than one " + + filename = "html/test." + ext + s = create(filename, content) + + assert s.has_testdriver + + +@pytest.mark.parametrize("ext", ["htm", "html"]) +def test_relative_testdriver(ext): + content = b"" + + filename = "html/test." + ext + s = create(filename, content) + + assert not s.has_testdriver + + @pytest.mark.parametrize("ext", ["htm", "html"]) def test_reftest_node(ext): content = b"" diff --git a/tests/wpt/web-platform-tests/tools/serve/serve.py b/tests/wpt/web-platform-tests/tools/serve/serve.py index f1cd008642d..74b9b7e55b7 100644 --- a/tests/wpt/web-platform-tests/tools/serve/serve.py +++ b/tests/wpt/web-platform-tests/tools/serve/serve.py @@ -214,14 +214,14 @@ class RoutesBuilder(object): ("*", "{spec}/tools/*", handlers.ErrorHandler(404)), ("*", "/serve.py", handlers.ErrorHandler(404))] - self.static = [] + self.extra = [] self.mountpoint_routes = OrderedDict() self.add_mount_point("/", None) def get_routes(self): - routes = self.forbidden_override + self.forbidden + self.static + routes = self.forbidden_override + self.forbidden + self.extra # Using reversed here means that mount points that are added later # get higher priority. This makes sense since / is typically added # first. @@ -229,9 +229,12 @@ class RoutesBuilder(object): routes.extend(item) return routes + def add_handler(self, method, route, handler): + self.extra.append((str(method), str(route), handler)) + def add_static(self, path, format_args, content_type, route): handler = handlers.StaticHandler(path, format_args, content_type) - self.static.append((b"GET", str(route), handler)) + self.add_handler(b"GET", str(route), handler) def add_mount_point(self, url_base, path): url_base = "/%s/" % url_base.strip("/") if url_base != "/" else "/" diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py index eb0734ba6bd..26a035da776 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py @@ -1,15 +1,13 @@ -import json import urlparse import error +import protocol import transport from mozlog import get_default_logger logger = get_default_logger() -element_key = "element-6066-11e4-a52e-4f735466cecf" - def command(func): def inner(self, *args, **kwargs): @@ -147,7 +145,7 @@ class ActionSequence(object): if duration is not None: action["duration"] = duration if origin is not None: - action["origin"] = origin if isinstance(origin, basestring) else origin.json() + action["origin"] = origin self._actions.append(action) return self @@ -299,18 +297,9 @@ class Find(object): def _find_element(self, strategy, selector, all): route = "elements" if all else "element" - body = {"using": strategy, "value": selector} - - data = self.session.send_session_command("POST", route, body) - - if all: - rv = [self.session._element(item) for item in data] - else: - rv = self.session._element(data) - - return rv + return self.session.send_session_command("POST", route, body) class Cookies(object): @@ -356,8 +345,13 @@ class UserPrompt(object): class Session(object): - def __init__(self, host, port, url_prefix="/", capabilities=None, - timeout=None, extension=None): + def __init__(self, + host, + port, + url_prefix="/", + capabilities=None, + timeout=None, + extension=None): self.transport = transport.HTTPWireProtocol( host, port, url_prefix, timeout=timeout) self.capabilities = capabilities @@ -375,6 +369,10 @@ class Session(object): self.alert = UserPrompt(self) self.actions = Actions(self) + def __eq__(self, other): + return (self.session_id is not None and isinstance(other, Session) + and self.session_Id == other.session_id) + def __enter__(self): self.start() return self @@ -422,22 +420,36 @@ class Session(object): :param body: Optional body of the HTTP request. :return: `None` if the HTTP response body was empty, otherwise - the result of parsing the body as JSON. + the `value` field returned after parsing the response + body as JSON. + :raises ValueError: If the response body does not contain a + `value` key. :raises error.WebDriverException: If the remote end returns an error. """ - response = self.transport.send(method, url, body) + response = self.transport.send( + method, url, body, + encoder=protocol.Encoder, decoder=protocol.Decoder, + session=self) + + if response.status != 200: + raise error.from_response(response) if "value" in response.body: value = response.body["value"] + """ + Edge does not yet return the w3c session ID. + We want the tests to run in Edge anyway to help with REC. + In order to run the tests in Edge, we need to hack around + bug: + https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/14641972 + """ + if url == "session" and method == "POST" and "sessionId" in response.body and "sessionId" not in value: + value["sessionId"] = response.body["sessionId"] else: - raise error.UnknownErrorException("No 'value' key in response body:\n%s" % - json.dumps(response.body)) - - if response.status != 200: - cls = error.get(value.get("error")) - raise cls(value.get("message")) + raise ValueError("Expected 'value' key in response body:\n" + "%s" % response) return value @@ -512,10 +524,7 @@ class Session(object): body = None else: url = "frame" - if isinstance(frame, Element): - body = {"id": frame.json()} - else: - body = {"id": frame} + body = {"id": frame} return self.send_session_command("POST", url, body) @@ -531,16 +540,7 @@ class Session(object): @property @command def active_element(self): - data = self.send_session_command("GET", "element/active") - if data is not None: - return self._element(data) - - def _element(self, data): - elem_id = data[element_key] - assert elem_id - if elem_id in self._element_cache: - return self._element_cache[elem_id] - return Element(self, elem_id) + return self.send_session_command("GET", "element/active") @command def cookies(self, name=None): @@ -603,26 +603,49 @@ class Session(object): class Element(object): - def __init__(self, session, id): - self.session = session + """ + Representation of a web element. + + A web element is an abstraction used to identify an element when + it is transported via the protocol, between remote- and local ends. + """ + identifier = "element-6066-11e4-a52e-4f735466cecf" + + def __init__(self, id, session): + """ + Construct a new web element representation. + + :param id: Web element UUID which must be unique across + all browsing contexts. + :param session: Current ``webdriver.Session``. + """ self.id = id + self.session = session + assert id not in self.session._element_cache self.session._element_cache[self.id] = self + def __eq__(self, other): + return isinstance(other, Element) and self.id == other.id \ + and self.session == other.session + + @classmethod + def from_json(cls, json, session): + assert Element.identifier in json + uuid = json[Element.identifier] + if uuid in session._element_cache: + return session._element_cache[uuid] + return cls(uuid, session) + def send_element_command(self, method, uri, body=None): url = "element/%s/%s" % (self.id, uri) return self.session.send_session_command(method, url, body) - def json(self): - return {element_key: self.id} - @command def find_element(self, strategy, selector): body = {"using": strategy, "value": selector} - - elem = self.send_element_command("POST", "element", body) - return self.session._element(elem) + return self.send_element_command("POST", "element", body) @command def click(self): diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py index 43e9f39ffba..01ab31b8af1 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py @@ -1,10 +1,25 @@ import collections +import json class WebDriverException(Exception): http_status = None status_code = None + def __init__(self, message, stacktrace=None): + super(WebDriverException, self) + self.stacktrace = stacktrace + + def __repr__(self): + return "<%s http_status=%d>" % (self.__class__.__name__, self.http_status) + + def __str__(self): + return ("%s (%d)\n" + "\n" + "Remote-end stacktrace:\n" + "\n" + "%s" % (self.status_code, self.http_status, self.stacktrace)) + class ElementNotSelectableException(WebDriverException): http_status = 400 @@ -131,11 +146,40 @@ class UnsupportedOperationException(WebDriverException): status_code = "unsupported operation" -def get(status_code): - """Gets exception from `status_code`, falling back to +def from_response(response): + """ + Unmarshals an error from a ``Response``'s `body`, failing + if not all three required `error`, `message`, and `stacktrace` + fields are given. Defaults to ``WebDriverException`` if `error` + is unknown. + """ + if response.status == 200: + raise UnknownErrorException( + "Response is not an error:\n" + "%s" % json.dumps(response.body)) + + if "value" in response.body: + value = response.body["value"] + else: + raise UnknownErrorException( + "Expected 'value' key in response body:\n" + "%s" % json.dumps(response.body)) + + # all fields must exist, but stacktrace can be an empty string + code = value["error"] + message = value["message"] + stack = value["stacktrace"] or None + + cls = get(code) + return cls(message, stacktrace=stack) + + +def get(error_code): + """ + Gets exception from `error_code`, falling back to ``WebDriverException`` if it is not found. """ - return _errors.get(status_code, WebDriverException) + return _errors.get(error_code, WebDriverException) _errors = collections.defaultdict() diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/protocol.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/protocol.py new file mode 100644 index 00000000000..80f358c8b0a --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/protocol.py @@ -0,0 +1,35 @@ +import json + +import webdriver + + +"""WebDriver wire protocol codecs.""" + + +class Encoder(json.JSONEncoder): + def __init__(self, *args, **kwargs): + kwargs.pop("session") + super(Encoder, self).__init__(*args, **kwargs) + + def default(self, obj): + if isinstance(obj, (list, tuple)): + return [self.default(x) for x in obj] + elif isinstance(obj, webdriver.Element): + return {webdriver.Element.identifier: obj.id} + return super(ProtocolEncoder, self).default(obj) + + +class Decoder(json.JSONDecoder): + def __init__(self, *args, **kwargs): + self.session = kwargs.pop("session") + super(Decoder, self).__init__( + object_hook=self.object_hook, *args, **kwargs) + + def object_hook(self, payload): + if isinstance(payload, (list, tuple)): + return [self.object_hook(x) for x in payload] + elif isinstance(payload, dict) and webdriver.Element.identifier in payload: + return webdriver.Element.from_json(payload, self.session) + elif isinstance(payload, dict): + return {k: self.object_hook(v) for k, v in payload.iteritems()} + return payload diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/transport.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/transport.py index 8ee4c55c526..ef8e59a6f82 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/transport.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/transport.py @@ -4,58 +4,78 @@ import urlparse import error + +"""Implements HTTP transport for the WebDriver wire protocol.""" + + class Response(object): - """Describes an HTTP response received from a remote en"Describes an HTTP - response received from a remote end whose body has been read and parsed as - appropriate.""" + """ + Describes an HTTP response received from a remote end whose + body has been read and parsed as appropriate. + """ + def __init__(self, status, body): self.status = status self.body = body def __repr__(self): - return "wdclient.Response(status=%d, body=%s)" % (self.status, self.body) + if self.error: + return "<%s status=%s error=%s>" % (cls_name, self.status, repr(self.error)) + return "<% status=%s body=%s>" % (cls_name, self.status, json.dumps(self.body)) + + def __str__(self): + return json.dumps(self.body, indent=2) + + @property + def error(self): + if self.status != 200: + return error.from_response(self) + return None @classmethod - def from_http_response(cls, http_response): - status = http_response.status - body = http_response.read() + def from_http(cls, http_response, decoder=json.JSONDecoder, **kwargs): + try: + body = json.load(http_response, cls=decoder, **kwargs) + except ValueError: + raise ValueError("Failed to decode response body as JSON:\n" + "%s" % json.dumps(body, indent=2)) - # SpecID: dfn-send-a-response - # - # > 3. Set the response's header with name and value with the following - # > values: - # > - # > "Content-Type" - # > "application/json; charset=utf-8" - # > "cache-control" - # > "no-cache" - - if body: - try: - body = json.loads(body) - except Exception: - raise error.UnknownErrorException("Failed to decode body as json:\n%s" % body) - - return cls(status, body) - - -class ToJsonEncoder(json.JSONEncoder): - def default(self, obj): - return getattr(obj.__class__, "json", json.JSONEncoder().default)(obj) + return cls(http_response.status, body) class HTTPWireProtocol(object): - """Transports messages (commands and responses) over the WebDriver + """ + Transports messages (commands and responses) over the WebDriver wire protocol. + + Complex objects, such as ``webdriver.Element``, are by default + not marshaled to enable use of `session.transport.send` in WPT tests:: + + session = webdriver.Session("127.0.0.1", 4444) + response = transport.send("GET", "element/active", None) + print response.body["value"] + # => {u'element-6066-11e4-a52e-4f735466cecf': u''} + + Automatic marshaling is provided by ``webdriver.protocol.Encoder`` + and ``webdriver.protocol.Decoder``, which can be passed in to + ``HTTPWireProtocol.send`` along with a reference to the current + ``webdriver.Session``:: + + session = webdriver.Session("127.0.0.1", 4444) + response = transport.send("GET", "element/active", None, + encoder=protocol.Encoder, decoder=protocol.Decoder, + session=session) + print response.body["value"] + # => webdriver.Element """ def __init__(self, host, port, url_prefix="/", timeout=None): - """Construct interface for communicating with the remote server. + """ + Construct interface for communicating with the remote server. :param url: URL of remote WebDriver server. :param wait: Duration to wait for remote to appear. """ - self.host = host self.port = port self.url_prefix = url_prefix @@ -65,43 +85,74 @@ class HTTPWireProtocol(object): def url(self, suffix): return urlparse.urljoin(self.url_prefix, suffix) - def send(self, method, uri, body=None, headers=None): - """Send a command to the remote. + def send(self, + method, + uri, + body=None, + headers=None, + encoder=json.JSONEncoder, + decoder=json.JSONDecoder, + **codec_kwargs): + """ + Send a command to the remote. + + The request `body` must be JSON serialisable unless a + custom `encoder` has been provided. This means complex + objects such as ``webdriver.Element`` are not automatically + made into JSON. This behaviour is, however, provided by + ``webdriver.protocol.Encoder``, should you want it. + + Similarly, the response body is returned au natural + as plain JSON unless a `decoder` that converts web + element references to ``webdriver.Element`` is provided. + Use ``webdriver.protocol.Decoder`` to achieve this behaviour. :param method: `GET`, `POST`, or `DELETE`. :param uri: Relative endpoint of the requests URL path. :param body: Body of the request. Defaults to an empty dictionary if ``method`` is `POST`. - :param headers: Additional headers to include in the request. + :param headers: Additional dictionary of headers to include + in the request. + :param encoder: JSON encoder class, which defaults to + ``json.JSONEncoder`` unless specified. + :param decoder: JSON decoder class, which defaults to + ``json.JSONDecoder`` unless specified. + :param codec_kwargs: Surplus arguments passed on to `encoder` + and `decoder` on construction. - :return: Instance of ``wdclient.Response`` describing the - HTTP response received from the remote end. + :return: Instance of ``webdriver.transport.Response`` + describing the HTTP response received from the remote end. + :raises ValueError: If `body` or the response body are not + JSON serialisable. """ if body is None and method == "POST": body = {} - if isinstance(body, dict): - body = json.dumps(body, cls=ToJsonEncoder) - - if isinstance(body, unicode): - body = body.encode("utf-8") + try: + payload = json.dumps(body, cls=encoder, **codec_kwargs) + except ValueError: + raise ValueError("Failed to encode request body as JSON:\n" + "%s" % json.dumps(body, indent=2)) + if isinstance(payload, unicode): + payload = body.encode("utf-8") if headers is None: headers = {} url = self.url(uri) - kwargs = {} + conn_kwargs = {} if self._timeout is not None: - kwargs["timeout"] = self._timeout + conn_kwargs["timeout"] = self._timeout conn = httplib.HTTPConnection( - self.host, self.port, strict=True, **kwargs) - conn.request(method, url, body, headers) + self.host, self.port, strict=True, **conn_kwargs) + conn.request(method, url, payload, headers) try: response = conn.getresponse() - return Response.from_http_response(response) + return Response.from_http( + response, decoder=decoder, **codec_kwargs) finally: conn.close() diff --git a/tests/wpt/web-platform-tests/tools/wpt/browser.py b/tests/wpt/web-platform-tests/tools/wpt/browser.py index de4e4d8903c..40d94d53179 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/browser.py +++ b/tests/wpt/web-platform-tests/tools/wpt/browser.py @@ -2,6 +2,7 @@ import logging import os import platform import re +import shutil import stat from abc import ABCMeta, abstractmethod from ConfigParser import RawConfigParser @@ -278,6 +279,85 @@ class Chrome(Browser): sys.exit(1) +class Opera(Browser): + """Opera-specific interface. + + Includes installation, webdriver installation, and wptrunner setup methods. + """ + + product = "opera" + binary = "/usr/bin/opera" + requirements = "requirements_opera.txt" + + def install(self, dest=None): + raise NotImplementedError + + def platform_string(self): + platform = { + "Linux": "linux", + "Windows": "win", + "Darwin": "mac" + }.get(uname[0]) + + if platform is None: + raise ValueError("Unable to construct a valid Opera package name for current platform") + + if platform == "linux": + bits = "64" if uname[4] == "x86_64" else "32" + elif platform == "mac": + bits = "64" + elif platform == "win": + bits = "32" + + return "%s%s" % (platform, bits) + + def find_webdriver(self): + return find_executable("operadriver") + + def install_webdriver(self, dest=None): + """Install latest Webdriver.""" + if dest is None: + dest = os.pwd + latest = get("https://api.github.com/repos/operasoftware/operachromiumdriver/releases/latest").json()["tag_name"] + url = "https://github.com/operasoftware/operachromiumdriver/releases/download/%s/operadriver_%s.zip" % (latest, + self.platform_string()) + unzip(get(url).raw, dest) + + operadriver_dir = os.path.join(dest, "operadriver_%s" % self.platform_string()) + shutil.move(os.path.join(operadriver_dir, "operadriver"), dest) + shutil.rmtree(operadriver_dir) + + path = find_executable("operadriver") + st = os.stat(path) + os.chmod(path, st.st_mode | stat.S_IEXEC) + return path + + def version(self, root): + """Retrieve the release version of the installed browser.""" + output = call(self.binary, "--version") + return re.search(r"[0-9\.]+( [a-z]+)?$", output.strip()).group(0) + + def prepare_environment(self): + # https://bugs.chromium.org/p/chromium/issues/detail?id=713947 + logger.debug("DBUS_SESSION_BUS_ADDRESS %s" % os.environ.get("DBUS_SESSION_BUS_ADDRESS")) + if "DBUS_SESSION_BUS_ADDRESS" not in os.environ: + if find_executable("dbus-launch"): + logger.debug("Attempting to start dbus") + dbus_conf = subprocess.check_output(["dbus-launch"]) + logger.debug(dbus_conf) + + # From dbus-launch(1): + # + # > When dbus-launch prints bus information to standard output, + # > by default it is in a simple key-value pairs format. + for line in dbus_conf.strip().split("\n"): + key, _, value = line.partition("=") + os.environ[key] = value + else: + logger.critical("dbus not running and can't be started") + sys.exit(1) + + class Edge(Browser): """Edge-specific interface. diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py index 952ebf577b6..d1e3e49519c 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/run.py +++ b/tests/wpt/web-platform-tests/tools/wpt/run.py @@ -224,6 +224,29 @@ class Chrome(BrowserSetup): raise WptrunError("Unable to locate or install chromedriver binary") +class Opera(BrowserSetup): + name = "opera" + browser_cls = browser.Opera + + def setup_kwargs(self, kwargs): + if kwargs["webdriver_binary"] is None: + webdriver_binary = self.browser.find_webdriver() + + if webdriver_binary is None: + install = self.prompt_install("operadriver") + + if install: + print("Downloading operadriver") + webdriver_binary = self.browser.install_webdriver(dest=self.venv.bin_path) + else: + print("Using webdriver binary %s" % webdriver_binary) + + if webdriver_binary: + kwargs["webdriver_binary"] = webdriver_binary + else: + raise WptrunError("Unable to locate or install operadriver binary") + + class Edge(BrowserSetup): name = "edge" browser_cls = browser.Edge @@ -302,6 +325,7 @@ product_setup = { "ie": InternetExplorer, "servo": Servo, "sauce": Sauce, + "opera": Opera, } diff --git a/tests/wpt/web-platform-tests/tools/wpt/testfiles.py b/tests/wpt/web-platform-tests/tools/wpt/testfiles.py index 519a958d511..e6e673d73fd 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/testfiles.py +++ b/tests/wpt/web-platform-tests/tools/wpt/testfiles.py @@ -2,6 +2,7 @@ import argparse import itertools import logging import os +import re import subprocess import sys @@ -79,13 +80,21 @@ def branch_point(): return branch_point -def files_changed(revish, ignore_dirs=None, include_uncommitted=False, include_new=False): - """Get and return files changed since current branch diverged from master, - excluding those that are located within any directory specifed by - `ignore_changes`.""" - if ignore_dirs is None: - ignore_dirs = [] +def compile_ignore_rule(rule): + rule = rule.replace(os.path.sep, "/") + parts = rule.split("/") + re_parts = [] + for part in parts: + if part.endswith("**"): + re_parts.append(re.escape(part[:-2]) + ".*") + elif part.endswith("*"): + re_parts.append(re.escape(part[:-1]) + "[^/]*") + else: + re_parts.append(re.escape(part)) + return re.compile("^%s$" % "/".join(re_parts)) + +def repo_files_changed(revish, include_uncommitted=False, include_new=False): git = get_git_cmd(wpt_root) files = git("diff", "--name-only", "-z", revish).split("\0") assert not files[-1] @@ -107,27 +116,48 @@ def files_changed(revish, ignore_dirs=None, include_uncommitted=False, include_n for filename in filenames: files.add(os.path.join(dirpath, filename)) - if not files: - return [], [] + return files + + +def exclude_ignored(files, ignore_rules): + if ignore_rules is None: + ignore_rules = [] + ignore_rules = [compile_ignore_rule(item) for item in ignore_rules] changed = [] ignored = [] for item in sorted(files): fullpath = os.path.join(wpt_root, item) - topmost_dir = item.split(os.sep, 1)[0] - if topmost_dir in ignore_dirs: - ignored.append(fullpath) + rule_path = item.replace(os.path.sep, "/") + for rule in ignore_rules: + if rule.match(rule_path): + ignored.append(fullpath) + break else: changed.append(fullpath) return changed, ignored +def files_changed(revish, ignore_rules=None, include_uncommitted=False, include_new=False): + """Get and return files changed since current branch diverged from master, + excluding those that are located within any path matched by + `ignore_rules`.""" + files = repo_files_changed(revish, + include_uncommitted=include_uncommitted, + include_new=include_new) + if not files: + return [], [] + + return exclude_ignored(files, ignore_rules) + + def _in_repo_root(full_path): rel_path = os.path.relpath(full_path, wpt_root) path_components = rel_path.split(os.sep) return len(path_components) < 2 + def _init_manifest_cache(): c = {} @@ -146,6 +176,7 @@ def _init_manifest_cache(): return c[manifest_path] return load + load_manifest = _init_manifest_cache() @@ -171,6 +202,7 @@ def affected_testfiles(files_changed, skip_tests, manifest_path=None): tests_changed = set(item for item in files_changed if item in test_files) nontest_changed_paths = set() + rewrites = {"/resources/webidl2/lib/webidl2.js": "/resources/WebIDLParser.js"} for full_path in nontests_changed: rel_path = os.path.relpath(full_path, wpt_root) path_components = rel_path.split(os.sep) @@ -178,6 +210,9 @@ def affected_testfiles(files_changed, skip_tests, manifest_path=None): if top_level_subdir in skip_tests: continue repo_path = "/" + os.path.relpath(full_path, wpt_root).replace(os.path.sep, "/") + if repo_path in rewrites: + repo_path = rewrites[repo_path] + full_path = os.path.join(wpt_root, repo_path[1:].replace("/", os.path.sep)) nontest_changed_paths.add((full_path, repo_path)) def affected_by_wdspec(test): @@ -229,11 +264,17 @@ def affected_testfiles(files_changed, skip_tests, manifest_path=None): def get_parser(): parser = argparse.ArgumentParser() - parser.add_argument("revish", default=None, help="Commits to consider. Defaults to the commits on the current branch", nargs="?") - parser.add_argument("--ignore-dirs", nargs="*", type=set, default=set(["resources"]), - help="Directories to exclude from the list of changes") + parser.add_argument("revish", default=None, help="Commits to consider. Defaults to the " + "commits on the current branch", nargs="?") + parser.add_argument("--ignore-rules", nargs="*", type=set, + default=set(["resources/testharness*"]), + help="Rules for paths to exclude from lists of changes. Rules are paths " + "relative to the test root, with * before a separator or the end matching " + "anything other than a path separator and ** in that position matching " + "anything") parser.add_argument("--modified", action="store_true", - help="Include files under version control that have been modified or staged") + help="Include files under version control that have been " + "modified or staged") parser.add_argument("--new", action="store_true", help="Include files in the worktree that are not in version control") parser.add_argument("--show-type", action="store_true", @@ -250,6 +291,7 @@ def get_parser_affected(): help="Directory that will contain MANIFEST.json") return parser + def get_revish(**kwargs): revish = kwargs["revish"] if kwargs["revish"] is None: @@ -259,7 +301,7 @@ def get_revish(**kwargs): def run_changed_files(**kwargs): revish = get_revish(**kwargs) - changed, _ = files_changed(revish, kwargs["ignore_dirs"], + changed, _ = files_changed(revish, kwargs["ignore_rules"], include_uncommitted=kwargs["modified"], include_new=kwargs["new"]) for item in sorted(changed): @@ -268,7 +310,7 @@ def run_changed_files(**kwargs): def run_tests_affected(**kwargs): revish = get_revish(**kwargs) - changed, _ = files_changed(revish, kwargs["ignore_dirs"], + changed, _ = files_changed(revish, kwargs["ignore_rules"], include_uncommitted=kwargs["modified"], include_new=kwargs["new"]) manifest_path = os.path.join(kwargs["metadata_root"], "MANIFEST.json") diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py index b2a0783a097..d3402174c1a 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py +++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py @@ -91,6 +91,24 @@ html/browsers/offline/appcache/workers/resources/appcache-worker.py assert err == "" +def test_files_changed_ignore(): + from tools.wpt.testfiles import exclude_ignored + files = ["resources/testharness.js", "resources/webidl2/index.js", "test/test.js"] + changed, ignored = exclude_ignored(files, ignore_rules=["resources/testharness*"]) + assert changed == [os.path.join(wpt.wpt_root, item) for item in + ["resources/webidl2/index.js", "test/test.js"]] + assert ignored == [os.path.join(wpt.wpt_root, item) for item in + ["resources/testharness.js"]] + + +def test_files_changed_ignore_rules(): + from tools.wpt.testfiles import compile_ignore_rule + assert compile_ignore_rule("foo*bar*/baz").pattern == "^foo\*bar[^/]*/baz$" + assert compile_ignore_rule("foo**bar**/baz").pattern == "^foo\*\*bar.*/baz$" + assert compile_ignore_rule("foobar/baz/*").pattern == "^foobar/baz/[^/]*$" + assert compile_ignore_rule("foobar/baz/**").pattern == "^foobar/baz/.*$" + + def test_tests_affected(capsys): # This doesn't really work properly for random commits because we test the files in # the current working directory for references to the changed files, not the ones at diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/MANIFEST.in b/tests/wpt/web-platform-tests/tools/wptrunner/MANIFEST.in index 0c5e38bf265..2be4d915be1 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/MANIFEST.in +++ b/tests/wpt/web-platform-tests/tools/wptrunner/MANIFEST.in @@ -3,15 +3,7 @@ include requirements.txt include wptrunner/browsers/b2g_setup/* include wptrunner.default.ini include wptrunner/testharness_runner.html -include wptrunner/testharnessreport.js -include wptrunner/testharnessreport-servo.js -include wptrunner/testharnessreport-servodriver.js -include wptrunner/executors/testharness_marionette.js -include wptrunner/executors/testharness_servodriver.js -include wptrunner/executors/testharness_webdriver.js -include wptrunner/executors/reftest.js -include wptrunner/executors/reftest-wait.js -include wptrunner/executors/reftest-wait_servodriver.js -include wptrunner/executors/reftest-wait_webdriver.js +include wptrunner/*.js +include wptrunner/executors/*.js include wptrunner/config.json include wptrunner/browsers/server-locations.txt \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt new file mode 100644 index 00000000000..a2f54425f3e --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt @@ -0,0 +1,2 @@ +mozprocess >= 0.19 +selenium >= 2.41.0 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py index c4ea971fb6f..a5c25335742 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py @@ -28,4 +28,5 @@ product_list = ["chrome", "ie", "sauce", "servo", - "servodriver"] + "servodriver", + "opera"] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edge.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edge.py index fdc7a7721ad..db4ae005e90 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edge.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edge.py @@ -3,12 +3,14 @@ from ..webdriver_server import EdgeDriverServer from ..executors import executor_kwargs as base_executor_kwargs from ..executors.executorselenium import (SeleniumTestharnessExecutor, SeleniumRefTestExecutor) +from ..executors.executoredge import EdgeDriverWdspecExecutor __wptrunner__ = {"product": "edge", "check_args": "check_args", "browser": "EdgeBrowser", "executor": {"testharness": "SeleniumTestharnessExecutor", - "reftest": "SeleniumRefTestExecutor"}, + "reftest": "SeleniumRefTestExecutor", + "wdspec": "EdgeDriverWdspecExecutor"}, "browser_kwargs": "browser_kwargs", "executor_kwargs": "executor_kwargs", "env_extras": "env_extras", diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py index c4bed465d5a..552cd15b459 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py @@ -76,7 +76,8 @@ def browser_kwargs(test_type, run_info_data, **kwargs): run_info_data, **kwargs), "leak_check": kwargs["leak_check"], - "stylo_threads": kwargs["stylo_threads"]} + "stylo_threads": kwargs["stylo_threads"], + "chaos_mode_flags": kwargs["chaos_mode_flags"]} def executor_kwargs(test_type, server_config, cache_manager, run_info_data, @@ -138,7 +139,8 @@ class FirefoxBrowser(Browser): def __init__(self, logger, binary, prefs_root, test_type, extra_prefs=None, debug_info=None, symbols_path=None, stackwalk_binary=None, certutil_binary=None, ca_certificate_path=None, e10s=False, stackfix_dir=None, - binary_args=None, timeout_multiplier=None, leak_check=False, stylo_threads=1): + binary_args=None, timeout_multiplier=None, leak_check=False, stylo_threads=1, + chaos_mode_flags=None): Browser.__init__(self, logger) self.binary = binary self.prefs_root = prefs_root @@ -166,6 +168,7 @@ class FirefoxBrowser(Browser): self.leak_report_file = None self.leak_check = leak_check self.stylo_threads = stylo_threads + self.chaos_mode_flags = chaos_mode_flags def settings(self, test): return {"check_leaks": self.leak_check and not test.leaks} @@ -180,6 +183,8 @@ class FirefoxBrowser(Browser): env["MOZ_CRASHREPORTER_SHUTDOWN"] = "1" env["MOZ_DISABLE_NONLOCAL_CONNECTIONS"] = "1" env["STYLO_THREADS"] = str(self.stylo_threads) + if self.chaos_mode_flags is not None: + env["MOZ_CHAOSMODE"] = str(self.chaos_mode_flags) locations = ServerLocations(filename=os.path.join(here, "server-locations.txt")) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/opera.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/opera.py new file mode 100644 index 00000000000..57edfa06bd5 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/opera.py @@ -0,0 +1,101 @@ +from .base import Browser, ExecutorBrowser, require_arg +from ..webdriver_server import OperaDriverServer +from ..executors import executor_kwargs as base_executor_kwargs +from ..executors.executorselenium import (SeleniumTestharnessExecutor, + SeleniumRefTestExecutor) +from ..executors.executoropera import OperaDriverWdspecExecutor + + +__wptrunner__ = {"product": "opera", + "check_args": "check_args", + "browser": "OperaBrowser", + "executor": {"testharness": "SeleniumTestharnessExecutor", + "reftest": "SeleniumRefTestExecutor", + "wdspec": "OperaDriverWdspecExecutor"}, + "browser_kwargs": "browser_kwargs", + "executor_kwargs": "executor_kwargs", + "env_extras": "env_extras", + "env_options": "env_options"} + + +def check_args(**kwargs): + require_arg(kwargs, "webdriver_binary") + + +def browser_kwargs(test_type, run_info_data, **kwargs): + return {"binary": kwargs["binary"], + "webdriver_binary": kwargs["webdriver_binary"], + "webdriver_args": kwargs.get("webdriver_args")} + + +def executor_kwargs(test_type, server_config, cache_manager, run_info_data, + **kwargs): + from selenium.webdriver import DesiredCapabilities + + executor_kwargs = base_executor_kwargs(test_type, server_config, + cache_manager, **kwargs) + executor_kwargs["close_after_done"] = True + capabilities = dict(DesiredCapabilities.OPERA.items()) + capabilities.setdefault("operaOptions", {})["prefs"] = { + "profile": { + "default_content_setting_values": { + "popups": 1 + } + } + } + for (kwarg, capability) in [("binary", "binary"), ("binary_args", "args")]: + if kwargs[kwarg] is not None: + capabilities["operaOptions"][capability] = kwargs[kwarg] + if test_type == "testharness": + capabilities["operaOptions"]["useAutomationExtension"] = False + capabilities["operaOptions"]["excludeSwitches"] = ["enable-automation"] + if test_type == "wdspec": + capabilities["operaOptions"]["w3c"] = True + executor_kwargs["capabilities"] = capabilities + return executor_kwargs + + +def env_extras(**kwargs): + return [] + + +def env_options(): + return {"host": "web-platform.test", + "bind_hostname": "true"} + + +class OperaBrowser(Browser): + """Opera is backed by operadriver, which is supplied through + ``wptrunner.webdriver.OperaDriverServer``. + """ + + def __init__(self, logger, binary, webdriver_binary="operadriver", + webdriver_args=None): + """Creates a new representation of Opera. The `binary` argument gives + the browser binary to use for testing.""" + Browser.__init__(self, logger) + self.binary = binary + self.server = OperaDriverServer(self.logger, + binary=webdriver_binary, + args=webdriver_args) + + def start(self, **kwargs): + self.server.start(block=False) + + def stop(self, force=False): + self.server.stop(force=force) + + def pid(self): + return self.server.pid + + def is_alive(self): + # TODO(ato): This only indicates the driver is alive, + # and doesn't say anything about whether a browser session + # is active. + return self.server.is_alive() + + def cleanup(self): + self.stop() + + def executor_browser(self): + return ExecutorBrowser, {"webdriver_url": self.server.url} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/environment.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/environment.py index 73b54ceb9f3..e8734405e00 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/environment.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/environment.py @@ -9,8 +9,10 @@ import time from mozlog import get_default_logger, handlers, proxy from wptlogging import LogLevelRewriter +from wptserve.handlers import StringHandler here = os.path.split(__file__)[0] +repo_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir, os.pardir)) serve = None sslutils = None @@ -189,6 +191,14 @@ class TestEnvironment(object): path = os.path.normpath(os.path.join(here, path)) route_builder.add_static(path, format_args, content_type, route) + data = b"" + with open(os.path.join(repo_root, "resources", "testdriver.js"), "rb") as fp: + data += fp.read() + with open(os.path.join(here, "testdriver-extra.js"), "rb") as fp: + data += fp.read() + route_builder.add_handler(b"GET", b"/resources/testdriver.js", + StringHandler(data, "text/javascript")) + for url_base, paths in self.test_paths.iteritems(): if url_base == "/": continue diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py index 27be0c54b78..b33bc428ecb 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py @@ -102,6 +102,7 @@ class TestExecutor(object): test_type = None convert_result = None + supports_testdriver = False def __init__(self, browser, server_config, timeout_multiplier=1, debug_info=None, **kwargs): diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executoredge.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executoredge.py new file mode 100644 index 00000000000..bd6553fadcb --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executoredge.py @@ -0,0 +1,10 @@ +from ..webdriver_server import EdgeDriverServer +from .base import WdspecExecutor, WebDriverProtocol + + +class EdgeDriverProtocol(WebDriverProtocol): + server_cls = EdgeDriverServer + + +class EdgeDriverWdspecExecutor(WdspecExecutor): + protocol_cls = EdgeDriverProtocol diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py index 09030c08573..e2163bb0707 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py @@ -160,8 +160,13 @@ class MarionetteProtocol(Protocol): runner_handle = handles.pop(0) for handle in handles: - self.marionette.switch_to_window(handle) - self.marionette.close() + try: + self.marionette.switch_to_window(handle) + self.marionette.close() + except errors.NoSuchWindowException: + # We might have raced with the previous test to close this + # window, skip it. + pass self.marionette.switch_to_window(runner_handle) if runner_handle != self.runner_handle: diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executoropera.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executoropera.py new file mode 100644 index 00000000000..55f1f0d5959 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executoropera.py @@ -0,0 +1,10 @@ +from ..webdriver_server import OperaDriverServer +from .base import WdspecExecutor, WebDriverProtocol + + +class OperaDriverProtocol(WebDriverProtocol): + server_cls = OperaDriverServer + + +class OperaDriverWdspecExecutor(WdspecExecutor): + protocol_cls = OperaDriverProtocol diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py index 728d3c68222..2e84ab6fd65 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py @@ -1,3 +1,4 @@ +import json import os import socket import sys @@ -159,6 +160,8 @@ class SeleniumRun(object): class SeleniumTestharnessExecutor(TestharnessExecutor): + supports_testdriver = True + def __init__(self, browser, server_config, timeout_multiplier=1, close_after_done=True, capabilities=None, debug_info=None, **kwargs): @@ -169,6 +172,8 @@ class SeleniumTestharnessExecutor(TestharnessExecutor): self.protocol = SeleniumProtocol(self, browser, capabilities) with open(os.path.join(here, "testharness_webdriver.js")) as f: self.script = f.read() + with open(os.path.join(here, "testharness_webdriver_resume.js")) as f: + self.script_resume = f.read() self.close_after_done = close_after_done self.window_id = str(uuid.uuid4()) @@ -193,12 +198,108 @@ class SeleniumTestharnessExecutor(TestharnessExecutor): return (test.result_cls(*data), []) def do_testharness(self, webdriver, url, timeout): - return webdriver.execute_async_script( - self.script % {"abs_url": url, - "url": strip_server(url), - "window_id": self.window_id, - "timeout_multiplier": self.timeout_multiplier, - "timeout": timeout * 1000}) + format_map = {"abs_url": url, + "url": strip_server(url), + "window_id": self.window_id, + "timeout_multiplier": self.timeout_multiplier, + "timeout": timeout * 1000} + + parent = webdriver.current_window_handle + handles = [item for item in webdriver.window_handles if item != parent] + for handle in handles: + try: + webdriver.switch_to_window(handle) + webdriver.close() + except exceptions.NoSuchWindowException: + pass + webdriver.switch_to_window(parent) + + webdriver.execute_script(self.script % format_map) + try: + # Try this, it's in Level 1 but nothing supports it yet + win_s = webdriver.execute_script("return window['%s'];" % self.window_id) + win_obj = json.loads(win_s) + test_window = win_obj["window-fcc6-11e5-b4f8-330a88ab9d7f"] + except: + after = webdriver.window_handles + if len(after) == 2: + test_window = next(iter(set(after) - set([parent]))) + elif after[0] == parent and len(after) > 2: + # Hope the first one here is the test window + test_window = after[1] + else: + raise Exception("unable to find test window") + assert test_window != parent + + handler = CallbackHandler(webdriver, test_window, self.logger) + while True: + result = webdriver.execute_async_script( + self.script_resume % format_map) + done, rv = handler(result) + if done: + break + return rv + + +class CallbackHandler(object): + def __init__(self, webdriver, test_window, logger): + self.webdriver = webdriver + self.test_window = test_window + self.logger = logger + + def __call__(self, result): + self.logger.debug("Got async callback: %s" % result[1]) + try: + attr = getattr(self, "process_%s" % result[1]) + except AttributeError: + raise ValueError("Unknown callback type %r" % result[1]) + else: + return attr(result) + + def process_complete(self, result): + rv = [result[0]] + result[2] + return True, rv + + def process_action(self, result): + parent = self.webdriver.current_window_handle + try: + self.webdriver.switch_to.window(self.test_window) + action = result[2]["action"] + self.logger.debug("Got action: %s" % action) + if action == "click": + selector = result[2]["selector"] + elements = self.webdriver.find_elements_by_css_selector(selector) + if len(elements) == 0: + raise ValueError("Selector matches no elements") + elif len(elements) > 1: + raise ValueError("Selector matches multiple elements") + self.logger.debug("Clicking element: %s" % selector) + try: + elements[0].click() + except (exceptions.ElementNotInteractableException, + exceptions.ElementNotVisibleException) as e: + self._send_message("complete", + "failure", + e) + self.logger.debug("Clicking element failed: %s" % str(e)) + else: + self._send_message("complete", + "success") + self.logger.debug("Clicking element succeeded") + finally: + self.webdriver.switch_to.window(parent) + + return False, None + + def _send_message(self, message_type, status, message=None): + obj = { + "type": "testdriver-%s" % str(message_type), + "status": str(status) + } + if message: + obj["message"] = str(message) + self.webdriver.execute_script("window.postMessage(%s, '*')" % json.dumps(obj)) + class SeleniumRefTestExecutor(RefTestExecutor): diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py index 043fccb1fed..611a4989c39 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py @@ -56,6 +56,7 @@ def run(path, server_config, session_config, timeout=0): "--verbose", # show each individual subtest "--capture", "no", # enable stdout/stderr from tests "--basetemp", cache, # temporary directory + "--showlocals", # display contents of variables in local scope "-p", "no:mozlog", # use the WPT result recorder "-p", "no:cacheprovider", # disable state preservation across invocations path], diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver.js index f5cbff9ef77..22675f0703d 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver.js +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver.js @@ -1,29 +1,23 @@ -var callback = arguments[arguments.length - 1]; window.timeout_multiplier = %(timeout_multiplier)d; -window.addEventListener("message", function f(event) { - if (event.data.type != "complete") { - return; - } - window.removeEventListener("message", f); +window.message_queue = []; - var tests = event.data.tests; - var status = event.data.status; +window.setMessageListener = function(func) { + window.current_listener = func; + window.addEventListener( + "message", + func, + false + ); +}; - var subtest_results = tests.map(function(x) { - return [x.name, x.status, x.message, x.stack] - }); - clearTimeout(timer); - callback(["%(url)s", - status.status, - status.message, - status.stack, - subtest_results]); -}, false); +window.setMessageListener(function(event) { + window.message_queue.push(event); +}); window.win = window.open("%(abs_url)s", "%(window_id)s"); -var timer = setTimeout(function() { +window.timer = setTimeout(function() { window.win.timeout(); window.win.close(); }, %(timeout)s); diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver_resume.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver_resume.js new file mode 100644 index 00000000000..7229777b32e --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver_resume.js @@ -0,0 +1,44 @@ +var callback = arguments[arguments.length - 1]; + +function process_event(event) { + var data = event.data; + + var payload = undefined; + + switch(data.type) { + case "complete": + var tests = event.data.tests; + var status = event.data.status; + + var subtest_results = tests.map(function(x) { + return [x.name, x.status, x.message, x.stack]; + }); + payload = [status.status, + status.message, + status.stack, + subtest_results]; + clearTimeout(window.timer); + break; + + case "action": + window.setMessageListener(function(event) { + window.message_queue.push(event); + }); + payload = data; + break; + } + + callback(["%(url)s", data.type, payload]); +} + +window.removeEventListener("message", window.current_listener); +if (window.message_queue.length) { + var next = window.message_queue.shift(); + process_event(next); +} else { + window.addEventListener( + "message", function f(event) { + window.removeEventListener("message", f); + process_event(event); + }, false); +} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/stability.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/stability.py new file mode 100644 index 00000000000..dc1a1d0fed0 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/stability.py @@ -0,0 +1,279 @@ +import copy +import functools +import imp +import os +import sys +from collections import OrderedDict, defaultdict +from datetime import datetime + +from mozlog import reader +from mozlog.formatters import JSONFormatter, TbplFormatter +from mozlog.handlers import BaseHandler, LogLevelFilter, StreamHandler + +here = os.path.dirname(__file__) +localpaths = imp.load_source("localpaths", os.path.abspath(os.path.join(here, os.pardir, os.pardir, "localpaths.py"))) +from wpt.markdown import markdown_adjust, table + + +class LogActionFilter(BaseHandler): + + """Handler that filters out messages not of a given set of actions. + + Subclasses BaseHandler. + + :param inner: Handler to use for messages that pass this filter + :param actions: List of actions for which to fire the handler + """ + + def __init__(self, inner, actions): + """Extend BaseHandler and set inner and actions props on self.""" + BaseHandler.__init__(self, inner) + self.inner = inner + self.actions = actions + + def __call__(self, item): + """Invoke handler if action is in list passed as constructor param.""" + if item["action"] in self.actions: + return self.inner(item) + + +class LogHandler(reader.LogHandler): + + """Handle updating test and subtest status in log. + + Subclasses reader.LogHandler. + """ + def __init__(self): + self.results = OrderedDict() + + def find_or_create_test(self, data): + test_name = data["test"] + if self.results.get(test_name): + return self.results[test_name] + + test = { + "subtests": OrderedDict(), + "status": defaultdict(int) + } + self.results[test_name] = test + return test + + def find_or_create_subtest(self, data): + test = self.find_or_create_test(data) + subtest_name = data["subtest"] + + if test["subtests"].get(subtest_name): + return test["subtests"][subtest_name] + + subtest = { + "status": defaultdict(int), + "messages": set() + } + test["subtests"][subtest_name] = subtest + + return subtest + + def test_status(self, data): + subtest = self.find_or_create_subtest(data) + subtest["status"][data["status"]] += 1 + if data.get("message"): + subtest["messages"].add(data["message"]) + + def test_end(self, data): + test = self.find_or_create_test(data) + test["status"][data["status"]] += 1 + + +def is_inconsistent(results_dict, iterations): + """Return whether or not a single test is inconsistent.""" + return len(results_dict) > 1 or sum(results_dict.values()) != iterations + + +def process_results(log, iterations): + """Process test log and return overall results and list of inconsistent tests.""" + inconsistent = [] + handler = LogHandler() + reader.handle_log(reader.read(log), handler) + results = handler.results + for test_name, test in results.iteritems(): + if is_inconsistent(test["status"], iterations): + inconsistent.append((test_name, None, test["status"], [])) + for subtest_name, subtest in test["subtests"].iteritems(): + if is_inconsistent(subtest["status"], iterations): + inconsistent.append((test_name, subtest_name, subtest["status"], subtest["messages"])) + return results, inconsistent + + +def err_string(results_dict, iterations): + """Create and return string with errors from test run.""" + rv = [] + total_results = sum(results_dict.values()) + for key, value in sorted(results_dict.items()): + rv.append("%s%s" % + (key, ": %s/%s" % (value, iterations) if value != iterations else "")) + if total_results < iterations: + rv.append("MISSING: %s/%s" % (iterations - total_results, iterations)) + rv = ", ".join(rv) + if is_inconsistent(results_dict, iterations): + rv = "**%s**" % rv + return rv + + +def write_inconsistent(log, inconsistent, iterations): + """Output inconsistent tests to logger.error.""" + log("## Unstable results ##\n") + strings = [( + "`%s`" % markdown_adjust(test), + ("`%s`" % markdown_adjust(subtest)) if subtest else "", + err_string(results, iterations), + ("`%s`" % markdown_adjust(";".join(messages))) if len(messages) else "") + for test, subtest, results, messages in inconsistent] + table(["Test", "Subtest", "Results", "Messages"], strings, log) + + +def write_results(log, results, iterations, pr_number=None, use_details=False): + log("## All results ##\n") + if use_details: + log("
\n") + log("%i %s ran\n\n" % (len(results), + "tests" if len(results) > 1 + else "test")) + + for test_name, test in results.iteritems(): + baseurl = "http://w3c-test.org/submissions" + if "https" in os.path.splitext(test_name)[0].split(".")[1:]: + baseurl = "https://w3c-test.org/submissions" + title = test_name + if use_details: + log("
\n") + if pr_number: + title = "%s" % (baseurl, pr_number, test_name, title) + log('%s\n\n' % title) + else: + log("### %s ###" % title) + strings = [("", err_string(test["status"], iterations), "")] + + strings.extend((( + ("`%s`" % markdown_adjust(subtest_name)) if subtest else "", + err_string(subtest["status"], iterations), + ("`%s`" % markdown_adjust(';'.join(subtest["messages"]))) if len(subtest["messages"]) else "") + for subtest_name, subtest in test["subtests"].items())) + table(["Subtest", "Results", "Messages"], strings, log) + if use_details: + log("
\n") + + if use_details: + log("
\n") + + +def run_step(logger, iterations, restart_after_iteration, kwargs_extras, **kwargs): + import wptrunner + kwargs = copy.deepcopy(kwargs) + + if restart_after_iteration: + kwargs["repeat"] = iterations + else: + kwargs["rerun"] = iterations + + kwargs["pause_after_test"] = False + kwargs.update(kwargs_extras) + + handler = LogActionFilter( + LogLevelFilter( + StreamHandler( + sys.stdout, + TbplFormatter() + ), + "WARNING"), + ["log", "process_output"]) + + # There is a public API for this in the next mozlog + initial_handlers = logger._state.handlers + logger._state.handlers = [] + + with open("raw.log", "wb") as log: + # Setup logging for wptrunner that keeps process output and + # warning+ level logs only + logger.add_handler(handler) + logger.add_handler(StreamHandler(log, JSONFormatter())) + + wptrunner.run_tests(**kwargs) + + logger._state.handlers = initial_handlers + + with open("raw.log", "rb") as log: + results, inconsistent = process_results(log, iterations) + return results, inconsistent, iterations + + +def get_steps(logger, repeat_loop, repeat_restart, kwargs_extras): + steps = [] + for kwargs_extra in kwargs_extras: + if kwargs_extra: + flags_string = " with flags %s" % " ".join( + "%s=%s" % item for item in kwargs_extra.iteritems()) + else: + flags_string = "" + + if repeat_loop: + desc = "Running tests in a loop %d times%s" % (repeat_loop, + flags_string) + steps.append((desc, functools.partial(run_step, logger, repeat_loop, False, kwargs_extra))) + + if repeat_restart: + desc = "Running tests in a loop with restarts %s times%s" % (repeat_restart, + flags_string) + steps.append((desc, functools.partial(run_step, logger, repeat_restart, True, kwargs_extra))) + + return steps + + +def write_summary(logger, step_results, final_result): + for desc, result in step_results: + logger.info('::: %s : %s' % (desc, result)) + logger.info(':::') + if final_result == "PASS": + log = logger.info + elif final_result == "TIMEOUT": + log = logger.warning + else: + log = logger.error + log('::: Test verification %s' % final_result) + + logger.info(':::') + + +def check_stability(logger, repeat_loop=10, repeat_restart=5, chaos_mode=True, max_time=None, + output_results=True, **kwargs): + kwargs_extras = [{}] + if chaos_mode and kwargs["product"] == "firefox": + kwargs_extras.append({"chaos_mode_flags": 3}) + + steps = get_steps(logger, repeat_loop, repeat_restart, kwargs_extras) + + start_time = datetime.now() + step_results = [] + + for desc, step_func in steps: + if max_time and datetime.now() - start_time > max_time: + logger.info("::: Test verification is taking too long: Giving up!") + logger.info("::: So far, all checks passed, but not all checks were run.") + write_summary(logger, step_results, "TIMEOUT") + return 2 + + logger.info(':::') + logger.info('::: Running test verification step "%s"...' % desc) + logger.info(':::') + results, inconsistent, iterations = step_func(**kwargs) + if output_results: + write_results(logger.info, results, iterations) + + if inconsistent: + step_results.append((desc, "FAIL")) + write_inconsistent(logger.info, inconsistent, iterations) + write_summary(logger, step_results, "FAIL") + return 1 + + step_results.append((desc, "PASS")) + + write_summary(logger, step_results, "PASS") diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js new file mode 100644 index 00000000000..856a33edbad --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js @@ -0,0 +1,63 @@ +"use strict"; + +(function(){ + let pending_resolve = null; + let pending_reject = null; + window.addEventListener("message", function(event) { + const data = event.data; + + if (typeof data !== "object" && data !== null) { + return; + } + + if (data.type !== "testdriver-complete") { + return; + } + + if (data.status === "success") { + pending_resolve(); + } else { + pending_reject(); + } + }); + + const get_selector = function(element) { + let selector; + + if (element.id && document.getElementById(element.id) === element) { + const id = element.id; + + selector = "#"; + // escape everything, because it's easy to implement + for (let i = 0, len = id.length; i < len; i++) { + selector += '\\' + id.charCodeAt(i).toString(16) + ' '; + } + } else { + // push and then reverse to avoid O(n) unshift in the loop + let segments = []; + for (let node = element; + node.parentElement; + node = node.parentElement) { + let segment = "*|" + node.localName; + let nth = Array.prototype.indexOf.call(node.parentElement.children, node) + 1; + segments.push(segment + ":nth-child(" + nth + ")"); + } + segments.push(":root"); + segments.reverse(); + + selector = segments.join(" > "); + } + + return selector; + }; + + window.test_driver_internal.click = function(element) { + const selector = get_selector(element); + const pending_promise = new Promise(function(resolve, reject) { + pending_resolve = resolve; + pending_reject = reject; + }); + window.opener.postMessage({"type": "action", "action": "click", "selector": selector}, "*"); + return pending_promise; + }; +})(); diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py index 882ac201c4a..226fc14d655 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py @@ -249,7 +249,7 @@ RunnerManagerState = _RunnerManagerState() class TestRunnerManager(threading.Thread): def __init__(self, suite_name, test_queue, test_source_cls, browser_cls, browser_kwargs, - executor_cls, executor_kwargs, stop_flag, pause_after_test=False, + executor_cls, executor_kwargs, stop_flag, rerun=1, pause_after_test=False, pause_on_unexpected=False, restart_on_unexpected=True, debug_info=None): """Thread that owns a single TestRunner process and any processes required by the TestRunner (e.g. the Firefox binary). @@ -280,6 +280,8 @@ class TestRunnerManager(threading.Thread): self.parent_stop_flag = stop_flag self.child_stop_flag = multiprocessing.Event() + self.rerun = rerun + self.run_count = 0 self.pause_after_test = pause_after_test self.pause_on_unexpected = pause_on_unexpected self.restart_on_unexpected = restart_on_unexpected @@ -503,9 +505,9 @@ class TestRunnerManager(threading.Thread): self.logger.info("No more tests") return None, None, None test = test_group.popleft() + self.run_count = 0 return test, test_group, group_metadata - def run_test(self): assert isinstance(self.state, RunnerManagerState.running) assert self.state.test is not None @@ -517,6 +519,9 @@ class TestRunnerManager(threading.Thread): self.state.group_metadata) self.logger.test_start(self.state.test.id) + if self.rerun > 1: + self.logger.info("Run %d/%d" % (self.run_count, self.rerun)) + self.run_count += 1 self.send_message("run_test", self.state.test) def test_ended(self, test, results): @@ -580,7 +585,7 @@ class TestRunnerManager(threading.Thread): self.logger.info("Pausing until the browser exits") self.send_message("wait") else: - return self.after_test_end(restart_before_next) + return self.after_test_end(test, restart_before_next) def wait_finished(self): assert isinstance(self.state, RunnerManagerState.running) @@ -590,14 +595,19 @@ class TestRunnerManager(threading.Thread): return self.after_test_end(True) - def after_test_end(self, restart): + def after_test_end(self, test, restart): assert isinstance(self.state, RunnerManagerState.running) - test, test_group, group_metadata = self.get_next_test() - if test is None: - return RunnerManagerState.stop() - if test_group != self.state.test_group: - # We are starting a new group of tests, so force a restart - restart = True + if self.run_count == self.rerun: + test, test_group, group_metadata = self.get_next_test() + if test is None: + return RunnerManagerState.stop() + if test_group != self.state.test_group: + # We are starting a new group of tests, so force a restart + restart = True + else: + test = test + test_group = self.state.test_group + group_metadata = self.state.group_metadata if restart: return RunnerManagerState.restarting(test, test_group, group_metadata) else: @@ -686,6 +696,7 @@ class ManagerGroup(object): def __init__(self, suite_name, size, test_source_cls, test_source_kwargs, browser_cls, browser_kwargs, executor_cls, executor_kwargs, + rerun=1, pause_after_test=False, pause_on_unexpected=False, restart_on_unexpected=True, @@ -703,6 +714,7 @@ class ManagerGroup(object): self.pause_on_unexpected = pause_on_unexpected self.restart_on_unexpected = restart_on_unexpected self.debug_info = debug_info + self.rerun = rerun self.pool = set() # Event that is polled by threads so that they can gracefully exit in the face @@ -735,6 +747,7 @@ class ManagerGroup(object): self.executor_cls, self.executor_kwargs, self.stop_flag, + self.rerun, self.pause_after_test, self.pause_on_unexpected, self.restart_on_unexpected, diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/sync.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/sync.py index b201fe7f167..40bd1d7ebb7 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/sync.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/update/sync.py @@ -81,7 +81,8 @@ def copy_wpt_tree(tree, dest, excludes=None, includes=None): shutil.copy2(source_path, dest_path) for source, destination in [("testharness_runner.html", ""), - ("testharnessreport.js", "resources/")]: + ("testharnessreport.js", "resources/"), + ("testdriver-vendor.js", "resources/")]: source_path = os.path.join(here, os.pardir, source) dest_path = os.path.join(dest, destination, os.path.split(source)[1]) shutil.copy2(source_path, dest_path) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py index f78593e4e59..4a3c48c5800 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/webdriver_server.py @@ -11,8 +11,8 @@ import urlparse import mozprocess -__all__ = ["SeleniumServer", "ChromeDriverServer", - "GeckoDriverServer", "InternetExplorerDriverServer", +__all__ = ["SeleniumServer", "ChromeDriverServer", "OperaDriverServer", + "GeckoDriverServer", "InternetExplorerDriverServer", "EdgeDriverServer", "ServoDriverServer", "WebDriverServer"] @@ -137,6 +137,25 @@ class ChromeDriverServer(WebDriverServer): cmd_arg("port", str(self.port)), cmd_arg("url-base", self.base_path) if self.base_path else ""] + self._args +class EdgeDriverServer(WebDriverServer): + default_base_path = "/" + + def __init__(self, logger, binary="microsoftwebdriver.exe", port=None, + base_path="", args=None): + WebDriverServer.__init__( + self, logger, binary, port=port, base_path=base_path, args=args) + + def make_command(self): + return [self.binary, + cmd_arg("port", str(self.port)), + cmd_arg("url-base", self.base_path) if self.base_path else ""] + self._args + +class OperaDriverServer(ChromeDriverServer): + def __init__(self, logger, binary="operadriver", port=None, + base_path="", args=None): + ChromeDriverServer.__init__( + self, logger, binary, port=port, base_path=base_path, args=args) + class EdgeDriverServer(WebDriverServer): def __init__(self, logger, binary="MicrosoftWebDriver.exe", port=None, diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py index c0c6acb7150..b9f7a4c34a5 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py @@ -76,6 +76,9 @@ scheme host and port.""") mode_group.add_argument("--list-tests", action="store_true", default=False, help="List all tests that will run") + mode_group.add_argument("--verify", action="store_true", + default=False, + help="Run a stability check on the selected tests") test_selection_group = parser.add_argument_group("Test Selection") test_selection_group.add_argument("--test-types", action="store", @@ -95,8 +98,10 @@ scheme host and port.""") debugging_group.add_argument('--debugger', const="__default__", nargs="?", help="run under a debugger, e.g. gdb or valgrind") debugging_group.add_argument('--debugger-args', help="arguments to the debugger") + debugging_group.add_argument("--rerun", action="store", type=int, default=1, + help="Number of times to re run each test without restarts") debugging_group.add_argument("--repeat", action="store", type=int, default=1, - help="Number of times to run the tests") + help="Number of times to run the tests, restarting between each run") debugging_group.add_argument("--repeat-until-unexpected", action="store_true", default=None, help="Run tests in a loop until one returns an unexpected result") debugging_group.add_argument('--pause-after-test', action="store_true", default=None, @@ -201,6 +206,11 @@ scheme host and port.""") gecko_group.add_argument("--reftest-screenshot", dest="reftest_screenshot", action="store", choices=["always", "fail", "unexpected"], default="unexpected", help="With --reftest-internal, when to take a screenshot") + gecko_group.add_argument("--chaos", dest="chaos_mode_flags", action="store", + nargs="?", const=0xFFFFFFFF, type=int, + help="Enable chaos mode with the specified feature flag " + "(see http://searchfox.org/mozilla-central/source/mfbt/ChaosMode.h for " + "details). If no value is supplied, all features are activated") servo_group = parser.add_argument_group("Servo-specific") servo_group.add_argument("--user-stylesheet", diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptlogging.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptlogging.py index 1ab6755c435..4d320617859 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptlogging.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptlogging.py @@ -76,7 +76,10 @@ class LoggingWrapper(StringIO): def write(self, data): if isinstance(data, str): - data = data.decode("utf8") + try: + data = data.decode("utf8") + except UnicodeDecodeError: + data = data.encode("string_escape").decode("ascii") if data.endswith("\n"): data = data[:-1] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py index 0c0042fffe3..f34698a6380 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py @@ -123,7 +123,7 @@ def get_pause_after_test(test_loader, **kwargs): if kwargs["pause_after_test"] is None: if kwargs["repeat_until_unexpected"]: return False - if kwargs["repeat"] == 1 and total_tests == 1: + if kwargs["repeat"] == 1 and kwargs["rerun"] == 1 and total_tests == 1: return True return False return kwargs["pause_after_test"] @@ -234,6 +234,17 @@ def run_tests(config, test_paths, product, **kwargs): logger.test_start(test.id) logger.test_end(test.id, status="SKIP") + if test_type == "testharness": + run_tests = {"testharness": []} + for test in test_loader.tests["testharness"]: + if test.testdriver and not executor_cls.supports_testdriver: + logger.test_start(test.id) + logger.test_end(test.id, status="SKIP") + else: + run_tests["testharness"].append(test) + else: + run_tests = test_loader.tests + with ManagerGroup("web-platform-tests", kwargs["processes"], test_source_cls, @@ -242,12 +253,13 @@ def run_tests(config, test_paths, product, **kwargs): browser_kwargs, executor_cls, executor_kwargs, + kwargs["rerun"], kwargs["pause_after_test"], kwargs["pause_on_unexpected"], kwargs["restart_on_unexpected"], kwargs["debug_info"]) as manager_group: try: - manager_group.run(test_type, test_loader.tests) + manager_group.run(test_type, run_tests) except KeyboardInterrupt: logger.critical("Main thread got signal") manager_group.stop() @@ -261,6 +273,12 @@ def run_tests(config, test_paths, product, **kwargs): logger.suite_end() return unexpected_total == 0 + +def check_stability(**kwargs): + import stability + return stability.check_stability(logger, **kwargs) + + def start(**kwargs): if kwargs["list_test_groups"]: list_test_groups(**kwargs) @@ -268,9 +286,12 @@ def start(**kwargs): list_disabled(**kwargs) elif kwargs["list_tests"]: list_tests(**kwargs) + elif kwargs["verify"]: + check_stability(**kwargs) else: return not run_tests(**kwargs) + def main(): """Main entry point when calling from the command line""" kwargs = wptcommandline.parse_args() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py index 86320f8ff84..d283e854205 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py @@ -242,6 +242,27 @@ class TestharnessTest(Test): subtest_result_cls = TestharnessSubtestResult test_type = "testharness" + def __init__(self, tests_root, url, inherit_metadata, test_metadata, + timeout=None, path=None, protocol="http", testdriver=False): + Test.__init__(self, tests_root, url, inherit_metadata, test_metadata, timeout, + path, protocol) + + self.testdriver = testdriver + + @classmethod + def from_manifest(cls, manifest_item, inherit_metadata, test_metadata): + timeout = cls.long_timeout if manifest_item.timeout == "long" else cls.default_timeout + protocol = "https" if hasattr(manifest_item, "https") and manifest_item.https else "http" + testdriver = manifest_item.testdriver if hasattr(manifest_item, "testdriver") else False + return cls(manifest_item.source_file.tests_root, + manifest_item.url, + inherit_metadata, + test_metadata, + timeout=timeout, + path=manifest_item.source_file.path, + protocol=protocol, + testdriver=testdriver) + @property def id(self): return self.url diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py index 31f361cc23b..c962a6cd80a 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py @@ -351,17 +351,15 @@ class ErrorHandler(object): response.set_error(self.status) -class StaticHandler(object): - def __init__(self, path, format_args, content_type, **headers): +class StringHandler(object): + def __init__(self, data, content_type, **headers): """Hander that reads a file from a path and substitutes some fixed data - :param path: Path to the template file to use - :param format_args: Dictionary of values to substitute into the template file + :param data: String to use :param content_type: Content type header to server the response with :param headers: List of headers to send with responses""" - with open(path) as f: - self.data = f.read() % format_args + self.data = data self.resp_headers = [("Content-Type", content_type)] for k, v in headers.iteritems(): @@ -375,3 +373,18 @@ class StaticHandler(object): def __call__(self, request, response): rv = self.handler(request, response) return rv + + +class StaticHandler(StringHandler): + def __init__(self, path, format_args, content_type, **headers): + """Hander that reads a file from a path and substitutes some fixed data + + :param path: Path to the template file to use + :param format_args: Dictionary of values to substitute into the template file + :param content_type: Content type header to server the response with + :param headers: List of headers to send with responses""" + + with open(path) as f: + data = f.read() % format_args + + return super(StaticHandler, self).__init__(data, content_type, **headers) diff --git a/tests/wpt/web-platform-tests/uievents/order-of-events/mouse-events/click-cancel-manual.html b/tests/wpt/web-platform-tests/uievents/order-of-events/mouse-events/click-cancel-manual.html deleted file mode 100644 index d845237526b..00000000000 --- a/tests/wpt/web-platform-tests/uievents/order-of-events/mouse-events/click-cancel-manual.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - Default action is canceled if the click event is canceled. - - - - - - -
    -
  1. Check the following item.
  2. -
  3. Hover over the button.
  4. -
- Check me!
- - - - diff --git a/tests/wpt/web-platform-tests/uievents/order-of-events/mouse-events/click-cancel.html b/tests/wpt/web-platform-tests/uievents/order-of-events/mouse-events/click-cancel.html new file mode 100644 index 00000000000..082c2a0cc3e --- /dev/null +++ b/tests/wpt/web-platform-tests/uievents/order-of-events/mouse-events/click-cancel.html @@ -0,0 +1,37 @@ + + + + + Default action is canceled if the click event is canceled. + + + + + + + + Check me!
+ + + + diff --git a/tests/wpt/web-platform-tests/url/OWNERS b/tests/wpt/web-platform-tests/url/OWNERS index ed98ff26b30..947411d37c2 100644 --- a/tests/wpt/web-platform-tests/url/OWNERS +++ b/tests/wpt/web-platform-tests/url/OWNERS @@ -1,5 +1,4 @@ @mikewest -@tomalec @rubys @xiaojunwu @smola diff --git a/tests/wpt/web-platform-tests/url/data-uri-fragment.html b/tests/wpt/web-platform-tests/url/data-uri-fragment.html new file mode 100644 index 00000000000..e77d96f03d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/url/data-uri-fragment.html @@ -0,0 +1,34 @@ + + +Data URI parsing of fragments + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/url/urlsearchparams-stringifier.html b/tests/wpt/web-platform-tests/url/urlsearchparams-stringifier.html index 5c573baf401..5e885b446a3 100644 --- a/tests/wpt/web-platform-tests/url/urlsearchparams-stringifier.html +++ b/tests/wpt/web-platform-tests/url/urlsearchparams-stringifier.html @@ -116,6 +116,20 @@ test(function() { params = new URLSearchParams('a=&a=b'); assert_equals(params.toString(), 'a=&a=b'); }, 'URLSearchParams.toString'); + +test(() => { + const url = new URL('http://www.example.com/?a=b,c'); + const params = url.searchParams; + + assert_equals(url.toString(), 'http://www.example.com/?a=b,c'); + assert_equals(params.toString(), 'a=b%2Cc'); + + params.append('x', 'y'); + + assert_equals(url.toString(), 'http://www.example.com/?a=b%2Cc&x=y'); + assert_equals(params.toString(), 'a=b%2Cc&x=y'); +}, 'URLSearchParams connected to URL'); + diff --git a/tests/wpt/web-platform-tests/visual-viewport/viewport-dimensions-custom-scrollbars-manual.html b/tests/wpt/web-platform-tests/visual-viewport/viewport-dimensions-custom-scrollbars-manual.html index c0d4b17b13b..8fcbfe1391d 100644 --- a/tests/wpt/web-platform-tests/visual-viewport/viewport-dimensions-custom-scrollbars-manual.html +++ b/tests/wpt/web-platform-tests/visual-viewport/viewport-dimensions-custom-scrollbars-manual.html @@ -66,6 +66,7 @@ var originalWidth = 0; var originalHeight = 0; var originalInnerWidth = 0; + var originalInnerHeight = 0; addManualTestStep( function() {}, @@ -77,7 +78,16 @@ function() { originalWidth = window.visualViewport.width; originalHeight = window.visualViewport.height; + // Remember the inner dimensions here for the next test to + // address an edge case where originalInnerWidth is an odd + // number of pixels. The test expects that at 2x browser-zoom, + // visualViewport.width = innerWidth - customScrollbarThickness + // The equality only holds if originalInnerWidth / innerWidth is + // exactly 2, which is not the case in the aforementioned + // scenario because innerWidth always has to be an integer + // number of CSS pixels. Ditto for the height computation. originalInnerWidth = window.innerWidth; + originalInnerHeight = window.innerHeight; assert_equals( window.visualViewport.width, @@ -100,13 +110,15 @@ 0.1, "Browser zoom to correct level"); + // The custom scrollbars are also 2x larger on the screen, so + // the viewport is smaller than half of the original size. assert_equals( window.visualViewport.width, - window.innerWidth - 20, + originalInnerWidth / 2 - 20, "Custom scrollbar width subtracted from viewport."); assert_equals( window.visualViewport.height, - window.innerHeight - 25, + originalInnerHeight / 2 - 25, "Custom scrollbar height subtracted from viewport."); }, 'With 200% browser zoom', diff --git a/tests/wpt/web-platform-tests/visual-viewport/viewport-dimensions-scrollbars-manual.html b/tests/wpt/web-platform-tests/visual-viewport/viewport-dimensions-scrollbars-manual.html index 17454a3698e..493de254dc0 100644 --- a/tests/wpt/web-platform-tests/visual-viewport/viewport-dimensions-scrollbars-manual.html +++ b/tests/wpt/web-platform-tests/visual-viewport/viewport-dimensions-scrollbars-manual.html @@ -55,6 +55,8 @@ var originalWidth = 0; var originalHeight = 0; var originalInnerWidth = 0; + var originalVisualViewportWidthExpectation = 0; + var originalVisualViewportHeightExpectation = 0; addManualTestStep( function() {}, @@ -67,14 +69,26 @@ originalWidth = window.visualViewport.width; originalHeight = window.visualViewport.height; originalInnerWidth = window.innerWidth; + // Remember the visualViewport size here for the next test to + // address an edge case where originalInnerWidth is an odd + // number of pixels. The test expects that at 2x browser-zoom, + // visualViewport.width = innerWidth - scrollbarThickness / 2.0 + // The equality only holds if originalInnerWidth / innerWidth is + // exactly 2, which is not the case in the aforementioned + // scenario because innerWidth always has to be an integer + // number of CSS pixels. Ditto for the height computation. + originalVisualViewportWidthExpectation = + window.innerWidth - scrollbarThickness; + originalVisualViewportHeightExpectation = + window.innerHeight - scrollbarThickness; assert_equals( window.visualViewport.width, - window.innerWidth - scrollbarThickness, + originalVisualViewportWidthExpectation, "Scrollbar width subtracted from viewport."); assert_equals( window.visualViewport.height, - window.innerHeight - scrollbarThickness, + originalVisualViewportHeightExpectation, "Scrollbar height subtracted from viewport."); }, 'No zoom or scale applied', @@ -92,11 +106,11 @@ // they'll be fewer CSS pixels as the user zooms in. assert_equals( window.visualViewport.width, - window.innerWidth - scrollbarThickness / 2, + originalVisualViewportWidthExpectation / 2, "Scrollbar width subtracted from viewport."); assert_equals( window.visualViewport.height, - window.innerHeight - scrollbarThickness / 2, + originalVisualViewportHeightExpectation / 2, "Scrollbar height subtracted from viewport."); }, 'With 200% browser zoom', diff --git a/tests/wpt/web-platform-tests/wake-lock/interfaces.https.html b/tests/wpt/web-platform-tests/wake-lock/interfaces.https.html index 12eb543f82e..58b43fff1e9 100644 --- a/tests/wpt/web-platform-tests/wake-lock/interfaces.https.html +++ b/tests/wpt/web-platform-tests/wake-lock/interfaces.https.html @@ -1,7 +1,6 @@ Wake Lock API IDL tests - diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-api.https.html b/tests/wpt/web-platform-tests/wake-lock/wakelock-api.https.html new file mode 100644 index 00000000000..bce4e149346 --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-api.https.html @@ -0,0 +1,18 @@ + + +Wake Lock API Test + + + + + diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html new file mode 100644 index 00000000000..440e79394bc --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html @@ -0,0 +1,36 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html.headers new file mode 100644 index 00000000000..1d3769ec794 --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html.headers @@ -0,0 +1 @@ +Feature-Policy: wake-lock 'none' diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html b/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html new file mode 100644 index 00000000000..24502f1ebc7 --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html @@ -0,0 +1,36 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html b/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html new file mode 100644 index 00000000000..36cfaca93a5 --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html @@ -0,0 +1,34 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html new file mode 100644 index 00000000000..83c63fb6086 --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html @@ -0,0 +1,38 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers new file mode 100644 index 00000000000..34b7437443c --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers @@ -0,0 +1 @@ +Feature-Policy: wake-lock * diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html new file mode 100644 index 00000000000..646d8680337 --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html @@ -0,0 +1,37 @@ + + + + + + + + diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers new file mode 100644 index 00000000000..6f05d23550e --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers @@ -0,0 +1 @@ +Feature-Policy: wake-lock 'self' diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-object-is-independent.https.html b/tests/wpt/web-platform-tests/wake-lock/wakelock-object-is-independent.https.html new file mode 100644 index 00000000000..c7818307759 --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-object-is-independent.https.html @@ -0,0 +1,85 @@ + + +WakeLock object is independent + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-onactivechange.https.html b/tests/wpt/web-platform-tests/wake-lock/wakelock-onactivechange.https.html new file mode 100644 index 00000000000..dc5c7ebea15 --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-onactivechange.https.html @@ -0,0 +1,28 @@ + + +Wake Lock 'onactivechange' Test + + + + + diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-type.https.html b/tests/wpt/web-platform-tests/wake-lock/wakelock-type.https.html new file mode 100644 index 00000000000..969e2f2b899 --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-type.https.html @@ -0,0 +1,28 @@ + + +WakeLockType Test + + + + + diff --git a/tests/wpt/web-platform-tests/wasm/wasm_idb_worker.js b/tests/wpt/web-platform-tests/wasm/wasm_idb_worker.js new file mode 100644 index 00000000000..9d36d748ded --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/wasm_idb_worker.js @@ -0,0 +1,26 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +importScripts('/resources/testharness.js'); +importScripts('resources/load_wasm.js'); +importScripts('wasm_indexeddb_test.js'); + +onmessage = function(e) { + if (e.data.command === "load") { + loadFromIndexedDB(e.data.db_name) + .then(res => { + if (res === 2) postMessage("ok"); + else postMessage("error"); + }, + error => postMessage(error)); + } else if (e.data.command === "save") { + createAndSaveToIndexedDB(e.data.db_name) + .then((m) => { + postMessage("ok"); + }, + () => postMessage("error")); + } else { + postMessage("unknown message: " + e.data); + } +} diff --git a/tests/wpt/web-platform-tests/wasm/wasm_indexeddb_test.html b/tests/wpt/web-platform-tests/wasm/wasm_indexeddb_test.https.html similarity index 54% rename from tests/wpt/web-platform-tests/wasm/wasm_indexeddb_test.html rename to tests/wpt/web-platform-tests/wasm/wasm_indexeddb_test.https.html index ec917089d64..320f046426d 100644 --- a/tests/wpt/web-platform-tests/wasm/wasm_indexeddb_test.html +++ b/tests/wpt/web-platform-tests/wasm/wasm_indexeddb_test.https.html @@ -9,11 +9,9 @@ diff --git a/tests/wpt/web-platform-tests/wasm/wasm_indexeddb_test.js b/tests/wpt/web-platform-tests/wasm/wasm_indexeddb_test.js index 301cbd2fa3d..a5a582cd293 100644 --- a/tests/wpt/web-platform-tests/wasm/wasm_indexeddb_test.js +++ b/tests/wpt/web-platform-tests/wasm/wasm_indexeddb_test.js @@ -2,80 +2,117 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -var db_name = 'db'; +var db_name = "db_wasm_test"; var obj_store = 'store'; var module_key = 'my_module'; -function createAndSaveToIndexedDB() { - return new Promise((resolve, reject) => { - createWasmModule() - .then(mod => { - var delete_request = indexedDB.deleteDatabase(db_name); - delete_request.onsuccess = function() { - var open_request = indexedDB.open(db_name); - open_request.onupgradeneeded = function() { - var db = open_request.result; - db.createObjectStore(obj_store); - }; - open_request.onsuccess = function() { - var db = open_request.result; - var tx = db.transaction(obj_store, 'readwrite'); - var store = tx.objectStore(obj_store); - try { - store.put(mod, module_key); - } catch(e) { - reject(e); - return; - } - tx.oncomplete = function() { - resolve(); - }; - tx.onabort = function() { - reject(transaction.error); - }; - }; +function createAndSaveToIndexedDB(db_name) { + return createWasmModule() + .then(mod => new Promise((resolve, reject) => { + var delete_request = indexedDB.deleteDatabase(db_name); + delete_request.onsuccess = function() { + var open_request = indexedDB.open(db_name); + open_request.onupgradeneeded = function() { + var db = open_request.result; + db.createObjectStore(obj_store); }; - }) - .catch(error => reject(error)); - }); -} - -function loadFromIndexedDB(prev) { - return new Promise((resolve, reject) => { - prev.then(() => { - var open_request = indexedDB.open(db_name); - open_request.onsuccess = function() { - var db = open_request.result; - var tx = db.transaction(obj_store); - var store = tx.objectStore(obj_store); - var get_request = store.get(module_key); - get_request.onsuccess = function() { - var mod = get_request.result; - assert_true(mod instanceof WebAssembly.Module); + open_request.onsuccess = function() { + var db = open_request.result; + var tx = db.transaction(obj_store, 'readwrite'); + var store = tx.objectStore(obj_store); try { - var instance = new WebAssembly.Instance(mod); + store.put(mod, module_key); } catch(e) { + db.close(); reject(e); return; } - resolve(instance.exports.increment(1)); + tx.oncomplete = function() { + db.close(); + resolve(); + return; + }; }; }; - }); + })); +} + +function loadFromIndexedDB(db_name) { + var open_request = indexedDB.open(db_name); + + return new Promise((resolve, reject) => { + open_request.onsuccess = function() { + var db = open_request.result; + var tx = db.transaction(obj_store); + var store = tx.objectStore(obj_store); + var get_request = store.get(module_key); + get_request.onsuccess = function() { + var mod = get_request.result; + db.close(); + assert_true(mod instanceof WebAssembly.Module); + try { + var instance = new WebAssembly.Instance(mod); + resolve(instance.exports.increment(1)); + } catch(e) { + reject(e); + } + }; + get_request.onerror = reject; + }; }); } function TestIndexedDBLoadStoreSecure() { - return loadFromIndexedDB(createAndSaveToIndexedDB()) + return createAndSaveToIndexedDB(db_name) + .then(() => loadFromIndexedDB(db_name)) .then(res => assert_equals(res, 2), error => assert_unreached(error)); } function TestIndexedDBLoadStoreInsecure() { - return createAndSaveToIndexedDB() + return createAndSaveToIndexedDB(db_name) .then(assert_unreached, error => { assert_true(error instanceof DOMException); assert_equals(error.name, 'DataCloneError'); }); } + +function SaveToIDBAndLoadInWorker() { + return createAndSaveToIndexedDB(db_name) + .then(() => { + var worker = new Worker("wasm_idb_worker.js"); + return new Promise((resolve, reject) => { + worker.onmessage = function (event) { + if (typeof (event.data) == "string") { + resolve(event.data); + worker.terminate(); + worker = undefined; + } + }; + worker.postMessage({command: "load", db_name: db_name}); + }) + }) +.then(data => assert_equals(data, "ok"), + error => assert_unreached(error)); +} + +function SaveToIDBInWorkerAndLoadInMain() { + var worker = new Worker("wasm_idb_worker.js"); + var ret = new Promise((resolve, reject) => { + worker.onmessage = function (event) { + if (typeof (event.data) == "string") { + resolve(event.data); + worker.terminate(); + worker = undefined; + } + }; + }) + worker.postMessage({command: "save", db_name: db_name}); + return ret + .then(data => assert_equals(data, "ok"), + error => assert_unreached(error)) + .then(() => loadFromIndexedDB(db_name)) + .then(res => assert_equals(res, 2), + assert_unreached); +} diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/animate.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/animate.html index 42570333753..a07103ccc7b 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/animate.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/animate.html @@ -7,6 +7,7 @@ +
@@ -81,15 +82,7 @@ gEmptyKeyframeListTests.forEach(function(subTest) { `(input: ${JSON.stringify(subTest)})`); }); -gPropertyIndexedKeyframesTests.forEach(function(subtest) { - test(function(t) { - var div = createDiv(t); - var anim = div.animate(subtest.input, 2000); - assert_frame_lists_equal(anim.effect.getKeyframes(), subtest.output); - }, 'Element.animate() accepts ' + subtest.desc); -}); - -gKeyframeSequenceTests.forEach(function(subtest) { +gKeyframesTests.forEach(function(subtest) { test(function(t) { var div = createDiv(t); var anim = div.animate(subtest.input, 2000); @@ -100,7 +93,7 @@ gKeyframeSequenceTests.forEach(function(subtest) { gInvalidKeyframesTests.forEach(function(subtest) { test(function(t) { var div = createDiv(t); - assert_throws(subtest.expected, function() { + assert_throws(new TypeError, function() { div.animate(subtest.input, 2000); }); }, 'Element.animate() does not accept ' + subtest.desc); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/idlharness.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/idlharness.html index 213958f1c63..74813e1fc37 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/idlharness.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/idlharness.html @@ -1,11 +1,11 @@ -Animation interface automated IDL tests +Animation IDL + -
diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/idlharness.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/idlharness.html new file mode 100644 index 00000000000..866d5bf8ee5 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/idlharness.html @@ -0,0 +1,80 @@ + + +AnimationEffectTiming and AnimationEffectTimingReadOnly IDL + + + + + + +
+ + + diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/constructor.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/constructor.html new file mode 100644 index 00000000000..ca6dc6eec0c --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/constructor.html @@ -0,0 +1,30 @@ + + +AnimationPlaybackEvent constructor + + + +
+ diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/idlharness.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/idlharness.html new file mode 100644 index 00000000000..f4e3e8cd115 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationPlaybackEvent/idlharness.html @@ -0,0 +1,46 @@ + + +AnimationPlaybackEvent IDL + + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html b/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html deleted file mode 100644 index 94d8de00093..00000000000 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html +++ /dev/null @@ -1,111 +0,0 @@ - - -Default document timeline tests - - - - -
- - diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Document/timeline.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Document/timeline.html new file mode 100644 index 00000000000..b8a530345ad --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Document/timeline.html @@ -0,0 +1,23 @@ + + +Document.timeline + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/idlharness.html b/tests/wpt/web-platform-tests/web-animations/interfaces/DocumentTimeline/idlharness.html similarity index 64% rename from tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/idlharness.html rename to tests/wpt/web-platform-tests/web-animations/interfaces/DocumentTimeline/idlharness.html index 3ec4e9ca2d0..639aa2e97c8 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationTimeline/idlharness.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/DocumentTimeline/idlharness.html @@ -1,6 +1,7 @@ -Web Animations API: DocumentTimeline tests +DocumentTimeline IDL + @@ -22,15 +23,14 @@ interface DocumentTimeline : AnimationTimeline { diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html index 7490cf8c4e2..711b4ed7bd7 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html @@ -1,45 +1,44 @@ -KeyframeEffectReadOnly constructor tests - +KeyframeEffect and KeyframeEffectReadOnly constructor + + +
- diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/copy-constructor.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/copy-constructor.html index bc278389c10..a6b413231e2 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/copy-constructor.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/copy-constructor.html @@ -1,27 +1,106 @@ -KeyframeEffect copy constructor tests +KeyframeEffect and KeyframeEffectReadOnly copy constructor + href="https://w3c.github.io/web-animations/#dom-keyframeeffect-keyframeeffect-source"> +
diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/idlharness.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/idlharness.html new file mode 100644 index 00000000000..c3972349271 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/idlharness.html @@ -0,0 +1,119 @@ + + +KeyframeEffect IDL + + + + + + +
+ + + + + diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/setKeyframes.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/setKeyframes.html index c951411de4e..079e896e69f 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/setKeyframes.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffect/setKeyframes.html @@ -6,6 +6,7 @@ +
@@ -22,15 +23,7 @@ test(function(t) { }); }, 'Keyframes can be replaced with an empty keyframe'); -gPropertyIndexedKeyframesTests.forEach(function(subtest) { - test(function(t) { - var effect = new KeyframeEffect(target, {}); - effect.setKeyframes(subtest.input); - assert_frame_lists_equal(effect.getKeyframes(), subtest.output); - }, 'Keyframes can be replaced with ' + subtest.desc); -}); - -gKeyframeSequenceTests.forEach(function(subtest) { +gKeyframesTests.forEach(function(subtest) { test(function(t) { var effect = new KeyframeEffect(target, {}); effect.setKeyframes(subtest.input); @@ -41,7 +34,7 @@ gKeyframeSequenceTests.forEach(function(subtest) { gInvalidKeyframesTests.forEach(function(subtest) { test(function(t) { var effect = new KeyframeEffect(target, {}); - assert_throws(subtest.expected, function() { + assert_throws(new TypeError, function() { effect.setKeyframes(subtest.input); }); }, 'KeyframeEffect constructor throws with ' + subtest.desc); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffectReadOnly/copy-constructor.html b/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffectReadOnly/copy-constructor.html deleted file mode 100644 index 287ffe1148b..00000000000 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/KeyframeEffectReadOnly/copy-constructor.html +++ /dev/null @@ -1,94 +0,0 @@ - - -KeyframeEffectReadOnly copy constructor tests - - - - - -
- - diff --git a/tests/wpt/web-platform-tests/web-animations/resources/keyframe-tests.js b/tests/wpt/web-platform-tests/web-animations/resources/keyframe-tests.js new file mode 100644 index 00000000000..3aa1c6dba25 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/resources/keyframe-tests.js @@ -0,0 +1,760 @@ +'use strict'; + +// ============================== +// +// Common keyframe test data +// +// ============================== + + +// ------------------------------ +// Composite values +// ------------------------------ + +const gGoodKeyframeCompositeValueTests = [ + 'replace', 'add', 'accumulate', undefined +]; + +const gGoodOptionsCompositeValueTests = [ + 'replace', 'add', 'accumulate' +]; + +const gBadCompositeValueTests = [ + 'unrecognised', 'replace ', 'Replace', null +]; + +// ------------------------------ +// Keyframes +// ------------------------------ + +const gEmptyKeyframeListTests = [ + [], + null, + undefined, +]; + +// Helper methods to make defining computed keyframes more readable. + +const offset = offset => ({ + offset, + computedOffset: offset, +}); + +const computedOffset = computedOffset => ({ + offset: null, + computedOffset, +}); + +const keyframe = (offset, props, easing='linear', composite) => { + // The object spread operator is not yet available in all browsers so we use + // Object.assign instead. + const result = {}; + Object.assign(result, offset, props, { easing }); + if (composite) { + result.composite = composite; + } + return result; +}; + +const gKeyframesTests = [ + + // ----------- Property-indexed keyframes: property handling ----------- + + { + desc: 'a one property two value property-indexed keyframes specification', + input: { left: ['10px', '20px'] }, + output: [keyframe(computedOffset(0), { left: '10px' }), + keyframe(computedOffset(1), { left: '20px' })], + }, + { + desc: 'a one shorthand property two value property-indexed keyframes' + + ' specification', + input: { margin: ['10px', '10px 20px 30px 40px'] }, + output: [keyframe(computedOffset(0), { margin: '10px' }), + keyframe(computedOffset(1), { margin: '10px 20px 30px 40px' })], + }, + { + desc: 'a two property (one shorthand and one of its longhand components)' + + ' two value property-indexed keyframes specification', + input: { marginTop: ['50px', '60px'], + margin: ['10px', '10px 20px 30px 40px'] }, + output: [keyframe(computedOffset(0), + { marginTop: '50px', margin: '10px' }), + keyframe(computedOffset(1), + { marginTop: '60px', margin: '10px 20px 30px 40px' })], + }, + { + desc: 'a two property two value property-indexed keyframes specification', + input: { left: ['10px', '20px'], + top: ['30px', '40px'] }, + output: [keyframe(computedOffset(0), { left: '10px', top: '30px' }), + keyframe(computedOffset(1), { left: '20px', top: '40px' })], + }, + { + desc: 'a two property property-indexed keyframes specification with' + + ' different numbers of values', + input: { left: ['10px', '20px', '30px'], + top: ['40px', '50px'] }, + output: [keyframe(computedOffset(0), { left: '10px', top: '40px' }), + keyframe(computedOffset(0.5), { left: '20px' }), + keyframe(computedOffset(1), { left: '30px', top: '50px' })], + }, + { + desc: 'a property-indexed keyframes specification with an invalid value', + input: { left: ['10px', '20px', '30px', '40px', '50px'], + top: ['15px', '25px', 'invalid', '45px', '55px'] }, + output: [keyframe(computedOffset(0), { left: '10px', top: '15px' }), + keyframe(computedOffset(0.25), { left: '20px', top: '25px' }), + keyframe(computedOffset(0.5), { left: '30px' }), + keyframe(computedOffset(0.75), { left: '40px', top: '45px' }), + keyframe(computedOffset(1), { left: '50px', top: '55px' })], + }, + { + desc: 'a one property two value property-indexed keyframes specification' + + ' that needs to stringify its values', + input: { opacity: [0, 1] }, + output: [keyframe(computedOffset(0), { opacity: '0' }), + keyframe(computedOffset(1), { opacity: '1' })], + }, + { + desc: 'a property-indexed keyframes specification with a CSS variable' + + ' reference', + input: { left: [ 'var(--dist)', 'calc(var(--dist) + 100px)' ] }, + output: [keyframe(computedOffset(0), { left: 'var(--dist)' }), + keyframe(computedOffset(1), { left: 'calc(var(--dist) + 100px)' })] + }, + { + desc: 'a property-indexed keyframes specification with a CSS variable' + + ' reference in a shorthand property', + input: { margin: [ 'var(--dist)', 'calc(var(--dist) + 100px)' ] }, + output: [keyframe(computedOffset(0), + { margin: 'var(--dist)' }), + keyframe(computedOffset(1), + { margin: 'calc(var(--dist) + 100px)' })], + }, + { + desc: 'a one property one value property-indexed keyframes specification', + input: { left: ['10px'] }, + output: [keyframe(computedOffset(1), { left: '10px' })], + }, + { + desc: 'a one property one non-array value property-indexed keyframes' + + ' specification', + input: { left: '10px' }, + output: [keyframe(computedOffset(1), { left: '10px' })], + }, + { + desc: 'a one property two value property-indexed keyframes specification' + + ' where the first value is invalid', + input: { left: ['invalid', '10px'] }, + output: [keyframe(computedOffset(0), {}), + keyframe(computedOffset(1), { left: '10px' })] + }, + { + desc: 'a one property two value property-indexed keyframes specification' + + ' where the second value is invalid', + input: { left: ['10px', 'invalid'] }, + output: [keyframe(computedOffset(0), { left: '10px' }), + keyframe(computedOffset(1), {})] + }, + + // ----------- Property-indexed keyframes: offset handling ----------- + + { + desc: 'a property-indexed keyframe with a single offset', + input: { left: ['10px', '20px', '30px'], offset: 0.5 }, + output: [keyframe(offset(0.5), { left: '10px' }), + keyframe(computedOffset(0.75), { left: '20px' }), + keyframe(computedOffset(1), { left: '30px' })], + }, + { + desc: 'a property-indexed keyframe with an array of offsets', + input: { left: ['10px', '20px', '30px'], offset: [ 0.1, 0.25, 0.8 ] }, + output: [keyframe(offset(0.1), { left: '10px' }), + keyframe(offset(0.25), { left: '20px' }), + keyframe(offset(0.8), { left: '30px' })], + }, + { + desc: 'a property-indexed keyframe with an array of offsets that is too' + + ' short', + input: { left: ['10px', '20px', '30px'], offset: [ 0, 0.25 ] }, + output: [keyframe(offset(0), { left: '10px' }), + keyframe(offset(0.25), { left: '20px' }), + keyframe(computedOffset(1), { left: '30px' })], + }, + { + desc: 'a property-indexed keyframe with an array of offsets that is too' + + ' long', + input: { left: ['10px', '20px', '30px'], + offset: [ 0, 0.25, 0.5, 0.75, 1 ] }, + output: [keyframe(offset(0), { left: '10px' }), + keyframe(offset(0.25), { left: '20px' }), + keyframe(offset(0.5), { left: '30px' })], + }, + { + desc: 'a property-indexed keyframe with an empty array of offsets', + input: { left: ['10px', '20px', '30px'], offset: [] }, + output: [keyframe(computedOffset(0), { left: '10px' }), + keyframe(computedOffset(0.5), { left: '20px' }), + keyframe(computedOffset(1), { left: '30px' })], + }, + { + desc: 'a property-indexed keyframe with an array of offsets with an' + + ' embedded null value', + input: { left: ['10px', '20px', '30px'], + offset: [ 0, null, 0.5 ] }, + output: [keyframe(offset(0), { left: '10px' }), + keyframe(computedOffset(0.25), { left: '20px' }), + keyframe(offset(0.5), { left: '30px' })], + }, + { + desc: 'a property-indexed keyframe with an array of offsets with a' + + ' trailing null value', + input: { left: ['10px', '20px', '30px'], + offset: [ 0, 0.25, null ] }, + output: [keyframe(offset(0), { left: '10px' }), + keyframe(offset(0.25), { left: '20px' }), + keyframe(computedOffset(1), { left: '30px' })], + }, + { + desc: 'a property-indexed keyframe with an array of offsets with leading' + + ' and trailing null values', + input: { left: ['10px', '20px', '30px'], + offset: [ null, 0.25, null ] }, + output: [keyframe(computedOffset(0), { left: '10px' }), + keyframe(offset(0.25), { left: '20px' }), + keyframe(computedOffset(1), { left: '30px' })], + }, + { + desc: 'a property-indexed keyframe with an array of offsets with' + + ' adjacent null values', + input: { left: ['10px', '20px', '30px'], + offset: [ null, null, 0.5 ] }, + output: [keyframe(computedOffset(0), { left: '10px' }), + keyframe(computedOffset(0.25), { left: '20px' }), + keyframe(offset(0.5), { left: '30px' })], + }, + { + desc: 'a property-indexed keyframe with an array of offsets with' + + ' all null values (and too many at that)', + input: { left: ['10px', '20px', '30px'], + offset: [ null, null, null, null, null ] }, + output: [keyframe(computedOffset(0), { left: '10px' }), + keyframe(computedOffset(0.5), { left: '20px' }), + keyframe(computedOffset(1), { left: '30px' })], + }, + { + desc: 'a property-indexed keyframe with a single null offset', + input: { left: ['10px', '20px', '30px'], offset: null }, + output: [keyframe(computedOffset(0), { left: '10px' }), + keyframe(computedOffset(0.5), { left: '20px' }), + keyframe(computedOffset(1), { left: '30px' })], + }, + { + desc: 'a property-indexed keyframe with an array of offsets that is not' + + ' strictly ascending in the unused part of the array', + input: { left: ['10px', '20px', '30px'], + offset: [ 0, 0.2, 0.8, 0.6 ] }, + output: [keyframe(offset(0), { left: '10px' }), + keyframe(offset(0.2), { left: '20px' }), + keyframe(offset(0.8), { left: '30px' })], + }, + + // ----------- Property-indexed keyframes: easing handling ----------- + + { + desc: 'a property-indexed keyframe without any specified easing', + input: { left: ['10px', '20px', '30px'] }, + output: [keyframe(computedOffset(0), { left: '10px' }, 'linear'), + keyframe(computedOffset(0.5), { left: '20px' }, 'linear'), + keyframe(computedOffset(1), { left: '30px' }, 'linear')], + }, + { + desc: 'a property-indexed keyframe with a single easing', + input: { left: ['10px', '20px', '30px'], easing: 'ease-in' }, + output: [keyframe(computedOffset(0), { left: '10px' }, 'ease-in'), + keyframe(computedOffset(0.5), { left: '20px' }, 'ease-in'), + keyframe(computedOffset(1), { left: '30px' }, 'ease-in')], + }, + { + desc: 'a property-indexed keyframe with an array of easings', + input: { left: ['10px', '20px', '30px'], + easing: ['ease-in', 'ease-out', 'ease-in-out'] }, + output: [keyframe(computedOffset(0), { left: '10px' }, 'ease-in'), + keyframe(computedOffset(0.5), { left: '20px' }, 'ease-out'), + keyframe(computedOffset(1), { left: '30px' }, 'ease-in-out')], + }, + { + desc: 'a property-indexed keyframe with an array of easings that is too' + + ' short', + input: { left: ['10px', '20px', '30px'], + easing: ['ease-in', 'ease-out'] }, + output: [keyframe(computedOffset(0), { left: '10px' }, 'ease-in'), + keyframe(computedOffset(0.5), { left: '20px' }, 'ease-out'), + keyframe(computedOffset(1), { left: '30px' }, 'ease-in')], + }, + { + desc: 'a property-indexed keyframe with a single-element array of' + + ' easings', + input: { left: ['10px', '20px', '30px'], easing: ['ease-in'] }, + output: [keyframe(computedOffset(0), { left: '10px' }, 'ease-in'), + keyframe(computedOffset(0.5), { left: '20px' }, 'ease-in'), + keyframe(computedOffset(1), { left: '30px' }, 'ease-in')], + }, + { + desc: 'a property-indexed keyframe with an empty array of easings', + input: { left: ['10px', '20px', '30px'], easing: [] }, + output: [keyframe(computedOffset(0), { left: '10px' }, 'linear'), + keyframe(computedOffset(0.5), { left: '20px' }, 'linear'), + keyframe(computedOffset(1), { left: '30px' }, 'linear')], + }, + { + desc: 'a property-indexed keyframe with an array of easings that is too' + + ' long', + input: { left: ['10px', '20px', '30px'], + easing: ['steps(1)', 'steps(2)', 'steps(3)', 'steps(4)'] }, + output: [keyframe(computedOffset(0), { left: '10px' }, 'steps(1)'), + keyframe(computedOffset(0.5), { left: '20px' }, 'steps(2)'), + keyframe(computedOffset(1), { left: '30px' }, 'steps(3)')], + }, + + // ----------- Property-indexed keyframes: composite handling ----------- + + { + desc: 'a property-indexed keyframe with a single composite operation', + input: { left: ['10px', '20px', '30px'], composite: 'add' }, + output: [keyframe(computedOffset(0), { left: '10px' }, 'linear', 'add'), + keyframe(computedOffset(0.5), { left: '20px' }, 'linear', 'add'), + keyframe(computedOffset(1), { left: '30px' }, 'linear', 'add')], + }, + { + desc: 'a property-indexed keyframe with a composite array', + input: { left: ['10px', '20px', '30px'], + composite: ['add', 'replace', 'accumulate'] }, + output: [keyframe(computedOffset(0), { left: '10px' }, + 'linear', 'add'), + keyframe(computedOffset(0.5), { left: '20px' }, + 'linear', 'replace'), + keyframe(computedOffset(1), { left: '30px' }, + 'linear', 'accumulate')], + }, + { + desc: 'a property-indexed keyframe with a composite array that is too' + + ' short', + input: { left: ['10px', '20px', '30px', '40px', '50px'], + composite: ['add', 'replace'] }, + output: [keyframe(computedOffset(0), { left: '10px' }, + 'linear', 'add'), + keyframe(computedOffset(0.25), { left: '20px' }, + 'linear', 'replace'), + keyframe(computedOffset(0.5), { left: '30px' }, + 'linear', 'add'), + keyframe(computedOffset(0.75), { left: '40px' }, + 'linear', 'replace'), + keyframe(computedOffset(1), { left: '50px' }, + 'linear', 'add')], + }, + { + desc: 'a property-indexed keyframe with a composite array that is too' + + ' long', + input: { left: ['10px', '20px'], + composite: ['add', 'replace', 'accumulate'] }, + output: [keyframe(computedOffset(0), { left: '10px' }, + 'linear', 'add'), + keyframe(computedOffset(1), { left: '20px' }, + 'linear', 'replace')], + }, + { + desc: 'a property-indexed keyframe with a single-element composite array', + input: { left: ['10px', '20px', '30px'], + composite: ['add'] }, + output: [keyframe(computedOffset(0), { left: '10px' }, 'linear', 'add'), + keyframe(computedOffset(0.5), { left: '20px' }, 'linear', 'add'), + keyframe(computedOffset(1), { left: '30px' }, 'linear', 'add')], + }, + + // ----------- Keyframe sequence: property handling ----------- + + { + desc: 'a one property one keyframe sequence', + input: [{ offset: 1, left: '10px' }], + output: [keyframe(offset(1), { left: '10px' })], + }, + { + desc: 'a one property two keyframe sequence', + input: [{ offset: 0, left: '10px' }, + { offset: 1, left: '20px' }], + output: [keyframe(offset(0), { left: '10px' }), + keyframe(offset(1), { left: '20px' })], + }, + { + desc: 'a two property two keyframe sequence', + input: [{ offset: 0, left: '10px', top: '30px' }, + { offset: 1, left: '20px', top: '40px' }], + output: [keyframe(offset(0), { left: '10px', top: '30px' }), + keyframe(offset(1), { left: '20px', top: '40px' })], + }, + { + desc: 'a one shorthand property two keyframe sequence', + input: [{ offset: 0, margin: '10px' }, + { offset: 1, margin: '20px 30px 40px 50px' }], + output: [keyframe(offset(0), { margin: '10px' }), + keyframe(offset(1), { margin: '20px 30px 40px 50px' })], + }, + { + desc: 'a two property (a shorthand and one of its component longhands)' + + ' two keyframe sequence', + input: [{ offset: 0, margin: '10px', marginTop: '20px' }, + { offset: 1, marginTop: '70px', margin: '30px 40px 50px 60px' }], + output: [keyframe(offset(0), { margin: '10px', marginTop: '20px' }), + keyframe(offset(1), { marginTop: '70px', + margin: '30px 40px 50px 60px' })], + }, + { + desc: 'a two property keyframe sequence where one property is missing' + + ' from the first keyframe', + input: [{ offset: 0, left: '10px' }, + { offset: 1, left: '20px', top: '30px' }], + output: [keyframe(offset(0), { left: '10px' }), + keyframe(offset(1), { left: '20px', top: '30px' })], + }, + { + desc: 'a two property keyframe sequence where one property is missing' + + ' from the last keyframe', + input: [{ offset: 0, left: '10px', top: '20px' }, + { offset: 1, left: '30px' }], + output: [keyframe(offset(0), { left: '10px', top: '20px' }), + keyframe(offset(1), { left: '30px' })], + }, + { + desc: 'a one property two keyframe sequence that needs to stringify' + + ' its values', + input: [{ offset: 0, opacity: 0 }, + { offset: 1, opacity: 1 }], + output: [keyframe(offset(0), { opacity: '0' }), + keyframe(offset(1), { opacity: '1' })], + }, + { + desc: 'a keyframe sequence with a CSS variable reference', + input: [{ left: 'var(--dist)' }, + { left: 'calc(var(--dist) + 100px)' }], + output: [keyframe(computedOffset(0), { left: 'var(--dist)' }), + keyframe(computedOffset(1), { left: 'calc(var(--dist) + 100px)' })] + }, + { + desc: 'a keyframe sequence with a CSS variable reference in a shorthand' + + ' property', + input: [{ margin: 'var(--dist)' }, + { margin: 'calc(var(--dist) + 100px)' }], + output: [keyframe(computedOffset(0), + { margin: 'var(--dist)' }), + keyframe(computedOffset(1), + { margin: 'calc(var(--dist) + 100px)' })], + }, + + // ----------- Keyframe sequence: offset handling ----------- + + { + desc: 'a keyframe sequence with duplicate values for a given interior' + + ' offset', + input: [{ offset: 0.0, left: '10px' }, + { offset: 0.5, left: '20px' }, + { offset: 0.5, left: '30px' }, + { offset: 0.5, left: '40px' }, + { offset: 1.0, left: '50px' }], + output: [keyframe(offset(0), { left: '10px' }), + keyframe(offset(0.5), { left: '20px' }), + keyframe(offset(0.5), { left: '30px' }), + keyframe(offset(0.5), { left: '40px' }), + keyframe(offset(1), { left: '50px' })], + }, + { + desc: 'a keyframe sequence with duplicate values for offsets 0 and 1', + input: [{ offset: 0, left: '10px' }, + { offset: 0, left: '20px' }, + { offset: 0, left: '30px' }, + { offset: 1, left: '40px' }, + { offset: 1, left: '50px' }, + { offset: 1, left: '60px' }], + output: [keyframe(offset(0), { left: '10px' }), + keyframe(offset(0), { left: '20px' }), + keyframe(offset(0), { left: '30px' }), + keyframe(offset(1), { left: '40px' }), + keyframe(offset(1), { left: '50px' }), + keyframe(offset(1), { left: '60px' })], + }, + { + desc: 'a two property four keyframe sequence', + input: [{ offset: 0, left: '10px' }, + { offset: 0, top: '20px' }, + { offset: 1, top: '30px' }, + { offset: 1, left: '40px' }], + output: [keyframe(offset(0), { left: '10px' }), + keyframe(offset(0), { top: '20px' }), + keyframe(offset(1), { top: '30px' }), + keyframe(offset(1), { left: '40px' })], + }, + { + desc: 'a single keyframe sequence with omitted offset', + input: [{ left: '10px' }], + output: [keyframe(computedOffset(1), { left: '10px' })], + }, + { + desc: 'a single keyframe sequence with null offset', + input: [{ offset: null, left: '10px' }], + output: [keyframe(computedOffset(1), { left: '10px' })], + }, + { + desc: 'a single keyframe sequence with string offset', + input: [{ offset: '0.5', left: '10px' }], + output: [keyframe(offset(0.5), { left: '10px' })], + }, + { + desc: 'a one property keyframe sequence with some omitted offsets', + input: [{ offset: 0.00, left: '10px' }, + { offset: 0.25, left: '20px' }, + { left: '30px' }, + { left: '40px' }, + { offset: 1.00, left: '50px' }], + output: [keyframe(offset(0), { left: '10px' }), + keyframe(offset(0.25), { left: '20px' }), + keyframe(computedOffset(0.5), { left: '30px' }), + keyframe(computedOffset(0.75), { left: '40px' }), + keyframe(offset(1), { left: '50px' })], + }, + { + desc: 'a one property keyframe sequence with some null offsets', + input: [{ offset: 0.00, left: '10px' }, + { offset: 0.25, left: '20px' }, + { offset: null, left: '30px' }, + { offset: null, left: '40px' }, + { offset: 1.00, left: '50px' }], + output: [keyframe(offset(0), { left: '10px' }), + keyframe(offset(0.25), { left: '20px' }), + keyframe(computedOffset(0.5), { left: '30px' }), + keyframe(computedOffset(0.75), { left: '40px' }), + keyframe(offset(1), { left: '50px' })], + }, + { + desc: 'a two property keyframe sequence with some omitted offsets', + input: [{ offset: 0.00, left: '10px', top: '20px' }, + { offset: 0.25, left: '30px' }, + { left: '40px' }, + { left: '50px', top: '60px' }, + { offset: 1.00, left: '70px', top: '80px' }], + output: [keyframe(offset(0), { left: '10px', top: '20px' }), + keyframe(offset(0.25), { left: '30px' }), + keyframe(computedOffset(0.5), { left: '40px' }), + keyframe(computedOffset(0.75), { left: '50px', top: '60px' }), + keyframe(offset(1), { left: '70px', top: '80px' })], + }, + { + desc: 'a one property keyframe sequence with all omitted offsets', + input: [{ left: '10px' }, + { left: '20px' }, + { left: '30px' }, + { left: '40px' }, + { left: '50px' }], + output: [keyframe(computedOffset(0), { left: '10px' }), + keyframe(computedOffset(0.25), { left: '20px' }), + keyframe(computedOffset(0.5), { left: '30px' }), + keyframe(computedOffset(0.75), { left: '40px' }), + keyframe(computedOffset(1), { left: '50px' })], + }, + + // ----------- Keyframe sequence: easing handling ----------- + + { + desc: 'a keyframe sequence with different easing values, but the same' + + ' easing value for a given offset', + input: [{ offset: 0.0, easing: 'ease', left: '10px'}, + { offset: 0.0, easing: 'ease', top: '20px'}, + { offset: 0.5, easing: 'linear', left: '30px' }, + { offset: 0.5, easing: 'linear', top: '40px' }, + { offset: 1.0, easing: 'step-end', left: '50px' }, + { offset: 1.0, easing: 'step-end', top: '60px' }], + output: [keyframe(offset(0), { left: '10px' }, 'ease'), + keyframe(offset(0), { top: '20px' }, 'ease'), + keyframe(offset(0.5), { left: '30px' }, 'linear'), + keyframe(offset(0.5), { top: '40px' }, 'linear'), + keyframe(offset(1), { left: '50px' }, 'steps(1)'), + keyframe(offset(1), { top: '60px' }, 'steps(1)')], + }, + + // ----------- Keyframe sequence: composite handling ----------- + + { + desc: 'a keyframe sequence with different composite values, but the' + + ' same composite value for a given offset', + input: [{ offset: 0.0, composite: 'replace', left: '10px' }, + { offset: 0.0, composite: 'replace', top: '20px' }, + { offset: 0.5, composite: 'add', left: '30px' }, + { offset: 0.5, composite: 'add', top: '40px' }, + { offset: 1.0, composite: 'replace', left: '50px' }, + { offset: 1.0, composite: 'replace', top: '60px' }], + output: [keyframe(offset(0), { left: '10px' }, 'linear', 'replace'), + keyframe(offset(0), { top: '20px' }, 'linear', 'replace'), + keyframe(offset(0.5), { left: '30px' }, 'linear', 'add'), + keyframe(offset(0.5), { top: '40px' }, 'linear', 'add'), + keyframe(offset(1), { left: '50px' }, 'linear', 'replace'), + keyframe(offset(1), { top: '60px' }, 'linear', 'replace')], + }, +]; + +const gInvalidKeyframesTests = [ + { + desc: 'keyframes with an out-of-bounded positive offset', + input: [ { opacity: 0 }, + { opacity: 0.5, offset: 2 }, + { opacity: 1 } ], + }, + { + desc: 'keyframes with an out-of-bounded negative offset', + input: [ { opacity: 0 }, + { opacity: 0.5, offset: -1 }, + { opacity: 1 } ], + }, + { + desc: 'property-indexed keyframes not loosely sorted by offset', + input: { opacity: [ 0, 1 ], offset: [ 1, 0 ] }, + }, + { + desc: 'property-indexed keyframes not loosely sorted by offset even' + + ' though not all offsets are specified', + input: { opacity: [ 0, 0.5, 1 ], offset: [ 0.5, 0 ] }, + }, + { + desc: 'property-indexed keyframes with offsets out of range', + input: { opacity: [ 0, 0.5, 1 ], offset: [ 0, 1.1 ] }, + }, + { + desc: 'keyframes not loosely sorted by offset', + input: [ { opacity: 0, offset: 1 }, + { opacity: 1, offset: 0 } ], + }, + { + desc: 'property-indexed keyframes with an invalid easing value', + input: { opacity: [ 0, 0.5, 1 ], + easing: 'inherit' }, + }, + { + desc: 'property-indexed keyframes with an invalid easing value as one of' + + ' the array values', + input: { opacity: [ 0, 0.5, 1 ], + easing: [ 'ease-in', 'inherit' ] }, + }, + { + desc: 'property-indexed keyframe with an invalid easing in the unused' + + ' part of the array of easings', + input: { left: ['10px', '20px', '30px'], + easing: ['steps(1)', 'steps(2)', 'steps(3)', 'invalid'] }, + }, + { + desc: 'empty property-indexed keyframe with an invalid easing', + input: { easing: 'invalid' }, + }, + { + desc: 'empty property-indexed keyframe with an invalid easings array', + input: { easing: ['invalid'] }, + }, + { + desc: 'a keyframe sequence with an invalid easing value', + input: [ { opacity: 0, easing: 'jumpy' }, + { opacity: 1 } ], + }, + { + desc: 'property-indexed keyframes with an invalid composite value', + input: { opacity: [ 0, 0.5, 1 ], + composite: 'alternate' }, + }, + { + desc: 'property-indexed keyframes with an invalid composite value as one' + + ' of the array values', + input: { opacity: [ 0, 0.5, 1 ], + composite: [ 'add', 'alternate' ] }, + }, + { + desc: 'keyframes with an invalid composite value', + input: [ { opacity: 0, composite: 'alternate' }, + { opacity: 1 } ], + }, +]; + +// ------------------------------ +// KeyframeEffectOptions +// ------------------------------ + +const gKeyframeEffectOptionTests = [ + { + desc: 'an empty KeyframeEffectOptions object', + input: { }, + expected: { }, + }, + { + desc: 'a normal KeyframeEffectOptions object', + input: { delay: 1000, + fill: 'auto', + iterations: 5.5, + duration: 'auto', + direction: 'alternate' }, + expected: { delay: 1000, + fill: 'auto', + iterations: 5.5, + duration: 'auto', + direction: 'alternate' }, + }, + { + desc: 'a double value', + input: 3000, + expected: { duration: 3000 }, + }, + { + desc: '+Infinity', + input: Infinity, + expected: { duration: Infinity }, + }, + { + desc: 'an Infinity duration', + input: { duration: Infinity }, + expected: { duration: Infinity }, + }, + { + desc: 'an auto duration', + input: { duration: 'auto' }, + expected: { duration: 'auto' }, + }, + { + desc: 'an Infinity iterations', + input: { iterations: Infinity }, + expected: { iterations: Infinity }, + }, + { + desc: 'an auto fill', + input: { fill: 'auto' }, + expected: { fill: 'auto' }, + }, + { + desc: 'a forwards fill', + input: { fill: 'forwards' }, + expected: { fill: 'forwards' }, + } +]; + +const gInvalidKeyframeEffectOptionTests = [ + { desc: '-Infinity', input: -Infinity }, + { desc: 'NaN', input: NaN }, + { desc: 'a negative value', input: -1 }, + { desc: 'a negative Infinity duration', input: { duration: -Infinity } }, + { desc: 'a NaN duration', input: { duration: NaN } }, + { desc: 'a negative duration', input: { duration: -1 } }, + { desc: 'a string duration', input: { duration: 'merrychristmas' } }, + { desc: 'a negative Infinity iterations', input: { iterations: -Infinity} }, + { desc: 'a NaN iterations', input: { iterations: NaN } }, + { desc: 'a negative iterations', input: { iterations: -1 } }, + { desc: 'a blank easing', input: { easing: '' } }, + { desc: 'an unrecognized easing', input: { easing: 'unrecognised' } }, + { desc: 'an \'initial\' easing', input: { easing: 'initial' } }, + { desc: 'an \'inherit\' easing', input: { easing: 'inherit' } }, + { desc: 'a variable easing', input: { easing: 'var(--x)' } }, + { desc: 'a multi-value easing', input: { easing: 'ease-in-out, ease-out' } }, +]; diff --git a/tests/wpt/web-platform-tests/web-animations/resources/keyframe-utils.js b/tests/wpt/web-platform-tests/web-animations/resources/keyframe-utils.js index 06089734d5f..971e82ed81d 100644 --- a/tests/wpt/web-platform-tests/web-animations/resources/keyframe-utils.js +++ b/tests/wpt/web-platform-tests/web-animations/resources/keyframe-utils.js @@ -1,6 +1,11 @@ -"use strict"; +'use strict'; + +// ======================================= +// +// Utility functions for testing keyframes +// +// ======================================= -// Utility functions and common keyframe test data. // ------------------------------ // Helper functions @@ -12,543 +17,18 @@ * @param {Array.} b - expected computed keyframes */ function assert_frame_lists_equal(a, b) { - assert_equals(a.length, b.length, "number of frames"); - for (var i = 0; i < Math.min(a.length, b.length); i++) { - assert_frames_equal(a[i], b[i], "ComputedKeyframe #" + i); + assert_equals(a.length, b.length, 'number of frames'); + for (let i = 0; i < Math.min(a.length, b.length); i++) { + assert_frames_equal(a[i], b[i], `ComputedKeyframe #${i}`); } } -/** Helper */ +/** Helper for assert_frame_lists_equal */ function assert_frames_equal(a, b, name) { assert_equals(Object.keys(a).sort().toString(), Object.keys(b).sort().toString(), - "properties on " + name); - for (var p in a) { - assert_equals(a[p], b[p], "value for '" + p + "' on " + name); + `properties on ${name} should match`); + for (const p in a) { + assert_equals(a[p], b[p], `value for '${p}' on ${name}`); } } - -// ------------------------------ -// Composite values -// ------------------------------ - -var gGoodKeyframeCompositeValueTests = [ - "replace", "add", "accumulate", undefined -]; - -var gGoodOptionsCompositeValueTests = [ - "replace", "add", "accumulate" -]; - -var gBadCompositeValueTests = [ - "unrecognised", "replace ", "Replace", null -]; - -// ------------------------------ -// Keyframes -// ------------------------------ - -var gEmptyKeyframeListTests = [ - [], - null, - undefined, -]; - -var gPropertyIndexedKeyframesTests = [ - { desc: "a one property two value property-indexed keyframes specification", - input: { left: ["10px", "20px"] }, - output: [{ offset: null, computedOffset: 0, easing: "linear", - left: "10px" }, - { offset: null, computedOffset: 1, easing: "linear", - left: "20px" }] }, - { desc: "a one shorthand property two value property-indexed keyframes" - + " specification", - input: { margin: ["10px", "10px 20px 30px 40px"] }, - output: [{ offset: null, computedOffset: 0, easing: "linear", - margin: "10px" }, - { offset: null, computedOffset: 1, easing: "linear", - margin: "10px 20px 30px 40px" }] }, - { desc: "a two property (one shorthand and one of its longhand components)" - + " two value property-indexed keyframes specification", - input: { marginTop: ["50px", "60px"], - margin: ["10px", "10px 20px 30px 40px"] }, - output: [{ offset: null, computedOffset: 0, easing: "linear", - marginTop: "50px", margin: "10px" }, - { offset: null, computedOffset: 1, easing: "linear", - marginTop: "60px", margin: "10px 20px 30px 40px" }] }, - { desc: "a two property two value property-indexed keyframes specification", - input: { left: ["10px", "20px"], - top: ["30px", "40px"] }, - output: [{ offset: null, computedOffset: 0, easing: "linear", - left: "10px", top: "30px" }, - { offset: null, computedOffset: 1, easing: "linear", - left: "20px", top: "40px" }] }, - { desc: "a two property property-indexed keyframes specification with" - + " different numbers of values", - input: { left: ["10px", "20px", "30px"], - top: ["40px", "50px"] }, - output: [{ offset: null, computedOffset: 0.0, easing: "linear", - left: "10px", top: "40px" }, - { offset: null, computedOffset: 0.5, easing: "linear", - left: "20px" }, - { offset: null, computedOffset: 1.0, easing: "linear", - left: "30px", top: "50px" }] }, - { desc: "a property-indexed keyframes specification with an invalid value", - input: { left: ["10px", "20px", "30px", "40px", "50px"], - top: ["15px", "25px", "invalid", "45px", "55px"] }, - output: [{ offset: null, computedOffset: 0.00, easing: "linear", - left: "10px", top: "15px" }, - { offset: null, computedOffset: 0.25, easing: "linear", - left: "20px", top: "25px" }, - { offset: null, computedOffset: 0.50, easing: "linear", - left: "30px" }, - { offset: null, computedOffset: 0.75, easing: "linear", - left: "40px", top: "45px" }, - { offset: null, computedOffset: 1.00, easing: "linear", - left: "50px", top: "55px" }] }, - { desc: "a one property two value property-indexed keyframes specification" - + " that needs to stringify its values", - input: { opacity: [0, 1] }, - output: [{ offset: null, computedOffset: 0, easing: "linear", - opacity: "0" }, - { offset: null, computedOffset: 1, easing: "linear", - opacity: "1" }] }, - { desc: "a property-indexed keyframes specification with a CSS variable" - + " reference", - input: { left: [ "var(--dist)", "calc(var(--dist) + 100px)" ] }, - output: [{ offset: null, computedOffset: 0.0, easing: "linear", - left: "var(--dist)" }, - { offset: null, computedOffset: 1.0, easing: "linear", - left: "calc(var(--dist) + 100px)" }] }, - { desc: "a property-indexed keyframes specification with a CSS variable" - + " reference in a shorthand property", - input: { margin: [ "var(--dist)", "calc(var(--dist) + 100px)" ] }, - output: [{ offset: null, computedOffset: 0.0, easing: "linear", - margin: "var(--dist)" }, - { offset: null, computedOffset: 1.0, easing: "linear", - margin: "calc(var(--dist) + 100px)" }] }, - { desc: "a one property one value property-indexed keyframes specification", - input: { left: ["10px"] }, - output: [{ offset: null, computedOffset: 1, easing: "linear", - left: "10px" }] }, - { desc: "a one property one non-array value property-indexed keyframes" - + " specification", - input: { left: "10px" }, - output: [{ offset: null, computedOffset: 1, easing: "linear", - left: "10px" }] }, - { desc: "a one property two value property-indexed keyframes specification" - + " where the first value is invalid", - input: { left: ["invalid", "10px"] }, - output: [{ offset: null, computedOffset: 0, easing: "linear" }, - { offset: null, computedOffset: 1, easing: "linear", - left: "10px" }] }, - { desc: "a one property two value property-indexed keyframes specification" - + " where the second value is invalid", - input: { left: ["10px", "invalid"] }, - output: [{ offset: null, computedOffset: 0, easing: "linear", - left: "10px" }, - { offset: null, computedOffset: 1, easing: "linear" }] }, -]; - -var gKeyframeSequenceTests = [ - { desc: "a one property one keyframe sequence", - input: [{ offset: 1, left: "10px" }], - output: [{ offset: 1, computedOffset: 1, easing: "linear", - left: "10px" }] }, - { desc: "a one property two keyframe sequence", - input: [{ offset: 0, left: "10px" }, - { offset: 1, left: "20px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "20px" }] - }, - { desc: "a two property two keyframe sequence", - input: [{ offset: 0, left: "10px", top: "30px" }, - { offset: 1, left: "20px", top: "40px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", - left: "10px", top: "30px" }, - { offset: 1, computedOffset: 1, easing: "linear", - left: "20px", top: "40px" }] }, - { desc: "a one shorthand property two keyframe sequence", - input: [{ offset: 0, margin: "10px" }, - { offset: 1, margin: "20px 30px 40px 50px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", - margin: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", - margin: "20px 30px 40px 50px" }] }, - { desc: "a two property (a shorthand and one of its component longhands)" - + " two keyframe sequence", - input: [{ offset: 0, margin: "10px", marginTop: "20px" }, - { offset: 1, marginTop: "70px", margin: "30px 40px 50px 60px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", - margin: "10px", marginTop: "20px" }, - { offset: 1, computedOffset: 1, easing: "linear", - marginTop: "70px", margin: "30px 40px 50px 60px" }] }, - { desc: "a keyframe sequence with duplicate values for a given interior" - + " offset", - input: [{ offset: 0.0, left: "10px" }, - { offset: 0.5, left: "20px" }, - { offset: 0.5, left: "30px" }, - { offset: 0.5, left: "40px" }, - { offset: 1.0, left: "50px" }], - output: [{ offset: 0.0, computedOffset: 0.0, easing: "linear", - left: "10px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", - left: "20px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", - left: "30px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", - left: "40px" }, - { offset: 1.0, computedOffset: 1.0, easing: "linear", - left: "50px" }] }, - { desc: "a keyframe sequence with duplicate values for offsets 0 and 1", - input: [{ offset: 0, left: "10px" }, - { offset: 0, left: "20px" }, - { offset: 0, left: "30px" }, - { offset: 1, left: "40px" }, - { offset: 1, left: "50px" }, - { offset: 1, left: "60px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px" }, - { offset: 0, computedOffset: 0, easing: "linear", left: "20px" }, - { offset: 0, computedOffset: 0, easing: "linear", left: "30px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "40px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "50px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "60px" }] - }, - { desc: "a two property four keyframe sequence", - input: [{ offset: 0, left: "10px" }, - { offset: 0, top: "20px" }, - { offset: 1, top: "30px" }, - { offset: 1, left: "40px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px" }, - { offset: 0, computedOffset: 0, easing: "linear", top: "20px" }, - { offset: 1, computedOffset: 1, easing: "linear", top: "30px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "40px" }] - }, - { desc: "a single keyframe sequence with omitted offset", - input: [{ left: "10px" }], - output: [{ offset: null, computedOffset: 1, easing: "linear", - left: "10px" }] }, - { desc: "a single keyframe sequence with null offset", - input: [{ offset: null, left: "10px" }], - output: [{ offset: null, computedOffset: 1, easing: "linear", - left: "10px" }] }, - { desc: "a single keyframe sequence with string offset", - input: [{ offset: '0.5', left: "10px" }], - output: [{ offset: 0.5, computedOffset: 0.5, easing: "linear", - left: "10px" }] }, - { desc: "a one property keyframe sequence with some omitted offsets", - input: [{ offset: 0.00, left: "10px" }, - { offset: 0.25, left: "20px" }, - { left: "30px" }, - { left: "40px" }, - { offset: 1.00, left: "50px" }], - output: [{ offset: 0.00, computedOffset: 0.00, easing: "linear", - left: "10px" }, - { offset: 0.25, computedOffset: 0.25, easing: "linear", - left: "20px" }, - { offset: null, computedOffset: 0.50, easing: "linear", - left: "30px" }, - { offset: null, computedOffset: 0.75, easing: "linear", - left: "40px" }, - { offset: 1.00, computedOffset: 1.00, easing: "linear", - left: "50px" }] }, - { desc: "a one property keyframe sequence with some null offsets", - input: [{ offset: 0.00, left: "10px" }, - { offset: 0.25, left: "20px" }, - { offset: null, left: "30px" }, - { offset: null, left: "40px" }, - { offset: 1.00, left: "50px" }], - output: [{ offset: 0.00, computedOffset: 0.00, easing: "linear", - left: "10px" }, - { offset: 0.25, computedOffset: 0.25, easing: "linear", - left: "20px" }, - { offset: null, computedOffset: 0.50, easing: "linear", - left: "30px" }, - { offset: null, computedOffset: 0.75, easing: "linear", - left: "40px" }, - { offset: 1.00, computedOffset: 1.00, easing: "linear", - left: "50px" }] }, - { desc: "a two property keyframe sequence with some omitted offsets", - input: [{ offset: 0.00, left: "10px", top: "20px" }, - { offset: 0.25, left: "30px" }, - { left: "40px" }, - { left: "50px", top: "60px" }, - { offset: 1.00, left: "70px", top: "80px" }], - output: [{ offset: 0.00, computedOffset: 0.00, easing: "linear", - left: "10px", top: "20px" }, - { offset: 0.25, computedOffset: 0.25, easing: "linear", - left: "30px" }, - { offset: null, computedOffset: 0.50, easing: "linear", - left: "40px" }, - { offset: null, computedOffset: 0.75, easing: "linear", - left: "50px", top: "60px" }, - { offset: 1.00, computedOffset: 1.00, easing: "linear", - left: "70px", top: "80px" }] }, - { desc: "a one property keyframe sequence with all omitted offsets", - input: [{ left: "10px" }, - { left: "20px" }, - { left: "30px" }, - { left: "40px" }, - { left: "50px" }], - output: [{ offset: null, computedOffset: 0.00, easing: "linear", - left: "10px" }, - { offset: null, computedOffset: 0.25, easing: "linear", - left: "20px" }, - { offset: null, computedOffset: 0.50, easing: "linear", - left: "30px" }, - { offset: null, computedOffset: 0.75, easing: "linear", - left: "40px" }, - { offset: null, computedOffset: 1.00, easing: "linear", - left: "50px" }] }, - { desc: "a keyframe sequence with different easing values, but the same" - + " easing value for a given offset", - input: [{ offset: 0.0, easing: "ease", left: "10px"}, - { offset: 0.0, easing: "ease", top: "20px"}, - { offset: 0.5, easing: "linear", left: "30px" }, - { offset: 0.5, easing: "linear", top: "40px" }, - { offset: 1.0, easing: "step-end", left: "50px" }, - { offset: 1.0, easing: "step-end", top: "60px" }], - output: [{ offset: 0.0, computedOffset: 0.0, easing: "ease", - left: "10px" }, - { offset: 0.0, computedOffset: 0.0, easing: "ease", - top: "20px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", - left: "30px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", - top: "40px" }, - { offset: 1.0, computedOffset: 1.0, easing: "steps(1)", - left: "50px" }, - { offset: 1.0, computedOffset: 1.0, easing: "steps(1)", - top: "60px" }] }, - { desc: "a keyframe sequence with different composite values, but the" - + " same composite value for a given offset", - input: [{ offset: 0.0, composite: "replace", left: "10px" }, - { offset: 0.0, composite: "replace", top: "20px" }, - { offset: 0.5, composite: "add", left: "30px" }, - { offset: 0.5, composite: "add", top: "40px" }, - { offset: 1.0, composite: "replace", left: "50px" }, - { offset: 1.0, composite: "replace", top: "60px" }], - output: [{ offset: 0.0, computedOffset: 0.0, easing: "linear", - composite: "replace", left: "10px" }, - { offset: 0.0, computedOffset: 0.0, easing: "linear", - composite: "replace", top: "20px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", - composite: "add", left: "30px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", - composite: "add", top: "40px" }, - { offset: 1.0, computedOffset: 1.0, easing: "linear", - composite: "replace", left: "50px" }, - { offset: 1.0, computedOffset: 1.0, easing: "linear", - composite: "replace", top: "60px" }] }, - { desc: "a one property two keyframe sequence that needs to stringify" - + " its values", - input: [{ offset: 0, opacity: 0 }, - { offset: 1, opacity: 1 }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", opacity: "0" }, - { offset: 1, computedOffset: 1, easing: "linear", opacity: "1" }] - }, - { desc: "a keyframe sequence with a CSS variable reference", - input: [{ left: "var(--dist)" }, - { left: "calc(var(--dist) + 100px)" }], - output: [{ offset: null, computedOffset: 0.0, easing: "linear", - left: "var(--dist)" }, - { offset: null, computedOffset: 1.0, easing: "linear", - left: "calc(var(--dist) + 100px)" }] }, - { desc: "a keyframe sequence with a CSS variable reference in a shorthand" - + " property", - input: [{ margin: "var(--dist)" }, - { margin: "calc(var(--dist) + 100px)" }], - output: [{ offset: null, computedOffset: 0.0, easing: "linear", - margin: "var(--dist)" }, - { offset: null, computedOffset: 1.0, easing: "linear", - margin: "calc(var(--dist) + 100px)" }] }, - { desc: "a keyframe sequence where shorthand precedes longhand", - input: [{ offset: 0, margin: "10px", marginRight: "20px" }, - { offset: 1, margin: "30px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", - margin: "10px", marginRight: "20px" }, - { offset: 1, computedOffset: 1, easing: "linear", - margin: "30px" }] }, - { desc: "a keyframe sequence where longhand precedes shorthand", - input: [{ offset: 0, marginRight: "20px", margin: "10px" }, - { offset: 1, margin: "30px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", - marginRight: "20px", margin: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", - margin: "30px" }] }, - { desc: "a keyframe sequence where lesser shorthand precedes greater" - + " shorthand", - input: [{ offset: 0, - borderLeft: "1px solid rgb(1, 2, 3)", - border: "2px dotted rgb(4, 5, 6)" }, - { offset: 1, border: "3px dashed rgb(7, 8, 9)" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", - borderLeft: "1px solid rgb(1, 2, 3)", - border: "2px dotted rgb(4, 5, 6)" }, - { offset: 1, computedOffset: 1, easing: "linear", - border: "3px dashed rgb(7, 8, 9)" }] }, - { desc: "a keyframe sequence where greater shorthand precedes lesser" - + " shorthand", - input: [{ offset: 0, border: "2px dotted rgb(4, 5, 6)", - borderLeft: "1px solid rgb(1, 2, 3)" }, - { offset: 1, border: "3px dashed rgb(7, 8, 9)" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", - border: "2px dotted rgb(4, 5, 6)", - borderLeft: "1px solid rgb(1, 2, 3)" }, - { offset: 1, computedOffset: 1, easing: "linear", - border: "3px dashed rgb(7, 8, 9)" }] }, - { desc: "a two property keyframe sequence where one property is missing" - + " from the first keyframe", - input: [{ offset: 0, left: "10px" }, - { offset: 1, left: "20px", top: "30px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", - left: "20px", top: "30px" }] }, - { desc: "a two property keyframe sequence where one property is missing" - + " from the last keyframe", - input: [{ offset: 0, left: "10px", top: "20px" }, - { offset: 1, left: "30px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", - left: "10px" , top: "20px" }, - { offset: 1, computedOffset: 1, easing: "linear", - left: "30px" }] }, - { desc: "a keyframe sequence with repeated values at offset 1 with" - + " different easings", - input: [{ offset: 0.0, left: "100px", easing: "ease" }, - { offset: 0.0, left: "200px", easing: "ease" }, - { offset: 0.5, left: "300px", easing: "linear" }, - { offset: 1.0, left: "400px", easing: "ease-out" }, - { offset: 1.0, left: "500px", easing: "step-end" }], - output: [{ offset: 0.0, computedOffset: 0.0, easing: "ease", - left: "100px" }, - { offset: 0.0, computedOffset: 0.0, easing: "ease", - left: "200px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", - left: "300px" }, - { offset: 1.0, computedOffset: 1.0, easing: "ease-out", - left: "400px" }, - { offset: 1.0, computedOffset: 1.0, easing: "steps(1)", - left: "500px" }] }, -]; - -var gInvalidKeyframesTests = [ - { desc: "keyframes with an out-of-bounded positive offset", - input: [ { opacity: 0 }, - { opacity: 0.5, offset: 2 }, - { opacity: 1 } ], - expected: { name: "TypeError" } }, - { desc: "keyframes with an out-of-bounded negative offset", - input: [ { opacity: 0 }, - { opacity: 0.5, offset: -1 }, - { opacity: 1 } ], - expected: { name: "TypeError" } }, - { desc: "keyframes not loosely sorted by offset", - input: [ { opacity: 0, offset: 1 }, - { opacity: 1, offset: 0 } ], - expected: { name: "TypeError" } }, - { desc: "property-indexed keyframes with an invalid easing value", - input: { opacity: [ 0, 0.5, 1 ], - easing: "inherit" }, - expected: { name: "TypeError" } }, - { desc: "a keyframe sequence with an invalid easing value", - input: [ { opacity: 0, easing: "jumpy" }, - { opacity: 1 } ], - expected: { name: "TypeError" } }, - { desc: "keyframes with an invalid composite value", - input: [ { opacity: 0, composite: "alternate" }, - { opacity: 1 } ], - expected: { name: "TypeError" } } -]; - -// ------------------------------ -// KeyframeEffectOptions -// ------------------------------ - -var gKeyframeEffectOptionTests = [ - { desc: "an empty KeyframeEffectOptions object", - input: { }, - expected: { } }, - { desc: "a normal KeyframeEffectOptions object", - input: { delay: 1000, - fill: "auto", - iterations: 5.5, - duration: "auto", - direction: "alternate" }, - expected: { delay: 1000, - fill: "auto", - iterations: 5.5, - duration: "auto", - direction: "alternate" } }, - { desc: "a double value", - input: 3000, - expected: { duration: 3000 } }, - { desc: "+Infinity", - input: Infinity, - expected: { duration: Infinity } }, - { desc: "an Infinity duration", - input: { duration: Infinity }, - expected: { duration: Infinity } }, - { desc: "an auto duration", - input: { duration: "auto" }, - expected: { duration: "auto" } }, - { desc: "an Infinity iterations", - input: { iterations: Infinity }, - expected: { iterations: Infinity } }, - { desc: "an auto fill", - input: { fill: "auto" }, - expected: { fill: "auto" } }, - { desc: "a forwards fill", - input: { fill: "forwards" }, - expected: { fill: "forwards" } } -]; - -var gInvalidKeyframeEffectOptionTests = [ - { desc: "-Infinity", - input: -Infinity, - expected: { name: "TypeError" } }, - { desc: "NaN", - input: NaN, - expected: { name: "TypeError" } }, - { desc: "a negative value", - input: -1, - expected: { name: "TypeError" } }, - { desc: "a negative Infinity duration", - input: { duration: -Infinity }, - expected: { name: "TypeError" } }, - { desc: "a NaN duration", - input: { duration: NaN }, - expected: { name: "TypeError" } }, - { desc: "a negative duration", - input: { duration: -1 }, - expected: { name: "TypeError" } }, - { desc: "a string duration", - input: { duration: "merrychristmas" }, - expected: { name: "TypeError" } }, - { desc: "a negative Infinity iterations", - input: { iterations: -Infinity}, - expected: { name: "TypeError" } }, - { desc: "a NaN iterations", - input: { iterations: NaN }, - expected: { name: "TypeError" } }, - { desc: "a negative iterations", - input: { iterations: -1 }, - expected: { name: "TypeError" } }, - { desc: "a blank easing", - input: { easing: "" }, - expected: { name: "TypeError" } }, - { desc: "an unrecognized easing", - input: { easing: "unrecognised" }, - expected: { name: "TypeError" } }, - { desc: "an 'initial' easing", - input: { easing: "initial" }, - expected: { name: "TypeError" } }, - { desc: "an 'inherit' easing", - input: { easing: "inherit" }, - expected: { name: "TypeError" } }, - { desc: "a variable easing", - input: { easing: "var(--x)" }, - expected: { name: "TypeError" } }, - { desc: "a multi-value easing", - input: { easing: "ease-in-out, ease-out" }, - expected: { name: "TypeError" } } -]; diff --git a/tests/wpt/web-platform-tests/web-animations/timing-model/timelines/document-timelines.html b/tests/wpt/web-platform-tests/web-animations/timing-model/timelines/document-timelines.html new file mode 100644 index 00000000000..7b863888aaa --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/timing-model/timelines/document-timelines.html @@ -0,0 +1,37 @@ + + +Document timelines + + + + +
+ diff --git a/tests/wpt/web-platform-tests/web-animations/timing-model/timelines/timelines.html b/tests/wpt/web-platform-tests/web-animations/timing-model/timelines/timelines.html new file mode 100644 index 00000000000..290c71b8c2e --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/timing-model/timelines/timelines.html @@ -0,0 +1,74 @@ + + +Timelines + + + + +
+ diff --git a/tests/wpt/web-platform-tests/webaudio/js/helpers.js b/tests/wpt/web-platform-tests/webaudio/js/helpers.js index f3d198498f7..650d25c2ad6 100644 --- a/tests/wpt/web-platform-tests/webaudio/js/helpers.js +++ b/tests/wpt/web-platform-tests/webaudio/js/helpers.js @@ -21,3 +21,198 @@ function trimEmptyElements(array) { } return array.subarray(start, end); } + + +function fuzzyCompare(a, b) { + return Math.abs(a - b) < 9e-3; +} + +function compareChannels(buf1, buf2, + /*optional*/ length, + /*optional*/ sourceOffset, + /*optional*/ destOffset, + /*optional*/ skipLengthCheck) { + if (!skipLengthCheck) { + assert_equals(buf1.length, buf2.length, "Channels must have the same length"); + } + sourceOffset = sourceOffset || 0; + destOffset = destOffset || 0; + if (length == undefined) { + length = buf1.length - sourceOffset; + } + var difference = 0; + var maxDifference = 0; + var firstBadIndex = -1; + for (var i = 0; i < length; ++i) { + if (!fuzzyCompare(buf1[i + sourceOffset], buf2[i + destOffset])) { + difference++; + maxDifference = Math.max(maxDifference, Math.abs(buf1[i + sourceOffset] - buf2[i + destOffset])); + if (firstBadIndex == -1) { + firstBadIndex = i; + } + } + }; + + assert_equals(difference, 0, "maxDifference: " + maxDifference + + ", first bad index: " + firstBadIndex + " with test-data offset " + + sourceOffset + " and expected-data offset " + destOffset + + "; corresponding values " + buf1[firstBadIndex + sourceOffset] + " and " + + buf2[firstBadIndex + destOffset] + " --- differences"); +} + +function compareBuffers(got, expected) { + if (got.numberOfChannels != expected.numberOfChannels) { + assert_equals(got.numberOfChannels, expected.numberOfChannels, + "Correct number of buffer channels"); + return; + } + if (got.length != expected.length) { + assert_equals(got.length, expected.length, + "Correct buffer length"); + return; + } + if (got.sampleRate != expected.sampleRate) { + assert_equals(got.sampleRate, expected.sampleRate, + "Correct sample rate"); + return; + } + + for (var i = 0; i < got.numberOfChannels; ++i) { + compareChannels(got.getChannelData(i), expected.getChannelData(i), + got.length, 0, 0, true); + } +} + +/** + * This function assumes that the test is a "single page test" [0], and defines a + * single gTest variable with the following properties and methods: + * + * + numberOfChannels: optional property which specifies the number of channels + * in the output. The default value is 2. + * + createGraph: mandatory method which takes a context object and does + * everything needed in order to set up the Web Audio graph. + * This function returns the node to be inspected. + * + createGraphAsync: async version of createGraph. This function takes + * a callback which should be called with an argument + * set to the node to be inspected when the callee is + * ready to proceed with the test. Either this function + * or createGraph must be provided. + * + createExpectedBuffers: optional method which takes a context object and + * returns either one expected buffer or an array of + * them, designating what is expected to be observed + * in the output. If omitted, the output is expected + * to be silence. All buffers must have the same + * length, which must be a bufferSize supported by + * ScriptProcessorNode. This function is guaranteed + * to be called before createGraph. + * + length: property equal to the total number of frames which we are waiting + * to see in the output, mandatory if createExpectedBuffers is not + * provided, in which case it must be a bufferSize supported by + * ScriptProcessorNode (256, 512, 1024, 2048, 4096, 8192, or 16384). + * If createExpectedBuffers is provided then this must be equal to + * the number of expected buffers * the expected buffer length. + * + * + skipOfflineContextTests: optional. when true, skips running tests on an offline + * context by circumventing testOnOfflineContext. + * + * [0]: http://web-platform-tests.org/writing-tests/testharness-api.html#single-page-tests + */ +function runTest(name) +{ + function runTestFunction () { + if (!gTest.numberOfChannels) { + gTest.numberOfChannels = 2; // default + } + + var testLength; + + function runTestOnContext(context, callback, testOutput) { + if (!gTest.createExpectedBuffers) { + // Assume that the output is silence + var expectedBuffers = getEmptyBuffer(context, gTest.length); + } else { + var expectedBuffers = gTest.createExpectedBuffers(context); + } + if (!(expectedBuffers instanceof Array)) { + expectedBuffers = [expectedBuffers]; + } + var expectedFrames = 0; + for (var i = 0; i < expectedBuffers.length; ++i) { + assert_equals(expectedBuffers[i].numberOfChannels, gTest.numberOfChannels, + "Correct number of channels for expected buffer " + i); + expectedFrames += expectedBuffers[i].length; + } + if (gTest.length && gTest.createExpectedBuffers) { + assert_equals(expectedFrames, + gTest.length, "Correct number of expected frames"); + } + + if (gTest.createGraphAsync) { + gTest.createGraphAsync(context, function(nodeToInspect) { + testOutput(nodeToInspect, expectedBuffers, callback); + }); + } else { + testOutput(gTest.createGraph(context), expectedBuffers, callback); + } + } + + function testOnNormalContext(callback) { + function testOutput(nodeToInspect, expectedBuffers, callback) { + testLength = 0; + var sp = context.createScriptProcessor(expectedBuffers[0].length, gTest.numberOfChannels, 0); + nodeToInspect.connect(sp); + sp.onaudioprocess = function(e) { + var expectedBuffer = expectedBuffers.shift(); + testLength += expectedBuffer.length; + compareBuffers(e.inputBuffer, expectedBuffer); + if (expectedBuffers.length == 0) { + sp.onaudioprocess = null; + callback(); + } + }; + } + var context = new AudioContext(); + runTestOnContext(context, callback, testOutput); + } + + function testOnOfflineContext(callback, sampleRate) { + function testOutput(nodeToInspect, expectedBuffers, callback) { + nodeToInspect.connect(context.destination); + context.oncomplete = function(e) { + var samplesSeen = 0; + while (expectedBuffers.length) { + var expectedBuffer = expectedBuffers.shift(); + assert_equals(e.renderedBuffer.numberOfChannels, expectedBuffer.numberOfChannels, + "Correct number of input buffer channels"); + for (var i = 0; i < e.renderedBuffer.numberOfChannels; ++i) { + compareChannels(e.renderedBuffer.getChannelData(i), + expectedBuffer.getChannelData(i), + expectedBuffer.length, + samplesSeen, + undefined, + true); + } + samplesSeen += expectedBuffer.length; + } + callback(); + }; + context.startRendering(); + } + + var context = new OfflineAudioContext(gTest.numberOfChannels, testLength, sampleRate); + runTestOnContext(context, callback, testOutput); + } + + testOnNormalContext(function() { + if (!gTest.skipOfflineContextTests) { + testOnOfflineContext(function() { + testOnOfflineContext(done, 44100); + }, 48000); + } else { + done(); + } + }); + }; + + runTestFunction(); +} diff --git a/tests/wpt/web-platform-tests/webaudio/js/lodash.js b/tests/wpt/web-platform-tests/webaudio/js/lodash.js deleted file mode 100644 index 3813d2af261..00000000000 --- a/tests/wpt/web-platform-tests/webaudio/js/lodash.js +++ /dev/null @@ -1,4282 +0,0 @@ -/*! - * Lo-Dash 0.10.0 - * (c) 2012 John-David Dalton - * Based on Underscore.js 1.4.2 - * (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. - * Available under MIT license - */ -;(function(window, undefined) { - - /** Detect free variable `exports` */ - var freeExports = typeof exports == 'object' && exports; - - /** Detect free variable `global` and use it as `window` */ - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal) { - window = freeGlobal; - } - - /** Used for array and object method references */ - var arrayRef = [], - // avoid a Closure Compiler bug by creatively creating an object - objectRef = new function(){}; - - /** Used to generate unique IDs */ - var idCounter = 0; - - /** Used internally to indicate various things */ - var indicatorObject = objectRef; - - /** Used by `cachedContains` as the default size when optimizations are enabled for large arrays */ - var largeArraySize = 30; - - /** Used to restore the original `_` reference in `noConflict` */ - var oldDash = window._; - - /** Used to detect template delimiter values that require a with-statement */ - var reComplexDelimiter = /[-?+=!~*%&^<>|{(\/]|\[\D|\b(?:delete|in|instanceof|new|typeof|void)\b/; - - /** Used to match HTML entities */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#x27);/g; - - /** Used to match empty string literals in compiled template source */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** Used to match regexp flags from their coerced string values */ - var reFlags = /\w*$/; - - /** Used to insert the data object variable into compiled template source */ - var reInsertVariable = /(?:__e|__t = )\(\s*(?![\d\s"']|this\.)/g; - - /** Used to detect if a method is native */ - var reNative = RegExp('^' + - (objectRef.valueOf + '') - .replace(/[.*+?^=!:${}()|[\]\/\\]/g, '\\$&') - .replace(/valueOf|for [^\]]+/g, '.+?') + '$' - ); - - /** - * Used to match ES6 template delimiters - * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-7.8.6 - */ - var reEsTemplate = /\$\{((?:(?=\\?)\\?[\s\S])*?)}/g; - - /** Used to match "interpolate" template delimiters */ - var reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to ensure capturing order of template delimiters */ - var reNoMatch = /($^)/; - - /** Used to match HTML characters */ - var reUnescapedHtml = /[&<>"']/g; - - /** Used to match unescaped characters in compiled string literals */ - var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g; - - /** Used to fix the JScript [[DontEnum]] bug */ - var shadowed = [ - 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', - 'toLocaleString', 'toString', 'valueOf' - ]; - - /** Used to make template sourceURLs easier to identify */ - var templateCounter = 0; - - /** Native method shortcuts */ - var ceil = Math.ceil, - concat = arrayRef.concat, - floor = Math.floor, - getPrototypeOf = reNative.test(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf, - hasOwnProperty = objectRef.hasOwnProperty, - push = arrayRef.push, - propertyIsEnumerable = objectRef.propertyIsEnumerable, - slice = arrayRef.slice, - toString = objectRef.toString; - - /* Native method shortcuts for methods with the same name as other `lodash` methods */ - var nativeBind = reNative.test(nativeBind = slice.bind) && nativeBind, - nativeIsArray = reNative.test(nativeIsArray = Array.isArray) && nativeIsArray, - nativeIsFinite = window.isFinite, - nativeIsNaN = window.isNaN, - nativeKeys = reNative.test(nativeKeys = Object.keys) && nativeKeys, - nativeMax = Math.max, - nativeMin = Math.min, - nativeRandom = Math.random; - - /** `Object#toString` result shortcuts */ - var argsClass = '[object Arguments]', - arrayClass = '[object Array]', - boolClass = '[object Boolean]', - dateClass = '[object Date]', - funcClass = '[object Function]', - numberClass = '[object Number]', - objectClass = '[object Object]', - regexpClass = '[object RegExp]', - stringClass = '[object String]'; - - /** - * Detect the JScript [[DontEnum]] bug: - * - * In IE < 9 an objects own properties, shadowing non-enumerable ones, are - * made non-enumerable as well. - */ - var hasDontEnumBug; - - /** Detect if own properties are iterated after inherited properties (IE < 9) */ - var iteratesOwnLast; - - /** - * Detect if `Array#shift` and `Array#splice` augment array-like objects - * incorrectly: - * - * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()` - * and `splice()` functions that fail to remove the last element, `value[0]`, - * of array-like objects even though the `length` property is set to `0`. - * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()` - * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9. - */ - var hasObjectSpliceBug = (hasObjectSpliceBug = { '0': 1, 'length': 1 }, - arrayRef.splice.call(hasObjectSpliceBug, 0, 1), hasObjectSpliceBug[0]); - - /** Detect if an `arguments` object's indexes are non-enumerable (IE < 9) */ - var noArgsEnum = true; - - (function() { - var props = []; - function ctor() { this.x = 1; } - ctor.prototype = { 'valueOf': 1, 'y': 1 }; - for (var prop in new ctor) { props.push(prop); } - for (prop in arguments) { noArgsEnum = !prop; } - - hasDontEnumBug = !/valueOf/.test(props); - iteratesOwnLast = props[0] != 'x'; - }(1)); - - /** Detect if an `arguments` object's [[Class]] is unresolvable (Firefox < 4, IE < 9) */ - var noArgsClass = !isArguments(arguments); - - /** Detect if `Array#slice` cannot be used to convert strings to arrays (Opera < 10.52) */ - var noArraySliceOnStrings = slice.call('x')[0] != 'x'; - - /** - * Detect lack of support for accessing string characters by index: - * - * IE < 8 can't access characters by index and IE 8 can only access - * characters by index on string literals. - */ - var noCharByIndex = ('x'[0] + Object('x')[0]) != 'xx'; - - /** - * Detect if a node's [[Class]] is unresolvable (IE < 9) - * and that the JS engine won't error when attempting to coerce an object to - * a string without a `toString` property value of `typeof` "function". - */ - try { - var noNodeClass = ({ 'toString': 0 } + '', toString.call(window.document || 0) == objectClass); - } catch(e) { } - - /* Detect if `Function#bind` exists and is inferred to be fast (all but V8) */ - var isBindFast = nativeBind && /\n|Opera/.test(nativeBind + toString.call(window.opera)); - - /* Detect if `Object.keys` exists and is inferred to be fast (IE, Opera, V8) */ - var isKeysFast = nativeKeys && /^.+$|true/.test(nativeKeys + !!window.attachEvent); - - /** - * Detect if sourceURL syntax is usable without erroring: - * - * The JS engine in Adobe products, like InDesign, will throw a syntax error - * when it encounters a single line comment beginning with the `@` symbol. - * - * The JS engine in Narwhal will generate the function `function anonymous(){//}` - * and throw a syntax error. - * - * Avoid comments beginning `@` symbols in IE because they are part of its - * non-standard conditional compilation support. - * http://msdn.microsoft.com/en-us/library/121hztk3(v=vs.94).aspx - */ - try { - var useSourceURL = (Function('//@')(), !window.attachEvent); - } catch(e) { } - - /** Used to identify object classifications that `_.clone` supports */ - var cloneableClasses = {}; - cloneableClasses[argsClass] = cloneableClasses[funcClass] = false; - cloneableClasses[arrayClass] = cloneableClasses[boolClass] = cloneableClasses[dateClass] = - cloneableClasses[numberClass] = cloneableClasses[objectClass] = cloneableClasses[regexpClass] = - cloneableClasses[stringClass] = true; - - /** Used to determine if values are of the language type Object */ - var objectTypes = { - 'boolean': false, - 'function': true, - 'object': true, - 'number': false, - 'string': false, - 'undefined': false - }; - - /** Used to escape characters for inclusion in compiled string literals */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\t': 't', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - /*--------------------------------------------------------------------------*/ - - /** - * The `lodash` function. - * - * @name _ - * @constructor - * @category Chaining - * @param {Mixed} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns a `lodash` instance. - */ - function lodash(value) { - // exit early if already wrapped - if (value && value.__wrapped__) { - return value; - } - // allow invoking `lodash` without the `new` operator - if (!(this instanceof lodash)) { - return new lodash(value); - } - this.__wrapped__ = value; - } - - /** - * By default, the template delimiters used by Lo-Dash are similar to those in - * embedded Ruby (ERB). Change the following template settings to use alternative - * delimiters. - * - * @static - * @memberOf _ - * @type Object - */ - lodash.templateSettings = { - - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @static - * @memberOf _.templateSettings - * @type RegExp - */ - 'escape': /<%-([\s\S]+?)%>/g, - - /** - * Used to detect code to be evaluated. - * - * @static - * @memberOf _.templateSettings - * @type RegExp - */ - 'evaluate': /<%([\s\S]+?)%>/g, - - /** - * Used to detect `data` property values to inject. - * - * @static - * @memberOf _.templateSettings - * @type RegExp - */ - 'interpolate': reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @static - * @memberOf _.templateSettings - * @type String - */ - 'variable': '' - }; - - /*--------------------------------------------------------------------------*/ - - /** - * The template used to create iterator functions. - * - * @private - * @param {Obect} data The data object used to populate the text. - * @returns {String} Returns the interpolated text. - */ - var iteratorTemplate = template( - // conditional strict mode - '<% if (obj.useStrict) { %>\'use strict\';\n<% } %>' + - - // the `iteratee` may be reassigned by the `top` snippet - 'var index, value, iteratee = <%= firstArg %>, ' + - // assign the `result` variable an initial value - 'result = <%= firstArg %>;\n' + - // exit early if the first argument is falsey - 'if (!<%= firstArg %>) return result;\n' + - // add code before the iteration branches - '<%= top %>;\n' + - - // array-like iteration: - '<% if (arrayLoop) { %>' + - 'var length = iteratee.length; index = -1;\n' + - 'if (typeof length == \'number\') {' + - - // add support for accessing string characters by index if needed - ' <% if (noCharByIndex) { %>\n' + - ' if (isString(iteratee)) {\n' + - ' iteratee = iteratee.split(\'\')\n' + - ' }' + - ' <% } %>\n' + - - // iterate over the array-like value - ' while (++index < length) {\n' + - ' value = iteratee[index];\n' + - ' <%= arrayLoop %>\n' + - ' }\n' + - '}\n' + - 'else {' + - - // object iteration: - // add support for iterating over `arguments` objects if needed - ' <% } else if (noArgsEnum) { %>\n' + - ' var length = iteratee.length; index = -1;\n' + - ' if (length && isArguments(iteratee)) {\n' + - ' while (++index < length) {\n' + - ' value = iteratee[index += \'\'];\n' + - ' <%= objectLoop %>\n' + - ' }\n' + - ' } else {' + - ' <% } %>' + - - // Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1 - // (if the prototype or a property on the prototype has been set) - // incorrectly sets a function's `prototype` property [[Enumerable]] - // value to `true`. Because of this Lo-Dash standardizes on skipping - // the the `prototype` property of functions regardless of its - // [[Enumerable]] value. - ' <% if (!hasDontEnumBug) { %>\n' + - ' var skipProto = typeof iteratee == \'function\' && \n' + - ' propertyIsEnumerable.call(iteratee, \'prototype\');\n' + - ' <% } %>' + - - // iterate own properties using `Object.keys` if it's fast - ' <% if (isKeysFast && useHas) { %>\n' + - ' var ownIndex = -1,\n' + - ' ownProps = objectTypes[typeof iteratee] ? nativeKeys(iteratee) : [],\n' + - ' length = ownProps.length;\n\n' + - ' while (++ownIndex < length) {\n' + - ' index = ownProps[ownIndex];\n' + - ' <% if (!hasDontEnumBug) { %>if (!(skipProto && index == \'prototype\')) {\n <% } %>' + - ' value = iteratee[index];\n' + - ' <%= objectLoop %>\n' + - ' <% if (!hasDontEnumBug) { %>}\n<% } %>' + - ' }' + - - // else using a for-in loop - ' <% } else { %>\n' + - ' for (index in iteratee) {<%' + - ' if (!hasDontEnumBug || useHas) { %>\n if (<%' + - ' if (!hasDontEnumBug) { %>!(skipProto && index == \'prototype\')<% }' + - ' if (!hasDontEnumBug && useHas) { %> && <% }' + - ' if (useHas) { %>hasOwnProperty.call(iteratee, index)<% }' + - ' %>) {' + - ' <% } %>\n' + - ' value = iteratee[index];\n' + - ' <%= objectLoop %>;' + - ' <% if (!hasDontEnumBug || useHas) { %>\n }<% } %>\n' + - ' }' + - ' <% } %>' + - - // Because IE < 9 can't set the `[[Enumerable]]` attribute of an - // existing property and the `constructor` property of a prototype - // defaults to non-enumerable, Lo-Dash skips the `constructor` - // property when it infers it's iterating over a `prototype` object. - ' <% if (hasDontEnumBug) { %>\n\n' + - ' var ctor = iteratee.constructor;\n' + - ' <% for (var k = 0; k < 7; k++) { %>\n' + - ' index = \'<%= shadowed[k] %>\';\n' + - ' if (<%' + - ' if (shadowed[k] == \'constructor\') {' + - ' %>!(ctor && ctor.prototype === iteratee) && <%' + - ' } %>hasOwnProperty.call(iteratee, index)) {\n' + - ' value = iteratee[index];\n' + - ' <%= objectLoop %>\n' + - ' }' + - ' <% } %>' + - ' <% } %>' + - ' <% if (arrayLoop || noArgsEnum) { %>\n}<% } %>\n' + - - // add code to the bottom of the iteration function - '<%= bottom %>;\n' + - // finally, return the `result` - 'return result' - ); - - /** Reusable iterator options for `assign` and `defaults` */ - var assignIteratorOptions = { - 'args': 'object, source, guard', - 'top': - 'for (var argsIndex = 1, argsLength = typeof guard == \'number\' ? 2 : arguments.length; argsIndex < argsLength; argsIndex++) {\n' + - ' if ((iteratee = arguments[argsIndex])) {', - 'objectLoop': 'result[index] = value', - 'bottom': ' }\n}' - }; - - /** - * Reusable iterator options shared by `forEach`, `forIn`, and `forOwn`. - */ - var forEachIteratorOptions = { - 'args': 'collection, callback, thisArg', - 'top': 'callback = createCallback(callback, thisArg)', - 'arrayLoop': 'if (callback(value, index, collection) === false) return result', - 'objectLoop': 'if (callback(value, index, collection) === false) return result' - }; - - /** Reusable iterator options for `forIn` and `forOwn` */ - var forOwnIteratorOptions = { - 'arrayLoop': null - }; - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a function optimized to search large arrays for a given `value`, - * starting at `fromIndex`, using strict equality for comparisons, i.e. `===`. - * - * @private - * @param {Array} array The array to search. - * @param {Mixed} value The value to search for. - * @param {Number} [fromIndex=0] The index to search from. - * @param {Number} [largeSize=30] The length at which an array is considered large. - * @returns {Boolean} Returns `true` if `value` is found, else `false`. - */ - function cachedContains(array, fromIndex, largeSize) { - fromIndex || (fromIndex = 0); - - var length = array.length, - isLarge = (length - fromIndex) >= (largeSize || largeArraySize); - - if (isLarge) { - var cache = {}, - index = fromIndex - 1; - - while (++index < length) { - // manually coerce `value` to a string because `hasOwnProperty`, in some - // older versions of Firefox, coerces objects incorrectly - var key = array[index] + ''; - (hasOwnProperty.call(cache, key) ? cache[key] : (cache[key] = [])).push(array[index]); - } - } - return function(value) { - if (isLarge) { - var key = value + ''; - return hasOwnProperty.call(cache, key) && indexOf(cache[key], value) > -1; - } - return indexOf(array, value, fromIndex) > -1; - } - } - - /** - * Used by `_.max` and `_.min` as the default `callback` when a given - * `collection` is a string value. - * - * @private - * @param {String} value The character to inspect. - * @returns {Number} Returns the code unit of given character. - */ - function charAtCallback(value) { - return value.charCodeAt(0); - } - - /** - * Used by `sortBy` to compare transformed `collection` values, stable sorting - * them in ascending order. - * - * @private - * @param {Object} a The object to compare to `b`. - * @param {Object} b The object to compare to `a`. - * @returns {Number} Returns the sort order indicator of `1` or `-1`. - */ - function compareAscending(a, b) { - var ai = a.index, - bi = b.index; - - a = a.criteria; - b = b.criteria; - - // ensure a stable sort in V8 and other engines - // http://code.google.com/p/v8/issues/detail?id=90 - if (a !== b) { - if (a > b || a === undefined) { - return 1; - } - if (a < b || b === undefined) { - return -1; - } - } - return ai < bi ? -1 : 1; - } - - /** - * Creates a function that, when called, invokes `func` with the `this` - * binding of `thisArg` and prepends any `partailArgs` to the arguments passed - * to the bound function. - * - * @private - * @param {Function|String} func The function to bind or the method name. - * @param {Mixed} [thisArg] The `this` binding of `func`. - * @param {Array} partialArgs An array of arguments to be partially applied. - * @returns {Function} Returns the new bound function. - */ - function createBound(func, thisArg, partialArgs) { - var isFunc = isFunction(func), - isPartial = !partialArgs, - key = thisArg; - - // juggle arguments - if (isPartial) { - partialArgs = thisArg; - } - if (!isFunc) { - thisArg = func; - } - - function bound() { - // `Function#bind` spec - // http://es5.github.com/#x15.3.4.5 - var args = arguments, - thisBinding = isPartial ? this : thisArg; - - if (!isFunc) { - func = thisArg[key]; - } - if (partialArgs.length) { - args = args.length - ? partialArgs.concat(slice.call(args)) - : partialArgs; - } - if (this instanceof bound) { - // get `func` instance if `bound` is invoked in a `new` expression - noop.prototype = func.prototype; - thisBinding = new noop; - - // mimic the constructor's `return` behavior - // http://es5.github.com/#x13.2.2 - var result = func.apply(thisBinding, args); - return isObject(result) - ? result - : thisBinding - } - return func.apply(thisBinding, args); - } - return bound; - } - - /** - * Produces an iteration callback bound to an optional `thisArg`. If `func` is - * a property name, the callback will return the property value for a given element. - * - * @private - * @param {Function|String} [func=identity|property] The function called per - * iteration or property name to query. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Function} Returns a callback function. - */ - function createCallback(func, thisArg) { - if (!func) { - return identity; - } - if (typeof func != 'function') { - return function(object) { - return object[func]; - }; - } - if (thisArg !== undefined) { - return function(value, index, object) { - return func.call(thisArg, value, index, object); - }; - } - return func; - } - - /** - * Creates compiled iteration functions. - * - * @private - * @param {Object} [options1, options2, ...] The compile options object(s). - * useHas - A boolean to specify using `hasOwnProperty` checks in the object loop. - * args - A string of comma separated arguments the iteration function will accept. - * top - A string of code to execute before the iteration branches. - * arrayLoop - A string of code to execute in the array loop. - * objectLoop - A string of code to execute in the object loop. - * bottom - A string of code to execute after the iteration branches. - * - * @returns {Function} Returns the compiled function. - */ - function createIterator() { - var data = { - 'arrayLoop': '', - 'bottom': '', - 'hasDontEnumBug': hasDontEnumBug, - 'isKeysFast': isKeysFast, - 'objectLoop': '', - 'noArgsEnum': noArgsEnum, - 'noCharByIndex': noCharByIndex, - 'shadowed': shadowed, - 'top': '', - 'useHas': true - }; - - // merge options into a template data object - for (var object, index = 0; object = arguments[index]; index++) { - for (var key in object) { - data[key] = object[key]; - } - } - var args = data.args; - data.firstArg = /^[^,]+/.exec(args)[0]; - - // create the function factory - var factory = Function( - 'createCallback, hasOwnProperty, isArguments, isString, objectTypes, ' + - 'nativeKeys, propertyIsEnumerable', - 'return function(' + args + ') {\n' + iteratorTemplate(data) + '\n}' - ); - // return the compiled function - return factory( - createCallback, hasOwnProperty, isArguments, isString, objectTypes, - nativeKeys, propertyIsEnumerable - ); - } - - /** - * Used by `template` to escape characters for inclusion in compiled - * string literals. - * - * @private - * @param {String} match The matched character to escape. - * @returns {String} Returns the escaped character. - */ - function escapeStringChar(match) { - return '\\' + stringEscapes[match]; - } - - /** - * Used by `escape` to convert characters to HTML entities. - * - * @private - * @param {String} match The matched character to escape. - * @returns {String} Returns the escaped character. - */ - function escapeHtmlChar(match) { - return htmlEscapes[match]; - } - - /** - * A no-operation function. - * - * @private - */ - function noop() { - // no operation performed - } - - /** - * Used by `unescape` to convert HTML entities to characters. - * - * @private - * @param {String} match The matched character to unescape. - * @returns {String} Returns the unescaped character. - */ - function unescapeHtmlChar(match) { - return htmlUnescapes[match]; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable properties of source object(s) to the `destination` - * object. Subsequent sources will overwrite propery assignments of previous - * sources. - * - * @static - * @memberOf _ - * @alias extend - * @category Objects - * @param {Object} object The destination object. - * @param {Object} [source1, source2, ...] The source objects. - * @returns {Object} Returns the destination object. - * @example - * - * _.assign({ 'name': 'moe' }, { 'age': 40 }); - * // => { 'name': 'moe', 'age': 40 } - */ - var assign = createIterator(assignIteratorOptions); - - /** - * Checks if `value` is an `arguments` object. - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is an `arguments` object, else `false`. - * @example - * - * (function() { return _.isArguments(arguments); })(1, 2, 3); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - function isArguments(value) { - return toString.call(value) == argsClass; - } - // fallback for browsers that can't detect `arguments` objects by [[Class]] - if (noArgsClass) { - isArguments = function(value) { - return value ? hasOwnProperty.call(value, 'callee') : false; - }; - } - - /** - * Iterates over `object`'s own and inherited enumerable properties, executing - * the `callback` for each property. The `callback` is bound to `thisArg` and - * invoked with three arguments; (value, key, object). Callbacks may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} callback The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * function Dog(name) { - * this.name = name; - * } - * - * Dog.prototype.bark = function() { - * alert('Woof, woof!'); - * }; - * - * _.forIn(new Dog('Dagny'), function(value, key) { - * alert(key); - * }); - * // => alerts 'name' and 'bark' (order is not guaranteed) - */ - var forIn = createIterator(forEachIteratorOptions, forOwnIteratorOptions, { - 'useHas': false - }); - - /** - * Iterates over an object's own enumerable properties, executing the `callback` - * for each property. The `callback` is bound to `thisArg` and invoked with three - * arguments; (value, key, object). Callbacks may exit iteration early by explicitly - * returning `false`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} callback The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { - * alert(key); - * }); - * // => alerts '0', '1', and 'length' (order is not guaranteed) - */ - var forOwn = createIterator(forEachIteratorOptions, forOwnIteratorOptions); - - /** - * A fallback implementation of `isPlainObject` that checks if a given `value` - * is an object created by the `Object` constructor, assuming objects created - * by the `Object` constructor have no inherited enumerable properties and that - * there are no `Object.prototype` extensions. - * - * @private - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if `value` is a plain object, else `false`. - */ - function shimIsPlainObject(value) { - // avoid non-objects and false positives for `arguments` objects - var result = false; - if (!(value && typeof value == 'object') || isArguments(value)) { - return result; - } - // IE < 9 presents DOM nodes as `Object` objects except they have `toString` - // methods that are `typeof` "string" and still can coerce nodes to strings. - // Also check that the constructor is `Object` (i.e. `Object instanceof Object`) - var ctor = value.constructor; - if ((!noNodeClass || !(typeof value.toString != 'function' && typeof (value + '') == 'string')) && - (!isFunction(ctor) || ctor instanceof ctor)) { - // IE < 9 iterates inherited properties before own properties. If the first - // iterated property is an object's own property then there are no inherited - // enumerable properties. - if (iteratesOwnLast) { - forIn(value, function(value, key, object) { - result = !hasOwnProperty.call(object, key); - return false; - }); - return result === false; - } - // In most environments an object's own properties are iterated before - // its inherited properties. If the last iterated property is an object's - // own property then there are no inherited enumerable properties. - forIn(value, function(value, key) { - result = key; - }); - return result === false || hasOwnProperty.call(value, result); - } - return result; - } - - /** - * A fallback implementation of `Object.keys` that produces an array of the - * given object's own enumerable property names. - * - * @private - * @param {Object} object The object to inspect. - * @returns {Array} Returns a new array of property names. - */ - function shimKeys(object) { - var result = []; - forOwn(object, function(value, key) { - result.push(key); - }); - return result; - } - - /** - * Used to convert characters to HTML entities: - * - * Though the `>` character is escaped for symmetry, characters like `>` and `/` - * don't require escaping in HTML and have no special meaning unless they're part - * of a tag or an unquoted attribute value. - * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact") - */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Used to convert HTML entities to characters */ - var htmlUnescapes = invert(htmlEscapes); - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a clone of `value`. If `deep` is `true`, all nested objects will - * also be cloned otherwise they will be assigned by reference. Functions, DOM - * nodes, `arguments` objects, and objects created by constructors other than - * `Object` are **not** cloned. - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to clone. - * @param {Boolean} deep A flag to indicate a deep clone. - * @param- {Object} [guard] Internally used to allow this method to work with - * others like `_.map` without using their callback `index` argument for `deep`. - * @param- {Array} [stackA=[]] Internally used to track traversed source objects. - * @param- {Array} [stackB=[]] Internally used to associate clones with their - * source counterparts. - * @returns {Mixed} Returns the cloned `value`. - * @example - * - * var stooges = [ - * { 'name': 'moe', 'age': 40 }, - * { 'name': 'larry', 'age': 50 }, - * { 'name': 'curly', 'age': 60 } - * ]; - * - * _.clone({ 'name': 'moe' }); - * // => { 'name': 'moe' } - * - * var shallow = _.clone(stooges); - * shallow[0] === stooges[0]; - * // => true - * - * var deep = _.clone(stooges, true); - * shallow[0] === stooges[0]; - * // => false - */ - function clone(value, deep, guard, stackA, stackB) { - if (value == null) { - return value; - } - if (guard) { - deep = false; - } - // inspect [[Class]] - var isObj = isObject(value); - if (isObj) { - // don't clone `arguments` objects, functions, or non-object Objects - var className = toString.call(value); - if (!cloneableClasses[className] || (noArgsClass && isArguments(value))) { - return value; - } - var isArr = className == arrayClass; - isObj = isArr || (className == objectClass ? isPlainObject(value) : isObj); - } - // shallow clone - if (!isObj || !deep) { - // don't clone functions - return isObj - ? (isArr ? slice.call(value) : assign({}, value)) - : value; - } - - var ctor = value.constructor; - switch (className) { - case boolClass: - case dateClass: - return new ctor(+value); - - case numberClass: - case stringClass: - return new ctor(value); - - case regexpClass: - return ctor(value.source, reFlags.exec(value)); - } - // check for circular references and return corresponding clone - stackA || (stackA = []); - stackB || (stackB = []); - - var length = stackA.length; - while (length--) { - if (stackA[length] == value) { - return stackB[length]; - } - } - // init cloned object - var result = isArr ? ctor(value.length) : {}; - - // add the source value to the stack of traversed objects - // and associate it with its clone - stackA.push(value); - stackB.push(result); - - // recursively populate clone (susceptible to call stack limits) - (isArr ? forEach : forOwn)(value, function(objValue, key) { - result[key] = clone(objValue, deep, null, stackA, stackB); - }); - - return result; - } - - /** - * Assigns own enumerable properties of source object(s) to the `destination` - * object for all `destination` properties that resolve to `null`/`undefined`. - * Once a property is set, additional defaults of the same property will be - * ignored. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The destination object. - * @param {Object} [default1, default2, ...] The default objects. - * @returns {Object} Returns the destination object. - * @example - * - * var iceCream = { 'flavor': 'chocolate' }; - * _.defaults(iceCream, { 'flavor': 'vanilla', 'sprinkles': 'rainbow' }); - * // => { 'flavor': 'chocolate', 'sprinkles': 'rainbow' } - */ - var defaults = createIterator(assignIteratorOptions, { - 'objectLoop': 'if (result[index] == null) ' + assignIteratorOptions.objectLoop - }); - - /** - * Creates a sorted array of all enumerable properties, own and inherited, - * of `object` that have function values. - * - * @static - * @memberOf _ - * @alias methods - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns a new array of property names that have function values. - * @example - * - * _.functions(_); - * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...] - */ - function functions(object) { - var result = []; - forIn(object, function(value, key) { - if (isFunction(value)) { - result.push(key); - } - }); - return result.sort(); - } - - /** - * Checks if the specified object `property` exists and is a direct property, - * instead of an inherited property. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to check. - * @param {String} property The property to check for. - * @returns {Boolean} Returns `true` if key is a direct property, else `false`. - * @example - * - * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b'); - * // => true - */ - function has(object, property) { - return object ? hasOwnProperty.call(object, property) : false; - } - - /** - * Creates an object composed of the inverted keys and values of the given `object`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to invert. - * @returns {Object} Returns the created inverted object. - * @example - * - * _.invert({ 'first': 'Moe', 'second': 'Larry', 'third': 'Curly' }); - * // => { 'Moe': 'first', 'Larry': 'second', 'Curly': 'third' } (order is not guaranteed) - */ - function invert(object) { - var result = {}; - forOwn(object, function(value, key) { - result[value] = key; - }); - return result; - } - - /** - * Checks if `value` is an array. - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is an array, else `false`. - * @example - * - * (function() { return _.isArray(arguments); })(); - * // => false - * - * _.isArray([1, 2, 3]); - * // => true - */ - var isArray = nativeIsArray || function(value) { - return toString.call(value) == arrayClass; - }; - - /** - * Checks if `value` is a boolean (`true` or `false`) value. - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is a boolean value, else `false`. - * @example - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || toString.call(value) == boolClass; - } - - /** - * Checks if `value` is a date. - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is a date, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - */ - function isDate(value) { - return toString.call(value) == dateClass; - } - - /** - * Checks if `value` is a DOM element. - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - */ - function isElement(value) { - return value ? value.nodeType === 1 : false; - } - - /** - * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a - * length of `0` and objects with no own enumerable properties are considered - * "empty". - * - * @static - * @memberOf _ - * @category Objects - * @param {Array|Object|String} value The value to inspect. - * @returns {Boolean} Returns `true` if the `value` is empty, else `false`. - * @example - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({}); - * // => true - * - * _.isEmpty(''); - * // => true - */ - function isEmpty(value) { - var result = true; - if (!value) { - return result; - } - var className = toString.call(value), - length = value.length; - - if ((className == arrayClass || className == stringClass || - className == argsClass || (noArgsClass && isArguments(value))) || - (className == objectClass && typeof length == 'number' && isFunction(value.splice))) { - return !length; - } - forOwn(value, function() { - return (result = false); - }); - return result; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent to each other. - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} a The value to compare. - * @param {Mixed} b The other value to compare. - * @param- {Object} [stackA=[]] Internally used track traversed `a` objects. - * @param- {Object} [stackB=[]] Internally used track traversed `b` objects. - * @returns {Boolean} Returns `true` if the values are equvalent, else `false`. - * @example - * - * var moe = { 'name': 'moe', 'luckyNumbers': [13, 27, 34] }; - * var clone = { 'name': 'moe', 'luckyNumbers': [13, 27, 34] }; - * - * moe == clone; - * // => false - * - * _.isEqual(moe, clone); - * // => true - */ - function isEqual(a, b, stackA, stackB) { - // exit early for identical values - if (a === b) { - // treat `+0` vs. `-0` as not equal - return a !== 0 || (1 / a == 1 / b); - } - // a strict comparison is necessary because `null == undefined` - if (a == null || b == null) { - return a === b; - } - // compare [[Class]] names - var className = toString.call(a); - if (className != toString.call(b)) { - return false; - } - switch (className) { - case boolClass: - case dateClass: - // coerce dates and booleans to numbers, dates to milliseconds and booleans - // to `1` or `0`, treating invalid dates coerced to `NaN` as not equal - return +a == +b; - - case numberClass: - // treat `NaN` vs. `NaN` as equal - return a != +a - ? b != +b - // but treat `+0` vs. `-0` as not equal - : (a == 0 ? (1 / a == 1 / b) : a == +b); - - case regexpClass: - case stringClass: - // coerce regexes to strings (http://es5.github.com/#x15.10.6.4) - // treat string primitives and their corresponding object instances as equal - return a == b + ''; - } - // exit early, in older browsers, if `a` is array-like but not `b` - var isArr = className == arrayClass || className == argsClass; - if (noArgsClass && !isArr && (isArr = isArguments(a)) && !isArguments(b)) { - return false; - } - if (!isArr) { - // unwrap any `lodash` wrapped values - if (a.__wrapped__ || b.__wrapped__) { - return isEqual(a.__wrapped__ || a, b.__wrapped__ || b); - } - // exit for functions and DOM nodes - if (className != objectClass || (noNodeClass && ( - (typeof a.toString != 'function' && typeof (a + '') == 'string') || - (typeof b.toString != 'function' && typeof (b + '') == 'string')))) { - return false; - } - var ctorA = a.constructor, - ctorB = b.constructor; - - // non `Object` object instances with different constructors are not equal - if (ctorA != ctorB && !( - isFunction(ctorA) && ctorA instanceof ctorA && - isFunction(ctorB) && ctorB instanceof ctorB - )) { - return false; - } - } - // assume cyclic structures are equal - // the algorithm for detecting cyclic structures is adapted from ES 5.1 - // section 15.12.3, abstract operation `JO` (http://es5.github.com/#x15.12.3) - stackA || (stackA = []); - stackB || (stackB = []); - - var length = stackA.length; - while (length--) { - if (stackA[length] == a) { - return stackB[length] == b; - } - } - - var index = -1, - result = true, - size = 0; - - // add `a` and `b` to the stack of traversed objects - stackA.push(a); - stackB.push(b); - - // recursively compare objects and arrays (susceptible to call stack limits) - if (isArr) { - // compare lengths to determine if a deep comparison is necessary - size = a.length; - result = size == b.length; - - if (result) { - // deep compare the contents, ignoring non-numeric properties - while (size--) { - if (!(result = isEqual(a[size], b[size], stackA, stackB))) { - break; - } - } - } - return result; - } - // deep compare objects - for (var key in a) { - if (hasOwnProperty.call(a, key)) { - // count the number of properties. - size++; - // deep compare each property value. - if (!(hasOwnProperty.call(b, key) && isEqual(a[key], b[key], stackA, stackB))) { - return false; - } - } - } - // ensure both objects have the same number of properties - for (key in b) { - // The JS engine in Adobe products, like InDesign, has a bug that causes - // `!size--` to throw an error so it must be wrapped in parentheses. - // https://github.com/documentcloud/underscore/issues/355 - if (hasOwnProperty.call(b, key) && !(size--)) { - // `size` will be `-1` if `b` has more properties than `a` - return false; - } - } - // handle JScript [[DontEnum]] bug - if (hasDontEnumBug) { - while (++index < 7) { - key = shadowed[index]; - if (hasOwnProperty.call(a, key) && - !(hasOwnProperty.call(b, key) && isEqual(a[key], b[key], stackA, stackB))) { - return false; - } - } - } - return true; - } - - /** - * Checks if `value` is, or can be coerced to, a finite number. - * - * Note: This is not the same as native `isFinite`, which will return true for - * booleans and empty strings. See http://es5.github.com/#x15.1.2.5. - * - * @deprecated - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is a finite number, else `false`. - * @example - * - * _.isFinite(-101); - * // => true - * - * _.isFinite('10'); - * // => true - * - * _.isFinite(true); - * // => false - * - * _.isFinite(''); - * // => false - * - * _.isFinite(Infinity); - * // => false - */ - function isFinite(value) { - return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value)); - } - - /** - * Checks if `value` is a function. - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - */ - function isFunction(value) { - return typeof value == 'function'; - } - // fallback for older versions of Chrome and Safari - if (isFunction(/x/)) { - isFunction = function(value) { - return toString.call(value) == funcClass; - }; - } - - /** - * Checks if `value` is the language type of Object. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ - function isObject(value) { - // check if the value is the ECMAScript language type of Object - // http://es5.github.com/#x8 - // and avoid a V8 bug - // http://code.google.com/p/v8/issues/detail?id=2291 - return value ? objectTypes[typeof value] : false; - } - - /** - * Checks if `value` is `NaN`. - * - * Note: This is not the same as native `isNaN`, which will return true for - * `undefined` and other values. See http://es5.github.com/#x15.1.2.4. - * - * @deprecated - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // `NaN` as a primitive is the only value that is not equal to itself - // (perform the [[Class]] check first to avoid errors with some host objects in IE) - return toString.call(value) == numberClass && value != +value - } - - /** - * Checks if `value` is `null`. - * - * @deprecated - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(undefined); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is a number. - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is a number, else `false`. - * @example - * - * _.isNumber(8.4 * 5); - * // => true - */ - function isNumber(value) { - return toString.call(value) == numberClass; - } - - /** - * Checks if a given `value` is an object created by the `Object` constructor. - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Stooge(name, age) { - * this.name = name; - * this.age = age; - * } - * - * _.isPlainObject(new Stooge('moe', 40)); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'name': 'moe', 'age': 40 }); - * // => true - */ - var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) { - if (!(value && typeof value == 'object')) { - return false; - } - var valueOf = value.valueOf, - objProto = typeof valueOf == 'function' && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto); - - return objProto - ? value == objProto || (getPrototypeOf(value) == objProto && !isArguments(value)) - : shimIsPlainObject(value); - }; - - /** - * Checks if `value` is a regular expression. - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is a regular expression, else `false`. - * @example - * - * _.isRegExp(/moe/); - * // => true - */ - function isRegExp(value) { - return toString.call(value) == regexpClass; - } - - /** - * Checks if `value` is a string. - * - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is a string, else `false`. - * @example - * - * _.isString('moe'); - * // => true - */ - function isString(value) { - return toString.call(value) == stringClass; - } - - /** - * Checks if `value` is `undefined`. - * - * @deprecated - * @static - * @memberOf _ - * @category Objects - * @param {Mixed} value The value to check. - * @returns {Boolean} Returns `true` if the `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Creates an array composed of the own enumerable property names of `object`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns a new array of property names. - * @example - * - * _.keys({ 'one': 1, 'two': 2, 'three': 3 }); - * // => ['one', 'two', 'three'] (order is not guaranteed) - */ - var keys = !nativeKeys ? shimKeys : function(object) { - // avoid iterating over the `prototype` property - return typeof object == 'function' && propertyIsEnumerable.call(object, 'prototype') - ? shimKeys(object) - : (isObject(object) ? nativeKeys(object) : []); - }; - - /** - * Merges enumerable properties of the source object(s) into the `destination` - * object. Subsequent sources will overwrite propery assignments of previous - * sources. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The destination object. - * @param {Object} [source1, source2, ...] The source objects. - * @param- {Object} [indicator] Internally used to indicate that the `stack` - * argument is an array of traversed objects instead of another source object. - * @param- {Array} [stackA=[]] Internally used to track traversed source objects. - * @param- {Array} [stackB=[]] Internally used to associate values with their - * source counterparts. - * @returns {Object} Returns the destination object. - * @example - * - * var stooges = [ - * { 'name': 'moe' }, - * { 'name': 'larry' } - * ]; - * - * var ages = [ - * { 'age': 40 }, - * { 'age': 50 } - * ]; - * - * _.merge(stooges, ages); - * // => [{ 'name': 'moe', 'age': 40 }, { 'name': 'larry', 'age': 50 }] - */ - function merge(object, source, indicator) { - var args = arguments, - index = 0, - length = 2, - stackA = args[3], - stackB = args[4]; - - if (indicator !== indicatorObject) { - stackA = []; - stackB = []; - - // work with `_.reduce` by only using its callback `accumulator` and `value` arguments - if (typeof indicator != 'number') { - length = args.length; - } - } - while (++index < length) { - forOwn(args[index], function(source, key) { - var found, isArr, value; - if (source && ((isArr = isArray(source)) || isPlainObject(source))) { - // avoid merging previously merged cyclic sources - var stackLength = stackA.length; - while (stackLength--) { - found = stackA[stackLength] == source; - if (found) { - break; - } - } - if (found) { - object[key] = stackB[stackLength]; - } - else { - // add `source` and associated `value` to the stack of traversed objects - stackA.push(source); - stackB.push(value = (value = object[key], isArr) - ? (isArray(value) ? value : []) - : (isPlainObject(value) ? value : {}) - ); - // recursively merge objects and arrays (susceptible to call stack limits) - object[key] = merge(value, source, indicatorObject, stackA, stackB); - } - } else if (source != null) { - object[key] = source; - } - }); - } - return object; - } - - /** - * Creates a shallow clone of `object` excluding the specified properties. - * Property names may be specified as individual arguments or as arrays of - * property names. If `callback` is passed, it will be executed for each property - * in the `object`, omitting the properties `callback` returns truthy for. The - * `callback` is bound to `thisArg` and invoked with three arguments; (value, key, object). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The source object. - * @param {Function|String} callback|[prop1, prop2, ...] The properties to omit - * or the function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns an object without the omitted properties. - * @example - * - * _.omit({ 'name': 'moe', 'age': 40, 'userid': 'moe1' }, 'userid'); - * // => { 'name': 'moe', 'age': 40 } - * - * _.omit({ 'name': 'moe', '_hint': 'knucklehead', '_seed': '96c4eb' }, function(value, key) { - * return key.charAt(0) == '_'; - * }); - * // => { 'name': 'moe' } - */ - function omit(object, callback, thisArg) { - var isFunc = typeof callback == 'function', - result = {}; - - if (isFunc) { - callback = createCallback(callback, thisArg); - } else { - var props = concat.apply(arrayRef, arguments); - } - forIn(object, function(value, key, object) { - if (isFunc - ? !callback(value, key, object) - : indexOf(props, key, 1) < 0 - ) { - result[key] = value; - } - }); - return result; - } - - /** - * Creates a two dimensional array of the given object's key-value pairs, - * i.e. `[[key1, value1], [key2, value2]]`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns new array of key-value pairs. - * @example - * - * _.pairs({ 'moe': 30, 'larry': 40, 'curly': 50 }); - * // => [['moe', 30], ['larry', 40], ['curly', 50]] (order is not guaranteed) - */ - function pairs(object) { - var result = []; - forOwn(object, function(value, key) { - result.push([key, value]); - }); - return result; - } - - /** - * Creates a shallow clone of `object` composed of the specified properties. - * Property names may be specified as individual arguments or as arrays of - * property names. If `callback` is passed, it will be executed for each property - * in the `object`, picking the properties `callback` returns truthy for. The - * `callback` is bound to `thisArg` and invoked with three arguments; (value, key, object). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The source object. - * @param {Function|String} callback|[prop1, prop2, ...] The properties to pick - * or the function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns an object composed of the picked properties. - * @example - * - * _.pick({ 'name': 'moe', 'age': 40, 'userid': 'moe1' }, 'name', 'age'); - * // => { 'name': 'moe', 'age': 40 } - * - * _.pick({ 'name': 'moe', '_hint': 'knucklehead', '_seed': '96c4eb' }, function(value, key) { - * return key.charAt(0) != '_'; - * }); - * // => { 'name': 'moe' } - */ - function pick(object, callback, thisArg) { - var result = {}; - if (typeof callback != 'function') { - var index = 0, - props = concat.apply(arrayRef, arguments), - length = props.length; - - while (++index < length) { - var key = props[index]; - if (key in object) { - result[key] = object[key]; - } - } - } else { - callback = createCallback(callback, thisArg); - forIn(object, function(value, key, object) { - if (callback(value, key, object)) { - result[key] = value; - } - }); - } - return result; - } - - /** - * Creates an array composed of the own enumerable property values of `object`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns a new array of property values. - * @example - * - * _.values({ 'one': 1, 'two': 2, 'three': 3 }); - * // => [1, 2, 3] - */ - function values(object) { - var result = []; - forOwn(object, function(value) { - result.push(value); - }); - return result; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Checks if a given `target` element is present in a `collection` using strict - * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used - * as the offset from the end of the collection. - * - * @static - * @memberOf _ - * @alias include - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Mixed} target The value to check for. - * @param {Number} [fromIndex=0] The index to search from. - * @returns {Boolean} Returns `true` if the `target` element is found, else `false`. - * @example - * - * _.contains([1, 2, 3], 1); - * // => true - * - * _.contains([1, 2, 3], 1, 2); - * // => false - * - * _.contains({ 'name': 'moe', 'age': 40 }, 'moe'); - * // => true - * - * _.contains('curly', 'ur'); - * // => true - */ - function contains(collection, target, fromIndex) { - var index = -1, - length = collection ? collection.length : 0, - result = false; - - fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0; - if (typeof length == 'number') { - result = (isString(collection) - ? collection.indexOf(target, fromIndex) - : indexOf(collection, target, fromIndex) - ) > -1; - } else { - forEach(collection, function(value) { - if (++index >= fromIndex) { - return !(result = value === target); - } - }); - } - return result; - } - - /** - * Creates an object composed of keys returned from running each element of - * `collection` through a `callback`. The corresponding value of each key is - * the number of times the key was returned by `callback`. The `callback` is - * bound to `thisArg` and invoked with three arguments; (value, index|key, collection). - * The `callback` argument may also be the name of a property to count by (e.g. 'length'). - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function|String} callback|property The function called per iteration - * or property name to count by. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); }); - * // => { '4': 1, '6': 2 } - * - * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math); - * // => { '4': 1, '6': 2 } - * - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - function countBy(collection, callback, thisArg) { - var result = {}; - callback = createCallback(callback, thisArg); - forEach(collection, function(value, key, collection) { - key = callback(value, key, collection); - (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1); - }); - return result; - } - - /** - * Checks if the `callback` returns a truthy value for **all** elements of a - * `collection`. The `callback` is bound to `thisArg` and invoked with three - * arguments; (value, index|key, collection). - * - * @static - * @memberOf _ - * @alias all - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Boolean} Returns `true` if all elements pass the callback check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - */ - function every(collection, callback, thisArg) { - var result = true; - callback = createCallback(callback, thisArg); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - if (!(result = !!callback(collection[index], index, collection))) { - break; - } - } - } else { - forEach(collection, function(value, index, collection) { - return (result = !!callback(value, index, collection)); - }); - } - return result; - } - - /** - * Examines each element in a `collection`, returning an array of all elements - * the `callback` returns truthy for. The `callback` is bound to `thisArg` and - * invoked with three arguments; (value, index|key, collection). - * - * @static - * @memberOf _ - * @alias select - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of elements that passed the callback check. - * @example - * - * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); - * // => [2, 4, 6] - */ - function filter(collection, callback, thisArg) { - var result = []; - callback = createCallback(callback, thisArg); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (callback(value, index, collection)) { - result.push(value); - } - } - } else { - forEach(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result.push(value); - } - }); - } - return result; - } - - /** - * Examines each element in a `collection`, returning the first one the `callback` - * returns truthy for. The function returns as soon as it finds an acceptable - * element, and does not iterate over the entire `collection`. The `callback` is - * bound to `thisArg` and invoked with three arguments; (value, index|key, collection). - * - * @static - * @memberOf _ - * @alias detect - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} callback The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Mixed} Returns the element that passed the callback check, - * else `undefined`. - * @example - * - * var even = _.find([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); - * // => 2 - */ - function find(collection, callback, thisArg) { - var result; - callback = createCallback(callback, thisArg); - forEach(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result = value; - return false; - } - }); - return result; - } - - /** - * Iterates over a `collection`, executing the `callback` for each element in - * the `collection`. The `callback` is bound to `thisArg` and invoked with three - * arguments; (value, index|key, collection). Callbacks may exit iteration early - * by explicitly returning `false`. - * - * @static - * @memberOf _ - * @alias each - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} callback The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|String} Returns `collection`. - * @example - * - * _([1, 2, 3]).forEach(alert).join(','); - * // => alerts each number and returns '1,2,3' - * - * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, alert); - * // => alerts each number (order is not guaranteed) - */ - var forEach = createIterator(forEachIteratorOptions); - - /** - * Creates an object composed of keys returned from running each element of - * `collection` through a `callback`. The corresponding value of each key is an - * array of elements passed to `callback` that returned the key. The `callback` - * is bound to `thisArg` and invoked with three arguments; (value, index|key, collection). - * The `callback` argument may also be the name of a property to group by (e.g. 'length'). - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function|String} callback|property The function called per iteration - * or property name to group by. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); }); - * // => { '4': [4.2], '6': [6.1, 6.4] } - * - * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math); - * // => { '4': [4.2], '6': [6.1, 6.4] } - * - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - function groupBy(collection, callback, thisArg) { - var result = {}; - callback = createCallback(callback, thisArg); - forEach(collection, function(value, key, collection) { - key = callback(value, key, collection); - (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value); - }); - return result; - } - - /** - * Invokes the method named by `methodName` on each element in the `collection`, - * returning an array of the results of each invoked method. Additional arguments - * will be passed to each invoked method. If `methodName` is a function it will - * be invoked for, and `this` bound to, each element in the `collection`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function|String} methodName The name of the method to invoke or - * the function invoked per iteration. - * @param {Mixed} [arg1, arg2, ...] Arguments to invoke the method with. - * @returns {Array} Returns a new array of the results of each invoked method. - * @example - * - * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invoke([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - function invoke(collection, methodName) { - var args = slice.call(arguments, 2), - isFunc = typeof methodName == 'function', - result = []; - - forEach(collection, function(value) { - result.push((isFunc ? methodName : value[methodName]).apply(value, args)); - }); - return result; - } - - /** - * Creates an array of values by running each element in the `collection` - * through a `callback`. The `callback` is bound to `thisArg` and invoked with - * three arguments; (value, index|key, collection). - * - * @static - * @memberOf _ - * @alias collect - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of the results of each `callback` execution. - * @example - * - * _.map([1, 2, 3], function(num) { return num * 3; }); - * // => [3, 6, 9] - * - * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; }); - * // => [3, 6, 9] (order is not guaranteed) - */ - function map(collection, callback, thisArg) { - var index = -1, - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); - - callback = createCallback(callback, thisArg); - if (isArray(collection)) { - while (++index < length) { - result[index] = callback(collection[index], index, collection); - } - } else { - forEach(collection, function(value, key, collection) { - result[++index] = callback(value, key, collection); - }); - } - return result; - } - - /** - * Retrieves the maximum value of an `array`. If `callback` is passed, - * it will be executed for each value in the `array` to generate the - * criterion by which the value is ranked. The `callback` is bound to - * `thisArg` and invoked with three arguments; (value, index, collection). - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} [callback] The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Mixed} Returns the maximum value. - * @example - * - * var stooges = [ - * { 'name': 'moe', 'age': 40 }, - * { 'name': 'larry', 'age': 50 }, - * { 'name': 'curly', 'age': 60 } - * ]; - * - * _.max(stooges, function(stooge) { return stooge.age; }); - * // => { 'name': 'curly', 'age': 60 }; - */ - function max(collection, callback, thisArg) { - var computed = -Infinity, - index = -1, - length = collection ? collection.length : 0, - result = computed; - - if (callback || !isArray(collection)) { - callback = !callback && isString(collection) - ? charAtCallback - : createCallback(callback, thisArg); - - forEach(collection, function(value, index, collection) { - var current = callback(value, index, collection); - if (current > computed) { - computed = current; - result = value; - } - }); - } else { - while (++index < length) { - if (collection[index] > result) { - result = collection[index]; - } - } - } - return result; - } - - /** - * Retrieves the minimum value of an `array`. If `callback` is passed, - * it will be executed for each value in the `array` to generate the - * criterion by which the value is ranked. The `callback` is bound to `thisArg` - * and invoked with three arguments; (value, index, collection). - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} [callback] The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Mixed} Returns the minimum value. - * @example - * - * _.min([10, 5, 100, 2, 1000]); - * // => 2 - */ - function min(collection, callback, thisArg) { - var computed = Infinity, - index = -1, - length = collection ? collection.length : 0, - result = computed; - - if (callback || !isArray(collection)) { - callback = !callback && isString(collection) - ? charAtCallback - : createCallback(callback, thisArg); - - forEach(collection, function(value, index, collection) { - var current = callback(value, index, collection); - if (current < computed) { - computed = current; - result = value; - } - }); - } else { - while (++index < length) { - if (collection[index] < result) { - result = collection[index]; - } - } - } - return result; - } - - /** - * Retrieves the value of a specified property from all elements in - * the `collection`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {String} property The property to pluck. - * @returns {Array} Returns a new array of property values. - * @example - * - * var stooges = [ - * { 'name': 'moe', 'age': 40 }, - * { 'name': 'larry', 'age': 50 }, - * { 'name': 'curly', 'age': 60 } - * ]; - * - * _.pluck(stooges, 'name'); - * // => ['moe', 'larry', 'curly'] - */ - function pluck(collection, property) { - var result = []; - forEach(collection, function(value) { - result.push(value[property]); - }); - return result; - } - - /** - * Boils down a `collection` to a single value. The initial state of the - * reduction is `accumulator` and each successive step of it should be returned - * by the `callback`. The `callback` is bound to `thisArg` and invoked with 4 - * arguments; for arrays they are (accumulator, value, index|key, collection). - * - * @static - * @memberOf _ - * @alias foldl, inject - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} callback The function called per iteration. - * @param {Mixed} [accumulator] Initial value of the accumulator. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Mixed} Returns the accumulated value. - * @example - * - * var sum = _.reduce([1, 2, 3], function(memo, num) { return memo + num; }); - * // => 6 - */ - function reduce(collection, callback, accumulator, thisArg) { - var noaccum = arguments.length < 3; - callback = createCallback(callback, thisArg); - forEach(collection, function(value, index, collection) { - accumulator = noaccum - ? (noaccum = false, value) - : callback(accumulator, value, index, collection) - }); - return accumulator; - } - - /** - * The right-associative version of `_.reduce`. - * - * @static - * @memberOf _ - * @alias foldr - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} callback The function called per iteration. - * @param {Mixed} [accumulator] Initial value of the accumulator. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Mixed} Returns the accumulated value. - * @example - * - * var list = [[0, 1], [2, 3], [4, 5]]; - * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, callback, accumulator, thisArg) { - var iteratee = collection, - length = collection ? collection.length : 0, - noaccum = arguments.length < 3; - - if (typeof length != 'number') { - var props = keys(collection); - length = props.length; - } else if (noCharByIndex && isString(collection)) { - iteratee = collection.split(''); - } - forEach(collection, function(value, index, collection) { - index = props ? props[--length] : --length; - accumulator = noaccum - ? (noaccum = false, iteratee[index]) - : callback.call(thisArg, accumulator, iteratee[index], index, collection); - }); - return accumulator; - } - - /** - * The opposite of `_.filter`, this method returns the values of a - * `collection` that `callback` does **not** return truthy for. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of elements that did **not** pass the - * callback check. - * @example - * - * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); - * // => [1, 3, 5] - */ - function reject(collection, callback, thisArg) { - callback = createCallback(callback, thisArg); - return filter(collection, function(value, index, collection) { - return !callback(value, index, collection); - }); - } - - /** - * Creates an array of shuffled `array` values, using a version of the - * Fisher-Yates shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|String} collection The collection to shuffle. - * @returns {Array} Returns a new shuffled collection. - * @example - * - * _.shuffle([1, 2, 3, 4, 5, 6]); - * // => [4, 1, 6, 3, 5, 2] - */ - function shuffle(collection) { - var index = -1, - result = Array(collection ? collection.length : 0); - - forEach(collection, function(value) { - var rand = floor(nativeRandom() * (++index + 1)); - result[index] = result[rand]; - result[rand] = value; - }); - return result; - } - - /** - * Gets the size of the `collection` by returning `collection.length` for arrays - * and array-like objects or the number of own enumerable properties for objects. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|String} collection The collection to inspect. - * @returns {Number} Returns `collection.length` or number of own enumerable properties. - * @example - * - * _.size([1, 2]); - * // => 2 - * - * _.size({ 'one': 1, 'two': 2, 'three': 3 }); - * // => 3 - * - * _.size('curly'); - * // => 5 - */ - function size(collection) { - var length = collection ? collection.length : 0; - return typeof length == 'number' ? length : keys(collection).length; - } - - /** - * Checks if the `callback` returns a truthy value for **any** element of a - * `collection`. The function returns as soon as it finds passing value, and - * does not iterate over the entire `collection`. The `callback` is bound to - * `thisArg` and invoked with three arguments; (value, index|key, collection). - * - * @static - * @memberOf _ - * @alias any - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Boolean} Returns `true` if any element passes the callback check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - */ - function some(collection, callback, thisArg) { - var result; - callback = createCallback(callback, thisArg); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - if ((result = callback(collection[index], index, collection))) { - break; - } - } - } else { - forEach(collection, function(value, index, collection) { - return !(result = callback(value, index, collection)); - }); - } - return !!result; - } - - /** - * Creates an array, stable sorted in ascending order by the results of - * running each element of `collection` through a `callback`. The `callback` - * is bound to `thisArg` and invoked with three arguments; (value, index|key, collection). - * The `callback` argument may also be the name of a property to sort by (e.g. 'length'). - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function|String} callback|property The function called per iteration - * or property name to sort by. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of sorted elements. - * @example - * - * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); }); - * // => [3, 1, 2] - * - * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math); - * // => [3, 1, 2] - * - * _.sortBy(['larry', 'brendan', 'moe'], 'length'); - * // => ['moe', 'larry', 'brendan'] - */ - function sortBy(collection, callback, thisArg) { - var result = []; - callback = createCallback(callback, thisArg); - forEach(collection, function(value, index, collection) { - result.push({ - 'criteria': callback(value, index, collection), - 'index': index, - 'value': value - }); - }); - - var length = result.length; - result.sort(compareAscending); - while (length--) { - result[length] = result[length].value; - } - return result; - } - - /** - * Converts the `collection`, to an array. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|String} collection The collection to convert. - * @returns {Array} Returns the new converted array. - * @example - * - * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4); - * // => [2, 3, 4] - */ - function toArray(collection) { - if (collection && typeof collection.length == 'number') { - return (noArraySliceOnStrings ? isString(collection) : typeof collection == 'string') - ? collection.split('') - : slice.call(collection); - } - return values(collection); - } - - /** - * Examines each element in a `collection`, returning an array of all elements - * that contain the given `properties`. - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Object} properties The object of property values to filter by. - * @returns {Array} Returns a new array of elements that contain the given `properties`. - * @example - * - * var stooges = [ - * { 'name': 'moe', 'age': 40 }, - * { 'name': 'larry', 'age': 50 }, - * { 'name': 'curly', 'age': 60 } - * ]; - * - * _.where(stooges, { 'age': 40 }); - * // => [{ 'name': 'moe', 'age': 40 }] - */ - function where(collection, properties) { - var props = keys(properties); - return filter(collection, function(object) { - var length = props.length; - while (length--) { - var result = object[props[length]] === properties[props[length]]; - if (!result) { - break; - } - } - return !!result; - }); - } - - /*--------------------------------------------------------------------------*/ - - /** - * Creates an array with all falsey values of `array` removed. The values - * `false`, `null`, `0`, `""`, `undefined` and `NaN` are all falsey. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to compact. - * @returns {Array} Returns a new filtered array. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array ? array.length : 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result.push(value); - } - } - return result; - } - - /** - * Creates an array of `array` elements not present in the other arrays - * using strict equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to process. - * @param {Array} [array1, array2, ...] Arrays to check. - * @returns {Array} Returns a new array of `array` elements not present in the - * other arrays. - * @example - * - * _.difference([1, 2, 3, 4, 5], [5, 2, 10]); - * // => [1, 3, 4] - */ - function difference(array) { - var index = -1, - length = array ? array.length : 0, - flattened = concat.apply(arrayRef, arguments), - contains = cachedContains(flattened, length), - result = []; - - while (++index < length) { - var value = array[index]; - if (!contains(value)) { - result.push(value); - } - } - return result; - } - - /** - * Gets the first element of the `array`. Pass `n` to return the first `n` - * elements of the `array`. - * - * @static - * @memberOf _ - * @alias head, take - * @category Arrays - * @param {Array} array The array to query. - * @param {Number} [n] The number of elements to return. - * @param- {Object} [guard] Internally used to allow this method to work with - * others like `_.map` without using their callback `index` argument for `n`. - * @returns {Mixed} Returns the first element or an array of the first `n` - * elements of `array`. - * @example - * - * _.first([5, 4, 3, 2, 1]); - * // => 5 - */ - function first(array, n, guard) { - if (array) { - return (n == null || guard) ? array[0] : slice.call(array, 0, n); - } - } - - /** - * Flattens a nested array (the nesting can be to any depth). If `shallow` is - * truthy, `array` will only be flattened a single level. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to compact. - * @param {Boolean} shallow A flag to indicate only flattening a single level. - * @returns {Array} Returns a new flattened array. - * @example - * - * _.flatten([1, [2], [3, [[4]]]]); - * // => [1, 2, 3, 4]; - * - * _.flatten([1, [2], [3, [[4]]]], true); - * // => [1, 2, 3, [[4]]]; - */ - function flatten(array, shallow) { - var index = -1, - length = array ? array.length : 0, - result = []; - - while (++index < length) { - var value = array[index]; - - // recursively flatten arrays (susceptible to call stack limits) - if (isArray(value)) { - push.apply(result, shallow ? value : flatten(value)); - } else { - result.push(value); - } - } - return result; - } - - /** - * Gets the index at which the first occurrence of `value` is found using - * strict equality for comparisons, i.e. `===`. If the `array` is already - * sorted, passing `true` for `fromIndex` will run a faster binary search. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {Mixed} value The value to search for. - * @param {Boolean|Number} [fromIndex=0] The index to search from or `true` to - * perform a binary search on a sorted `array`. - * @returns {Number} Returns the index of the matched value or `-1`. - * @example - * - * _.indexOf([1, 2, 3, 1, 2, 3], 2); - * // => 1 - * - * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3); - * // => 4 - * - * _.indexOf([1, 1, 2, 2, 3, 3], 2, true); - * // => 2 - */ - function indexOf(array, value, fromIndex) { - var index = -1, - length = array ? array.length : 0; - - if (typeof fromIndex == 'number') { - index = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0) - 1; - } else if (fromIndex) { - index = sortedIndex(array, value); - return array[index] === value ? index : -1; - } - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * Gets all but the last element of `array`. Pass `n` to exclude the last `n` - * elements from the result. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to query. - * @param {Number} [n=1] The number of elements to exclude. - * @param- {Object} [guard] Internally used to allow this method to work with - * others like `_.map` without using their callback `index` argument for `n`. - * @returns {Array} Returns all but the last element or `n` elements of `array`. - * @example - * - * _.initial([3, 2, 1]); - * // => [3, 2] - */ - function initial(array, n, guard) { - return array - ? slice.call(array, 0, -((n == null || guard) ? 1 : n)) - : []; - } - - /** - * Computes the intersection of all the passed-in arrays using strict equality - * for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} [array1, array2, ...] Arrays to process. - * @returns {Array} Returns a new array of unique elements, in order, that are - * present in **all** of the arrays. - * @example - * - * _.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]); - * // => [1, 2] - */ - function intersection(array) { - var args = arguments, - argsLength = args.length, - cache = {}, - result = []; - - forEach(array, function(value) { - if (indexOf(result, value) < 0) { - var length = argsLength; - while (--length) { - if (!(cache[length] || (cache[length] = cachedContains(args[length])))(value)) { - return; - } - } - result.push(value); - } - }); - return result; - } - - /** - * Gets the last element of the `array`. Pass `n` to return the last `n` - * elements of the `array`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to query. - * @param {Number} [n] The number of elements to return. - * @param- {Object} [guard] Internally used to allow this method to work with - * others like `_.map` without using their callback `index` argument for `n`. - * @returns {Mixed} Returns the last element or an array of the last `n` - * elements of `array`. - * @example - * - * _.last([3, 2, 1]); - * // => 1 - */ - function last(array, n, guard) { - if (array) { - var length = array.length; - return (n == null || guard) ? array[length - 1] : slice.call(array, -n || length); - } - } - - /** - * Gets the index at which the last occurrence of `value` is found using strict - * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used - * as the offset from the end of the collection. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {Mixed} value The value to search for. - * @param {Number} [fromIndex=array.length-1] The index to search from. - * @returns {Number} Returns the index of the matched value or `-1`. - * @example - * - * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2); - * // => 4 - * - * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var index = array ? array.length : 0; - if (typeof fromIndex == 'number') { - index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1; - } - while (index--) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * Creates an object composed from arrays of `keys` and `values`. Pass either - * a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`, or - * two arrays, one of `keys` and one of corresponding `values`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} keys The array of keys. - * @param {Array} [values=[]] The array of values. - * @returns {Object} Returns an object composed of the given keys and - * corresponding values. - * @example - * - * _.object(['moe', 'larry', 'curly'], [30, 40, 50]); - * // => { 'moe': 30, 'larry': 40, 'curly': 50 } - */ - function object(keys, values) { - var index = -1, - length = keys ? keys.length : 0, - result = {}; - - while (++index < length) { - var key = keys[index]; - if (values) { - result[key] = values[index]; - } else { - result[key[0]] = key[1]; - } - } - return result; - } - - /** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to but not including `stop`. This method is a port of Python's - * `range()` function. See http://docs.python.org/library/functions.html#range. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Number} [start=0] The start of the range. - * @param {Number} end The end of the range. - * @param {Number} [step=1] The value to increment or descrement by. - * @returns {Array} Returns a new range array. - * @example - * - * _.range(10); - * // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - * - * _.range(1, 11); - * // => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - * - * _.range(0, 30, 5); - * // => [0, 5, 10, 15, 20, 25] - * - * _.range(0, -10, -1); - * // => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] - * - * _.range(0); - * // => [] - */ - function range(start, end, step) { - start = +start || 0; - step = +step || 1; - - if (end == null) { - end = start; - start = 0; - } - // use `Array(length)` so V8 will avoid the slower "dictionary" mode - // http://www.youtube.com/watch?v=XAqIpGU8ZZk#t=16m27s - var index = -1, - length = nativeMax(0, ceil((end - start) / step)), - result = Array(length); - - while (++index < length) { - result[index] = start; - start += step; - } - return result; - } - - /** - * The opposite of `_.initial`, this method gets all but the first value of - * `array`. Pass `n` to exclude the first `n` values from the result. - * - * @static - * @memberOf _ - * @alias drop, tail - * @category Arrays - * @param {Array} array The array to query. - * @param {Number} [n=1] The number of elements to exclude. - * @param- {Object} [guard] Internally used to allow this method to work with - * others like `_.map` without using their callback `index` argument for `n`. - * @returns {Array} Returns all but the first value or `n` values of `array`. - * @example - * - * _.rest([3, 2, 1]); - * // => [2, 1] - */ - function rest(array, n, guard) { - return array - ? slice.call(array, (n == null || guard) ? 1 : n) - : []; - } - - /** - * Uses a binary search to determine the smallest index at which the `value` - * should be inserted into `array` in order to maintain the sort order of the - * sorted `array`. If `callback` is passed, it will be executed for `value` and - * each element in `array` to compute their sort ranking. The `callback` is - * bound to `thisArg` and invoked with one argument; (value). The `callback` - * argument may also be the name of a property to order by. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to iterate over. - * @param {Mixed} value The value to evaluate. - * @param {Function|String} [callback=identity|property] The function called - * per iteration or property name to order by. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Number} Returns the index at which the value should be inserted - * into `array`. - * @example - * - * _.sortedIndex([20, 30, 50], 40); - * // => 2 - * - * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); - * // => 2 - * - * var dict = { - * 'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 } - * }; - * - * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { - * return dict.wordToNumber[word]; - * }); - * // => 2 - * - * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { - * return this.wordToNumber[word]; - * }, dict); - * // => 2 - */ - function sortedIndex(array, value, callback, thisArg) { - var low = 0, - high = array ? array.length : low; - - // explicitly reference `identity` for better engine inlining - callback = callback ? createCallback(callback, thisArg) : identity; - value = callback(value); - while (low < high) { - var mid = (low + high) >>> 1; - callback(array[mid]) < value - ? low = mid + 1 - : high = mid; - } - return low; - } - - /** - * Computes the union of the passed-in arrays using strict equality for - * comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} [array1, array2, ...] Arrays to process. - * @returns {Array} Returns a new array of unique values, in order, that are - * present in one or more of the arrays. - * @example - * - * _.union([1, 2, 3], [101, 2, 1, 10], [2, 1]); - * // => [1, 2, 3, 101, 10] - */ - function union() { - return uniq(concat.apply(arrayRef, arguments)); - } - - /** - * Creates a duplicate-value-free version of the `array` using strict equality - * for comparisons, i.e. `===`. If the `array` is already sorted, passing `true` - * for `isSorted` will run a faster algorithm. If `callback` is passed, each - * element of `array` is passed through a callback` before uniqueness is computed. - * The `callback` is bound to `thisArg` and invoked with three arguments; (value, index, array). - * - * @static - * @memberOf _ - * @alias unique - * @category Arrays - * @param {Array} array The array to process. - * @param {Boolean} [isSorted=false] A flag to indicate that the `array` is already sorted. - * @param {Function} [callback=identity] The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a duplicate-value-free array. - * @example - * - * _.uniq([1, 2, 1, 3, 1]); - * // => [1, 2, 3] - * - * _.uniq([1, 1, 2, 2, 3], true); - * // => [1, 2, 3] - * - * _.uniq([1, 2, 1.5, 3, 2.5], function(num) { return Math.floor(num); }); - * // => [1, 2, 3] - * - * _.uniq([1, 2, 1.5, 3, 2.5], function(num) { return this.floor(num); }, Math); - * // => [1, 2, 3] - */ - function uniq(array, isSorted, callback, thisArg) { - var index = -1, - length = array ? array.length : 0, - result = [], - seen = result; - - // juggle arguments - if (typeof isSorted == 'function') { - thisArg = callback; - callback = isSorted; - isSorted = false; - } - // init value cache for large arrays - var isLarge = !isSorted && length > 74; - if (isLarge) { - var cache = {}; - } - if (callback) { - seen = []; - callback = createCallback(callback, thisArg); - } - while (++index < length) { - var value = array[index], - computed = callback ? callback(value, index, array) : value; - - if (isLarge) { - // manually coerce `computed` to a string because `hasOwnProperty`, in - // some older versions of Firefox, coerces objects incorrectly - seen = hasOwnProperty.call(cache, computed + '') ? cache[computed] : (cache[computed] = []); - } - if (isSorted - ? !index || seen[seen.length - 1] !== computed - : indexOf(seen, computed) < 0 - ) { - if (callback || isLarge) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * Creates an array with all occurrences of the passed values removed using - * strict equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to filter. - * @param {Mixed} [value1, value2, ...] Values to remove. - * @returns {Array} Returns a new filtered array. - * @example - * - * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1); - * // => [2, 3, 4] - */ - function without(array) { - var index = -1, - length = array ? array.length : 0, - contains = cachedContains(arguments, 1, 20), - result = []; - - while (++index < length) { - var value = array[index]; - if (!contains(value)) { - result.push(value); - } - } - return result; - } - - /** - * Groups the elements of each array at their corresponding indexes. Useful for - * separate data sources that are coordinated through matching array indexes. - * For a matrix of nested arrays, `_.zip.apply(...)` can transpose the matrix - * in a similar fashion. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} [array1, array2, ...] Arrays to process. - * @returns {Array} Returns a new array of grouped elements. - * @example - * - * _.zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]); - * // => [['moe', 30, true], ['larry', 40, false], ['curly', 50, false]] - */ - function zip(array) { - var index = -1, - length = array ? max(pluck(arguments, 'length')) : 0, - result = Array(length); - - while (++index < length) { - result[index] = pluck(arguments, index); - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Creates a function that is restricted to executing `func` only after it is - * called `n` times. The `func` is executed with the `this` binding of the - * created function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Number} n The number of times the function must be called before - * it is executed. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var renderNotes = _.after(notes.length, render); - * _.forEach(notes, function(note) { - * note.asyncSave({ 'success': renderNotes }); - * }); - * // `renderNotes` is run once, after all notes have saved - */ - function after(n, func) { - if (n < 1) { - return func(); - } - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that, when called, invokes `func` with the `this` - * binding of `thisArg` and prepends any additional `bind` arguments to those - * passed to the bound function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to bind. - * @param {Mixed} [thisArg] The `this` binding of `func`. - * @param {Mixed} [arg1, arg2, ...] Arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var func = function(greeting) { - * return greeting + ' ' + this.name; - * }; - * - * func = _.bind(func, { 'name': 'moe' }, 'hi'); - * func(); - * // => 'hi moe' - */ - function bind(func, thisArg) { - // use `Function#bind` if it exists and is fast - // (in V8 `Function#bind` is slower except when partially applied) - return isBindFast || (nativeBind && arguments.length > 2) - ? nativeBind.call.apply(nativeBind, arguments) - : createBound(func, thisArg, slice.call(arguments, 2)); - } - - /** - * Binds methods on `object` to `object`, overwriting the existing method. - * If no method names are provided, all the function properties of `object` - * will be bound. - * - * @static - * @memberOf _ - * @category Functions - * @param {Object} object The object to bind and assign the bound methods to. - * @param {String} [methodName1, methodName2, ...] Method names on the object to bind. - * @returns {Object} Returns `object`. - * @example - * - * var buttonView = { - * 'label': 'lodash', - * 'onClick': function() { alert('clicked: ' + this.label); } - * }; - * - * _.bindAll(buttonView); - * jQuery('#lodash_button').on('click', buttonView.onClick); - * // => When the button is clicked, `this.label` will have the correct value - */ - function bindAll(object) { - var funcs = arguments, - index = funcs.length > 1 ? 0 : (funcs = functions(object), -1), - length = funcs.length; - - while (++index < length) { - var key = funcs[index]; - object[key] = bind(object[key], object); - } - return object; - } - - /** - * Creates a function that, when called, invokes the method at `object[key]` - * and prepends any additional `bindKey` arguments to those passed to the bound - * function. This method differs from `_.bind` by allowing bound functions to - * reference methods that will be redefined or don't yet exist. - * See http://michaux.ca/articles/lazy-function-definition-pattern. - * - * @static - * @memberOf _ - * @category Functions - * @param {Object} object The object the method belongs to. - * @param {String} key The key of the method. - * @param {Mixed} [arg1, arg2, ...] Arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'name': 'moe', - * 'greet': function(greeting) { - * return greeting + ' ' + this.name; - * } - * }; - * - * var func = _.bindKey(object, 'greet', 'hi'); - * func(); - * // => 'hi moe' - * - * object.greet = function(greeting) { - * return greeting + ', ' + this.name + '!'; - * }; - * - * func(); - * // => 'hi, moe!' - */ - function bindKey(object, key) { - return createBound(object, key, slice.call(arguments, 2)); - } - - /** - * Creates a function that is the composition of the passed functions, - * where each function consumes the return value of the function that follows. - * In math terms, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`. - * Each function is executed with the `this` binding of the composed function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} [func1, func2, ...] Functions to compose. - * @returns {Function} Returns the new composed function. - * @example - * - * var greet = function(name) { return 'hi: ' + name; }; - * var exclaim = function(statement) { return statement + '!'; }; - * var welcome = _.compose(exclaim, greet); - * welcome('moe'); - * // => 'hi: moe!' - */ - function compose() { - var funcs = arguments; - return function() { - var args = arguments, - length = funcs.length; - - while (length--) { - args = [funcs[length].apply(this, args)]; - } - return args[0]; - }; - } - - /** - * Creates a function that will delay the execution of `func` until after - * `wait` milliseconds have elapsed since the last time it was invoked. Pass - * `true` for `immediate` to cause debounce to invoke `func` on the leading, - * instead of the trailing, edge of the `wait` timeout. Subsequent calls to - * the debounced function will return the result of the last `func` call. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to debounce. - * @param {Number} wait The number of milliseconds to delay. - * @param {Boolean} immediate A flag to indicate execution is on the leading - * edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * var lazyLayout = _.debounce(calculateLayout, 300); - * jQuery(window).on('resize', lazyLayout); - */ - function debounce(func, wait, immediate) { - var args, - result, - thisArg, - timeoutId; - - function delayed() { - timeoutId = null; - if (!immediate) { - result = func.apply(thisArg, args); - } - } - return function() { - var isImmediate = immediate && !timeoutId; - args = arguments; - thisArg = this; - - clearTimeout(timeoutId); - timeoutId = setTimeout(delayed, wait); - - if (isImmediate) { - result = func.apply(thisArg, args); - } - return result; - }; - } - - /** - * Executes the `func` function after `wait` milliseconds. Additional arguments - * will be passed to `func` when it is invoked. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to delay. - * @param {Number} wait The number of milliseconds to delay execution. - * @param {Mixed} [arg1, arg2, ...] Arguments to invoke the function with. - * @returns {Number} Returns the `setTimeout` timeout id. - * @example - * - * var log = _.bind(console.log, console); - * _.delay(log, 1000, 'logged later'); - * // => 'logged later' (Appears after one second.) - */ - function delay(func, wait) { - var args = slice.call(arguments, 2); - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * Defers executing the `func` function until the current call stack has cleared. - * Additional arguments will be passed to `func` when it is invoked. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to defer. - * @param {Mixed} [arg1, arg2, ...] Arguments to invoke the function with. - * @returns {Number} Returns the `setTimeout` timeout id. - * @example - * - * _.defer(function() { alert('deferred'); }); - * // returns from the function before `alert` is called - */ - function defer(func) { - var args = slice.call(arguments, 1); - return setTimeout(function() { func.apply(undefined, args); }, 1); - } - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * passed, it will be used to determine the cache key for storing the result - * based on the arguments passed to the memoized function. By default, the first - * argument passed to the memoized function is used as the cache key. The `func` - * is executed with the `this` binding of the memoized function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] A function used to resolve the cache key. - * @returns {Function} Returns the new memoizing function. - * @example - * - * var fibonacci = _.memoize(function(n) { - * return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); - * }); - */ - function memoize(func, resolver) { - var cache = {}; - return function() { - var key = resolver ? resolver.apply(this, arguments) : arguments[0]; - return hasOwnProperty.call(cache, key) - ? cache[key] - : (cache[key] = func.apply(this, arguments)); - }; - } - - /** - * Creates a function that is restricted to execute `func` once. Repeat calls to - * the function will return the value of the first call. The `func` is executed - * with the `this` binding of the created function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // Application is only created once. - */ - function once(func) { - var result, - ran = false; - - return function() { - if (ran) { - return result; - } - ran = true; - result = func.apply(this, arguments); - - // clear the `func` variable so the function may be garbage collected - func = null; - return result; - }; - } - - /** - * Creates a function that, when called, invokes `func` with any additional - * `partial` arguments prepended to those passed to the new function. This - * method is similar to `bind`, except it does **not** alter the `this` binding. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to partially apply arguments to. - * @param {Mixed} [arg1, arg2, ...] Arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var greet = function(greeting, name) { return greeting + ': ' + name; }; - * var hi = _.partial(greet, 'hi'); - * hi('moe'); - * // => 'hi: moe' - */ - function partial(func) { - return createBound(func, slice.call(arguments, 1)); - } - - /** - * Creates a function that, when executed, will only call the `func` - * function at most once per every `wait` milliseconds. If the throttled - * function is invoked more than once during the `wait` timeout, `func` will - * also be called on the trailing edge of the timeout. Subsequent calls to the - * throttled function will return the result of the last `func` call. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to throttle. - * @param {Number} wait The number of milliseconds to throttle executions to. - * @returns {Function} Returns the new throttled function. - * @example - * - * var throttled = _.throttle(updatePosition, 100); - * jQuery(window).on('scroll', throttled); - */ - function throttle(func, wait) { - var args, - result, - thisArg, - timeoutId, - lastCalled = 0; - - function trailingCall() { - lastCalled = new Date; - timeoutId = null; - result = func.apply(thisArg, args); - } - return function() { - var now = new Date, - remaining = wait - (now - lastCalled); - - args = arguments; - thisArg = this; - - if (remaining <= 0) { - clearTimeout(timeoutId); - lastCalled = now; - result = func.apply(thisArg, args); - } - else if (!timeoutId) { - timeoutId = setTimeout(trailingCall, remaining); - } - return result; - }; - } - - /** - * Creates a function that passes `value` to the `wrapper` function as its - * first argument. Additional arguments passed to the function are appended - * to those passed to the `wrapper` function. The `wrapper` is executed with - * the `this` binding of the created function. - * - * @static - * @memberOf _ - * @category Functions - * @param {Mixed} value The value to wrap. - * @param {Function} wrapper The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var hello = function(name) { return 'hello ' + name; }; - * hello = _.wrap(hello, function(func) { - * return 'before, ' + func('moe') + ', after'; - * }); - * hello(); - * // => 'before, hello moe, after' - */ - function wrap(value, wrapper) { - return function() { - var args = [value]; - push.apply(args, arguments); - return wrapper.apply(this, args); - }; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their - * corresponding HTML entities. - * - * @static - * @memberOf _ - * @category Utilities - * @param {String} string The string to escape. - * @returns {String} Returns the escaped string. - * @example - * - * _.escape('Moe, Larry & Curly'); - * // => "Moe, Larry & Curly" - */ - function escape(string) { - return string == null ? '' : (string + '').replace(reUnescapedHtml, escapeHtmlChar); - } - - /** - * This function returns the first argument passed to it. - * - * Note: It is used throughout Lo-Dash as a default callback. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Mixed} value Any value. - * @returns {Mixed} Returns `value`. - * @example - * - * var moe = { 'name': 'moe' }; - * moe === _.identity(moe); - * // => true - */ - function identity(value) { - return value; - } - - /** - * Adds functions properties of `object` to the `lodash` function and chainable - * wrapper. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Object} object The object of function properties to add to `lodash`. - * @example - * - * _.mixin({ - * 'capitalize': function(string) { - * return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase(); - * } - * }); - * - * _.capitalize('larry'); - * // => 'Larry' - * - * _('curly').capitalize(); - * // => 'Curly' - */ - function mixin(object) { - forEach(functions(object), function(methodName) { - var func = lodash[methodName] = object[methodName]; - - lodash.prototype[methodName] = function() { - var args = [this.__wrapped__]; - push.apply(args, arguments); - - var result = func.apply(lodash, args); - if (this.__chain__) { - result = new lodash(result); - result.__chain__ = true; - } - return result; - }; - }); - } - - /** - * Reverts the '_' variable to its previous value and returns a reference to - * the `lodash` function. - * - * @static - * @memberOf _ - * @category Utilities - * @returns {Function} Returns the `lodash` function. - * @example - * - * var lodash = _.noConflict(); - */ - function noConflict() { - window._ = oldDash; - return this; - } - - /** - * Produces a random number between `min` and `max` (inclusive). If only one - * argument is passed, a number between `0` and the given number will be returned. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Number} [min=0] The minimum possible value. - * @param {Number} [max=1] The maximum possible value. - * @returns {Number} Returns a random number. - * @example - * - * _.random(0, 5); - * // => a number between 1 and 5 - * - * _.random(5); - * // => also a number between 1 and 5 - */ - function random(min, max) { - if (min == null && max == null) { - max = 1; - } - min = +min || 0; - if (max == null) { - max = min; - min = 0; - } - return min + floor(nativeRandom() * ((+max || 0) - min + 1)); - } - - /** - * Resolves the value of `property` on `object`. If `property` is a function - * it will be invoked and its result returned, else the property value is - * returned. If `object` is falsey, then `null` is returned. - * - * @deprecated - * @static - * @memberOf _ - * @category Utilities - * @param {Object} object The object to inspect. - * @param {String} property The property to get the value of. - * @returns {Mixed} Returns the resolved value. - * @example - * - * var object = { - * 'cheese': 'crumpets', - * 'stuff': function() { - * return 'nonsense'; - * } - * }; - * - * _.result(object, 'cheese'); - * // => 'crumpets' - * - * _.result(object, 'stuff'); - * // => 'nonsense' - */ - function result(object, property) { - // based on Backbone's private `getValue` function - // https://github.com/documentcloud/backbone/blob/0.9.2/backbone.js#L1419-1424 - var value = object ? object[property] : null; - return isFunction(value) ? object[property]() : value; - } - - /** - * A micro-templating method that handles arbitrary delimiters, preserves - * whitespace, and correctly escapes quotes within interpolated code. - * - * Note: In the development build `_.template` utilizes sourceURLs for easier - * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl - * - * Note: Lo-Dash may be used in Chrome extensions by either creating a `lodash csp` - * build and avoiding `_.template` use, or loading Lo-Dash in a sandboxed page. - * See http://developer.chrome.com/trunk/extensions/sandboxingEval.html - * - * @static - * @memberOf _ - * @category Utilities - * @param {String} text The template text. - * @param {Obect} data The data object used to populate the text. - * @param {Object} options The options object. - * escape - The "escape" delimiter regexp. - * evaluate - The "evaluate" delimiter regexp. - * interpolate - The "interpolate" delimiter regexp. - * sourceURL - The sourceURL of the template's compiled source. - * variable - The data object variable name. - * - * @returns {Function|String} Returns a compiled function when no `data` object - * is given, else it returns the interpolated text. - * @example - * - * // using a compiled template - * var compiled = _.template('hello <%= name %>'); - * compiled({ 'name': 'moe' }); - * // => 'hello moe' - * - * var list = '<% _.forEach(people, function(name) { %>
  • <%= name %>
  • <% }); %>'; - * _.template(list, { 'people': ['moe', 'larry', 'curly'] }); - * // => '
  • moe
  • larry
  • curly
  • ' - * - * // using the "escape" delimiter to escape HTML in data property values - * _.template('<%- value %>', { 'value': ' + + + + + diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analyser-minimum.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analyser-minimum.html new file mode 100644 index 00000000000..62d90da1c7f --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analyser-minimum.html @@ -0,0 +1,42 @@ + + + + + Test AnalyserNode when the input is silent + + + + + + diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html new file mode 100644 index 00000000000..ecd216e82c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html @@ -0,0 +1,41 @@ + + + + + AnalyserNode output + + + + + + + diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analyser-scale.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analyser-scale.html new file mode 100644 index 00000000000..04fe4809645 --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analyser-scale.html @@ -0,0 +1,49 @@ + + + + + Test AnalyserNode when the input is scaled + + + + + + diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analysernode.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analysernode.html new file mode 100644 index 00000000000..52d3829cff3 --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analysernode.html @@ -0,0 +1,237 @@ + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html index 634c0f5909c..49f375c9e12 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html @@ -6,7 +6,6 @@ -