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

Side by Side Diff: pkg/web_components/lib/platform.concat.js.map

Issue 638773002: Rolling packages to version 0.4.2 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/web_components/lib/platform.concat.js ('k') | pkg/web_components/pubspec.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 { 1 {
2 "version": 3, 2 "version": 3,
3 "file": "platform.concat.js", 3 "file": "platform.concat.js",
4 "sources": [ 4 "sources": [
5 "build/boot.js", 5 "build/boot.js",
6 "../WeakMap/weakmap.js", 6 "../WeakMap/weakmap.js",
7 "build/if-poly.js", 7 "build/if-poly.js",
8 "../observe-js/src/observe.js", 8 "../observe-js/src/observe.js",
9 "../ShadowDOM/src/wrappers.js", 9 "../ShadowDOM/src/wrappers.js",
10 "../ShadowDOM/src/microtask.js", 10 "../ShadowDOM/src/microtask.js",
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 "../CustomElements/src/Observer.js", 72 "../CustomElements/src/Observer.js",
73 "../CustomElements/src/CustomElements.js", 73 "../CustomElements/src/CustomElements.js",
74 "../CustomElements/src/Parser.js", 74 "../CustomElements/src/Parser.js",
75 "../CustomElements/src/boot.js", 75 "../CustomElements/src/boot.js",
76 "src/patches-custom-elements.js", 76 "src/patches-custom-elements.js",
77 "src/dom.js", 77 "src/dom.js",
78 "src/unresolved.js", 78 "src/unresolved.js",
79 "src/module.js" 79 "src/module.js"
80 ], 80 ],
81 "names": [], 81 "names": [],
82 "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;A;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;A;AC5CA;AACA;A;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;A;AC3qDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxaA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChDA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5XA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChFA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;A;ACv5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;A;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjuBA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7QA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;A;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;A;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzCA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;A CjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;A;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtUA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC/BA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClCA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;A;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxEA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;A;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;A;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;A;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;A;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;A;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpCA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;A CpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9 BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3BA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7CA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnE A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzCA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnDA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A; AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;A;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvpBA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;A;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpEA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5UA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;A;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzBA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9BA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClB A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3GA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjGA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3wBA,Q;ACAA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3BA,C;ACAA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjkBA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjiBA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA,sD;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uB;ACvMA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC/KA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzUA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;A;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtEA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4D;ACRA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;A;ACzXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;A;AC5dA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA,0B;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtEA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChCA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC hGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;A;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A", 82 "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;A;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;A;AC7CA;AACA;A;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;A;AC3qDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxaA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACh DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5XA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChFA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACv5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;A;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACluBA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7QA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;A;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;A;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;A;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A; ACtUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;A;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxCA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClCA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC1CA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;A;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxEA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;A;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;A;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;A;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;A;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpCA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;A;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;A;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3BA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7CA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;A;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzCA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; A;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;A;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvBA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;A;ACvpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpEA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5UA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;A;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzBA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9BA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;A;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3GA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; A;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3wBA,Q;ACAA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3BA,C;ACAA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;A;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;A;ACjiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sD;ACRA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA,uB;ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;A;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;A;AC9WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjFA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjCA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4D;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;A;ACzXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A; AC5dA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA,0B;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtEA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChCA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChGA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A",
83 "sourcesContent": [ 83 "sourcesContent": [
84 "/**\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved .\n * This code may only be used under the BSD style license found at http://pol ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http: //polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights gran t found at http://polymer.github.io/PATENTS.txt\n */\n\nwindow.Platform = window .Platform || {};\n// prepopulate window.logFlags if necessary\nwindow.logFlags = window.logFlags || {};\n// process flags\n(function(scope){\n // import\n var flags = scope.flags || {};\n // populate flags from location\n location.searc h.slice(1).split('&').forEach(function(o) {\n o = o.split('=');\n o[0] && (flags[o[0]] = o[1] || true);\n });\n var entryPoint = document.currentScript ||\n document.querySelector('script[src*=\"platform.js\"]');\n if (entryPo int) {\n var a = entryPoint.attributes;\n for (var i = 0, n; i < a.length; i++) {\n n = a[i];\n if (n.name !== 'src') {\n flags[n.name] = n.value || true;\n }\n }\n }\n if (flags.log) {\n flags.log.split( ',').forEach(function(f) {\n window.logFlags[f] = true;\n });\n }\n // If any of these flags match 'native', then force native ShadowDOM; any\n // ot her truthy value, or failure to detect native\n // ShadowDOM, results in polyfi ll\n flags.shadow = flags.shadow || flags.shadowdom || flags.polyfill;\n if (f lags.shadow === 'native') {\n flags.shadow = false;\n } else {\n flags.sh adow = flags.shadow || !HTMLElement.prototype.createShadowRoot;\n }\n\n if (fl ags.shadow && document.querySelectorAll('script').length > 1) {\n console.war n('platform.js is not the first script on the page. ' +\n 'See http://www .polymer-project.org/docs/start/platform.html#setup ' +\n 'for details.') ;\n }\n\n // CustomElements polyfill flag\n if (flags.register) {\n window .CustomElements = window.CustomElements || {flags: {}};\n window.CustomElemen ts.flags.register = flags.register;\n }\n\n if (flags.imports) {\n window.H TMLImports = window.HTMLImports || {flags: {}};\n window.HTMLImports.flags.im ports = flags.imports;\n }\n\n // export\n scope.flags = flags;\n})(Platform) ;\n", 84 "/**\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved .\n * This code may only be used under the BSD style license found at http://pol ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http: //polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights gran t found at http://polymer.github.io/PATENTS.txt\n */\n\nwindow.Platform = window .Platform || {};\n// prepopulate window.logFlags if necessary\nwindow.logFlags = window.logFlags || {};\n// process flags\n(function(scope){\n // import\n var flags = scope.flags || {};\n // populate flags from location\n location.searc h.slice(1).split('&').forEach(function(o) {\n o = o.split('=');\n o[0] && (flags[o[0]] = o[1] || true);\n });\n var entryPoint = document.currentScript ||\n document.querySelector('script[src*=\"platform.js\"]');\n if (entryPo int) {\n var a = entryPoint.attributes;\n for (var i = 0, n; i < a.length; i++) {\n n = a[i];\n if (n.name !== 'src') {\n flags[n.name] = n.value || true;\n }\n }\n }\n if (flags.log) {\n flags.log.split( ',').forEach(function(f) {\n window.logFlags[f] = true;\n });\n }\n // If any of these flags match 'native', then force native ShadowDOM; any\n // ot her truthy value, or failure to detect native\n // ShadowDOM, results in polyfi ll\n flags.shadow = flags.shadow || flags.shadowdom || flags.polyfill;\n if (f lags.shadow === 'native') {\n flags.shadow = false;\n } else {\n flags.sh adow = flags.shadow || !HTMLElement.prototype.createShadowRoot;\n }\n\n if (fl ags.shadow && document.querySelectorAll('script').length > 1) {\n console.log ('Warning: platform.js is not the first script on the page. ' +\n 'See ht tp://www.polymer-project.org/docs/start/platform.html#setup ' +\n 'for de tails.');\n }\n\n // CustomElements polyfill flag\n if (flags.register) {\n window.CustomElements = window.CustomElements || {flags: {}};\n window.Cust omElements.flags.register = flags.register;\n }\n\n if (flags.imports) {\n window.HTMLImports = window.HTMLImports || {flags: {}};\n window.HTMLImports. flags.imports = flags.imports;\n }\n\n // export\n scope.flags = flags;\n})(P latform);\n",
85 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nif (typeof WeakMap === 'undefined') {\n (function() {\n var defineProperty = Object.defineProperty;\n var counter = Date.now() % 1 e9;\n\n var WeakMap = function() {\n this.name = '__st' + (Math.random() * 1e9 >>> 0) + (counter++ + '__');\n };\n\n WeakMap.prototype = {\n set: function(key, value) {\n var entry = key[this.name];\n if (en try && entry[0] === key)\n entry[1] = value;\n else\n d efineProperty(key, this.name, {value: [key, value], writable: true});\n },\ n get: function(key) {\n var entry;\n return (entry = key[thi s.name]) && entry[0] === key ?\n entry[1] : undefined;\n },\n delete: function(key) {\n var entry = key[this.name];\n if (!en try) return false;\n var hasValue = entry[0] === key;\n entry[0] = entry[1] = undefined;\n return hasValue;\n },\n has: function( key) {\n var entry = key[this.name];\n if (!entry) return false;\n return entry[0] === key;\n }\n };\n\n window.WeakMap = WeakMa p;\n })();\n}\n", 85 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nif (typeof WeakMap === 'undefined') {\n (function() {\n var defineProperty = Object.defineProperty;\n var counter = Date.now() % 1 e9;\n\n var WeakMap = function() {\n this.name = '__st' + (Math.random() * 1e9 >>> 0) + (counter++ + '__');\n };\n\n WeakMap.prototype = {\n set: function(key, value) {\n var entry = key[this.name];\n if (en try && entry[0] === key)\n entry[1] = value;\n else\n d efineProperty(key, this.name, {value: [key, value], writable: true});\n r eturn this;\n },\n get: function(key) {\n var entry;\n r eturn (entry = key[this.name]) && entry[0] === key ?\n entry[1] : und efined;\n },\n delete: function(key) {\n var entry = key[this.n ame];\n if (!entry) return false;\n var hasValue = entry[0] === ke y;\n entry[0] = entry[1] = undefined;\n return hasValue;\n }, \n has: function(key) {\n var entry = key[this.name];\n if (! entry) return false;\n return entry[0] === key;\n }\n };\n\n w indow.WeakMap = WeakMap;\n })();\n}\n",
86 "// select ShadowDOM impl\r\nif (Platform.flags.shadow) {\r\n", 86 "// select ShadowDOM impl\r\nif (Platform.flags.shadow) {\r\n",
87 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(global) {\n 'u se strict';\n\n var testingExposeCycleCount = global.testingExposeCycleCount;\n \n // Detect and do basic sanity checking on Object/Array.observe.\n function detectObjectObserve() {\n if (typeof Object.observe !== 'function' ||\n typeof Array.observe !== 'function') {\n return false;\n }\n\n var records = [];\n\n function callback(recs) {\n records = recs;\n }\n\n var test = {};\n var arr = [];\n Object.observe(test, callback);\n Array.observe(arr, callback);\n test.id = 1;\n test.id = 2;\n delete te st.id;\n arr.push(1, 2);\n arr.length = 0;\n\n Object.deliverChangeReco rds(callback);\n if (records.length !== 5)\n return false;\n\n if (re cords[0].type != 'add' ||\n records[1].type != 'update' ||\n recor ds[2].type != 'delete' ||\n records[3].type != 'splice' ||\n recor ds[4].type != 'splice') {\n return false;\n }\n\n Object.unobserve(te st, callback);\n Array.unobserve(arr, callback);\n\n return true;\n }\n\n var hasObserve = detectObjectObserve();\n\n function detectEval() {\n // D on't test for eval if we're running in a Chrome App environment.\n // We chec k for APIs set that only exist in a Chrome App context.\n if (typeof chrome ! == 'undefined' && chrome.app && chrome.app.runtime) {\n return false;\n }\n\n // Firefox OS Apps do not allow eval. This feature detection is very ha cky\n // but even if some other platform adds support for this function this code\n // will continue to work.\n if (typeof navigator != 'undefined' && navigator.getDeviceStorage) {\n return false;\n }\n\n try {\n va r f = new Function('', 'return true;');\n return f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasEval = detectEval();\n\n function i sIndex(s) {\n return +s === s >>> 0 && s !== '';\n }\n\n function toNumber( s) {\n return +s;\n }\n\n function isObject(obj) {\n return obj === Obje ct(obj);\n }\n\n var numberIsNaN = global.Number.isNaN || function(value) {\n return typeof value === 'number' && global.isNaN(value);\n }\n\n function a reSameValue(left, right) {\n if (left === right)\n return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) && numberIsNaN(right))\n return true;\n\n return left !== left && right !== right;\n }\n\n var crea teObject = ('__proto__' in {}) ?\n function(obj) { return obj; } :\n funct ion(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNa mes(obj).forEach(function(name) {\n Object.defineProperty(newObject, name ,\n Object.getOwnPropertyDescriptor(obj, name));\n });\n return newObject;\n };\n\n var identStart = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var identRegExp = new RegExp('^' + ident Start + '+' + identPart + '*' + '$');\n\n function getPathCharType(char) {\n if (char === undefined)\n return 'eof';\n\n var code = char.charCodeAt( 0);\n\n switch(code) {\n case 0x5B: // [\n case 0x5D: // ]\n c ase 0x2E: // .\n case 0x22: // \"\n case 0x27: // '\n case 0x30: // 0\n return char;\n\n case 0x5F: // _\n case 0x24: // $\n return 'ident';\n\n case 0x20: // Space\n case 0x09: // Tab\n case 0x0A: // Newline\n case 0x0D: // Return\n case 0xA0: // No-brea k space\n case 0xFEFF: // Byte Order Mark\n case 0x2028: // Line Sep arator\n case 0x2029: // Paragraph Separator\n return 'ws';\n }\ n\n // a-z, A-Z\n if ((0x61 <= code && code <= 0x7A) || (0x41 <= code && c ode <= 0x5A))\n return 'ident';\n\n // 1-9\n if (0x31 <= code && code <= 0x39)\n return 'number';\n\n return 'else';\n }\n\n var pathStateM achine = {\n 'beforePath': {\n 'ws': ['beforePath'],\n 'ident': ['i nIdent', 'append'],\n '[': ['beforeElement'],\n 'eof': ['afterPath']\n },\n\n 'inPath': {\n 'ws': ['inPath'],\n '.': ['beforeIdent'],\ n '[': ['beforeElement'],\n 'eof': ['afterPath']\n },\n\n 'befor eIdent': {\n 'ws': ['beforeIdent'],\n 'ident': ['inIdent', 'append']\n },\n\n 'inIdent': {\n 'ident': ['inIdent', 'append'],\n '0': [' inIdent', 'append'],\n 'number': ['inIdent', 'append'],\n 'ws': ['inPa th', 'push'],\n '.': ['beforeIdent', 'push'],\n '[': ['beforeElement', 'push'],\n 'eof': ['afterPath', 'push']\n },\n\n 'beforeElement': {\ n 'ws': ['beforeElement'],\n '0': ['afterZero', 'append'],\n 'num ber': ['inIndex', 'append'],\n \"'\": ['inSingleQuote', 'append', ''],\n '\"': ['inDoubleQuote', 'append', '']\n },\n\n 'afterZero': {\n 'w s': ['afterElement', 'push'],\n ']': ['inPath', 'push']\n },\n\n 'inI ndex': {\n '0': ['inIndex', 'append'],\n 'number': ['inIndex', 'append '],\n 'ws': ['afterElement'],\n ']': ['inPath', 'push']\n },\n\n 'inSingleQuote': {\n \"'\": ['afterElement'],\n 'eof': ['error'],\n 'else': ['inSingleQuote', 'append']\n },\n\n 'inDoubleQuote': {\n '\"': ['afterElement'],\n 'eof': ['error'],\n 'else': ['inDoubleQuote ', 'append']\n },\n\n 'afterElement': {\n 'ws': ['afterElement'],\n ']': ['inPath', 'push']\n }\n }\n\n function noop() {}\n\n function pa rsePath(path) {\n var keys = [];\n var index = -1;\n var c, newChar, ke y, type, transition, action, typeMap, mode = 'beforePath';\n\n var actions = {\n push: function() {\n if (key === undefined)\n return;\n \n keys.push(key);\n key = undefined;\n },\n\n append: f unction() {\n if (key === undefined)\n key = newChar\n el se\n key += newChar;\n }\n };\n\n function maybeUnescapeQuot e() {\n if (index >= path.length)\n return;\n\n var nextChar = path[index + 1];\n if ((mode == 'inSingleQuote' && nextChar == \"'\") ||\n (mode == 'inDoubleQuote' && nextChar == '\"')) {\n index++;\n newChar = nextChar;\n actions.append();\n return true;\n }\n }\n\n while (mode) {\n index++;\n c = path[index];\n\n if (c == '\\\\' && maybeUnescapeQuote(mode))\n continue;\n\n type = getPathCharType(c);\n typeMap = pathStateMachine[mode];\n transition = typeMap[type] || typeMap['else'] || 'error';\n\n if (transition == 'error ')\n return; // parse error;\n\n mode = transition[0];\n action = actions[transition[1]] || noop;\n newChar = transition[2] === undefined ? c : transition[2];\n action();\n\n if (mode === 'afterPath') {\n return keys;\n }\n }\n\n return; // parse error\n }\n\n functio n isIdent(s) {\n return identRegExp.test(s);\n }\n\n var constructorIsPriva te = {};\n\n function Path(parts, privateToken) {\n if (privateToken !== con structorIsPrivate)\n throw Error('Use Path.get to retrieve path objects');\ n\n for (var i = 0; i < parts.length; i++) {\n this.push(String(parts[i] ));\n }\n\n if (hasEval && this.length) {\n this.getValueFrom = this. compiledGetValueFromFn();\n }\n }\n\n // TODO(rafaelw): Make simple LRU cac he\n var pathCache = {};\n\n function getPath(pathString) {\n if (pathStrin g instanceof Path)\n return pathString;\n\n if (pathString == null || pa thString.length == 0)\n pathString = '';\n\n if (typeof pathString != 's tring') {\n if (isIndex(pathString.length)) {\n // Constructed with array-like (pre-parsed) keys\n return new Path(pathString, constructorIsP rivate);\n }\n\n pathString = String(pathString);\n }\n\n var pa th = pathCache[pathString];\n if (path)\n return path;\n\n var parts = parsePath(pathString);\n if (!parts)\n return invalidPath;\n\n var path = new Path(parts, constructorIsPrivate);\n pathCache[pathString] = path; \n return path;\n }\n\n Path.get = getPath;\n\n function formatAccessor(ke y) {\n if (isIndex(key)) {\n return '[' + key + ']';\n } else {\n return '[\"' + key.replace(/\"/g, '\\\\\"') + '\"]';\n }\n }\n\n Path.pro totype = createObject({\n __proto__: [],\n valid: true,\n\n toString: f unction() {\n var pathString = '';\n for (var i = 0; i < this.length; i++) {\n var key = this[i];\n if (isIdent(key)) {\n pathS tring += i ? '.' + key : key;\n } else {\n pathString += formatA ccessor(key);\n }\n }\n\n return pathString;\n },\n\n get ValueFrom: function(obj, directObserver) {\n for (var i = 0; i < this.lengt h; i++) {\n if (obj == null)\n return;\n obj = obj[this[i ]];\n }\n return obj;\n },\n\n iterateObjects: function(obj, obs erve) {\n for (var i = 0; i < this.length; i++) {\n if (i)\n obj = obj[this[i - 1]];\n if (!isObject(obj))\n return;\n observe(obj, this[0]);\n }\n },\n\n compiledGetValueFromFn: functi on() {\n var str = '';\n var pathString = 'obj';\n str += 'if (ob j != null';\n var i = 0;\n var key;\n for (; i < (this.length - 1 ); i++) {\n key = this[i];\n pathString += isIdent(key) ? '.' + ke y : formatAccessor(key);\n str += ' &&\\n ' + pathString + ' != null' ;\n }\n str += ')\\n';\n\n var key = this[i];\n pathString + = isIdent(key) ? '.' + key : formatAccessor(key);\n\n str += ' return ' + pathString + ';\\nelse\\n return undefined;';\n return new Function('obj', str);\n },\n\n setValueFrom: function(obj, value) {\n if (!this.leng th)\n return false;\n\n for (var i = 0; i < this.length - 1; i++) {\ n if (!isObject(obj))\n return false;\n obj = obj[this[i] ];\n }\n\n if (!isObject(obj))\n return false;\n\n obj[thi s[i]] = value;\n return true;\n }\n });\n\n var invalidPath = new Path ('', constructorIsPrivate);\n invalidPath.valid = false;\n invalidPath.getValu eFrom = invalidPath.setValueFrom = function() {};\n\n var MAX_DIRTY_CHECK_CYCLE S = 1000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\n while ( cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n cycles++;\n }\ n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n \n return cycles > 0;\n }\n\n function objectIsEmpty(object) {\n for (va r prop in object)\n return false;\n return true;\n }\n\n function diff IsEmpty(diff) {\n return objectIsEmpty(diff.added) &&\n objectIsEmp ty(diff.removed) &&\n objectIsEmpty(diff.changed);\n }\n\n function diffObjectFromOldObject(object, oldObject) {\n var added = {};\n var remov ed = {};\n var changed = {};\n\n for (var prop in oldObject) {\n var newValue = object[prop];\n\n if (newValue !== undefined && newValue === old Object[prop])\n continue;\n\n if (!(prop in object)) {\n remo ved[prop] = undefined;\n continue;\n }\n\n if (newValue !== old Object[prop])\n changed[prop] = newValue;\n }\n\n for (var prop in object) {\n if (prop in oldObject)\n continue;\n\n added[prop] = object[prop];\n }\n\n if (Array.isArray(object) && object.length !== old Object.length)\n changed.length = object.length;\n\n return {\n add ed: added,\n removed: removed,\n changed: changed\n };\n }\n\n va r eomTasks = [];\n function runEOMTasks() {\n if (!eomTasks.length)\n r eturn false;\n\n for (var i = 0; i < eomTasks.length; i++) {\n eomTasks[ i]();\n }\n eomTasks.length = 0;\n return true;\n }\n\n var runEOM = hasObserve ? (function(){\n var eomObj = { pingPong: true };\n var eomRunS cheduled = false;\n\n Object.observe(eomObj, function() {\n runEOMTasks( );\n eomRunScheduled = false;\n });\n\n return function(fn) {\n eomTasks.push(fn);\n if (!eomRunScheduled) {\n eomRunScheduled = tru e;\n eomObj.pingPong = !eomObj.pingPong;\n }\n };\n })() :\n (f unction() {\n return function(fn) {\n eomTasks.push(fn);\n };\n })() ;\n\n var observedObjectCache = [];\n\n function newObservedObject() {\n va r observer;\n var object;\n var discardRecords = false;\n var first = t rue;\n\n function callback(records) {\n if (observer && observer.state_ === OPENED && !discardRecords)\n observer.check_(records);\n }\n\n return {\n open: function(obs) {\n if (observer)\n throw Er ror('ObservedObject in use');\n\n if (!first)\n Object.deliverCh angeRecords(callback);\n\n observer = obs;\n first = false;\n },\n observe: function(obj, arrayObserve) {\n object = obj;\n if (arrayObserve)\n Array.observe(object, callback);\n else\n Object.observe(object, callback);\n },\n deliver: function(di scard) {\n discardRecords = discard;\n Object.deliverChangeRecords (callback);\n discardRecords = false;\n },\n close: function() {\n observer = undefined;\n Object.unobserve(object, callback);\n observedObjectCache.push(this);\n }\n };\n }\n\n /*\n * The o bservedSet abstraction is a perf optimization which reduces the total\n * numb er of Object.observe observations of a set of objects. The idea is that\n * gr oups of Observers will have some object dependencies in common and this\n * ob served set ensures that each object in the transitive closure of\n * dependenc ies is only observed once. The observedSet acts as a write barrier\n * such th at whenever any change comes through, all Observers are checked for\n * change d values.\n *\n * Note that this optimization is explicitly moving work from setup-time to\n * change-time.\n *\n * TODO(rafaelw): Implement \"garbage collection\". In order to move work off\n * the critical path, when Observers are closed, their observed objects are\n * not Object.unobserve(d). As a resu lt, it's possible that if the observedSet\n * is kept open, but some Observers have been closed, it could cause \"leaks\"\n * (prevent otherwise collectable objects from being collected). At some\n * point, we should implement increme ntal \"gc\" which keeps a list of\n * observedSets which may need clean-up and does small amounts of cleanup on a\n * timeout until all is clean.\n */\n\n function getObservedObject(observer, object, arrayObserve) {\n var dir = ob servedObjectCache.pop() || newObservedObject();\n dir.open(observer);\n di r.observe(object, arrayObserve);\n return dir;\n }\n\n var observedSetCache = [];\n\n function newObservedSet() {\n var observerCount = 0;\n var obs ervers = [];\n var objects = [];\n var rootObj;\n var rootObjProps;\n\n function observe(obj, prop) {\n if (!obj)\n return;\n\n if (obj === rootObj)\n rootObjProps[prop] = true;\n\n if (objects.index Of(obj) < 0) {\n objects.push(obj);\n Object.observe(obj, callback );\n }\n\n observe(Object.getPrototypeOf(obj), prop);\n }\n\n fu nction allRootObjNonObservedProps(recs) {\n for (var i = 0; i < recs.length ; i++) {\n var rec = recs[i];\n if (rec.object !== rootObj ||\n rootObjProps[rec.name] ||\n rec.type === 'setPrototype') {\n return false;\n }\n }\n return true;\n }\n\n fu nction callback(recs) {\n if (allRootObjNonObservedProps(recs))\n re turn;\n\n var observer;\n for (var i = 0; i < observers.length; i++) { \n observer = observers[i];\n if (observer.state_ == OPENED) {\n observer.iterateObjects_(observe);\n }\n }\n\n for (var i = 0; i < observers.length; i++) {\n observer = observers[i];\n if (observer.state_ == OPENED) {\n observer.check_();\n }\n }\n }\n\n var record = {\n object: undefined,\n objects: object s,\n open: function(obs, object) {\n if (!rootObj) {\n root Obj = object;\n rootObjProps = {};\n }\n\n observers.push (obs);\n observerCount++;\n obs.iterateObjects_(observe);\n } ,\n close: function(obs) {\n observerCount--;\n if (observerC ount > 0) {\n return;\n }\n\n for (var i = 0; i < objects .length; i++) {\n Object.unobserve(objects[i], callback);\n Ob server.unobservedCount++;\n }\n\n observers.length = 0;\n o bjects.length = 0;\n rootObj = undefined;\n rootObjProps = undefin ed;\n observedSetCache.push(this);\n }\n };\n\n return record; \n }\n\n var lastObservedSet;\n\n function getObservedSet(observer, obj) {\n if (!lastObservedSet || lastObservedSet.object !== obj) {\n lastObserved Set = observedSetCache.pop() || newObservedSet();\n lastObservedSet.object = obj;\n }\n lastObservedSet.open(observer, obj);\n return lastObserved Set;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n var CLOSED = 2;\n var RE SETTING = 3;\n\n var nextObserverId = 1;\n\n function Observer() {\n this.s tate_ = UNOPENED;\n this.callback_ = undefined;\n this.target_ = undefined ; // TODO(rafaelw): Should be WeakRef\n this.directObserver_ = undefined;\n this.value_ = undefined;\n this.id_ = nextObserverId++;\n }\n\n Observer. prototype = {\n open: function(callback, target) {\n if (this.state_ != UNOPENED)\n throw Error('Observer has already been opened.');\n\n ad dToAll(this);\n this.callback_ = callback;\n this.target_ = target;\n this.connect_();\n this.state_ = OPENED;\n return this.value_;\n },\n\n close: function() {\n if (this.state_ != OPENED)\n retu rn;\n\n removeFromAll(this);\n this.disconnect_();\n this.value_ = undefined;\n this.callback_ = undefined;\n this.target_ = undefined; \n this.state_ = CLOSED;\n },\n\n deliver: function() {\n if (th is.state_ != OPENED)\n return;\n\n dirtyCheck(this);\n },\n\n report_: function(changes) {\n try {\n this.callback_.apply(this.tar get_, changes);\n } catch (ex) {\n Observer._errorThrownDuringCallba ck = true;\n console.error('Exception caught during observer callback: ' +\n (ex.stack || ex));\n }\n },\n\n discardChan ges: function() {\n this.check_(undefined, true);\n return this.value_ ;\n }\n }\n\n var collectObservers = !hasObserve;\n var allObservers;\n O bserver._allObserversCount = 0;\n\n if (collectObservers) {\n allObservers = [];\n }\n\n function addToAll(observer) {\n Observer._allObserversCount++; \n if (!collectObservers)\n return;\n\n allObservers.push(observer);\ n }\n\n function removeFromAll(observer) {\n Observer._allObserversCount--; \n }\n\n var runningMicrotaskCheckpoint = false;\n\n global.Platform = global .Platform || {};\n\n global.Platform.performMicrotaskCheckpoint = function() {\ n if (runningMicrotaskCheckpoint)\n return;\n\n if (!collectObservers )\n return;\n\n runningMicrotaskCheckpoint = true;\n\n var cycles = 0 ;\n var anyChanged, toCheck;\n\n do {\n cycles++;\n toCheck = al lObservers;\n allObservers = [];\n anyChanged = false;\n\n for (v ar i = 0; i < toCheck.length; i++) {\n var observer = toCheck[i];\n if (observer.state_ != OPENED)\n continue;\n\n if (observer.ch eck_())\n anyChanged = true;\n\n allObservers.push(observer);\n }\n if (runEOMTasks())\n anyChanged = true;\n } while (cycle s < MAX_DIRTY_CHECK_CYCLES && anyChanged);\n\n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoint = false;\n };\n\n if (collectObservers) {\n global.Platform.clearObservers = function() {\n allObservers = [];\n };\n }\n\n function ObjectObserver (object) {\n Observer.call(this);\n this.value_ = object;\n this.oldObj ect_ = undefined;\n }\n\n ObjectObserver.prototype = createObject({\n __pro to__: Observer.prototype,\n\n arrayObserve: false,\n\n connect_: function( callback, target) {\n if (hasObserve) {\n this.directObserver_ = get ObservedObject(this, this.value_,\n this.arrayObserve);\n } else {\n this.oldObject_ = this.copyObje ct(this.value_);\n }\n\n },\n\n copyObject: function(object) {\n var copy = Array.isArray(object) ? [] : {};\n for (var prop in object) {\n copy[prop] = object[prop];\n };\n if (Array.isArray(object))\n copy.length = object.length;\n return copy;\n },\n\n check_: function(changeRecords, skipChanges) {\n var diff;\n var oldValues;\n if (hasObserve) {\n if (!changeRecords)\n return false;\n\n oldValues = {};\n diff = diffObjectFromChangeRecords(this.value_, changeRecords,\n oldValues);\n } else {\n oldValues = this.oldObject_;\n diff = diffObjectFromOldO bject(this.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff))\n return false;\n\n if (!hasObserve)\n this.oldObject_ = this.c opyObject(this.value_);\n\n this.report_([\n diff.added || {},\n diff.removed || {},\n diff.changed || {},\n function(property) {\n return oldValues[property];\n }\n ]);\n\n return true;\n },\n\n disconnect_: function() {\n if (hasObserve) {\n this.directObserver_.close();\n this.directObserver_ = undefined;\n } else {\n this.oldObject_ = undefined;\n }\n },\n\n deliver: function() {\n if (this.state_ != OPENED)\n return;\n\n if (ha sObserve)\n this.directObserver_.deliver(false);\n else\n dir tyCheck(this);\n },\n\n discardChanges: function() {\n if (this.direc tObserver_)\n this.directObserver_.deliver(true);\n else\n th is.oldObject_ = this.copyObject(this.value_);\n\n return this.value_;\n }\n });\n\n function ArrayObserver(array) {\n if (!Array.isArray(array))\n throw Error('Provided object is not an Array');\n ObjectObserver.call(th is, array);\n }\n\n ArrayObserver.prototype = createObject({\n\n __proto__: ObjectObserver.prototype,\n\n arrayObserve: true,\n\n copyObject: functio n(arr) {\n return arr.slice();\n },\n\n check_: function(changeRecord s) {\n var splices;\n if (hasObserve) {\n if (!changeRecords)\n return false;\n splices = projectArraySplices(this.value_, chan geRecords);\n } else {\n splices = calcSplices(this.value_, 0, this. value_.length,\n this.oldObject_, 0, this.oldObject _.length);\n }\n\n if (!splices || !splices.length)\n return fa lse;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObject(this.v alue_);\n\n this.report_([splices]);\n return true;\n }\n });\n\n ArrayObserver.applySplices = function(previous, current, splices) {\n splice s.forEach(function(splice) {\n var spliceArgs = [splice.index, splice.remov ed.length];\n var addIndex = splice.index;\n while (addIndex < splice. index + splice.addedCount) {\n spliceArgs.push(current[addIndex]);\n addIndex++;\n }\n\n Array.prototype.splice.apply(previous, spliceAr gs);\n });\n };\n\n function PathObserver(object, path) {\n Observer.cal l(this);\n\n this.object_ = object;\n this.path_ = getPath(path);\n thi s.directObserver_ = undefined;\n }\n\n PathObserver.prototype = createObject({ \n __proto__: Observer.prototype,\n\n get path() {\n return this.path _;\n },\n\n connect_: function() {\n if (hasObserve)\n this.di rectObserver_ = getObservedSet(this, this.object_);\n\n this.check_(undefin ed, true);\n },\n\n disconnect_: function() {\n this.value_ = undefin ed;\n\n if (this.directObserver_) {\n this.directObserver_.close(thi s);\n this.directObserver_ = undefined;\n }\n },\n\n iterateOb jects_: function(observe) {\n this.path_.iterateObjects(this.object_, obser ve);\n },\n\n check_: function(changeRecords, skipChanges) {\n var ol dValue = this.value_;\n this.value_ = this.path_.getValueFrom(this.object_) ;\n if (skipChanges || areSameValue(this.value_, oldValue))\n return false;\n\n this.report_([this.value_, oldValue, this]);\n return true ;\n },\n\n setValue: function(newValue) {\n if (this.path_)\n this.path_.setValueFrom(this.object_, newValue);\n }\n });\n\n function Com poundObserver(reportChangesOnOpen) {\n Observer.call(this);\n\n this.repor tChangesOnOpen_ = reportChangesOnOpen;\n this.value_ = [];\n this.directOb server_ = undefined;\n this.observed_ = [];\n }\n\n var observerSentinel = {};\n\n CompoundObserver.prototype = createObject({\n __proto__: Observer.pr ototype,\n\n connect_: function() {\n if (hasObserve) {\n var obj ect;\n var needsDirectObserver = false;\n for (var i = 0; i < this .observed_.length; i += 2) {\n object = this.observed_[i]\n if (object !== observerSentinel) {\n needsDirectObserver = true;\n break;\n }\n }\n\n if (needsDirectObserver)\n this.directObserver_ = getObservedSet(this, object);\n }\n\n this .check_(undefined, !this.reportChangesOnOpen_);\n },\n\n disconnect_: func tion() {\n for (var i = 0; i < this.observed_.length; i += 2) {\n if (this.observed_[i] === observerSentinel)\n this.observed_[i + 1].close ();\n }\n this.observed_.length = 0;\n this.value_.length = 0;\n\ n if (this.directObserver_) {\n this.directObserver_.close(this);\n this.directObserver_ = undefined;\n }\n },\n\n addPath: functi on(object, path) {\n if (this.state_ != UNOPENED && this.state_ != RESETTIN G)\n throw Error('Cannot add paths once started.');\n\n var path = g etPath(path);\n this.observed_.push(object, path);\n if (!this.reportC hangesOnOpen_)\n return;\n var index = this.observed_.length / 2 - 1 ;\n this.value_[index] = path.getValueFrom(object);\n },\n\n addObser ver: function(observer) {\n if (this.state_ != UNOPENED && this.state_ != R ESETTING)\n throw Error('Cannot add observers once started.');\n\n t his.observed_.push(observerSentinel, observer);\n if (!this.reportChangesOn Open_)\n return;\n var index = this.observed_.length / 2 - 1;\n this.value_[index] = observer.open(this.deliver, this);\n },\n\n startRes et: function() {\n if (this.state_ != OPENED)\n throw Error('Can onl y reset while open');\n\n this.state_ = RESETTING;\n this.disconnect_( );\n },\n\n finishReset: function() {\n if (this.state_ != RESETTING) \n throw Error('Can only finishReset after startReset');\n this.stat e_ = OPENED;\n this.connect_();\n\n return this.value_;\n },\n\n iterateObjects_: function(observe) {\n var object;\n for (var i = 0; i < this.observed_.length; i += 2) {\n object = this.observed_[i]\n if (object !== observerSentinel)\n this.observed_[i + 1].iterateObjec ts(object, observe)\n }\n },\n\n check_: function(changeRecords, skip Changes) {\n var oldValues;\n for (var i = 0; i < this.observed_.lengt h; i += 2) {\n var object = this.observed_[i];\n var path = this.o bserved_[i+1];\n var value;\n if (object === observerSentinel) {\n var observable = path;\n value = this.state_ === UNOPENED ?\n observable.open(this.deliver, this) :\n observable.di scardChanges();\n } else {\n value = path.getValueFrom(object);\ n }\n\n if (skipChanges) {\n this.value_[i / 2] = value;\ n continue;\n }\n\n if (areSameValue(value, this.value_[i / 2]))\n continue;\n\n oldValues = oldValues || [];\n ol dValues[i / 2] = this.value_[i / 2];\n this.value_[i / 2] = value;\n }\n\n if (!oldValues)\n return false;\n\n // TODO(rafaelw): Ha ving observed_ as the third callback arg here is\n // pretty lame API. Fix. \n this.report_([this.value_, oldValues, this.observed_]);\n return tr ue;\n }\n });\n\n function identFn(value) { return value; }\n\n function O bserverTransform(observable, getValueFn, setValueFn,\n dontPassThroughSet) {\n this.callback_ = undefined;\n this.target_ = un defined;\n this.value_ = undefined;\n this.observable_ = observable;\n this.getValueFn_ = getValueFn || identFn;\n this.setValueFn_ = setValueFn || identFn;\n // TODO(rafaelw): This is a temporary hack. PolymerExpressions nee ds this\n // at the moment because of a bug in it's dependency tracking.\n this.dontPassThroughSet_ = dontPassThroughSet;\n }\n\n ObserverTransform.prot otype = {\n open: function(callback, target) {\n this.callback_ = callba ck;\n this.target_ = target;\n this.value_ =\n this.getValueF n_(this.observable_.open(this.observedCallback_, this));\n return this.valu e_;\n },\n\n observedCallback_: function(value) {\n value = this.getV alueFn_(value);\n if (areSameValue(value, this.value_))\n return;\n var oldValue = this.value_;\n this.value_ = value;\n this.callbac k_.call(this.target_, this.value_, oldValue);\n },\n\n discardChanges: fun ction() {\n this.value_ = this.getValueFn_(this.observable_.discardChanges( ));\n return this.value_;\n },\n\n deliver: function() {\n retur n this.observable_.deliver();\n },\n\n setValue: function(value) {\n value = this.setValueFn_(value);\n if (!this.dontPassThroughSet_ && this.ob servable_.setValue)\n return this.observable_.setValue(value);\n },\n\ n close: function() {\n if (this.observable_)\n this.observable_. close();\n this.callback_ = undefined;\n this.target_ = undefined;\n this.observable_ = undefined;\n this.value_ = undefined;\n this.ge tValueFn_ = undefined;\n this.setValueFn_ = undefined;\n }\n }\n\n var expectedRecordTypes = {\n add: true,\n update: true,\n delete: true\n };\n\n function diffObjectFromChangeRecords(object, changeRecords, oldValues) {\n var added = {};\n var removed = {};\n\n for (var i = 0; i < changeR ecords.length; i++) {\n var record = changeRecords[i];\n if (!expected RecordTypes[record.type]) {\n console.error('Unknown changeRecord type: ' + record.type);\n console.error(record);\n continue;\n }\n\n if (!(record.name in oldValues))\n oldValues[record.name] = record. oldValue;\n\n if (record.type == 'update')\n continue;\n\n if ( record.type == 'add') {\n if (record.name in removed)\n delete r emoved[record.name];\n else\n added[record.name] = true;\n\n continue;\n }\n\n // type = 'delete'\n if (record.name in add ed) {\n delete added[record.name];\n delete oldValues[record.name] ;\n } else {\n removed[record.name] = true;\n }\n }\n\n f or (var prop in added)\n added[prop] = object[prop];\n\n for (var prop i n removed)\n removed[prop] = undefined;\n\n var changed = {};\n for ( var prop in oldValues) {\n if (prop in added || prop in removed)\n c ontinue;\n\n var newValue = object[prop];\n if (oldValues[prop] !== ne wValue)\n changed[prop] = newValue;\n }\n\n return {\n added: added,\n removed: removed,\n changed: changed\n };\n }\n\n functi on newSplice(index, removed, addedCount) {\n return {\n index: index,\n removed: removed,\n addedCount: addedCount\n };\n }\n\n var EDIT_ LEAVE = 0;\n var EDIT_UPDATE = 1;\n var EDIT_ADD = 2;\n var EDIT_DELETE = 3;\ n\n function ArraySplice() {}\n\n ArraySplice.prototype = {\n\n // Note: Th is function is *based* on the computation of the Levenshtein\n // \"edit\" di stance. The one change is that \"updates\" are treated as two\n // edits - no t one. With Array splices, an update is really a delete\n // followed by an a dd. By retaining this, we optimize for \"keeping\" the\n // maximum array ite ms in the original array. For example:\n //\n // 'xxxx123' -> '123yyyy'\ n //\n // With 1-edit updates, the shortest path would be just to update a ll seven\n // characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\n // leaves the substring '123' intact.\n calcEditDistances: funct ion(current, currentStart, currentEnd,\n old, old Start, oldEnd) {\n // \"Deletion\" columns\n var rowCount = oldEnd - o ldStart + 1;\n var columnCount = currentEnd - currentStart + 1;\n var distances = new Array(rowCount);\n\n // \"Addition\" rows. Initialize null column.\n for (var i = 0; i < rowCount; i++) {\n distances[i] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n // Initializ e null row\n for (var j = 0; j < columnCount; j++)\n distances[0][j] = j;\n\n for (var i = 1; i < rowCount; i++) {\n for (var j = 1; j < columnCount; j++) {\n if (this.equals(current[currentStart + j - 1], o ld[oldStart + i - 1]))\n distances[i][j] = distances[i - 1][j - 1];\n else {\n var north = distances[i - 1][j] + 1;\n var west = distances[i][j - 1] + 1;\n distances[i][j] = north < west ? north : west;\n }\n }\n }\n\n return distances;\n },\n\n // This starts at the final weight, and walks \"backward\" by finding \n // the minimum previous weight recursively until the origin of the weight\ n // matrix.\n spliceOperationsFromEditDistances: function(distances) {\n var i = distances.length - 1;\n var j = distances[0].length - 1;\n var current = distances[i][j];\n var edits = [];\n while (i > 0 || j > 0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n j--;\ n continue;\n }\n if (j == 0) {\n edits.push(EDI T_DELETE);\n i--;\n continue;\n }\n var northWes t = distances[i - 1][j - 1];\n var west = distances[i - 1][j];\n v ar north = distances[i][j - 1];\n\n var min;\n if (west < north)\n min = west < northWest ? west : northWest;\n else\n mi n = north < northWest ? north : northWest;\n\n if (min == northWest) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE);\n } else {\n edits.push(EDIT_UPDATE);\n current = north West;\n }\n i--;\n j--;\n } else if (min == we st) {\n edits.push(EDIT_DELETE);\n i--;\n current = w est;\n } else {\n edits.push(EDIT_ADD);\n j--;\n current = north;\n }\n }\n\n edits.reverse();\n return edits;\n },\n\n /**\n * Splice Projection functions:\n *\n * A splice map is a representation of how a previous array of items\n * was tra nsformed into a new array of items. Conceptually it is a list of\n * tuples of\n *\n * <index, removed, addedCount>\n *\n * which are kept in ascending index order of. The tuple represents that at\n * the |index|, |removed| sequence of items were removed, and counting forward\n * from |ind ex|, |addedCount| items were added.\n */\n\n /**\n * Lacking individu al splice mutation information, the minimal set of\n * splices can be synthe sized given the previous state and final state of an\n * array. The basic ap proach is to calculate the edit distance matrix and\n * choose the shortest path through it.\n *\n * Complexity: O(l * p)\n * l: The length of the current array\n * p: The length of the old array\n */\n calcSp lices: function(current, currentStart, currentEnd,\n ol d, oldStart, oldEnd) {\n var prefixCount = 0;\n var suffixCount = 0;\n \n var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\ n if (currentStart == 0 && oldStart == 0)\n prefixCount = this.share dPrefix(current, old, minLength);\n\n if (currentEnd == current.length && o ldEnd == old.length)\n suffixCount = this.sharedSuffix(current, old, minL ength - prefixCount);\n\n currentStart += prefixCount;\n oldStart += p refixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n retu rn [];\n\n if (currentStart == currentEnd) {\n var splice = newSplic e(currentStart, [], 0);\n while (oldStart < oldEnd)\n splice.rem oved.push(old[oldStart++]);\n\n return [ splice ];\n } else if (oldS tart == oldEnd)\n return [ newSplice(currentStart, [], currentEnd - curre ntStart) ];\n\n var ops = this.spliceOperationsFromEditDistances(\n this.calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd));\n\n var splice = undefined;\n v ar splices = [];\n var index = currentStart;\n var oldIndex = oldStart ;\n for (var i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n case EDIT_LEAVE:\n if (splice) {\n splices.push(spl ice);\n splice = undefined;\n }\n\n index++;\ n oldIndex++;\n break;\n case EDIT_UPDATE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n\n splice.removed.pus h(old[oldIndex]);\n oldIndex++;\n break;\n case E DIT_ADD:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n break ;\n case EDIT_DELETE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n }\n }\n\n if (splic e) {\n splices.push(splice);\n }\n return splices;\n },\n\n sharedPrefix: function(current, old, searchLength) {\n for (var i = 0; i < searchLength; i++)\n if (!this.equals(current[i], old[i]))\n return i;\n return searchLength;\n },\n\n sharedSuffix: function(curr ent, old, searchLength) {\n var index1 = current.length;\n var index2 = old.length;\n var count = 0;\n while (count < searchLength && this.e quals(current[--index1], old[--index2]))\n count++;\n\n return count ;\n },\n\n calculateSplices: function(current, previous) {\n return t his.calcSplices(current, 0, current.length, previous, 0,\n previous.length);\n },\n\n equals: function(currentValue, previous Value) {\n return currentValue === previousValue;\n }\n };\n\n var arr aySplice = new ArraySplice();\n\n function calcSplices(current, currentStart, c urrentEnd,\n old, oldStart, oldEnd) {\n return arraySpl ice.calcSplices(current, currentStart, currentEnd,\n old, oldStart, oldEnd);\n }\n\n function intersect(start1, end1, start2 , end2) {\n // Disjoint\n if (end1 < start2 || end2 < start1)\n retur n -1;\n\n // Adjacent\n if (end1 == start2 || end2 == start1)\n retur n 0;\n\n // Non-zero intersect, span1 first\n if (start1 < start2) {\n if (end1 < end2)\n return end1 - start2; // Overlap\n else\n return end2 - start2; // Contained\n } else {\n // Non-zero intersect, span2 first\n if (end2 < end1)\n return end2 - start1; // Overlap\n else\n return end1 - start1; // Contained\n }\n }\n\n function mergeSplice(splices, index, removed, addedCount) {\n\n var splice = newSplic e(index, removed, addedCount);\n\n var inserted = false;\n var insertionOf fset = 0;\n\n for (var i = 0; i < splices.length; i++) {\n var current = splices[i];\n current.index += insertionOffset;\n\n if (inserted)\n continue;\n\n var intersectCount = intersect(splice.index,\n splice.index + splice.removed.length,\n current.index,\n cur rent.index + current.addedCount);\n\n if (intersectCount >= 0) {\n / / Merge the two splices\n\n splices.splice(i, 1);\n i--;\n\n insertionOffset -= current.addedCount - current.removed.length;\n\n spl ice.addedCount += current.addedCount - intersectCount;\n var deleteCount = splice.removed.length +\n current.removed.length - in tersectCount;\n\n if (!splice.addedCount && !deleteCount) {\n // merged splice is a noop. discard.\n inserted = true;\n } else { \n var removed = current.removed;\n\n if (splice.index < curre nt.index) {\n // some prefix of splice.removed is prepended to curren t.removed.\n var prepend = splice.removed.slice(0, current.index - sp lice.index);\n Array.prototype.push.apply(prepend, removed);\n removed = prepend;\n }\n\n if (splice.index + splice.remo ved.length > current.index + current.addedCount) {\n // some suffix o f splice.removed is appended to current.removed.\n var append = splic e.removed.slice(current.index + current.addedCount - splice.index);\n Array.prototype.push.apply(removed, append);\n }\n\n splice.r emoved = removed;\n if (current.index < splice.index) {\n sp lice.index = current.index;\n }\n }\n } else if (splice.ind ex < current.index) {\n // Insert splice here.\n\n inserted = true ;\n\n splices.splice(i, 0, splice);\n i++;\n\n var offset = splice.addedCount - splice.removed.length\n current.index += offset;\n insertionOffset += offset;\n }\n }\n\n if (!inserted)\n sp lices.push(splice);\n }\n\n function createInitialSplices(array, changeRecords ) {\n var splices = [];\n\n for (var i = 0; i < changeRecords.length; i++) {\n var record = changeRecords[i];\n switch(record.type) {\n c ase 'splice':\n mergeSplice(splices, record.index, record.removed.slice (), record.addedCount);\n break;\n case 'add':\n case 'up date':\n case 'delete':\n if (!isIndex(record.name))\n continue;\n var index = toNumber(record.name);\n if (index < 0)\n continue;\n mergeSplice(splices, index, [record.oldVal ue], 1);\n break;\n default:\n console.error('Unexpecte d record type: ' + JSON.stringify(record));\n break;\n }\n }\n\ n return splices;\n }\n\n function projectArraySplices(array, changeRecords ) {\n var splices = [];\n\n createInitialSplices(array, changeRecords).for Each(function(splice) {\n if (splice.addedCount == 1 && splice.removed.leng th == 1) {\n if (splice.removed[0] !== array[splice.index])\n sp lices.push(splice);\n\n return\n };\n\n splices = splices.conca t(calcSplices(array, splice.index, splice.index + splice.addedCount,\n splice.removed, 0, splice.removed.length));\n });\n\n return splices;\n }\n\n global.Observer = Observer;\n global.Obs erver.runEOM_ = runEOM;\n global.Observer.observerSentinel_ = observerSentinel; // for testing.\n global.Observer.hasObjectObserve = hasObserve;\n global.Arr ayObserver = ArrayObserver;\n global.ArrayObserver.calculateSplices = function( current, previous) {\n return arraySplice.calculateSplices(current, previous) ;\n };\n\n global.ArraySplice = ArraySplice;\n global.ObjectObserver = Object Observer;\n global.PathObserver = PathObserver;\n global.CompoundObserver = Co mpoundObserver;\n global.Path = Path;\n global.ObserverTransform = ObserverTra nsform;\n})(typeof global !== 'undefined' && global && typeof module !== 'undefi ned' && module ? global : this || window);\n", 87 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(global) {\n 'u se strict';\n\n var testingExposeCycleCount = global.testingExposeCycleCount;\n \n // Detect and do basic sanity checking on Object/Array.observe.\n function detectObjectObserve() {\n if (typeof Object.observe !== 'function' ||\n typeof Array.observe !== 'function') {\n return false;\n }\n\n var records = [];\n\n function callback(recs) {\n records = recs;\n }\n\n var test = {};\n var arr = [];\n Object.observe(test, callback);\n Array.observe(arr, callback);\n test.id = 1;\n test.id = 2;\n delete te st.id;\n arr.push(1, 2);\n arr.length = 0;\n\n Object.deliverChangeReco rds(callback);\n if (records.length !== 5)\n return false;\n\n if (re cords[0].type != 'add' ||\n records[1].type != 'update' ||\n recor ds[2].type != 'delete' ||\n records[3].type != 'splice' ||\n recor ds[4].type != 'splice') {\n return false;\n }\n\n Object.unobserve(te st, callback);\n Array.unobserve(arr, callback);\n\n return true;\n }\n\n var hasObserve = detectObjectObserve();\n\n function detectEval() {\n // D on't test for eval if we're running in a Chrome App environment.\n // We chec k for APIs set that only exist in a Chrome App context.\n if (typeof chrome ! == 'undefined' && chrome.app && chrome.app.runtime) {\n return false;\n }\n\n // Firefox OS Apps do not allow eval. This feature detection is very ha cky\n // but even if some other platform adds support for this function this code\n // will continue to work.\n if (typeof navigator != 'undefined' && navigator.getDeviceStorage) {\n return false;\n }\n\n try {\n va r f = new Function('', 'return true;');\n return f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasEval = detectEval();\n\n function i sIndex(s) {\n return +s === s >>> 0 && s !== '';\n }\n\n function toNumber( s) {\n return +s;\n }\n\n function isObject(obj) {\n return obj === Obje ct(obj);\n }\n\n var numberIsNaN = global.Number.isNaN || function(value) {\n return typeof value === 'number' && global.isNaN(value);\n }\n\n function a reSameValue(left, right) {\n if (left === right)\n return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) && numberIsNaN(right))\n return true;\n\n return left !== left && right !== right;\n }\n\n var crea teObject = ('__proto__' in {}) ?\n function(obj) { return obj; } :\n funct ion(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNa mes(obj).forEach(function(name) {\n Object.defineProperty(newObject, name ,\n Object.getOwnPropertyDescriptor(obj, name));\n });\n return newObject;\n };\n\n var identStart = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var identRegExp = new RegExp('^' + ident Start + '+' + identPart + '*' + '$');\n\n function getPathCharType(char) {\n if (char === undefined)\n return 'eof';\n\n var code = char.charCodeAt( 0);\n\n switch(code) {\n case 0x5B: // [\n case 0x5D: // ]\n c ase 0x2E: // .\n case 0x22: // \"\n case 0x27: // '\n case 0x30: // 0\n return char;\n\n case 0x5F: // _\n case 0x24: // $\n return 'ident';\n\n case 0x20: // Space\n case 0x09: // Tab\n case 0x0A: // Newline\n case 0x0D: // Return\n case 0xA0: // No-brea k space\n case 0xFEFF: // Byte Order Mark\n case 0x2028: // Line Sep arator\n case 0x2029: // Paragraph Separator\n return 'ws';\n }\ n\n // a-z, A-Z\n if ((0x61 <= code && code <= 0x7A) || (0x41 <= code && c ode <= 0x5A))\n return 'ident';\n\n // 1-9\n if (0x31 <= code && code <= 0x39)\n return 'number';\n\n return 'else';\n }\n\n var pathStateM achine = {\n 'beforePath': {\n 'ws': ['beforePath'],\n 'ident': ['i nIdent', 'append'],\n '[': ['beforeElement'],\n 'eof': ['afterPath']\n },\n\n 'inPath': {\n 'ws': ['inPath'],\n '.': ['beforeIdent'],\ n '[': ['beforeElement'],\n 'eof': ['afterPath']\n },\n\n 'befor eIdent': {\n 'ws': ['beforeIdent'],\n 'ident': ['inIdent', 'append']\n },\n\n 'inIdent': {\n 'ident': ['inIdent', 'append'],\n '0': [' inIdent', 'append'],\n 'number': ['inIdent', 'append'],\n 'ws': ['inPa th', 'push'],\n '.': ['beforeIdent', 'push'],\n '[': ['beforeElement', 'push'],\n 'eof': ['afterPath', 'push']\n },\n\n 'beforeElement': {\ n 'ws': ['beforeElement'],\n '0': ['afterZero', 'append'],\n 'num ber': ['inIndex', 'append'],\n \"'\": ['inSingleQuote', 'append', ''],\n '\"': ['inDoubleQuote', 'append', '']\n },\n\n 'afterZero': {\n 'w s': ['afterElement', 'push'],\n ']': ['inPath', 'push']\n },\n\n 'inI ndex': {\n '0': ['inIndex', 'append'],\n 'number': ['inIndex', 'append '],\n 'ws': ['afterElement'],\n ']': ['inPath', 'push']\n },\n\n 'inSingleQuote': {\n \"'\": ['afterElement'],\n 'eof': ['error'],\n 'else': ['inSingleQuote', 'append']\n },\n\n 'inDoubleQuote': {\n '\"': ['afterElement'],\n 'eof': ['error'],\n 'else': ['inDoubleQuote ', 'append']\n },\n\n 'afterElement': {\n 'ws': ['afterElement'],\n ']': ['inPath', 'push']\n }\n }\n\n function noop() {}\n\n function pa rsePath(path) {\n var keys = [];\n var index = -1;\n var c, newChar, ke y, type, transition, action, typeMap, mode = 'beforePath';\n\n var actions = {\n push: function() {\n if (key === undefined)\n return;\n \n keys.push(key);\n key = undefined;\n },\n\n append: f unction() {\n if (key === undefined)\n key = newChar\n el se\n key += newChar;\n }\n };\n\n function maybeUnescapeQuot e() {\n if (index >= path.length)\n return;\n\n var nextChar = path[index + 1];\n if ((mode == 'inSingleQuote' && nextChar == \"'\") ||\n (mode == 'inDoubleQuote' && nextChar == '\"')) {\n index++;\n newChar = nextChar;\n actions.append();\n return true;\n }\n }\n\n while (mode) {\n index++;\n c = path[index];\n\n if (c == '\\\\' && maybeUnescapeQuote(mode))\n continue;\n\n type = getPathCharType(c);\n typeMap = pathStateMachine[mode];\n transition = typeMap[type] || typeMap['else'] || 'error';\n\n if (transition == 'error ')\n return; // parse error;\n\n mode = transition[0];\n action = actions[transition[1]] || noop;\n newChar = transition[2] === undefined ? c : transition[2];\n action();\n\n if (mode === 'afterPath') {\n return keys;\n }\n }\n\n return; // parse error\n }\n\n functio n isIdent(s) {\n return identRegExp.test(s);\n }\n\n var constructorIsPriva te = {};\n\n function Path(parts, privateToken) {\n if (privateToken !== con structorIsPrivate)\n throw Error('Use Path.get to retrieve path objects');\ n\n for (var i = 0; i < parts.length; i++) {\n this.push(String(parts[i] ));\n }\n\n if (hasEval && this.length) {\n this.getValueFrom = this. compiledGetValueFromFn();\n }\n }\n\n // TODO(rafaelw): Make simple LRU cac he\n var pathCache = {};\n\n function getPath(pathString) {\n if (pathStrin g instanceof Path)\n return pathString;\n\n if (pathString == null || pa thString.length == 0)\n pathString = '';\n\n if (typeof pathString != 's tring') {\n if (isIndex(pathString.length)) {\n // Constructed with array-like (pre-parsed) keys\n return new Path(pathString, constructorIsP rivate);\n }\n\n pathString = String(pathString);\n }\n\n var pa th = pathCache[pathString];\n if (path)\n return path;\n\n var parts = parsePath(pathString);\n if (!parts)\n return invalidPath;\n\n var path = new Path(parts, constructorIsPrivate);\n pathCache[pathString] = path; \n return path;\n }\n\n Path.get = getPath;\n\n function formatAccessor(ke y) {\n if (isIndex(key)) {\n return '[' + key + ']';\n } else {\n return '[\"' + key.replace(/\"/g, '\\\\\"') + '\"]';\n }\n }\n\n Path.pro totype = createObject({\n __proto__: [],\n valid: true,\n\n toString: f unction() {\n var pathString = '';\n for (var i = 0; i < this.length; i++) {\n var key = this[i];\n if (isIdent(key)) {\n pathS tring += i ? '.' + key : key;\n } else {\n pathString += formatA ccessor(key);\n }\n }\n\n return pathString;\n },\n\n get ValueFrom: function(obj, directObserver) {\n for (var i = 0; i < this.lengt h; i++) {\n if (obj == null)\n return;\n obj = obj[this[i ]];\n }\n return obj;\n },\n\n iterateObjects: function(obj, obs erve) {\n for (var i = 0; i < this.length; i++) {\n if (i)\n obj = obj[this[i - 1]];\n if (!isObject(obj))\n return;\n observe(obj, this[0]);\n }\n },\n\n compiledGetValueFromFn: functi on() {\n var str = '';\n var pathString = 'obj';\n str += 'if (ob j != null';\n var i = 0;\n var key;\n for (; i < (this.length - 1 ); i++) {\n key = this[i];\n pathString += isIdent(key) ? '.' + ke y : formatAccessor(key);\n str += ' &&\\n ' + pathString + ' != null' ;\n }\n str += ')\\n';\n\n var key = this[i];\n pathString + = isIdent(key) ? '.' + key : formatAccessor(key);\n\n str += ' return ' + pathString + ';\\nelse\\n return undefined;';\n return new Function('obj', str);\n },\n\n setValueFrom: function(obj, value) {\n if (!this.leng th)\n return false;\n\n for (var i = 0; i < this.length - 1; i++) {\ n if (!isObject(obj))\n return false;\n obj = obj[this[i] ];\n }\n\n if (!isObject(obj))\n return false;\n\n obj[thi s[i]] = value;\n return true;\n }\n });\n\n var invalidPath = new Path ('', constructorIsPrivate);\n invalidPath.valid = false;\n invalidPath.getValu eFrom = invalidPath.setValueFrom = function() {};\n\n var MAX_DIRTY_CHECK_CYCLE S = 1000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\n while ( cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n cycles++;\n }\ n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n \n return cycles > 0;\n }\n\n function objectIsEmpty(object) {\n for (va r prop in object)\n return false;\n return true;\n }\n\n function diff IsEmpty(diff) {\n return objectIsEmpty(diff.added) &&\n objectIsEmp ty(diff.removed) &&\n objectIsEmpty(diff.changed);\n }\n\n function diffObjectFromOldObject(object, oldObject) {\n var added = {};\n var remov ed = {};\n var changed = {};\n\n for (var prop in oldObject) {\n var newValue = object[prop];\n\n if (newValue !== undefined && newValue === old Object[prop])\n continue;\n\n if (!(prop in object)) {\n remo ved[prop] = undefined;\n continue;\n }\n\n if (newValue !== old Object[prop])\n changed[prop] = newValue;\n }\n\n for (var prop in object) {\n if (prop in oldObject)\n continue;\n\n added[prop] = object[prop];\n }\n\n if (Array.isArray(object) && object.length !== old Object.length)\n changed.length = object.length;\n\n return {\n add ed: added,\n removed: removed,\n changed: changed\n };\n }\n\n va r eomTasks = [];\n function runEOMTasks() {\n if (!eomTasks.length)\n r eturn false;\n\n for (var i = 0; i < eomTasks.length; i++) {\n eomTasks[ i]();\n }\n eomTasks.length = 0;\n return true;\n }\n\n var runEOM = hasObserve ? (function(){\n var eomObj = { pingPong: true };\n var eomRunS cheduled = false;\n\n Object.observe(eomObj, function() {\n runEOMTasks( );\n eomRunScheduled = false;\n });\n\n return function(fn) {\n eomTasks.push(fn);\n if (!eomRunScheduled) {\n eomRunScheduled = tru e;\n eomObj.pingPong = !eomObj.pingPong;\n }\n };\n })() :\n (f unction() {\n return function(fn) {\n eomTasks.push(fn);\n };\n })() ;\n\n var observedObjectCache = [];\n\n function newObservedObject() {\n va r observer;\n var object;\n var discardRecords = false;\n var first = t rue;\n\n function callback(records) {\n if (observer && observer.state_ === OPENED && !discardRecords)\n observer.check_(records);\n }\n\n return {\n open: function(obs) {\n if (observer)\n throw Er ror('ObservedObject in use');\n\n if (!first)\n Object.deliverCh angeRecords(callback);\n\n observer = obs;\n first = false;\n },\n observe: function(obj, arrayObserve) {\n object = obj;\n if (arrayObserve)\n Array.observe(object, callback);\n else\n Object.observe(object, callback);\n },\n deliver: function(di scard) {\n discardRecords = discard;\n Object.deliverChangeRecords (callback);\n discardRecords = false;\n },\n close: function() {\n observer = undefined;\n Object.unobserve(object, callback);\n observedObjectCache.push(this);\n }\n };\n }\n\n /*\n * The o bservedSet abstraction is a perf optimization which reduces the total\n * numb er of Object.observe observations of a set of objects. The idea is that\n * gr oups of Observers will have some object dependencies in common and this\n * ob served set ensures that each object in the transitive closure of\n * dependenc ies is only observed once. The observedSet acts as a write barrier\n * such th at whenever any change comes through, all Observers are checked for\n * change d values.\n *\n * Note that this optimization is explicitly moving work from setup-time to\n * change-time.\n *\n * TODO(rafaelw): Implement \"garbage collection\". In order to move work off\n * the critical path, when Observers are closed, their observed objects are\n * not Object.unobserve(d). As a resu lt, it's possible that if the observedSet\n * is kept open, but some Observers have been closed, it could cause \"leaks\"\n * (prevent otherwise collectable objects from being collected). At some\n * point, we should implement increme ntal \"gc\" which keeps a list of\n * observedSets which may need clean-up and does small amounts of cleanup on a\n * timeout until all is clean.\n */\n\n function getObservedObject(observer, object, arrayObserve) {\n var dir = ob servedObjectCache.pop() || newObservedObject();\n dir.open(observer);\n di r.observe(object, arrayObserve);\n return dir;\n }\n\n var observedSetCache = [];\n\n function newObservedSet() {\n var observerCount = 0;\n var obs ervers = [];\n var objects = [];\n var rootObj;\n var rootObjProps;\n\n function observe(obj, prop) {\n if (!obj)\n return;\n\n if (obj === rootObj)\n rootObjProps[prop] = true;\n\n if (objects.index Of(obj) < 0) {\n objects.push(obj);\n Object.observe(obj, callback );\n }\n\n observe(Object.getPrototypeOf(obj), prop);\n }\n\n fu nction allRootObjNonObservedProps(recs) {\n for (var i = 0; i < recs.length ; i++) {\n var rec = recs[i];\n if (rec.object !== rootObj ||\n rootObjProps[rec.name] ||\n rec.type === 'setPrototype') {\n return false;\n }\n }\n return true;\n }\n\n fu nction callback(recs) {\n if (allRootObjNonObservedProps(recs))\n re turn;\n\n var observer;\n for (var i = 0; i < observers.length; i++) { \n observer = observers[i];\n if (observer.state_ == OPENED) {\n observer.iterateObjects_(observe);\n }\n }\n\n for (var i = 0; i < observers.length; i++) {\n observer = observers[i];\n if (observer.state_ == OPENED) {\n observer.check_();\n }\n }\n }\n\n var record = {\n object: undefined,\n objects: object s,\n open: function(obs, object) {\n if (!rootObj) {\n root Obj = object;\n rootObjProps = {};\n }\n\n observers.push (obs);\n observerCount++;\n obs.iterateObjects_(observe);\n } ,\n close: function(obs) {\n observerCount--;\n if (observerC ount > 0) {\n return;\n }\n\n for (var i = 0; i < objects .length; i++) {\n Object.unobserve(objects[i], callback);\n Ob server.unobservedCount++;\n }\n\n observers.length = 0;\n o bjects.length = 0;\n rootObj = undefined;\n rootObjProps = undefin ed;\n observedSetCache.push(this);\n }\n };\n\n return record; \n }\n\n var lastObservedSet;\n\n function getObservedSet(observer, obj) {\n if (!lastObservedSet || lastObservedSet.object !== obj) {\n lastObserved Set = observedSetCache.pop() || newObservedSet();\n lastObservedSet.object = obj;\n }\n lastObservedSet.open(observer, obj);\n return lastObserved Set;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n var CLOSED = 2;\n var RE SETTING = 3;\n\n var nextObserverId = 1;\n\n function Observer() {\n this.s tate_ = UNOPENED;\n this.callback_ = undefined;\n this.target_ = undefined ; // TODO(rafaelw): Should be WeakRef\n this.directObserver_ = undefined;\n this.value_ = undefined;\n this.id_ = nextObserverId++;\n }\n\n Observer. prototype = {\n open: function(callback, target) {\n if (this.state_ != UNOPENED)\n throw Error('Observer has already been opened.');\n\n ad dToAll(this);\n this.callback_ = callback;\n this.target_ = target;\n this.connect_();\n this.state_ = OPENED;\n return this.value_;\n },\n\n close: function() {\n if (this.state_ != OPENED)\n retu rn;\n\n removeFromAll(this);\n this.disconnect_();\n this.value_ = undefined;\n this.callback_ = undefined;\n this.target_ = undefined; \n this.state_ = CLOSED;\n },\n\n deliver: function() {\n if (th is.state_ != OPENED)\n return;\n\n dirtyCheck(this);\n },\n\n report_: function(changes) {\n try {\n this.callback_.apply(this.tar get_, changes);\n } catch (ex) {\n Observer._errorThrownDuringCallba ck = true;\n console.error('Exception caught during observer callback: ' +\n (ex.stack || ex));\n }\n },\n\n discardChan ges: function() {\n this.check_(undefined, true);\n return this.value_ ;\n }\n }\n\n var collectObservers = !hasObserve;\n var allObservers;\n O bserver._allObserversCount = 0;\n\n if (collectObservers) {\n allObservers = [];\n }\n\n function addToAll(observer) {\n Observer._allObserversCount++; \n if (!collectObservers)\n return;\n\n allObservers.push(observer);\ n }\n\n function removeFromAll(observer) {\n Observer._allObserversCount--; \n }\n\n var runningMicrotaskCheckpoint = false;\n\n global.Platform = global .Platform || {};\n\n global.Platform.performMicrotaskCheckpoint = function() {\ n if (runningMicrotaskCheckpoint)\n return;\n\n if (!collectObservers )\n return;\n\n runningMicrotaskCheckpoint = true;\n\n var cycles = 0 ;\n var anyChanged, toCheck;\n\n do {\n cycles++;\n toCheck = al lObservers;\n allObservers = [];\n anyChanged = false;\n\n for (v ar i = 0; i < toCheck.length; i++) {\n var observer = toCheck[i];\n if (observer.state_ != OPENED)\n continue;\n\n if (observer.ch eck_())\n anyChanged = true;\n\n allObservers.push(observer);\n }\n if (runEOMTasks())\n anyChanged = true;\n } while (cycle s < MAX_DIRTY_CHECK_CYCLES && anyChanged);\n\n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoint = false;\n };\n\n if (collectObservers) {\n global.Platform.clearObservers = function() {\n allObservers = [];\n };\n }\n\n function ObjectObserver (object) {\n Observer.call(this);\n this.value_ = object;\n this.oldObj ect_ = undefined;\n }\n\n ObjectObserver.prototype = createObject({\n __pro to__: Observer.prototype,\n\n arrayObserve: false,\n\n connect_: function( callback, target) {\n if (hasObserve) {\n this.directObserver_ = get ObservedObject(this, this.value_,\n this.arrayObserve);\n } else {\n this.oldObject_ = this.copyObje ct(this.value_);\n }\n\n },\n\n copyObject: function(object) {\n var copy = Array.isArray(object) ? [] : {};\n for (var prop in object) {\n copy[prop] = object[prop];\n };\n if (Array.isArray(object))\n copy.length = object.length;\n return copy;\n },\n\n check_: function(changeRecords, skipChanges) {\n var diff;\n var oldValues;\n if (hasObserve) {\n if (!changeRecords)\n return false;\n\n oldValues = {};\n diff = diffObjectFromChangeRecords(this.value_, changeRecords,\n oldValues);\n } else {\n oldValues = this.oldObject_;\n diff = diffObjectFromOldO bject(this.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff))\n return false;\n\n if (!hasObserve)\n this.oldObject_ = this.c opyObject(this.value_);\n\n this.report_([\n diff.added || {},\n diff.removed || {},\n diff.changed || {},\n function(property) {\n return oldValues[property];\n }\n ]);\n\n return true;\n },\n\n disconnect_: function() {\n if (hasObserve) {\n this.directObserver_.close();\n this.directObserver_ = undefined;\n } else {\n this.oldObject_ = undefined;\n }\n },\n\n deliver: function() {\n if (this.state_ != OPENED)\n return;\n\n if (ha sObserve)\n this.directObserver_.deliver(false);\n else\n dir tyCheck(this);\n },\n\n discardChanges: function() {\n if (this.direc tObserver_)\n this.directObserver_.deliver(true);\n else\n th is.oldObject_ = this.copyObject(this.value_);\n\n return this.value_;\n }\n });\n\n function ArrayObserver(array) {\n if (!Array.isArray(array))\n throw Error('Provided object is not an Array');\n ObjectObserver.call(th is, array);\n }\n\n ArrayObserver.prototype = createObject({\n\n __proto__: ObjectObserver.prototype,\n\n arrayObserve: true,\n\n copyObject: functio n(arr) {\n return arr.slice();\n },\n\n check_: function(changeRecord s) {\n var splices;\n if (hasObserve) {\n if (!changeRecords)\n return false;\n splices = projectArraySplices(this.value_, chan geRecords);\n } else {\n splices = calcSplices(this.value_, 0, this. value_.length,\n this.oldObject_, 0, this.oldObject _.length);\n }\n\n if (!splices || !splices.length)\n return fa lse;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObject(this.v alue_);\n\n this.report_([splices]);\n return true;\n }\n });\n\n ArrayObserver.applySplices = function(previous, current, splices) {\n splice s.forEach(function(splice) {\n var spliceArgs = [splice.index, splice.remov ed.length];\n var addIndex = splice.index;\n while (addIndex < splice. index + splice.addedCount) {\n spliceArgs.push(current[addIndex]);\n addIndex++;\n }\n\n Array.prototype.splice.apply(previous, spliceAr gs);\n });\n };\n\n function PathObserver(object, path) {\n Observer.cal l(this);\n\n this.object_ = object;\n this.path_ = getPath(path);\n thi s.directObserver_ = undefined;\n }\n\n PathObserver.prototype = createObject({ \n __proto__: Observer.prototype,\n\n get path() {\n return this.path _;\n },\n\n connect_: function() {\n if (hasObserve)\n this.di rectObserver_ = getObservedSet(this, this.object_);\n\n this.check_(undefin ed, true);\n },\n\n disconnect_: function() {\n this.value_ = undefin ed;\n\n if (this.directObserver_) {\n this.directObserver_.close(thi s);\n this.directObserver_ = undefined;\n }\n },\n\n iterateOb jects_: function(observe) {\n this.path_.iterateObjects(this.object_, obser ve);\n },\n\n check_: function(changeRecords, skipChanges) {\n var ol dValue = this.value_;\n this.value_ = this.path_.getValueFrom(this.object_) ;\n if (skipChanges || areSameValue(this.value_, oldValue))\n return false;\n\n this.report_([this.value_, oldValue, this]);\n return true ;\n },\n\n setValue: function(newValue) {\n if (this.path_)\n this.path_.setValueFrom(this.object_, newValue);\n }\n });\n\n function Com poundObserver(reportChangesOnOpen) {\n Observer.call(this);\n\n this.repor tChangesOnOpen_ = reportChangesOnOpen;\n this.value_ = [];\n this.directOb server_ = undefined;\n this.observed_ = [];\n }\n\n var observerSentinel = {};\n\n CompoundObserver.prototype = createObject({\n __proto__: Observer.pr ototype,\n\n connect_: function() {\n if (hasObserve) {\n var obj ect;\n var needsDirectObserver = false;\n for (var i = 0; i < this .observed_.length; i += 2) {\n object = this.observed_[i]\n if (object !== observerSentinel) {\n needsDirectObserver = true;\n break;\n }\n }\n\n if (needsDirectObserver)\n this.directObserver_ = getObservedSet(this, object);\n }\n\n this .check_(undefined, !this.reportChangesOnOpen_);\n },\n\n disconnect_: func tion() {\n for (var i = 0; i < this.observed_.length; i += 2) {\n if (this.observed_[i] === observerSentinel)\n this.observed_[i + 1].close ();\n }\n this.observed_.length = 0;\n this.value_.length = 0;\n\ n if (this.directObserver_) {\n this.directObserver_.close(this);\n this.directObserver_ = undefined;\n }\n },\n\n addPath: functi on(object, path) {\n if (this.state_ != UNOPENED && this.state_ != RESETTIN G)\n throw Error('Cannot add paths once started.');\n\n var path = g etPath(path);\n this.observed_.push(object, path);\n if (!this.reportC hangesOnOpen_)\n return;\n var index = this.observed_.length / 2 - 1 ;\n this.value_[index] = path.getValueFrom(object);\n },\n\n addObser ver: function(observer) {\n if (this.state_ != UNOPENED && this.state_ != R ESETTING)\n throw Error('Cannot add observers once started.');\n\n t his.observed_.push(observerSentinel, observer);\n if (!this.reportChangesOn Open_)\n return;\n var index = this.observed_.length / 2 - 1;\n this.value_[index] = observer.open(this.deliver, this);\n },\n\n startRes et: function() {\n if (this.state_ != OPENED)\n throw Error('Can onl y reset while open');\n\n this.state_ = RESETTING;\n this.disconnect_( );\n },\n\n finishReset: function() {\n if (this.state_ != RESETTING) \n throw Error('Can only finishReset after startReset');\n this.stat e_ = OPENED;\n this.connect_();\n\n return this.value_;\n },\n\n iterateObjects_: function(observe) {\n var object;\n for (var i = 0; i < this.observed_.length; i += 2) {\n object = this.observed_[i]\n if (object !== observerSentinel)\n this.observed_[i + 1].iterateObjec ts(object, observe)\n }\n },\n\n check_: function(changeRecords, skip Changes) {\n var oldValues;\n for (var i = 0; i < this.observed_.lengt h; i += 2) {\n var object = this.observed_[i];\n var path = this.o bserved_[i+1];\n var value;\n if (object === observerSentinel) {\n var observable = path;\n value = this.state_ === UNOPENED ?\n observable.open(this.deliver, this) :\n observable.di scardChanges();\n } else {\n value = path.getValueFrom(object);\ n }\n\n if (skipChanges) {\n this.value_[i / 2] = value;\ n continue;\n }\n\n if (areSameValue(value, this.value_[i / 2]))\n continue;\n\n oldValues = oldValues || [];\n ol dValues[i / 2] = this.value_[i / 2];\n this.value_[i / 2] = value;\n }\n\n if (!oldValues)\n return false;\n\n // TODO(rafaelw): Ha ving observed_ as the third callback arg here is\n // pretty lame API. Fix. \n this.report_([this.value_, oldValues, this.observed_]);\n return tr ue;\n }\n });\n\n function identFn(value) { return value; }\n\n function O bserverTransform(observable, getValueFn, setValueFn,\n dontPassThroughSet) {\n this.callback_ = undefined;\n this.target_ = un defined;\n this.value_ = undefined;\n this.observable_ = observable;\n this.getValueFn_ = getValueFn || identFn;\n this.setValueFn_ = setValueFn || identFn;\n // TODO(rafaelw): This is a temporary hack. PolymerExpressions nee ds this\n // at the moment because of a bug in it's dependency tracking.\n this.dontPassThroughSet_ = dontPassThroughSet;\n }\n\n ObserverTransform.prot otype = {\n open: function(callback, target) {\n this.callback_ = callba ck;\n this.target_ = target;\n this.value_ =\n this.getValueF n_(this.observable_.open(this.observedCallback_, this));\n return this.valu e_;\n },\n\n observedCallback_: function(value) {\n value = this.getV alueFn_(value);\n if (areSameValue(value, this.value_))\n return;\n var oldValue = this.value_;\n this.value_ = value;\n this.callbac k_.call(this.target_, this.value_, oldValue);\n },\n\n discardChanges: fun ction() {\n this.value_ = this.getValueFn_(this.observable_.discardChanges( ));\n return this.value_;\n },\n\n deliver: function() {\n retur n this.observable_.deliver();\n },\n\n setValue: function(value) {\n value = this.setValueFn_(value);\n if (!this.dontPassThroughSet_ && this.ob servable_.setValue)\n return this.observable_.setValue(value);\n },\n\ n close: function() {\n if (this.observable_)\n this.observable_. close();\n this.callback_ = undefined;\n this.target_ = undefined;\n this.observable_ = undefined;\n this.value_ = undefined;\n this.ge tValueFn_ = undefined;\n this.setValueFn_ = undefined;\n }\n }\n\n var expectedRecordTypes = {\n add: true,\n update: true,\n delete: true\n };\n\n function diffObjectFromChangeRecords(object, changeRecords, oldValues) {\n var added = {};\n var removed = {};\n\n for (var i = 0; i < changeR ecords.length; i++) {\n var record = changeRecords[i];\n if (!expected RecordTypes[record.type]) {\n console.error('Unknown changeRecord type: ' + record.type);\n console.error(record);\n continue;\n }\n\n if (!(record.name in oldValues))\n oldValues[record.name] = record. oldValue;\n\n if (record.type == 'update')\n continue;\n\n if ( record.type == 'add') {\n if (record.name in removed)\n delete r emoved[record.name];\n else\n added[record.name] = true;\n\n continue;\n }\n\n // type = 'delete'\n if (record.name in add ed) {\n delete added[record.name];\n delete oldValues[record.name] ;\n } else {\n removed[record.name] = true;\n }\n }\n\n f or (var prop in added)\n added[prop] = object[prop];\n\n for (var prop i n removed)\n removed[prop] = undefined;\n\n var changed = {};\n for ( var prop in oldValues) {\n if (prop in added || prop in removed)\n c ontinue;\n\n var newValue = object[prop];\n if (oldValues[prop] !== ne wValue)\n changed[prop] = newValue;\n }\n\n return {\n added: added,\n removed: removed,\n changed: changed\n };\n }\n\n functi on newSplice(index, removed, addedCount) {\n return {\n index: index,\n removed: removed,\n addedCount: addedCount\n };\n }\n\n var EDIT_ LEAVE = 0;\n var EDIT_UPDATE = 1;\n var EDIT_ADD = 2;\n var EDIT_DELETE = 3;\ n\n function ArraySplice() {}\n\n ArraySplice.prototype = {\n\n // Note: Th is function is *based* on the computation of the Levenshtein\n // \"edit\" di stance. The one change is that \"updates\" are treated as two\n // edits - no t one. With Array splices, an update is really a delete\n // followed by an a dd. By retaining this, we optimize for \"keeping\" the\n // maximum array ite ms in the original array. For example:\n //\n // 'xxxx123' -> '123yyyy'\ n //\n // With 1-edit updates, the shortest path would be just to update a ll seven\n // characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\n // leaves the substring '123' intact.\n calcEditDistances: funct ion(current, currentStart, currentEnd,\n old, old Start, oldEnd) {\n // \"Deletion\" columns\n var rowCount = oldEnd - o ldStart + 1;\n var columnCount = currentEnd - currentStart + 1;\n var distances = new Array(rowCount);\n\n // \"Addition\" rows. Initialize null column.\n for (var i = 0; i < rowCount; i++) {\n distances[i] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n // Initializ e null row\n for (var j = 0; j < columnCount; j++)\n distances[0][j] = j;\n\n for (var i = 1; i < rowCount; i++) {\n for (var j = 1; j < columnCount; j++) {\n if (this.equals(current[currentStart + j - 1], o ld[oldStart + i - 1]))\n distances[i][j] = distances[i - 1][j - 1];\n else {\n var north = distances[i - 1][j] + 1;\n var west = distances[i][j - 1] + 1;\n distances[i][j] = north < west ? north : west;\n }\n }\n }\n\n return distances;\n },\n\n // This starts at the final weight, and walks \"backward\" by finding \n // the minimum previous weight recursively until the origin of the weight\ n // matrix.\n spliceOperationsFromEditDistances: function(distances) {\n var i = distances.length - 1;\n var j = distances[0].length - 1;\n var current = distances[i][j];\n var edits = [];\n while (i > 0 || j > 0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n j--;\ n continue;\n }\n if (j == 0) {\n edits.push(EDI T_DELETE);\n i--;\n continue;\n }\n var northWes t = distances[i - 1][j - 1];\n var west = distances[i - 1][j];\n v ar north = distances[i][j - 1];\n\n var min;\n if (west < north)\n min = west < northWest ? west : northWest;\n else\n mi n = north < northWest ? north : northWest;\n\n if (min == northWest) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE);\n } else {\n edits.push(EDIT_UPDATE);\n current = north West;\n }\n i--;\n j--;\n } else if (min == we st) {\n edits.push(EDIT_DELETE);\n i--;\n current = w est;\n } else {\n edits.push(EDIT_ADD);\n j--;\n current = north;\n }\n }\n\n edits.reverse();\n return edits;\n },\n\n /**\n * Splice Projection functions:\n *\n * A splice map is a representation of how a previous array of items\n * was tra nsformed into a new array of items. Conceptually it is a list of\n * tuples of\n *\n * <index, removed, addedCount>\n *\n * which are kept in ascending index order of. The tuple represents that at\n * the |index|, |removed| sequence of items were removed, and counting forward\n * from |ind ex|, |addedCount| items were added.\n */\n\n /**\n * Lacking individu al splice mutation information, the minimal set of\n * splices can be synthe sized given the previous state and final state of an\n * array. The basic ap proach is to calculate the edit distance matrix and\n * choose the shortest path through it.\n *\n * Complexity: O(l * p)\n * l: The length of the current array\n * p: The length of the old array\n */\n calcSp lices: function(current, currentStart, currentEnd,\n ol d, oldStart, oldEnd) {\n var prefixCount = 0;\n var suffixCount = 0;\n \n var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\ n if (currentStart == 0 && oldStart == 0)\n prefixCount = this.share dPrefix(current, old, minLength);\n\n if (currentEnd == current.length && o ldEnd == old.length)\n suffixCount = this.sharedSuffix(current, old, minL ength - prefixCount);\n\n currentStart += prefixCount;\n oldStart += p refixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n retu rn [];\n\n if (currentStart == currentEnd) {\n var splice = newSplic e(currentStart, [], 0);\n while (oldStart < oldEnd)\n splice.rem oved.push(old[oldStart++]);\n\n return [ splice ];\n } else if (oldS tart == oldEnd)\n return [ newSplice(currentStart, [], currentEnd - curre ntStart) ];\n\n var ops = this.spliceOperationsFromEditDistances(\n this.calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd));\n\n var splice = undefined;\n v ar splices = [];\n var index = currentStart;\n var oldIndex = oldStart ;\n for (var i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n case EDIT_LEAVE:\n if (splice) {\n splices.push(spl ice);\n splice = undefined;\n }\n\n index++;\ n oldIndex++;\n break;\n case EDIT_UPDATE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n\n splice.removed.pus h(old[oldIndex]);\n oldIndex++;\n break;\n case E DIT_ADD:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n break ;\n case EDIT_DELETE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n }\n }\n\n if (splic e) {\n splices.push(splice);\n }\n return splices;\n },\n\n sharedPrefix: function(current, old, searchLength) {\n for (var i = 0; i < searchLength; i++)\n if (!this.equals(current[i], old[i]))\n return i;\n return searchLength;\n },\n\n sharedSuffix: function(curr ent, old, searchLength) {\n var index1 = current.length;\n var index2 = old.length;\n var count = 0;\n while (count < searchLength && this.e quals(current[--index1], old[--index2]))\n count++;\n\n return count ;\n },\n\n calculateSplices: function(current, previous) {\n return t his.calcSplices(current, 0, current.length, previous, 0,\n previous.length);\n },\n\n equals: function(currentValue, previous Value) {\n return currentValue === previousValue;\n }\n };\n\n var arr aySplice = new ArraySplice();\n\n function calcSplices(current, currentStart, c urrentEnd,\n old, oldStart, oldEnd) {\n return arraySpl ice.calcSplices(current, currentStart, currentEnd,\n old, oldStart, oldEnd);\n }\n\n function intersect(start1, end1, start2 , end2) {\n // Disjoint\n if (end1 < start2 || end2 < start1)\n retur n -1;\n\n // Adjacent\n if (end1 == start2 || end2 == start1)\n retur n 0;\n\n // Non-zero intersect, span1 first\n if (start1 < start2) {\n if (end1 < end2)\n return end1 - start2; // Overlap\n else\n return end2 - start2; // Contained\n } else {\n // Non-zero intersect, span2 first\n if (end2 < end1)\n return end2 - start1; // Overlap\n else\n return end1 - start1; // Contained\n }\n }\n\n function mergeSplice(splices, index, removed, addedCount) {\n\n var splice = newSplic e(index, removed, addedCount);\n\n var inserted = false;\n var insertionOf fset = 0;\n\n for (var i = 0; i < splices.length; i++) {\n var current = splices[i];\n current.index += insertionOffset;\n\n if (inserted)\n continue;\n\n var intersectCount = intersect(splice.index,\n splice.index + splice.removed.length,\n current.index,\n cur rent.index + current.addedCount);\n\n if (intersectCount >= 0) {\n / / Merge the two splices\n\n splices.splice(i, 1);\n i--;\n\n insertionOffset -= current.addedCount - current.removed.length;\n\n spl ice.addedCount += current.addedCount - intersectCount;\n var deleteCount = splice.removed.length +\n current.removed.length - in tersectCount;\n\n if (!splice.addedCount && !deleteCount) {\n // merged splice is a noop. discard.\n inserted = true;\n } else { \n var removed = current.removed;\n\n if (splice.index < curre nt.index) {\n // some prefix of splice.removed is prepended to curren t.removed.\n var prepend = splice.removed.slice(0, current.index - sp lice.index);\n Array.prototype.push.apply(prepend, removed);\n removed = prepend;\n }\n\n if (splice.index + splice.remo ved.length > current.index + current.addedCount) {\n // some suffix o f splice.removed is appended to current.removed.\n var append = splic e.removed.slice(current.index + current.addedCount - splice.index);\n Array.prototype.push.apply(removed, append);\n }\n\n splice.r emoved = removed;\n if (current.index < splice.index) {\n sp lice.index = current.index;\n }\n }\n } else if (splice.ind ex < current.index) {\n // Insert splice here.\n\n inserted = true ;\n\n splices.splice(i, 0, splice);\n i++;\n\n var offset = splice.addedCount - splice.removed.length\n current.index += offset;\n insertionOffset += offset;\n }\n }\n\n if (!inserted)\n sp lices.push(splice);\n }\n\n function createInitialSplices(array, changeRecords ) {\n var splices = [];\n\n for (var i = 0; i < changeRecords.length; i++) {\n var record = changeRecords[i];\n switch(record.type) {\n c ase 'splice':\n mergeSplice(splices, record.index, record.removed.slice (), record.addedCount);\n break;\n case 'add':\n case 'up date':\n case 'delete':\n if (!isIndex(record.name))\n continue;\n var index = toNumber(record.name);\n if (index < 0)\n continue;\n mergeSplice(splices, index, [record.oldVal ue], 1);\n break;\n default:\n console.error('Unexpecte d record type: ' + JSON.stringify(record));\n break;\n }\n }\n\ n return splices;\n }\n\n function projectArraySplices(array, changeRecords ) {\n var splices = [];\n\n createInitialSplices(array, changeRecords).for Each(function(splice) {\n if (splice.addedCount == 1 && splice.removed.leng th == 1) {\n if (splice.removed[0] !== array[splice.index])\n sp lices.push(splice);\n\n return\n };\n\n splices = splices.conca t(calcSplices(array, splice.index, splice.index + splice.addedCount,\n splice.removed, 0, splice.removed.length));\n });\n\n return splices;\n }\n\n global.Observer = Observer;\n global.Obs erver.runEOM_ = runEOM;\n global.Observer.observerSentinel_ = observerSentinel; // for testing.\n global.Observer.hasObjectObserve = hasObserve;\n global.Arr ayObserver = ArrayObserver;\n global.ArrayObserver.calculateSplices = function( current, previous) {\n return arraySplice.calculateSplices(current, previous) ;\n };\n\n global.ArraySplice = ArraySplice;\n global.ObjectObserver = Object Observer;\n global.PathObserver = PathObserver;\n global.CompoundObserver = Co mpoundObserver;\n global.Path = Path;\n global.ObserverTransform = ObserverTra nsform;\n})(typeof global !== 'undefined' && global && typeof module !== 'undefi ned' && module ? global : this || window);\n",
88 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\nwindow.ShadowDOMPolyfill = {};\n\n(function(scope) {\n 'use stri ct';\n\n var constructorTable = new WeakMap();\n var nativePrototypeTable = ne w WeakMap();\n var wrappers = Object.create(null);\n\n function detectEval() { \n // Don't test for eval if we're running in a Chrome App environment.\n // We check for APIs set that only exist in a Chrome App context.\n if (typeo f chrome !== 'undefined' && chrome.app && chrome.app.runtime) {\n return fa lse;\n }\n\n // Firefox OS Apps do not allow eval. This feature detection is very hacky\n // but even if some other platform adds support for this func tion this code\n // will continue to work.\n if (navigator.getDeviceStorag e) {\n return false;\n }\n\n try {\n var f = new Function('retur n true;');\n return f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasEval = detectEval();\n\n function assert(b) {\n if (!b)\n throw new Error('Assertion failed');\n };\n\n var defineProperty = Object.de fineProperty;\n var getOwnPropertyNames = Object.getOwnPropertyNames;\n var ge tOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n function mixin(to , from) {\n var names = getOwnPropertyNames(from);\n for (var i = 0; i < n ames.length; i++) {\n var name = names[i];\n defineProperty(to, name, getOwnPropertyDescriptor(from, name));\n }\n return to;\n };\n\n functio n mixinStatics(to, from) {\n var names = getOwnPropertyNames(from);\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n switch ( name) {\n case 'arguments':\n case 'caller':\n case 'length ':\n case 'name':\n case 'prototype':\n case 'toString':\n continue;\n }\n defineProperty(to, name, getOwnPropertyDescri ptor(from, name));\n }\n return to;\n };\n\n function oneOf(object, prop ertyNames) {\n for (var i = 0; i < propertyNames.length; i++) {\n if (pr opertyNames[i] in object)\n return propertyNames[i];\n }\n }\n\n var nonEnumerableDataDescriptor = {\n value: undefined,\n configurable: true, \n enumerable: false,\n writable: true\n };\n\n function defineNonEnumer ableDataProperty(object, name, value) {\n nonEnumerableDataDescriptor.value = value;\n defineProperty(object, name, nonEnumerableDataDescriptor);\n }\n\n // Mozilla's old DOM bindings are bretty busted:\n // https://bugzilla.mozill a.org/show_bug.cgi?id=855844\n // Make sure they are create before we start mod ifying things.\n getOwnPropertyNames(window);\n\n function getWrapperConstruct or(node) {\n var nativePrototype = node.__proto__ || Object.getPrototypeOf(no de);\n var wrapperConstructor = constructorTable.get(nativePrototype);\n i f (wrapperConstructor)\n return wrapperConstructor;\n\n var parentWrappe rConstructor = getWrapperConstructor(nativePrototype);\n\n var GeneratedWrapp er = createWrapperConstructor(parentWrapperConstructor);\n registerInternal(n ativePrototype, GeneratedWrapper, node);\n\n return GeneratedWrapper;\n }\n\ n function addForwardingProperties(nativePrototype, wrapperPrototype) {\n in stallProperty(nativePrototype, wrapperPrototype, true);\n }\n\n function regis terInstanceProperties(wrapperPrototype, instanceObject) {\n installProperty(i nstanceObject, wrapperPrototype, false);\n }\n\n var isFirefox = /Firefox/.tes t(navigator.userAgent);\n\n // This is used as a fallback when getting the desc riptor fails in\n // installProperty.\n var dummyDescriptor = {\n get: func tion() {},\n set: function(v) {},\n configurable: true,\n enumerable: t rue\n };\n\n function isEventHandlerName(name) {\n return /^on[a-z]+$/.test (name);\n }\n\n function isIdentifierName(name) {\n return /^\\w[a-zA-Z_0-9 ]*$/.test(name);\n }\n\n // The name of the implementation property is intenti onally hard to\n // remember. Unfortunately, browsers are slower doing obj[expr ] than\n // obj.foo so we resort to repeat this ugly name. This ugly name is ne ver\n // used outside of this file though.\n\n function getGetter(name) {\n return hasEval && isIdentifierName(name) ?\n new Function('return this._ _impl4cf1e782hg__.' + name) :\n function() { return this.__impl4cf1e782hg __[name]; };\n }\n\n function getSetter(name) {\n return hasEval && isIdent ifierName(name) ?\n new Function('v', 'this.__impl4cf1e782hg__.' + name + ' = v') :\n function(v) { this.__impl4cf1e782hg__[name] = v; };\n }\n\n function getMethod(name) {\n return hasEval && isIdentifierName(name) ?\n new Function('return this.__impl4cf1e782hg__.' + name +\n '.apply(this.__impl4cf1e782hg__, arguments)') :\n function() {\n return this.__impl4cf1e782hg__[name].apply(\n this.__impl4cf1e 782hg__, arguments);\n };\n }\n\n function getDescriptor(source, name) {\n try {\n return Object.getOwnPropertyDescriptor(source, name);\n } catch (ex) {\n // JSC and V8 both use data properties instead of accessors which can\n // cause getting the property desciptor to throw an exception. \n // https://bugs.webkit.org/show_bug.cgi?id=49739\n return dummyDesc riptor;\n }\n }\n\n // Safari 8 exposes WebIDL attributes as an invalid acc essor property. Its\n // descriptor has {get: undefined, set: undefined}. We th erefore ignore the\n // shape of the descriptor and make all properties read-wr ite.\n // https://bugs.webkit.org/show_bug.cgi?id=49739\n var isBrokenSafari = function() {\n var descr = Object.getOwnPropertyDescriptor(Node.prototype, ' nodeType');\n return !!descr && 'set' in descr;\n }();\n\n function install Property(source, target, allowMethod, opt_blacklist) {\n var names = getOwnPr opertyNames(source);\n for (var i = 0; i < names.length; i++) {\n var na me = names[i];\n if (name === 'polymerBlackList_')\n continue;\n\n if (name in target)\n continue;\n\n if (source.polymerBlackList_ && source.polymerBlackList_[name])\n continue;\n\n if (isFirefox) { \n // Tickle Firefox's old bindings.\n source.__lookupGetter__(nam e);\n }\n var descriptor = getDescriptor(source, name);\n var get ter, setter;\n if (allowMethod && typeof descriptor.value === 'function') { \n target[name] = getMethod(name);\n continue;\n }\n\n v ar isEvent = isEventHandlerName(name);\n if (isEvent)\n getter = sco pe.getEventHandlerGetter(name);\n else\n getter = getGetter(name);\n \n if (descriptor.writable || descriptor.set || isBrokenSafari) {\n if (isEvent)\n setter = scope.getEventHandlerSetter(name);\n els e\n setter = getSetter(name);\n }\n\n defineProperty(target, name, {\n get: getter,\n set: setter,\n configurable: descr iptor.configurable,\n enumerable: descriptor.enumerable\n });\n } \n }\n\n /**\n * @param {Function} nativeConstructor\n * @param {Function} wrapperConstructor\n * @param {Object=} opt_instance If present, this is used to extract\n * properties from an instance object.\n */\n function reg ister(nativeConstructor, wrapperConstructor, opt_instance) {\n var nativeProt otype = nativeConstructor.prototype;\n registerInternal(nativePrototype, wrap perConstructor, opt_instance);\n mixinStatics(wrapperConstructor, nativeConst ructor);\n }\n\n function registerInternal(nativePrototype, wrapperConstructor , opt_instance) {\n var wrapperPrototype = wrapperConstructor.prototype;\n assert(constructorTable.get(nativePrototype) === undefined);\n\n constructor Table.set(nativePrototype, wrapperConstructor);\n nativePrototypeTable.set(wr apperPrototype, nativePrototype);\n\n addForwardingProperties(nativePrototype , wrapperPrototype);\n if (opt_instance)\n registerInstanceProperties(wr apperPrototype, opt_instance);\n\n defineNonEnumerableDataProperty(\n wrapperPrototype, 'constructor', wrapperConstructor);\n // Set it again. Some VMs optimizes objects that are used as prototypes.\n wrapperConstructor.prot otype = wrapperPrototype;\n }\n\n function isWrapperFor(wrapperConstructor, na tiveConstructor) {\n return constructorTable.get(nativeConstructor.prototype) ===\n wrapperConstructor;\n }\n\n /**\n * Creates a generic wrapper constructor based on |object| and its\n * constructor.\n * @param {Node} obj ect\n * @return {Function} The generated constructor.\n */\n function regis terObject(object) {\n var nativePrototype = Object.getPrototypeOf(object);\n\ n var superWrapperConstructor = getWrapperConstructor(nativePrototype);\n var GeneratedWrapper = createWrapperConstructor(superWrapperConstructor);\n r egisterInternal(nativePrototype, GeneratedWrapper, object);\n\n return Genera tedWrapper;\n }\n\n function createWrapperConstructor(superWrapperConstructor) {\n function GeneratedWrapper(node) {\n superWrapperConstructor.call(th is, node);\n }\n var p = Object.create(superWrapperConstructor.prototype); \n p.constructor = GeneratedWrapper;\n GeneratedWrapper.prototype = p;\n\n return GeneratedWrapper;\n }\n\n function isWrapper(object) {\n return object && object.__impl4cf1e782hg__;\n }\n\n function isNative(object) {\n return !isWrapper(object);\n }\n\n /**\n * Wraps a node in a WrapperNode. If there already exists a wrapper for the\n * |node| that wrapper is returned in stead.\n * @param {Node} node\n * @return {WrapperNode}\n */\n function w rap(impl) {\n if (impl === null)\n return null;\n\n assert(isNative(i mpl));\n return impl.__wrapper8e3dd93a60__ ||\n (impl.__wrapper8e3dd93 a60__ = new (getWrapperConstructor(impl))(impl));\n }\n\n /**\n * Unwraps a wrapper and returns the node it is wrapping.\n * @param {WrapperNode} wrapper\ n * @return {Node}\n */\n function unwrap(wrapper) {\n if (wrapper === n ull)\n return null;\n assert(isWrapper(wrapper));\n return wrapper.__ impl4cf1e782hg__;\n }\n\n function unsafeUnwrap(wrapper) {\n return wrapper .__impl4cf1e782hg__;\n }\n\n function setWrapper(impl, wrapper) {\n wrapper .__impl4cf1e782hg__ = impl;\n impl.__wrapper8e3dd93a60__ = wrapper;\n }\n\n /**\n * Unwraps object if it is a wrapper.\n * @param {Object} object\n * @return {Object} The native implementation object.\n */\n function unwrapIfN eeded(object) {\n return object && isWrapper(object) ? unwrap(object) : objec t;\n }\n\n /**\n * Wraps object if it is not a wrapper.\n * @param {Object } object\n * @return {Object} The wrapper for object.\n */\n function wrapI fNeeded(object) {\n return object && !isWrapper(object) ? wrap(object) : obje ct;\n }\n\n /**\n * Overrides the current wrapper (if any) for node.\n * @ param {Node} node\n * @param {WrapperNode=} wrapper If left out the wrapper wi ll be created as\n * needed next time someone wraps the node.\n */\n fu nction rewrap(node, wrapper) {\n if (wrapper === null)\n return;\n as sert(isNative(node));\n assert(wrapper === undefined || isWrapper(wrapper));\ n node.__wrapper8e3dd93a60__ = wrapper;\n }\n\n var getterDescriptor = {\n get: undefined,\n configurable: true,\n enumerable: true\n };\n\n fun ction defineGetter(constructor, name, getter) {\n getterDescriptor.get = gett er;\n defineProperty(constructor.prototype, name, getterDescriptor);\n }\n\n function defineWrapGetter(constructor, name) {\n defineGetter(constructor, name, function() {\n return wrap(this.__impl4cf1e782hg__[name]);\n });\n }\n\n /**\n * Forwards existing methods on the native object to the wrapper methods.\n * This does not wrap any of the arguments or the return value sinc e the\n * wrapper implementation already takes care of that.\n * @param {Arr ay.<Function>} constructors\n * @parem {Array.<string>} names\n */\n functi on forwardMethodsToWrapper(constructors, names) {\n constructors.forEach(func tion(constructor) {\n names.forEach(function(name) {\n constructor.p rototype[name] = function() {\n var w = wrapIfNeeded(this);\n return w[name].apply(w, arguments);\n };\n });\n });\n }\n\n sc ope.assert = assert;\n scope.constructorTable = constructorTable;\n scope.defi neGetter = defineGetter;\n scope.defineWrapGetter = defineWrapGetter;\n scope. forwardMethodsToWrapper = forwardMethodsToWrapper;\n scope.isWrapper = isWrappe r;\n scope.isWrapperFor = isWrapperFor;\n scope.mixin = mixin;\n scope.native PrototypeTable = nativePrototypeTable;\n scope.oneOf = oneOf;\n scope.register Object = registerObject;\n scope.registerWrapper = register;\n scope.rewrap = rewrap;\n scope.setWrapper = setWrapper;\n scope.unsafeUnwrap = unsafeUnwrap;\ n scope.unwrap = unwrap;\n scope.unwrapIfNeeded = unwrapIfNeeded;\n scope.wra p = wrap;\n scope.wrapIfNeeded = wrapIfNeeded;\n scope.wrappers = wrappers;\n\ n})(window.ShadowDOMPolyfill);\n", 88 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\nwindow.ShadowDOMPolyfill = {};\n\n(function(scope) {\n 'use stri ct';\n\n var constructorTable = new WeakMap();\n var nativePrototypeTable = ne w WeakMap();\n var wrappers = Object.create(null);\n\n function detectEval() { \n // Don't test for eval if we're running in a Chrome App environment.\n // We check for APIs set that only exist in a Chrome App context.\n if (typeo f chrome !== 'undefined' && chrome.app && chrome.app.runtime) {\n return fa lse;\n }\n\n // Firefox OS Apps do not allow eval. This feature detection is very hacky\n // but even if some other platform adds support for this func tion this code\n // will continue to work.\n if (navigator.getDeviceStorag e) {\n return false;\n }\n\n try {\n var f = new Function('retur n true;');\n return f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasEval = detectEval();\n\n function assert(b) {\n if (!b)\n throw new Error('Assertion failed');\n };\n\n var defineProperty = Object.de fineProperty;\n var getOwnPropertyNames = Object.getOwnPropertyNames;\n var ge tOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n function mixin(to , from) {\n var names = getOwnPropertyNames(from);\n for (var i = 0; i < n ames.length; i++) {\n var name = names[i];\n defineProperty(to, name, getOwnPropertyDescriptor(from, name));\n }\n return to;\n };\n\n functio n mixinStatics(to, from) {\n var names = getOwnPropertyNames(from);\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n switch ( name) {\n case 'arguments':\n case 'caller':\n case 'length ':\n case 'name':\n case 'prototype':\n case 'toString':\n continue;\n }\n defineProperty(to, name, getOwnPropertyDescri ptor(from, name));\n }\n return to;\n };\n\n function oneOf(object, prop ertyNames) {\n for (var i = 0; i < propertyNames.length; i++) {\n if (pr opertyNames[i] in object)\n return propertyNames[i];\n }\n }\n\n var nonEnumerableDataDescriptor = {\n value: undefined,\n configurable: true, \n enumerable: false,\n writable: true\n };\n\n function defineNonEnumer ableDataProperty(object, name, value) {\n nonEnumerableDataDescriptor.value = value;\n defineProperty(object, name, nonEnumerableDataDescriptor);\n }\n\n // Mozilla's old DOM bindings are bretty busted:\n // https://bugzilla.mozill a.org/show_bug.cgi?id=855844\n // Make sure they are create before we start mod ifying things.\n getOwnPropertyNames(window);\n\n function getWrapperConstruct or(node) {\n var nativePrototype = node.__proto__ || Object.getPrototypeOf(no de);\n var wrapperConstructor = constructorTable.get(nativePrototype);\n i f (wrapperConstructor)\n return wrapperConstructor;\n\n var parentWrappe rConstructor = getWrapperConstructor(nativePrototype);\n\n var GeneratedWrapp er = createWrapperConstructor(parentWrapperConstructor);\n registerInternal(n ativePrototype, GeneratedWrapper, node);\n\n return GeneratedWrapper;\n }\n\ n function addForwardingProperties(nativePrototype, wrapperPrototype) {\n in stallProperty(nativePrototype, wrapperPrototype, true);\n }\n\n function regis terInstanceProperties(wrapperPrototype, instanceObject) {\n installProperty(i nstanceObject, wrapperPrototype, false);\n }\n\n var isFirefox = /Firefox/.tes t(navigator.userAgent);\n\n // This is used as a fallback when getting the desc riptor fails in\n // installProperty.\n var dummyDescriptor = {\n get: func tion() {},\n set: function(v) {},\n configurable: true,\n enumerable: t rue\n };\n\n function isEventHandlerName(name) {\n return /^on[a-z]+$/.test (name);\n }\n\n function isIdentifierName(name) {\n return /^\\w[a-zA-Z_0-9 ]*$/.test(name);\n }\n\n // The name of the implementation property is intenti onally hard to\n // remember. Unfortunately, browsers are slower doing obj[expr ] than\n // obj.foo so we resort to repeat this ugly name. This ugly name is ne ver\n // used outside of this file though.\n\n function getGetter(name) {\n return hasEval && isIdentifierName(name) ?\n new Function('return this._ _impl4cf1e782hg__.' + name) :\n function() { return this.__impl4cf1e782hg __[name]; };\n }\n\n function getSetter(name) {\n return hasEval && isIdent ifierName(name) ?\n new Function('v', 'this.__impl4cf1e782hg__.' + name + ' = v') :\n function(v) { this.__impl4cf1e782hg__[name] = v; };\n }\n\n function getMethod(name) {\n return hasEval && isIdentifierName(name) ?\n new Function('return this.__impl4cf1e782hg__.' + name +\n '.apply(this.__impl4cf1e782hg__, arguments)') :\n function() {\n return this.__impl4cf1e782hg__[name].apply(\n this.__impl4cf1e 782hg__, arguments);\n };\n }\n\n function getDescriptor(source, name) {\n try {\n return Object.getOwnPropertyDescriptor(source, name);\n } catch (ex) {\n // JSC and V8 both use data properties instead of accessors which can\n // cause getting the property desciptor to throw an exception. \n // https://bugs.webkit.org/show_bug.cgi?id=49739\n return dummyDesc riptor;\n }\n }\n\n // Safari 8 exposes WebIDL attributes as an invalid acc essor property. Its\n // descriptor has {get: undefined, set: undefined}. We th erefore ignore the\n // shape of the descriptor and make all properties read-wr ite.\n // https://bugs.webkit.org/show_bug.cgi?id=49739\n var isBrokenSafari = function() {\n var descr = Object.getOwnPropertyDescriptor(Node.prototype, ' nodeType');\n return !!descr && 'set' in descr;\n }();\n\n function install Property(source, target, allowMethod, opt_blacklist) {\n var names = getOwnPr opertyNames(source);\n for (var i = 0; i < names.length; i++) {\n var na me = names[i];\n if (name === 'polymerBlackList_')\n continue;\n\n if (name in target)\n continue;\n\n if (source.polymerBlackList_ && source.polymerBlackList_[name])\n continue;\n\n if (isFirefox) { \n // Tickle Firefox's old bindings.\n source.__lookupGetter__(nam e);\n }\n var descriptor = getDescriptor(source, name);\n var get ter, setter;\n if (allowMethod && typeof descriptor.value === 'function') { \n target[name] = getMethod(name);\n continue;\n }\n\n v ar isEvent = isEventHandlerName(name);\n if (isEvent)\n getter = sco pe.getEventHandlerGetter(name);\n else\n getter = getGetter(name);\n \n if (descriptor.writable || descriptor.set || isBrokenSafari) {\n if (isEvent)\n setter = scope.getEventHandlerSetter(name);\n els e\n setter = getSetter(name);\n }\n\n defineProperty(target, name, {\n get: getter,\n set: setter,\n configurable: descr iptor.configurable,\n enumerable: descriptor.enumerable\n });\n } \n }\n\n /**\n * @param {Function} nativeConstructor\n * @param {Function} wrapperConstructor\n * @param {Object=} opt_instance If present, this is used to extract\n * properties from an instance object.\n */\n function reg ister(nativeConstructor, wrapperConstructor, opt_instance) {\n var nativeProt otype = nativeConstructor.prototype;\n registerInternal(nativePrototype, wrap perConstructor, opt_instance);\n mixinStatics(wrapperConstructor, nativeConst ructor);\n }\n\n function registerInternal(nativePrototype, wrapperConstructor , opt_instance) {\n var wrapperPrototype = wrapperConstructor.prototype;\n assert(constructorTable.get(nativePrototype) === undefined);\n\n constructor Table.set(nativePrototype, wrapperConstructor);\n nativePrototypeTable.set(wr apperPrototype, nativePrototype);\n\n addForwardingProperties(nativePrototype , wrapperPrototype);\n if (opt_instance)\n registerInstanceProperties(wr apperPrototype, opt_instance);\n\n defineNonEnumerableDataProperty(\n wrapperPrototype, 'constructor', wrapperConstructor);\n // Set it again. Some VMs optimizes objects that are used as prototypes.\n wrapperConstructor.prot otype = wrapperPrototype;\n }\n\n function isWrapperFor(wrapperConstructor, na tiveConstructor) {\n return constructorTable.get(nativeConstructor.prototype) ===\n wrapperConstructor;\n }\n\n /**\n * Creates a generic wrapper constructor based on |object| and its\n * constructor.\n * @param {Node} obj ect\n * @return {Function} The generated constructor.\n */\n function regis terObject(object) {\n var nativePrototype = Object.getPrototypeOf(object);\n\ n var superWrapperConstructor = getWrapperConstructor(nativePrototype);\n var GeneratedWrapper = createWrapperConstructor(superWrapperConstructor);\n r egisterInternal(nativePrototype, GeneratedWrapper, object);\n\n return Genera tedWrapper;\n }\n\n function createWrapperConstructor(superWrapperConstructor) {\n function GeneratedWrapper(node) {\n superWrapperConstructor.call(th is, node);\n }\n var p = Object.create(superWrapperConstructor.prototype); \n p.constructor = GeneratedWrapper;\n GeneratedWrapper.prototype = p;\n\n return GeneratedWrapper;\n }\n\n function isWrapper(object) {\n return object && object.__impl4cf1e782hg__;\n }\n\n function isNative(object) {\n return !isWrapper(object);\n }\n\n /**\n * Wraps a node in a WrapperNode. If there already exists a wrapper for the\n * |node| that wrapper is returned in stead.\n * @param {Node} node\n * @return {WrapperNode}\n */\n function w rap(impl) {\n if (impl === null)\n return null;\n\n assert(isNative(i mpl));\n return impl.__wrapper8e3dd93a60__ ||\n (impl.__wrapper8e3dd93 a60__ = new (getWrapperConstructor(impl))(impl));\n }\n\n /**\n * Unwraps a wrapper and returns the node it is wrapping.\n * @param {WrapperNode} wrapper\ n * @return {Node}\n */\n function unwrap(wrapper) {\n if (wrapper === n ull)\n return null;\n assert(isWrapper(wrapper));\n return wrapper.__ impl4cf1e782hg__;\n }\n\n function unsafeUnwrap(wrapper) {\n return wrapper .__impl4cf1e782hg__;\n }\n\n function setWrapper(impl, wrapper) {\n wrapper .__impl4cf1e782hg__ = impl;\n impl.__wrapper8e3dd93a60__ = wrapper;\n }\n\n /**\n * Unwraps object if it is a wrapper.\n * @param {Object} object\n * @return {Object} The native implementation object.\n */\n function unwrapIfN eeded(object) {\n return object && isWrapper(object) ? unwrap(object) : objec t;\n }\n\n /**\n * Wraps object if it is not a wrapper.\n * @param {Object } object\n * @return {Object} The wrapper for object.\n */\n function wrapI fNeeded(object) {\n return object && !isWrapper(object) ? wrap(object) : obje ct;\n }\n\n /**\n * Overrides the current wrapper (if any) for node.\n * @ param {Node} node\n * @param {WrapperNode=} wrapper If left out the wrapper wi ll be created as\n * needed next time someone wraps the node.\n */\n fu nction rewrap(node, wrapper) {\n if (wrapper === null)\n return;\n as sert(isNative(node));\n assert(wrapper === undefined || isWrapper(wrapper));\ n node.__wrapper8e3dd93a60__ = wrapper;\n }\n\n var getterDescriptor = {\n get: undefined,\n configurable: true,\n enumerable: true\n };\n\n fun ction defineGetter(constructor, name, getter) {\n getterDescriptor.get = gett er;\n defineProperty(constructor.prototype, name, getterDescriptor);\n }\n\n function defineWrapGetter(constructor, name) {\n defineGetter(constructor, name, function() {\n return wrap(this.__impl4cf1e782hg__[name]);\n });\n }\n\n /**\n * Forwards existing methods on the native object to the wrapper methods.\n * This does not wrap any of the arguments or the return value sinc e the\n * wrapper implementation already takes care of that.\n * @param {Arr ay.<Function>} constructors\n * @parem {Array.<string>} names\n */\n functi on forwardMethodsToWrapper(constructors, names) {\n constructors.forEach(func tion(constructor) {\n names.forEach(function(name) {\n constructor.p rototype[name] = function() {\n var w = wrapIfNeeded(this);\n return w[name].apply(w, arguments);\n };\n });\n });\n }\n\n sc ope.assert = assert;\n scope.constructorTable = constructorTable;\n scope.defi neGetter = defineGetter;\n scope.defineWrapGetter = defineWrapGetter;\n scope. forwardMethodsToWrapper = forwardMethodsToWrapper;\n scope.isWrapper = isWrappe r;\n scope.isWrapperFor = isWrapperFor;\n scope.mixin = mixin;\n scope.native PrototypeTable = nativePrototypeTable;\n scope.oneOf = oneOf;\n scope.register Object = registerObject;\n scope.registerWrapper = register;\n scope.rewrap = rewrap;\n scope.setWrapper = setWrapper;\n scope.unsafeUnwrap = unsafeUnwrap;\ n scope.unwrap = unwrap;\n scope.unwrapIfNeeded = unwrapIfNeeded;\n scope.wra p = wrap;\n scope.wrapIfNeeded = wrapIfNeeded;\n scope.wrappers = wrappers;\n\ n})(window.ShadowDOMPolyfill);\n",
89 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(context) {\n 'use strict';\n\n var OriginalM utationObserver = window.MutationObserver;\n var callbacks = [];\n var pending = false;\n var timerFunc;\n\n function handle() {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks = [];\n for (var i = 0; i < c opies.length; i++) {\n (0, copies[i])();\n }\n }\n\n if (OriginalMutat ionObserver) {\n var counter = 1;\n var observer = new OriginalMutationObs erver(handle);\n var textNode = document.createTextNode(counter);\n observ er.observe(textNode, {characterData: true});\n\n timerFunc = function() {\n counter = (counter + 1) % 2;\n textNode.data = counter;\n };\n\n } else {\n timerFunc = window.setImmediate || window.setTimeout;\n }\n\n func tion setEndOfMicrotask(func) {\n callbacks.push(func);\n if (pending)\n return;\n pending = true;\n timerFunc(handle, 0);\n }\n\n context.set EndOfMicrotask = setEndOfMicrotask;\n\n})(window.ShadowDOMPolyfill);\n", 89 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(context) {\n 'use strict';\n\n var OriginalM utationObserver = window.MutationObserver;\n var callbacks = [];\n var pending = false;\n var timerFunc;\n\n function handle() {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks = [];\n for (var i = 0; i < c opies.length; i++) {\n (0, copies[i])();\n }\n }\n\n if (OriginalMutat ionObserver) {\n var counter = 1;\n var observer = new OriginalMutationObs erver(handle);\n var textNode = document.createTextNode(counter);\n observ er.observe(textNode, {characterData: true});\n\n timerFunc = function() {\n counter = (counter + 1) % 2;\n textNode.data = counter;\n };\n\n } else {\n timerFunc = window.setImmediate || window.setTimeout;\n }\n\n func tion setEndOfMicrotask(func) {\n callbacks.push(func);\n if (pending)\n return;\n pending = true;\n timerFunc(handle, 0);\n }\n\n context.set EndOfMicrotask = setEndOfMicrotask;\n\n})(window.ShadowDOMPolyfill);\n",
90 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var setEndOfMic rotask = scope.setEndOfMicrotask\n var wrapIfNeeded = scope.wrapIfNeeded\n var wrappers = scope.wrappers;\n\n var registrationsTable = new WeakMap();\n var globalMutationObservers = [];\n var isScheduled = false;\n\n function schedule Callback(observer) {\n if (observer.scheduled_)\n return;\n\n observe r.scheduled_ = true;\n globalMutationObservers.push(observer);\n\n if (isS cheduled)\n return;\n setEndOfMicrotask(notifyObservers);\n isSchedul ed = true;\n }\n\n // http://dom.spec.whatwg.org/#mutation-observers\n functi on notifyObservers() {\n isScheduled = false;\n\n while (globalMutationObs ervers.length) {\n var notifyList = globalMutationObservers;\n globalM utationObservers = [];\n\n // Deliver changes in birth order of the Mutatio nObservers.\n notifyList.sort(function(x, y) { return x.uid_ - y.uid_; });\ n\n for (var i = 0; i < notifyList.length; i++) {\n var mo = notifyL ist[i];\n mo.scheduled_ = false;\n var queue = mo.takeRecords();\n removeTransientObserversFor(mo);\n if (queue.length) {\n mo.callback_(queue, mo);\n }\n }\n }\n }\n\n\n /**\n * @para m {string} type\n * @param {Node} target\n * @constructor\n */\n function MutationRecord(type, target) {\n this.type = type;\n this.target = target ;\n this.addedNodes = new wrappers.NodeList();\n this.removedNodes = new w rappers.NodeList();\n this.previousSibling = null;\n this.nextSibling = nu ll;\n this.attributeName = null;\n this.attributeNamespace = null;\n th is.oldValue = null;\n }\n\n /**\n * Registers transient observers to ancesto r and its ancesors for the node\n * which was removed.\n * @param {!Node} an cestor\n * @param {!Node} node\n */\n function registerTransientObservers(a ncestor, node) {\n for (; ancestor; ancestor = ancestor.parentNode) {\n var registrations = registrationsTable.get(ancestor);\n if (!registrations) \n continue;\n for (var i = 0; i < registrations.length; i++) {\n var registration = registrations[i];\n if (registration.options.subt ree)\n registration.addTransientObserver(node);\n }\n }\n }\n\ n function removeTransientObserversFor(observer) {\n for (var i = 0; i < obs erver.nodes_.length; i++) {\n var node = observer.nodes_[i];\n var reg istrations = registrationsTable.get(node);\n if (!registrations)\n r eturn;\n for (var j = 0; j < registrations.length; j++) {\n var regi stration = registrations[j];\n if (registration.observer === observer)\n registration.removeTransientObservers();\n }\n }\n }\n\n // h ttp://dom.spec.whatwg.org/#queue-a-mutation-record\n function enqueueMutation(t arget, type, data) {\n // 1.\n var interestedObservers = Object.create(nul l);\n var associatedStrings = Object.create(null);\n\n // 2.\n for (var node = target; node; node = node.parentNode) {\n // 3.\n var registra tions = registrationsTable.get(node);\n if (!registrations)\n contin ue;\n for (var j = 0; j < registrations.length; j++) {\n var registr ation = registrations[j];\n var options = registration.options;\n // 1.\n if (node !== target && !options.subtree)\n continue;\n\n // 2.\n if (type === 'attributes' && !options.attributes)\n continue;\n\n // 3. If type is \"attributes\", options's attributeFil ter is present, and\n // either options's attributeFilter does not contai n name or namespace\n // is non-null, continue.\n if (type === 'at tributes' && options.attributeFilter &&\n (data.namespace !== null || \n options.attributeFilter.indexOf(data.name) === -1)) {\n continue;\n }\n\n // 4.\n if (type === 'characterData' && ! options.characterData)\n continue;\n\n // 5.\n if (type = == 'childList' && !options.childList)\n continue;\n\n // 6.\n var observer = registration.observer;\n interestedObservers[observer .uid_] = observer;\n\n // 7. If either type is \"attributes\" and options 's attributeOldValue is\n // true, or type is \"characterData\" and optio ns's characterDataOldValue\n // is true, set the paired string of registe red observer's observer in\n // interested observers to oldValue.\n if (type === 'attributes' && options.attributeOldValue ||\n type == = 'characterData' && options.characterDataOldValue) {\n associatedStrin gs[observer.uid_] = data.oldValue;\n }\n }\n }\n\n // 4.\n for (var uid in interestedObservers) {\n var observer = interestedObservers [uid];\n var record = new MutationRecord(type, target);\n\n // 2.\n if ('name' in data && 'namespace' in data) {\n record.attributeName = data.name;\n record.attributeNamespace = data.namespace;\n }\n\n // 3.\n if (data.addedNodes)\n record.addedNodes = data.addedNodes ;\n\n // 4.\n if (data.removedNodes)\n record.removedNodes = da ta.removedNodes;\n\n // 5.\n if (data.previousSibling)\n record .previousSibling = data.previousSibling;\n\n // 6.\n if (data.nextSibl ing)\n record.nextSibling = data.nextSibling;\n\n // 7.\n if (a ssociatedStrings[uid] !== undefined)\n record.oldValue = associatedString s[uid];\n\n // 8.\n scheduleCallback(observer);\n observer.record s_.push(record);\n }\n }\n\n var slice = Array.prototype.slice;\n\n /**\n * @param {!Object} options\n * @constructor\n */\n function MutationObser verOptions(options) {\n this.childList = !!options.childList;\n this.subtr ee = !!options.subtree;\n\n // 1. If either options' attributeOldValue or att ributeFilter is present\n // and options' attributes is omitted, set options' attributes to true.\n if (!('attributes' in options) &&\n ('attribute OldValue' in options || 'attributeFilter' in options)) {\n this.attributes = true;\n } else {\n this.attributes = !!options.attributes;\n }\n\n // 2. If options' characterDataOldValue is present and options'\n // chara cterData is omitted, set options' characterData to true.\n if ('characterData OldValue' in options && !('characterData' in options))\n this.characterData = true;\n else\n this.characterData = !!options.characterData;\n\n / / 3. & 4.\n if (!this.attributes &&\n (options.attributeOldValue || 'a ttributeFilter' in options) ||\n // 5.\n !this.characterData && op tions.characterDataOldValue) {\n throw new TypeError();\n }\n\n this. characterData = !!options.characterData;\n this.attributeOldValue = !!options .attributeOldValue;\n this.characterDataOldValue = !!options.characterDataOld Value;\n if ('attributeFilter' in options) {\n if (options.attributeFilt er == null ||\n typeof options.attributeFilter !== 'object') {\n throw new TypeError();\n }\n this.attributeFilter = slice.call(option s.attributeFilter);\n } else {\n this.attributeFilter = null;\n }\n }\n\n var uidCounter = 0;\n\n /**\n * The class that maps to the DOM Mutatio nObserver interface.\n * @param {Function} callback.\n * @constructor\n */ \n function MutationObserver(callback) {\n this.callback_ = callback;\n t his.nodes_ = [];\n this.records_ = [];\n this.uid_ = ++uidCounter;\n th is.scheduled_ = false;\n }\n\n MutationObserver.prototype = {\n constructor : MutationObserver,\n\n // http://dom.spec.whatwg.org/#dom-mutationobserver-o bserve\n observe: function(target, options) {\n target = wrapIfNeeded(ta rget);\n\n var newOptions = new MutationObserverOptions(options);\n\n // 6.\n var registration;\n var registrations = registrationsTable.get (target);\n if (!registrations)\n registrationsTable.set(target, reg istrations = []);\n\n for (var i = 0; i < registrations.length; i++) {\n if (registrations[i].observer === this) {\n registration = registr ations[i];\n // 6.1.\n registration.removeTransientObservers() ;\n // 6.2.\n registration.options = newOptions;\n }\n }\n\n // 7.\n if (!registration) {\n registration = new Re gistration(this, target, newOptions);\n registrations.push(registration); \n this.nodes_.push(target);\n }\n },\n\n // http://dom.spec.w hatwg.org/#dom-mutationobserver-disconnect\n disconnect: function() {\n this.nodes_.forEach(function(node) {\n var registrations = registrationsT able.get(node);\n for (var i = 0; i < registrations.length; i++) {\n var registration = registrations[i];\n if (registration.observer = == this) {\n registrations.splice(i, 1);\n // Each node ca n only have one registered observer associated with\n // this observe r.\n break;\n }\n }\n }, this);\n this.reco rds_ = [];\n },\n\n takeRecords: function() {\n var copyOfRecords = t his.records_;\n this.records_ = [];\n return copyOfRecords;\n }\n };\n\n /**\n * Class used to represent a registered observer.\n * @param {M utationObserver} observer\n * @param {Node} target\n * @param {MutationObser verOptions} options\n * @constructor\n */\n function Registration(observer, target, options) {\n this.observer = observer;\n this.target = target;\n this.options = options;\n this.transientObservedNodes = [];\n }\n\n Regi stration.prototype = {\n /**\n * Adds a transient observer on node. The t ransient observer gets removed\n * next time we deliver the change records.\ n * @param {Node} node\n */\n addTransientObserver: function(node) {\ n // Don't add transient observers on the target itself. We already have al l\n // the required listeners set up on the target.\n if (node === thi s.target)\n return;\n\n // Make sure we remove transient observers a t the end of microtask, even\n // if we didn't get any change records.\n scheduleCallback(this.observer);\n\n this.transientObservedNodes.push(no de);\n var registrations = registrationsTable.get(node);\n if (!regist rations)\n registrationsTable.set(node, registrations = []);\n\n // We know that registrations does not contain this because we already\n // ch ecked if node === this.target.\n registrations.push(this);\n },\n\n r emoveTransientObservers: function() {\n var transientObservedNodes = this.t ransientObservedNodes;\n this.transientObservedNodes = [];\n\n for (va r i = 0; i < transientObservedNodes.length; i++) {\n var node = transient ObservedNodes[i];\n var registrations = registrationsTable.get(node);\n for (var j = 0; j < registrations.length; j++) {\n if (registrati ons[j] === this) {\n registrations.splice(j, 1);\n // Each node can only have one registered observer associated with\n // this observer.\n break;\n }\n }\n }\n }\n };\n\n scope.enqueueMutation = enqueueMutation;\n scope.registerTransientObservers = registerTransientObservers;\n scope.wrappers.MutationObserver = MutationObserv er;\n scope.wrappers.MutationRecord = MutationRecord;\n\n})(window.ShadowDOMPol yfill);\n", 90 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var setEndOfMic rotask = scope.setEndOfMicrotask\n var wrapIfNeeded = scope.wrapIfNeeded\n var wrappers = scope.wrappers;\n\n var registrationsTable = new WeakMap();\n var globalMutationObservers = [];\n var isScheduled = false;\n\n function schedule Callback(observer) {\n if (observer.scheduled_)\n return;\n\n observe r.scheduled_ = true;\n globalMutationObservers.push(observer);\n\n if (isS cheduled)\n return;\n setEndOfMicrotask(notifyObservers);\n isSchedul ed = true;\n }\n\n // http://dom.spec.whatwg.org/#mutation-observers\n functi on notifyObservers() {\n isScheduled = false;\n\n while (globalMutationObs ervers.length) {\n var notifyList = globalMutationObservers;\n globalM utationObservers = [];\n\n // Deliver changes in birth order of the Mutatio nObservers.\n notifyList.sort(function(x, y) { return x.uid_ - y.uid_; });\ n\n for (var i = 0; i < notifyList.length; i++) {\n var mo = notifyL ist[i];\n mo.scheduled_ = false;\n var queue = mo.takeRecords();\n removeTransientObserversFor(mo);\n if (queue.length) {\n mo.callback_(queue, mo);\n }\n }\n }\n }\n\n\n /**\n * @para m {string} type\n * @param {Node} target\n * @constructor\n */\n function MutationRecord(type, target) {\n this.type = type;\n this.target = target ;\n this.addedNodes = new wrappers.NodeList();\n this.removedNodes = new w rappers.NodeList();\n this.previousSibling = null;\n this.nextSibling = nu ll;\n this.attributeName = null;\n this.attributeNamespace = null;\n th is.oldValue = null;\n }\n\n /**\n * Registers transient observers to ancesto r and its ancesors for the node\n * which was removed.\n * @param {!Node} an cestor\n * @param {!Node} node\n */\n function registerTransientObservers(a ncestor, node) {\n for (; ancestor; ancestor = ancestor.parentNode) {\n var registrations = registrationsTable.get(ancestor);\n if (!registrations) \n continue;\n for (var i = 0; i < registrations.length; i++) {\n var registration = registrations[i];\n if (registration.options.subt ree)\n registration.addTransientObserver(node);\n }\n }\n }\n\ n function removeTransientObserversFor(observer) {\n for (var i = 0; i < obs erver.nodes_.length; i++) {\n var node = observer.nodes_[i];\n var reg istrations = registrationsTable.get(node);\n if (!registrations)\n r eturn;\n for (var j = 0; j < registrations.length; j++) {\n var regi stration = registrations[j];\n if (registration.observer === observer)\n registration.removeTransientObservers();\n }\n }\n }\n\n // h ttp://dom.spec.whatwg.org/#queue-a-mutation-record\n function enqueueMutation(t arget, type, data) {\n // 1.\n var interestedObservers = Object.create(nul l);\n var associatedStrings = Object.create(null);\n\n // 2.\n for (var node = target; node; node = node.parentNode) {\n // 3.\n var registra tions = registrationsTable.get(node);\n if (!registrations)\n contin ue;\n for (var j = 0; j < registrations.length; j++) {\n var registr ation = registrations[j];\n var options = registration.options;\n // 1.\n if (node !== target && !options.subtree)\n continue;\n\n // 2.\n if (type === 'attributes' && !options.attributes)\n continue;\n\n // 3. If type is \"attributes\", options's attributeFil ter is present, and\n // either options's attributeFilter does not contai n name or namespace\n // is non-null, continue.\n if (type === 'at tributes' && options.attributeFilter &&\n (data.namespace !== null || \n options.attributeFilter.indexOf(data.name) === -1)) {\n continue;\n }\n\n // 4.\n if (type === 'characterData' && ! options.characterData)\n continue;\n\n // 5.\n if (type = == 'childList' && !options.childList)\n continue;\n\n // 6.\n var observer = registration.observer;\n interestedObservers[observer .uid_] = observer;\n\n // 7. If either type is \"attributes\" and options 's attributeOldValue is\n // true, or type is \"characterData\" and optio ns's characterDataOldValue\n // is true, set the paired string of registe red observer's observer in\n // interested observers to oldValue.\n if (type === 'attributes' && options.attributeOldValue ||\n type == = 'characterData' && options.characterDataOldValue) {\n associatedStrin gs[observer.uid_] = data.oldValue;\n }\n }\n }\n\n // 4.\n for (var uid in interestedObservers) {\n var observer = interestedObservers [uid];\n var record = new MutationRecord(type, target);\n\n // 2.\n if ('name' in data && 'namespace' in data) {\n record.attributeName = data.name;\n record.attributeNamespace = data.namespace;\n }\n\n // 3.\n if (data.addedNodes)\n record.addedNodes = data.addedNodes ;\n\n // 4.\n if (data.removedNodes)\n record.removedNodes = da ta.removedNodes;\n\n // 5.\n if (data.previousSibling)\n record .previousSibling = data.previousSibling;\n\n // 6.\n if (data.nextSibl ing)\n record.nextSibling = data.nextSibling;\n\n // 7.\n if (a ssociatedStrings[uid] !== undefined)\n record.oldValue = associatedString s[uid];\n\n // 8.\n scheduleCallback(observer);\n observer.record s_.push(record);\n }\n }\n\n var slice = Array.prototype.slice;\n\n /**\n * @param {!Object} options\n * @constructor\n */\n function MutationObser verOptions(options) {\n this.childList = !!options.childList;\n this.subtr ee = !!options.subtree;\n\n // 1. If either options' attributeOldValue or att ributeFilter is present\n // and options' attributes is omitted, set options' attributes to true.\n if (!('attributes' in options) &&\n ('attribute OldValue' in options || 'attributeFilter' in options)) {\n this.attributes = true;\n } else {\n this.attributes = !!options.attributes;\n }\n\n // 2. If options' characterDataOldValue is present and options'\n // chara cterData is omitted, set options' characterData to true.\n if ('characterData OldValue' in options && !('characterData' in options))\n this.characterData = true;\n else\n this.characterData = !!options.characterData;\n\n / / 3. & 4.\n if (!this.attributes &&\n (options.attributeOldValue || 'a ttributeFilter' in options) ||\n // 5.\n !this.characterData && op tions.characterDataOldValue) {\n throw new TypeError();\n }\n\n this. characterData = !!options.characterData;\n this.attributeOldValue = !!options .attributeOldValue;\n this.characterDataOldValue = !!options.characterDataOld Value;\n if ('attributeFilter' in options) {\n if (options.attributeFilt er == null ||\n typeof options.attributeFilter !== 'object') {\n throw new TypeError();\n }\n this.attributeFilter = slice.call(option s.attributeFilter);\n } else {\n this.attributeFilter = null;\n }\n }\n\n var uidCounter = 0;\n\n /**\n * The class that maps to the DOM Mutatio nObserver interface.\n * @param {Function} callback.\n * @constructor\n */ \n function MutationObserver(callback) {\n this.callback_ = callback;\n t his.nodes_ = [];\n this.records_ = [];\n this.uid_ = ++uidCounter;\n th is.scheduled_ = false;\n }\n\n MutationObserver.prototype = {\n constructor : MutationObserver,\n\n // http://dom.spec.whatwg.org/#dom-mutationobserver-o bserve\n observe: function(target, options) {\n target = wrapIfNeeded(ta rget);\n\n var newOptions = new MutationObserverOptions(options);\n\n // 6.\n var registration;\n var registrations = registrationsTable.get (target);\n if (!registrations)\n registrationsTable.set(target, reg istrations = []);\n\n for (var i = 0; i < registrations.length; i++) {\n if (registrations[i].observer === this) {\n registration = registr ations[i];\n // 6.1.\n registration.removeTransientObservers() ;\n // 6.2.\n registration.options = newOptions;\n }\n }\n\n // 7.\n if (!registration) {\n registration = new Re gistration(this, target, newOptions);\n registrations.push(registration); \n this.nodes_.push(target);\n }\n },\n\n // http://dom.spec.w hatwg.org/#dom-mutationobserver-disconnect\n disconnect: function() {\n this.nodes_.forEach(function(node) {\n var registrations = registrationsT able.get(node);\n for (var i = 0; i < registrations.length; i++) {\n var registration = registrations[i];\n if (registration.observer = == this) {\n registrations.splice(i, 1);\n // Each node ca n only have one registered observer associated with\n // this observe r.\n break;\n }\n }\n }, this);\n this.reco rds_ = [];\n },\n\n takeRecords: function() {\n var copyOfRecords = t his.records_;\n this.records_ = [];\n return copyOfRecords;\n }\n };\n\n /**\n * Class used to represent a registered observer.\n * @param {M utationObserver} observer\n * @param {Node} target\n * @param {MutationObser verOptions} options\n * @constructor\n */\n function Registration(observer, target, options) {\n this.observer = observer;\n this.target = target;\n this.options = options;\n this.transientObservedNodes = [];\n }\n\n Regi stration.prototype = {\n /**\n * Adds a transient observer on node. The t ransient observer gets removed\n * next time we deliver the change records.\ n * @param {Node} node\n */\n addTransientObserver: function(node) {\ n // Don't add transient observers on the target itself. We already have al l\n // the required listeners set up on the target.\n if (node === thi s.target)\n return;\n\n // Make sure we remove transient observers a t the end of microtask, even\n // if we didn't get any change records.\n scheduleCallback(this.observer);\n\n this.transientObservedNodes.push(no de);\n var registrations = registrationsTable.get(node);\n if (!regist rations)\n registrationsTable.set(node, registrations = []);\n\n // We know that registrations does not contain this because we already\n // ch ecked if node === this.target.\n registrations.push(this);\n },\n\n r emoveTransientObservers: function() {\n var transientObservedNodes = this.t ransientObservedNodes;\n this.transientObservedNodes = [];\n\n for (va r i = 0; i < transientObservedNodes.length; i++) {\n var node = transient ObservedNodes[i];\n var registrations = registrationsTable.get(node);\n for (var j = 0; j < registrations.length; j++) {\n if (registrati ons[j] === this) {\n registrations.splice(j, 1);\n // Each node can only have one registered observer associated with\n // this observer.\n break;\n }\n }\n }\n }\n };\n\n scope.enqueueMutation = enqueueMutation;\n scope.registerTransientObservers = registerTransientObservers;\n scope.wrappers.MutationObserver = MutationObserv er;\n scope.wrappers.MutationRecord = MutationRecord;\n\n})(window.ShadowDOMPol yfill);\n",
91 "/**\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in t he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n /**\n * A tr ee scope represents the root of a tree. All nodes in a tree point to\n * the s ame TreeScope object. The tree scope of a node get set the first time\n * it i s accessed or when a node is added or remove to a tree.\n *\n * The root is a Node that has no parent.\n *\n * The parent is another TreeScope. For Shad owRoots, it is the TreeScope of\n * the host of the ShadowRoot.\n *\n * @p aram {!Node} root\n * @param {TreeScope} parent\n * @constructor\n */\n f unction TreeScope(root, parent) {\n /** @type {!Node} */\n this.root = roo t;\n\n /** @type {TreeScope} */\n this.parent = parent;\n }\n\n TreeScop e.prototype = {\n get renderer() {\n if (this.root instanceof scope.wrap pers.ShadowRoot) {\n return scope.getRendererForHost(this.root.host);\n }\n return null;\n },\n\n contains: function(treeScope) {\n for (; treeScope; treeScope = treeScope.parent) {\n if (treeScope === thi s)\n return true;\n }\n return false;\n }\n };\n\n funct ion setTreeScope(node, treeScope) {\n if (node.treeScope_ !== treeScope) {\n node.treeScope_ = treeScope;\n for (var sr = node.shadowRoot; sr; sr = sr.olderShadowRoot) {\n sr.treeScope_.parent = treeScope;\n }\n for (var child = node.firstChild; child; child = child.nextSibling) {\n setTreeScope(child, treeScope);\n }\n }\n }\n\n function getTreeScope (node) {\n if (node instanceof scope.wrappers.Window) {\n debugger;\n }\n\n if (node.treeScope_)\n return node.treeScope_;\n var parent = node.parentNode;\n var treeScope;\n if (parent)\n treeScope = getTree Scope(parent);\n else\n treeScope = new TreeScope(node, null);\n retu rn node.treeScope_ = treeScope;\n }\n\n scope.TreeScope = TreeScope;\n scope. getTreeScope = getTreeScope;\n scope.setTreeScope = setTreeScope;\n\n})(window. ShadowDOMPolyfill);\n", 91 "/**\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in t he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n /**\n * A tr ee scope represents the root of a tree. All nodes in a tree point to\n * the s ame TreeScope object. The tree scope of a node get set the first time\n * it i s accessed or when a node is added or remove to a tree.\n *\n * The root is a Node that has no parent.\n *\n * The parent is another TreeScope. For Shad owRoots, it is the TreeScope of\n * the host of the ShadowRoot.\n *\n * @p aram {!Node} root\n * @param {TreeScope} parent\n * @constructor\n */\n f unction TreeScope(root, parent) {\n /** @type {!Node} */\n this.root = roo t;\n\n /** @type {TreeScope} */\n this.parent = parent;\n }\n\n TreeScop e.prototype = {\n get renderer() {\n if (this.root instanceof scope.wrap pers.ShadowRoot) {\n return scope.getRendererForHost(this.root.host);\n }\n return null;\n },\n\n contains: function(treeScope) {\n for (; treeScope; treeScope = treeScope.parent) {\n if (treeScope === thi s)\n return true;\n }\n return false;\n }\n };\n\n funct ion setTreeScope(node, treeScope) {\n if (node.treeScope_ !== treeScope) {\n node.treeScope_ = treeScope;\n for (var sr = node.shadowRoot; sr; sr = sr.olderShadowRoot) {\n sr.treeScope_.parent = treeScope;\n }\n for (var child = node.firstChild; child; child = child.nextSibling) {\n setTreeScope(child, treeScope);\n }\n }\n }\n\n function getTreeScope (node) {\n if (node instanceof scope.wrappers.Window) {\n debugger;\n }\n\n if (node.treeScope_)\n return node.treeScope_;\n var parent = node.parentNode;\n var treeScope;\n if (parent)\n treeScope = getTree Scope(parent);\n else\n treeScope = new TreeScope(node, null);\n retu rn node.treeScope_ = treeScope;\n }\n\n scope.TreeScope = TreeScope;\n scope. getTreeScope = getTreeScope;\n scope.setTreeScope = setTreeScope;\n\n})(window. ShadowDOMPolyfill);\n",
92 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var forwardMethodsToWrap per = scope.forwardMethodsToWrapper;\n var getTreeScope = scope.getTreeScope;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n va r setWrapper = scope.setWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n va r unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wrappers = scope.wrapp ers;\n\n var wrappedFuns = new WeakMap();\n var listenersTable = new WeakMap() ;\n var handledEventsTable = new WeakMap();\n var currentlyDispatchingEvents = new WeakMap();\n var targetTable = new WeakMap();\n var currentTargetTable = new WeakMap();\n var relatedTargetTable = new WeakMap();\n var eventPhaseTable = new WeakMap();\n var stopPropagationTable = new WeakMap();\n var stopImmedi atePropagationTable = new WeakMap();\n var eventHandlersTable = new WeakMap();\ n var eventPathTable = new WeakMap();\n\n function isShadowRoot(node) {\n r eturn node instanceof wrappers.ShadowRoot;\n }\n\n function rootOfNode(node) { \n return getTreeScope(node).root;\n }\n\n // http://w3c.github.io/webcompo nents/spec/shadow/#event-paths\n function getEventPath(node, event) {\n var path = [];\n var current = node;\n path.push(current);\n while (current ) {\n // 4.1.\n var destinationInsertionPoints = getDestinationInserti onPoints(current);\n if (destinationInsertionPoints && destinationInsertion Points.length > 0) {\n // 4.1.1\n for (var i = 0; i < destinationI nsertionPoints.length; i++) {\n var insertionPoint = destinationInserti onPoints[i];\n // 4.1.1.1\n if (isShadowInsertionPoint(inserti onPoint)) {\n var shadowRoot = rootOfNode(insertionPoint);\n // 4.1.1.1.2\n var olderShadowRoot = shadowRoot.olderShadowRoot;\n if (olderShadowRoot)\n path.push(olderShadowRoot);\n }\n\n // 4.1.1.2\n path.push(insertionPoint);\n }\n\n // 4.1.2\n current = destinationInsertionPoints[\n destinationInsertionPoints.length - 1];\n\n // 4.2\n } else {\n if (isShadowRoot(current)) {\n if (inSameTree(node, current) && even tMustBeStopped(event)) {\n // Stop this algorithm\n break; \n }\n current = current.host;\n path.push(current);\ n\n // 4.2.2\n } else {\n current = current.parentNode;\n if (current)\n path.push(current);\n }\n }\n }\n\n return path;\n }\n\n // http://w3c.github.io/webcomponents/spec/shad ow/#dfn-events-always-stopped\n function eventMustBeStopped(event) {\n if (! event)\n return false;\n\n switch (event.type) {\n case 'abort':\n case 'error':\n case 'select':\n case 'change':\n case 'load ':\n case 'reset':\n case 'resize':\n case 'scroll':\n case 'selectstart':\n return true;\n }\n return false;\n }\n\n // http ://w3c.github.io/webcomponents/spec/shadow/#dfn-shadow-insertion-point\n functi on isShadowInsertionPoint(node) {\n return node instanceof HTMLShadowElement; \n // and make sure that there are no shadow precing this?\n // and that t here is no content ancestor?\n }\n\n function getDestinationInsertionPoints(no de) {\n return scope.getDestinationInsertionPoints(node);\n }\n\n // http:/ /w3c.github.io/webcomponents/spec/shadow/#event-retargeting\n function eventRet argetting(path, currentTarget) {\n if (path.length === 0)\n return curre ntTarget;\n\n // The currentTarget might be the window object. Use its docume nt for the\n // purpose of finding the retargetted node.\n if (currentTarg et instanceof wrappers.Window)\n currentTarget = currentTarget.document;\n\ n var currentTargetTree = getTreeScope(currentTarget);\n var originalTarge t = path[0];\n var originalTargetTree = getTreeScope(originalTarget);\n va r relativeTargetTree =\n lowestCommonInclusiveAncestor(currentTargetTree, originalTargetTree);\n\n for (var i = 0; i < path.length; i++) {\n var node = path[i];\n if (getTreeScope(node) === relativeTargetTree)\n r eturn node;\n }\n\n return path[path.length - 1];\n }\n\n function getTr eeScopeAncestors(treeScope) {\n var ancestors = [];\n for (;treeScope; tre eScope = treeScope.parent) {\n ancestors.push(treeScope);\n }\n retur n ancestors;\n }\n\n function lowestCommonInclusiveAncestor(tsA, tsB) {\n v ar ancestorsA = getTreeScopeAncestors(tsA);\n var ancestorsB = getTreeScopeAn cestors(tsB);\n\n var result = null;\n while (ancestorsA.length > 0 && anc estorsB.length > 0) {\n var a = ancestorsA.pop();\n var b = ancestorsB .pop();\n if (a === b)\n result = a;\n else\n break;\n }\n return result;\n }\n\n function getTreeScopeRoot(ts) {\n if (!ts.p arent)\n return ts;\n return getTreeScopeRoot(ts.parent);\n }\n\n func tion relatedTargetResolution(event, currentTarget, relatedTarget) {\n // In c ase the current target is a window use its document for the purpose\n // of r etargetting the related target.\n if (currentTarget instanceof wrappers.Windo w)\n currentTarget = currentTarget.document;\n\n var currentTargetTree = getTreeScope(currentTarget);\n var relatedTargetTree = getTreeScope(relatedT arget);\n\n var relatedTargetEventPath = getEventPath(relatedTarget, event);\ n\n var lowestCommonAncestorTree;\n\n // 4\n var lowestCommonAncestorTr ee =\n lowestCommonInclusiveAncestor(currentTargetTree, relatedTargetTree );\n\n // 5\n if (!lowestCommonAncestorTree)\n lowestCommonAncestorTr ee = relatedTargetTree.root;\n\n // 6\n for (var commonAncestorTree = lowe stCommonAncestorTree;\n commonAncestorTree;\n commonAncestorTree = commonAncestorTree.parent) {\n // 6.1\n var adjustedRelatedTarget;\ n for (var i = 0; i < relatedTargetEventPath.length; i++) {\n var no de = relatedTargetEventPath[i];\n if (getTreeScope(node) === commonAncest orTree)\n return node;\n }\n }\n\n return null;\n }\n\n fu nction inSameTree(a, b) {\n return getTreeScope(a) === getTreeScope(b);\n }\ n\n var NONE = 0;\n var CAPTURING_PHASE = 1;\n var AT_TARGET = 2;\n var BUBB LING_PHASE = 3;\n\n // pendingError is used to rethrow the first error we got d uring an event\n // dispatch. The browser actually reports all errors but to do that we would\n // need to rethrow the error asynchronously.\n var pendingErr or;\n\n function dispatchOriginalEvent(originalEvent) {\n // Make sure this event is only dispatched once.\n if (handledEventsTable.get(originalEvent))\n return;\n handledEventsTable.set(originalEvent, true);\n dispatchEve nt(wrap(originalEvent), wrap(originalEvent.target));\n if (pendingError) {\n var err = pendingError;\n pendingError = null;\n throw err;\n }\n }\n\n\n function isLoadLikeEvent(event) {\n switch (event.type) {\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html #events-and-the-window-object\n case 'load':\n // http://www.whatwg.or g/specs/web-apps/current-work/multipage/browsers.html#unloading-documents\n case 'beforeunload':\n case 'unload':\n return true;\n }\n re turn false;\n }\n\n function dispatchEvent(event, originalWrapperTarget) {\n if (currentlyDispatchingEvents.get(event))\n throw new Error('InvalidStat eError');\n\n currentlyDispatchingEvents.set(event, true);\n\n // Render t o ensure that the event path is correct.\n scope.renderAllPending();\n var eventPath;\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipag e/webappapis.html#events-and-the-window-object\n // All events dispatched on Nodes with a default view, except load events,\n // should propagate to the W indow.\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the -end.html#the-end\n var overrideTarget;\n var win;\n\n // Should really be not cancelable too but since Firefox has a bug there\n // we skip that ch eck.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=999456\n if (isLoad LikeEvent(event) && !event.bubbles) {\n var doc = originalWrapperTarget;\n if (doc instanceof wrappers.Document && (win = doc.defaultView)) {\n overrideTarget = doc;\n eventPath = [];\n }\n }\n\n if (!even tPath) {\n if (originalWrapperTarget instanceof wrappers.Window) {\n win = originalWrapperTarget;\n eventPath = [];\n } else {\n eventPath = getEventPath(originalWrapperTarget, event);\n\n if (!isLoadLi keEvent(event)) {\n var doc = eventPath[eventPath.length - 1];\n if (doc instanceof wrappers.Document)\n win = doc.defaultView;\n }\n }\n }\n\n eventPathTable.set(event, eventPath);\n\n if ( dispatchCapturing(event, eventPath, win, overrideTarget)) {\n if (dispatchA tTarget(event, eventPath, win, overrideTarget)) {\n dispatchBubbling(even t, eventPath, win, overrideTarget);\n }\n }\n\n eventPhaseTable.set(e vent, NONE);\n currentTargetTable.delete(event, null);\n currentlyDispatch ingEvents.delete(event);\n\n return event.defaultPrevented;\n }\n\n functio n dispatchCapturing(event, eventPath, win, overrideTarget) {\n var phase = CA PTURING_PHASE;\n\n if (win) {\n if (!invoke(win, event, phase, eventPath , overrideTarget))\n return false;\n }\n\n for (var i = eventPath.l ength - 1; i > 0; i--) {\n if (!invoke(eventPath[i], event, phase, eventPat h, overrideTarget))\n return false;\n }\n\n return true;\n }\n\n function dispatchAtTarget(event, eventPath, win, overrideTarget) {\n var phas e = AT_TARGET;\n var currentTarget = eventPath[0] || win;\n return invoke( currentTarget, event, phase, eventPath, overrideTarget);\n }\n\n function disp atchBubbling(event, eventPath, win, overrideTarget) {\n var phase = BUBBLING_ PHASE;\n for (var i = 1; i < eventPath.length; i++) {\n if (!invoke(even tPath[i], event, phase, eventPath, overrideTarget))\n return;\n }\n\n if (win && eventPath.length > 0) {\n invoke(win, event, phase, eventPath , overrideTarget);\n }\n }\n\n function invoke(currentTarget, event, phase, eventPath, overrideTarget) {\n var listeners = listenersTable.get(currentTar get);\n if (!listeners)\n return true;\n\n var target = overrideTarge t || eventRetargetting(eventPath, currentTarget);\n\n if (target === currentT arget) {\n if (phase === CAPTURING_PHASE)\n return true;\n\n if (phase === BUBBLING_PHASE)\n phase = AT_TARGET;\n\n } else if (phase === BUBBLING_PHASE && !event.bubbles) {\n return true;\n }\n\n if (' relatedTarget' in event) {\n var originalEvent = unwrap(event);\n var unwrappedRelatedTarget = originalEvent.relatedTarget;\n\n // X-Tag sets rel atedTarget on a CustomEvent. If they do that there is no\n // way to have r elatedTarget return the adjusted target but worse is that\n // the original Event might not have a relatedTarget so we hit an assert\n // when we try t o wrap it.\n if (unwrappedRelatedTarget) {\n // In IE we can get obj ects that are not EventTargets at this point.\n // Safari does not have a n EventTarget interface so revert to checking\n // for addEventListener a s an approximation.\n if (unwrappedRelatedTarget instanceof Object &&\n unwrappedRelatedTarget.addEventListener) {\n var relatedTarge t = wrap(unwrappedRelatedTarget);\n\n var adjusted =\n rel atedTargetResolution(event, currentTarget, relatedTarget);\n if (adjust ed === target)\n return true;\n } else {\n adjusted = null;\n }\n relatedTargetTable.set(event, adjusted);\n }\n }\n\n eventPhaseTable.set(event, phase);\n var type = event.type;\n\n var anyRemoved = false;\n targetTable.set(event, target);\n currentTarget Table.set(event, currentTarget);\n\n // Keep track of the invoke depth so tha t we only clean up the removed\n // listeners if we are in the outermost invo ke.\n listeners.depth++;\n\n for (var i = 0, len = listeners.length; i < l en; i++) {\n var listener = listeners[i];\n if (listener.removed) {\n anyRemoved = true;\n continue;\n }\n\n if (listener.type !== type ||\n !listener.capture && phase === CAPTURING_PHASE ||\n listener.capture && phase === BUBBLING_PHASE) {\n continue;\n } \n\n try {\n if (typeof listener.handler === 'function')\n listener.handler.call(currentTarget, event);\n else\n listener.h andler.handleEvent(event);\n\n if (stopImmediatePropagationTable.get(even t))\n return false;\n\n } catch (ex) {\n if (!pendingError) \n pendingError = ex;\n }\n }\n\n listeners.depth--;\n\n if (anyRemoved && listeners.depth === 0) {\n var copy = listeners.slice();\ n listeners.length = 0;\n for (var i = 0; i < copy.length; i++) {\n if (!copy[i].removed)\n listeners.push(copy[i]);\n }\n }\n \n return !stopPropagationTable.get(event);\n }\n\n function Listener(type, handler, capture) {\n this.type = type;\n this.handler = handler;\n th is.capture = Boolean(capture);\n }\n Listener.prototype = {\n equals: funct ion(that) {\n return this.handler === that.handler && this.type === that.ty pe &&\n this.capture === that.capture;\n },\n get removed() {\n return this.handler === null;\n },\n remove: function() {\n this. handler = null;\n }\n };\n\n var OriginalEvent = window.Event;\n OriginalE vent.prototype.polymerBlackList_ = {\n returnValue: true,\n // TODO(arv): keyLocation is part of KeyboardEvent but Firefox does not\n // support constr uctable KeyboardEvent so we keep it here for now.\n keyLocation: true\n };\n \n /**\n * Creates a new Event wrapper or wraps an existin native Event objec t.\n * @param {string|Event} type\n * @param {Object=} options\n * @constr uctor\n */\n function Event(type, options) {\n if (type instanceof Origina lEvent) {\n var impl = type;\n // In browsers that do not correctly su pport BeforeUnloadEvent we get to\n // the generic Event wrapper but we sti ll want to ensure we create a\n // BeforeUnloadEvent. Since BeforeUnloadEve nt calls super, we need to\n // prevent reentrancty.\n if (!OriginalBe foreUnloadEvent && impl.type === 'beforeunload' &&\n !(this instanceof BeforeUnloadEvent)) {\n return new BeforeUnloadEvent(impl);\n }\n setWrapper(impl, this);\n } else {\n return wrap(constructEvent(Origi nalEvent, 'Event', type, options));\n }\n }\n Event.prototype = {\n get target() {\n return targetTable.get(this);\n },\n get currentTarget() {\n return currentTargetTable.get(this);\n },\n get eventPhase() {\n return eventPhaseTable.get(this);\n },\n get path() {\n var eve ntPath = eventPathTable.get(this);\n if (!eventPath)\n return [];\n // TODO(arv): Event path should contain window.\n return eventPath.sli ce();\n },\n stopPropagation: function() {\n stopPropagationTable.set (this, true);\n },\n stopImmediatePropagation: function() {\n stopPro pagationTable.set(this, true);\n stopImmediatePropagationTable.set(this, tr ue);\n }\n };\n registerWrapper(OriginalEvent, Event, document.createEvent( 'Event'));\n\n function unwrapOptions(options) {\n if (!options || !options. relatedTarget)\n return options;\n return Object.create(options, {\n relatedTarget: {value: unwrap(options.relatedTarget)}\n });\n }\n\n funct ion registerGenericEvent(name, SuperEvent, prototype) {\n var OriginalEvent = window[name];\n var GenericEvent = function(type, options) {\n if (type instanceof OriginalEvent)\n setWrapper(type, this);\n else\n return wrap(constructEvent(OriginalEvent, name, type, options));\n };\n G enericEvent.prototype = Object.create(SuperEvent.prototype);\n if (prototype) \n mixin(GenericEvent.prototype, prototype);\n if (OriginalEvent) {\n // - Old versions of Safari fails on new FocusEvent (and others?).\n // - IE does not support event constructors.\n // - createEvent('FocusEvent') throws in Firefox.\n // => Try the best practice solution first and fallbac k to the old way\n // if needed.\n try {\n registerWrapper(Orig inalEvent, GenericEvent, new OriginalEvent('temp'));\n } catch (ex) {\n registerWrapper(OriginalEvent, GenericEvent,\n docume nt.createEvent(name));\n }\n }\n return GenericEvent;\n }\n\n var U IEvent = registerGenericEvent('UIEvent', Event);\n var CustomEvent = registerGe nericEvent('CustomEvent', Event);\n\n var relatedTargetProto = {\n get relat edTarget() {\n var relatedTarget = relatedTargetTable.get(this);\n // relatedTarget can be null.\n if (relatedTarget !== undefined)\n retu rn relatedTarget;\n return wrap(unwrap(this).relatedTarget);\n }\n };\n \n function getInitFunction(name, relatedTargetIndex) {\n return function() {\n arguments[relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]);\ n var impl = unwrap(this);\n impl[name].apply(impl, arguments);\n } ;\n }\n\n var mouseEventProto = mixin({\n initMouseEvent: getInitFunction(' initMouseEvent', 14)\n }, relatedTargetProto);\n\n var focusEventProto = mixin ({\n initFocusEvent: getInitFunction('initFocusEvent', 5)\n }, relatedTarget Proto);\n\n var MouseEvent = registerGenericEvent('MouseEvent', UIEvent, mouseE ventProto);\n var FocusEvent = registerGenericEvent('FocusEvent', UIEvent, focu sEventProto);\n\n // In case the browser does not support event constructors we polyfill that\n // by calling `createEvent('Foo')` and `initFooEvent` where th e arguments to\n // `initFooEvent` are derived from the registered default even t init dict.\n var defaultInitDicts = Object.create(null);\n\n var supportsEve ntConstructors = (function() {\n try {\n new window.FocusEvent('focus'); \n } catch (ex) {\n return false;\n }\n return true;\n })();\n\n /**\n * Constructs a new native event.\n */\n function constructEvent(Orig inalEvent, name, type, options) {\n if (supportsEventConstructors)\n ret urn new OriginalEvent(type, unwrapOptions(options));\n\n // Create the argume nts from the default dictionary.\n var event = unwrap(document.createEvent(na me));\n var defaultDict = defaultInitDicts[name];\n var args = [type];\n Object.keys(defaultDict).forEach(function(key) {\n var v = options != nul l && key in options ?\n options[key] : defaultDict[key];\n if (key === 'relatedTarget')\n v = unwrap(v);\n args.push(v);\n });\n event['init' + name].apply(event, args);\n return event;\n }\n\n if (!supp ortsEventConstructors) {\n var configureEventConstructor = function(name, ini tDict, superName) {\n if (superName) {\n var superDict = defaultInit Dicts[superName];\n initDict = mixin(mixin({}, superDict), initDict);\n }\n\n defaultInitDicts[name] = initDict;\n };\n\n // The order of the default event init dictionary keys is important, the\n // arguments to i nitFooEvent is derived from that.\n configureEventConstructor('Event', {bubbl es: false, cancelable: false});\n configureEventConstructor('CustomEvent', {d etail: null}, 'Event');\n configureEventConstructor('UIEvent', {view: null, d etail: 0}, 'Event');\n configureEventConstructor('MouseEvent', {\n scree nX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n button: 0,\n relatedTarget: null\n }, 'UIEvent');\n configureEvent Constructor('FocusEvent', {relatedTarget: null}, 'UIEvent');\n }\n\n // Safari 7 does not yet have BeforeUnloadEvent.\n // https://bugs.webkit.org/show_bug.c gi?id=120849\n var OriginalBeforeUnloadEvent = window.BeforeUnloadEvent;\n\n f unction BeforeUnloadEvent(impl) {\n Event.call(this, impl);\n }\n BeforeUnl oadEvent.prototype = Object.create(Event.prototype);\n mixin(BeforeUnloadEvent. prototype, {\n get returnValue() {\n return unsafeUnwrap(this).returnVal ue;\n },\n set returnValue(v) {\n unsafeUnwrap(this).returnValue = v; \n }\n });\n\n if (OriginalBeforeUnloadEvent)\n registerWrapper(Original BeforeUnloadEvent, BeforeUnloadEvent);\n\n function isValidListener(fun) {\n if (typeof fun === 'function')\n return true;\n return fun && fun.handl eEvent;\n }\n\n function isMutationEvent(type) {\n switch (type) {\n c ase 'DOMAttrModified':\n case 'DOMAttributeNameChanged':\n case 'DOMCh aracterDataModified':\n case 'DOMElementNameChanged':\n case 'DOMNodeI nserted':\n case 'DOMNodeInsertedIntoDocument':\n case 'DOMNodeRemoved ':\n case 'DOMNodeRemovedFromDocument':\n case 'DOMSubtreeModified':\n return true;\n }\n return false;\n }\n\n var OriginalEventTarget = window.EventTarget;\n\n /**\n * This represents a wrapper for an EventTarg et.\n * @param {!EventTarget} impl The original event target.\n * @construct or\n */\n function EventTarget(impl) {\n setWrapper(impl, this);\n }\n\n // Node and Window have different internal type checks in WebKit so we cannot\n // use the same method as the original function.\n var methodNames = [\n ' addEventListener',\n 'removeEventListener',\n 'dispatchEvent'\n ];\n\n [ Node, Window].forEach(function(constructor) {\n var p = constructor.prototype ;\n methodNames.forEach(function(name) {\n Object.defineProperty(p, name + '_', {value: p[name]});\n });\n });\n\n function getTargetToListenAt(wra pper) {\n if (wrapper instanceof wrappers.ShadowRoot)\n wrapper = wrappe r.host;\n return unwrap(wrapper);\n }\n\n EventTarget.prototype = {\n ad dEventListener: function(type, fun, capture) {\n if (!isValidListener(fun) || isMutationEvent(type))\n return;\n\n var listener = new Listener( type, fun, capture);\n var listeners = listenersTable.get(this);\n if (!listeners) {\n listeners = [];\n listeners.depth = 0;\n l istenersTable.set(this, listeners);\n } else {\n // Might have a dup licate.\n for (var i = 0; i < listeners.length; i++) {\n if (lis tener.equals(listeners[i]))\n return;\n }\n }\n\n li steners.push(listener);\n\n var target = getTargetToListenAt(this);\n target.addEventListener_(type, dispatchOriginalEvent, true);\n },\n remove EventListener: function(type, fun, capture) {\n capture = Boolean(capture); \n var listeners = listenersTable.get(this);\n if (!listeners)\n return;\n var count = 0, found = false;\n for (var i = 0; i < listen ers.length; i++) {\n if (listeners[i].type === type && listeners[i].captu re === capture) {\n count++;\n if (listeners[i].handler === fu n) {\n found = true;\n listeners[i].remove();\n } \n }\n }\n\n if (found && count === 1) {\n var target = getTargetToListenAt(this);\n target.removeEventListener_(type, dispatchOr iginalEvent, true);\n }\n },\n dispatchEvent: function(event) {\n // We want to use the native dispatchEvent because it triggers the default\n // actions (like checking a checkbox). However, if there are no listeners\n // in the composed tree then there are no events that will trigger and\n // listeners in the non composed tree that are part of the event path are\n // not notified.\n //\n // If we find out that there are no listen ers in the composed tree we add\n // a temporary listener to the target whi ch makes us get called back even\n // in that case.\n\n var nativeEven t = unwrap(event);\n var eventType = nativeEvent.type;\n\n // Allow di spatching the same event again. This is safe because if user\n // code call s this during an existing dispatch of the same event the\n // native dispat chEvent throws (that is required by the spec).\n handledEventsTable.set(nat iveEvent, false);\n\n // Force rendering since we prefer native dispatch an d that works on the\n // composed tree.\n scope.renderAllPending();\n\ n var tempListener;\n if (!hasListenerInAncestors(this, eventType)) {\ n tempListener = function() {};\n this.addEventListener(eventType, tempListener, true);\n }\n\n try {\n return unwrap(this).dispa tchEvent_(nativeEvent);\n } finally {\n if (tempListener)\n this.removeEventListener(eventType, tempListener, true);\n }\n }\n };\ n\n function hasListener(node, type) {\n var listeners = listenersTable.get( node);\n if (listeners) {\n for (var i = 0; i < listeners.length; i++) { \n if (!listeners[i].removed && listeners[i].type === type)\n re turn true;\n }\n }\n return false;\n }\n\n function hasListenerInAn cestors(target, type) {\n for (var node = unwrap(target); node; node = node.p arentNode) {\n if (hasListener(wrap(node), type))\n return true;\n }\n return false;\n }\n\n if (OriginalEventTarget)\n registerWrapper(O riginalEventTarget, EventTarget);\n\n function wrapEventTargetMethods(construct ors) {\n forwardMethodsToWrapper(constructors, methodNames);\n }\n\n var or iginalElementFromPoint = document.elementFromPoint;\n\n function elementFromPoi nt(self, document, x, y) {\n scope.renderAllPending();\n\n var element =\n wrap(originalElementFromPoint.call(unsafeUnwrap(document), x, y));\n if (!element)\n return null;\n var path = getEventPath(element, null);\n \n // scope the path to this TreeScope\n var idx = path.lastIndexOf(self); \n if (idx == -1)\n return null;\n else\n path = path.slice(0, i dx);\n\n // TODO(dfreedm): pass idx to eventRetargetting to avoid array copy\ n return eventRetargetting(path, self);\n }\n\n /**\n * Returns a functio n that is to be used as a getter for `onfoo` properties.\n * @param {string} n ame\n * @return {Function}\n */\n function getEventHandlerGetter(name) {\n return function() {\n var inlineEventHandlers = eventHandlersTable.get(t his);\n return inlineEventHandlers && inlineEventHandlers[name] &&\n inlineEventHandlers[name].value || null;\n };\n }\n\n /**\n * Returns a function that is to be used as a setter for `onfoo` properties.\n * @param {string} name\n * @return {Function}\n */\n function getEventHandlerSetter( name) {\n var eventType = name.slice(2);\n return function(value) {\n var inlineEventHandlers = eventHandlersTable.get(this);\n if (!inlineEvent Handlers) {\n inlineEventHandlers = Object.create(null);\n eventHa ndlersTable.set(this, inlineEventHandlers);\n }\n\n var old = inlineEv entHandlers[name];\n if (old)\n this.removeEventListener(eventType, old.wrapped, false);\n\n if (typeof value === 'function') {\n var wr apped = function(e) {\n var rv = value.call(this, e);\n if (rv === false)\n e.preventDefault();\n else if (name === 'onbef oreunload' && typeof rv === 'string')\n e.returnValue = rv;\n // mouseover uses true for preventDefault but preventDefault for\n // mouseover is ignored by browsers these day.\n };\n\n this.addEven tListener(eventType, wrapped, false);\n inlineEventHandlers[name] = {\n value: value,\n wrapped: wrapped\n };\n }\n };\n }\n\n scope.elementFromPoint = elementFromPoint;\n scope.getEventHandlerGett er = getEventHandlerGetter;\n scope.getEventHandlerSetter = getEventHandlerSett er;\n scope.wrapEventTargetMethods = wrapEventTargetMethods;\n scope.wrappers. BeforeUnloadEvent = BeforeUnloadEvent;\n scope.wrappers.CustomEvent = CustomEve nt;\n scope.wrappers.Event = Event;\n scope.wrappers.EventTarget = EventTarget ;\n scope.wrappers.FocusEvent = FocusEvent;\n scope.wrappers.MouseEvent = Mous eEvent;\n scope.wrappers.UIEvent = UIEvent;\n\n})(window.ShadowDOMPolyfill);\n" , 92 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var forwardMethodsToWrap per = scope.forwardMethodsToWrapper;\n var getTreeScope = scope.getTreeScope;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n va r setWrapper = scope.setWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n va r unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wrappers = scope.wrapp ers;\n\n var wrappedFuns = new WeakMap();\n var listenersTable = new WeakMap() ;\n var handledEventsTable = new WeakMap();\n var currentlyDispatchingEvents = new WeakMap();\n var targetTable = new WeakMap();\n var currentTargetTable = new WeakMap();\n var relatedTargetTable = new WeakMap();\n var eventPhaseTable = new WeakMap();\n var stopPropagationTable = new WeakMap();\n var stopImmedi atePropagationTable = new WeakMap();\n var eventHandlersTable = new WeakMap();\ n var eventPathTable = new WeakMap();\n\n function isShadowRoot(node) {\n r eturn node instanceof wrappers.ShadowRoot;\n }\n\n function rootOfNode(node) { \n return getTreeScope(node).root;\n }\n\n // http://w3c.github.io/webcompo nents/spec/shadow/#event-paths\n function getEventPath(node, event) {\n var path = [];\n var current = node;\n path.push(current);\n while (current ) {\n // 4.1.\n var destinationInsertionPoints = getDestinationInserti onPoints(current);\n if (destinationInsertionPoints && destinationInsertion Points.length > 0) {\n // 4.1.1\n for (var i = 0; i < destinationI nsertionPoints.length; i++) {\n var insertionPoint = destinationInserti onPoints[i];\n // 4.1.1.1\n if (isShadowInsertionPoint(inserti onPoint)) {\n var shadowRoot = rootOfNode(insertionPoint);\n // 4.1.1.1.2\n var olderShadowRoot = shadowRoot.olderShadowRoot;\n if (olderShadowRoot)\n path.push(olderShadowRoot);\n }\n\n // 4.1.1.2\n path.push(insertionPoint);\n }\n\n // 4.1.2\n current = destinationInsertionPoints[\n destinationInsertionPoints.length - 1];\n\n // 4.2\n } else {\n if (isShadowRoot(current)) {\n if (inSameTree(node, current) && even tMustBeStopped(event)) {\n // Stop this algorithm\n break; \n }\n current = current.host;\n path.push(current);\ n\n // 4.2.2\n } else {\n current = current.parentNode;\n if (current)\n path.push(current);\n }\n }\n }\n\n return path;\n }\n\n // http://w3c.github.io/webcomponents/spec/shad ow/#dfn-events-always-stopped\n function eventMustBeStopped(event) {\n if (! event)\n return false;\n\n switch (event.type) {\n case 'abort':\n case 'error':\n case 'select':\n case 'change':\n case 'load ':\n case 'reset':\n case 'resize':\n case 'scroll':\n case 'selectstart':\n return true;\n }\n return false;\n }\n\n // http ://w3c.github.io/webcomponents/spec/shadow/#dfn-shadow-insertion-point\n functi on isShadowInsertionPoint(node) {\n return node instanceof HTMLShadowElement; \n // and make sure that there are no shadow precing this?\n // and that t here is no content ancestor?\n }\n\n function getDestinationInsertionPoints(no de) {\n return scope.getDestinationInsertionPoints(node);\n }\n\n // http:/ /w3c.github.io/webcomponents/spec/shadow/#event-retargeting\n function eventRet argetting(path, currentTarget) {\n if (path.length === 0)\n return curre ntTarget;\n\n // The currentTarget might be the window object. Use its docume nt for the\n // purpose of finding the retargetted node.\n if (currentTarg et instanceof wrappers.Window)\n currentTarget = currentTarget.document;\n\ n var currentTargetTree = getTreeScope(currentTarget);\n var originalTarge t = path[0];\n var originalTargetTree = getTreeScope(originalTarget);\n va r relativeTargetTree =\n lowestCommonInclusiveAncestor(currentTargetTree, originalTargetTree);\n\n for (var i = 0; i < path.length; i++) {\n var node = path[i];\n if (getTreeScope(node) === relativeTargetTree)\n r eturn node;\n }\n\n return path[path.length - 1];\n }\n\n function getTr eeScopeAncestors(treeScope) {\n var ancestors = [];\n for (;treeScope; tre eScope = treeScope.parent) {\n ancestors.push(treeScope);\n }\n retur n ancestors;\n }\n\n function lowestCommonInclusiveAncestor(tsA, tsB) {\n v ar ancestorsA = getTreeScopeAncestors(tsA);\n var ancestorsB = getTreeScopeAn cestors(tsB);\n\n var result = null;\n while (ancestorsA.length > 0 && anc estorsB.length > 0) {\n var a = ancestorsA.pop();\n var b = ancestorsB .pop();\n if (a === b)\n result = a;\n else\n break;\n }\n return result;\n }\n\n function getTreeScopeRoot(ts) {\n if (!ts.p arent)\n return ts;\n return getTreeScopeRoot(ts.parent);\n }\n\n func tion relatedTargetResolution(event, currentTarget, relatedTarget) {\n // In c ase the current target is a window use its document for the purpose\n // of r etargetting the related target.\n if (currentTarget instanceof wrappers.Windo w)\n currentTarget = currentTarget.document;\n\n var currentTargetTree = getTreeScope(currentTarget);\n var relatedTargetTree = getTreeScope(relatedT arget);\n\n var relatedTargetEventPath = getEventPath(relatedTarget, event);\ n\n var lowestCommonAncestorTree;\n\n // 4\n var lowestCommonAncestorTr ee =\n lowestCommonInclusiveAncestor(currentTargetTree, relatedTargetTree );\n\n // 5\n if (!lowestCommonAncestorTree)\n lowestCommonAncestorTr ee = relatedTargetTree.root;\n\n // 6\n for (var commonAncestorTree = lowe stCommonAncestorTree;\n commonAncestorTree;\n commonAncestorTree = commonAncestorTree.parent) {\n // 6.1\n var adjustedRelatedTarget;\ n for (var i = 0; i < relatedTargetEventPath.length; i++) {\n var no de = relatedTargetEventPath[i];\n if (getTreeScope(node) === commonAncest orTree)\n return node;\n }\n }\n\n return null;\n }\n\n fu nction inSameTree(a, b) {\n return getTreeScope(a) === getTreeScope(b);\n }\ n\n var NONE = 0;\n var CAPTURING_PHASE = 1;\n var AT_TARGET = 2;\n var BUBB LING_PHASE = 3;\n\n // pendingError is used to rethrow the first error we got d uring an event\n // dispatch. The browser actually reports all errors but to do that we would\n // need to rethrow the error asynchronously.\n var pendingErr or;\n\n function dispatchOriginalEvent(originalEvent) {\n // Make sure this event is only dispatched once.\n if (handledEventsTable.get(originalEvent))\n return;\n handledEventsTable.set(originalEvent, true);\n dispatchEve nt(wrap(originalEvent), wrap(originalEvent.target));\n if (pendingError) {\n var err = pendingError;\n pendingError = null;\n throw err;\n }\n }\n\n\n function isLoadLikeEvent(event) {\n switch (event.type) {\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html #events-and-the-window-object\n case 'load':\n // http://www.whatwg.or g/specs/web-apps/current-work/multipage/browsers.html#unloading-documents\n case 'beforeunload':\n case 'unload':\n return true;\n }\n re turn false;\n }\n\n function dispatchEvent(event, originalWrapperTarget) {\n if (currentlyDispatchingEvents.get(event))\n throw new Error('InvalidStat eError');\n\n currentlyDispatchingEvents.set(event, true);\n\n // Render t o ensure that the event path is correct.\n scope.renderAllPending();\n var eventPath;\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipag e/webappapis.html#events-and-the-window-object\n // All events dispatched on Nodes with a default view, except load events,\n // should propagate to the W indow.\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the -end.html#the-end\n var overrideTarget;\n var win;\n\n // Should really be not cancelable too but since Firefox has a bug there\n // we skip that ch eck.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=999456\n if (isLoad LikeEvent(event) && !event.bubbles) {\n var doc = originalWrapperTarget;\n if (doc instanceof wrappers.Document && (win = doc.defaultView)) {\n overrideTarget = doc;\n eventPath = [];\n }\n }\n\n if (!even tPath) {\n if (originalWrapperTarget instanceof wrappers.Window) {\n win = originalWrapperTarget;\n eventPath = [];\n } else {\n eventPath = getEventPath(originalWrapperTarget, event);\n\n if (!isLoadLi keEvent(event)) {\n var doc = eventPath[eventPath.length - 1];\n if (doc instanceof wrappers.Document)\n win = doc.defaultView;\n }\n }\n }\n\n eventPathTable.set(event, eventPath);\n\n if ( dispatchCapturing(event, eventPath, win, overrideTarget)) {\n if (dispatchA tTarget(event, eventPath, win, overrideTarget)) {\n dispatchBubbling(even t, eventPath, win, overrideTarget);\n }\n }\n\n eventPhaseTable.set(e vent, NONE);\n currentTargetTable.delete(event, null);\n currentlyDispatch ingEvents.delete(event);\n\n return event.defaultPrevented;\n }\n\n functio n dispatchCapturing(event, eventPath, win, overrideTarget) {\n var phase = CA PTURING_PHASE;\n\n if (win) {\n if (!invoke(win, event, phase, eventPath , overrideTarget))\n return false;\n }\n\n for (var i = eventPath.l ength - 1; i > 0; i--) {\n if (!invoke(eventPath[i], event, phase, eventPat h, overrideTarget))\n return false;\n }\n\n return true;\n }\n\n function dispatchAtTarget(event, eventPath, win, overrideTarget) {\n var phas e = AT_TARGET;\n var currentTarget = eventPath[0] || win;\n return invoke( currentTarget, event, phase, eventPath, overrideTarget);\n }\n\n function disp atchBubbling(event, eventPath, win, overrideTarget) {\n var phase = BUBBLING_ PHASE;\n for (var i = 1; i < eventPath.length; i++) {\n if (!invoke(even tPath[i], event, phase, eventPath, overrideTarget))\n return;\n }\n\n if (win && eventPath.length > 0) {\n invoke(win, event, phase, eventPath , overrideTarget);\n }\n }\n\n function invoke(currentTarget, event, phase, eventPath, overrideTarget) {\n var listeners = listenersTable.get(currentTar get);\n if (!listeners)\n return true;\n\n var target = overrideTarge t || eventRetargetting(eventPath, currentTarget);\n\n if (target === currentT arget) {\n if (phase === CAPTURING_PHASE)\n return true;\n\n if (phase === BUBBLING_PHASE)\n phase = AT_TARGET;\n\n } else if (phase === BUBBLING_PHASE && !event.bubbles) {\n return true;\n }\n\n if (' relatedTarget' in event) {\n var originalEvent = unwrap(event);\n var unwrappedRelatedTarget = originalEvent.relatedTarget;\n\n // X-Tag sets rel atedTarget on a CustomEvent. If they do that there is no\n // way to have r elatedTarget return the adjusted target but worse is that\n // the original Event might not have a relatedTarget so we hit an assert\n // when we try t o wrap it.\n if (unwrappedRelatedTarget) {\n // In IE we can get obj ects that are not EventTargets at this point.\n // Safari does not have a n EventTarget interface so revert to checking\n // for addEventListener a s an approximation.\n if (unwrappedRelatedTarget instanceof Object &&\n unwrappedRelatedTarget.addEventListener) {\n var relatedTarge t = wrap(unwrappedRelatedTarget);\n\n var adjusted =\n rel atedTargetResolution(event, currentTarget, relatedTarget);\n if (adjust ed === target)\n return true;\n } else {\n adjusted = null;\n }\n relatedTargetTable.set(event, adjusted);\n }\n }\n\n eventPhaseTable.set(event, phase);\n var type = event.type;\n\n var anyRemoved = false;\n targetTable.set(event, target);\n currentTarget Table.set(event, currentTarget);\n\n // Keep track of the invoke depth so tha t we only clean up the removed\n // listeners if we are in the outermost invo ke.\n listeners.depth++;\n\n for (var i = 0, len = listeners.length; i < l en; i++) {\n var listener = listeners[i];\n if (listener.removed) {\n anyRemoved = true;\n continue;\n }\n\n if (listener.type !== type ||\n !listener.capture && phase === CAPTURING_PHASE ||\n listener.capture && phase === BUBBLING_PHASE) {\n continue;\n } \n\n try {\n if (typeof listener.handler === 'function')\n listener.handler.call(currentTarget, event);\n else\n listener.h andler.handleEvent(event);\n\n if (stopImmediatePropagationTable.get(even t))\n return false;\n\n } catch (ex) {\n if (!pendingError) \n pendingError = ex;\n }\n }\n\n listeners.depth--;\n\n if (anyRemoved && listeners.depth === 0) {\n var copy = listeners.slice();\ n listeners.length = 0;\n for (var i = 0; i < copy.length; i++) {\n if (!copy[i].removed)\n listeners.push(copy[i]);\n }\n }\n \n return !stopPropagationTable.get(event);\n }\n\n function Listener(type, handler, capture) {\n this.type = type;\n this.handler = handler;\n th is.capture = Boolean(capture);\n }\n Listener.prototype = {\n equals: funct ion(that) {\n return this.handler === that.handler && this.type === that.ty pe &&\n this.capture === that.capture;\n },\n get removed() {\n return this.handler === null;\n },\n remove: function() {\n this. handler = null;\n }\n };\n\n var OriginalEvent = window.Event;\n OriginalE vent.prototype.polymerBlackList_ = {\n returnValue: true,\n // TODO(arv): keyLocation is part of KeyboardEvent but Firefox does not\n // support constr uctable KeyboardEvent so we keep it here for now.\n keyLocation: true\n };\n \n /**\n * Creates a new Event wrapper or wraps an existin native Event objec t.\n * @param {string|Event} type\n * @param {Object=} options\n * @constr uctor\n */\n function Event(type, options) {\n if (type instanceof Origina lEvent) {\n var impl = type;\n // In browsers that do not correctly su pport BeforeUnloadEvent we get to\n // the generic Event wrapper but we sti ll want to ensure we create a\n // BeforeUnloadEvent. Since BeforeUnloadEve nt calls super, we need to\n // prevent reentrancty.\n if (!OriginalBe foreUnloadEvent && impl.type === 'beforeunload' &&\n !(this instanceof BeforeUnloadEvent)) {\n return new BeforeUnloadEvent(impl);\n }\n setWrapper(impl, this);\n } else {\n return wrap(constructEvent(Origi nalEvent, 'Event', type, options));\n }\n }\n Event.prototype = {\n get target() {\n return targetTable.get(this);\n },\n get currentTarget() {\n return currentTargetTable.get(this);\n },\n get eventPhase() {\n return eventPhaseTable.get(this);\n },\n get path() {\n var eve ntPath = eventPathTable.get(this);\n if (!eventPath)\n return [];\n // TODO(arv): Event path should contain window.\n return eventPath.sli ce();\n },\n stopPropagation: function() {\n stopPropagationTable.set (this, true);\n },\n stopImmediatePropagation: function() {\n stopPro pagationTable.set(this, true);\n stopImmediatePropagationTable.set(this, tr ue);\n }\n };\n registerWrapper(OriginalEvent, Event, document.createEvent( 'Event'));\n\n function unwrapOptions(options) {\n if (!options || !options. relatedTarget)\n return options;\n return Object.create(options, {\n relatedTarget: {value: unwrap(options.relatedTarget)}\n });\n }\n\n funct ion registerGenericEvent(name, SuperEvent, prototype) {\n var OriginalEvent = window[name];\n var GenericEvent = function(type, options) {\n if (type instanceof OriginalEvent)\n setWrapper(type, this);\n else\n return wrap(constructEvent(OriginalEvent, name, type, options));\n };\n G enericEvent.prototype = Object.create(SuperEvent.prototype);\n if (prototype) \n mixin(GenericEvent.prototype, prototype);\n if (OriginalEvent) {\n // - Old versions of Safari fails on new FocusEvent (and others?).\n // - IE does not support event constructors.\n // - createEvent('FocusEvent') throws in Firefox.\n // => Try the best practice solution first and fallbac k to the old way\n // if needed.\n try {\n registerWrapper(Orig inalEvent, GenericEvent, new OriginalEvent('temp'));\n } catch (ex) {\n registerWrapper(OriginalEvent, GenericEvent,\n docume nt.createEvent(name));\n }\n }\n return GenericEvent;\n }\n\n var U IEvent = registerGenericEvent('UIEvent', Event);\n var CustomEvent = registerGe nericEvent('CustomEvent', Event);\n\n var relatedTargetProto = {\n get relat edTarget() {\n var relatedTarget = relatedTargetTable.get(this);\n // relatedTarget can be null.\n if (relatedTarget !== undefined)\n retu rn relatedTarget;\n return wrap(unwrap(this).relatedTarget);\n }\n };\n \n function getInitFunction(name, relatedTargetIndex) {\n return function() {\n arguments[relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]);\ n var impl = unwrap(this);\n impl[name].apply(impl, arguments);\n } ;\n }\n\n var mouseEventProto = mixin({\n initMouseEvent: getInitFunction(' initMouseEvent', 14)\n }, relatedTargetProto);\n\n var focusEventProto = mixin ({\n initFocusEvent: getInitFunction('initFocusEvent', 5)\n }, relatedTarget Proto);\n\n var MouseEvent = registerGenericEvent('MouseEvent', UIEvent, mouseE ventProto);\n var FocusEvent = registerGenericEvent('FocusEvent', UIEvent, focu sEventProto);\n\n // In case the browser does not support event constructors we polyfill that\n // by calling `createEvent('Foo')` and `initFooEvent` where th e arguments to\n // `initFooEvent` are derived from the registered default even t init dict.\n var defaultInitDicts = Object.create(null);\n\n var supportsEve ntConstructors = (function() {\n try {\n new window.FocusEvent('focus'); \n } catch (ex) {\n return false;\n }\n return true;\n })();\n\n /**\n * Constructs a new native event.\n */\n function constructEvent(Orig inalEvent, name, type, options) {\n if (supportsEventConstructors)\n ret urn new OriginalEvent(type, unwrapOptions(options));\n\n // Create the argume nts from the default dictionary.\n var event = unwrap(document.createEvent(na me));\n var defaultDict = defaultInitDicts[name];\n var args = [type];\n Object.keys(defaultDict).forEach(function(key) {\n var v = options != nul l && key in options ?\n options[key] : defaultDict[key];\n if (key === 'relatedTarget')\n v = unwrap(v);\n args.push(v);\n });\n event['init' + name].apply(event, args);\n return event;\n }\n\n if (!supp ortsEventConstructors) {\n var configureEventConstructor = function(name, ini tDict, superName) {\n if (superName) {\n var superDict = defaultInit Dicts[superName];\n initDict = mixin(mixin({}, superDict), initDict);\n }\n\n defaultInitDicts[name] = initDict;\n };\n\n // The order of the default event init dictionary keys is important, the\n // arguments to i nitFooEvent is derived from that.\n configureEventConstructor('Event', {bubbl es: false, cancelable: false});\n configureEventConstructor('CustomEvent', {d etail: null}, 'Event');\n configureEventConstructor('UIEvent', {view: null, d etail: 0}, 'Event');\n configureEventConstructor('MouseEvent', {\n scree nX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n button: 0,\n relatedTarget: null\n }, 'UIEvent');\n configureEvent Constructor('FocusEvent', {relatedTarget: null}, 'UIEvent');\n }\n\n // Safari 7 does not yet have BeforeUnloadEvent.\n // https://bugs.webkit.org/show_bug.c gi?id=120849\n var OriginalBeforeUnloadEvent = window.BeforeUnloadEvent;\n\n f unction BeforeUnloadEvent(impl) {\n Event.call(this, impl);\n }\n BeforeUnl oadEvent.prototype = Object.create(Event.prototype);\n mixin(BeforeUnloadEvent. prototype, {\n get returnValue() {\n return unsafeUnwrap(this).returnVal ue;\n },\n set returnValue(v) {\n unsafeUnwrap(this).returnValue = v; \n }\n });\n\n if (OriginalBeforeUnloadEvent)\n registerWrapper(Original BeforeUnloadEvent, BeforeUnloadEvent);\n\n function isValidListener(fun) {\n if (typeof fun === 'function')\n return true;\n return fun && fun.handl eEvent;\n }\n\n function isMutationEvent(type) {\n switch (type) {\n c ase 'DOMAttrModified':\n case 'DOMAttributeNameChanged':\n case 'DOMCh aracterDataModified':\n case 'DOMElementNameChanged':\n case 'DOMNodeI nserted':\n case 'DOMNodeInsertedIntoDocument':\n case 'DOMNodeRemoved ':\n case 'DOMNodeRemovedFromDocument':\n case 'DOMSubtreeModified':\n return true;\n }\n return false;\n }\n\n var OriginalEventTarget = window.EventTarget;\n\n /**\n * This represents a wrapper for an EventTarg et.\n * @param {!EventTarget} impl The original event target.\n * @construct or\n */\n function EventTarget(impl) {\n setWrapper(impl, this);\n }\n\n // Node and Window have different internal type checks in WebKit so we cannot\n // use the same method as the original function.\n var methodNames = [\n ' addEventListener',\n 'removeEventListener',\n 'dispatchEvent'\n ];\n\n [ Node, Window].forEach(function(constructor) {\n var p = constructor.prototype ;\n methodNames.forEach(function(name) {\n Object.defineProperty(p, name + '_', {value: p[name]});\n });\n });\n\n function getTargetToListenAt(wra pper) {\n if (wrapper instanceof wrappers.ShadowRoot)\n wrapper = wrappe r.host;\n return unwrap(wrapper);\n }\n\n EventTarget.prototype = {\n ad dEventListener: function(type, fun, capture) {\n if (!isValidListener(fun) || isMutationEvent(type))\n return;\n\n var listener = new Listener( type, fun, capture);\n var listeners = listenersTable.get(this);\n if (!listeners) {\n listeners = [];\n listeners.depth = 0;\n l istenersTable.set(this, listeners);\n } else {\n // Might have a dup licate.\n for (var i = 0; i < listeners.length; i++) {\n if (lis tener.equals(listeners[i]))\n return;\n }\n }\n\n li steners.push(listener);\n\n var target = getTargetToListenAt(this);\n target.addEventListener_(type, dispatchOriginalEvent, true);\n },\n remove EventListener: function(type, fun, capture) {\n capture = Boolean(capture); \n var listeners = listenersTable.get(this);\n if (!listeners)\n return;\n var count = 0, found = false;\n for (var i = 0; i < listen ers.length; i++) {\n if (listeners[i].type === type && listeners[i].captu re === capture) {\n count++;\n if (listeners[i].handler === fu n) {\n found = true;\n listeners[i].remove();\n } \n }\n }\n\n if (found && count === 1) {\n var target = getTargetToListenAt(this);\n target.removeEventListener_(type, dispatchOr iginalEvent, true);\n }\n },\n dispatchEvent: function(event) {\n // We want to use the native dispatchEvent because it triggers the default\n // actions (like checking a checkbox). However, if there are no listeners\n // in the composed tree then there are no events that will trigger and\n // listeners in the non composed tree that are part of the event path are\n // not notified.\n //\n // If we find out that there are no listen ers in the composed tree we add\n // a temporary listener to the target whi ch makes us get called back even\n // in that case.\n\n var nativeEven t = unwrap(event);\n var eventType = nativeEvent.type;\n\n // Allow di spatching the same event again. This is safe because if user\n // code call s this during an existing dispatch of the same event the\n // native dispat chEvent throws (that is required by the spec).\n handledEventsTable.set(nat iveEvent, false);\n\n // Force rendering since we prefer native dispatch an d that works on the\n // composed tree.\n scope.renderAllPending();\n\ n var tempListener;\n if (!hasListenerInAncestors(this, eventType)) {\ n tempListener = function() {};\n this.addEventListener(eventType, tempListener, true);\n }\n\n try {\n return unwrap(this).dispa tchEvent_(nativeEvent);\n } finally {\n if (tempListener)\n this.removeEventListener(eventType, tempListener, true);\n }\n }\n };\ n\n function hasListener(node, type) {\n var listeners = listenersTable.get( node);\n if (listeners) {\n for (var i = 0; i < listeners.length; i++) { \n if (!listeners[i].removed && listeners[i].type === type)\n re turn true;\n }\n }\n return false;\n }\n\n function hasListenerInAn cestors(target, type) {\n for (var node = unwrap(target); node; node = node.p arentNode) {\n if (hasListener(wrap(node), type))\n return true;\n }\n return false;\n }\n\n if (OriginalEventTarget)\n registerWrapper(O riginalEventTarget, EventTarget);\n\n function wrapEventTargetMethods(construct ors) {\n forwardMethodsToWrapper(constructors, methodNames);\n }\n\n var or iginalElementFromPoint = document.elementFromPoint;\n\n function elementFromPoi nt(self, document, x, y) {\n scope.renderAllPending();\n\n var element =\n wrap(originalElementFromPoint.call(unsafeUnwrap(document), x, y));\n if (!element)\n return null;\n var path = getEventPath(element, null);\n \n // scope the path to this TreeScope\n var idx = path.lastIndexOf(self); \n if (idx == -1)\n return null;\n else\n path = path.slice(0, i dx);\n\n // TODO(dfreedm): pass idx to eventRetargetting to avoid array copy\ n return eventRetargetting(path, self);\n }\n\n /**\n * Returns a functio n that is to be used as a getter for `onfoo` properties.\n * @param {string} n ame\n * @return {Function}\n */\n function getEventHandlerGetter(name) {\n return function() {\n var inlineEventHandlers = eventHandlersTable.get(t his);\n return inlineEventHandlers && inlineEventHandlers[name] &&\n inlineEventHandlers[name].value || null;\n };\n }\n\n /**\n * Returns a function that is to be used as a setter for `onfoo` properties.\n * @param {string} name\n * @return {Function}\n */\n function getEventHandlerSetter( name) {\n var eventType = name.slice(2);\n return function(value) {\n var inlineEventHandlers = eventHandlersTable.get(this);\n if (!inlineEvent Handlers) {\n inlineEventHandlers = Object.create(null);\n eventHa ndlersTable.set(this, inlineEventHandlers);\n }\n\n var old = inlineEv entHandlers[name];\n if (old)\n this.removeEventListener(eventType, old.wrapped, false);\n\n if (typeof value === 'function') {\n var wr apped = function(e) {\n var rv = value.call(this, e);\n if (rv === false)\n e.preventDefault();\n else if (name === 'onbef oreunload' && typeof rv === 'string')\n e.returnValue = rv;\n // mouseover uses true for preventDefault but preventDefault for\n // mouseover is ignored by browsers these day.\n };\n\n this.addEven tListener(eventType, wrapped, false);\n inlineEventHandlers[name] = {\n value: value,\n wrapped: wrapped\n };\n }\n };\n }\n\n scope.elementFromPoint = elementFromPoint;\n scope.getEventHandlerGett er = getEventHandlerGetter;\n scope.getEventHandlerSetter = getEventHandlerSett er;\n scope.wrapEventTargetMethods = wrapEventTargetMethods;\n scope.wrappers. BeforeUnloadEvent = BeforeUnloadEvent;\n scope.wrappers.CustomEvent = CustomEve nt;\n scope.wrappers.Event = Event;\n scope.wrappers.EventTarget = EventTarget ;\n scope.wrappers.FocusEvent = FocusEvent;\n scope.wrappers.MouseEvent = Mous eEvent;\n scope.wrappers.UIEvent = UIEvent;\n\n})(window.ShadowDOMPolyfill);\n" ,
93 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var UIEvent = s cope.wrappers.UIEvent;\n var mixin = scope.mixin;\n var registerWrapper = scop e.registerWrapper;\n var setWrapper = scope.setWrapper;\n var unsafeUnwrap = s cope.unsafeUnwrap;\n var wrap = scope.wrap;\n\n // TouchEvent is WebKit/Blink only.\n var OriginalTouchEvent = window.TouchEvent;\n if (!OriginalTouchEvent) \n return;\n\n var nativeEvent;\n try {\n nativeEvent = document.createE vent('TouchEvent');\n } catch (ex) {\n // In Chrome creating a TouchEvent fa ils if the feature is not turned on\n // which it isn't on desktop Chrome.\n return;\n }\n\n var nonEnumDescriptor = {enumerable: false};\n\n function nonEnum(obj, prop) {\n Object.defineProperty(obj, prop, nonEnumDescriptor);\n }\n\n function Touch(impl) {\n setWrapper(impl, this);\n }\n\n Touch.pro totype = {\n get target() {\n return wrap(unsafeUnwrap(this).target);\n }\n };\n\n var descr = {\n configurable: true,\n enumerable: true,\n get: null\n };\n\n [\n 'clientX',\n 'clientY',\n 'screenX',\n ' screenY',\n 'pageX',\n 'pageY',\n 'identifier',\n 'webkitRadiusX',\n 'webkitRadiusY',\n 'webkitRotationAngle',\n 'webkitForce'\n ].forEach (function(name) {\n descr.get = function() {\n return unsafeUnwrap(this) [name];\n };\n Object.defineProperty(Touch.prototype, name, descr);\n }); \n\n function TouchList() {\n this.length = 0;\n nonEnum(this, 'length'); \n }\n\n TouchList.prototype = {\n item: function(index) {\n return th is[index];\n }\n };\n\n function wrapTouchList(nativeTouchList) {\n var list = new TouchList();\n for (var i = 0; i < nativeTouchList.length; i++) {\ n list[i] = new Touch(nativeTouchList[i]);\n }\n list.length = i;\n return list;\n }\n\n function TouchEvent(impl) {\n UIEvent.call(this, imp l);\n }\n\n TouchEvent.prototype = Object.create(UIEvent.prototype);\n\n mixi n(TouchEvent.prototype, {\n get touches() {\n return wrapTouchList(unsaf eUnwrap(this).touches);\n },\n\n get targetTouches() {\n return wrapT ouchList(unsafeUnwrap(this).targetTouches);\n },\n\n get changedTouches() {\n return wrapTouchList(unsafeUnwrap(this).changedTouches);\n },\n\n initTouchEvent: function() {\n // The only way to use this is to reuse the TouchList from an existing\n // TouchEvent. Since this is WebKit/Blink pro prietary API we will not\n // implement this until someone screams.\n throw new Error('Not implemented');\n }\n });\n\n registerWrapper(OriginalT ouchEvent, TouchEvent, nativeEvent);\n\n scope.wrappers.Touch = Touch;\n scope .wrappers.TouchEvent = TouchEvent;\n scope.wrappers.TouchList = TouchList;\n\n} )(window.ShadowDOMPolyfill);\n\n", 93 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var UIEvent = s cope.wrappers.UIEvent;\n var mixin = scope.mixin;\n var registerWrapper = scop e.registerWrapper;\n var setWrapper = scope.setWrapper;\n var unsafeUnwrap = s cope.unsafeUnwrap;\n var wrap = scope.wrap;\n\n // TouchEvent is WebKit/Blink only.\n var OriginalTouchEvent = window.TouchEvent;\n if (!OriginalTouchEvent) \n return;\n\n var nativeEvent;\n try {\n nativeEvent = document.createE vent('TouchEvent');\n } catch (ex) {\n // In Chrome creating a TouchEvent fa ils if the feature is not turned on\n // which it isn't on desktop Chrome.\n return;\n }\n\n var nonEnumDescriptor = {enumerable: false};\n\n function nonEnum(obj, prop) {\n Object.defineProperty(obj, prop, nonEnumDescriptor);\n }\n\n function Touch(impl) {\n setWrapper(impl, this);\n }\n\n Touch.pro totype = {\n get target() {\n return wrap(unsafeUnwrap(this).target);\n }\n };\n\n var descr = {\n configurable: true,\n enumerable: true,\n get: null\n };\n\n [\n 'clientX',\n 'clientY',\n 'screenX',\n ' screenY',\n 'pageX',\n 'pageY',\n 'identifier',\n 'webkitRadiusX',\n 'webkitRadiusY',\n 'webkitRotationAngle',\n 'webkitForce'\n ].forEach (function(name) {\n descr.get = function() {\n return unsafeUnwrap(this) [name];\n };\n Object.defineProperty(Touch.prototype, name, descr);\n }); \n\n function TouchList() {\n this.length = 0;\n nonEnum(this, 'length'); \n }\n\n TouchList.prototype = {\n item: function(index) {\n return th is[index];\n }\n };\n\n function wrapTouchList(nativeTouchList) {\n var list = new TouchList();\n for (var i = 0; i < nativeTouchList.length; i++) {\ n list[i] = new Touch(nativeTouchList[i]);\n }\n list.length = i;\n return list;\n }\n\n function TouchEvent(impl) {\n UIEvent.call(this, imp l);\n }\n\n TouchEvent.prototype = Object.create(UIEvent.prototype);\n\n mixi n(TouchEvent.prototype, {\n get touches() {\n return wrapTouchList(unsaf eUnwrap(this).touches);\n },\n\n get targetTouches() {\n return wrapT ouchList(unsafeUnwrap(this).targetTouches);\n },\n\n get changedTouches() {\n return wrapTouchList(unsafeUnwrap(this).changedTouches);\n },\n\n initTouchEvent: function() {\n // The only way to use this is to reuse the TouchList from an existing\n // TouchEvent. Since this is WebKit/Blink pro prietary API we will not\n // implement this until someone screams.\n throw new Error('Not implemented');\n }\n });\n\n registerWrapper(OriginalT ouchEvent, TouchEvent, nativeEvent);\n\n scope.wrappers.Touch = Touch;\n scope .wrappers.TouchEvent = TouchEvent;\n scope.wrappers.TouchList = TouchList;\n\n} )(window.ShadowDOMPolyfill);\n\n",
94 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var unsafeUnwrap = scope .unsafeUnwrap;\n var wrap = scope.wrap;\n\n var nonEnumDescriptor = {enumerabl e: false};\n\n function nonEnum(obj, prop) {\n Object.defineProperty(obj, pr op, nonEnumDescriptor);\n }\n\n function NodeList() {\n this.length = 0;\n nonEnum(this, 'length');\n }\n NodeList.prototype = {\n item: function(i ndex) {\n return this[index];\n }\n };\n nonEnum(NodeList.prototype, ' item');\n\n function wrapNodeList(list) {\n if (list == null)\n return list;\n var wrapperList = new NodeList();\n for (var i = 0, length = list. length; i < length; i++) {\n wrapperList[i] = wrap(list[i]);\n }\n wr apperList.length = length;\n return wrapperList;\n }\n\n function addWrapNo deListMethod(wrapperConstructor, name) {\n wrapperConstructor.prototype[name] = function() {\n return wrapNodeList(\n unsafeUnwrap(this)[name]. apply(unsafeUnwrap(this), arguments));\n };\n }\n\n scope.wrappers.NodeList = NodeList;\n scope.addWrapNodeListMethod = addWrapNodeListMethod;\n scope.wr apNodeList = wrapNodeList;\n\n})(window.ShadowDOMPolyfill);\n", 94 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var unsafeUnwrap = scope .unsafeUnwrap;\n var wrap = scope.wrap;\n\n var nonEnumDescriptor = {enumerabl e: false};\n\n function nonEnum(obj, prop) {\n Object.defineProperty(obj, pr op, nonEnumDescriptor);\n }\n\n function NodeList() {\n this.length = 0;\n nonEnum(this, 'length');\n }\n NodeList.prototype = {\n item: function(i ndex) {\n return this[index];\n }\n };\n nonEnum(NodeList.prototype, ' item');\n\n function wrapNodeList(list) {\n if (list == null)\n return list;\n var wrapperList = new NodeList();\n for (var i = 0, length = list. length; i < length; i++) {\n wrapperList[i] = wrap(list[i]);\n }\n wr apperList.length = length;\n return wrapperList;\n }\n\n function addWrapNo deListMethod(wrapperConstructor, name) {\n wrapperConstructor.prototype[name] = function() {\n return wrapNodeList(\n unsafeUnwrap(this)[name]. apply(unsafeUnwrap(this), arguments));\n };\n }\n\n scope.wrappers.NodeList = NodeList;\n scope.addWrapNodeListMethod = addWrapNodeListMethod;\n scope.wr apNodeList = wrapNodeList;\n\n})(window.ShadowDOMPolyfill);\n",
95 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n // TODO(arv): I mplement.\n\n scope.wrapHTMLCollection = scope.wrapNodeList;\n scope.wrappers. HTMLCollection = scope.wrappers.NodeList;\n\n})(window.ShadowDOMPolyfill);\n", 95 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n // TODO(arv): I mplement.\n\n scope.wrapHTMLCollection = scope.wrapNodeList;\n scope.wrappers. HTMLCollection = scope.wrappers.NodeList;\n\n})(window.ShadowDOMPolyfill);\n",
96 "/**\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in t he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var EventTarge t = scope.wrappers.EventTarget;\n var NodeList = scope.wrappers.NodeList;\n va r TreeScope = scope.TreeScope;\n var assert = scope.assert;\n var defineWrapGe tter = scope.defineWrapGetter;\n var enqueueMutation = scope.enqueueMutation;\n var getTreeScope = scope.getTreeScope;\n var isWrapper = scope.isWrapper;\n var mixin = scope.mixin;\n var registerTransientObservers = scope.registerTrans ientObservers;\n var registerWrapper = scope.registerWrapper;\n var setTreeSco pe = scope.setTreeScope;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n var wrap = sco pe.wrap;\n var wrapIfNeeded = scope.wrapIfNeeded;\n var wrappers = scope.wrapp ers;\n\n function assertIsNodeWrapper(node) {\n assert(node instanceof Node) ;\n }\n\n function createOneElementNodeList(node) {\n var nodes = new NodeL ist();\n nodes[0] = node;\n nodes.length = 1;\n return nodes;\n }\n\n var surpressMutations = false;\n\n /**\n * Called before node is inserted in to a node to enqueue its removal from its\n * old parent.\n * @param {!Node} node The node that is about to be removed.\n * @param {!Node} parent The pare nt node that the node is being removed from.\n * @param {!NodeList} nodes The collected nodes.\n */\n function enqueueRemovalForInsertedNodes(node, parent, nodes) {\n enqueueMutation(parent, 'childList', {\n removedNodes: nodes ,\n previousSibling: node.previousSibling,\n nextSibling: node.nextSib ling\n });\n }\n\n function enqueueRemovalForInsertedDocumentFragment(df, n odes) {\n enqueueMutation(df, 'childList', {\n removedNodes: nodes\n });\n }\n\n /**\n * Collects nodes from a DocumentFragment or a Node for rem oval followed\n * by an insertion.\n *\n * This updates the internal point ers for node, previousNode and nextNode.\n */\n function collectNodes(node, p arentNode, previousNode, nextNode) {\n if (node instanceof DocumentFragment) {\n var nodes = collectNodesForDocumentFragment(node);\n\n // The extr a loop is to work around bugs with DocumentFragments in IE.\n surpressMutat ions = true;\n for (var i = nodes.length - 1; i >= 0; i--) {\n node. removeChild(nodes[i]);\n nodes[i].parentNode_ = parentNode;\n }\n surpressMutations = false;\n\n for (var i = 0; i < nodes.length; i++) {\ n nodes[i].previousSibling_ = nodes[i - 1] || previousNode;\n node s[i].nextSibling_ = nodes[i + 1] || nextNode;\n }\n\n if (previousNode )\n previousNode.nextSibling_ = nodes[0];\n if (nextNode)\n n extNode.previousSibling_ = nodes[nodes.length - 1];\n\n return nodes;\n }\n\n var nodes = createOneElementNodeList(node);\n var oldParent = node.p arentNode;\n if (oldParent) {\n // This will enqueue the mutation record for the removal as needed.\n oldParent.removeChild(node);\n }\n\n no de.parentNode_ = parentNode;\n node.previousSibling_ = previousNode;\n nod e.nextSibling_ = nextNode;\n if (previousNode)\n previousNode.nextSiblin g_ = node;\n if (nextNode)\n nextNode.previousSibling_ = node;\n\n re turn nodes;\n }\n\n function collectNodesNative(node) {\n if (node instance of DocumentFragment)\n return collectNodesForDocumentFragment(node);\n\n var nodes = createOneElementNodeList(node);\n var oldParent = node.parentNod e;\n if (oldParent)\n enqueueRemovalForInsertedNodes(node, oldParent, no des);\n return nodes;\n }\n\n function collectNodesForDocumentFragment(node ) {\n var nodes = new NodeList();\n var i = 0;\n for (var child = node. firstChild; child; child = child.nextSibling) {\n nodes[i++] = child;\n }\n nodes.length = i;\n enqueueRemovalForInsertedDocumentFragment(node, no des);\n return nodes;\n }\n\n function snapshotNodeList(nodeList) {\n // NodeLists are not live at the moment so just return the same object.\n retur n nodeList;\n }\n\n // http://dom.spec.whatwg.org/#node-is-inserted\n functio n nodeWasAdded(node, treeScope) {\n setTreeScope(node, treeScope);\n node. nodeIsInserted_();\n }\n\n function nodesWereAdded(nodes, parent) {\n var t reeScope = getTreeScope(parent);\n for (var i = 0; i < nodes.length; i++) {\n nodeWasAdded(nodes[i], treeScope);\n }\n }\n\n // http://dom.spec.wha twg.org/#node-is-removed\n function nodeWasRemoved(node) {\n setTreeScope(no de, new TreeScope(node, null));\n }\n\n function nodesWereRemoved(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n nodeWasRemoved(nodes[i]);\n }\n }\n\n function ensureSameOwnerDocument(parent, child) {\n var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ?\n parent : parent.ownerDocume nt;\n if (ownerDoc !== child.ownerDocument)\n ownerDoc.adoptNode(child); \n }\n\n function adoptNodesIfNeeded(owner, nodes) {\n if (!nodes.length)\n return;\n\n var ownerDoc = owner.ownerDocument;\n\n // All nodes hav e the same ownerDocument when we get here.\n if (ownerDoc === nodes[0].ownerD ocument)\n return;\n\n for (var i = 0; i < nodes.length; i++) {\n s cope.adoptNodeNoRemove(nodes[i], ownerDoc);\n }\n }\n\n function unwrapNode sForInsertion(owner, nodes) {\n adoptNodesIfNeeded(owner, nodes);\n var le ngth = nodes.length;\n\n if (length === 1)\n return unwrap(nodes[0]);\n\ n var df = unwrap(owner.ownerDocument.createDocumentFragment());\n for (va r i = 0; i < length; i++) {\n df.appendChild(unwrap(nodes[i]));\n }\n return df;\n }\n\n function clearChildNodes(wrapper) {\n if (wrapper.first Child_ !== undefined) {\n var child = wrapper.firstChild_;\n while (ch ild) {\n var tmp = child;\n child = child.nextSibling_;\n t mp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefined;\n }\n }\n wrapper.firstChild_ = wrapper.lastChild_ = undefined;\n }\n\n funct ion removeAllChildNodes(wrapper) {\n if (wrapper.invalidateShadowRenderer()) {\n var childWrapper = wrapper.firstChild;\n while (childWrapper) {\n assert(childWrapper.parentNode === wrapper);\n var nextSibling = c hildWrapper.nextSibling;\n var childNode = unwrap(childWrapper);\n var parentNode = childNode.parentNode;\n if (parentNode)\n orig inalRemoveChild.call(parentNode, childNode);\n childWrapper.previousSibli ng_ = childWrapper.nextSibling_ =\n childWrapper.parentNode_ = null;\ n childWrapper = nextSibling;\n }\n wrapper.firstChild_ = wrapp er.lastChild_ = null;\n } else {\n var node = unwrap(wrapper);\n va r child = node.firstChild;\n var nextSibling;\n while (child) {\n nextSibling = child.nextSibling;\n originalRemoveChild.call(node, chil d);\n child = nextSibling;\n }\n }\n }\n\n function invalidateP arent(node) {\n var p = node.parentNode;\n return p && p.invalidateShadowR enderer();\n }\n\n function cleanupNodes(nodes) {\n for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\n n.parentNode.removeChild(n);\n }\n }\n\n var originalImportNode = document.importNode;\n var originalClon eNode = window.Node.prototype.cloneNode;\n\n function cloneNode(node, deep, opt _doc) {\n var clone;\n if (opt_doc)\n clone = wrap(originalImportNode .call(opt_doc, unsafeUnwrap(node), false));\n else\n clone = wrap(origin alCloneNode.call(unsafeUnwrap(node), false));\n\n if (deep) {\n for (var child = node.firstChild; child; child = child.nextSibling) {\n clone.app endChild(cloneNode(child, true, opt_doc));\n }\n\n if (node instanceof wrappers.HTMLTemplateElement) {\n var cloneContent = clone.content;\n for (var child = node.content.firstChild;\n child;\n child = child.nextSibling) {\n cloneContent.appendChild(cloneNode(chil d, true, opt_doc));\n }\n }\n }\n // TODO(arv): Some HTML elem ents also clone other data like value.\n return clone;\n }\n\n function con tains(self, child) {\n if (!child || getTreeScope(self) !== getTreeScope(chil d))\n return false;\n\n for (var node = child; node; node = node.parentN ode) {\n if (node === self)\n return true;\n }\n return false; \n }\n\n var OriginalNode = window.Node;\n\n /**\n * This represents a wrap per of a native DOM node.\n * @param {!Node} original The original DOM node, a ka, the visual DOM node.\n * @constructor\n * @extends {EventTarget}\n */\ n function Node(original) {\n assert(original instanceof OriginalNode);\n\n EventTarget.call(this, original);\n\n // These properties are used to over ride the visual references with the\n // logical ones. If the value is undefi ned it means that the logical is the\n // same as the visual.\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.parentNode_ = und efined;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.firstChild_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.lastChild_ = undefined;\n\n /**\n * @type {N ode|undefined}\n * @private\n */\n this.nextSibling_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.previ ousSibling_ = undefined;\n\n this.treeScope_ = undefined;\n }\n\n var Origi nalDocumentFragment = window.DocumentFragment;\n var originalAppendChild = Orig inalNode.prototype.appendChild;\n var originalCompareDocumentPosition =\n OriginalNode.prototype.compareDocumentPosition;\n var originalInsertBefore = Or iginalNode.prototype.insertBefore;\n var originalRemoveChild = OriginalNode.pro totype.removeChild;\n var originalReplaceChild = OriginalNode.prototype.replace Child;\n\n var isIe = /Trident/.test(navigator.userAgent);\n\n var removeChild OriginalHelper = isIe ?\n function(parent, child) {\n try {\n originalRemoveChild.call(parent, child);\n } catch (ex) {\n i f (!(parent instanceof OriginalDocumentFragment))\n throw ex;\n }\n } :\n function(parent, child) {\n originalRemoveChild.cal l(parent, child);\n };\n\n Node.prototype = Object.create(EventTarget.prot otype);\n mixin(Node.prototype, {\n appendChild: function(childWrapper) {\n return this.insertBefore(childWrapper, null);\n },\n\n insertBefore: function(childWrapper, refWrapper) {\n assertIsNodeWrapper(childWrapper);\n \n var refNode;\n if (refWrapper) {\n if (isWrapper(refWrapper) ) {\n refNode = unwrap(refWrapper);\n } else {\n refNod e = refWrapper;\n refWrapper = wrap(refNode);\n }\n } else {\n refWrapper = null;\n refNode = null;\n }\n\n refWrap per && assert(refWrapper.parentNode === this);\n\n var nodes;\n var pr eviousNode =\n refWrapper ? refWrapper.previousSibling : this.lastChild ;\n\n var useNative = !this.invalidateShadowRenderer() &&\n !invalidateParent(childWrapper);\n\n if (useNative)\n nodes = collectNodesNative(childWrapper);\n else\n nodes = collectNodes(chil dWrapper, this, previousNode, refWrapper);\n\n if (useNative) {\n en sureSameOwnerDocument(this, childWrapper);\n clearChildNodes(this);\n originalInsertBefore.call(unsafeUnwrap(this), unwrap(childWrapper), refNode) ;\n } else {\n if (!previousNode)\n this.firstChild_ = node s[0];\n if (!refWrapper) {\n this.lastChild_ = nodes[nodes.lengt h - 1];\n if (this.firstChild_ === undefined)\n this.firstCh ild_ = this.firstChild;\n }\n\n var parentNode = refNode ? refNode .parentNode : unsafeUnwrap(this);\n\n // insertBefore refWrapper no matte r what the parent is?\n if (parentNode) {\n originalInsertBefore .call(parentNode,\n unwrapNodesForInsertion(this, nodes), refNode); \n } else {\n adoptNodesIfNeeded(this, nodes);\n }\n }\n\n enqueueMutation(this, 'childList', {\n addedNodes: nodes,\n nextSibling: refWrapper,\n previousSibling: previousNode\n }); \n\n nodesWereAdded(nodes, this);\n\n return childWrapper;\n },\n\n removeChild: function(childWrapper) {\n assertIsNodeWrapper(childWrappe r);\n if (childWrapper.parentNode !== this) {\n // IE has invalid DO M trees at times.\n var found = false;\n var childNodes = this.chi ldNodes;\n for (var ieChild = this.firstChild; ieChild;\n ieC hild = ieChild.nextSibling) {\n if (ieChild === childWrapper) {\n found = true;\n break;\n }\n }\n if (!fo und) {\n // TODO(arv): DOMException\n throw new Error('NotFoun dError');\n }\n }\n\n var childNode = unwrap(childWrapper);\n var childWrapperNextSibling = childWrapper.nextSibling;\n var childWrap perPreviousSibling = childWrapper.previousSibling;\n\n if (this.invalidateS hadowRenderer()) {\n // We need to remove the real node from the DOM befo re updating the\n // pointers. This is so that that mutation event is dis patched before\n // the pointers have changed.\n var thisFirstChil d = this.firstChild;\n var thisLastChild = this.lastChild;\n\n var parentNode = childNode.parentNode;\n if (parentNode)\n removeCh ildOriginalHelper(parentNode, childNode);\n\n if (thisFirstChild === chil dWrapper)\n this.firstChild_ = childWrapperNextSibling;\n if (th isLastChild === childWrapper)\n this.lastChild_ = childWrapperPreviousS ibling;\n if (childWrapperPreviousSibling)\n childWrapperPreviou sSibling.nextSibling_ = childWrapperNextSibling;\n if (childWrapperNextSi bling) {\n childWrapperNextSibling.previousSibling_ =\n ch ildWrapperPreviousSibling;\n }\n\n childWrapper.previousSibling_ = childWrapper.nextSibling_ =\n childWrapper.parentNode_ = undefined;\ n } else {\n clearChildNodes(this);\n removeChildOriginalHelp er(unsafeUnwrap(this), childNode);\n }\n\n if (!surpressMutations) {\n enqueueMutation(this, 'childList', {\n removedNodes: createOneE lementNodeList(childWrapper),\n nextSibling: childWrapperNextSibling,\n previousSibling: childWrapperPreviousSibling\n });\n }\n\n registerTransientObservers(this, childWrapper);\n\n return childWrapp er;\n },\n\n replaceChild: function(newChildWrapper, oldChildWrapper) {\n assertIsNodeWrapper(newChildWrapper);\n\n var oldChildNode;\n if (isWrapper(oldChildWrapper)) {\n oldChildNode = unwrap(oldChildWrapper);\ n } else {\n oldChildNode = oldChildWrapper;\n oldChildWrappe r = wrap(oldChildNode);\n }\n\n if (oldChildWrapper.parentNode !== thi s) {\n // TODO(arv): DOMException\n throw new Error('NotFoundError ');\n }\n\n var nextNode = oldChildWrapper.nextSibling;\n var pre viousNode = oldChildWrapper.previousSibling;\n var nodes;\n\n var useN ative = !this.invalidateShadowRenderer() &&\n !invalidatePa rent(newChildWrapper);\n\n if (useNative) {\n nodes = collectNodesNa tive(newChildWrapper);\n } else {\n if (nextNode === newChildWrapper )\n nextNode = newChildWrapper.nextSibling;\n nodes = collectNod es(newChildWrapper, this, previousNode, nextNode);\n }\n\n if (!useNat ive) {\n if (this.firstChild === oldChildWrapper)\n this.firstCh ild_ = nodes[0];\n if (this.lastChild === oldChildWrapper)\n thi s.lastChild_ = nodes[nodes.length - 1];\n\n oldChildWrapper.previousSibli ng_ = oldChildWrapper.nextSibling_ =\n oldChildWrapper.parentNode_ = undefined;\n\n // replaceChild no matter what the parent is?\n if (oldChildNode.parentNode) {\n originalReplaceChild.call(\n oldChildNode.parentNode,\n unwrapNodesForInsertion(this, nodes),\n oldChildNode);\n }\n } else {\n ensureSameOwner Document(this, newChildWrapper);\n clearChildNodes(this);\n origin alReplaceChild.call(unsafeUnwrap(this), unwrap(newChildWrapper),\n oldChildNode);\n }\n\n enqueueMutation(this, 'chil dList', {\n addedNodes: nodes,\n removedNodes: createOneElementNod eList(oldChildWrapper),\n nextSibling: nextNode,\n previousSibling : previousNode\n });\n\n nodeWasRemoved(oldChildWrapper);\n nodes WereAdded(nodes, this);\n\n return oldChildWrapper;\n },\n\n /**\n * Called after a node was inserted. Subclasses override this to invalidate\n * the renderer as needed.\n * @private\n */\n nodeIsInserted_: fun ction() {\n for (var child = this.firstChild; child; child = child.nextSibl ing) {\n child.nodeIsInserted_();\n }\n },\n\n hasChildNodes: function() {\n return this.firstChild !== null;\n },\n\n /** @type {N ode} */\n get parentNode() {\n // If the parentNode has not been overrid den, use the original parentNode.\n return this.parentNode_ !== undefined ? \n this.parentNode_ : wrap(unsafeUnwrap(this).parentNode);\n },\n\n /** @type {Node} */\n get firstChild() {\n return this.firstChild_ != = undefined ?\n this.firstChild_ : wrap(unsafeUnwrap(this).firstChild); \n },\n\n /** @type {Node} */\n get lastChild() {\n return this.la stChild_ !== undefined ?\n this.lastChild_ : wrap(unsafeUnwrap(this).la stChild);\n },\n\n /** @type {Node} */\n get nextSibling() {\n ret urn this.nextSibling_ !== undefined ?\n this.nextSibling_ : wrap(unsafe Unwrap(this).nextSibling);\n },\n\n /** @type {Node} */\n get previousS ibling() {\n return this.previousSibling_ !== undefined ?\n this.p reviousSibling_ : wrap(unsafeUnwrap(this).previousSibling);\n },\n\n get p arentElement() {\n var p = this.parentNode;\n while (p && p.nodeType ! == Node.ELEMENT_NODE) {\n p = p.parentNode;\n }\n return p;\n },\n\n get textContent() {\n // TODO(arv): This should fallback to uns afeUnwrap(this).textContent if there\n // are no shadow trees below or abov e the context node.\n var s = '';\n for (var child = this.firstChild; child; child = child.nextSibling) {\n if (child.nodeType != Node.COMMENT_ NODE) {\n s += child.textContent;\n }\n }\n return s;\ n },\n set textContent(textContent) {\n var removedNodes = snapshotNo deList(this.childNodes);\n\n if (this.invalidateShadowRenderer()) {\n removeAllChildNodes(this);\n if (textContent !== '') {\n var t extNode = unsafeUnwrap(this).ownerDocument.createTextNode(textContent);\n this.appendChild(textNode);\n }\n } else {\n clearChildNod es(this);\n unsafeUnwrap(this).textContent = textContent;\n }\n\n var addedNodes = snapshotNodeList(this.childNodes);\n\n enqueueMutation( this, 'childList', {\n addedNodes: addedNodes,\n removedNodes: rem ovedNodes\n });\n\n nodesWereRemoved(removedNodes);\n nodesWereAd ded(addedNodes, this);\n },\n\n get childNodes() {\n var wrapperList = new NodeList();\n var i = 0;\n for (var child = this.firstChild; chi ld; child = child.nextSibling) {\n wrapperList[i++] = child;\n }\n wrapperList.length = i;\n return wrapperList;\n },\n\n cloneNode: function(deep) {\n return cloneNode(this, deep);\n },\n\n contains: function(child) {\n return contains(this, wrapIfNeeded(child));\n },\n\n compareDocumentPosition: function(otherNode) {\n // This only wraps, it therefore only operates on the composed DOM and not\n // the logical DOM.\ n return originalCompareDocumentPosition.call(unsafeUnwrap(this),\n unwrapIfNeeded(otherNode));\n },\n\ n normalize: function() {\n var nodes = snapshotNodeList(this.childNodes );\n var remNodes = [];\n var s = '';\n var modNode;\n\n for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\n if (n.n odeType === Node.TEXT_NODE) {\n if (!modNode && !n.data.length)\n this.removeNode(n);\n else if (!modNode)\n modNode = n ;\n else {\n s += n.data;\n remNodes.push(n);\n }\n } else {\n if (modNode && remNodes.length) {\n modNode.data += s;\n cleanupNodes(remNodes);\n }\n remNodes = [];\n s = '';\n modNode = null;\n if (n.childNodes.length)\n n.normalize();\n }\n }\n\n // handle case where >1 text nodes are the last children\n if (modNode && r emNodes.length) {\n modNode.data += s;\n cleanupNodes(remNodes);\n }\n }\n });\n\n defineWrapGetter(Node, 'ownerDocument');\n\n // We u se a DocumentFragment as a base and then delete the properties of\n // Document Fragment.prototype from the wrapper Node. Since delete makes\n // objects slow in some JS engines we recreate the prototype object.\n registerWrapper(Original Node, Node, document.createDocumentFragment());\n delete Node.prototype.querySe lector;\n delete Node.prototype.querySelectorAll;\n Node.prototype = mixin(Obj ect.create(EventTarget.prototype), Node.prototype);\n\n scope.cloneNode = clone Node;\n scope.nodeWasAdded = nodeWasAdded;\n scope.nodeWasRemoved = nodeWasRem oved;\n scope.nodesWereAdded = nodesWereAdded;\n scope.nodesWereRemoved = node sWereRemoved;\n scope.originalInsertBefore = originalInsertBefore;\n scope.ori ginalRemoveChild = originalRemoveChild;\n scope.snapshotNodeList = snapshotNode List;\n scope.wrappers.Node = Node;\n\n})(window.ShadowDOMPolyfill);\n", 96 "/**\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in t he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var EventTarge t = scope.wrappers.EventTarget;\n var NodeList = scope.wrappers.NodeList;\n va r TreeScope = scope.TreeScope;\n var assert = scope.assert;\n var defineWrapGe tter = scope.defineWrapGetter;\n var enqueueMutation = scope.enqueueMutation;\n var getTreeScope = scope.getTreeScope;\n var isWrapper = scope.isWrapper;\n var mixin = scope.mixin;\n var registerTransientObservers = scope.registerTrans ientObservers;\n var registerWrapper = scope.registerWrapper;\n var setTreeSco pe = scope.setTreeScope;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n var wrap = sco pe.wrap;\n var wrapIfNeeded = scope.wrapIfNeeded;\n var wrappers = scope.wrapp ers;\n\n function assertIsNodeWrapper(node) {\n assert(node instanceof Node) ;\n }\n\n function createOneElementNodeList(node) {\n var nodes = new NodeL ist();\n nodes[0] = node;\n nodes.length = 1;\n return nodes;\n }\n\n var surpressMutations = false;\n\n /**\n * Called before node is inserted in to a node to enqueue its removal from its\n * old parent.\n * @param {!Node} node The node that is about to be removed.\n * @param {!Node} parent The pare nt node that the node is being removed from.\n * @param {!NodeList} nodes The collected nodes.\n */\n function enqueueRemovalForInsertedNodes(node, parent, nodes) {\n enqueueMutation(parent, 'childList', {\n removedNodes: nodes ,\n previousSibling: node.previousSibling,\n nextSibling: node.nextSib ling\n });\n }\n\n function enqueueRemovalForInsertedDocumentFragment(df, n odes) {\n enqueueMutation(df, 'childList', {\n removedNodes: nodes\n });\n }\n\n /**\n * Collects nodes from a DocumentFragment or a Node for rem oval followed\n * by an insertion.\n *\n * This updates the internal point ers for node, previousNode and nextNode.\n */\n function collectNodes(node, p arentNode, previousNode, nextNode) {\n if (node instanceof DocumentFragment) {\n var nodes = collectNodesForDocumentFragment(node);\n\n // The extr a loop is to work around bugs with DocumentFragments in IE.\n surpressMutat ions = true;\n for (var i = nodes.length - 1; i >= 0; i--) {\n node. removeChild(nodes[i]);\n nodes[i].parentNode_ = parentNode;\n }\n surpressMutations = false;\n\n for (var i = 0; i < nodes.length; i++) {\ n nodes[i].previousSibling_ = nodes[i - 1] || previousNode;\n node s[i].nextSibling_ = nodes[i + 1] || nextNode;\n }\n\n if (previousNode )\n previousNode.nextSibling_ = nodes[0];\n if (nextNode)\n n extNode.previousSibling_ = nodes[nodes.length - 1];\n\n return nodes;\n }\n\n var nodes = createOneElementNodeList(node);\n var oldParent = node.p arentNode;\n if (oldParent) {\n // This will enqueue the mutation record for the removal as needed.\n oldParent.removeChild(node);\n }\n\n no de.parentNode_ = parentNode;\n node.previousSibling_ = previousNode;\n nod e.nextSibling_ = nextNode;\n if (previousNode)\n previousNode.nextSiblin g_ = node;\n if (nextNode)\n nextNode.previousSibling_ = node;\n\n re turn nodes;\n }\n\n function collectNodesNative(node) {\n if (node instance of DocumentFragment)\n return collectNodesForDocumentFragment(node);\n\n var nodes = createOneElementNodeList(node);\n var oldParent = node.parentNod e;\n if (oldParent)\n enqueueRemovalForInsertedNodes(node, oldParent, no des);\n return nodes;\n }\n\n function collectNodesForDocumentFragment(node ) {\n var nodes = new NodeList();\n var i = 0;\n for (var child = node. firstChild; child; child = child.nextSibling) {\n nodes[i++] = child;\n }\n nodes.length = i;\n enqueueRemovalForInsertedDocumentFragment(node, no des);\n return nodes;\n }\n\n function snapshotNodeList(nodeList) {\n // NodeLists are not live at the moment so just return the same object.\n retur n nodeList;\n }\n\n // http://dom.spec.whatwg.org/#node-is-inserted\n functio n nodeWasAdded(node, treeScope) {\n setTreeScope(node, treeScope);\n node. nodeIsInserted_();\n }\n\n function nodesWereAdded(nodes, parent) {\n var t reeScope = getTreeScope(parent);\n for (var i = 0; i < nodes.length; i++) {\n nodeWasAdded(nodes[i], treeScope);\n }\n }\n\n // http://dom.spec.wha twg.org/#node-is-removed\n function nodeWasRemoved(node) {\n setTreeScope(no de, new TreeScope(node, null));\n }\n\n function nodesWereRemoved(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n nodeWasRemoved(nodes[i]);\n }\n }\n\n function ensureSameOwnerDocument(parent, child) {\n var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ?\n parent : parent.ownerDocume nt;\n if (ownerDoc !== child.ownerDocument)\n ownerDoc.adoptNode(child); \n }\n\n function adoptNodesIfNeeded(owner, nodes) {\n if (!nodes.length)\n return;\n\n var ownerDoc = owner.ownerDocument;\n\n // All nodes hav e the same ownerDocument when we get here.\n if (ownerDoc === nodes[0].ownerD ocument)\n return;\n\n for (var i = 0; i < nodes.length; i++) {\n s cope.adoptNodeNoRemove(nodes[i], ownerDoc);\n }\n }\n\n function unwrapNode sForInsertion(owner, nodes) {\n adoptNodesIfNeeded(owner, nodes);\n var le ngth = nodes.length;\n\n if (length === 1)\n return unwrap(nodes[0]);\n\ n var df = unwrap(owner.ownerDocument.createDocumentFragment());\n for (va r i = 0; i < length; i++) {\n df.appendChild(unwrap(nodes[i]));\n }\n return df;\n }\n\n function clearChildNodes(wrapper) {\n if (wrapper.first Child_ !== undefined) {\n var child = wrapper.firstChild_;\n while (ch ild) {\n var tmp = child;\n child = child.nextSibling_;\n t mp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefined;\n }\n }\n wrapper.firstChild_ = wrapper.lastChild_ = undefined;\n }\n\n funct ion removeAllChildNodes(wrapper) {\n if (wrapper.invalidateShadowRenderer()) {\n var childWrapper = wrapper.firstChild;\n while (childWrapper) {\n assert(childWrapper.parentNode === wrapper);\n var nextSibling = c hildWrapper.nextSibling;\n var childNode = unwrap(childWrapper);\n var parentNode = childNode.parentNode;\n if (parentNode)\n orig inalRemoveChild.call(parentNode, childNode);\n childWrapper.previousSibli ng_ = childWrapper.nextSibling_ =\n childWrapper.parentNode_ = null;\ n childWrapper = nextSibling;\n }\n wrapper.firstChild_ = wrapp er.lastChild_ = null;\n } else {\n var node = unwrap(wrapper);\n va r child = node.firstChild;\n var nextSibling;\n while (child) {\n nextSibling = child.nextSibling;\n originalRemoveChild.call(node, chil d);\n child = nextSibling;\n }\n }\n }\n\n function invalidateP arent(node) {\n var p = node.parentNode;\n return p && p.invalidateShadowR enderer();\n }\n\n function cleanupNodes(nodes) {\n for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\n n.parentNode.removeChild(n);\n }\n }\n\n var originalImportNode = document.importNode;\n var originalClon eNode = window.Node.prototype.cloneNode;\n\n function cloneNode(node, deep, opt _doc) {\n var clone;\n if (opt_doc)\n clone = wrap(originalImportNode .call(opt_doc, unsafeUnwrap(node), false));\n else\n clone = wrap(origin alCloneNode.call(unsafeUnwrap(node), false));\n\n if (deep) {\n for (var child = node.firstChild; child; child = child.nextSibling) {\n clone.app endChild(cloneNode(child, true, opt_doc));\n }\n\n if (node instanceof wrappers.HTMLTemplateElement) {\n var cloneContent = clone.content;\n for (var child = node.content.firstChild;\n child;\n child = child.nextSibling) {\n cloneContent.appendChild(cloneNode(chil d, true, opt_doc));\n }\n }\n }\n // TODO(arv): Some HTML elem ents also clone other data like value.\n return clone;\n }\n\n function con tains(self, child) {\n if (!child || getTreeScope(self) !== getTreeScope(chil d))\n return false;\n\n for (var node = child; node; node = node.parentN ode) {\n if (node === self)\n return true;\n }\n return false; \n }\n\n var OriginalNode = window.Node;\n\n /**\n * This represents a wrap per of a native DOM node.\n * @param {!Node} original The original DOM node, a ka, the visual DOM node.\n * @constructor\n * @extends {EventTarget}\n */\ n function Node(original) {\n assert(original instanceof OriginalNode);\n\n EventTarget.call(this, original);\n\n // These properties are used to over ride the visual references with the\n // logical ones. If the value is undefi ned it means that the logical is the\n // same as the visual.\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.parentNode_ = und efined;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.firstChild_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.lastChild_ = undefined;\n\n /**\n * @type {N ode|undefined}\n * @private\n */\n this.nextSibling_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.previ ousSibling_ = undefined;\n\n this.treeScope_ = undefined;\n }\n\n var Origi nalDocumentFragment = window.DocumentFragment;\n var originalAppendChild = Orig inalNode.prototype.appendChild;\n var originalCompareDocumentPosition =\n OriginalNode.prototype.compareDocumentPosition;\n var originalInsertBefore = Or iginalNode.prototype.insertBefore;\n var originalRemoveChild = OriginalNode.pro totype.removeChild;\n var originalReplaceChild = OriginalNode.prototype.replace Child;\n\n var isIe = /Trident/.test(navigator.userAgent);\n\n var removeChild OriginalHelper = isIe ?\n function(parent, child) {\n try {\n originalRemoveChild.call(parent, child);\n } catch (ex) {\n i f (!(parent instanceof OriginalDocumentFragment))\n throw ex;\n }\n } :\n function(parent, child) {\n originalRemoveChild.cal l(parent, child);\n };\n\n Node.prototype = Object.create(EventTarget.prot otype);\n mixin(Node.prototype, {\n appendChild: function(childWrapper) {\n return this.insertBefore(childWrapper, null);\n },\n\n insertBefore: function(childWrapper, refWrapper) {\n assertIsNodeWrapper(childWrapper);\n \n var refNode;\n if (refWrapper) {\n if (isWrapper(refWrapper) ) {\n refNode = unwrap(refWrapper);\n } else {\n refNod e = refWrapper;\n refWrapper = wrap(refNode);\n }\n } else {\n refWrapper = null;\n refNode = null;\n }\n\n refWrap per && assert(refWrapper.parentNode === this);\n\n var nodes;\n var pr eviousNode =\n refWrapper ? refWrapper.previousSibling : this.lastChild ;\n\n var useNative = !this.invalidateShadowRenderer() &&\n !invalidateParent(childWrapper);\n\n if (useNative)\n nodes = collectNodesNative(childWrapper);\n else\n nodes = collectNodes(chil dWrapper, this, previousNode, refWrapper);\n\n if (useNative) {\n en sureSameOwnerDocument(this, childWrapper);\n clearChildNodes(this);\n originalInsertBefore.call(unsafeUnwrap(this), unwrap(childWrapper), refNode) ;\n } else {\n if (!previousNode)\n this.firstChild_ = node s[0];\n if (!refWrapper) {\n this.lastChild_ = nodes[nodes.lengt h - 1];\n if (this.firstChild_ === undefined)\n this.firstCh ild_ = this.firstChild;\n }\n\n var parentNode = refNode ? refNode .parentNode : unsafeUnwrap(this);\n\n // insertBefore refWrapper no matte r what the parent is?\n if (parentNode) {\n originalInsertBefore .call(parentNode,\n unwrapNodesForInsertion(this, nodes), refNode); \n } else {\n adoptNodesIfNeeded(this, nodes);\n }\n }\n\n enqueueMutation(this, 'childList', {\n addedNodes: nodes,\n nextSibling: refWrapper,\n previousSibling: previousNode\n }); \n\n nodesWereAdded(nodes, this);\n\n return childWrapper;\n },\n\n removeChild: function(childWrapper) {\n assertIsNodeWrapper(childWrappe r);\n if (childWrapper.parentNode !== this) {\n // IE has invalid DO M trees at times.\n var found = false;\n var childNodes = this.chi ldNodes;\n for (var ieChild = this.firstChild; ieChild;\n ieC hild = ieChild.nextSibling) {\n if (ieChild === childWrapper) {\n found = true;\n break;\n }\n }\n if (!fo und) {\n // TODO(arv): DOMException\n throw new Error('NotFoun dError');\n }\n }\n\n var childNode = unwrap(childWrapper);\n var childWrapperNextSibling = childWrapper.nextSibling;\n var childWrap perPreviousSibling = childWrapper.previousSibling;\n\n if (this.invalidateS hadowRenderer()) {\n // We need to remove the real node from the DOM befo re updating the\n // pointers. This is so that that mutation event is dis patched before\n // the pointers have changed.\n var thisFirstChil d = this.firstChild;\n var thisLastChild = this.lastChild;\n\n var parentNode = childNode.parentNode;\n if (parentNode)\n removeCh ildOriginalHelper(parentNode, childNode);\n\n if (thisFirstChild === chil dWrapper)\n this.firstChild_ = childWrapperNextSibling;\n if (th isLastChild === childWrapper)\n this.lastChild_ = childWrapperPreviousS ibling;\n if (childWrapperPreviousSibling)\n childWrapperPreviou sSibling.nextSibling_ = childWrapperNextSibling;\n if (childWrapperNextSi bling) {\n childWrapperNextSibling.previousSibling_ =\n ch ildWrapperPreviousSibling;\n }\n\n childWrapper.previousSibling_ = childWrapper.nextSibling_ =\n childWrapper.parentNode_ = undefined;\ n } else {\n clearChildNodes(this);\n removeChildOriginalHelp er(unsafeUnwrap(this), childNode);\n }\n\n if (!surpressMutations) {\n enqueueMutation(this, 'childList', {\n removedNodes: createOneE lementNodeList(childWrapper),\n nextSibling: childWrapperNextSibling,\n previousSibling: childWrapperPreviousSibling\n });\n }\n\n registerTransientObservers(this, childWrapper);\n\n return childWrapp er;\n },\n\n replaceChild: function(newChildWrapper, oldChildWrapper) {\n assertIsNodeWrapper(newChildWrapper);\n\n var oldChildNode;\n if (isWrapper(oldChildWrapper)) {\n oldChildNode = unwrap(oldChildWrapper);\ n } else {\n oldChildNode = oldChildWrapper;\n oldChildWrappe r = wrap(oldChildNode);\n }\n\n if (oldChildWrapper.parentNode !== thi s) {\n // TODO(arv): DOMException\n throw new Error('NotFoundError ');\n }\n\n var nextNode = oldChildWrapper.nextSibling;\n var pre viousNode = oldChildWrapper.previousSibling;\n var nodes;\n\n var useN ative = !this.invalidateShadowRenderer() &&\n !invalidatePa rent(newChildWrapper);\n\n if (useNative) {\n nodes = collectNodesNa tive(newChildWrapper);\n } else {\n if (nextNode === newChildWrapper )\n nextNode = newChildWrapper.nextSibling;\n nodes = collectNod es(newChildWrapper, this, previousNode, nextNode);\n }\n\n if (!useNat ive) {\n if (this.firstChild === oldChildWrapper)\n this.firstCh ild_ = nodes[0];\n if (this.lastChild === oldChildWrapper)\n thi s.lastChild_ = nodes[nodes.length - 1];\n\n oldChildWrapper.previousSibli ng_ = oldChildWrapper.nextSibling_ =\n oldChildWrapper.parentNode_ = undefined;\n\n // replaceChild no matter what the parent is?\n if (oldChildNode.parentNode) {\n originalReplaceChild.call(\n oldChildNode.parentNode,\n unwrapNodesForInsertion(this, nodes),\n oldChildNode);\n }\n } else {\n ensureSameOwner Document(this, newChildWrapper);\n clearChildNodes(this);\n origin alReplaceChild.call(unsafeUnwrap(this), unwrap(newChildWrapper),\n oldChildNode);\n }\n\n enqueueMutation(this, 'chil dList', {\n addedNodes: nodes,\n removedNodes: createOneElementNod eList(oldChildWrapper),\n nextSibling: nextNode,\n previousSibling : previousNode\n });\n\n nodeWasRemoved(oldChildWrapper);\n nodes WereAdded(nodes, this);\n\n return oldChildWrapper;\n },\n\n /**\n * Called after a node was inserted. Subclasses override this to invalidate\n * the renderer as needed.\n * @private\n */\n nodeIsInserted_: fun ction() {\n for (var child = this.firstChild; child; child = child.nextSibl ing) {\n child.nodeIsInserted_();\n }\n },\n\n hasChildNodes: function() {\n return this.firstChild !== null;\n },\n\n /** @type {N ode} */\n get parentNode() {\n // If the parentNode has not been overrid den, use the original parentNode.\n return this.parentNode_ !== undefined ? \n this.parentNode_ : wrap(unsafeUnwrap(this).parentNode);\n },\n\n /** @type {Node} */\n get firstChild() {\n return this.firstChild_ != = undefined ?\n this.firstChild_ : wrap(unsafeUnwrap(this).firstChild); \n },\n\n /** @type {Node} */\n get lastChild() {\n return this.la stChild_ !== undefined ?\n this.lastChild_ : wrap(unsafeUnwrap(this).la stChild);\n },\n\n /** @type {Node} */\n get nextSibling() {\n ret urn this.nextSibling_ !== undefined ?\n this.nextSibling_ : wrap(unsafe Unwrap(this).nextSibling);\n },\n\n /** @type {Node} */\n get previousS ibling() {\n return this.previousSibling_ !== undefined ?\n this.p reviousSibling_ : wrap(unsafeUnwrap(this).previousSibling);\n },\n\n get p arentElement() {\n var p = this.parentNode;\n while (p && p.nodeType ! == Node.ELEMENT_NODE) {\n p = p.parentNode;\n }\n return p;\n },\n\n get textContent() {\n // TODO(arv): This should fallback to uns afeUnwrap(this).textContent if there\n // are no shadow trees below or abov e the context node.\n var s = '';\n for (var child = this.firstChild; child; child = child.nextSibling) {\n if (child.nodeType != Node.COMMENT_ NODE) {\n s += child.textContent;\n }\n }\n return s;\ n },\n set textContent(textContent) {\n if (textContent == null) text Content = '';\n var removedNodes = snapshotNodeList(this.childNodes);\n\n if (this.invalidateShadowRenderer()) {\n removeAllChildNodes(this);\n if (textContent !== '') {\n var textNode = unsafeUnwrap(this).o wnerDocument.createTextNode(textContent);\n this.appendChild(textNode); \n }\n } else {\n clearChildNodes(this);\n unsafeUnwra p(this).textContent = textContent;\n }\n\n var addedNodes = snapshotNo deList(this.childNodes);\n\n enqueueMutation(this, 'childList', {\n addedNodes: addedNodes,\n removedNodes: removedNodes\n });\n\n nodesWereRemoved(removedNodes);\n nodesWereAdded(addedNodes, this);\n }, \n\n get childNodes() {\n var wrapperList = new NodeList();\n var i = 0;\n for (var child = this.firstChild; child; child = child.nextSibling) {\n wrapperList[i++] = child;\n }\n wrapperList.length = i;\n return wrapperList;\n },\n\n cloneNode: function(deep) {\n retur n cloneNode(this, deep);\n },\n\n contains: function(child) {\n retur n contains(this, wrapIfNeeded(child));\n },\n\n compareDocumentPosition: f unction(otherNode) {\n // This only wraps, it therefore only operates on th e composed DOM and not\n // the logical DOM.\n return originalCompareD ocumentPosition.call(unsafeUnwrap(this),\n unwrapIfNeeded(otherNode));\n },\n\n normalize: function() {\n var nodes = snapshotNodeList(this.childNodes);\n var remNodes = [];\n var s = '';\n var modNode;\n\n for (var i = 0, n; i < nodes.leng th; i++) {\n n = nodes[i];\n if (n.nodeType === Node.TEXT_NODE) {\ n if (!modNode && !n.data.length)\n this.removeNode(n);\n else if (!modNode)\n modNode = n;\n else {\n s += n.data;\n remNodes.push(n);\n }\n } else {\n if (modNode && remNodes.length) {\n modNode.data += s;\n cleanupNodes(remNodes);\n }\n remNodes = [];\n s = '';\n modNode = null;\n if (n.childNodes.length)\n n.normalize();\n }\n }\n\n // handle case where >1 text n odes are the last children\n if (modNode && remNodes.length) {\n mod Node.data += s;\n cleanupNodes(remNodes);\n }\n }\n });\n\n def ineWrapGetter(Node, 'ownerDocument');\n\n // We use a DocumentFragment as a bas e and then delete the properties of\n // DocumentFragment.prototype from the wr apper Node. Since delete makes\n // objects slow in some JS engines we recreate the prototype object.\n registerWrapper(OriginalNode, Node, document.createDoc umentFragment());\n delete Node.prototype.querySelector;\n delete Node.prototy pe.querySelectorAll;\n Node.prototype = mixin(Object.create(EventTarget.prototy pe), Node.prototype);\n\n scope.cloneNode = cloneNode;\n scope.nodeWasAdded = nodeWasAdded;\n scope.nodeWasRemoved = nodeWasRemoved;\n scope.nodesWereAdded = nodesWereAdded;\n scope.nodesWereRemoved = nodesWereRemoved;\n scope.origina lInsertBefore = originalInsertBefore;\n scope.originalRemoveChild = originalRem oveChild;\n scope.snapshotNodeList = snapshotNodeList;\n scope.wrappers.Node = Node;\n\n})(window.ShadowDOMPolyfill);\n",
97 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LIC ENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLCollection = scop e.wrappers.HTMLCollection;\n var NodeList = scope.wrappers.NodeList;\n var get TreeScope = scope.getTreeScope;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var wrap = scope.wrap;\n\n var originalDocumentQuerySelector = document.querySelec tor;\n var originalElementQuerySelector = document.documentElement.querySelecto r;\n\n var originalDocumentQuerySelectorAll = document.querySelectorAll;\n var originalElementQuerySelectorAll = document.documentElement.querySelectorAll;\n\ n var originalDocumentGetElementsByTagName = document.getElementsByTagName;\n var originalElementGetElementsByTagName = document.documentElement.getElementsBy TagName;\n\n var originalDocumentGetElementsByTagNameNS = document.getElementsB yTagNameNS;\n var originalElementGetElementsByTagNameNS = document.documentElem ent.getElementsByTagNameNS;\n\n var OriginalElement = window.Element;\n var Or iginalDocument = window.HTMLDocument || window.Document;\n\n function filterNod eList(list, index, result, deep) {\n var wrappedItem = null;\n var root = null;\n for (var i = 0, length = list.length; i < length; i++) {\n wrapp edItem = wrap(list[i]);\n if (!deep && (root = getTreeScope(wrappedItem).ro ot)) {\n if (root instanceof scope.wrappers.ShadowRoot) {\n cont inue;\n }\n }\n result[index++] = wrappedItem;\n }\n\n re turn index;\n }\n\n function shimSelector(selector) {\n return String(selec tor).replace(/\\/deep\\//g, ' ');\n }\n\n function findOne(node, selector) {\n var m, el = node.firstElementChild;\n while (el) {\n if (el.matches( selector))\n return el;\n m = findOne(el, selector);\n if (m)\n return m;\n el = el.nextElementSibling;\n }\n return null;\n }\n\n function matchesSelector(el, selector) {\n return el.matches(selector );\n }\n\n var XHTML_NS = 'http://www.w3.org/1999/xhtml';\n\n function matche sTagName(el, localName, localNameLowerCase) {\n var ln = el.localName;\n r eturn ln === localName ||\n ln === localNameLowerCase && el.namespaceURI === XHTML_NS;\n }\n\n function matchesEveryThing() {\n return true;\n }\n\ n function matchesLocalNameOnly(el, ns, localName) {\n return el.localName = == localName;\n }\n\n function matchesNameSpace(el, ns) {\n return el.names paceURI === ns;\n }\n\n function matchesLocalNameNS(el, ns, localName) {\n return el.namespaceURI === ns && el.localName === localName;\n }\n\n function findElements(node, index, result, p, arg0, arg1) {\n var el = node.firstEleme ntChild;\n while (el) {\n if (p(el, arg0, arg1))\n result[index++ ] = el;\n index = findElements(el, index, result, p, arg0, arg1);\n el = el.nextElementSibling;\n }\n return index;\n }\n\n // find and findAl l will only match Simple Selectors,\n // Structural Pseudo Classes are not guar enteed to be correct\n // http://www.w3.org/TR/css3-selectors/#simple-selectors \n\n function querySelectorAllFiltered(p, index, result, selector, deep) {\n var target = unsafeUnwrap(this);\n var list;\n var root = getTreeScope(th is).root;\n if (root instanceof scope.wrappers.ShadowRoot) {\n // We are in the shadow tree and the logical tree is\n // going to be disconnected s o we do a manual tree traversal\n return findElements(this, index, result, p, selector, null);\n } else if (target instanceof OriginalElement) {\n list = originalElementQuerySelectorAll.call(target, selector);\n } else if (t arget instanceof OriginalDocument) {\n list = originalDocumentQuerySelector All.call(target, selector);\n } else {\n // When we get a ShadowRoot the logical tree is going to be disconnected\n // so we do a manual tree trave rsal\n return findElements(this, index, result, p, selector, null);\n }\ n\n return filterNodeList(list, index, result, deep);\n }\n\n var Selectors Interface = {\n querySelector: function(selector) {\n var shimmed = shim Selector(selector);\n var deep = shimmed !== selector;\n selector = sh immed;\n\n var target = unsafeUnwrap(this);\n var wrappedItem;\n var root = getTreeScope(this).root;\n if (root instanceof scope.wrappers.Sh adowRoot) {\n // We are in the shadow tree and the logical tree is\n // going to be disconnected so we do a manual tree traversal\n return findOne(this, selector);\n } else if (target instanceof OriginalElement) {\ n wrappedItem = wrap(originalElementQuerySelector.call(target, selector)) ;\n } else if (target instanceof OriginalDocument) {\n wrappedItem = wrap(originalDocumentQuerySelector.call(target, selector));\n } else {\n // When we get a ShadowRoot the logical tree is going to be disconnected\n // so we do a manual tree traversal\n return findOne(this, select or);\n }\n\n if (!wrappedItem) {\n // When the original query r eturns nothing\n // we return nothing (to be consistent with the other wr apped calls)\n return wrappedItem;\n } else if (!deep && (root = get TreeScope(wrappedItem).root)) {\n if (root instanceof scope.wrappers.Shad owRoot) {\n // When the original query returns an element in the Shadow DOM\n // we must do a manual tree traversal\n return findOne(t his, selector);\n }\n }\n\n return wrappedItem;\n },\n qu erySelectorAll: function(selector) {\n var shimmed = shimSelector(selector) ;\n var deep = shimmed !== selector;\n selector = shimmed;\n\n va r result = new NodeList();\n\n result.length = querySelectorAllFiltered.cal l(this,\n matchesSelector,\n 0,\n result,\n selector,\n deep);\n\n return result;\n }\n };\n\n function g etElementsByTagNameFiltered(p, index, result, localName,\n lowercase) {\n var target = unsafeUnwrap(this);\n var li st;\n var root = getTreeScope(this).root;\n if (root instanceof scope.wrap pers.ShadowRoot) {\n // We are in the shadow tree and the logical tree is\n // going to be disconnected so we do a manual tree traversal\n return findElements(this, index, result, p, localName, lowercase);\n } else if (tar get instanceof OriginalElement) {\n list = originalElementGetElementsByTagN ame.call(target, localName,\n lowercase);\n } else if (target instanceof OriginalDocument) {\n list = originalDocumentGetElementsByTagName.call(target, localName,\n lowercase);\n } else {\n // When we get a ShadowRoot the logical tree is going to be disconnected\n // so w e do a manual tree traversal\n return findElements(this, index, result, p, localName, lowercase);\n }\n\n return filterNodeList(list, index, result, false);\n }\n\n function getElementsByTagNameNSFiltered(p, index, result, ns, localName) {\n var target = unsafeUnwrap(this);\n var list;\n var root = getTreeScope(this).root;\n if (root instanceof scope.wrappers.ShadowRoot) { \n // We are in the shadow tree and the logical tree is\n // going to be disconnected so we do a manual tree traversal\n return findElements(this , index, result, p, ns, localName);\n } else if (target instanceof OriginalEl ement) {\n list = originalElementGetElementsByTagNameNS.call(target, ns, lo calName);\n } else if (target instanceof OriginalDocument) {\n list = or iginalDocumentGetElementsByTagNameNS.call(target, ns, localName);\n } else {\ n // When we get a ShadowRoot the logical tree is going to be disconnected\ n // so we do a manual tree traversal\n return findElements(this, inde x, result, p, ns, localName);\n }\n\n return filterNodeList(list, index, r esult, false);\n }\n\n var GetElementsByInterface = {\n getElementsByTagNam e: function(localName) {\n var result = new HTMLCollection();\n var ma tch = localName === '*' ? matchesEveryThing : matchesTagName;\n\n result.le ngth = getElementsByTagNameFiltered.call(this,\n match,\n 0,\n result,\n localName,\n localName.toLowerCase());\n\n return result;\n },\n\n getElementsByClassName: function(className) {\n // TODO(arv): Check className?\n return this.querySelectorAll('.' + className);\n },\n\n getElementsByTagNameNS: function(ns, localName) {\n var result = new HTMLCollection();\n var match = null;\n\n if (n s === '*') {\n match = localName === '*' ? matchesEveryThing : matchesLoc alNameOnly;\n } else {\n match = localName === '*' ? matchesNameSpac e : matchesLocalNameNS;\n }\n\n result.length = getElementsByTagNameNS Filtered.call(this,\n match,\n 0,\n result,\n ns || null,\n localName);\n\n return result;\n }\n };\n\n s cope.GetElementsByInterface = GetElementsByInterface;\n scope.SelectorsInterfac e = SelectorsInterface;\n\n})(window.ShadowDOMPolyfill);\n", 97 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LIC ENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLCollection = scop e.wrappers.HTMLCollection;\n var NodeList = scope.wrappers.NodeList;\n var get TreeScope = scope.getTreeScope;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var wrap = scope.wrap;\n\n var originalDocumentQuerySelector = document.querySelec tor;\n var originalElementQuerySelector = document.documentElement.querySelecto r;\n\n var originalDocumentQuerySelectorAll = document.querySelectorAll;\n var originalElementQuerySelectorAll = document.documentElement.querySelectorAll;\n\ n var originalDocumentGetElementsByTagName = document.getElementsByTagName;\n var originalElementGetElementsByTagName = document.documentElement.getElementsBy TagName;\n\n var originalDocumentGetElementsByTagNameNS = document.getElementsB yTagNameNS;\n var originalElementGetElementsByTagNameNS = document.documentElem ent.getElementsByTagNameNS;\n\n var OriginalElement = window.Element;\n var Or iginalDocument = window.HTMLDocument || window.Document;\n\n function filterNod eList(list, index, result, deep) {\n var wrappedItem = null;\n var root = null;\n for (var i = 0, length = list.length; i < length; i++) {\n wrapp edItem = wrap(list[i]);\n if (!deep && (root = getTreeScope(wrappedItem).ro ot)) {\n if (root instanceof scope.wrappers.ShadowRoot) {\n cont inue;\n }\n }\n result[index++] = wrappedItem;\n }\n\n re turn index;\n }\n\n function shimSelector(selector) {\n return String(selec tor).replace(/\\/deep\\//g, ' ');\n }\n\n function findOne(node, selector) {\n var m, el = node.firstElementChild;\n while (el) {\n if (el.matches( selector))\n return el;\n m = findOne(el, selector);\n if (m)\n return m;\n el = el.nextElementSibling;\n }\n return null;\n }\n\n function matchesSelector(el, selector) {\n return el.matches(selector );\n }\n\n var XHTML_NS = 'http://www.w3.org/1999/xhtml';\n\n function matche sTagName(el, localName, localNameLowerCase) {\n var ln = el.localName;\n r eturn ln === localName ||\n ln === localNameLowerCase && el.namespaceURI === XHTML_NS;\n }\n\n function matchesEveryThing() {\n return true;\n }\n\ n function matchesLocalNameOnly(el, ns, localName) {\n return el.localName = == localName;\n }\n\n function matchesNameSpace(el, ns) {\n return el.names paceURI === ns;\n }\n\n function matchesLocalNameNS(el, ns, localName) {\n return el.namespaceURI === ns && el.localName === localName;\n }\n\n function findElements(node, index, result, p, arg0, arg1) {\n var el = node.firstEleme ntChild;\n while (el) {\n if (p(el, arg0, arg1))\n result[index++ ] = el;\n index = findElements(el, index, result, p, arg0, arg1);\n el = el.nextElementSibling;\n }\n return index;\n }\n\n // find and findAl l will only match Simple Selectors,\n // Structural Pseudo Classes are not guar enteed to be correct\n // http://www.w3.org/TR/css3-selectors/#simple-selectors \n\n function querySelectorAllFiltered(p, index, result, selector, deep) {\n var target = unsafeUnwrap(this);\n var list;\n var root = getTreeScope(th is).root;\n if (root instanceof scope.wrappers.ShadowRoot) {\n // We are in the shadow tree and the logical tree is\n // going to be disconnected s o we do a manual tree traversal\n return findElements(this, index, result, p, selector, null);\n } else if (target instanceof OriginalElement) {\n list = originalElementQuerySelectorAll.call(target, selector);\n } else if (t arget instanceof OriginalDocument) {\n list = originalDocumentQuerySelector All.call(target, selector);\n } else {\n // When we get a ShadowRoot the logical tree is going to be disconnected\n // so we do a manual tree trave rsal\n return findElements(this, index, result, p, selector, null);\n }\ n\n return filterNodeList(list, index, result, deep);\n }\n\n var Selectors Interface = {\n querySelector: function(selector) {\n var shimmed = shim Selector(selector);\n var deep = shimmed !== selector;\n selector = sh immed;\n\n var target = unsafeUnwrap(this);\n var wrappedItem;\n var root = getTreeScope(this).root;\n if (root instanceof scope.wrappers.Sh adowRoot) {\n // We are in the shadow tree and the logical tree is\n // going to be disconnected so we do a manual tree traversal\n return findOne(this, selector);\n } else if (target instanceof OriginalElement) {\ n wrappedItem = wrap(originalElementQuerySelector.call(target, selector)) ;\n } else if (target instanceof OriginalDocument) {\n wrappedItem = wrap(originalDocumentQuerySelector.call(target, selector));\n } else {\n // When we get a ShadowRoot the logical tree is going to be disconnected\n // so we do a manual tree traversal\n return findOne(this, select or);\n }\n\n if (!wrappedItem) {\n // When the original query r eturns nothing\n // we return nothing (to be consistent with the other wr apped calls)\n return wrappedItem;\n } else if (!deep && (root = get TreeScope(wrappedItem).root)) {\n if (root instanceof scope.wrappers.Shad owRoot) {\n // When the original query returns an element in the Shadow DOM\n // we must do a manual tree traversal\n return findOne(t his, selector);\n }\n }\n\n return wrappedItem;\n },\n qu erySelectorAll: function(selector) {\n var shimmed = shimSelector(selector) ;\n var deep = shimmed !== selector;\n selector = shimmed;\n\n va r result = new NodeList();\n\n result.length = querySelectorAllFiltered.cal l(this,\n matchesSelector,\n 0,\n result,\n selector,\n deep);\n\n return result;\n }\n };\n\n function g etElementsByTagNameFiltered(p, index, result, localName,\n lowercase) {\n var target = unsafeUnwrap(this);\n var li st;\n var root = getTreeScope(this).root;\n if (root instanceof scope.wrap pers.ShadowRoot) {\n // We are in the shadow tree and the logical tree is\n // going to be disconnected so we do a manual tree traversal\n return findElements(this, index, result, p, localName, lowercase);\n } else if (tar get instanceof OriginalElement) {\n list = originalElementGetElementsByTagN ame.call(target, localName,\n lowercase);\n } else if (target instanceof OriginalDocument) {\n list = originalDocumentGetElementsByTagName.call(target, localName,\n lowercase);\n } else {\n // When we get a ShadowRoot the logical tree is going to be disconnected\n // so w e do a manual tree traversal\n return findElements(this, index, result, p, localName, lowercase);\n }\n\n return filterNodeList(list, index, result, false);\n }\n\n function getElementsByTagNameNSFiltered(p, index, result, ns, localName) {\n var target = unsafeUnwrap(this);\n var list;\n var root = getTreeScope(this).root;\n if (root instanceof scope.wrappers.ShadowRoot) { \n // We are in the shadow tree and the logical tree is\n // going to be disconnected so we do a manual tree traversal\n return findElements(this , index, result, p, ns, localName);\n } else if (target instanceof OriginalEl ement) {\n list = originalElementGetElementsByTagNameNS.call(target, ns, lo calName);\n } else if (target instanceof OriginalDocument) {\n list = or iginalDocumentGetElementsByTagNameNS.call(target, ns, localName);\n } else {\ n // When we get a ShadowRoot the logical tree is going to be disconnected\ n // so we do a manual tree traversal\n return findElements(this, inde x, result, p, ns, localName);\n }\n\n return filterNodeList(list, index, r esult, false);\n }\n\n var GetElementsByInterface = {\n getElementsByTagNam e: function(localName) {\n var result = new HTMLCollection();\n var ma tch = localName === '*' ? matchesEveryThing : matchesTagName;\n\n result.le ngth = getElementsByTagNameFiltered.call(this,\n match,\n 0,\n result,\n localName,\n localName.toLowerCase());\n\n return result;\n },\n\n getElementsByClassName: function(className) {\n // TODO(arv): Check className?\n return this.querySelectorAll('.' + className);\n },\n\n getElementsByTagNameNS: function(ns, localName) {\n var result = new HTMLCollection();\n var match = null;\n\n if (n s === '*') {\n match = localName === '*' ? matchesEveryThing : matchesLoc alNameOnly;\n } else {\n match = localName === '*' ? matchesNameSpac e : matchesLocalNameNS;\n }\n\n result.length = getElementsByTagNameNS Filtered.call(this,\n match,\n 0,\n result,\n ns || null,\n localName);\n\n return result;\n }\n };\n\n s cope.GetElementsByInterface = GetElementsByInterface;\n scope.SelectorsInterfac e = SelectorsInterface;\n\n})(window.ShadowDOMPolyfill);\n",
98 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var NodeList = scope.wra ppers.NodeList;\n\n function forwardElement(node) {\n while (node && node.no deType !== Node.ELEMENT_NODE) {\n node = node.nextSibling;\n }\n retu rn node;\n }\n\n function backwardsElement(node) {\n while (node && node.no deType !== Node.ELEMENT_NODE) {\n node = node.previousSibling;\n }\n return node;\n }\n\n var ParentNodeInterface = {\n get firstElementChild() {\n return forwardElement(this.firstChild);\n },\n\n get lastElementC hild() {\n return backwardsElement(this.lastChild);\n },\n\n get chil dElementCount() {\n var count = 0;\n for (var child = this.firstElemen tChild;\n child;\n child = child.nextElementSibling) {\n count++;\n }\n return count;\n },\n\n get children() {\n var wrapperList = new NodeList();\n var i = 0;\n for (var child = th is.firstElementChild;\n child;\n child = child.nextElementSi bling) {\n wrapperList[i++] = child;\n }\n wrapperList.length = i;\n return wrapperList;\n },\n\n remove: function() {\n var p = this.parentNode;\n if (p)\n p.removeChild(this);\n }\n };\n\n var ChildNodeInterface = {\n get nextElementSibling() {\n return forwar dElement(this.nextSibling);\n },\n\n get previousElementSibling() {\n return backwardsElement(this.previousSibling);\n }\n };\n\n scope.ChildNod eInterface = ChildNodeInterface;\n scope.ParentNodeInterface = ParentNodeInterf ace;\n\n})(window.ShadowDOMPolyfill);\n", 98 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var NodeList = scope.wra ppers.NodeList;\n\n function forwardElement(node) {\n while (node && node.no deType !== Node.ELEMENT_NODE) {\n node = node.nextSibling;\n }\n retu rn node;\n }\n\n function backwardsElement(node) {\n while (node && node.no deType !== Node.ELEMENT_NODE) {\n node = node.previousSibling;\n }\n return node;\n }\n\n var ParentNodeInterface = {\n get firstElementChild() {\n return forwardElement(this.firstChild);\n },\n\n get lastElementC hild() {\n return backwardsElement(this.lastChild);\n },\n\n get chil dElementCount() {\n var count = 0;\n for (var child = this.firstElemen tChild;\n child;\n child = child.nextElementSibling) {\n count++;\n }\n return count;\n },\n\n get children() {\n var wrapperList = new NodeList();\n var i = 0;\n for (var child = th is.firstElementChild;\n child;\n child = child.nextElementSi bling) {\n wrapperList[i++] = child;\n }\n wrapperList.length = i;\n return wrapperList;\n },\n\n remove: function() {\n var p = this.parentNode;\n if (p)\n p.removeChild(this);\n }\n };\n\n var ChildNodeInterface = {\n get nextElementSibling() {\n return forwar dElement(this.nextSibling);\n },\n\n get previousElementSibling() {\n return backwardsElement(this.previousSibling);\n }\n };\n\n scope.ChildNod eInterface = ChildNodeInterface;\n scope.ParentNodeInterface = ParentNodeInterf ace;\n\n})(window.ShadowDOMPolyfill);\n",
99 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var ChildNodeInterface = scope.ChildNodeInterface;\n var Node = scope.wrappers.Node;\n var enqueueMuta tion = scope.enqueueMutation;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n\n var Ori ginalCharacterData = window.CharacterData;\n\n function CharacterData(node) {\n Node.call(this, node);\n }\n CharacterData.prototype = Object.create(Node. prototype);\n mixin(CharacterData.prototype, {\n get textContent() {\n return this.data;\n },\n set textContent(value) {\n this.data = value ;\n },\n get data() {\n return unsafeUnwrap(this).data;\n },\n set data(value) {\n var oldValue = unsafeUnwrap(this).data;\n enqueueM utation(this, 'characterData', {\n oldValue: oldValue\n });\n u nsafeUnwrap(this).data = value;\n }\n });\n\n mixin(CharacterData.prototype , ChildNodeInterface);\n\n registerWrapper(OriginalCharacterData, CharacterData ,\n document.createTextNode(''));\n\n scope.wrappers.Character Data = CharacterData;\n})(window.ShadowDOMPolyfill);\n", 99 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var ChildNodeInterface = scope.ChildNodeInterface;\n var Node = scope.wrappers.Node;\n var enqueueMuta tion = scope.enqueueMutation;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n\n var Ori ginalCharacterData = window.CharacterData;\n\n function CharacterData(node) {\n Node.call(this, node);\n }\n CharacterData.prototype = Object.create(Node. prototype);\n mixin(CharacterData.prototype, {\n get textContent() {\n return this.data;\n },\n set textContent(value) {\n this.data = value ;\n },\n get data() {\n return unsafeUnwrap(this).data;\n },\n set data(value) {\n var oldValue = unsafeUnwrap(this).data;\n enqueueM utation(this, 'characterData', {\n oldValue: oldValue\n });\n u nsafeUnwrap(this).data = value;\n }\n });\n\n mixin(CharacterData.prototype , ChildNodeInterface);\n\n registerWrapper(OriginalCharacterData, CharacterData ,\n document.createTextNode(''));\n\n scope.wrappers.Character Data = CharacterData;\n})(window.ShadowDOMPolyfill);\n",
100 "// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var CharacterData = scop e.wrappers.CharacterData;\n var enqueueMutation = scope.enqueueMutation;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n\n funct ion toUInt32(x) {\n return x >>> 0;\n }\n\n var OriginalText = window.Text; \n\n function Text(node) {\n CharacterData.call(this, node);\n }\n Text.pr ototype = Object.create(CharacterData.prototype);\n mixin(Text.prototype, {\n splitText: function(offset) {\n offset = toUInt32(offset);\n var s = this.data;\n if (offset > s.length)\n throw new Error('IndexSizeErr or');\n var head = s.slice(0, offset);\n var tail = s.slice(offset);\n this.data = head;\n var newTextNode = this.ownerDocument.createTextNo de(tail);\n if (this.parentNode)\n this.parentNode.insertBefore(newT extNode, this.nextSibling);\n return newTextNode;\n }\n });\n\n regist erWrapper(OriginalText, Text, document.createTextNode(''));\n\n scope.wrappers. Text = Text;\n})(window.ShadowDOMPolyfill);\n", 100 "// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var CharacterData = scop e.wrappers.CharacterData;\n var enqueueMutation = scope.enqueueMutation;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n\n funct ion toUInt32(x) {\n return x >>> 0;\n }\n\n var OriginalText = window.Text; \n\n function Text(node) {\n CharacterData.call(this, node);\n }\n Text.pr ototype = Object.create(CharacterData.prototype);\n mixin(Text.prototype, {\n splitText: function(offset) {\n offset = toUInt32(offset);\n var s = this.data;\n if (offset > s.length)\n throw new Error('IndexSizeErr or');\n var head = s.slice(0, offset);\n var tail = s.slice(offset);\n this.data = head;\n var newTextNode = this.ownerDocument.createTextNo de(tail);\n if (this.parentNode)\n this.parentNode.insertBefore(newT extNode, this.nextSibling);\n return newTextNode;\n }\n });\n\n regist erWrapper(OriginalText, Text, document.createTextNode(''));\n\n scope.wrappers. Text = Text;\n})(window.ShadowDOMPolyfill);\n",
101 "// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var setWrapper = scope.s etWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n\n function invalidateCla ss(el) {\n scope.invalidateRendererBasedOnAttribute(el, 'class');\n }\n\n f unction DOMTokenList(impl, ownerElement) {\n setWrapper(impl, this);\n thi s.ownerElement_ = ownerElement;\n }\n\n DOMTokenList.prototype = {\n constr uctor: DOMTokenList,\n get length() {\n return unsafeUnwrap(this).length ;\n },\n item: function(index) {\n return unsafeUnwrap(this).item(ind ex);\n },\n contains: function(token) {\n return unsafeUnwrap(this).c ontains(token);\n },\n add: function() {\n unsafeUnwrap(this).add.app ly(unsafeUnwrap(this), arguments);\n invalidateClass(this.ownerElement_);\n },\n remove: function() {\n unsafeUnwrap(this).remove.apply(unsafeUn wrap(this), arguments);\n invalidateClass(this.ownerElement_);\n },\n toggle: function(token) {\n var rv = unsafeUnwrap(this).toggle.apply(unsaf eUnwrap(this), arguments);\n invalidateClass(this.ownerElement_);\n re turn rv;\n },\n toString: function() {\n return unsafeUnwrap(this).to String();\n }\n };\n\n scope.wrappers.DOMTokenList = DOMTokenList;\n})(wind ow.ShadowDOMPolyfill);\n", 101 "// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var setWrapper = scope.s etWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n\n function invalidateCla ss(el) {\n scope.invalidateRendererBasedOnAttribute(el, 'class');\n }\n\n f unction DOMTokenList(impl, ownerElement) {\n setWrapper(impl, this);\n thi s.ownerElement_ = ownerElement;\n }\n\n DOMTokenList.prototype = {\n constr uctor: DOMTokenList,\n get length() {\n return unsafeUnwrap(this).length ;\n },\n item: function(index) {\n return unsafeUnwrap(this).item(ind ex);\n },\n contains: function(token) {\n return unsafeUnwrap(this).c ontains(token);\n },\n add: function() {\n unsafeUnwrap(this).add.app ly(unsafeUnwrap(this), arguments);\n invalidateClass(this.ownerElement_);\n },\n remove: function() {\n unsafeUnwrap(this).remove.apply(unsafeUn wrap(this), arguments);\n invalidateClass(this.ownerElement_);\n },\n toggle: function(token) {\n var rv = unsafeUnwrap(this).toggle.apply(unsaf eUnwrap(this), arguments);\n invalidateClass(this.ownerElement_);\n re turn rv;\n },\n toString: function() {\n return unsafeUnwrap(this).to String();\n }\n };\n\n scope.wrappers.DOMTokenList = DOMTokenList;\n})(wind ow.ShadowDOMPolyfill);\n",
102 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var ChildNodeInterface = scope.ChildNodeInterface;\n var GetElementsByInterface = scope.GetElementsByIn terface;\n var Node = scope.wrappers.Node;\n var DOMTokenList = scope.wrappers .DOMTokenList;\n var ParentNodeInterface = scope.ParentNodeInterface;\n var Se lectorsInterface = scope.SelectorsInterface;\n var addWrapNodeListMethod = scop e.addWrapNodeListMethod;\n var enqueueMutation = scope.enqueueMutation;\n var mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var registerWrapper = scope. registerWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var wrappers = sco pe.wrappers;\n\n var OriginalElement = window.Element;\n\n var matchesNames = [\n 'matches', // needs to come first.\n 'mozMatchesSelector',\n 'msMa tchesSelector',\n 'webkitMatchesSelector',\n ].filter(function(name) {\n return OriginalElement.prototype[name];\n });\n\n var matchesName = matchesNam es[0];\n\n var originalMatches = OriginalElement.prototype[matchesName];\n\n f unction invalidateRendererBasedOnAttribute(element, name) {\n // Only invalid ate if parent node is a shadow host.\n var p = element.parentNode;\n if (! p || !p.shadowRoot)\n return;\n\n var renderer = scope.getRendererForHos t(p);\n if (renderer.dependsOnAttribute(name))\n renderer.invalidate();\ n }\n\n function enqueAttributeChange(element, name, oldValue) {\n // This is not fully spec compliant. We should use localName (which might\n // have a different case than name) and the namespace (which requires us\n // to get t he Attr object).\n enqueueMutation(element, 'attributes', {\n name: name ,\n namespace: null,\n oldValue: oldValue\n });\n }\n\n var class ListTable = new WeakMap();\n\n function Element(node) {\n Node.call(this, no de);\n }\n Element.prototype = Object.create(Node.prototype);\n mixin(Element .prototype, {\n createShadowRoot: function() {\n var newShadowRoot = new wrappers.ShadowRoot(this);\n unsafeUnwrap(this).polymerShadowRoot_ = newSh adowRoot;\n\n var renderer = scope.getRendererForHost(this);\n rendere r.invalidate();\n\n return newShadowRoot;\n },\n\n get shadowRoot() { \n return unsafeUnwrap(this).polymerShadowRoot_ || null;\n },\n\n // getDestinationInsertionPoints added in ShadowRenderer.js\n\n setAttribute: fu nction(name, value) {\n var oldValue = unsafeUnwrap(this).getAttribute(name );\n unsafeUnwrap(this).setAttribute(name, value);\n enqueAttributeCha nge(this, name, oldValue);\n invalidateRendererBasedOnAttribute(this, name) ;\n },\n\n removeAttribute: function(name) {\n var oldValue = unsafeU nwrap(this).getAttribute(name);\n unsafeUnwrap(this).removeAttribute(name); \n enqueAttributeChange(this, name, oldValue);\n invalidateRendererBas edOnAttribute(this, name);\n },\n\n matches: function(selector) {\n r eturn originalMatches.call(unsafeUnwrap(this), selector);\n },\n\n get cla ssList() {\n var list = classListTable.get(this);\n if (!list) {\n classListTable.set(this,\n list = new DOMTokenList(unsafeUnwrap(t his).classList, this));\n }\n return list;\n },\n\n get classNam e() {\n return unsafeUnwrap(this).className;\n },\n\n set className(v ) {\n this.setAttribute('class', v);\n },\n\n get id() {\n retur n unsafeUnwrap(this).id;\n },\n\n set id(v) {\n this.setAttribute('id ', v);\n }\n });\n\n matchesNames.forEach(function(name) {\n if (name != = 'matches') {\n Element.prototype[name] = function(selector) {\n re turn this.matches(selector);\n };\n }\n });\n\n if (OriginalElement.pr ototype.webkitCreateShadowRoot) {\n Element.prototype.webkitCreateShadowRoot =\n Element.prototype.createShadowRoot;\n }\n\n mixin(Element.prototype , ChildNodeInterface);\n mixin(Element.prototype, GetElementsByInterface);\n m ixin(Element.prototype, ParentNodeInterface);\n mixin(Element.prototype, Select orsInterface);\n\n registerWrapper(OriginalElement, Element,\n document.createElementNS(null, 'x'));\n\n scope.invalidateRendererBasedOnAttri bute = invalidateRendererBasedOnAttribute;\n scope.matchesNames = matchesNames; \n scope.wrappers.Element = Element;\n})(window.ShadowDOMPolyfill);\n", 102 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var ChildNodeInterface = scope.ChildNodeInterface;\n var GetElementsByInterface = scope.GetElementsByIn terface;\n var Node = scope.wrappers.Node;\n var DOMTokenList = scope.wrappers .DOMTokenList;\n var ParentNodeInterface = scope.ParentNodeInterface;\n var Se lectorsInterface = scope.SelectorsInterface;\n var addWrapNodeListMethod = scop e.addWrapNodeListMethod;\n var enqueueMutation = scope.enqueueMutation;\n var mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var registerWrapper = scope. registerWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var wrappers = sco pe.wrappers;\n\n var OriginalElement = window.Element;\n\n var matchesNames = [\n 'matches', // needs to come first.\n 'mozMatchesSelector',\n 'msMa tchesSelector',\n 'webkitMatchesSelector',\n ].filter(function(name) {\n return OriginalElement.prototype[name];\n });\n\n var matchesName = matchesNam es[0];\n\n var originalMatches = OriginalElement.prototype[matchesName];\n\n f unction invalidateRendererBasedOnAttribute(element, name) {\n // Only invalid ate if parent node is a shadow host.\n var p = element.parentNode;\n if (! p || !p.shadowRoot)\n return;\n\n var renderer = scope.getRendererForHos t(p);\n if (renderer.dependsOnAttribute(name))\n renderer.invalidate();\ n }\n\n function enqueAttributeChange(element, name, oldValue) {\n // This is not fully spec compliant. We should use localName (which might\n // have a different case than name) and the namespace (which requires us\n // to get t he Attr object).\n enqueueMutation(element, 'attributes', {\n name: name ,\n namespace: null,\n oldValue: oldValue\n });\n }\n\n var class ListTable = new WeakMap();\n\n function Element(node) {\n Node.call(this, no de);\n }\n Element.prototype = Object.create(Node.prototype);\n mixin(Element .prototype, {\n createShadowRoot: function() {\n var newShadowRoot = new wrappers.ShadowRoot(this);\n unsafeUnwrap(this).polymerShadowRoot_ = newSh adowRoot;\n\n var renderer = scope.getRendererForHost(this);\n rendere r.invalidate();\n\n return newShadowRoot;\n },\n\n get shadowRoot() { \n return unsafeUnwrap(this).polymerShadowRoot_ || null;\n },\n\n // getDestinationInsertionPoints added in ShadowRenderer.js\n\n setAttribute: fu nction(name, value) {\n var oldValue = unsafeUnwrap(this).getAttribute(name );\n unsafeUnwrap(this).setAttribute(name, value);\n enqueAttributeCha nge(this, name, oldValue);\n invalidateRendererBasedOnAttribute(this, name) ;\n },\n\n removeAttribute: function(name) {\n var oldValue = unsafeU nwrap(this).getAttribute(name);\n unsafeUnwrap(this).removeAttribute(name); \n enqueAttributeChange(this, name, oldValue);\n invalidateRendererBas edOnAttribute(this, name);\n },\n\n matches: function(selector) {\n r eturn originalMatches.call(unsafeUnwrap(this), selector);\n },\n\n get cla ssList() {\n var list = classListTable.get(this);\n if (!list) {\n classListTable.set(this,\n list = new DOMTokenList(unsafeUnwrap(t his).classList, this));\n }\n return list;\n },\n\n get classNam e() {\n return unsafeUnwrap(this).className;\n },\n\n set className(v ) {\n this.setAttribute('class', v);\n },\n\n get id() {\n retur n unsafeUnwrap(this).id;\n },\n\n set id(v) {\n this.setAttribute('id ', v);\n }\n });\n\n matchesNames.forEach(function(name) {\n if (name != = 'matches') {\n Element.prototype[name] = function(selector) {\n re turn this.matches(selector);\n };\n }\n });\n\n if (OriginalElement.pr ototype.webkitCreateShadowRoot) {\n Element.prototype.webkitCreateShadowRoot =\n Element.prototype.createShadowRoot;\n }\n\n mixin(Element.prototype , ChildNodeInterface);\n mixin(Element.prototype, GetElementsByInterface);\n m ixin(Element.prototype, ParentNodeInterface);\n mixin(Element.prototype, Select orsInterface);\n\n registerWrapper(OriginalElement, Element,\n document.createElementNS(null, 'x'));\n\n scope.invalidateRendererBasedOnAttri bute = invalidateRendererBasedOnAttribute;\n scope.matchesNames = matchesNames; \n scope.wrappers.Element = Element;\n})(window.ShadowDOMPolyfill);\n",
103 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var Element = scope.wrap pers.Element;\n var defineGetter = scope.defineGetter;\n var enqueueMutation = scope.enqueueMutation;\n var mixin = scope.mixin;\n var nodesWereAdded = scop e.nodesWereAdded;\n var nodesWereRemoved = scope.nodesWereRemoved;\n var regis terWrapper = scope.registerWrapper;\n var snapshotNodeList = scope.snapshotNode List;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wrappers = scope.wrappers;\n\n ///////////////// ////////////////////////////////////////////////////////////\n // innerHTML and outerHTML\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/t he-end.html#escapingString\n var escapeAttrRegExp = /[&\\u00A0\"]/g;\n var esc apeDataRegExp = /[&\\u00A0<>]/g;\n\n function escapeReplace(c) {\n switch (c ) {\n case '&':\n return '&amp;';\n case '<':\n return ' &lt;';\n case '>':\n return '&gt;';\n case '\"':\n retur n '&quot;'\n case '\\u00A0':\n return '&nbsp;';\n }\n }\n\n fun ction escapeAttr(s) {\n return s.replace(escapeAttrRegExp, escapeReplace);\n }\n\n function escapeData(s) {\n return s.replace(escapeDataRegExp, escapeR eplace);\n }\n\n function makeSet(arr) {\n var set = {};\n for (var i = 0; i < arr.length; i++) {\n set[arr[i]] = true;\n }\n return set;\n }\n\n // http://www.whatwg.org/specs/web-apps/current-work/#void-elements\n va r voidElements = makeSet([\n 'area',\n 'base',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n ]);\n\n var plaintextParents = makeSet([\n 'style',\n 'script',\n 'xm p',\n 'iframe',\n 'noembed',\n 'noframes',\n 'plaintext',\n 'nosc ript'\n ]);\n\n function getOuterHTML(node, parentNode) {\n switch (node.no deType) {\n case Node.ELEMENT_NODE:\n var tagName = node.tagName.toL owerCase();\n var s = '<' + tagName;\n var attrs = node.attributes ;\n for (var i = 0, attr; attr = attrs[i]; i++) {\n s += ' ' + a ttr.name + '=\"' + escapeAttr(attr.value) + '\"';\n }\n s += '>';\ n if (voidElements[tagName])\n return s;\n\n return s + g etInnerHTML(node) + '</' + tagName + '>';\n\n case Node.TEXT_NODE:\n var data = node.data;\n if (parentNode && plaintextParents[parentNode.lo calName])\n return data;\n return escapeData(data);\n\n cas e Node.COMMENT_NODE:\n return '<!--' + node.data + '-->';\n\n defaul t:\n console.error(node);\n throw new Error('not implemented');\n }\n }\n\n function getInnerHTML(node) {\n if (node instanceof wrappers.H TMLTemplateElement)\n node = node.content;\n\n var s = '';\n for (var child = node.firstChild; child; child = child.nextSibling) {\n s += getOut erHTML(child, node);\n }\n return s;\n }\n\n function setInnerHTML(node, value, opt_tagName) {\n var tagName = opt_tagName || 'div';\n node.textCo ntent = '';\n var tempElement = unwrap(node.ownerDocument.createElement(tagNa me));\n tempElement.innerHTML = value;\n var firstChild;\n while (first Child = tempElement.firstChild) {\n node.appendChild(wrap(firstChild));\n }\n }\n\n // IE11 does not have MSIE in the user agent string.\n var oldIe = /MSIE/.test(navigator.userAgent);\n\n var OriginalHTMLElement = window.HTMLEl ement;\n var OriginalHTMLTemplateElement = window.HTMLTemplateElement;\n\n fun ction HTMLElement(node) {\n Element.call(this, node);\n }\n HTMLElement.pro totype = Object.create(Element.prototype);\n mixin(HTMLElement.prototype, {\n get innerHTML() {\n return getInnerHTML(this);\n },\n set innerHTML (value) {\n // IE9 does not handle set innerHTML correctly on plaintextPare nts. It\n // creates element children. For example\n //\n // sc riptElement.innerHTML = '<a>test</a>'\n //\n // Creates a single HTMLA nchorElement child.\n if (oldIe && plaintextParents[this.localName]) {\n this.textContent = value;\n return;\n }\n\n var removedNod es = snapshotNodeList(this.childNodes);\n\n if (this.invalidateShadowRender er()) {\n if (this instanceof wrappers.HTMLTemplateElement)\n se tInnerHTML(this.content, value);\n else\n setInnerHTML(this, val ue, this.tagName);\n\n // If we have a non native template element we need to handle this\n // manually since setting impl.innerHTML would add the htm l as direct\n // children and not be moved over to the content fragment.\n } else if (!OriginalHTMLTemplateElement &&\n this instanceo f wrappers.HTMLTemplateElement) {\n setInnerHTML(this.content, value);\n } else {\n unsafeUnwrap(this).innerHTML = value;\n }\n\n v ar addedNodes = snapshotNodeList(this.childNodes);\n\n enqueueMutation(this , 'childList', {\n addedNodes: addedNodes,\n removedNodes: removed Nodes\n });\n\n nodesWereRemoved(removedNodes);\n nodesWereAdded( addedNodes, this);\n },\n\n get outerHTML() {\n return getOuterHTML(t his, this.parentNode);\n },\n set outerHTML(value) {\n var p = this.p arentNode;\n if (p) {\n p.invalidateShadowRenderer();\n var d f = frag(p, value);\n p.replaceChild(df, this);\n }\n },\n\n i nsertAdjacentHTML: function(position, text) {\n var contextElement, refNode ;\n switch (String(position).toLowerCase()) {\n case 'beforebegin':\ n contextElement = this.parentNode;\n refNode = this;\n break;\n case 'afterend':\n contextElement = this.parentNode; \n refNode = this.nextSibling;\n break;\n case 'afterbe gin':\n contextElement = this;\n refNode = this.firstChild;\n break;\n case 'beforeend':\n contextElement = this;\n refNode = null;\n break;\n default:\n return;\n }\n\n var df = frag(contextElement, text);\n contextElement.inse rtBefore(df, refNode);\n },\n\n get hidden() {\n return this.hasAttri bute('hidden');\n },\n set hidden(v) {\n if (v) {\n this.setAt tribute('hidden', '');\n } else {\n this.removeAttribute('hidden');\ n }\n }\n });\n\n function frag(contextElement, html) {\n // TODO(a rv): This does not work with SVG and other non HTML elements.\n var p = unwra p(contextElement.cloneNode(false));\n p.innerHTML = html;\n var df = unwra p(document.createDocumentFragment());\n var c;\n while (c = p.firstChild) {\n df.appendChild(c);\n }\n return wrap(df);\n }\n\n function gett er(name) {\n return function() {\n scope.renderAllPending();\n retu rn unsafeUnwrap(this)[name];\n };\n }\n\n function getterRequiresRendering( name) {\n defineGetter(HTMLElement, name, getter(name));\n }\n\n [\n 'cl ientHeight',\n 'clientLeft',\n 'clientTop',\n 'clientWidth',\n 'offs etHeight',\n 'offsetLeft',\n 'offsetTop',\n 'offsetWidth',\n 'scroll Height',\n 'scrollWidth',\n ].forEach(getterRequiresRendering);\n\n functio n getterAndSetterRequiresRendering(name) {\n Object.defineProperty(HTMLElemen t.prototype, name, {\n get: getter(name),\n set: function(v) {\n scope.renderAllPending();\n unsafeUnwrap(this)[name] = v;\n },\n configurable: true,\n enumerable: true\n });\n }\n\n [\n 'scrol lLeft',\n 'scrollTop',\n ].forEach(getterAndSetterRequiresRendering);\n\n f unction methodRequiresRendering(name) {\n Object.defineProperty(HTMLElement.p rototype, name, {\n value: function() {\n scope.renderAllPending();\ n return unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments);\n },\n configurable: true,\n enumerable: true\n });\n }\n\n [ \n 'getBoundingClientRect',\n 'getClientRects',\n 'scrollIntoView'\n ] .forEach(methodRequiresRendering);\n\n // HTMLElement is abstract so we use a s ubclass that has no members.\n registerWrapper(OriginalHTMLElement, HTMLElement ,\n document.createElement('b'));\n\n scope.wrappers.HTMLEleme nt = HTMLElement;\n\n // TODO: Find a better way to share these two with Wrappe rShadowRoot.\n scope.getInnerHTML = getInnerHTML;\n scope.setInnerHTML = setIn nerHTML\n})(window.ShadowDOMPolyfill);\n", 103 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var Element = scope.wrap pers.Element;\n var defineGetter = scope.defineGetter;\n var enqueueMutation = scope.enqueueMutation;\n var mixin = scope.mixin;\n var nodesWereAdded = scop e.nodesWereAdded;\n var nodesWereRemoved = scope.nodesWereRemoved;\n var regis terWrapper = scope.registerWrapper;\n var snapshotNodeList = scope.snapshotNode List;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wrappers = scope.wrappers;\n\n ///////////////// ////////////////////////////////////////////////////////////\n // innerHTML and outerHTML\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/t he-end.html#escapingString\n var escapeAttrRegExp = /[&\\u00A0\"]/g;\n var esc apeDataRegExp = /[&\\u00A0<>]/g;\n\n function escapeReplace(c) {\n switch (c ) {\n case '&':\n return '&amp;';\n case '<':\n return ' &lt;';\n case '>':\n return '&gt;';\n case '\"':\n retur n '&quot;'\n case '\\u00A0':\n return '&nbsp;';\n }\n }\n\n fun ction escapeAttr(s) {\n return s.replace(escapeAttrRegExp, escapeReplace);\n }\n\n function escapeData(s) {\n return s.replace(escapeDataRegExp, escapeR eplace);\n }\n\n function makeSet(arr) {\n var set = {};\n for (var i = 0; i < arr.length; i++) {\n set[arr[i]] = true;\n }\n return set;\n }\n\n // http://www.whatwg.org/specs/web-apps/current-work/#void-elements\n va r voidElements = makeSet([\n 'area',\n 'base',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n ]);\n\n var plaintextParents = makeSet([\n 'style',\n 'script',\n 'xm p',\n 'iframe',\n 'noembed',\n 'noframes',\n 'plaintext',\n 'nosc ript'\n ]);\n\n function getOuterHTML(node, parentNode) {\n switch (node.no deType) {\n case Node.ELEMENT_NODE:\n var tagName = node.tagName.toL owerCase();\n var s = '<' + tagName;\n var attrs = node.attributes ;\n for (var i = 0, attr; attr = attrs[i]; i++) {\n s += ' ' + a ttr.name + '=\"' + escapeAttr(attr.value) + '\"';\n }\n s += '>';\ n if (voidElements[tagName])\n return s;\n\n return s + g etInnerHTML(node) + '</' + tagName + '>';\n\n case Node.TEXT_NODE:\n var data = node.data;\n if (parentNode && plaintextParents[parentNode.lo calName])\n return data;\n return escapeData(data);\n\n cas e Node.COMMENT_NODE:\n return '<!--' + node.data + '-->';\n\n defaul t:\n console.error(node);\n throw new Error('not implemented');\n }\n }\n\n function getInnerHTML(node) {\n if (node instanceof wrappers.H TMLTemplateElement)\n node = node.content;\n\n var s = '';\n for (var child = node.firstChild; child; child = child.nextSibling) {\n s += getOut erHTML(child, node);\n }\n return s;\n }\n\n function setInnerHTML(node, value, opt_tagName) {\n var tagName = opt_tagName || 'div';\n node.textCo ntent = '';\n var tempElement = unwrap(node.ownerDocument.createElement(tagNa me));\n tempElement.innerHTML = value;\n var firstChild;\n while (first Child = tempElement.firstChild) {\n node.appendChild(wrap(firstChild));\n }\n }\n\n // IE11 does not have MSIE in the user agent string.\n var oldIe = /MSIE/.test(navigator.userAgent);\n\n var OriginalHTMLElement = window.HTMLEl ement;\n var OriginalHTMLTemplateElement = window.HTMLTemplateElement;\n\n fun ction HTMLElement(node) {\n Element.call(this, node);\n }\n HTMLElement.pro totype = Object.create(Element.prototype);\n mixin(HTMLElement.prototype, {\n get innerHTML() {\n return getInnerHTML(this);\n },\n set innerHTML (value) {\n // IE9 does not handle set innerHTML correctly on plaintextPare nts. It\n // creates element children. For example\n //\n // sc riptElement.innerHTML = '<a>test</a>'\n //\n // Creates a single HTMLA nchorElement child.\n if (oldIe && plaintextParents[this.localName]) {\n this.textContent = value;\n return;\n }\n\n var removedNod es = snapshotNodeList(this.childNodes);\n\n if (this.invalidateShadowRender er()) {\n if (this instanceof wrappers.HTMLTemplateElement)\n se tInnerHTML(this.content, value);\n else\n setInnerHTML(this, val ue, this.tagName);\n\n // If we have a non native template element we need to handle this\n // manually since setting impl.innerHTML would add the htm l as direct\n // children and not be moved over to the content fragment.\n } else if (!OriginalHTMLTemplateElement &&\n this instanceo f wrappers.HTMLTemplateElement) {\n setInnerHTML(this.content, value);\n } else {\n unsafeUnwrap(this).innerHTML = value;\n }\n\n v ar addedNodes = snapshotNodeList(this.childNodes);\n\n enqueueMutation(this , 'childList', {\n addedNodes: addedNodes,\n removedNodes: removed Nodes\n });\n\n nodesWereRemoved(removedNodes);\n nodesWereAdded( addedNodes, this);\n },\n\n get outerHTML() {\n return getOuterHTML(t his, this.parentNode);\n },\n set outerHTML(value) {\n var p = this.p arentNode;\n if (p) {\n p.invalidateShadowRenderer();\n var d f = frag(p, value);\n p.replaceChild(df, this);\n }\n },\n\n i nsertAdjacentHTML: function(position, text) {\n var contextElement, refNode ;\n switch (String(position).toLowerCase()) {\n case 'beforebegin':\ n contextElement = this.parentNode;\n refNode = this;\n break;\n case 'afterend':\n contextElement = this.parentNode; \n refNode = this.nextSibling;\n break;\n case 'afterbe gin':\n contextElement = this;\n refNode = this.firstChild;\n break;\n case 'beforeend':\n contextElement = this;\n refNode = null;\n break;\n default:\n return;\n }\n\n var df = frag(contextElement, text);\n contextElement.inse rtBefore(df, refNode);\n },\n\n get hidden() {\n return this.hasAttri bute('hidden');\n },\n set hidden(v) {\n if (v) {\n this.setAt tribute('hidden', '');\n } else {\n this.removeAttribute('hidden');\ n }\n }\n });\n\n function frag(contextElement, html) {\n // TODO(a rv): This does not work with SVG and other non HTML elements.\n var p = unwra p(contextElement.cloneNode(false));\n p.innerHTML = html;\n var df = unwra p(document.createDocumentFragment());\n var c;\n while (c = p.firstChild) {\n df.appendChild(c);\n }\n return wrap(df);\n }\n\n function gett er(name) {\n return function() {\n scope.renderAllPending();\n retu rn unsafeUnwrap(this)[name];\n };\n }\n\n function getterRequiresRendering( name) {\n defineGetter(HTMLElement, name, getter(name));\n }\n\n [\n 'cl ientHeight',\n 'clientLeft',\n 'clientTop',\n 'clientWidth',\n 'offs etHeight',\n 'offsetLeft',\n 'offsetTop',\n 'offsetWidth',\n 'scroll Height',\n 'scrollWidth',\n ].forEach(getterRequiresRendering);\n\n functio n getterAndSetterRequiresRendering(name) {\n Object.defineProperty(HTMLElemen t.prototype, name, {\n get: getter(name),\n set: function(v) {\n scope.renderAllPending();\n unsafeUnwrap(this)[name] = v;\n },\n configurable: true,\n enumerable: true\n });\n }\n\n [\n 'scrol lLeft',\n 'scrollTop',\n ].forEach(getterAndSetterRequiresRendering);\n\n f unction methodRequiresRendering(name) {\n Object.defineProperty(HTMLElement.p rototype, name, {\n value: function() {\n scope.renderAllPending();\ n return unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments);\n },\n configurable: true,\n enumerable: true\n });\n }\n\n [ \n 'getBoundingClientRect',\n 'getClientRects',\n 'scrollIntoView'\n ] .forEach(methodRequiresRendering);\n\n // HTMLElement is abstract so we use a s ubclass that has no members.\n registerWrapper(OriginalHTMLElement, HTMLElement ,\n document.createElement('b'));\n\n scope.wrappers.HTMLEleme nt = HTMLElement;\n\n // TODO: Find a better way to share these two with Wrappe rShadowRoot.\n scope.getInnerHTML = getInnerHTML;\n scope.setInnerHTML = setIn nerHTML\n})(window.ShadowDOMPolyfill);\n",
104 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope. wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope .registerWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var wrap = scope. wrap;\n\n var OriginalHTMLCanvasElement = window.HTMLCanvasElement;\n\n functi on HTMLCanvasElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLCanv asElement.prototype = Object.create(HTMLElement.prototype);\n\n mixin(HTMLCanva sElement.prototype, {\n getContext: function() {\n var context = unsafeU nwrap(this).getContext.apply(unsafeUnwrap(this), arguments);\n return conte xt && wrap(context);\n }\n });\n\n registerWrapper(OriginalHTMLCanvasElemen t, HTMLCanvasElement,\n document.createElement('canvas'));\n\n scope.wrappers.HTMLCanvasElement = HTMLCanvasElement;\n})(window.ShadowDOMPolyf ill);\n", 104 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope. wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope .registerWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var wrap = scope. wrap;\n\n var OriginalHTMLCanvasElement = window.HTMLCanvasElement;\n\n functi on HTMLCanvasElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLCanv asElement.prototype = Object.create(HTMLElement.prototype);\n\n mixin(HTMLCanva sElement.prototype, {\n getContext: function() {\n var context = unsafeU nwrap(this).getContext.apply(unsafeUnwrap(this), arguments);\n return conte xt && wrap(context);\n }\n });\n\n registerWrapper(OriginalHTMLCanvasElemen t, HTMLCanvasElement,\n document.createElement('canvas'));\n\n scope.wrappers.HTMLCanvasElement = HTMLCanvasElement;\n})(window.ShadowDOMPolyf ill);\n",
105 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope. wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope .registerWrapper;\n\n var OriginalHTMLContentElement = window.HTMLContentElemen t;\n\n function HTMLContentElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLContentElement.prototype = Object.create(HTMLElement.prototype);\n m ixin(HTMLContentElement.prototype, {\n constructor: HTMLContentElement,\n\n get select() {\n return this.getAttribute('select');\n },\n set sel ect(value) {\n this.setAttribute('select', value);\n },\n\n setAttrib ute: function(n, v) {\n HTMLElement.prototype.setAttribute.call(this, n, v) ;\n if (String(n).toLowerCase() === 'select')\n this.invalidateShado wRenderer(true);\n }\n\n // getDistributedNodes is added in ShadowRenderer \n });\n\n if (OriginalHTMLContentElement)\n registerWrapper(OriginalHTMLCo ntentElement, HTMLContentElement);\n\n scope.wrappers.HTMLContentElement = HTML ContentElement;\n})(window.ShadowDOMPolyfill);\n", 105 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope. wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope .registerWrapper;\n\n var OriginalHTMLContentElement = window.HTMLContentElemen t;\n\n function HTMLContentElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLContentElement.prototype = Object.create(HTMLElement.prototype);\n m ixin(HTMLContentElement.prototype, {\n constructor: HTMLContentElement,\n\n get select() {\n return this.getAttribute('select');\n },\n set sel ect(value) {\n this.setAttribute('select', value);\n },\n\n setAttrib ute: function(n, v) {\n HTMLElement.prototype.setAttribute.call(this, n, v) ;\n if (String(n).toLowerCase() === 'select')\n this.invalidateShado wRenderer(true);\n }\n\n // getDistributedNodes is added in ShadowRenderer \n });\n\n if (OriginalHTMLContentElement)\n registerWrapper(OriginalHTMLCo ntentElement, HTMLContentElement);\n\n scope.wrappers.HTMLContentElement = HTML ContentElement;\n})(window.ShadowDOMPolyfill);\n",
106 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var wrapHTMLCollection = scope.wrapHTMLCollection;\ n var unwrap = scope.unwrap;\n\n var OriginalHTMLFormElement = window.HTMLForm Element;\n\n function HTMLFormElement(node) {\n HTMLElement.call(this, node) ;\n }\n HTMLFormElement.prototype = Object.create(HTMLElement.prototype);\n m ixin(HTMLFormElement.prototype, {\n get elements() {\n // Note: technica lly this should be an HTMLFormControlsCollection, but\n // that inherits fr om HTMLCollection, so should be good enough. Spec:\n // http://www.whatwg.o rg/specs/web-apps/current-work/multipage/common-dom-interfaces.html#htmlformcont rolscollection\n return wrapHTMLCollection(unwrap(this).elements);\n }\n });\n\n registerWrapper(OriginalHTMLFormElement, HTMLFormElement,\n document.createElement('form'));\n\n scope.wrappers.HTMLFormElement = H TMLFormElement;\n})(window.ShadowDOMPolyfill);\n", 106 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var wrapHTMLCollection = scope.wrapHTMLCollection;\ n var unwrap = scope.unwrap;\n\n var OriginalHTMLFormElement = window.HTMLForm Element;\n\n function HTMLFormElement(node) {\n HTMLElement.call(this, node) ;\n }\n HTMLFormElement.prototype = Object.create(HTMLElement.prototype);\n m ixin(HTMLFormElement.prototype, {\n get elements() {\n // Note: technica lly this should be an HTMLFormControlsCollection, but\n // that inherits fr om HTMLCollection, so should be good enough. Spec:\n // http://www.whatwg.o rg/specs/web-apps/current-work/multipage/common-dom-interfaces.html#htmlformcont rolscollection\n return wrapHTMLCollection(unwrap(this).elements);\n }\n });\n\n registerWrapper(OriginalHTMLFormElement, HTMLFormElement,\n document.createElement('form'));\n\n scope.wrappers.HTMLFormElement = H TMLFormElement;\n})(window.ShadowDOMPolyfill);\n",
(...skipping 23 matching lines...) Expand all
130 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope. wrappers.EventTarget;\n var Selection = scope.wrappers.Selection;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var renderAllP ending = scope.renderAllPending;\n var unwrap = scope.unwrap;\n var unwrapIfNe eded = scope.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalWindow = window.Window;\n var originalGetComputedStyle = window.getComputedStyle;\n va r originalGetDefaultComputedStyle = window.getDefaultComputedStyle;\n var origi nalGetSelection = window.getSelection;\n\n function Window(impl) {\n EventTa rget.call(this, impl);\n }\n Window.prototype = Object.create(EventTarget.prot otype);\n\n OriginalWindow.prototype.getComputedStyle = function(el, pseudo) {\ n return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pseudo);\n };\n\n // Mozilla proprietary extension.\n if (originalGetDefaultComputedSty le) {\n OriginalWindow.prototype.getDefaultComputedStyle = function(el, pseud o) {\n return wrap(this || window).getDefaultComputedStyle(\n unwr apIfNeeded(el), pseudo);\n };\n }\n\n OriginalWindow.prototype.getSelection = function() {\n return wrap(this || window).getSelection();\n };\n\n // W ork around for https://bugzilla.mozilla.org/show_bug.cgi?id=943065\n delete win dow.getComputedStyle;\n delete window.getDefaultComputedStyle;\n delete window .getSelection;\n\n ['addEventListener', 'removeEventListener', 'dispatchEvent'] .forEach(\n function(name) {\n OriginalWindow.prototype[name] = func tion() {\n var w = wrap(this || window);\n return w[name].appl y(w, arguments);\n };\n\n // Work around for https://bugzilla.mozi lla.org/show_bug.cgi?id=943065\n delete window[name];\n });\n\n mix in(Window.prototype, {\n getComputedStyle: function(el, pseudo) {\n rend erAllPending();\n return originalGetComputedStyle.call(unwrap(this), unwrap IfNeeded(el),\n pseudo);\n },\n getSelection: function() {\n renderAllPending();\n return new Selectio n(originalGetSelection.call(unwrap(this)));\n },\n\n get document() {\n return wrap(unwrap(this).document);\n }\n });\n\n // Mozilla proprietary extension.\n if (originalGetDefaultComputedStyle) {\n Window.prototype.getD efaultComputedStyle = function(el, pseudo) {\n renderAllPending();\n r eturn originalGetDefaultComputedStyle.call(unwrap(this),\n unwrapIfNeed ed(el),pseudo);\n };\n }\n\n registerWrapper(OriginalWindow, Window, window );\n\n scope.wrappers.Window = Window;\n\n})(window.ShadowDOMPolyfill);\n", 130 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope. wrappers.EventTarget;\n var Selection = scope.wrappers.Selection;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var renderAllP ending = scope.renderAllPending;\n var unwrap = scope.unwrap;\n var unwrapIfNe eded = scope.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalWindow = window.Window;\n var originalGetComputedStyle = window.getComputedStyle;\n va r originalGetDefaultComputedStyle = window.getDefaultComputedStyle;\n var origi nalGetSelection = window.getSelection;\n\n function Window(impl) {\n EventTa rget.call(this, impl);\n }\n Window.prototype = Object.create(EventTarget.prot otype);\n\n OriginalWindow.prototype.getComputedStyle = function(el, pseudo) {\ n return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pseudo);\n };\n\n // Mozilla proprietary extension.\n if (originalGetDefaultComputedSty le) {\n OriginalWindow.prototype.getDefaultComputedStyle = function(el, pseud o) {\n return wrap(this || window).getDefaultComputedStyle(\n unwr apIfNeeded(el), pseudo);\n };\n }\n\n OriginalWindow.prototype.getSelection = function() {\n return wrap(this || window).getSelection();\n };\n\n // W ork around for https://bugzilla.mozilla.org/show_bug.cgi?id=943065\n delete win dow.getComputedStyle;\n delete window.getDefaultComputedStyle;\n delete window .getSelection;\n\n ['addEventListener', 'removeEventListener', 'dispatchEvent'] .forEach(\n function(name) {\n OriginalWindow.prototype[name] = func tion() {\n var w = wrap(this || window);\n return w[name].appl y(w, arguments);\n };\n\n // Work around for https://bugzilla.mozi lla.org/show_bug.cgi?id=943065\n delete window[name];\n });\n\n mix in(Window.prototype, {\n getComputedStyle: function(el, pseudo) {\n rend erAllPending();\n return originalGetComputedStyle.call(unwrap(this), unwrap IfNeeded(el),\n pseudo);\n },\n getSelection: function() {\n renderAllPending();\n return new Selectio n(originalGetSelection.call(unwrap(this)));\n },\n\n get document() {\n return wrap(unwrap(this).document);\n }\n });\n\n // Mozilla proprietary extension.\n if (originalGetDefaultComputedStyle) {\n Window.prototype.getD efaultComputedStyle = function(el, pseudo) {\n renderAllPending();\n r eturn originalGetDefaultComputedStyle.call(unwrap(this),\n unwrapIfNeed ed(el),pseudo);\n };\n }\n\n registerWrapper(OriginalWindow, Window, window );\n\n scope.wrappers.Window = Window;\n\n})(window.ShadowDOMPolyfill);\n",
131 "/**\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in t he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var unwrap = s cope.unwrap;\n\n // DataTransfer (Clipboard in old Blink/WebKit) has a single m ethod that\n // requires wrapping. Since it is only a method we do not need a r eal wrapper,\n // we can just override the method.\n\n var OriginalDataTransfe r = window.DataTransfer || window.Clipboard;\n var OriginalDataTransferSetDragI mage =\n OriginalDataTransfer.prototype.setDragImage;\n\n if (OriginalData TransferSetDragImage) {\n OriginalDataTransfer.prototype.setDragImage = funct ion(image, x, y) {\n OriginalDataTransferSetDragImage.call(this, unwrap(ima ge), x, y);\n };\n }\n\n})(window.ShadowDOMPolyfill);\n", 131 "/**\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in t he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var unwrap = s cope.unwrap;\n\n // DataTransfer (Clipboard in old Blink/WebKit) has a single m ethod that\n // requires wrapping. Since it is only a method we do not need a r eal wrapper,\n // we can just override the method.\n\n var OriginalDataTransfe r = window.DataTransfer || window.Clipboard;\n var OriginalDataTransferSetDragI mage =\n OriginalDataTransfer.prototype.setDragImage;\n\n if (OriginalData TransferSetDragImage) {\n OriginalDataTransfer.prototype.setDragImage = funct ion(image, x, y) {\n OriginalDataTransferSetDragImage.call(this, unwrap(ima ge), x, y);\n };\n }\n\n})(window.ShadowDOMPolyfill);\n",
132 "/**\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in t he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var registerWr apper = scope.registerWrapper;\n var setWrapper = scope.setWrapper;\n var unwr ap = scope.unwrap;\n\n var OriginalFormData = window.FormData;\n if (!Original FormData) return;\n\n function FormData(formElement) {\n var impl;\n if ( formElement instanceof OriginalFormData) {\n impl = formElement;\n } els e {\n impl = new OriginalFormData(formElement && unwrap(formElement));\n }\n setWrapper(impl, this);\n }\n\n registerWrapper(OriginalFormData, Form Data, new OriginalFormData());\n\n scope.wrappers.FormData = FormData;\n\n})(wi ndow.ShadowDOMPolyfill);\n", 132 "/**\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in t he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var registerWr apper = scope.registerWrapper;\n var setWrapper = scope.setWrapper;\n var unwr ap = scope.unwrap;\n\n var OriginalFormData = window.FormData;\n if (!Original FormData) return;\n\n function FormData(formElement) {\n var impl;\n if ( formElement instanceof OriginalFormData) {\n impl = formElement;\n } els e {\n impl = new OriginalFormData(formElement && unwrap(formElement));\n }\n setWrapper(impl, this);\n }\n\n registerWrapper(OriginalFormData, Form Data, new OriginalFormData());\n\n scope.wrappers.FormData = FormData;\n\n})(wi ndow.ShadowDOMPolyfill);\n",
133 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var unwrapIfNee ded = scope.unwrapIfNeeded;\n var originalSend = XMLHttpRequest.prototype.send; \n\n // Since we only need to adjust XHR.send, we just patch it instead of wrap ping\n // the entire object. This happens when FormData is passed.\n XMLHttpRe quest.prototype.send = function(obj) {\n return originalSend.call(this, unwra pIfNeeded(obj));\n };\n\n})(window.ShadowDOMPolyfill);\n", 133 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var unwrapIfNee ded = scope.unwrapIfNeeded;\n var originalSend = XMLHttpRequest.prototype.send; \n\n // Since we only need to adjust XHR.send, we just patch it instead of wrap ping\n // the entire object. This happens when FormData is passed.\n XMLHttpRe quest.prototype.send = function(obj) {\n return originalSend.call(this, unwra pIfNeeded(obj));\n };\n\n})(window.ShadowDOMPolyfill);\n",
134 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var isWrapperFor = scope .isWrapperFor;\n\n // This is a list of the elements we currently override the global constructor\n // for.\n var elements = {\n 'a': 'HTMLAnchorElement', \n // Do not create an applet element by default since it shows a warning in\ n // IE.\n // https://github.com/Polymer/polymer/issues/217\n // 'apple t': 'HTMLAppletElement',\n 'area': 'HTMLAreaElement',\n 'audio': 'HTMLAudi oElement',\n 'base': 'HTMLBaseElement',\n 'body': 'HTMLBodyElement',\n 'br': 'HTMLBRElement',\n 'button': 'HTMLButtonElement',\n 'canvas': 'HTMLC anvasElement',\n 'caption': 'HTMLTableCaptionElement',\n 'col': 'HTMLTable ColElement',\n // 'command': 'HTMLCommandElement', // Not fully implemented in Gecko.\n 'content': 'HTMLContentElement',\n 'data': 'HTMLDataElement',\ n 'datalist': 'HTMLDataListElement',\n 'del': 'HTMLModElement',\n 'dir' : 'HTMLDirectoryElement',\n 'div': 'HTMLDivElement',\n 'dl': 'HTMLDListEle ment',\n 'embed': 'HTMLEmbedElement',\n 'fieldset': 'HTMLFieldSetElement', \n 'font': 'HTMLFontElement',\n 'form': 'HTMLFormElement',\n 'frame': ' HTMLFrameElement',\n 'frameset': 'HTMLFrameSetElement',\n 'h1': 'HTMLHeadi ngElement',\n 'head': 'HTMLHeadElement',\n 'hr': 'HTMLHRElement',\n 'ht ml': 'HTMLHtmlElement',\n 'iframe': 'HTMLIFrameElement',\n 'img': 'HTMLIma geElement',\n 'input': 'HTMLInputElement',\n 'keygen': 'HTMLKeygenElement' ,\n 'label': 'HTMLLabelElement',\n 'legend': 'HTMLLegendElement',\n 'li ': 'HTMLLIElement',\n 'link': 'HTMLLinkElement',\n 'map': 'HTMLMapElement' ,\n 'marquee': 'HTMLMarqueeElement',\n 'menu': 'HTMLMenuElement',\n 'me nuitem': 'HTMLMenuItemElement',\n 'meta': 'HTMLMetaElement',\n 'meter': 'H TMLMeterElement',\n 'object': 'HTMLObjectElement',\n 'ol': 'HTMLOListEleme nt',\n 'optgroup': 'HTMLOptGroupElement',\n 'option': 'HTMLOptionElement', \n 'output': 'HTMLOutputElement',\n 'p': 'HTMLParagraphElement',\n 'par am': 'HTMLParamElement',\n 'pre': 'HTMLPreElement',\n 'progress': 'HTMLPro gressElement',\n 'q': 'HTMLQuoteElement',\n 'script': 'HTMLScriptElement', \n 'select': 'HTMLSelectElement',\n 'shadow': 'HTMLShadowElement',\n 's ource': 'HTMLSourceElement',\n 'span': 'HTMLSpanElement',\n 'style': 'HTML StyleElement',\n 'table': 'HTMLTableElement',\n 'tbody': 'HTMLTableSection Element',\n // WebKit and Moz are wrong:\n // https://bugs.webkit.org/show _bug.cgi?id=111469\n // https://bugzilla.mozilla.org/show_bug.cgi?id=848096\n // 'td': 'HTMLTableCellElement',\n 'template': 'HTMLTemplateElement',\n 'textarea': 'HTMLTextAreaElement',\n 'thead': 'HTMLTableSectionElement',\n 'time': 'HTMLTimeElement',\n 'title': 'HTMLTitleElement',\n 'tr': 'HTML TableRowElement',\n 'track': 'HTMLTrackElement',\n 'ul': 'HTMLUListElement ',\n 'video': 'HTMLVideoElement',\n };\n\n function overrideConstructor(tag Name) {\n var nativeConstructorName = elements[tagName];\n var nativeConst ructor = window[nativeConstructorName];\n if (!nativeConstructor)\n retu rn;\n var element = document.createElement(tagName);\n var wrapperConstruc tor = element.constructor;\n window[nativeConstructorName] = wrapperConstruct or;\n }\n\n Object.keys(elements).forEach(overrideConstructor);\n\n Object.ge tOwnPropertyNames(scope.wrappers).forEach(function(name) {\n window[name] = s cope.wrappers[name]\n });\n\n})(window.ShadowDOMPolyfill);\n", 134 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var isWrapperFor = scope .isWrapperFor;\n\n // This is a list of the elements we currently override the global constructor\n // for.\n var elements = {\n 'a': 'HTMLAnchorElement', \n // Do not create an applet element by default since it shows a warning in\ n // IE.\n // https://github.com/Polymer/polymer/issues/217\n // 'apple t': 'HTMLAppletElement',\n 'area': 'HTMLAreaElement',\n 'audio': 'HTMLAudi oElement',\n 'base': 'HTMLBaseElement',\n 'body': 'HTMLBodyElement',\n 'br': 'HTMLBRElement',\n 'button': 'HTMLButtonElement',\n 'canvas': 'HTMLC anvasElement',\n 'caption': 'HTMLTableCaptionElement',\n 'col': 'HTMLTable ColElement',\n // 'command': 'HTMLCommandElement', // Not fully implemented in Gecko.\n 'content': 'HTMLContentElement',\n 'data': 'HTMLDataElement',\ n 'datalist': 'HTMLDataListElement',\n 'del': 'HTMLModElement',\n 'dir' : 'HTMLDirectoryElement',\n 'div': 'HTMLDivElement',\n 'dl': 'HTMLDListEle ment',\n 'embed': 'HTMLEmbedElement',\n 'fieldset': 'HTMLFieldSetElement', \n 'font': 'HTMLFontElement',\n 'form': 'HTMLFormElement',\n 'frame': ' HTMLFrameElement',\n 'frameset': 'HTMLFrameSetElement',\n 'h1': 'HTMLHeadi ngElement',\n 'head': 'HTMLHeadElement',\n 'hr': 'HTMLHRElement',\n 'ht ml': 'HTMLHtmlElement',\n 'iframe': 'HTMLIFrameElement',\n 'img': 'HTMLIma geElement',\n 'input': 'HTMLInputElement',\n 'keygen': 'HTMLKeygenElement' ,\n 'label': 'HTMLLabelElement',\n 'legend': 'HTMLLegendElement',\n 'li ': 'HTMLLIElement',\n 'link': 'HTMLLinkElement',\n 'map': 'HTMLMapElement' ,\n 'marquee': 'HTMLMarqueeElement',\n 'menu': 'HTMLMenuElement',\n 'me nuitem': 'HTMLMenuItemElement',\n 'meta': 'HTMLMetaElement',\n 'meter': 'H TMLMeterElement',\n 'object': 'HTMLObjectElement',\n 'ol': 'HTMLOListEleme nt',\n 'optgroup': 'HTMLOptGroupElement',\n 'option': 'HTMLOptionElement', \n 'output': 'HTMLOutputElement',\n 'p': 'HTMLParagraphElement',\n 'par am': 'HTMLParamElement',\n 'pre': 'HTMLPreElement',\n 'progress': 'HTMLPro gressElement',\n 'q': 'HTMLQuoteElement',\n 'script': 'HTMLScriptElement', \n 'select': 'HTMLSelectElement',\n 'shadow': 'HTMLShadowElement',\n 's ource': 'HTMLSourceElement',\n 'span': 'HTMLSpanElement',\n 'style': 'HTML StyleElement',\n 'table': 'HTMLTableElement',\n 'tbody': 'HTMLTableSection Element',\n // WebKit and Moz are wrong:\n // https://bugs.webkit.org/show _bug.cgi?id=111469\n // https://bugzilla.mozilla.org/show_bug.cgi?id=848096\n // 'td': 'HTMLTableCellElement',\n 'template': 'HTMLTemplateElement',\n 'textarea': 'HTMLTextAreaElement',\n 'thead': 'HTMLTableSectionElement',\n 'time': 'HTMLTimeElement',\n 'title': 'HTMLTitleElement',\n 'tr': 'HTML TableRowElement',\n 'track': 'HTMLTrackElement',\n 'ul': 'HTMLUListElement ',\n 'video': 'HTMLVideoElement',\n };\n\n function overrideConstructor(tag Name) {\n var nativeConstructorName = elements[tagName];\n var nativeConst ructor = window[nativeConstructorName];\n if (!nativeConstructor)\n retu rn;\n var element = document.createElement(tagName);\n var wrapperConstruc tor = element.constructor;\n window[nativeConstructorName] = wrapperConstruct or;\n }\n\n Object.keys(elements).forEach(overrideConstructor);\n\n Object.ge tOwnPropertyNames(scope.wrappers).forEach(function(name) {\n window[name] = s cope.wrappers[name]\n });\n\n})(window.ShadowDOMPolyfill);\n",
135 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n / / convenient global\n window.wrap = ShadowDOMPolyfill.wrapIfNeeded;\n window.u nwrap = ShadowDOMPolyfill.unwrapIfNeeded;\n\n // users may want to customize ot her types\n // TODO(sjmiles): 'button' is now supported by ShadowDOMPolyfill, b ut\n // I've left this code here in case we need to temporarily patch another\n // type\n /*\n (function() {\n var elts = {HTMLButtonElement: 'button'};\ n for (var c in elts) {\n window[c] = function() { throw 'Patched Constr uctor'; };\n window[c].prototype = Object.getPrototypeOf(\n docume nt.createElement(elts[c]));\n }\n })();\n */\n\n // patch in prefixed name \n Object.defineProperty(Element.prototype, 'webkitShadowRoot',\n Object.g etOwnPropertyDescriptor(Element.prototype, 'shadowRoot'));\n\n var originalCrea teShadowRoot = Element.prototype.createShadowRoot;\n Element.prototype.createSh adowRoot = function() {\n var root = originalCreateShadowRoot.call(this);\n CustomElements.watchShadow(this);\n return root;\n };\n\n Element.prototy pe.webkitCreateShadowRoot = Element.prototype.createShadowRoot;\n\n function qu eryShadow(node, selector) {\n var m, el = node.firstElementChild;\n var sh adows, sr, i;\n shadows = [];\n sr = node.shadowRoot;\n while(sr) {\n shadows.push(sr);\n sr = sr.olderShadowRoot;\n }\n for(i = shadow s.length - 1; i >= 0; i--) {\n m = shadows[i].querySelector(selector);\n if (m) {\n return m;\n }\n }\n while(el) {\n m = query Shadow(el, selector);\n if (m) {\n return m;\n }\n el = el .nextElementSibling;\n }\n return null;\n }\n\n function queryAllShadows (node, selector, results) {\n var el = node.firstElementChild;\n var temp, sr, shadows, i, j;\n shadows = [];\n sr = node.shadowRoot;\n while(sr) {\n shadows.push(sr);\n sr = sr.olderShadowRoot;\n }\n for (i = shadows.length - 1; i >= 0; i--) {\n temp = shadows[i].querySelectorAll(se lector);\n for(j = 0; j < temp.length; j++) {\n results.push(temp[j] );\n }\n }\n while (el) {\n queryAllShadows(el, selector, result s);\n el = el.nextElementSibling;\n }\n return results;\n }\n\n sco pe.queryAllShadows = function(node, selector, all) {\n if (all) {\n retu rn queryAllShadows(node, selector, []);\n } else {\n return queryShadow( node, selector);\n }\n };\n})(window.Platform);\n", 135 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n / / convenient global\n window.wrap = ShadowDOMPolyfill.wrapIfNeeded;\n window.u nwrap = ShadowDOMPolyfill.unwrapIfNeeded;\n\n // users may want to customize ot her types\n // TODO(sjmiles): 'button' is now supported by ShadowDOMPolyfill, b ut\n // I've left this code here in case we need to temporarily patch another\n // type\n /*\n (function() {\n var elts = {HTMLButtonElement: 'button'};\ n for (var c in elts) {\n window[c] = function() { throw 'Patched Constr uctor'; };\n window[c].prototype = Object.getPrototypeOf(\n docume nt.createElement(elts[c]));\n }\n })();\n */\n\n // patch in prefixed name \n Object.defineProperty(Element.prototype, 'webkitShadowRoot',\n Object.g etOwnPropertyDescriptor(Element.prototype, 'shadowRoot'));\n\n var originalCrea teShadowRoot = Element.prototype.createShadowRoot;\n Element.prototype.createSh adowRoot = function() {\n var root = originalCreateShadowRoot.call(this);\n CustomElements.watchShadow(this);\n return root;\n };\n\n Element.prototy pe.webkitCreateShadowRoot = Element.prototype.createShadowRoot;\n\n function qu eryShadow(node, selector) {\n var m, el = node.firstElementChild;\n var sh adows, sr, i;\n shadows = [];\n sr = node.shadowRoot;\n while(sr) {\n shadows.push(sr);\n sr = sr.olderShadowRoot;\n }\n for(i = shadow s.length - 1; i >= 0; i--) {\n m = shadows[i].querySelector(selector);\n if (m) {\n return m;\n }\n }\n while(el) {\n m = query Shadow(el, selector);\n if (m) {\n return m;\n }\n el = el .nextElementSibling;\n }\n return null;\n }\n\n function queryAllShadows (node, selector, results) {\n var el = node.firstElementChild;\n var temp, sr, shadows, i, j;\n shadows = [];\n sr = node.shadowRoot;\n while(sr) {\n shadows.push(sr);\n sr = sr.olderShadowRoot;\n }\n for (i = shadows.length - 1; i >= 0; i--) {\n temp = shadows[i].querySelectorAll(se lector);\n for(j = 0; j < temp.length; j++) {\n results.push(temp[j] );\n }\n }\n while (el) {\n queryAllShadows(el, selector, result s);\n el = el.nextElementSibling;\n }\n return results;\n }\n\n sco pe.queryAllShadows = function(node, selector, all) {\n if (all) {\n retu rn queryAllShadows(node, selector, []);\n } else {\n return queryShadow( node, selector);\n }\n };\n})(window.Platform);\n",
136 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/*\n This is a limited s him for ShadowDOM css styling.\n https://dvcs.w3.org/hg/webcomponents/raw-file/ tip/spec/shadow/index.html#styles\n \n The intention here is to support only t he styling features which can be \n relatively simply implemented. The goal is to allow users to avoid the \n most obvious pitfalls and do so without compromi sing performance significantly. \n For ShadowDOM styling that's not covered her e, a set of best practices\n can be provided that should allow users to accompl ish more complex styling.\n\n The following is a list of specific ShadowDOM sty ling features and a brief\n discussion of the approach used to shim.\n\n Shimm ed features:\n\n * :host, :host-context: ShadowDOM allows styling of the shadow Root's host\n element using the :host rule. To shim this feature, the :host sty les are \n reformatted and prefixed with a given scope name and promoted to a \ n document level stylesheet.\n For example, given a scope name of .foo, a rule like this:\n \n :host {\n background: red;\n }\n }\n \n be comes:\n \n .foo {\n background: red;\n }\n \n * encapsultion: Sty les defined within ShadowDOM, apply only to \n dom inside the ShadowDOM. Polyme r uses one of two techniques to imlement\n this feature.\n \n By default, rul es are prefixed with the host element tag name \n as a descendant selector. Thi s ensures styling does not leak out of the 'top'\n of the element's ShadowDOM. For example,\n\n div {\n font-weight: bold;\n }\n \n becomes:\n\n x- foo div {\n font-weight: bold;\n }\n \n becomes:\n\n\n Alternatively, if Platform.ShadowCSS.strictStyling is set to true then \n selectors are scope d by adding an attribute selector suffix to each\n simple selector that contain s the host element tag name. Each element \n in the element's ShadowDOM templat e is also given the scope attribute. \n Thus, these rules match only elements t hat have the scope attribute.\n For example, given a scope name of x-foo, a rul e like this:\n \n div {\n font-weight: bold;\n }\n \n becomes:\n \n div[x-foo] {\n font-weight: bold;\n }\n\n Note that elements that are dynamically added to a scope must have the scope\n selector added to them manually.\n\n * upper/lower bound encapsulation: Styles which are defined outsi de a\n shadowRoot should not cross the ShadowDOM boundary and should not apply\ n inside a shadowRoot.\n\n This styling behavior is not emulated. Some possibl e ways to do this that \n were rejected due to complexity and/or performance co ncerns include: (1) reset\n every possible property for every possible selector for a given scope name;\n (2) re-implement css in javascript.\n \n As an alt ernative, users should make sure to use selectors\n specific to the scope in wh ich they are working.\n \n * ::distributed: This behavior is not emulated. It' s often not necessary\n to style the contents of a specific insertion point and instead, descendants\n of the host element can be styled selectively. Users ca n also create an \n extra node around an insertion point and style that node's contents\n via descendent selectors. For example, with a shadowRoot like this:\ n \n <style>\n ::content(div) {\n background: red;\n }\n </style>\n <content></content>\n \n could become:\n \n <style>\n / *@polyfill .content-container div * / \n ::content(div) {\n backgr ound: red;\n }\n </style>\n <div class=\"content-container\">\n <content></content>\n </div>\n \n Note the use of @polyfill in the comment above a ShadowDOM specific style\n declaration. This is a directive to the styl ing shim to use the selector \n in comments in lieu of the next selector when r unning under polyfill.\n*/\n(function(scope) {\n\nvar ShadowCSS = {\n strictSty ling: false,\n registry: {},\n // Shim styles for a given root associated with a name and extendsName\n // 1. cache root styles by name\n // 2. optionally t ag root nodes with scope name\n // 3. shim polyfill directives /* @polyfill */ and /* @polyfill-rule */\n // 4. shim :host and scoping\n shimStyling: functio n(root, name, extendsName) {\n var scopeStyles = this.prepareRoot(root, name, extendsName);\n var typeExtension = this.isTypeExtension(extendsName);\n var scopeSelector = this.makeScopeSelector(name, typeExtension);\n // use cac hing to make working with styles nodes easier and to facilitate\n // lookup o f extendee\n var cssText = stylesToCssText(scopeStyles, true);\n cssText = this.scopeCssText(cssText, scopeSelector);\n // cache shimmed css on root fo r user extensibility\n if (root) {\n root.shimmedStyle = cssText;\n } \n // add style to document\n this.addCssToDocument(cssText, name);\n },\ n /*\n * Shim a style element with the given selector. Returns cssText that ca n\n * be included in the document via Platform.ShadowCSS.addCssToDocument(css). \n */\n shimStyle: function(style, selector) {\n return this.shimCssText(st yle.textContent, selector);\n },\n /*\n * Shim some cssText with the given se lector. Returns cssText that can\n * be included in the document via Platform.S hadowCSS.addCssToDocument(css).\n */\n shimCssText: function(cssText, selector ) {\n cssText = this.insertDirectives(cssText);\n return this.scopeCssText (cssText, selector);\n },\n makeScopeSelector: function(name, typeExtension) { \n if (name) {\n return typeExtension ? '[is=' + name + ']' : name;\n }\n return '';\n },\n isTypeExtension: function(extendsName) {\n return extendsName && extendsName.indexOf('-') < 0;\n },\n prepareRoot: function(roo t, name, extendsName) {\n var def = this.registerRoot(root, name, extendsName );\n this.replaceTextInStyles(def.rootStyles, this.insertDirectives);\n // remove existing style elements\n this.removeStyles(root, def.rootStyles);\n // apply strict attr\n if (this.strictStyling) {\n this.applyScopeToC ontent(root, name);\n }\n return def.scopeStyles;\n },\n removeStyles: f unction(root, styles) {\n for (var i=0, l=styles.length, s; (i<l) && (s=style s[i]); i++) {\n s.parentNode.removeChild(s);\n }\n },\n registerRoot: function(root, name, extendsName) {\n var def = this.registry[name] = {\n root: root,\n name: name,\n extendsName: extendsName\n }\n var styles = this.findStyles(root);\n def.rootStyles = styles;\n def.scopeSty les = def.rootStyles;\n var extendee = this.registry[def.extendsName];\n i f (extendee) {\n def.scopeStyles = extendee.scopeStyles.concat(def.scopeSty les);\n }\n return def;\n },\n findStyles: function(root) {\n if (!ro ot) {\n return [];\n }\n var styles = root.querySelectorAll('style'); \n return Array.prototype.filter.call(styles, function(s) {\n return !s. hasAttribute(NO_SHIM_ATTRIBUTE);\n });\n },\n applyScopeToContent: function (root, name) {\n if (root) {\n // add the name attribute to each node in root.\n Array.prototype.forEach.call(root.querySelectorAll('*'),\n function(node) {\n node.setAttribute(name, '');\n });\n // and template contents too\n Array.prototype.forEach.call(root.querySe lectorAll('template'),\n function(template) {\n this.applySc opeToContent(template.content, name);\n },\n this);\n }\n },\n insertDirectives: function(cssText) {\n cssText = this.insertPolyfillDi rectivesInCssText(cssText);\n return this.insertPolyfillRulesInCssText(cssTex t);\n },\n /*\n * Process styles to convert native ShadowDOM rules that will trip\n * up the css parser; we rely on decorating the stylesheet with inert r ules.\n * \n * For example, we convert this rule:\n * \n * polyfill-next -selector { content: ':host menu-item'; }\n * ::content menu-item {\n * \n * to this:\n * \n * scopeName menu-item {\n *\n **/\n insertPolyfillDir ectivesInCssText: function(cssText) {\n // TODO(sorvell): remove either conte nt or comment\n cssText = cssText.replace(cssCommentNextSelectorRe, function( match, p1) {\n // remove end comment delimiter and add block start\n r eturn p1.slice(0, -2) + '{';\n });\n return cssText.replace(cssContentNext SelectorRe, function(match, p1) {\n return p1 + ' {';\n });\n },\n /*\ n * Process styles to add rules which will only apply under the polyfill\n * \n * For example, we convert this rule:\n * \n * polyfill-rule {\n * content: ':host menu-item';\n * ...\n * }\n * \n * to this:\n * \n * scopeName menu-item {...}\n *\n **/\n insertPolyfillRulesInCssText: functio n(cssText) {\n // TODO(sorvell): remove either content or comment\n cssTex t = cssText.replace(cssCommentRuleRe, function(match, p1) {\n // remove end comment delimiter\n return p1.slice(0, -1);\n });\n return cssText.r eplace(cssContentRuleRe, function(match, p1, p2, p3) {\n var rule = match.r eplace(p1, '').replace(p2, '');\n return p3 + rule;\n });\n },\n /* En sure styles are scoped. Pseudo-scoping takes a rule like:\n * \n * .foo {.. . } \n * \n * and converts this to\n * \n * scopeName .foo { ... }\n */\n scopeCssText: function(cssText, scopeSelector) {\n var unscoped = thi s.extractUnscopedRulesFromCssText(cssText);\n cssText = this.insertPolyfillHo stInCssText(cssText);\n cssText = this.convertColonHost(cssText);\n cssTex t = this.convertColonHostContext(cssText);\n cssText = this.convertShadowDOMS electors(cssText);\n if (scopeSelector) {\n var self = this, cssText;\n withCssRules(cssText, function(rules) {\n cssText = self.scopeRules( rules, scopeSelector);\n });\n\n }\n cssText = cssText + '\\n' + unsc oped;\n return cssText.trim();\n },\n /*\n * Process styles to add rules which will only apply under the polyfill\n * and do not process via CSSOM. (CS SOM is destructive to rules on rare \n * occasions, e.g. -webkit-calc on Safar i.)\n * For example, we convert this rule:\n * \n * (comment start) @polyf ill-unscoped-rule menu-item { \n * ... } (comment end)\n * \n * to this:\n * \n * menu-item {...}\n *\n **/\n extractUnscopedRulesFromCssText: fun ction(cssText) {\n // TODO(sorvell): remove either content or comment\n va r r = '', m;\n while (m = cssCommentUnscopedRuleRe.exec(cssText)) {\n r += m[1].slice(0, -1) + '\\n\\n';\n }\n while (m = cssContentUnscopedRuleRe .exec(cssText)) {\n r += m[0].replace(m[2], '').replace(m[1], m[3]) + '\\n\ \n';\n }\n return r;\n },\n /*\n * convert a rule like :host(.foo) > . bar { }\n *\n * to\n *\n * scopeName.foo > .bar\n */\n convertColonHos t: function(cssText) {\n return this.convertColonRule(cssText, cssColonHostRe ,\n this.colonHostPartReplacer);\n },\n /*\n * convert a rule like :h ost-context(.foo) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar, .f oo scopeName > .bar { }\n * \n * and\n *\n * :host-context(.foo:host) .b ar { ... }\n * \n * to\n * \n * scopeName.foo .bar { ... }\n */\n conv ertColonHostContext: function(cssText) {\n return this.convertColonRule(cssTe xt, cssColonHostContextRe,\n this.colonHostContextPartReplacer);\n },\n convertColonRule: function(cssText, regExp, partReplacer) {\n // p1 = :host, p2 = contents of (), p3 rest of rule\n return cssText.replace(regExp, functi on(m, p1, p2, p3) {\n p1 = polyfillHostNoCombinator;\n if (p2) {\n var parts = p2.split(','), r = [];\n for (var i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++) {\n p = p.trim();\n r.push(partRe placer(p1, p, p3));\n }\n return r.join(',');\n } else {\n return p1 + p3;\n }\n });\n },\n colonHostContextPartReplacer: fu nction(host, part, suffix) {\n if (part.match(polyfillHost)) {\n return this.colonHostPartReplacer(host, part, suffix);\n } else {\n return host + part + suffix + ', ' + part + ' ' + host + suffix;\n }\n },\n colonHostP artReplacer: function(host, part, suffix) {\n return host + part.replace(poly fillHost, '') + suffix;\n },\n /*\n * Convert combinators like ::shadow and pseudo-elements like ::content\n * by replacing with space.\n */\n convertSh adowDOMSelectors: function(cssText) {\n for (var i=0; i < shadowDOMSelectorsR e.length; i++) {\n cssText = cssText.replace(shadowDOMSelectorsRe[i], ' '); \n }\n return cssText;\n },\n // change a selector like 'div' to 'name d iv'\n scopeRules: function(cssRules, scopeSelector) {\n var cssText = '';\n if (cssRules) {\n Array.prototype.forEach.call(cssRules, function(rule) {\n if (rule.selectorText && (rule.style && rule.style.cssText !== undefi ned)) {\n cssText += this.scopeSelector(rule.selectorText, scopeSelecto r, \n this.strictStyling) + ' {\\n\\t';\n cssText += this.pr opertiesFromRule(rule) + '\\n}\\n\\n';\n } else if (rule.type === CSSRule .MEDIA_RULE) {\n cssText += '@media ' + rule.media.mediaText + ' {\\n'; \n cssText += this.scopeRules(rule.cssRules, scopeSelector);\n cssText += '\\n}\\n\\n';\n } else {\n // KEYFRAMES_RULE in IE t hrows when we query cssText\n // when it contains a -webkit- property.\ n // if this happens, we fallback to constructing the rule\n / / from the CSSRuleSet\n // https://connect.microsoft.com/IE/feedbackdet ail/view/955703/accessing-csstext-of-a-keyframe-rule-that-contains-a-webkit-prop erty-via-cssom-generates-exception\n try {\n if (rule.cssTex t) {\n cssText += rule.cssText + '\\n\\n';\n }\n } catch(x) {\n if (rule.type === CSSRule.KEYFRAMES_RULE && rule.css Rules) {\n cssText += this.ieSafeCssTextFromKeyFrameRule(rule);\n }\n }\n }\n }, this);\n }\n return cssText; \n },\n ieSafeCssTextFromKeyFrameRule: function(rule) {\n var cssText = '@k eyframes ' + rule.name + ' {';\n Array.prototype.forEach.call(rule.cssRules, function(rule) {\n cssText += ' ' + rule.keyText + ' {' + rule.style.cssTex t + '}';\n });\n cssText += ' }';\n return cssText;\n },\n scopeSelec tor: function(selector, scopeSelector, strict) {\n var r = [], parts = select or.split(',');\n parts.forEach(function(p) {\n p = p.trim();\n if ( this.selectorNeedsScoping(p, scopeSelector)) {\n p = (strict && !p.match( polyfillHostNoCombinator)) ? \n this.applyStrictSelectorScope(p, scop eSelector) :\n this.applySelectorScope(p, scopeSelector);\n }\n r.push(p);\n }, this);\n return r.join(', ');\n },\n selectorNeedsS coping: function(selector, scopeSelector) {\n if (Array.isArray(scopeSelector )) {\n return true;\n }\n var re = this.makeScopeMatcher(scopeSelecto r);\n return !selector.match(re);\n },\n makeScopeMatcher: function(scopeSe lector) {\n scopeSelector = scopeSelector.replace(/\\[/g, '\\\\[').replace(/\ \[/g, '\\\\]');\n return new RegExp('^(' + scopeSelector + ')' + selectorReSu ffix, 'm');\n },\n applySelectorScope: function(selector, selectorScope) {\n return Array.isArray(selectorScope) ?\n this.applySelectorScopeList(sel ector, selectorScope) :\n this.applySimpleSelectorScope(selector, selecto rScope);\n },\n // apply an array of selectors\n applySelectorScopeList: func tion(selector, scopeSelectorList) {\n var r = [];\n for (var i=0, s; (s=sc opeSelectorList[i]); i++) {\n r.push(this.applySimpleSelectorScope(selector , s));\n }\n return r.join(', ');\n },\n // scope via name and [is=name] \n applySimpleSelectorScope: function(selector, scopeSelector) {\n if (selec tor.match(polyfillHostRe)) {\n selector = selector.replace(polyfillHostNoCo mbinator, scopeSelector);\n return selector.replace(polyfillHostRe, scopeSe lector + ' ');\n } else {\n return scopeSelector + ' ' + selector;\n }\n },\n // return a selector with [name] suffix on each simple selector\n // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]\n applyStrictSe lectorScope: function(selector, scopeSelector) {\n scopeSelector = scopeSelec tor.replace(/\\[is=([^\\]]*)\\]/g, '$1');\n var splits = [' ', '>', '+', '~'] ,\n scoped = selector,\n attrName = '[' + scopeSelector + ']';\n sp lits.forEach(function(sep) {\n var parts = scoped.split(sep);\n scoped = parts.map(function(p) {\n // remove :host since it should be unnecessa ry\n var t = p.trim().replace(polyfillHostRe, '');\n if (t && (spl its.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {\n p = t.replace(/([ ^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')\n }\n return p;\n } ).join(sep);\n });\n return scoped;\n },\n insertPolyfillHostInCssText: function(selector) {\n return selector.replace(colonHostContextRe, polyfillHo stContext).replace(\n colonHostRe, polyfillHost);\n },\n propertiesFrom Rule: function(rule) {\n var cssText = rule.style.cssText;\n // TODO(sorve ll): Safari cssom incorrectly removes quotes from the content\n // property. (https://bugs.webkit.org/show_bug.cgi?id=118045)\n // don't replace attr rule s\n if (rule.style.content && !rule.style.content.match(/['\"]+|attr/)) {\n cssText = cssText.replace(/content:[^;]*;/g, 'content: \\'' + \n ru le.style.content + '\\';');\n }\n // TODO(sorvell): we can workaround this issue here, but we need a list\n // of troublesome properties to fix https:/ /github.com/Polymer/platform/issues/53\n //\n // inherit rules can be omit ted from cssText\n // TODO(sorvell): remove when Blink bug is fixed:\n // https://code.google.com/p/chromium/issues/detail?id=358273\n var style = rule .style;\n for (var i in style) {\n if (style[i] === 'initial') {\n cssText += i + ': initial; ';\n }\n }\n return cssText;\n },\n re placeTextInStyles: function(styles, action) {\n if (styles && action) {\n if (!(styles instanceof Array)) {\n styles = [styles];\n }\n Array.prototype.forEach.call(styles, function(s) {\n s.textContent = acti on.call(this, s.textContent);\n }, this);\n }\n },\n addCssToDocument: function(cssText, name) {\n if (cssText.match('@import')) {\n addOwnShe et(cssText, name);\n } else {\n addCssToDocument(cssText);\n }\n }\n };\n\nvar selectorRe = /([^{]*)({[\\s\\S]*?})/gim,\n cssCommentRe = /\\/\\*[^ *]*\\*+([^/*][^*]*\\*+)*\\//gim,\n // TODO(sorvell): remove either content or comment\n cssCommentNextSelectorRe = /\\/\\*\\s*@polyfill ([^*]*\\*+([^/*][^ *]*\\*+)*\\/)([^{]*?){/gim,\n cssContentNextSelectorRe = /polyfill-next-selec tor[^}]*content\\:[\\s]*?['\"](.*?)['\"][;\\s]*}([^{]*?){/gim, \n // TODO(so rvell): remove either content or comment\n cssCommentRuleRe = /\\/\\*\\s@poly fill-rule([^*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssContentRuleRe = /(polyfill -rule)[^}]*(content\\:[\\s]*['\"](.*?)['\"])[;\\s]*[^}]*}/gim,\n // TODO(sorv ell): remove either content or comment\n cssCommentUnscopedRuleRe = /\\/\\*\\ s@polyfill-unscoped-rule([^*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssContentUnsc opedRuleRe = /(polyfill-unscoped-rule)[^}]*(content\\:[\\s]*['\"](.*?)['\"])[;\\ s]*[^}]*}/gim,\n cssPseudoRe = /::(x-[^\\s{,(]*)/gim,\n cssPartRe = /::par t\\(([^)]*)\\)/gim,\n // note: :host pre-processed to -shadowcsshost.\n po lyfillHost = '-shadowcsshost',\n // note: :host-context pre-processed to -sha dowcsshostcontext.\n polyfillHostContext = '-shadowcsscontext',\n parenSuf fix = ')(?:\\\\((' +\n '(?:\\\\([^)(]*\\\\)|[^)(]*)+?' +\n ')\\\\) )?([^,{]*)';\n cssColonHostRe = new RegExp('(' + polyfillHost + parenSuffix, 'gim'),\n cssColonHostContextRe = new RegExp('(' + polyfillHostContext + pare nSuffix, 'gim'),\n selectorReSuffix = '([>\\\\s~+\\[.,{:][\\\\s\\\\S]*)?$',\n colonHostRe = /\\:host/gim,\n colonHostContextRe = /\\:host-context/gim,\ n /* host name without combinator */\n polyfillHostNoCombinator = polyfill Host + '-no-combinator',\n polyfillHostRe = new RegExp(polyfillHost, 'gim'),\ n polyfillHostContextRe = new RegExp(polyfillHostContext, 'gim'),\n shadow DOMSelectorsRe = [\n /\\^\\^/g,\n /\\^/g,\n /\\/shadow\\//g,\n /\\/shadow-deep\\//g,\n /::shadow/g,\n /\\/deep\\//g,\n /::con tent/g\n ];\n\nfunction stylesToCssText(styles, preserveComments) {\n var cs sText = '';\n Array.prototype.forEach.call(styles, function(s) {\n cssText + = s.textContent + '\\n\\n';\n });\n // strip comments for easier processing\n if (!preserveComments) {\n cssText = cssText.replace(cssCommentRe, '');\n } \n return cssText;\n}\n\nfunction cssTextToStyle(cssText) {\n var style = docu ment.createElement('style');\n style.textContent = cssText;\n return style;\n} \n\nfunction cssToRules(cssText) {\n var style = cssTextToStyle(cssText);\n do cument.head.appendChild(style);\n var rules = [];\n if (style.sheet) {\n // TODO(sorvell): Firefox throws when accessing the rules of a stylesheet\n // with an @import\n // https://bugzilla.mozilla.org/show_bug.cgi?id=625013\n try {\n rules = style.sheet.cssRules;\n } catch(e) {\n //\n }\n } else {\n console.warn('sheet not found', style);\n }\n style.parentNode .removeChild(style);\n return rules;\n}\n\nvar frame = document.createElement(' iframe');\nframe.style.display = 'none';\n\nfunction initFrame() {\n frame.init ialized = true;\n document.body.appendChild(frame);\n var doc = frame.contentD ocument;\n var base = doc.createElement('base');\n base.href = document.baseUR I;\n doc.head.appendChild(base);\n}\n\nfunction inFrame(fn) {\n if (!frame.ini tialized) {\n initFrame();\n }\n document.body.appendChild(frame);\n fn(fr ame.contentDocument);\n document.body.removeChild(frame);\n}\n\n// TODO(sorvell ): use an iframe if the cssText contains an @import to workaround\n// https://co de.google.com/p/chromium/issues/detail?id=345114\nvar isChrome = navigator.userA gent.match('Chrome');\nfunction withCssRules(cssText, callback) {\n if (!callba ck) {\n return;\n }\n var rules;\n if (cssText.match('@import') && isChrom e) {\n var style = cssTextToStyle(cssText);\n inFrame(function(doc) {\n doc.head.appendChild(style.impl);\n rules = Array.prototype.slice.call(s tyle.sheet.cssRules, 0);\n callback(rules);\n });\n } else {\n rules = cssToRules(cssText);\n callback(rules);\n }\n}\n\nfunction rulesToCss(css Rules) {\n for (var i=0, css=[]; i < cssRules.length; i++) {\n css.push(cssR ules[i].cssText);\n }\n return css.join('\\n\\n');\n}\n\nfunction addCssToDocu ment(cssText) {\n if (cssText) {\n getSheet().appendChild(document.createTex tNode(cssText));\n }\n}\n\nfunction addOwnSheet(cssText, name) {\n var style = cssTextToStyle(cssText);\n style.setAttribute(name, '');\n style.setAttribute (SHIMMED_ATTRIBUTE, '');\n document.head.appendChild(style);\n}\n\nvar SHIM_ATT RIBUTE = 'shim-shadowdom';\nvar SHIMMED_ATTRIBUTE = 'shim-shadowdom-css';\nvar N O_SHIM_ATTRIBUTE = 'no-shim';\n\nvar sheet;\nfunction getSheet() {\n if (!sheet ) {\n sheet = document.createElement(\"style\");\n sheet.setAttribute(SHIM MED_ATTRIBUTE, '');\n sheet[SHIMMED_ATTRIBUTE] = true;\n }\n return sheet;\ n}\n\n// add polyfill stylesheet to document\nif (window.ShadowDOMPolyfill) {\n addCssToDocument('style { display: none !important; }\\n');\n var doc = wrap(d ocument);\n var head = doc.querySelector('head');\n head.insertBefore(getSheet (), head.childNodes[0]);\n\n // TODO(sorvell): monkey-patching HTMLImports is a busive;\n // consider a better solution.\n document.addEventListener('DOMConte ntLoaded', function() {\n var urlResolver = scope.urlResolver;\n \n if (window.HTMLImports && !HTMLImports.useNative) {\n var SHIM_SHEET_SELECTOR = 'link[rel=stylesheet]' +\n '[' + SHIM_ATTRIBUTE + ']';\n var SHI M_STYLE_SELECTOR = 'style[' + SHIM_ATTRIBUTE + ']';\n HTMLImports.importer. documentPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n HTMLImports.import er.importsPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n\n HTMLImports.pa rser.documentSelectors = [\n HTMLImports.parser.documentSelectors,\n SHIM_SHEET_SELECTOR,\n SHIM_STYLE_SELECTOR\n ].join(',');\n \n var originalParseGeneric = HTMLImports.parser.parseGeneric;\n\n HTMLImp orts.parser.parseGeneric = function(elt) {\n if (elt[SHIMMED_ATTRIBUTE]) {\n return;\n }\n var style = elt.__importElement || elt; \n if (!style.hasAttribute(SHIM_ATTRIBUTE)) {\n originalParseGen eric.call(this, elt);\n return;\n }\n if (elt.__resource) {\n style = elt.ownerDocument.createElement('style');\n style .textContent = elt.__resource;\n }\n // relay on HTMLImports for p ath fixup\n HTMLImports.path.resolveUrlsInStyle(style);\n style.te xtContent = ShadowCSS.shimStyle(style);\n style.removeAttribute(SHIM_ATTR IBUTE, '');\n style.setAttribute(SHIMMED_ATTRIBUTE, '');\n style[S HIMMED_ATTRIBUTE] = true;\n // place in document\n if (style.paren tNode !== head) {\n // replace links in head\n if (elt.parentN ode === head) {\n head.replaceChild(style, elt);\n } else {\ n this.addElementToDocument(style);\n }\n }\n style.__importParsed = true;\n this.markParsingComplete(elt);\n th is.parseNext();\n }\n\n var hasResource = HTMLImports.parser.hasResour ce;\n HTMLImports.parser.hasResource = function(node) {\n if (node.l ocalName === 'link' && node.rel === 'stylesheet' &&\n node.hasAttribu te(SHIM_ATTRIBUTE)) {\n return (node.__resource);\n } else {\n return hasResource.call(this, node);\n }\n }\n\n }\n }); \n}\n\n// exports\nscope.ShadowCSS = ShadowCSS;\n\n})(window.Platform);\n", 136 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/*\n This is a limited s him for ShadowDOM css styling.\n https://dvcs.w3.org/hg/webcomponents/raw-file/ tip/spec/shadow/index.html#styles\n \n The intention here is to support only t he styling features which can be \n relatively simply implemented. The goal is to allow users to avoid the \n most obvious pitfalls and do so without compromi sing performance significantly. \n For ShadowDOM styling that's not covered her e, a set of best practices\n can be provided that should allow users to accompl ish more complex styling.\n\n The following is a list of specific ShadowDOM sty ling features and a brief\n discussion of the approach used to shim.\n\n Shimm ed features:\n\n * :host, :host-context: ShadowDOM allows styling of the shadow Root's host\n element using the :host rule. To shim this feature, the :host sty les are \n reformatted and prefixed with a given scope name and promoted to a \ n document level stylesheet.\n For example, given a scope name of .foo, a rule like this:\n \n :host {\n background: red;\n }\n }\n \n be comes:\n \n .foo {\n background: red;\n }\n \n * encapsultion: Sty les defined within ShadowDOM, apply only to \n dom inside the ShadowDOM. Polyme r uses one of two techniques to imlement\n this feature.\n \n By default, rul es are prefixed with the host element tag name \n as a descendant selector. Thi s ensures styling does not leak out of the 'top'\n of the element's ShadowDOM. For example,\n\n div {\n font-weight: bold;\n }\n \n becomes:\n\n x- foo div {\n font-weight: bold;\n }\n \n becomes:\n\n\n Alternatively, if Platform.ShadowCSS.strictStyling is set to true then \n selectors are scope d by adding an attribute selector suffix to each\n simple selector that contain s the host element tag name. Each element \n in the element's ShadowDOM templat e is also given the scope attribute. \n Thus, these rules match only elements t hat have the scope attribute.\n For example, given a scope name of x-foo, a rul e like this:\n \n div {\n font-weight: bold;\n }\n \n becomes:\n \n div[x-foo] {\n font-weight: bold;\n }\n\n Note that elements that are dynamically added to a scope must have the scope\n selector added to them manually.\n\n * upper/lower bound encapsulation: Styles which are defined outsi de a\n shadowRoot should not cross the ShadowDOM boundary and should not apply\ n inside a shadowRoot.\n\n This styling behavior is not emulated. Some possibl e ways to do this that \n were rejected due to complexity and/or performance co ncerns include: (1) reset\n every possible property for every possible selector for a given scope name;\n (2) re-implement css in javascript.\n \n As an alt ernative, users should make sure to use selectors\n specific to the scope in wh ich they are working.\n \n * ::distributed: This behavior is not emulated. It' s often not necessary\n to style the contents of a specific insertion point and instead, descendants\n of the host element can be styled selectively. Users ca n also create an \n extra node around an insertion point and style that node's contents\n via descendent selectors. For example, with a shadowRoot like this:\ n \n <style>\n ::content(div) {\n background: red;\n }\n </style>\n <content></content>\n \n could become:\n \n <style>\n / *@polyfill .content-container div * / \n ::content(div) {\n backgr ound: red;\n }\n </style>\n <div class=\"content-container\">\n <content></content>\n </div>\n \n Note the use of @polyfill in the comment above a ShadowDOM specific style\n declaration. This is a directive to the styl ing shim to use the selector \n in comments in lieu of the next selector when r unning under polyfill.\n*/\n(function(scope) {\n\nvar ShadowCSS = {\n strictSty ling: false,\n registry: {},\n // Shim styles for a given root associated with a name and extendsName\n // 1. cache root styles by name\n // 2. optionally t ag root nodes with scope name\n // 3. shim polyfill directives /* @polyfill */ and /* @polyfill-rule */\n // 4. shim :host and scoping\n shimStyling: functio n(root, name, extendsName) {\n var scopeStyles = this.prepareRoot(root, name, extendsName);\n var typeExtension = this.isTypeExtension(extendsName);\n var scopeSelector = this.makeScopeSelector(name, typeExtension);\n // use cac hing to make working with styles nodes easier and to facilitate\n // lookup o f extendee\n var cssText = stylesToCssText(scopeStyles, true);\n cssText = this.scopeCssText(cssText, scopeSelector);\n // cache shimmed css on root fo r user extensibility\n if (root) {\n root.shimmedStyle = cssText;\n } \n // add style to document\n this.addCssToDocument(cssText, name);\n },\ n /*\n * Shim a style element with the given selector. Returns cssText that ca n\n * be included in the document via Platform.ShadowCSS.addCssToDocument(css). \n */\n shimStyle: function(style, selector) {\n return this.shimCssText(st yle.textContent, selector);\n },\n /*\n * Shim some cssText with the given se lector. Returns cssText that can\n * be included in the document via Platform.S hadowCSS.addCssToDocument(css).\n */\n shimCssText: function(cssText, selector ) {\n cssText = this.insertDirectives(cssText);\n return this.scopeCssText (cssText, selector);\n },\n makeScopeSelector: function(name, typeExtension) { \n if (name) {\n return typeExtension ? '[is=' + name + ']' : name;\n }\n return '';\n },\n isTypeExtension: function(extendsName) {\n return extendsName && extendsName.indexOf('-') < 0;\n },\n prepareRoot: function(roo t, name, extendsName) {\n var def = this.registerRoot(root, name, extendsName );\n this.replaceTextInStyles(def.rootStyles, this.insertDirectives);\n // remove existing style elements\n this.removeStyles(root, def.rootStyles);\n // apply strict attr\n if (this.strictStyling) {\n this.applyScopeToC ontent(root, name);\n }\n return def.scopeStyles;\n },\n removeStyles: f unction(root, styles) {\n for (var i=0, l=styles.length, s; (i<l) && (s=style s[i]); i++) {\n s.parentNode.removeChild(s);\n }\n },\n registerRoot: function(root, name, extendsName) {\n var def = this.registry[name] = {\n root: root,\n name: name,\n extendsName: extendsName\n }\n var styles = this.findStyles(root);\n def.rootStyles = styles;\n def.scopeSty les = def.rootStyles;\n var extendee = this.registry[def.extendsName];\n i f (extendee) {\n def.scopeStyles = extendee.scopeStyles.concat(def.scopeSty les);\n }\n return def;\n },\n findStyles: function(root) {\n if (!ro ot) {\n return [];\n }\n var styles = root.querySelectorAll('style'); \n return Array.prototype.filter.call(styles, function(s) {\n return !s. hasAttribute(NO_SHIM_ATTRIBUTE);\n });\n },\n applyScopeToContent: function (root, name) {\n if (root) {\n // add the name attribute to each node in root.\n Array.prototype.forEach.call(root.querySelectorAll('*'),\n function(node) {\n node.setAttribute(name, '');\n });\n // and template contents too\n Array.prototype.forEach.call(root.querySe lectorAll('template'),\n function(template) {\n this.applySc opeToContent(template.content, name);\n },\n this);\n }\n },\n insertDirectives: function(cssText) {\n cssText = this.insertPolyfillDi rectivesInCssText(cssText);\n return this.insertPolyfillRulesInCssText(cssTex t);\n },\n /*\n * Process styles to convert native ShadowDOM rules that will trip\n * up the css parser; we rely on decorating the stylesheet with inert r ules.\n * \n * For example, we convert this rule:\n * \n * polyfill-next -selector { content: ':host menu-item'; }\n * ::content menu-item {\n * \n * to this:\n * \n * scopeName menu-item {\n *\n **/\n insertPolyfillDir ectivesInCssText: function(cssText) {\n // TODO(sorvell): remove either conte nt or comment\n cssText = cssText.replace(cssCommentNextSelectorRe, function( match, p1) {\n // remove end comment delimiter and add block start\n r eturn p1.slice(0, -2) + '{';\n });\n return cssText.replace(cssContentNext SelectorRe, function(match, p1) {\n return p1 + ' {';\n });\n },\n /*\ n * Process styles to add rules which will only apply under the polyfill\n * \n * For example, we convert this rule:\n * \n * polyfill-rule {\n * content: ':host menu-item';\n * ...\n * }\n * \n * to this:\n * \n * scopeName menu-item {...}\n *\n **/\n insertPolyfillRulesInCssText: functio n(cssText) {\n // TODO(sorvell): remove either content or comment\n cssTex t = cssText.replace(cssCommentRuleRe, function(match, p1) {\n // remove end comment delimiter\n return p1.slice(0, -1);\n });\n return cssText.r eplace(cssContentRuleRe, function(match, p1, p2, p3) {\n var rule = match.r eplace(p1, '').replace(p2, '');\n return p3 + rule;\n });\n },\n /* En sure styles are scoped. Pseudo-scoping takes a rule like:\n * \n * .foo {.. . } \n * \n * and converts this to\n * \n * scopeName .foo { ... }\n */\n scopeCssText: function(cssText, scopeSelector) {\n var unscoped = thi s.extractUnscopedRulesFromCssText(cssText);\n cssText = this.insertPolyfillHo stInCssText(cssText);\n cssText = this.convertColonHost(cssText);\n cssTex t = this.convertColonHostContext(cssText);\n cssText = this.convertShadowDOMS electors(cssText);\n if (scopeSelector) {\n var self = this, cssText;\n withCssRules(cssText, function(rules) {\n cssText = self.scopeRules( rules, scopeSelector);\n });\n\n }\n cssText = cssText + '\\n' + unsc oped;\n return cssText.trim();\n },\n /*\n * Process styles to add rules which will only apply under the polyfill\n * and do not process via CSSOM. (CS SOM is destructive to rules on rare \n * occasions, e.g. -webkit-calc on Safar i.)\n * For example, we convert this rule:\n * \n * (comment start) @polyf ill-unscoped-rule menu-item { \n * ... } (comment end)\n * \n * to this:\n * \n * menu-item {...}\n *\n **/\n extractUnscopedRulesFromCssText: fun ction(cssText) {\n // TODO(sorvell): remove either content or comment\n va r r = '', m;\n while (m = cssCommentUnscopedRuleRe.exec(cssText)) {\n r += m[1].slice(0, -1) + '\\n\\n';\n }\n while (m = cssContentUnscopedRuleRe .exec(cssText)) {\n r += m[0].replace(m[2], '').replace(m[1], m[3]) + '\\n\ \n';\n }\n return r;\n },\n /*\n * convert a rule like :host(.foo) > . bar { }\n *\n * to\n *\n * scopeName.foo > .bar\n */\n convertColonHos t: function(cssText) {\n return this.convertColonRule(cssText, cssColonHostRe ,\n this.colonHostPartReplacer);\n },\n /*\n * convert a rule like :h ost-context(.foo) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar, .f oo scopeName > .bar { }\n * \n * and\n *\n * :host-context(.foo:host) .b ar { ... }\n * \n * to\n * \n * scopeName.foo .bar { ... }\n */\n conv ertColonHostContext: function(cssText) {\n return this.convertColonRule(cssTe xt, cssColonHostContextRe,\n this.colonHostContextPartReplacer);\n },\n convertColonRule: function(cssText, regExp, partReplacer) {\n // p1 = :host, p2 = contents of (), p3 rest of rule\n return cssText.replace(regExp, functi on(m, p1, p2, p3) {\n p1 = polyfillHostNoCombinator;\n if (p2) {\n var parts = p2.split(','), r = [];\n for (var i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++) {\n p = p.trim();\n r.push(partRe placer(p1, p, p3));\n }\n return r.join(',');\n } else {\n return p1 + p3;\n }\n });\n },\n colonHostContextPartReplacer: fu nction(host, part, suffix) {\n if (part.match(polyfillHost)) {\n return this.colonHostPartReplacer(host, part, suffix);\n } else {\n return host + part + suffix + ', ' + part + ' ' + host + suffix;\n }\n },\n colonHostP artReplacer: function(host, part, suffix) {\n return host + part.replace(poly fillHost, '') + suffix;\n },\n /*\n * Convert combinators like ::shadow and pseudo-elements like ::content\n * by replacing with space.\n */\n convertSh adowDOMSelectors: function(cssText) {\n for (var i=0; i < shadowDOMSelectorsR e.length; i++) {\n cssText = cssText.replace(shadowDOMSelectorsRe[i], ' '); \n }\n return cssText;\n },\n // change a selector like 'div' to 'name d iv'\n scopeRules: function(cssRules, scopeSelector) {\n var cssText = '';\n if (cssRules) {\n Array.prototype.forEach.call(cssRules, function(rule) {\n if (rule.selectorText && (rule.style && rule.style.cssText !== undefi ned)) {\n cssText += this.scopeSelector(rule.selectorText, scopeSelecto r, \n this.strictStyling) + ' {\\n\\t';\n cssText += this.pr opertiesFromRule(rule) + '\\n}\\n\\n';\n } else if (rule.type === CSSRule .MEDIA_RULE) {\n cssText += '@media ' + rule.media.mediaText + ' {\\n'; \n cssText += this.scopeRules(rule.cssRules, scopeSelector);\n cssText += '\\n}\\n\\n';\n } else {\n // KEYFRAMES_RULE in IE t hrows when we query cssText\n // when it contains a -webkit- property.\ n // if this happens, we fallback to constructing the rule\n / / from the CSSRuleSet\n // https://connect.microsoft.com/IE/feedbackdet ail/view/955703/accessing-csstext-of-a-keyframe-rule-that-contains-a-webkit-prop erty-via-cssom-generates-exception\n try {\n if (rule.cssTex t) {\n cssText += rule.cssText + '\\n\\n';\n }\n } catch(x) {\n if (rule.type === CSSRule.KEYFRAMES_RULE && rule.css Rules) {\n cssText += this.ieSafeCssTextFromKeyFrameRule(rule);\n }\n }\n }\n }, this);\n }\n return cssText; \n },\n ieSafeCssTextFromKeyFrameRule: function(rule) {\n var cssText = '@k eyframes ' + rule.name + ' {';\n Array.prototype.forEach.call(rule.cssRules, function(rule) {\n cssText += ' ' + rule.keyText + ' {' + rule.style.cssTex t + '}';\n });\n cssText += ' }';\n return cssText;\n },\n scopeSelec tor: function(selector, scopeSelector, strict) {\n var r = [], parts = select or.split(',');\n parts.forEach(function(p) {\n p = p.trim();\n if ( this.selectorNeedsScoping(p, scopeSelector)) {\n p = (strict && !p.match( polyfillHostNoCombinator)) ? \n this.applyStrictSelectorScope(p, scop eSelector) :\n this.applySelectorScope(p, scopeSelector);\n }\n r.push(p);\n }, this);\n return r.join(', ');\n },\n selectorNeedsS coping: function(selector, scopeSelector) {\n if (Array.isArray(scopeSelector )) {\n return true;\n }\n var re = this.makeScopeMatcher(scopeSelecto r);\n return !selector.match(re);\n },\n makeScopeMatcher: function(scopeSe lector) {\n scopeSelector = scopeSelector.replace(/\\[/g, '\\\\[').replace(/\ \[/g, '\\\\]');\n return new RegExp('^(' + scopeSelector + ')' + selectorReSu ffix, 'm');\n },\n applySelectorScope: function(selector, selectorScope) {\n return Array.isArray(selectorScope) ?\n this.applySelectorScopeList(sel ector, selectorScope) :\n this.applySimpleSelectorScope(selector, selecto rScope);\n },\n // apply an array of selectors\n applySelectorScopeList: func tion(selector, scopeSelectorList) {\n var r = [];\n for (var i=0, s; (s=sc opeSelectorList[i]); i++) {\n r.push(this.applySimpleSelectorScope(selector , s));\n }\n return r.join(', ');\n },\n // scope via name and [is=name] \n applySimpleSelectorScope: function(selector, scopeSelector) {\n if (selec tor.match(polyfillHostRe)) {\n selector = selector.replace(polyfillHostNoCo mbinator, scopeSelector);\n return selector.replace(polyfillHostRe, scopeSe lector + ' ');\n } else {\n return scopeSelector + ' ' + selector;\n }\n },\n // return a selector with [name] suffix on each simple selector\n // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]\n applyStrictSe lectorScope: function(selector, scopeSelector) {\n scopeSelector = scopeSelec tor.replace(/\\[is=([^\\]]*)\\]/g, '$1');\n var splits = [' ', '>', '+', '~'] ,\n scoped = selector,\n attrName = '[' + scopeSelector + ']';\n sp lits.forEach(function(sep) {\n var parts = scoped.split(sep);\n scoped = parts.map(function(p) {\n // remove :host since it should be unnecessa ry\n var t = p.trim().replace(polyfillHostRe, '');\n if (t && (spl its.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {\n p = t.replace(/([ ^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')\n }\n return p;\n } ).join(sep);\n });\n return scoped;\n },\n insertPolyfillHostInCssText: function(selector) {\n return selector.replace(colonHostContextRe, polyfillHo stContext).replace(\n colonHostRe, polyfillHost);\n },\n propertiesFrom Rule: function(rule) {\n var cssText = rule.style.cssText;\n // TODO(sorve ll): Safari cssom incorrectly removes quotes from the content\n // property. (https://bugs.webkit.org/show_bug.cgi?id=118045)\n // don't replace attr rule s\n if (rule.style.content && !rule.style.content.match(/['\"]+|attr/)) {\n cssText = cssText.replace(/content:[^;]*;/g, 'content: \\'' + \n ru le.style.content + '\\';');\n }\n // TODO(sorvell): we can workaround this issue here, but we need a list\n // of troublesome properties to fix https:/ /github.com/Polymer/platform/issues/53\n //\n // inherit rules can be omit ted from cssText\n // TODO(sorvell): remove when Blink bug is fixed:\n // https://code.google.com/p/chromium/issues/detail?id=358273\n var style = rule .style;\n for (var i in style) {\n if (style[i] === 'initial') {\n cssText += i + ': initial; ';\n }\n }\n return cssText;\n },\n re placeTextInStyles: function(styles, action) {\n if (styles && action) {\n if (!(styles instanceof Array)) {\n styles = [styles];\n }\n Array.prototype.forEach.call(styles, function(s) {\n s.textContent = acti on.call(this, s.textContent);\n }, this);\n }\n },\n addCssToDocument: function(cssText, name) {\n if (cssText.match('@import')) {\n addOwnShe et(cssText, name);\n } else {\n addCssToDocument(cssText);\n }\n }\n };\n\nvar selectorRe = /([^{]*)({[\\s\\S]*?})/gim,\n cssCommentRe = /\\/\\*[^ *]*\\*+([^/*][^*]*\\*+)*\\//gim,\n // TODO(sorvell): remove either content or comment\n cssCommentNextSelectorRe = /\\/\\*\\s*@polyfill ([^*]*\\*+([^/*][^ *]*\\*+)*\\/)([^{]*?){/gim,\n cssContentNextSelectorRe = /polyfill-next-selec tor[^}]*content\\:[\\s]*?['\"](.*?)['\"][;\\s]*}([^{]*?){/gim, \n // TODO(so rvell): remove either content or comment\n cssCommentRuleRe = /\\/\\*\\s@poly fill-rule([^*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssContentRuleRe = /(polyfill -rule)[^}]*(content\\:[\\s]*['\"](.*?)['\"])[;\\s]*[^}]*}/gim,\n // TODO(sorv ell): remove either content or comment\n cssCommentUnscopedRuleRe = /\\/\\*\\ s@polyfill-unscoped-rule([^*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssContentUnsc opedRuleRe = /(polyfill-unscoped-rule)[^}]*(content\\:[\\s]*['\"](.*?)['\"])[;\\ s]*[^}]*}/gim,\n cssPseudoRe = /::(x-[^\\s{,(]*)/gim,\n cssPartRe = /::par t\\(([^)]*)\\)/gim,\n // note: :host pre-processed to -shadowcsshost.\n po lyfillHost = '-shadowcsshost',\n // note: :host-context pre-processed to -sha dowcsshostcontext.\n polyfillHostContext = '-shadowcsscontext',\n parenSuf fix = ')(?:\\\\((' +\n '(?:\\\\([^)(]*\\\\)|[^)(]*)+?' +\n ')\\\\) )?([^,{]*)';\n cssColonHostRe = new RegExp('(' + polyfillHost + parenSuffix, 'gim'),\n cssColonHostContextRe = new RegExp('(' + polyfillHostContext + pare nSuffix, 'gim'),\n selectorReSuffix = '([>\\\\s~+\\[.,{:][\\\\s\\\\S]*)?$',\n colonHostRe = /\\:host/gim,\n colonHostContextRe = /\\:host-context/gim,\ n /* host name without combinator */\n polyfillHostNoCombinator = polyfill Host + '-no-combinator',\n polyfillHostRe = new RegExp(polyfillHost, 'gim'),\ n polyfillHostContextRe = new RegExp(polyfillHostContext, 'gim'),\n shadow DOMSelectorsRe = [\n /\\^\\^/g,\n /\\^/g,\n /\\/shadow\\//g,\n /\\/shadow-deep\\//g,\n /::shadow/g,\n /\\/deep\\//g,\n /::con tent/g\n ];\n\nfunction stylesToCssText(styles, preserveComments) {\n var cs sText = '';\n Array.prototype.forEach.call(styles, function(s) {\n cssText + = s.textContent + '\\n\\n';\n });\n // strip comments for easier processing\n if (!preserveComments) {\n cssText = cssText.replace(cssCommentRe, '');\n } \n return cssText;\n}\n\nfunction cssTextToStyle(cssText) {\n var style = docu ment.createElement('style');\n style.textContent = cssText;\n return style;\n} \n\nfunction cssToRules(cssText) {\n var style = cssTextToStyle(cssText);\n do cument.head.appendChild(style);\n var rules = [];\n if (style.sheet) {\n // TODO(sorvell): Firefox throws when accessing the rules of a stylesheet\n // with an @import\n // https://bugzilla.mozilla.org/show_bug.cgi?id=625013\n try {\n rules = style.sheet.cssRules;\n } catch(e) {\n //\n }\n } else {\n console.warn('sheet not found', style);\n }\n style.parentNode .removeChild(style);\n return rules;\n}\n\nvar frame = document.createElement(' iframe');\nframe.style.display = 'none';\n\nfunction initFrame() {\n frame.init ialized = true;\n document.body.appendChild(frame);\n var doc = frame.contentD ocument;\n var base = doc.createElement('base');\n base.href = document.baseUR I;\n doc.head.appendChild(base);\n}\n\nfunction inFrame(fn) {\n if (!frame.ini tialized) {\n initFrame();\n }\n document.body.appendChild(frame);\n fn(fr ame.contentDocument);\n document.body.removeChild(frame);\n}\n\n// TODO(sorvell ): use an iframe if the cssText contains an @import to workaround\n// https://co de.google.com/p/chromium/issues/detail?id=345114\nvar isChrome = navigator.userA gent.match('Chrome');\nfunction withCssRules(cssText, callback) {\n if (!callba ck) {\n return;\n }\n var rules;\n if (cssText.match('@import') && isChrom e) {\n var style = cssTextToStyle(cssText);\n inFrame(function(doc) {\n doc.head.appendChild(style.impl);\n rules = Array.prototype.slice.call(s tyle.sheet.cssRules, 0);\n callback(rules);\n });\n } else {\n rules = cssToRules(cssText);\n callback(rules);\n }\n}\n\nfunction rulesToCss(css Rules) {\n for (var i=0, css=[]; i < cssRules.length; i++) {\n css.push(cssR ules[i].cssText);\n }\n return css.join('\\n\\n');\n}\n\nfunction addCssToDocu ment(cssText) {\n if (cssText) {\n getSheet().appendChild(document.createTex tNode(cssText));\n }\n}\n\nfunction addOwnSheet(cssText, name) {\n var style = cssTextToStyle(cssText);\n style.setAttribute(name, '');\n style.setAttribute (SHIMMED_ATTRIBUTE, '');\n document.head.appendChild(style);\n}\n\nvar SHIM_ATT RIBUTE = 'shim-shadowdom';\nvar SHIMMED_ATTRIBUTE = 'shim-shadowdom-css';\nvar N O_SHIM_ATTRIBUTE = 'no-shim';\n\nvar sheet;\nfunction getSheet() {\n if (!sheet ) {\n sheet = document.createElement(\"style\");\n sheet.setAttribute(SHIM MED_ATTRIBUTE, '');\n sheet[SHIMMED_ATTRIBUTE] = true;\n }\n return sheet;\ n}\n\n// add polyfill stylesheet to document\nif (window.ShadowDOMPolyfill) {\n addCssToDocument('style { display: none !important; }\\n');\n var doc = wrap(d ocument);\n var head = doc.querySelector('head');\n head.insertBefore(getSheet (), head.childNodes[0]);\n\n // TODO(sorvell): monkey-patching HTMLImports is a busive;\n // consider a better solution.\n document.addEventListener('DOMConte ntLoaded', function() {\n var urlResolver = scope.urlResolver;\n \n if (window.HTMLImports && !HTMLImports.useNative) {\n var SHIM_SHEET_SELECTOR = 'link[rel=stylesheet]' +\n '[' + SHIM_ATTRIBUTE + ']';\n var SHI M_STYLE_SELECTOR = 'style[' + SHIM_ATTRIBUTE + ']';\n HTMLImports.importer. documentPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n HTMLImports.import er.importsPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n\n HTMLImports.pa rser.documentSelectors = [\n HTMLImports.parser.documentSelectors,\n SHIM_SHEET_SELECTOR,\n SHIM_STYLE_SELECTOR\n ].join(',');\n \n var originalParseGeneric = HTMLImports.parser.parseGeneric;\n\n HTMLImp orts.parser.parseGeneric = function(elt) {\n if (elt[SHIMMED_ATTRIBUTE]) {\n return;\n }\n var style = elt.__importElement || elt; \n if (!style.hasAttribute(SHIM_ATTRIBUTE)) {\n originalParseGen eric.call(this, elt);\n return;\n }\n if (elt.__resource) {\n style = elt.ownerDocument.createElement('style');\n style .textContent = elt.__resource;\n }\n // relay on HTMLImports for p ath fixup\n HTMLImports.path.resolveUrlsInStyle(style);\n style.te xtContent = ShadowCSS.shimStyle(style);\n style.removeAttribute(SHIM_ATTR IBUTE, '');\n style.setAttribute(SHIMMED_ATTRIBUTE, '');\n style[S HIMMED_ATTRIBUTE] = true;\n // place in document\n if (style.paren tNode !== head) {\n // replace links in head\n if (elt.parentN ode === head) {\n head.replaceChild(style, elt);\n } else {\ n this.addElementToDocument(style);\n }\n }\n style.__importParsed = true;\n this.markParsingComplete(elt);\n th is.parseNext();\n }\n\n var hasResource = HTMLImports.parser.hasResour ce;\n HTMLImports.parser.hasResource = function(node) {\n if (node.l ocalName === 'link' && node.rel === 'stylesheet' &&\n node.hasAttribu te(SHIM_ATTRIBUTE)) {\n return (node.__resource);\n } else {\n return hasResource.call(this, node);\n }\n }\n\n }\n }); \n}\n\n// exports\nscope.ShadowCSS = ShadowCSS;\n\n})(window.Platform);\n",
137 "} else {", 137 "} else {",
138 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n / / so we can call wrap/unwrap without testing for ShadowDOMPolyfill\n window.wra p = window.unwrap = function(n){\n return n;\n }\n\n addEventListener('DOMC ontentLoaded', function() {\n if (CustomElements.useNative === false) {\n var originalCreateShadowRoot = Element.prototype.createShadowRoot;\n Elem ent.prototype.createShadowRoot = function() {\n var root = originalCreate ShadowRoot.call(this);\n CustomElements.watchShadow(this);\n retur n root;\n };\n }\n });\n\n})(window.Platform);\n", 138 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n / / so we can call wrap/unwrap without testing for ShadowDOMPolyfill\n window.wra p = window.unwrap = function(n){\n return n;\n }\n\n addEventListener('DOMC ontentLoaded', function() {\n if (CustomElements.useNative === false) {\n var originalCreateShadowRoot = Element.prototype.createShadowRoot;\n Elem ent.prototype.createShadowRoot = function() {\n var root = originalCreate ShadowRoot.call(this);\n CustomElements.watchShadow(this);\n retur n root;\n };\n }\n });\n\n})(window.Platform);\n",
139 "}", 139 "}",
140 "/* Any copyright is dedicated to the Public Domain.\n * http://creativecomm ons.org/publicdomain/zero/1.0/ */\n\n(function(scope) {\n 'use strict';\n\n // feature detect for URL constructor\n var hasWorkingUrl = false;\n if (!scope. forceJURL) {\n try {\n var u = new URL('b', 'http://a');\n hasWorki ngUrl = u.href === 'http://a/b';\n } catch(e) {}\n }\n\n if (hasWorkingUrl) \n return;\n\n var relative = Object.create(null);\n relative['ftp'] = 21;\ n relative['file'] = 0;\n relative['gopher'] = 70;\n relative['http'] = 80;\n relative['https'] = 443;\n relative['ws'] = 80;\n relative['wss'] = 443;\n\n var relativePathDotMapping = Object.create(null);\n relativePathDotMapping['% 2e'] = '.';\n relativePathDotMapping['.%2e'] = '..';\n relativePathDotMapping[ '%2e.'] = '..';\n relativePathDotMapping['%2e%2e'] = '..';\n\n function isRela tiveScheme(scheme) {\n return relative[scheme] !== undefined;\n }\n\n funct ion invalid() {\n clear.call(this);\n this._isInvalid = true;\n }\n\n fu nction IDNAToASCII(h) {\n if ('' == h) {\n invalid.call(this)\n }\n // XXX\n return h.toLowerCase()\n }\n\n function percentEscape(c) {\n var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x7F &&\n // \" # < > ? `\n [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf (unicode) == -1\n ) {\n return c;\n }\n return encodeURIComponen t(c);\n }\n\n function percentEscapeQuery(c) {\n // XXX This actually needs to encode c using encoding and then\n // convert the bytes one-by-one.\n\n var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x 7F &&\n // \" # < > ` (do not escape '?')\n [0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) == -1\n ) {\n return c;\n }\n return enc odeURIComponent(c);\n }\n\n var EOF = undefined,\n ALPHA = /[a-zA-Z]/,\n ALPHANUMERIC = /[a-zA-Z0-9\\+\\-\\.]/;\n\n function parse(input, stateOver ride, base) {\n function err(message) {\n errors.push(message)\n }\n\ n var state = stateOverride || 'scheme start',\n cursor = 0,\n buffer = '',\n seenAt = false,\n seenBracket = false,\n err ors = [];\n\n loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this ._isInvalid) {\n var c = input[cursor];\n switch (state) {\n ca se 'scheme start':\n if (c && ALPHA.test(c)) {\n buffer += c .toLowerCase(); // ASCII-safe\n state = 'scheme';\n } else i f (!stateOverride) {\n buffer = '';\n state = 'no scheme'; \n continue;\n } else {\n err('Invalid scheme.'); \n break loop;\n }\n break;\n\n case 'scheme ':\n if (c && ALPHANUMERIC.test(c)) {\n buffer += c.toLowerC ase(); // ASCII-safe\n } else if (':' == c) {\n this._scheme = buffer;\n buffer = '';\n if (stateOverride) {\n break loop;\n }\n if (isRelativeScheme(this._scheme) ) {\n this._isRelative = true;\n }\n if ('fil e' == this._scheme) {\n state = 'relative';\n } else if (this._isRelative && base && base._scheme == this._scheme) {\n stat e = 'relative or authority';\n } else if (this._isRelative) {\n state = 'authority first slash';\n } else {\n st ate = 'scheme data';\n }\n } else if (!stateOverride) {\n buffer = '';\n cursor = 0;\n state = 'no scheme'; \n continue;\n } else if (EOF == c) {\n break loo p;\n } else {\n err('Code point not allowed in scheme: ' + c )\n break loop;\n }\n break;\n\n case 'schem e data':\n if ('?' == c) {\n query = '?';\n state = 'query';\n } else if ('#' == c) {\n this._fragment = '#'; \n state = 'fragment';\n } else {\n // XXX error handling\n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\ n this._schemeData += percentEscape(c);\n }\n } \n break;\n\n case 'no scheme':\n if (!base || !(isRela tiveScheme(base._scheme))) {\n err('Missing scheme.');\n i nvalid.call(this);\n } else {\n state = 'relative';\n continue;\n }\n break;\n\n case 'relative or autho rity':\n if ('/' == c && '/' == input[cursor+1]) {\n state = 'authority ignore slashes';\n } else {\n err('Expected /, g ot: ' + c);\n state = 'relative';\n continue\n }\ n break;\n\n case 'relative':\n this._isRelative = true ;\n if ('file' != this._scheme)\n this._scheme = base._schem e;\n if (EOF == c) {\n this._host = base._host;\n this._port = base._port;\n this._path = base._path.slice();\n this._query = base._query;\n break loop;\n } else if (' /' == c || '\\\\' == c) {\n if ('\\\\' == c)\n err('\\\\ is an invalid code point.');\n state = 'relative slash';\n } else if ('?' == c) {\n this._host = base._host;\n this._ port = base._port;\n this._path = base._path.slice();\n th is._query = '?';\n state = 'query';\n } else if ('#' == c) { \n this._host = base._host;\n this._port = base._port;\n this._path = base._path.slice();\n this._query = base._quer y;\n this._fragment = '#';\n state = 'fragment';\n } else {\n var nextC = input[cursor+1]\n var nextNextC = input[cursor+2]\n if (\n 'file' != this._scheme || !ALP HA.test(c) ||\n (nextC != ':' && nextC != '|') ||\n (E OF != nextNextC && '/' != nextNextC && '\\\\' != nextNextC && '?' != nextNextC & & '#' != nextNextC)) {\n this._host = base._host;\n th is._port = base._port;\n this._path = base._path.slice();\n this._path.pop();\n }\n state = 'relative path';\n continue;\n }\n break;\n\n case 'relative sla sh':\n if ('/' == c || '\\\\' == c) {\n if ('\\\\' == c) {\n err('\\\\ is an invalid code point.');\n }\n if ('file' == this._scheme) {\n state = 'file host';\n } else {\n state = 'authority ignore slashes';\n }\n } else {\n if ('file' != this._scheme) {\n this._h ost = base._host;\n this._port = base._port;\n }\n state = 'relative path';\n continue;\n }\n br eak;\n\n case 'authority first slash':\n if ('/' == c) {\n state = 'authority second slash';\n } else {\n err(\"E xpected '/', got: \" + c);\n state = 'authority ignore slashes';\n continue;\n }\n break;\n\n case 'authority sec ond slash':\n state = 'authority ignore slashes';\n if ('/' != c) {\n err(\"Expected '/', got: \" + c);\n continue;\n }\n break;\n\n case 'authority ignore slashes':\n if ('/' != c && '\\\\' != c) {\n state = 'authority';\n continue;\n } else {\n err('Expected authority, got: ' + c); \n }\n break;\n\n case 'authority':\n if ('@' == c) {\n if (seenAt) {\n err('@ already seen.');\n buffer += '%40';\n }\n seenAt = true;\n for (var i = 0; i < buffer.length; i++) {\n var cp = buffer[i];\n if ('\\t' == cp || '\\n' == cp || '\\r' == cp) {\n err('Invalid whitespace in authority.');\n continue;\n }\n // XXX check URL code points\n if (':' == cp && null === this._password) {\n this._password = '';\n continue;\n }\n var tempC = percentEscape(cp);\n (null !== this._password) ? this._password += tempC : this._username += tempC;\n }\n buffer = '';\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n cursor -= b uffer.length;\n buffer = '';\n state = 'host';\n continue;\n } else {\n buffer += c;\n }\n break;\n\n case 'file host':\n if (EOF == c || '/' == c || '\\ \\' == c || '?' == c || '#' == c) {\n if (buffer.length == 2 && ALPHA .test(buffer[0]) && (buffer[1] == ':' || buffer[1] == '|')) {\n sta te = 'relative path';\n } else if (buffer.length == 0) {\n state = 'relative path start';\n } else {\n this._hos t = IDNAToASCII.call(this, buffer);\n buffer = '';\n s tate = 'relative path start';\n }\n continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid wh itespace in file host.');\n } else {\n buffer += c;\n }\n break;\n\n case 'host':\n case 'hostname':\n if (':' == c && !seenBracket) {\n // XXX host parsing\n this._host = IDNAToASCII.call(this, buffer);\n buffer = '';\n state = 'port';\n if ('hostname' == stateOverride) {\n break loop;\n }\n } else if (EOF == c || '/' == c || '\ \\\' == c || '?' == c || '#' == c) {\n this._host = IDNAToASCII.call( this, buffer);\n buffer = '';\n state = 'relative path sta rt';\n if (stateOverride) {\n break loop;\n } \n continue;\n } else if ('\\t' != c && '\\n' != c && '\\r' != c) {\n if ('[' == c) {\n seenBracket = true;\n } else if (']' == c) {\n seenBracket = false;\n }\n buffer += c;\n } else {\n err('Invalid code poin t in host/hostname: ' + c);\n }\n break;\n\n case 'port ':\n if (/[0-9]/.test(c)) {\n buffer += c;\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c || stateOverrid e) {\n if ('' != buffer) {\n var temp = parseInt(buffer, 10);\n if (temp != relative[this._scheme]) {\n this ._port = temp + '';\n }\n buffer = '';\n }\ n if (stateOverride) {\n break loop;\n }\n state = 'relative path start';\n continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid code po int in port: ' + c);\n } else {\n invalid.call(this);\n }\n break;\n\n case 'relative path start':\n if (' \\\\' == c)\n err(\"'\\\\' not allowed in path.\");\n state = 'relative path';\n if ('/' != c && '\\\\' != c) {\n contin ue;\n }\n break;\n\n case 'relative path':\n i f (EOF == c || '/' == c || '\\\\' == c || (!stateOverride && ('?' == c || '#' == c))) {\n if ('\\\\' == c) {\n err('\\\\ not allowed in relative path.');\n }\n var tmp;\n if (tmp = re lativePathDotMapping[buffer.toLowerCase()]) {\n buffer = tmp;\n }\n if ('..' == buffer) {\n this._path.pop();\n if ('/' != c && '\\\\' != c) {\n this._path.push('') ;\n }\n } else if ('.' == buffer && '/' != c && '\\\\' ! = c) {\n this._path.push('');\n } else if ('.' != buffer ) {\n if ('file' == this._scheme && this._path.length == 0 && buffe r.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == '|') {\n b uffer = buffer[0] + ':';\n }\n this._path.push(buffer) ;\n }\n buffer = '';\n if ('?' == c) {\n this._query = '?';\n state = 'query';\n } else if ('#' == c) {\n this._fragment = '#';\n state = 'fragm ent';\n }\n } else if ('\\t' != c && '\\n' != c && '\\r' != c) {\n buffer += percentEscape(c);\n }\n break;\n\n case 'query':\n if (!stateOverride && '#' == c) {\n this._fragment = '#';\n state = 'fragment';\n } else if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._query += p ercentEscapeQuery(c);\n }\n break;\n\n case 'fragment': \n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._fragment += c;\n }\n break;\n }\n\n cursor+ +;\n }\n }\n\n function clear() {\n this._scheme = '';\n this._scheme Data = '';\n this._username = '';\n this._password = null;\n this._host = '';\n this._port = '';\n this._path = [];\n this._query = '';\n t his._fragment = '';\n this._isInvalid = false;\n this._isRelative = false; \n }\n\n // Does not process domain names or IP addresses.\n // Does not hand le encoding for the query parameter.\n function jURL(url, base /* , encoding */ ) {\n if (base !== undefined && !(base instanceof jURL))\n base = new jU RL(String(base));\n\n this._url = url;\n clear.call(this);\n\n var inpu t = url.replace(/^[ \\t\\r\\n\\f]+|[ \\t\\r\\n\\f]+$/g, '');\n // encoding = encoding || 'utf-8'\n\n parse.call(this, input, null, base);\n }\n\n jURL.p rototype = {\n get href() {\n if (this._isInvalid)\n return this. _url;\n\n var authority = '';\n if ('' != this._username || null != th is._password) {\n authority = this._username +\n (null != this ._password ? ':' + this._password : '') + '@';\n }\n\n return this.pro tocol +\n (this._isRelative ? '//' + authority + this.host : '') +\n this.pathname + this._query + this._fragment;\n },\n set href(href) {\n clear.call(this);\n parse.call(this, href);\n },\n\n get pr otocol() {\n return this._scheme + ':';\n },\n set protocol(protocol) {\n if (this._isInvalid)\n return;\n parse.call(this, protocol + ':', 'scheme start');\n },\n\n get host() {\n return this._isInval id ? '' : this._port ?\n this._host + ':' + this._port : this._host;\n },\n set host(host) {\n if (this._isInvalid || !this._isRelative)\n return;\n parse.call(this, host, 'host');\n },\n\n get hostname () {\n return this._host;\n },\n set hostname(hostname) {\n if ( this._isInvalid || !this._isRelative)\n return;\n parse.call(this, h ostname, 'hostname');\n },\n\n get port() {\n return this._port;\n },\n set port(port) {\n if (this._isInvalid || !this._isRelative)\n return;\n parse.call(this, port, 'port');\n },\n\n get pathname() {\n return this._isInvalid ? '' : this._isRelative ?\n '/' + this ._path.join('/') : this._schemeData;\n },\n set pathname(pathname) {\n if (this._isInvalid || !this._isRelative)\n return;\n this._path = [];\n parse.call(this, pathname, 'relative path start');\n },\n\n ge t search() {\n return this._isInvalid || !this._query || '?' == this._query ?\n '' : this._query;\n },\n set search(search) {\n if (thi s._isInvalid || !this._isRelative)\n return;\n this._query = '?';\n if ('?' == search[0])\n search = search.slice(1);\n parse.call( this, search, 'query');\n },\n\n get hash() {\n return this._isInvali d || !this._fragment || '#' == this._fragment ?\n '' : this._fragment;\ n },\n set hash(hash) {\n if (this._isInvalid)\n return;\n this._fragment = '#';\n if ('#' == hash[0])\n hash = hash.slice(1) ;\n parse.call(this, hash, 'fragment');\n }\n };\n\n // Copy over the static methods\n var OriginalURL = scope.URL;\n if (OriginalURL) {\n jURL.c reateObjectURL = function(blob) {\n // IE extension allows a second optiona l options argument.\n // http://msdn.microsoft.com/en-us/library/ie/hh77230 2(v=vs.85).aspx\n return OriginalURL.createObjectURL.apply(OriginalURL, arg uments);\n };\n jURL.revokeObjectURL = function(url) {\n OriginalURL. revokeObjectURL(url);\n };\n }\n\n scope.URL = jURL;\n\n})(this);\n", 140 "/* Any copyright is dedicated to the Public Domain.\n * http://creativecomm ons.org/publicdomain/zero/1.0/ */\n\n(function(scope) {\n 'use strict';\n\n // feature detect for URL constructor\n var hasWorkingUrl = false;\n if (!scope. forceJURL) {\n try {\n var u = new URL('b', 'http://a');\n hasWorki ngUrl = u.href === 'http://a/b';\n } catch(e) {}\n }\n\n if (hasWorkingUrl) \n return;\n\n var relative = Object.create(null);\n relative['ftp'] = 21;\ n relative['file'] = 0;\n relative['gopher'] = 70;\n relative['http'] = 80;\n relative['https'] = 443;\n relative['ws'] = 80;\n relative['wss'] = 443;\n\n var relativePathDotMapping = Object.create(null);\n relativePathDotMapping['% 2e'] = '.';\n relativePathDotMapping['.%2e'] = '..';\n relativePathDotMapping[ '%2e.'] = '..';\n relativePathDotMapping['%2e%2e'] = '..';\n\n function isRela tiveScheme(scheme) {\n return relative[scheme] !== undefined;\n }\n\n funct ion invalid() {\n clear.call(this);\n this._isInvalid = true;\n }\n\n fu nction IDNAToASCII(h) {\n if ('' == h) {\n invalid.call(this)\n }\n // XXX\n return h.toLowerCase()\n }\n\n function percentEscape(c) {\n var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x7F &&\n // \" # < > ? `\n [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf (unicode) == -1\n ) {\n return c;\n }\n return encodeURIComponen t(c);\n }\n\n function percentEscapeQuery(c) {\n // XXX This actually needs to encode c using encoding and then\n // convert the bytes one-by-one.\n\n var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x 7F &&\n // \" # < > ` (do not escape '?')\n [0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) == -1\n ) {\n return c;\n }\n return enc odeURIComponent(c);\n }\n\n var EOF = undefined,\n ALPHA = /[a-zA-Z]/,\n ALPHANUMERIC = /[a-zA-Z0-9\\+\\-\\.]/;\n\n function parse(input, stateOver ride, base) {\n function err(message) {\n errors.push(message)\n }\n\ n var state = stateOverride || 'scheme start',\n cursor = 0,\n buffer = '',\n seenAt = false,\n seenBracket = false,\n err ors = [];\n\n loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this ._isInvalid) {\n var c = input[cursor];\n switch (state) {\n ca se 'scheme start':\n if (c && ALPHA.test(c)) {\n buffer += c .toLowerCase(); // ASCII-safe\n state = 'scheme';\n } else i f (!stateOverride) {\n buffer = '';\n state = 'no scheme'; \n continue;\n } else {\n err('Invalid scheme.'); \n break loop;\n }\n break;\n\n case 'scheme ':\n if (c && ALPHANUMERIC.test(c)) {\n buffer += c.toLowerC ase(); // ASCII-safe\n } else if (':' == c) {\n this._scheme = buffer;\n buffer = '';\n if (stateOverride) {\n break loop;\n }\n if (isRelativeScheme(this._scheme) ) {\n this._isRelative = true;\n }\n if ('fil e' == this._scheme) {\n state = 'relative';\n } else if (this._isRelative && base && base._scheme == this._scheme) {\n stat e = 'relative or authority';\n } else if (this._isRelative) {\n state = 'authority first slash';\n } else {\n st ate = 'scheme data';\n }\n } else if (!stateOverride) {\n buffer = '';\n cursor = 0;\n state = 'no scheme'; \n continue;\n } else if (EOF == c) {\n break loo p;\n } else {\n err('Code point not allowed in scheme: ' + c )\n break loop;\n }\n break;\n\n case 'schem e data':\n if ('?' == c) {\n query = '?';\n state = 'query';\n } else if ('#' == c) {\n this._fragment = '#'; \n state = 'fragment';\n } else {\n // XXX error handling\n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\ n this._schemeData += percentEscape(c);\n }\n } \n break;\n\n case 'no scheme':\n if (!base || !(isRela tiveScheme(base._scheme))) {\n err('Missing scheme.');\n i nvalid.call(this);\n } else {\n state = 'relative';\n continue;\n }\n break;\n\n case 'relative or autho rity':\n if ('/' == c && '/' == input[cursor+1]) {\n state = 'authority ignore slashes';\n } else {\n err('Expected /, g ot: ' + c);\n state = 'relative';\n continue\n }\ n break;\n\n case 'relative':\n this._isRelative = true ;\n if ('file' != this._scheme)\n this._scheme = base._schem e;\n if (EOF == c) {\n this._host = base._host;\n this._port = base._port;\n this._path = base._path.slice();\n this._query = base._query;\n break loop;\n } else if (' /' == c || '\\\\' == c) {\n if ('\\\\' == c)\n err('\\\\ is an invalid code point.');\n state = 'relative slash';\n } else if ('?' == c) {\n this._host = base._host;\n this._ port = base._port;\n this._path = base._path.slice();\n th is._query = '?';\n state = 'query';\n } else if ('#' == c) { \n this._host = base._host;\n this._port = base._port;\n this._path = base._path.slice();\n this._query = base._quer y;\n this._fragment = '#';\n state = 'fragment';\n } else {\n var nextC = input[cursor+1]\n var nextNextC = input[cursor+2]\n if (\n 'file' != this._scheme || !ALP HA.test(c) ||\n (nextC != ':' && nextC != '|') ||\n (E OF != nextNextC && '/' != nextNextC && '\\\\' != nextNextC && '?' != nextNextC & & '#' != nextNextC)) {\n this._host = base._host;\n th is._port = base._port;\n this._path = base._path.slice();\n this._path.pop();\n }\n state = 'relative path';\n continue;\n }\n break;\n\n case 'relative sla sh':\n if ('/' == c || '\\\\' == c) {\n if ('\\\\' == c) {\n err('\\\\ is an invalid code point.');\n }\n if ('file' == this._scheme) {\n state = 'file host';\n } else {\n state = 'authority ignore slashes';\n }\n } else {\n if ('file' != this._scheme) {\n this._h ost = base._host;\n this._port = base._port;\n }\n state = 'relative path';\n continue;\n }\n br eak;\n\n case 'authority first slash':\n if ('/' == c) {\n state = 'authority second slash';\n } else {\n err(\"E xpected '/', got: \" + c);\n state = 'authority ignore slashes';\n continue;\n }\n break;\n\n case 'authority sec ond slash':\n state = 'authority ignore slashes';\n if ('/' != c) {\n err(\"Expected '/', got: \" + c);\n continue;\n }\n break;\n\n case 'authority ignore slashes':\n if ('/' != c && '\\\\' != c) {\n state = 'authority';\n continue;\n } else {\n err('Expected authority, got: ' + c); \n }\n break;\n\n case 'authority':\n if ('@' == c) {\n if (seenAt) {\n err('@ already seen.');\n buffer += '%40';\n }\n seenAt = true;\n for (var i = 0; i < buffer.length; i++) {\n var cp = buffer[i];\n if ('\\t' == cp || '\\n' == cp || '\\r' == cp) {\n err('Invalid whitespace in authority.');\n continue;\n }\n // XXX check URL code points\n if (':' == cp && null === this._password) {\n this._password = '';\n continue;\n }\n var tempC = percentEscape(cp);\n (null !== this._password) ? this._password += tempC : this._username += tempC;\n }\n buffer = '';\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n cursor -= b uffer.length;\n buffer = '';\n state = 'host';\n continue;\n } else {\n buffer += c;\n }\n break;\n\n case 'file host':\n if (EOF == c || '/' == c || '\\ \\' == c || '?' == c || '#' == c) {\n if (buffer.length == 2 && ALPHA .test(buffer[0]) && (buffer[1] == ':' || buffer[1] == '|')) {\n sta te = 'relative path';\n } else if (buffer.length == 0) {\n state = 'relative path start';\n } else {\n this._hos t = IDNAToASCII.call(this, buffer);\n buffer = '';\n s tate = 'relative path start';\n }\n continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid wh itespace in file host.');\n } else {\n buffer += c;\n }\n break;\n\n case 'host':\n case 'hostname':\n if (':' == c && !seenBracket) {\n // XXX host parsing\n this._host = IDNAToASCII.call(this, buffer);\n buffer = '';\n state = 'port';\n if ('hostname' == stateOverride) {\n break loop;\n }\n } else if (EOF == c || '/' == c || '\ \\\' == c || '?' == c || '#' == c) {\n this._host = IDNAToASCII.call( this, buffer);\n buffer = '';\n state = 'relative path sta rt';\n if (stateOverride) {\n break loop;\n } \n continue;\n } else if ('\\t' != c && '\\n' != c && '\\r' != c) {\n if ('[' == c) {\n seenBracket = true;\n } else if (']' == c) {\n seenBracket = false;\n }\n buffer += c;\n } else {\n err('Invalid code poin t in host/hostname: ' + c);\n }\n break;\n\n case 'port ':\n if (/[0-9]/.test(c)) {\n buffer += c;\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c || stateOverrid e) {\n if ('' != buffer) {\n var temp = parseInt(buffer, 10);\n if (temp != relative[this._scheme]) {\n this ._port = temp + '';\n }\n buffer = '';\n }\ n if (stateOverride) {\n break loop;\n }\n state = 'relative path start';\n continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid code po int in port: ' + c);\n } else {\n invalid.call(this);\n }\n break;\n\n case 'relative path start':\n if (' \\\\' == c)\n err(\"'\\\\' not allowed in path.\");\n state = 'relative path';\n if ('/' != c && '\\\\' != c) {\n contin ue;\n }\n break;\n\n case 'relative path':\n i f (EOF == c || '/' == c || '\\\\' == c || (!stateOverride && ('?' == c || '#' == c))) {\n if ('\\\\' == c) {\n err('\\\\ not allowed in relative path.');\n }\n var tmp;\n if (tmp = re lativePathDotMapping[buffer.toLowerCase()]) {\n buffer = tmp;\n }\n if ('..' == buffer) {\n this._path.pop();\n if ('/' != c && '\\\\' != c) {\n this._path.push('') ;\n }\n } else if ('.' == buffer && '/' != c && '\\\\' ! = c) {\n this._path.push('');\n } else if ('.' != buffer ) {\n if ('file' == this._scheme && this._path.length == 0 && buffe r.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == '|') {\n b uffer = buffer[0] + ':';\n }\n this._path.push(buffer) ;\n }\n buffer = '';\n if ('?' == c) {\n this._query = '?';\n state = 'query';\n } else if ('#' == c) {\n this._fragment = '#';\n state = 'fragm ent';\n }\n } else if ('\\t' != c && '\\n' != c && '\\r' != c) {\n buffer += percentEscape(c);\n }\n break;\n\n case 'query':\n if (!stateOverride && '#' == c) {\n this._fragment = '#';\n state = 'fragment';\n } else if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._query += p ercentEscapeQuery(c);\n }\n break;\n\n case 'fragment': \n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._fragment += c;\n }\n break;\n }\n\n cursor+ +;\n }\n }\n\n function clear() {\n this._scheme = '';\n this._scheme Data = '';\n this._username = '';\n this._password = null;\n this._host = '';\n this._port = '';\n this._path = [];\n this._query = '';\n t his._fragment = '';\n this._isInvalid = false;\n this._isRelative = false; \n }\n\n // Does not process domain names or IP addresses.\n // Does not hand le encoding for the query parameter.\n function jURL(url, base /* , encoding */ ) {\n if (base !== undefined && !(base instanceof jURL))\n base = new jU RL(String(base));\n\n this._url = url;\n clear.call(this);\n\n var inpu t = url.replace(/^[ \\t\\r\\n\\f]+|[ \\t\\r\\n\\f]+$/g, '');\n // encoding = encoding || 'utf-8'\n\n parse.call(this, input, null, base);\n }\n\n jURL.p rototype = {\n get href() {\n if (this._isInvalid)\n return this. _url;\n\n var authority = '';\n if ('' != this._username || null != th is._password) {\n authority = this._username +\n (null != this ._password ? ':' + this._password : '') + '@';\n }\n\n return this.pro tocol +\n (this._isRelative ? '//' + authority + this.host : '') +\n this.pathname + this._query + this._fragment;\n },\n set href(href) {\n clear.call(this);\n parse.call(this, href);\n },\n\n get pr otocol() {\n return this._scheme + ':';\n },\n set protocol(protocol) {\n if (this._isInvalid)\n return;\n parse.call(this, protocol + ':', 'scheme start');\n },\n\n get host() {\n return this._isInval id ? '' : this._port ?\n this._host + ':' + this._port : this._host;\n },\n set host(host) {\n if (this._isInvalid || !this._isRelative)\n return;\n parse.call(this, host, 'host');\n },\n\n get hostname () {\n return this._host;\n },\n set hostname(hostname) {\n if ( this._isInvalid || !this._isRelative)\n return;\n parse.call(this, h ostname, 'hostname');\n },\n\n get port() {\n return this._port;\n },\n set port(port) {\n if (this._isInvalid || !this._isRelative)\n return;\n parse.call(this, port, 'port');\n },\n\n get pathname() {\n return this._isInvalid ? '' : this._isRelative ?\n '/' + this ._path.join('/') : this._schemeData;\n },\n set pathname(pathname) {\n if (this._isInvalid || !this._isRelative)\n return;\n this._path = [];\n parse.call(this, pathname, 'relative path start');\n },\n\n ge t search() {\n return this._isInvalid || !this._query || '?' == this._query ?\n '' : this._query;\n },\n set search(search) {\n if (thi s._isInvalid || !this._isRelative)\n return;\n this._query = '?';\n if ('?' == search[0])\n search = search.slice(1);\n parse.call( this, search, 'query');\n },\n\n get hash() {\n return this._isInvali d || !this._fragment || '#' == this._fragment ?\n '' : this._fragment;\ n },\n set hash(hash) {\n if (this._isInvalid)\n return;\n this._fragment = '#';\n if ('#' == hash[0])\n hash = hash.slice(1) ;\n parse.call(this, hash, 'fragment');\n },\n\n get origin() {\n var host;\n if (this._isInvalid || !this._scheme) {\n return '';\n }\n // javascript: Gecko returns String(\"\"), WebKit/Blink String(\" null\")\n // Gecko throws error for \"data://\"\n // data: Gecko retur ns \"\", Blink returns \"data://\", WebKit returns \"null\"\n // Gecko retu rns String(\"\") for file: mailto:\n // WebKit/Blink returns String(\"SCHEM E://\") for file: mailto:\n switch (this._scheme) {\n case 'data':\n case 'file':\n case 'javascript':\n case 'mailto':\n return 'null';\n }\n host = this.host;\n if (!host) {\n return '';\n }\n return this._scheme + '://' + host;\n }\n };\n\ n // Copy over the static methods\n var OriginalURL = scope.URL;\n if (Origin alURL) {\n jURL.createObjectURL = function(blob) {\n // IE extension all ows a second optional options argument.\n // http://msdn.microsoft.com/en-u s/library/ie/hh772302(v=vs.85).aspx\n return OriginalURL.createObjectURL.ap ply(OriginalURL, arguments);\n };\n jURL.revokeObjectURL = function(url) { \n OriginalURL.revokeObjectURL(url);\n };\n }\n\n scope.URL = jURL;\n\ n})(this);\n",
141 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n// Old versions of iOS do not have bind.\n\nif (!Function.prototype.bind) {\n Func tion.prototype.bind = function(scope) {\n var self = this;\n var args = Ar ray.prototype.slice.call(arguments, 1);\n return function() {\n var args 2 = args.slice();\n args2.push.apply(args2, arguments);\n return self. apply(scope, args2);\n };\n };\n}\n\n})(window.Platform);\n", 141 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n// Old versions of iOS do not have bind.\n\nif (!Function.prototype.bind) {\n Func tion.prototype.bind = function(scope) {\n var self = this;\n var args = Ar ray.prototype.slice.call(arguments, 1);\n return function() {\n var args 2 = args.slice();\n args2.push.apply(args2, arguments);\n return self. apply(scope, args2);\n };\n };\n}\n\n})(window.Platform);\n",
142 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(global) {\n\n var registrationsTable = new We akMap();\n\n // We use setImmediate or postMessage for our future callback.\n var setImmediate = window.msSetImmediate;\n\n // Use post message to emulate se tImmediate.\n if (!setImmediate) {\n var setImmediateQueue = [];\n var se ntinel = String(Math.random());\n window.addEventListener('message', function (e) {\n if (e.data === sentinel) {\n var queue = setImmediateQueue;\ n setImmediateQueue = [];\n queue.forEach(function(func) {\n func();\n });\n }\n });\n setImmediate = function(func) {\ n setImmediateQueue.push(func);\n window.postMessage(sentinel, '*');\n };\n }\n\n // This is used to ensure that we never schedule 2 callas to se tImmediate\n var isScheduled = false;\n\n // Keep track of observers that need s to be notified next time.\n var scheduledObservers = [];\n\n /**\n * Sched ules |dispatchCallback| to be called in the future.\n * @param {MutationObserv er} observer\n */\n function scheduleCallback(observer) {\n scheduledObser vers.push(observer);\n if (!isScheduled) {\n isScheduled = true;\n setImmediate(dispatchCallbacks);\n }\n }\n\n function wrapIfNeeded(node) {\ n return window.ShadowDOMPolyfill &&\n window.ShadowDOMPolyfill.wrapIf Needed(node) ||\n node;\n }\n\n function dispatchCallbacks() {\n // http://dom.spec.whatwg.org/#mutation-observers\n\n isScheduled = false; // Us ed to allow a new setImmediate call above.\n\n var observers = scheduledObser vers;\n scheduledObservers = [];\n // Sort observers based on their creati on UID (incremental).\n observers.sort(function(o1, o2) {\n return o1.ui d_ - o2.uid_;\n });\n\n var anyNonEmpty = false;\n observers.forEach(fu nction(observer) {\n\n // 2.1, 2.2\n var queue = observer.takeRecords( );\n // 2.3. Remove all transient registered observers whose observer is mo .\n removeTransientObserversFor(observer);\n\n // 2.4\n if (queue .length) {\n observer.callback_(queue, observer);\n anyNonEmpty = true;\n }\n });\n\n // 3.\n if (anyNonEmpty)\n dispatchCallba cks();\n }\n\n function removeTransientObserversFor(observer) {\n observer. nodes_.forEach(function(node) {\n var registrations = registrationsTable.ge t(node);\n if (!registrations)\n return;\n registrations.forEac h(function(registration) {\n if (registration.observer === observer)\n registration.removeTransientObservers();\n });\n });\n }\n\n /* *\n * This function is used for the \"For each registered observer observer (w ith\n * observer's options as options) in target's list of registered observer s,\n * run these substeps:\" and the \"For each ancestor ancestor of target, a nd for\n * each registered observer observer (with options options) in ancesto r's list\n * of registered observers, run these substeps:\" part of the algori thms. The\n * |options.subtree| is checked to ensure that the callback is call ed\n * correctly.\n *\n * @param {Node} target\n * @param {function(Muta tionObserverInit):MutationRecord} callback\n */\n function forEachAncestorAnd ObserverEnqueueRecord(target, callback) {\n for (var node = target; node; nod e = node.parentNode) {\n var registrations = registrationsTable.get(node);\ n\n if (registrations) {\n for (var j = 0; j < registrations.length; j++) {\n var registration = registrations[j];\n var options = registration.options;\n\n // Only target ignores subtree.\n i f (node !== target && !options.subtree)\n continue;\n\n var record = callback(options);\n if (record)\n registration.enq ueue(record);\n }\n }\n }\n }\n\n var uidCounter = 0;\n\n /**\ n * The class that maps to the DOM MutationObserver interface.\n * @param {F unction} callback.\n * @constructor\n */\n function JsMutationObserver(call back) {\n this.callback_ = callback;\n this.nodes_ = [];\n this.records _ = [];\n this.uid_ = ++uidCounter;\n }\n\n JsMutationObserver.prototype = {\n observe: function(target, options) {\n target = wrapIfNeeded(target) ;\n\n // 1.1\n if (!options.childList && !options.attributes && !optio ns.characterData ||\n\n // 1.2\n options.attributeOldValue && !options.attributes ||\n\n // 1.3\n options.attributeFilter && options.attributeFilter.length &&\n !options.attributes ||\n\n // 1.4\n options.characterDataOldValue && !options.characterData) {\n\n throw new SyntaxError();\n }\n\n var registrations = reg istrationsTable.get(target);\n if (!registrations)\n registrationsTa ble.set(target, registrations = []);\n\n // 2\n // If target's list of registered observers already includes a registered\n // observer associate d with the context object, replace that registered\n // observer's options with options.\n var registration;\n for (var i = 0; i < registrations. length; i++) {\n if (registrations[i].observer === this) {\n reg istration = registrations[i];\n registration.removeListeners();\n registration.options = options;\n break;\n }\n }\n\n // 3.\n // Otherwise, add a new registered observer to target's list of registered\n // observers with the context object as the observer and optio ns as the\n // options, and add target to context object's list of nodes on which it\n // is registered.\n if (!registration) {\n registra tion = new Registration(this, target, options);\n registrations.push(regi stration);\n this.nodes_.push(target);\n }\n\n registration.add Listeners();\n },\n\n disconnect: function() {\n this.nodes_.forEach( function(node) {\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n var registratio n = registrations[i];\n if (registration.observer === this) {\n registration.removeListeners();\n registrations.splice(i, 1);\n // Each node can only have one registered observer associated with\n // this observer.\n break;\n }\n }\n } , this);\n this.records_ = [];\n },\n\n takeRecords: function() {\n var copyOfRecords = this.records_;\n this.records_ = [];\n return copyOfRecords;\n }\n };\n\n /**\n * @param {string} type\n * @param {No de} target\n * @constructor\n */\n function MutationRecord(type, target) {\ n this.type = type;\n this.target = target;\n this.addedNodes = [];\n this.removedNodes = [];\n this.previousSibling = null;\n this.nextSiblin g = null;\n this.attributeName = null;\n this.attributeNamespace = null;\n this.oldValue = null;\n }\n\n function copyMutationRecord(original) {\n var record = new MutationRecord(original.type, original.target);\n record.ad dedNodes = original.addedNodes.slice();\n record.removedNodes = original.remo vedNodes.slice();\n record.previousSibling = original.previousSibling;\n r ecord.nextSibling = original.nextSibling;\n record.attributeName = original.a ttributeName;\n record.attributeNamespace = original.attributeNamespace;\n record.oldValue = original.oldValue;\n return record;\n };\n\n // We keep track of the two (possibly one) records used in a single mutation.\n var curren tRecord, recordWithOldValue;\n\n /**\n * Creates a record without |oldValue| and caches it as |currentRecord| for\n * later use.\n * @param {string} oldV alue\n * @return {MutationRecord}\n */\n function getRecord(type, target) { \n return currentRecord = new MutationRecord(type, target);\n }\n\n /**\n * Gets or creates a record with |oldValue| based in the |currentRecord|\n * @ param {string} oldValue\n * @return {MutationRecord}\n */\n function getRec ordWithOldValue(oldValue) {\n if (recordWithOldValue)\n return recordWit hOldValue;\n recordWithOldValue = copyMutationRecord(currentRecord);\n rec ordWithOldValue.oldValue = oldValue;\n return recordWithOldValue;\n }\n\n f unction clearRecords() {\n currentRecord = recordWithOldValue = undefined;\n }\n\n /**\n * @param {MutationRecord} record\n * @return {boolean} Whether the record represents a record from the current\n * mutation event.\n */\n function recordRepresentsCurrentMutation(record) {\n return record === recor dWithOldValue || record === currentRecord;\n }\n\n /**\n * Selects which rec ord, if any, to replace the last record in the queue.\n * This returns |null| if no record should be replaced.\n *\n * @param {MutationRecord} lastRecord\ n * @param {MutationRecord} newRecord\n * @param {MutationRecord}\n */\n function selectRecord(lastRecord, newRecord) {\n if (lastRecord === newRecord )\n return lastRecord;\n\n // Check if the the record we are adding repr esents the same record. If\n // so, we keep the one with the oldValue in it.\ n if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord))\n return recordWithOldValue;\n\n return null;\n }\n\n /**\n * Class used to represent a registered observer.\n * @param {MutationObserver} observer\n * @param {Node} target\n * @param {MutationObserverInit} options\n * @cons tructor\n */\n function Registration(observer, target, options) {\n this.o bserver = observer;\n this.target = target;\n this.options = options;\n this.transientObservedNodes = [];\n }\n\n Registration.prototype = {\n enq ueue: function(record) {\n var records = this.observer.records_;\n var length = records.length;\n\n // There are cases where we replace the last record with the new record.\n // For example if the record represents the s ame mutation we need to use\n // the one with the oldValue. If we get same record (this can happen as we\n // walk up the tree) we ignore the new reco rd.\n if (records.length > 0) {\n var lastRecord = records[length - 1];\n var recordToReplaceLast = selectRecord(lastRecord, record);\n if (recordToReplaceLast) {\n records[length - 1] = recordToReplaceLas t;\n return;\n }\n } else {\n scheduleCallback(this. observer);\n }\n\n records[length] = record;\n },\n\n addListene rs: function() {\n this.addListeners_(this.target);\n },\n\n addListe ners_: function(node) {\n var options = this.options;\n if (options.at tributes)\n node.addEventListener('DOMAttrModified', this, true);\n\n if (options.characterData)\n node.addEventListener('DOMCharacterDataMod ified', this, true);\n\n if (options.childList)\n node.addEventListe ner('DOMNodeInserted', this, true);\n\n if (options.childList || options.su btree)\n node.addEventListener('DOMNodeRemoved', this, true);\n },\n\n removeListeners: function() {\n this.removeListeners_(this.target);\n },\n\n removeListeners_: function(node) {\n var options = this.options ;\n if (options.attributes)\n node.removeEventListener('DOMAttrModif ied', this, true);\n\n if (options.characterData)\n node.removeEvent Listener('DOMCharacterDataModified', this, true);\n\n if (options.childList )\n node.removeEventListener('DOMNodeInserted', this, true);\n\n if (options.childList || options.subtree)\n node.removeEventListener('DOMNod eRemoved', this, true);\n },\n\n /**\n * Adds a transient observer on node. The transient observer gets removed\n * next time we deliver the chang e records.\n * @param {Node} node\n */\n addTransientObserver: functi on(node) {\n // Don't add transient observers on the target itself. We alre ady have all\n // the required listeners set up on the target.\n if (n ode === this.target)\n return;\n\n this.addListeners_(node);\n this.transientObservedNodes.push(node);\n var registrations = registrations Table.get(node);\n if (!registrations)\n registrationsTable.set(node , registrations = []);\n\n // We know that registrations does not contain t his because we already\n // checked if node === this.target.\n registr ations.push(this);\n },\n\n removeTransientObservers: function() {\n var transientObservedNodes = this.transientObservedNodes;\n this.transientO bservedNodes = [];\n\n transientObservedNodes.forEach(function(node) {\n // Transient observers are never added to the target.\n this.removeL isteners_(node);\n\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n if (registrat ions[i] === this) {\n registrations.splice(i, 1);\n // Eac h node can only have one registered observer associated with\n // thi s observer.\n break;\n }\n }\n }, this);\n }, \n\n handleEvent: function(e) {\n // Stop propagation since we are manag ing the propagation manually.\n // This means that other mutation events on the page will not work\n // correctly but that is by design.\n e.stop ImmediatePropagation();\n\n switch (e.type) {\n case 'DOMAttrModifie d':\n // http://dom.spec.whatwg.org/#concept-mo-queue-attributes\n\n var name = e.attrName;\n var namespace = e.relatedNode.namespace URI;\n var target = e.target;\n\n // 1.\n var record = new getRecord('attributes', target);\n record.attributeName = name;\n record.attributeNamespace = namespace;\n\n // 2.\n v ar oldValue =\n e.attrChange === MutationEvent.ADDITION ? null : e. prevValue;\n\n forEachAncestorAndObserverEnqueueRecord(target, function (options) {\n // 3.1, 4.2\n if (!options.attributes)\n return;\n\n // 3.2, 4.3\n if (options.attributeF ilter && options.attributeFilter.length &&\n options.attributeFil ter.indexOf(name) === -1 &&\n options.attributeFilter.indexOf(nam espace) === -1) {\n return;\n }\n // 3.3, 4.4 \n if (options.attributeOldValue)\n return getRecordWith OldValue(oldValue);\n\n // 3.4, 4.5\n return record;\n });\n\n break;\n\n case 'DOMCharacterDataModified':\n // http://dom.spec.whatwg.org/#concept-mo-queue-characterdata\n va r target = e.target;\n\n // 1.\n var record = getRecord('chara cterData', target);\n\n // 2.\n var oldValue = e.prevValue;\n\ n\n forEachAncestorAndObserverEnqueueRecord(target, function(options) { \n // 3.1, 4.2\n if (!options.characterData)\n return;\n\n // 3.2, 4.3\n if (options.characterDataOldVa lue)\n return getRecordWithOldValue(oldValue);\n\n // 3. 3, 4.4\n return record;\n });\n\n break;\n\n case 'DOMNodeRemoved':\n this.addTransientObserver(e.target);\n // Fall through.\n case 'DOMNodeInserted':\n // http://dom.sp ec.whatwg.org/#concept-mo-queue-childlist\n var target = e.relatedNode; \n var changedNode = e.target;\n var addedNodes, removedNodes; \n if (e.type === 'DOMNodeInserted') {\n addedNodes = [chang edNode];\n removedNodes = [];\n } else {\n\n adde dNodes = [];\n removedNodes = [changedNode];\n }\n var previousSibling = changedNode.previousSibling;\n var nextSibling = changedNode.nextSibling;\n\n // 1.\n var record = getRecord('c hildList', target);\n record.addedNodes = addedNodes;\n record .removedNodes = removedNodes;\n record.previousSibling = previousSiblin g;\n record.nextSibling = nextSibling;\n\n forEachAncestorAndO bserverEnqueueRecord(target, function(options) {\n // 2.1, 3.2\n if (!options.childList)\n return;\n\n // 2.2, 3.3 \n return record;\n });\n\n }\n\n clearRecords();\ n }\n };\n\n global.JsMutationObserver = JsMutationObserver;\n\n if (!glob al.MutationObserver)\n global.MutationObserver = JsMutationObserver;\n\n\n})( this);\n", 142 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(global) {\n\n var registrationsTable = new We akMap();\n\n // We use setImmediate or postMessage for our future callback.\n var setImmediate = window.msSetImmediate;\n\n // Use post message to emulate se tImmediate.\n if (!setImmediate) {\n var setImmediateQueue = [];\n var se ntinel = String(Math.random());\n window.addEventListener('message', function (e) {\n if (e.data === sentinel) {\n var queue = setImmediateQueue;\ n setImmediateQueue = [];\n queue.forEach(function(func) {\n func();\n });\n }\n });\n setImmediate = function(func) {\ n setImmediateQueue.push(func);\n window.postMessage(sentinel, '*');\n };\n }\n\n // This is used to ensure that we never schedule 2 callas to se tImmediate\n var isScheduled = false;\n\n // Keep track of observers that need s to be notified next time.\n var scheduledObservers = [];\n\n /**\n * Sched ules |dispatchCallback| to be called in the future.\n * @param {MutationObserv er} observer\n */\n function scheduleCallback(observer) {\n scheduledObser vers.push(observer);\n if (!isScheduled) {\n isScheduled = true;\n setImmediate(dispatchCallbacks);\n }\n }\n\n function wrapIfNeeded(node) {\ n return window.ShadowDOMPolyfill &&\n window.ShadowDOMPolyfill.wrapIf Needed(node) ||\n node;\n }\n\n function dispatchCallbacks() {\n // http://dom.spec.whatwg.org/#mutation-observers\n\n isScheduled = false; // Us ed to allow a new setImmediate call above.\n\n var observers = scheduledObser vers;\n scheduledObservers = [];\n // Sort observers based on their creati on UID (incremental).\n observers.sort(function(o1, o2) {\n return o1.ui d_ - o2.uid_;\n });\n\n var anyNonEmpty = false;\n observers.forEach(fu nction(observer) {\n\n // 2.1, 2.2\n var queue = observer.takeRecords( );\n // 2.3. Remove all transient registered observers whose observer is mo .\n removeTransientObserversFor(observer);\n\n // 2.4\n if (queue .length) {\n observer.callback_(queue, observer);\n anyNonEmpty = true;\n }\n });\n\n // 3.\n if (anyNonEmpty)\n dispatchCallba cks();\n }\n\n function removeTransientObserversFor(observer) {\n observer. nodes_.forEach(function(node) {\n var registrations = registrationsTable.ge t(node);\n if (!registrations)\n return;\n registrations.forEac h(function(registration) {\n if (registration.observer === observer)\n registration.removeTransientObservers();\n });\n });\n }\n\n /* *\n * This function is used for the \"For each registered observer observer (w ith\n * observer's options as options) in target's list of registered observer s,\n * run these substeps:\" and the \"For each ancestor ancestor of target, a nd for\n * each registered observer observer (with options options) in ancesto r's list\n * of registered observers, run these substeps:\" part of the algori thms. The\n * |options.subtree| is checked to ensure that the callback is call ed\n * correctly.\n *\n * @param {Node} target\n * @param {function(Muta tionObserverInit):MutationRecord} callback\n */\n function forEachAncestorAnd ObserverEnqueueRecord(target, callback) {\n for (var node = target; node; nod e = node.parentNode) {\n var registrations = registrationsTable.get(node);\ n\n if (registrations) {\n for (var j = 0; j < registrations.length; j++) {\n var registration = registrations[j];\n var options = registration.options;\n\n // Only target ignores subtree.\n i f (node !== target && !options.subtree)\n continue;\n\n var record = callback(options);\n if (record)\n registration.enq ueue(record);\n }\n }\n }\n }\n\n var uidCounter = 0;\n\n /**\ n * The class that maps to the DOM MutationObserver interface.\n * @param {F unction} callback.\n * @constructor\n */\n function JsMutationObserver(call back) {\n this.callback_ = callback;\n this.nodes_ = [];\n this.records _ = [];\n this.uid_ = ++uidCounter;\n }\n\n JsMutationObserver.prototype = {\n observe: function(target, options) {\n target = wrapIfNeeded(target) ;\n\n // 1.1\n if (!options.childList && !options.attributes && !optio ns.characterData ||\n\n // 1.2\n options.attributeOldValue && !options.attributes ||\n\n // 1.3\n options.attributeFilter && options.attributeFilter.length &&\n !options.attributes ||\n\n // 1.4\n options.characterDataOldValue && !options.characterData) {\n\n throw new SyntaxError();\n }\n\n var registrations = reg istrationsTable.get(target);\n if (!registrations)\n registrationsTa ble.set(target, registrations = []);\n\n // 2\n // If target's list of registered observers already includes a registered\n // observer associate d with the context object, replace that registered\n // observer's options with options.\n var registration;\n for (var i = 0; i < registrations. length; i++) {\n if (registrations[i].observer === this) {\n reg istration = registrations[i];\n registration.removeListeners();\n registration.options = options;\n break;\n }\n }\n\n // 3.\n // Otherwise, add a new registered observer to target's list of registered\n // observers with the context object as the observer and optio ns as the\n // options, and add target to context object's list of nodes on which it\n // is registered.\n if (!registration) {\n registra tion = new Registration(this, target, options);\n registrations.push(regi stration);\n this.nodes_.push(target);\n }\n\n registration.add Listeners();\n },\n\n disconnect: function() {\n this.nodes_.forEach( function(node) {\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n var registratio n = registrations[i];\n if (registration.observer === this) {\n registration.removeListeners();\n registrations.splice(i, 1);\n // Each node can only have one registered observer associated with\n // this observer.\n break;\n }\n }\n } , this);\n this.records_ = [];\n },\n\n takeRecords: function() {\n var copyOfRecords = this.records_;\n this.records_ = [];\n return copyOfRecords;\n }\n };\n\n /**\n * @param {string} type\n * @param {No de} target\n * @constructor\n */\n function MutationRecord(type, target) {\ n this.type = type;\n this.target = target;\n this.addedNodes = [];\n this.removedNodes = [];\n this.previousSibling = null;\n this.nextSiblin g = null;\n this.attributeName = null;\n this.attributeNamespace = null;\n this.oldValue = null;\n }\n\n function copyMutationRecord(original) {\n var record = new MutationRecord(original.type, original.target);\n record.ad dedNodes = original.addedNodes.slice();\n record.removedNodes = original.remo vedNodes.slice();\n record.previousSibling = original.previousSibling;\n r ecord.nextSibling = original.nextSibling;\n record.attributeName = original.a ttributeName;\n record.attributeNamespace = original.attributeNamespace;\n record.oldValue = original.oldValue;\n return record;\n };\n\n // We keep track of the two (possibly one) records used in a single mutation.\n var curren tRecord, recordWithOldValue;\n\n /**\n * Creates a record without |oldValue| and caches it as |currentRecord| for\n * later use.\n * @param {string} oldV alue\n * @return {MutationRecord}\n */\n function getRecord(type, target) { \n return currentRecord = new MutationRecord(type, target);\n }\n\n /**\n * Gets or creates a record with |oldValue| based in the |currentRecord|\n * @ param {string} oldValue\n * @return {MutationRecord}\n */\n function getRec ordWithOldValue(oldValue) {\n if (recordWithOldValue)\n return recordWit hOldValue;\n recordWithOldValue = copyMutationRecord(currentRecord);\n rec ordWithOldValue.oldValue = oldValue;\n return recordWithOldValue;\n }\n\n f unction clearRecords() {\n currentRecord = recordWithOldValue = undefined;\n }\n\n /**\n * @param {MutationRecord} record\n * @return {boolean} Whether the record represents a record from the current\n * mutation event.\n */\n function recordRepresentsCurrentMutation(record) {\n return record === recor dWithOldValue || record === currentRecord;\n }\n\n /**\n * Selects which rec ord, if any, to replace the last record in the queue.\n * This returns |null| if no record should be replaced.\n *\n * @param {MutationRecord} lastRecord\ n * @param {MutationRecord} newRecord\n * @param {MutationRecord}\n */\n function selectRecord(lastRecord, newRecord) {\n if (lastRecord === newRecord )\n return lastRecord;\n\n // Check if the the record we are adding repr esents the same record. If\n // so, we keep the one with the oldValue in it.\ n if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord))\n return recordWithOldValue;\n\n return null;\n }\n\n /**\n * Class used to represent a registered observer.\n * @param {MutationObserver} observer\n * @param {Node} target\n * @param {MutationObserverInit} options\n * @cons tructor\n */\n function Registration(observer, target, options) {\n this.o bserver = observer;\n this.target = target;\n this.options = options;\n this.transientObservedNodes = [];\n }\n\n Registration.prototype = {\n enq ueue: function(record) {\n var records = this.observer.records_;\n var length = records.length;\n\n // There are cases where we replace the last record with the new record.\n // For example if the record represents the s ame mutation we need to use\n // the one with the oldValue. If we get same record (this can happen as we\n // walk up the tree) we ignore the new reco rd.\n if (records.length > 0) {\n var lastRecord = records[length - 1];\n var recordToReplaceLast = selectRecord(lastRecord, record);\n if (recordToReplaceLast) {\n records[length - 1] = recordToReplaceLas t;\n return;\n }\n } else {\n scheduleCallback(this. observer);\n }\n\n records[length] = record;\n },\n\n addListene rs: function() {\n this.addListeners_(this.target);\n },\n\n addListe ners_: function(node) {\n var options = this.options;\n if (options.at tributes)\n node.addEventListener('DOMAttrModified', this, true);\n\n if (options.characterData)\n node.addEventListener('DOMCharacterDataMod ified', this, true);\n\n if (options.childList)\n node.addEventListe ner('DOMNodeInserted', this, true);\n\n if (options.childList || options.su btree)\n node.addEventListener('DOMNodeRemoved', this, true);\n },\n\n removeListeners: function() {\n this.removeListeners_(this.target);\n },\n\n removeListeners_: function(node) {\n var options = this.options ;\n if (options.attributes)\n node.removeEventListener('DOMAttrModif ied', this, true);\n\n if (options.characterData)\n node.removeEvent Listener('DOMCharacterDataModified', this, true);\n\n if (options.childList )\n node.removeEventListener('DOMNodeInserted', this, true);\n\n if (options.childList || options.subtree)\n node.removeEventListener('DOMNod eRemoved', this, true);\n },\n\n /**\n * Adds a transient observer on node. The transient observer gets removed\n * next time we deliver the chang e records.\n * @param {Node} node\n */\n addTransientObserver: functi on(node) {\n // Don't add transient observers on the target itself. We alre ady have all\n // the required listeners set up on the target.\n if (n ode === this.target)\n return;\n\n this.addListeners_(node);\n this.transientObservedNodes.push(node);\n var registrations = registrations Table.get(node);\n if (!registrations)\n registrationsTable.set(node , registrations = []);\n\n // We know that registrations does not contain t his because we already\n // checked if node === this.target.\n registr ations.push(this);\n },\n\n removeTransientObservers: function() {\n var transientObservedNodes = this.transientObservedNodes;\n this.transientO bservedNodes = [];\n\n transientObservedNodes.forEach(function(node) {\n // Transient observers are never added to the target.\n this.removeL isteners_(node);\n\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n if (registrat ions[i] === this) {\n registrations.splice(i, 1);\n // Eac h node can only have one registered observer associated with\n // thi s observer.\n break;\n }\n }\n }, this);\n }, \n\n handleEvent: function(e) {\n // Stop propagation since we are manag ing the propagation manually.\n // This means that other mutation events on the page will not work\n // correctly but that is by design.\n e.stop ImmediatePropagation();\n\n switch (e.type) {\n case 'DOMAttrModifie d':\n // http://dom.spec.whatwg.org/#concept-mo-queue-attributes\n\n var name = e.attrName;\n var namespace = e.relatedNode.namespace URI;\n var target = e.target;\n\n // 1.\n var record = new getRecord('attributes', target);\n record.attributeName = name;\n record.attributeNamespace = namespace;\n\n // 2.\n v ar oldValue =\n e.attrChange === MutationEvent.ADDITION ? null : e. prevValue;\n\n forEachAncestorAndObserverEnqueueRecord(target, function (options) {\n // 3.1, 4.2\n if (!options.attributes)\n return;\n\n // 3.2, 4.3\n if (options.attributeF ilter && options.attributeFilter.length &&\n options.attributeFil ter.indexOf(name) === -1 &&\n options.attributeFilter.indexOf(nam espace) === -1) {\n return;\n }\n // 3.3, 4.4 \n if (options.attributeOldValue)\n return getRecordWith OldValue(oldValue);\n\n // 3.4, 4.5\n return record;\n });\n\n break;\n\n case 'DOMCharacterDataModified':\n // http://dom.spec.whatwg.org/#concept-mo-queue-characterdata\n va r target = e.target;\n\n // 1.\n var record = getRecord('chara cterData', target);\n\n // 2.\n var oldValue = e.prevValue;\n\ n\n forEachAncestorAndObserverEnqueueRecord(target, function(options) { \n // 3.1, 4.2\n if (!options.characterData)\n return;\n\n // 3.2, 4.3\n if (options.characterDataOldVa lue)\n return getRecordWithOldValue(oldValue);\n\n // 3. 3, 4.4\n return record;\n });\n\n break;\n\n case 'DOMNodeRemoved':\n this.addTransientObserver(e.target);\n // Fall through.\n case 'DOMNodeInserted':\n // http://dom.sp ec.whatwg.org/#concept-mo-queue-childlist\n var target = e.relatedNode; \n var changedNode = e.target;\n var addedNodes, removedNodes; \n if (e.type === 'DOMNodeInserted') {\n addedNodes = [chang edNode];\n removedNodes = [];\n } else {\n\n adde dNodes = [];\n removedNodes = [changedNode];\n }\n var previousSibling = changedNode.previousSibling;\n var nextSibling = changedNode.nextSibling;\n\n // 1.\n var record = getRecord('c hildList', target);\n record.addedNodes = addedNodes;\n record .removedNodes = removedNodes;\n record.previousSibling = previousSiblin g;\n record.nextSibling = nextSibling;\n\n forEachAncestorAndO bserverEnqueueRecord(target, function(options) {\n // 2.1, 3.2\n if (!options.childList)\n return;\n\n // 2.2, 3.3 \n return record;\n });\n\n }\n\n clearRecords();\ n }\n };\n\n global.JsMutationObserver = JsMutationObserver;\n\n if (!glob al.MutationObserver)\n global.MutationObserver = JsMutationObserver;\n\n\n})( this);\n",
143 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nwindow.HTMLImports = window .HTMLImports || {flags:{}};", 143 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nwindow.HTMLImports = window .HTMLImports || {flags:{}};",
144 "/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve d.\r\n * This code may only be used under the BSD style license found at http:// polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as part of the polymer project is also\r\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n(functi on(scope) {\r\n\r\nvar hasNative = ('import' in document.createElement('link')); \r\nvar useNative = hasNative;\r\n\r\nisIE = /Trident/.test(navigator.userAgent) ;\r\n\r\n// TODO(sorvell): SD polyfill intrusion\r\nvar hasShadowDOMPolyfill = B oolean(window.ShadowDOMPolyfill);\r\nvar wrap = function(node) {\r\n return has ShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node) : node;\r\n};\r\nvar ma inDoc = wrap(document);\r\n \r\n// NOTE: We cannot polyfill document.currentS cript because it's not possible\r\n// both to override and maintain the ability to capture the native value;\r\n// therefore we choose to expose _currentScript both when native imports\r\n// and the polyfill are in use.\r\nvar currentScript Descriptor = {\r\n get: function() {\r\n var script = HTMLImports.currentScr ipt || document.currentScript ||\r\n // NOTE: only works when called in s ynchronously executing code.\r\n // readyState should check if `loading` but IE10 is \r\n // interactive when scripts run so we cheat.\r\n (document.readyState !== 'complete' ? \r\n document.scripts[document.scri pts.length - 1] : null);\r\n return wrap(script);\r\n },\r\n configurable: true\r\n};\r\n\r\nObject.defineProperty(document, '_currentScript', currentScrip tDescriptor);\r\nObject.defineProperty(mainDoc, '_currentScript', currentScriptD escriptor);\r\n\r\n// call a callback when all HTMLImports in the document at ca ll (or at least\r\n// document ready) time have loaded.\r\n// 1. ensure the doc ument is in a ready state (has dom), then \r\n// 2. watch for loading of imports and call callback when done\r\nfunction whenImportsReady(callback, doc) {\r\n doc = doc || mainDoc;\r\n // if document is loading, wait and try again\r\n wh enDocumentReady(function() {\r\n watchImportsLoad(callback, doc);\r\n }, doc );\r\n}\r\n\r\n// call the callback when the document is in a ready state (has d om)\r\nvar requiredReadyState = isIE ? 'complete' : 'interactive';\r\nvar READY_ EVENT = 'readystatechange';\r\nfunction isDocumentReady(doc) {\r\n return (doc. readyState === 'complete' ||\r\n doc.readyState === requiredReadyState);\r\ n}\r\n\r\n// call <callback> when we ensure the document is in a ready state\r\n function whenDocumentReady(callback, doc) {\r\n if (!isDocumentReady(doc)) {\r\ n var checkReady = function() {\r\n if (doc.readyState === 'complete' || \r\n doc.readyState === requiredReadyState) {\r\n doc.removeEve ntListener(READY_EVENT, checkReady);\r\n whenDocumentReady(callback, doc) ;\r\n }\r\n };\r\n doc.addEventListener(READY_EVENT, checkReady);\r\n } else if (callback) {\r\n callback();\r\n }\r\n}\r\n\r\nfunction markTarg etLoaded(event) {\r\n event.target.__loaded = true;\r\n}\r\n\r\n// call <callba ck> when we ensure all imports have loaded\r\nfunction watchImportsLoad(callback , doc) {\r\n var imports = doc.querySelectorAll('link[rel=import]');\r\n var l oaded = 0, l = imports.length;\r\n function checkDone(d) { \r\n if (loaded = = l) {\r\n callback && callback();\r\n }\r\n }\r\n function loadedImpo rt(e) {\r\n markTargetLoaded(e);\r\n loaded++;\r\n checkDone();\r\n }\ r\n if (l) {\r\n for (var i=0, imp; (i<l) && (imp=imports[i]); i++) {\r\n if (isImportLoaded(imp)) {\r\n loadedImport.call(imp, {target: imp});\ r\n } else {\r\n imp.addEventListener('load', loadedImport);\r\n imp.addEventListener('error', loadedImport);\r\n }\r\n }\r\n } else {\r\n checkDone();\r\n }\r\n}\r\n\r\n// NOTE: test for native imports loadi ng is based on explicitly watching\r\n// all imports (see below).\r\n// We canno t rely on this entirely without watching the entire document\r\n// for import li nks. For perf reasons, currently only head is watched.\r\n// Instead, we fallbac k to checking if the import property is available \r\n// and the document is not itself loading. \r\nfunction isImportLoaded(link) {\r\n return useNative ? lin k.__loaded || \r\n (link.import && link.import.readyState !== 'loading') :\ r\n link.__importParsed;\r\n}\r\n\r\n// TODO(sorvell): Workaround for \r\n/ / https://www.w3.org/Bugs/Public/show_bug.cgi?id=25007, should be removed when\r \n// this bug is addressed.\r\n// (1) Install a mutation observer to see when HT MLImports have loaded\r\n// (2) if this script is run during document load it wi ll watch any existing\r\n// imports for loading.\r\n//\r\n// NOTE: The workaroun d has restricted functionality: (1) it's only compatible\r\n// with imports that are added to document.head since the mutation observer \r\n// watches only head for perf reasons, (2) it requires this script\r\n// to run before any imports h ave completed loading.\r\nif (useNative) {\r\n new MutationObserver(function(mx ns) {\r\n for (var i=0, l=mxns.length, m; (i < l) && (m=mxns[i]); i++) {\r\n if (m.addedNodes) {\r\n handleImports(m.addedNodes);\r\n }\r\n }\r\n }).observe(document.head, {childList: true});\r\n\r\n function handle Imports(nodes) {\r\n for (var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\r\n if (isImport(n)) {\r\n handleImport(n); \r\n }\r\n }\r\n }\r\n\r\n function isImport(element) {\r\n return element.localNam e === 'link' && element.rel === 'import';\r\n }\r\n\r\n function handleImport( element) {\r\n var loaded = element.import;\r\n if (loaded) {\r\n mar kTargetLoaded({target: element});\r\n } else {\r\n element.addEventListe ner('load', markTargetLoaded);\r\n element.addEventListener('error', markTa rgetLoaded);\r\n }\r\n }\r\n\r\n // make sure to catch any imports that are in the process of loading\r\n // when this script is run.\r\n (function() {\r \n if (document.readyState === 'loading') {\r\n var imports = document.q uerySelectorAll('link[rel=import]');\r\n for (var i=0, l=imports.length, im p; (i<l) && (imp=imports[i]); i++) {\r\n handleImport(imp);\r\n }\r\ n }\r\n })();\r\n\r\n}\r\n\r\n// Fire the 'HTMLImportsLoaded' event when imp orts in document at load time \r\n// have loaded. This event is required to simu late the script blocking \r\n// behavior of native imports. A main document scri pt that needs to be sure\r\n// imports have loaded should wait for this event.\r \nwhenImportsReady(function() {\r\n HTMLImports.ready = true;\r\n HTMLImports. readyTime = new Date().getTime();\r\n mainDoc.dispatchEvent(\r\n new CustomE vent('HTMLImportsLoaded', {bubbles: true})\r\n );\r\n});\r\n\r\n// exports\r\ns cope.useNative = useNative;\r\nscope.isImportLoaded = isImportLoaded;\r\nscope.w henReady = whenImportsReady;\r\nscope.isIE = isIE;\r\n\r\n// deprecated\r\nscope .whenImportsReady = whenImportsReady;\r\n\r\n})(window.HTMLImports);", 144 "/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve d.\r\n * This code may only be used under the BSD style license found at http:// polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as part of the polymer project is also\r\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n(functi on(scope) {\r\n\r\nvar IMPORT_LINK_TYPE = 'import';\r\nvar hasNative = (IMPORT_L INK_TYPE in document.createElement('link'));\r\nvar useNative = hasNative;\r\nva r isIE = /Trident/.test(navigator.userAgent);\r\n\r\n// TODO(sorvell): SD polyfi ll intrusion\r\nvar hasShadowDOMPolyfill = Boolean(window.ShadowDOMPolyfill);\r\ nvar wrap = function(node) {\r\n return hasShadowDOMPolyfill ? ShadowDOMPolyfil l.wrapIfNeeded(node) : node;\r\n};\r\n\r\nvar rootDocument = wrap(document);\r\n \r\n// NOTE: We cannot polyfill document.currentScript because it's not poss ible\r\n// both to override and maintain the ability to capture the native value ;\r\n// therefore we choose to expose _currentScript both when native imports\r\ n// and the polyfill are in use.\r\nvar currentScriptDescriptor = {\r\n get: fu nction() {\r\n var script = HTMLImports.currentScript || document.currentScri pt ||\r\n // NOTE: only works when called in synchronously executing code .\r\n // readyState should check if `loading` but IE10 is \r\n // interactive when scripts run so we cheat.\r\n (document.readyState !== 'c omplete' ? \r\n document.scripts[document.scripts.length - 1] : null);\r\ n return wrap(script);\r\n },\r\n configurable: true\r\n};\r\n\r\nObject.de fineProperty(document, '_currentScript', currentScriptDescriptor);\r\nObject.def ineProperty(rootDocument, '_currentScript', currentScriptDescriptor);\r\n\r\n// call a callback when all HTMLImports in the document at call (or at least\r\n// document ready) time have loaded.\r\n// 1. ensure the document is in a ready st ate (has dom), then \r\n// 2. watch for loading of imports and call callback whe n done\r\nfunction whenReady(callback, doc) {\r\n doc = doc || rootDocument;\r\ n // if document is loading, wait and try again\r\n whenDocumentReady(function () {\r\n watchImportsLoad(callback, doc);\r\n }, doc);\r\n}\r\n\r\n// call t he callback when the document is in a ready state (has dom)\r\nvar requiredReady State = isIE ? 'complete' : 'interactive';\r\nvar READY_EVENT = 'readystatechang e';\r\nfunction isDocumentReady(doc) {\r\n return (doc.readyState === 'complete ' ||\r\n doc.readyState === requiredReadyState);\r\n}\r\n\r\n// call <callb ack> when we ensure the document is in a ready state\r\nfunction whenDocumentRea dy(callback, doc) {\r\n if (!isDocumentReady(doc)) {\r\n var checkReady = fu nction() {\r\n if (doc.readyState === 'complete' || \r\n doc.ready State === requiredReadyState) {\r\n doc.removeEventListener(READY_EVENT, checkReady);\r\n whenDocumentReady(callback, doc);\r\n }\r\n };\r \n doc.addEventListener(READY_EVENT, checkReady);\r\n } else if (callback) { \r\n callback();\r\n }\r\n}\r\n\r\nfunction markTargetLoaded(event) {\r\n e vent.target.__loaded = true;\r\n}\r\n\r\n// call <callback> when we ensure all i mports have loaded\r\nfunction watchImportsLoad(callback, doc) {\r\n var import s = doc.querySelectorAll('link[rel=import]');\r\n var loaded = 0, l = imports.l ength;\r\n function checkDone(d) { \r\n if ((loaded == l) && callback) {\r\n callback();\r\n }\r\n }\r\n function loadedImport(e) {\r\n markTa rgetLoaded(e);\r\n loaded++;\r\n checkDone();\r\n }\r\n if (l) {\r\n for (var i=0, imp; (i<l) && (imp=imports[i]); i++) {\r\n if (isImportLoaded (imp)) {\r\n loadedImport.call(imp, {target: imp});\r\n } else {\r\n imp.addEventListener('load', loadedImport);\r\n imp.addEventListe ner('error', loadedImport);\r\n }\r\n }\r\n } else {\r\n checkDone() ;\r\n }\r\n}\r\n\r\n// NOTE: test for native imports loading is based on explic itly watching\r\n// all imports (see below).\r\n// We cannot rely on this entire ly without watching the entire document\r\n// for import links. For perf reasons , currently only head is watched.\r\n// Instead, we fallback to checking if the import property is available \r\n// and the document is not itself loading. \r\n function isImportLoaded(link) {\r\n return useNative ? link.__loaded || \r\n (link.import && link.import.readyState !== 'loading') :\r\n link.__impor tParsed;\r\n}\r\n\r\n// TODO(sorvell): Workaround for \r\n// https://www.w3.org/ Bugs/Public/show_bug.cgi?id=25007, should be removed when\r\n// this bug is addr essed.\r\n// (1) Install a mutation observer to see when HTMLImports have loaded \r\n// (2) if this script is run during document load it will watch any existing \r\n// imports for loading.\r\n//\r\n// NOTE: The workaround has restricted func tionality: (1) it's only compatible\r\n// with imports that are added to documen t.head since the mutation observer \r\n// watches only head for perf reasons, (2 ) it requires this script\r\n// to run before any imports have completed loading .\r\nif (useNative) {\r\n new MutationObserver(function(mxns) {\r\n for (var i=0, l=mxns.length, m; (i < l) && (m=mxns[i]); i++) {\r\n if (m.addedNodes ) {\r\n handleImports(m.addedNodes);\r\n }\r\n }\r\n }).observe( document.head, {childList: true});\r\n\r\n function handleImports(nodes) {\r\n for (var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\r\n if (i sImport(n)) {\r\n handleImport(n); \r\n }\r\n }\r\n }\r\n\r\n function isImport(element) {\r\n return element.localName === 'link' && eleme nt.rel === 'import';\r\n }\r\n\r\n function handleImport(element) {\r\n var loaded = element.import;\r\n if (loaded) {\r\n markTargetLoaded({target : element});\r\n } else {\r\n element.addEventListener('load', markTarge tLoaded);\r\n element.addEventListener('error', markTargetLoaded);\r\n } \r\n }\r\n\r\n // make sure to catch any imports that are in the process of lo ading\r\n // when this script is run.\r\n (function() {\r\n if (document.re adyState === 'loading') {\r\n var imports = document.querySelectorAll('link [rel=import]');\r\n for (var i=0, l=imports.length, imp; (i<l) && (imp=impo rts[i]); i++) {\r\n handleImport(imp);\r\n }\r\n }\r\n })();\r\n \r\n}\r\n\r\n// Fire the 'HTMLImportsLoaded' event when imports in document at l oad time \r\n// have loaded. This event is required to simulate the script block ing \r\n// behavior of native imports. A main document script that needs to be s ure\r\n// imports have loaded should wait for this event.\r\nwhenReady(function( ) {\r\n HTMLImports.ready = true;\r\n HTMLImports.readyTime = new Date().getTi me();\r\n rootDocument.dispatchEvent(\r\n new CustomEvent('HTMLImportsLoaded ', {bubbles: true})\r\n );\r\n});\r\n\r\n// exports\r\nscope.useNative = useNat ive;\r\nscope.isImportLoaded = isImportLoaded;\r\nscope.whenReady = whenReady;\r \nscope.rootDocument = rootDocument;\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYP E;\r\nscope.isIE = isIE;\r\n\r\n})(window.HTMLImports);",
145 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\n // imports\n var path = scope.path;\n var xhr = scope.xhr;\n var flags = scope.f lags;\n\n // TODO(sorvell): this loader supports a dynamic list of urls\n // a nd an oncomplete callback that is called when the loader is done.\n // The poly fill currently does *not* need this dynamism or the onComplete\n // concept. Be cause of this, the loader could be simplified quite a bit.\n var Loader = funct ion(onLoad, onComplete) {\n this.cache = {};\n this.onload = onLoad;\n this.oncomplete = onComplete;\n this.inflight = 0;\n this.pending = {};\n };\n\n Loader.prototype = {\n addNodes: function(nodes) {\n // number of transactions to complete\n this.inflight += nodes.length;\n // comm ence transactions\n for (var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\n this.require(n);\n }\n // anything to do?\n this .checkDone();\n },\n addNode: function(node) {\n // number of transac tions to complete\n this.inflight++;\n // commence transactions\n this.require(node);\n // anything to do?\n this.checkDone();\n },\ n require: function(elt) {\n var url = elt.src || elt.href;\n // en sure we have a standard url that can be used\n // reliably for deduping.\n // TODO(sjmiles): ad-hoc\n elt.__nodeUrl = url;\n // deduplicatio n\n if (!this.dedupe(url, elt)) {\n // fetch this resource\n this.fetch(url, elt);\n }\n },\n dedupe: function(url, elt) {\n if (this.pending[url]) {\n // add to list of nodes waiting for inUrl\n this.pending[url].push(elt);\n // don't need fetch\n return t rue;\n }\n var resource;\n if (this.cache[url]) {\n this.o nload(url, elt, this.cache[url]);\n // finished this transaction\n this.tail();\n // don't need fetch\n return true;\n }\n // first node waiting for inUrl\n this.pending[url] = [elt];\n // nee d fetch (not a dupe)\n return false;\n },\n fetch: function(url, elt) {\n flags.load && console.log('fetch', url, elt);\n if (url.match(/^d ata:/)) {\n // Handle Data URI Scheme\n var pieces = url.split(',' );\n var header = pieces[0];\n var body = pieces[1];\n if(h eader.indexOf(';base64') > -1) {\n body = atob(body);\n } else { \n body = decodeURIComponent(body);\n }\n setTimeout(func tion() {\n this.receive(url, elt, null, body);\n }.bind(this), 0);\n } else {\n var receiveXhr = function(err, resource, redirecte dUrl) {\n this.receive(url, elt, err, resource, redirectedUrl);\n }.bind(this);\n xhr.load(url, receiveXhr);\n // TODO(sorvell): b locked on)\n // https://code.google.com/p/chromium/issues/detail?id=25722 1\n // xhr'ing for a document makes scripts in imports runnable; otherwis e\n // they are not; however, it requires that we have doctype=html in\n // the import which is unacceptable. This is only needed on Chrome\n // to avoid the bug above.\n /*\n if (isDocumentLink(elt)) {\n xhr.loadDocument(url, receiveXhr);\n } else {\n xhr.loa d(url, receiveXhr);\n }\n */\n }\n },\n receive: functi on(url, elt, err, resource, redirectedUrl) {\n this.cache[url] = resource;\ n var $p = this.pending[url];\n for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {\n // If url was redirected, use the redirected locatio n so paths are\n // calculated relative to that.\n this.onload(url , p, resource, err, redirectedUrl);\n this.tail();\n }\n this.p ending[url] = null;\n },\n tail: function() {\n --this.inflight;\n this.checkDone();\n },\n checkDone: function() {\n if (!this.infli ght) {\n this.oncomplete();\n }\n }\n };\n\n xhr = xhr || {\n async: true,\n ok: function(request) {\n return (request.status >= 200 && request.status < 300)\n || (request.status === 304)\n || ( request.status === 0);\n },\n load: function(url, next, nextContext) {\n var request = new XMLHttpRequest();\n if (scope.flags.debug || scope.fl ags.bust) {\n url += '?' + Math.random();\n }\n request.open('G ET', url, xhr.async);\n request.addEventListener('readystatechange', functi on(e) {\n if (request.readyState === 4) {\n // Servers redirecti ng an import can add a Location header to help us\n // polyfill correct ly.\n var locationHeader = request.getResponseHeader(\"Location\");\n var redirectedUrl = null;\n if (locationHeader) {\n var redirectedUrl = (locationHeader.substr( 0, 1 ) === \"/\")\n ? l ocation.origin + locationHeader // Location is a relative path\n : locationHeader; // Full path\n }\n next.ca ll(nextContext, !xhr.ok(request) && request,\n request.response || request.responseText, redirectedUrl);\n }\n });\n request.send( );\n return request;\n },\n loadDocument: function(url, next, nextCon text) {\n this.load(url, next, nextContext).responseType = 'document';\n }\n };\n\n // exports\n scope.xhr = xhr;\n scope.Loader = Loader;\n\n})(win dow.HTMLImports);\n", 145 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\n // imports\n var path = scope.path;\n var xhr = scope.xhr;\n var flags = scope.f lags;\n\n // TODO(sorvell): this loader supports a dynamic list of urls\n // a nd an oncomplete callback that is called when the loader is done.\n // The poly fill currently does *not* need this dynamism or the onComplete\n // concept. Be cause of this, the loader could be simplified quite a bit.\n var Loader = funct ion(onLoad, onComplete) {\n this.cache = {};\n this.onload = onLoad;\n this.oncomplete = onComplete;\n this.inflight = 0;\n this.pending = {};\n };\n\n Loader.prototype = {\n\n addNodes: function(nodes) {\n // numbe r of transactions to complete\n this.inflight += nodes.length;\n // co mmence transactions\n for (var i=0, l=nodes.length, n; (i<l) && (n=nodes[i] ); i++) {\n this.require(n);\n }\n // anything to do?\n th is.checkDone();\n },\n\n addNode: function(node) {\n // number of tra nsactions to complete\n this.inflight++;\n // commence transactions\n this.require(node);\n // anything to do?\n this.checkDone();\n },\n\n require: function(elt) {\n var url = elt.src || elt.href;\n // ensure we have a standard url that can be used\n // reliably for dedupi ng.\n // TODO(sjmiles): ad-hoc\n elt.__nodeUrl = url;\n // dedupl ication\n if (!this.dedupe(url, elt)) {\n // fetch this resource\n this.fetch(url, elt);\n }\n },\n\n dedupe: function(url, elt) { \n if (this.pending[url]) {\n // add to list of nodes waiting for in Url\n this.pending[url].push(elt);\n // don't need fetch\n return true;\n }\n var resource;\n if (this.cache[url]) {\n this.onload(url, elt, this.cache[url]);\n // finished this transaction\ n this.tail();\n // don't need fetch\n return true;\n }\n // first node waiting for inUrl\n this.pending[url] = [elt];\n // need fetch (not a dupe)\n return false;\n },\n\n fetch: function (url, elt) {\n flags.load && console.log('fetch', url, elt);\n if (url .match(/^data:/)) {\n // Handle Data URI Scheme\n var pieces = url .split(',');\n var header = pieces[0];\n var body = pieces[1];\n if(header.indexOf(';base64') > -1) {\n body = atob(body);\n } else {\n body = decodeURIComponent(body);\n }\n setTi meout(function() {\n this.receive(url, elt, null, body);\n }.b ind(this), 0);\n } else {\n var receiveXhr = function(err, resource, redirectedUrl) {\n this.receive(url, elt, err, resource, redirectedUrl );\n }.bind(this);\n xhr.load(url, receiveXhr);\n // TODO(s orvell): blocked on)\n // https://code.google.com/p/chromium/issues/detai l?id=257221\n // xhr'ing for a document makes scripts in imports runnable ; otherwise\n // they are not; however, it requires that we have doctype= html in\n // the import which is unacceptable. This is only needed on Chr ome\n // to avoid the bug above.\n /*\n if (isDocumentLink( elt)) {\n xhr.loadDocument(url, receiveXhr);\n } else {\n xhr.load(url, receiveXhr);\n }\n */\n }\n },\n\n rec eive: function(url, elt, err, resource, redirectedUrl) {\n this.cache[url] = resource;\n var $p = this.pending[url];\n for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {\n // If url was redirected, use the redire cted location so paths are\n // calculated relative to that.\n thi s.onload(url, p, resource, err, redirectedUrl);\n this.tail();\n }\n this.pending[url] = null;\n },\n\n tail: function() {\n --this. inflight;\n this.checkDone();\n },\n\n checkDone: function() {\n if (!this.inflight) {\n this.oncomplete();\n }\n }\n\n };\n\n xhr = xhr || {\n async: true,\n\n ok: function(request) {\n return (r equest.status >= 200 && request.status < 300)\n || (request.status === 304)\n || (request.status === 0);\n },\n\n load: function(url, ne xt, nextContext) {\n var request = new XMLHttpRequest();\n if (scope.f lags.debug || scope.flags.bust) {\n url += '?' + Math.random();\n }\ n request.open('GET', url, xhr.async);\n request.addEventListener('rea dystatechange', function(e) {\n if (request.readyState === 4) {\n // Servers redirecting an import can add a Location header to help us\n // polyfill correctly.\n var locationHeader = request.getResponseHea der(\"Location\");\n var redirectedUrl = null;\n if (locationH eader) {\n var redirectedUrl = (locationHeader.substr( 0, 1 ) === \"/ \")\n ? location.origin + locationHeader // Location is a relative path\n : locationHeader; // Full path\n }\n next.call(nextContext, !xhr.ok(request) && request,\n request.response || request.responseText, redirectedUrl);\n }\n }) ;\n request.send();\n return request;\n },\n\n loadDocument: fun ction(url, next, nextContext) {\n this.load(url, next, nextContext).respons eType = 'document';\n }\n \n };\n\n // exports\n scope.xhr = xhr;\n sc ope.Loader = Loader;\n\n})(window.HTMLImports);\n",
146 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\nvar I MPORT_LINK_TYPE = 'import';\nvar flags = scope.flags;\nvar isIE = scope.isIE;\n/ / TODO(sorvell): SD polyfill intrusion\nvar mainDoc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\n// importP arser\n// highlander object to manage parsing of imports\n// parses import relat ed elements\n// and ensures proper parse order\n// parse order is enforced by cr awling the tree and monitoring which elements\n// have been parsed; async parsin g is also supported.\n\n// highlander object for parsing a document tree\nvar im portParser = {\n // parse selectors for main document elements\n documentSelec tors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n // parse selectors for import doc ument elements\n importsSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']', \n 'link[rel=stylesheet]',\n 'style',\n 'script:not([type])',\n 'scr ipt[type=\"text/javascript\"]'\n ].join(','),\n map: {\n link: 'parseLink', \n script: 'parseScript',\n style: 'parseStyle'\n },\n // try to parse t he next import in the tree\n parseNext: function() {\n var next = this.nextT oParse();\n if (next) {\n this.parse(next);\n }\n },\n parse: funct ion(elt) {\n if (this.isParsed(elt)) {\n flags.parse && console.log('[%s ] is already parsed', elt.localName);\n return;\n }\n var fn = this[t his.map[elt.localName]];\n if (fn) {\n this.markParsing(elt);\n fn. call(this, elt);\n }\n },\n // only 1 element may be parsed at a time; pars ing is async so each\n // parsing implementation must inform the system that pa rsing is complete\n // via markParsingComplete.\n // To prompt the system to p arse the next element, parseNext should then be\n // called.\n // Note, parseN ext used to be included at the end of markParsingComplete, but\n // we must not do this so that, for example, we can (1) mark parsing complete \n // then (2) fire an import load event, and then (3) parse the next resource.\n markParsing: function(elt) {\n flags.parse && console.log('parsing', elt);\n this.pars ingElement = elt;\n },\n markParsingComplete: function(elt) {\n elt.__impor tParsed = true;\n if (elt.__importElement) {\n elt.__importElement.__imp ortParsed = true;\n }\n this.parsingElement = null;\n flags.parse && co nsole.log('completed', elt);\n },\n invalidateParse: function(doc) {\n if ( doc && doc.__importLink) {\n doc.__importParsed = doc.__importLink.__import Parsed = false;\n this.parseSoon();\n }\n },\n parseSoon: function() { \n if (this._parseSoon) {\n cancelAnimationFrame(this._parseDelay);\n }\n var parser = this;\n this._parseSoon = requestAnimationFrame(function () {\n parser.parseNext();\n });\n },\n parseImport: function(elt) {\n // TODO(sorvell): consider if there's a better way to do this;\n // expos e an imports parsing hook; this is needed, for example, by the\n // CustomEle ments polyfill.\n if (HTMLImports.__importsParsingHook) {\n HTMLImports. __importsParsingHook(elt);\n }\n if (elt.import) {\n elt.import.__imp ortParsed = true;\n }\n this.markParsingComplete(elt);\n // fire load e vent\n if (elt.__resource && !elt.__error) {\n elt.dispatchEvent(new Cus tomEvent('load', {bubbles: false})); \n } else {\n elt.dispatchEvent( new CustomEvent('error', {bubbles: false}));\n }\n // TODO(sorvell): worka round for Safari addEventListener not working\n // for elements not in the ma in document.\n if (elt.__pending) {\n var fn;\n while (elt.__pendin g.length) {\n fn = elt.__pending.shift();\n if (fn) {\n f n({target: elt});\n }\n }\n }\n this.parseNext();\n },\n par seLink: function(linkElt) {\n if (nodeIsImport(linkElt)) {\n this.parseI mport(linkElt);\n } else {\n // make href absolute\n linkElt.href = linkElt.href;\n this.parseGeneric(linkElt);\n }\n },\n parseStyle: fu nction(elt) {\n // TODO(sorvell): style element load event can just not fire so clone styles\n var src = elt;\n elt = cloneStyle(elt);\n elt.__impor tElement = src;\n this.parseGeneric(elt);\n },\n parseGeneric: function(elt ) {\n this.trackElement(elt);\n this.addElementToDocument(elt);\n },\n r ootImportForElement: function(elt) {\n var n = elt;\n while (n.ownerDocume nt.__importLink) {\n n = n.ownerDocument.__importLink;\n }\n return n ;\n },\n addElementToDocument: function(elt) {\n var port = this.rootImport ForElement(elt.__importElement || elt);\n var l = port.__insertedElements = p ort.__insertedElements || 0;\n var refNode = port.nextElementSibling;\n fo r (var i=0; i < l; i++) {\n refNode = refNode && refNode.nextElementSibling ;\n }\n port.parentNode.insertBefore(elt, refNode);\n },\n // tracks whe n a loadable element has loaded\n trackElement: function(elt, callback) {\n var self = this;\n var done = function(e) {\n if (callback) {\n c allback(e);\n }\n self.markParsingComplete(elt);\n self.parseNext ();\n };\n elt.addEventListener('load', done);\n elt.addEventListener(' error', done);\n\n // NOTE: IE does not fire \"load\" event for styles that h ave already loaded\n // This is in violation of the spec, so we try our harde st to work around it\n if (isIE && elt.localName === 'style') {\n var fa keLoad = false;\n // If there's not @import in the textContent, assume it h as loaded\n if (elt.textContent.indexOf('@import') == -1) {\n fakeLo ad = true;\n // if we have a sheet, we have been parsed\n } else if (e lt.sheet) {\n fakeLoad = true;\n var csr = elt.sheet.cssRules;\n var len = csr ? csr.length : 0;\n // search the rules for @import's \n for (var i = 0, r; (i < len) && (r = csr[i]); i++) {\n if (r. type === CSSRule.IMPORT_RULE) {\n // if every @import has resolved, f ake the load\n fakeLoad = fakeLoad && Boolean(r.styleSheet);\n }\n }\n }\n // dispatch a fake load event and continue parsi ng\n if (fakeLoad) {\n elt.dispatchEvent(new CustomEvent('load', {bu bbles: false}));\n }\n }\n },\n // NOTE: execute scripts by injecting them and watching for the load/error\n // event. Inline scripts are handled via dataURL's because browsers tend to\n // provide correct parsing errors in this case. If this has any compatibility\n // issues, we can switch to injecting th e inline script with textContent.\n // Scripts with dataURL's do not appear to generate load events and therefore\n // we assume they execute synchronously.\n parseScript: function(scriptElt) {\n var script = document.createElement('s cript');\n script.__importElement = scriptElt;\n script.src = scriptElt.sr c ? scriptElt.src : \n generateScriptDataUrl(scriptElt);\n scope.curre ntScript = scriptElt;\n this.trackElement(script, function(e) {\n script .parentNode.removeChild(script);\n scope.currentScript = null; \n });\n this.addElementToDocument(script);\n },\n // determine the next element in the tree which should be parsed\n nextToParse: function() {\n this._mayPars e = [];\n return !this.parsingElement && this.nextToParseInDoc(mainDoc);\n } ,\n nextToParseInDoc: function(doc, link) {\n // use `marParse` list to avoi d looping into the same document again\n // since it could cause an iloop.\n if (doc && this._mayParse.indexOf(doc) < 0) {\n this._mayParse.push(doc) ;\n var nodes = doc.querySelectorAll(this.parseSelectorsForNode(doc));\n for (var i=0, l=nodes.length, p=0, n; (i<l) && (n=nodes[i]); i++) {\n if (!this.isParsed(n)) {\n if (this.hasResource(n)) {\n retu rn nodeIsImport(n) ? this.nextToParseInDoc(n.import, n) : n;\n } else { \n return;\n }\n }\n }\n }\n // all nodes have been parsed, ready to parse import, if any\n return link;\n },\n // re turn the set of parse selectors relevant for this node.\n parseSelectorsForNode : function(node) {\n var doc = node.ownerDocument || node;\n return doc == = mainDoc ? this.documentSelectors : this.importsSelectors;\n },\n isParsed: f unction(node) {\n return node.__importParsed;\n },\n hasResource: function( node) {\n if (nodeIsImport(node) && (node.import === undefined)) {\n ret urn false;\n }\n return true;\n }\n};\n\nfunction nodeIsImport(elt) {\n return (elt.localName === 'link') && (elt.rel === IMPORT_LINK_TYPE);\n}\n\nfunct ion generateScriptDataUrl(script) {\n var scriptContent = generateScriptContent (script);\n return 'data:text/javascript;charset=utf-8,' + encodeURIComponent(s criptContent);\n}\n\nfunction generateScriptContent(script) {\n return script.t extContent + generateSourceMapHint(script);\n}\n\n// calculate source map hint\n function generateSourceMapHint(script) {\n var moniker = script.__nodeUrl;\n i f (!moniker) {\n moniker = script.ownerDocument.baseURI;\n // there could be more than one script this url\n var tag = '[' + Math.floor((Math.random()+ 1)*1000) + ']';\n // TODO(sjmiles): Polymer hack, should be pluggable if we n eed to allow \n // this sort of thing\n var matches = script.textContent.m atch(/Polymer\\(['\"]([^'\"]*)/);\n tag = matches && matches[1] || tag;\n // tag the moniker\n moniker += '/' + tag + '.js';\n }\n return '\\n//# sou rceURL=' + moniker + '\\n';\n}\n\n// style/stylesheet handling\n\n// clone style with proper path resolution for main document\n// NOTE: styles are the only ele ments that require direct path fixup.\nfunction cloneStyle(style) {\n var clone = style.ownerDocument.createElement('style');\n clone.textContent = style.text Content;\n path.resolveUrlsInStyle(clone);\n return clone;\n}\n\n// path fixup : style elements in imports must be made relative to the main \n// document. We fixup url's in url() and @import.\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g; \nvar CSS_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n\nvar path = {\n resolveUrlsInStyle: function(style) {\n var doc = style.ownerDocument;\n var resolver = doc.createElement('a');\n style.textContent = this.resolve UrlsInCssText(style.textContent, resolver);\n return style; \n },\n resolv eUrlsInCssText: function(cssText, urlObj) {\n var r = this.replaceUrls(cssTex t, urlObj, CSS_URL_REGEXP);\n r = this.replaceUrls(r, urlObj, CSS_IMPORT_REGE XP);\n return r;\n },\n replaceUrls: function(text, urlObj, regexp) {\n return text.replace(regexp, function(m, pre, url, post) {\n var urlPath = u rl.replace(/[\"']/g, '');\n urlObj.href = urlPath;\n urlPath = urlObj. href;\n return pre + '\\'' + urlPath + '\\'' + post;\n }); \n }\n}\n \n// exports\nscope.parser = importParser;\nscope.path = path;\n\n})(HTMLImports );\n", 146 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\n// im ports\nvar rootDocument = scope.rootDocument;\nvar flags = scope.flags;\nvar isI E = scope.isIE;\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\n\n// importPars er\n// highlander object to manage parsing of imports\n// parses import related elements\n// and ensures proper parse order\n// parse order is enforced by crawl ing the tree and monitoring which elements\n// have been parsed; async parsing i s also supported.\n\n// highlander object for parsing a document tree\nvar impor tParser = {\n\n // parse selectors for main document elements\n documentSelect ors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n\n // parse selectors for import do cument elements\n importsSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']' ,\n 'link[rel=stylesheet]',\n 'style',\n 'script:not([type])',\n 'sc ript[type=\"text/javascript\"]'\n ].join(','),\n\n map: {\n link: 'parseLin k',\n script: 'parseScript',\n style: 'parseStyle'\n },\n\n dynamicEleme nts: [],\n\n // try to parse the next import in the tree\n parseNext: function () {\n var next = this.nextToParse();\n if (next) {\n this.parse(next );\n }\n },\n\n parse: function(elt) {\n if (this.isParsed(elt)) {\n flags.parse && console.log('[%s] is already parsed', elt.localName);\n re turn;\n }\n var fn = this[this.map[elt.localName]];\n if (fn) {\n this.markParsing(elt);\n fn.call(this, elt);\n }\n },\n\n parseDynamic : function(elt, quiet) {\n this.dynamicElements.push(elt);\n if (!quiet) { \n this.parseNext();\n }\n },\n\n // only 1 element may be parsed at a time; parsing is async so each\n // parsing implementation must inform the sys tem that parsing is complete\n // via markParsingComplete.\n // To prompt the system to parse the next element, parseNext should then be\n // called.\n // N ote, parseNext used to be included at the end of markParsingComplete, but\n // we must not do this so that, for example, we can (1) mark parsing complete \n / / then (2) fire an import load event, and then (3) parse the next resource.\n m arkParsing: function(elt) {\n flags.parse && console.log('parsing', elt);\n this.parsingElement = elt;\n },\n\n markParsingComplete: function(elt) {\n elt.__importParsed = true;\n this.markDynamicParsingComplete(elt);\n if (elt.__importElement) {\n elt.__importElement.__importParsed = true;\n this.markDynamicParsingComplete(elt.__importElement);\n }\n this.parsingE lement = null;\n flags.parse && console.log('completed', elt);\n },\n\n mar kDynamicParsingComplete: function(elt) {\n var i = this.dynamicElements.index Of(elt);\n if (i >= 0) {\n this.dynamicElements.splice(i, 1);\n }\n },\n\n parseImport: function(elt) {\n // TODO(sorvell): consider if there's a better way to do this;\n // expose an imports parsing hook; this is needed, for example, by the\n // CustomElements polyfill.\n if (HTMLImports.__imp ortsParsingHook) {\n HTMLImports.__importsParsingHook(elt);\n }\n if (elt.import) {\n elt.import.__importParsed = true;\n }\n this.markPar singComplete(elt);\n // fire load event\n if (elt.__resource && !elt.__err or) {\n elt.dispatchEvent(new CustomEvent('load', {bubbles: false})); \n } else {\n elt.dispatchEvent(new CustomEvent('error', {bubbles: false}) );\n }\n // TODO(sorvell): workaround for Safari addEventListener not work ing\n // for elements not in the main document.\n if (elt.__pending) {\n var fn;\n while (elt.__pending.length) {\n fn = elt.__pending.sh ift();\n if (fn) {\n fn({target: elt});\n }\n }\n }\n this.parseNext();\n },\n\n parseLink: function(linkElt) {\n if (nod eIsImport(linkElt)) {\n this.parseImport(linkElt);\n } else {\n // make href absolute\n linkElt.href = linkElt.href;\n this.parseGeneric( linkElt);\n }\n },\n\n parseStyle: function(elt) {\n // TODO(sorvell): s tyle element load event can just not fire so clone styles\n var src = elt;\n elt = cloneStyle(elt);\n elt.__importElement = src;\n this.parseGeneric (elt);\n },\n\n parseGeneric: function(elt) {\n this.trackElement(elt);\n this.addElementToDocument(elt);\n },\n\n rootImportForElement: function(elt) {\n var n = elt;\n while (n.ownerDocument.__importLink) {\n n = n.ow nerDocument.__importLink;\n }\n return n;\n },\n\n addElementToDocument: function(elt) {\n var port = this.rootImportForElement(elt.__importElement | | elt);\n var l = port.__insertedElements = port.__insertedElements || 0;\n var refNode = port.nextElementSibling;\n for (var i=0; i < l; i++) {\n refNode = refNode && refNode.nextElementSibling;\n }\n port.parentNode.in sertBefore(elt, refNode);\n },\n\n // tracks when a loadable element has loade d\n trackElement: function(elt, callback) {\n var self = this;\n var done = function(e) {\n if (callback) {\n callback(e);\n }\n se lf.markParsingComplete(elt);\n self.parseNext();\n };\n elt.addEventL istener('load', done);\n elt.addEventListener('error', done);\n\n // NOTE: IE does not fire \"load\" event for styles that have already loaded\n // Thi s is in violation of the spec, so we try our hardest to work around it\n if ( isIE && elt.localName === 'style') {\n var fakeLoad = false;\n // If t here's not @import in the textContent, assume it has loaded\n if (elt.textC ontent.indexOf('@import') == -1) {\n fakeLoad = true;\n // if we hav e a sheet, we have been parsed\n } else if (elt.sheet) {\n fakeLoad = true;\n var csr = elt.sheet.cssRules;\n var len = csr ? csr.leng th : 0;\n // search the rules for @import's\n for (var i = 0, r; ( i < len) && (r = csr[i]); i++) {\n if (r.type === CSSRule.IMPORT_RULE) {\n // if every @import has resolved, fake the load\n fake Load = fakeLoad && Boolean(r.styleSheet);\n }\n }\n }\n // dispatch a fake load event and continue parsing\n if (fakeLoad) {\n elt.dispatchEvent(new CustomEvent('load', {bubbles: false}));\n }\n }\n },\n\n // NOTE: execute scripts by injecting them and watching for the lo ad/error\n // event. Inline scripts are handled via dataURL's because browsers tend to\n // provide correct parsing errors in this case. If this has any compa tibility\n // issues, we can switch to injecting the inline script with textCon tent.\n // Scripts with dataURL's do not appear to generate load events and the refore\n // we assume they execute synchronously.\n parseScript: function(scri ptElt) {\n var script = document.createElement('script');\n script.__impor tElement = scriptElt;\n script.src = scriptElt.src ? scriptElt.src : \n generateScriptDataUrl(scriptElt);\n scope.currentScript = scriptElt;\n t his.trackElement(script, function(e) {\n script.parentNode.removeChild(scri pt);\n scope.currentScript = null; \n });\n this.addElementToDocumen t(script);\n },\n\n // determine the next element in the tree which should be parsed\n nextToParse: function() {\n this._mayParse = [];\n return !this. parsingElement && (this.nextToParseInDoc(rootDocument) || \n this.nextToP arseDynamic());\n },\n\n nextToParseInDoc: function(doc, link) {\n // use ` marParse` list to avoid looping into the same document again\n // since it co uld cause an iloop.\n if (doc && this._mayParse.indexOf(doc) < 0) {\n th is._mayParse.push(doc);\n var nodes = doc.querySelectorAll(this.parseSelect orsForNode(doc));\n for (var i=0, l=nodes.length, p=0, n; (i<l) && (n=nodes [i]); i++) {\n if (!this.isParsed(n)) {\n if (this.hasResource(n )) {\n return nodeIsImport(n) ? this.nextToParseInDoc(n.import, n) : n;\n } else {\n return;\n }\n }\n }\n }\n // all nodes have been parsed, ready to parse import, if any\n retur n link;\n },\n\n nextToParseDynamic: function() {\n return this.dynamicElem ents[0];\n },\n\n // return the set of parse selectors relevant for this node. \n parseSelectorsForNode: function(node) {\n var doc = node.ownerDocument || node;\n return doc === rootDocument ? this.documentSelectors :\n this .importsSelectors;\n },\n\n isParsed: function(node) {\n return node.__impo rtParsed;\n },\n\n needsDynamicParsing: function(elt) {\n return (this.dyna micElements.indexOf(elt) >= 0);\n },\n\n hasResource: function(node) {\n if (nodeIsImport(node) && (node.import === undefined)) {\n return false;\n }\n return true;\n }\n\n};\n\nfunction nodeIsImport(elt) {\n return (elt.l ocalName === 'link') && (elt.rel === IMPORT_LINK_TYPE);\n}\n\nfunction generateS criptDataUrl(script) {\n var scriptContent = generateScriptContent(script);\n return 'data:text/javascript;charset=utf-8,' + encodeURIComponent(scriptContent) ;\n}\n\nfunction generateScriptContent(script) {\n return script.textContent + generateSourceMapHint(script);\n}\n\n// calculate source map hint\nfunction gene rateSourceMapHint(script) {\n var moniker = script.__nodeUrl;\n if (!moniker) {\n moniker = script.ownerDocument.baseURI;\n // there could be more than one script this url\n var tag = '[' + Math.floor((Math.random()+1)*1000) + '] ';\n // TODO(sjmiles): Polymer hack, should be pluggable if we need to allow \n // this sort of thing\n var matches = script.textContent.match(/Polymer \\(['\"]([^'\"]*)/);\n tag = matches && matches[1] || tag;\n // tag the mo niker\n moniker += '/' + tag + '.js';\n }\n return '\\n//# sourceURL=' + mo niker + '\\n';\n}\n\n// style/stylesheet handling\n\n// clone style with proper path resolution for main document\n// NOTE: styles are the only elements that re quire direct path fixup.\nfunction cloneStyle(style) {\n var clone = style.owne rDocument.createElement('style');\n clone.textContent = style.textContent;\n p ath.resolveUrlsInStyle(clone);\n return clone;\n}\n\n// path fixup: style eleme nts in imports must be made relative to the main \n// document. We fixup url's i n url() and @import.\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\nvar CSS_IMP ORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n\nvar path = {\n\n resolv eUrlsInStyle: function(style) {\n var doc = style.ownerDocument;\n var res olver = doc.createElement('a');\n style.textContent = this.resolveUrlsInCssTe xt(style.textContent, resolver);\n return style; \n },\n\n resolveUrlsInCs sText: function(cssText, urlObj) {\n var r = this.replaceUrls(cssText, urlObj , CSS_URL_REGEXP);\n r = this.replaceUrls(r, urlObj, CSS_IMPORT_REGEXP);\n return r;\n },\n\n replaceUrls: function(text, urlObj, regexp) {\n return text.replace(regexp, function(m, pre, url, post) {\n var urlPath = url.repl ace(/[\"']/g, '');\n urlObj.href = urlPath;\n urlPath = urlObj.href;\n return pre + '\\'' + urlPath + '\\'' + post;\n }); \n }\n\n};\n\n// exports\nscope.parser = importParser;\nscope.path = path;\n\n})(HTMLImports);\n ",
147 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n (function(scope) {\n\nvar useNative = scope.useNative;\nvar flags = scope.flags;\nvar IMPORT_LINK_TYPE = ' import';\n\n// TODO(sorvell): SD polyfill intrusion\nvar mainDoc = window.Shadow DOMPolyfill ? \n ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\nif ( !useNative) {\n\n // imports\n var xhr = scope.xhr;\n var Loader = scope.Load er;\n var parser = scope.parser;\n\n // importer\n // highlander object to ma nage loading of imports\n\n // for any document, importer:\n // - loads any li nked import documents (with deduping)\n\n var importer = {\n documents: {},\ n // nodes to load in the mian document\n documentPreloadSelectors: 'link[ rel=' + IMPORT_LINK_TYPE + ']',\n // nodes to load in imports\n importsPre loadSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'\n ].join(','),\n loadNode: function(node) {\n importLoader.addNode(node);\n },\n / / load all loadable elements within the parent element\n loadSubtree: functio n(parent) {\n var nodes = this.marshalNodes(parent);\n // add these no des to loader's queue\n importLoader.addNodes(nodes);\n },\n marshalN odes: function(parent) {\n // all preloadable nodes in inDocument\n re turn parent.querySelectorAll(this.loadSelectorsForNode(parent));\n },\n // find the proper set of load selectors for a given node\n loadSelectorsForNod e: function(node) {\n var doc = node.ownerDocument || node;\n return d oc === mainDoc ? this.documentPreloadSelectors :\n this.importsPreloadS electors;\n },\n loaded: function(url, elt, resource, err, redirectedUrl) {\n flags.load && console.log('loaded', url, elt);\n // store generic resource\n // TODO(sorvell): fails for nodes inside <template>.content\n // see https://code.google.com/p/chromium/issues/detail?id=249381.\n elt .__resource = resource;\n elt.__error = err;\n if (isDocumentLink(elt) ) {\n var doc = this.documents[url];\n // if we've never seen a do cument at this url\n if (doc === undefined) {\n // generate an H TMLDocument from data\n doc = err ? null : makeDocument(resource, redir ectedUrl || url);\n if (doc) {\n doc.__importLink = elt;\n // note, we cannot use MO to detect parsed nodes because\n // SD polyfill does not report these as mutations.\n this.bootDocumen t(doc);\n }\n // cache document\n this.documents[url] = doc;\n }\n // don't store import record until we're actually lo aded\n // store document resource\n elt.import = doc;\n }\n parser.parseNext();\n },\n bootDocument: function(doc) {\n this.l oadSubtree(doc);\n this.observe(doc);\n parser.parseNext();\n },\n loadedAll: function() {\n parser.parseNext();\n }\n };\n\n // loade r singleton\n var importLoader = new Loader(importer.loaded.bind(importer), \n importer.loadedAll.bind(importer));\n\n function isDocumentLink(elt) {\n return isLinkRel(elt, IMPORT_LINK_TYPE);\n }\n\n function isLinkRel(elt, rel ) {\n return elt.localName === 'link' && elt.getAttribute('rel') === rel;\n }\n\n function isScript(elt) {\n return elt.localName === 'script';\n }\n\n function makeDocument(resource, url) {\n // create a new HTML document\n var doc = resource;\n if (!(doc instanceof Document)) {\n doc = documen t.implementation.createHTMLDocument(IMPORT_LINK_TYPE);\n }\n // cache the new document's source url\n doc._URL = url;\n // establish a relative path via <base>\n var base = doc.createElement('base');\n base.setAttribute('h ref', url);\n // add baseURI support to browsers (IE) that lack it.\n if ( !doc.baseURI) {\n doc.baseURI = url;\n }\n // ensure UTF-8 charset\n var meta = doc.createElement('meta');\n meta.setAttribute('charset', 'utf- 8');\n\n doc.head.appendChild(meta);\n doc.head.appendChild(base);\n // install HTML last as it may trigger CustomElement upgrades\n // TODO(sjmiles ): problem wrt to template boostrapping below,\n // template bootstrapping mu st (?) come before element upgrade\n // but we cannot bootstrap templates unt il they are in a document\n // which is too late\n if (!(resource instance of Document)) {\n // install html\n doc.body.innerHTML = resource;\n }\n // TODO(sorvell): ideally this code is not aware of Template polyfill,\ n // but for now the polyfill needs help to bootstrap these templates\n if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n HTMLTemp lateElement.bootstrap(doc);\n }\n return doc;\n }\n\n // Polyfill docume nt.baseURI for browsers without it.\n if (!document.baseURI) {\n var baseURI Descriptor = {\n get: function() {\n var base = document.querySelect or('base');\n return base ? base.href : window.location.href;\n },\n configurable: true\n };\n\n Object.defineProperty(document, 'baseURI ', baseURIDescriptor);\n Object.defineProperty(mainDoc, 'baseURI', baseURIDes criptor);\n }\n\n // IE shim for CustomEvent\n if (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = function(inType, dictionary) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(inType,\n dictionary.bubbles === false ? false : true,\n dictionary.cancela ble === false ? false : true,\n dictionary.detail);\n return e;\n };\n }\n\n} else {\n // do nothing if using native imports\n var importer = {};\n}\n\n// exports\nscope.importer = importer;\nscope.IMPORT_LINK_TYPE = IM PORT_LINK_TYPE;\nscope.importLoader = importLoader;\n\n\n})(window.HTMLImports); \n", 147 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n (function(scope) {\n\n// i mports\nvar useNative = scope.useNative;\nvar flags = scope.flags;\nvar IMPORT_L INK_TYPE = scope.IMPORT_LINK_TYPE;\n\nif (!useNative) {\n\n // imports\n var r ootDocument = scope.rootDocument;\n var xhr = scope.xhr;\n var Loader = scope. Loader;\n var parser = scope.parser;\n\n // importer\n // highlander object t o manage loading of imports\n\n // for any document, importer:\n // - loads an y linked import documents (with deduping)\n\n var importer = {\n\n documents : {},\n \n // nodes to load in the mian document\n documentPreloadSelec tors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n \n // nodes to load in impor ts\n importsPreloadSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'\n ].join(','),\n \n loadNode: function(node) {\n importLoader.addNo de(node);\n },\n \n // load all loadable elements within the parent ele ment\n loadSubtree: function(parent) {\n var nodes = this.marshalNodes(p arent);\n // add these nodes to loader's queue\n importLoader.addNodes (nodes);\n },\n \n marshalNodes: function(parent) {\n // all prelo adable nodes in inDocument\n return parent.querySelectorAll(this.loadSelect orsForNode(parent));\n },\n \n // find the proper set of load selectors for a given node\n loadSelectorsForNode: function(node) {\n var doc = n ode.ownerDocument || node;\n return doc === rootDocument ? this.documentPre loadSelectors :\n this.importsPreloadSelectors;\n },\n \n load ed: function(url, elt, resource, err, redirectedUrl) {\n flags.load && cons ole.log('loaded', url, elt);\n // store generic resource\n // TODO(sor vell): fails for nodes inside <template>.content\n // see https://code.goog le.com/p/chromium/issues/detail?id=249381.\n elt.__resource = resource;\n elt.__error = err;\n if (isDocumentLink(elt)) {\n var doc = this .documents[url];\n // if we've never seen a document at this url\n if (doc === undefined) {\n // generate an HTMLDocument from data\n doc = err ? null : makeDocument(resource, redirectedUrl || url);\n if (doc) {\n doc.__importLink = elt;\n // note, we canno t use MO to detect parsed nodes because\n // SD polyfill does not rep ort these as mutations.\n this.bootDocument(doc);\n }\n // cache document\n this.documents[url] = doc;\n }\n // don't store import record until we're actually loaded\n // store docu ment resource\n elt.import = doc;\n }\n parser.parseNext();\n },\n \n bootDocument: function(doc) {\n this.loadSubtree(doc);\n this.observe(doc);\n parser.parseNext();\n },\n \n loadedAll: f unction() {\n parser.parseNext();\n }\n\n };\n\n // loader singleton\n var importLoader = new Loader(importer.loaded.bind(importer), \n importer .loadedAll.bind(importer));\n\n function isDocumentLink(elt) {\n return isLi nkRel(elt, IMPORT_LINK_TYPE);\n }\n\n function isLinkRel(elt, rel) {\n retu rn elt.localName === 'link' && elt.getAttribute('rel') === rel;\n }\n\n functi on isScript(elt) {\n return elt.localName === 'script';\n }\n\n function ma keDocument(resource, url) {\n // create a new HTML document\n var doc = re source;\n if (!(doc instanceof Document)) {\n doc = document.implementat ion.createHTMLDocument(IMPORT_LINK_TYPE);\n }\n // cache the new document' s source url\n doc._URL = url;\n // establish a relative path via <base>\n var base = doc.createElement('base');\n base.setAttribute('href', url);\n // add baseURI support to browsers (IE) that lack it.\n if (!doc.baseURI) {\n doc.baseURI = url;\n }\n // ensure UTF-8 charset\n var meta = doc.createElement('meta');\n meta.setAttribute('charset', 'utf-8');\n\n d oc.head.appendChild(meta);\n doc.head.appendChild(base);\n // install HTML last as it may trigger CustomElement upgrades\n // TODO(sjmiles): problem wr t to template boostrapping below,\n // template bootstrapping must (?) come b efore element upgrade\n // but we cannot bootstrap templates until they are i n a document\n // which is too late\n if (!(resource instanceof Document)) {\n // install html\n doc.body.innerHTML = resource;\n }\n // T ODO(sorvell): ideally this code is not aware of Template polyfill,\n // but f or now the polyfill needs help to bootstrap these templates\n if (window.HTML TemplateElement && HTMLTemplateElement.bootstrap) {\n HTMLTemplateElement.b ootstrap(doc);\n }\n return doc;\n }\n\n // Polyfill document.baseURI fo r browsers without it.\n if (!document.baseURI) {\n var baseURIDescriptor = {\n get: function() {\n var base = document.querySelector('base');\n return base ? base.href : window.location.href;\n },\n configu rable: true\n };\n\n Object.defineProperty(document, 'baseURI', baseURIDes criptor);\n Object.defineProperty(rootDocument, 'baseURI', baseURIDescriptor) ;\n }\n\n // IE shim for CustomEvent\n if (typeof window.CustomEvent !== 'fun ction') {\n window.CustomEvent = function(inType, dictionary) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(inType,\n di ctionary.bubbles === false ? false : true,\n dictionary.cancelable === false ? false : true,\n dictionary.detail);\n return e;\n };\n }\n\n} else {\n // do nothing if using native imports\n var importer = {};\n }\n\n// exports\nscope.importer = importer;\nscope.IMPORT_LINK_TYPE = IMPORT_LIN K_TYPE;\nscope.importLoader = importLoader;\n\n})(window.HTMLImports);\n",
148 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope){\n\nvar IM PORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\nvar importSelector = 'link[rel=' + IMP ORT_LINK_TYPE + ']';\nvar importer = scope.importer;\nvar parser = scope.parser; \n\n// we track mutations for addedNodes, looking for imports\nfunction handler( mutations) {\n for (var i=0, l=mutations.length, m; (i<l) && (m=mutations[i]); i++) {\n if (m.type === 'childList' && m.addedNodes.length) {\n addedNod es(m.addedNodes);\n }\n }\n}\n\n// find loadable elements and add them to th e importer\nfunction addedNodes(nodes) {\n var owner;\n for (var i=0, l=nodes. length, n; (i<l) && (n=nodes[i]); i++) {\n owner = owner || n.ownerDocument;\ n if (shouldLoadNode(n)) {\n importer.loadNode(n);\n }\n if (n.chi ldren && n.children.length) {\n addedNodes(n.children);\n }\n }\n // T ODO(sorvell): This is not the right approach here. We shouldn't need to\n // in validate parsing when an element is added. Disabling this code \n // until a be tter approach is found.\n /*\n if (owner) {\n parser.invalidateParse(owner) ;\n }\n */\n}\n\nfunction shouldLoadNode(node) {\n return (node.nodeType === 1) && matches.call(node,\n importer.loadSelectorsForNode(node));\n}\n\n// x -plat matches\nvar matches = HTMLElement.prototype.matches || \n HTMLElement. prototype.matchesSelector || \n HTMLElement.prototype.webkitMatchesSelector | |\n HTMLElement.prototype.mozMatchesSelector ||\n HTMLElement.prototype.ms MatchesSelector;\n\nvar observer = new MutationObserver(handler);\n\n// observe the given root for loadable elements\nfunction observe(root) {\n observer.obser ve(root, {childList: true, subtree: true});\n}\n\n// exports\n// TODO(sorvell): factor so can put on scope\nscope.observe = observe;\nimporter.observe = observe ;\n\n})(HTMLImports);\n", 148 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope){\n\n// imp orts\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\nvar importer = scope.impor ter;\nvar parser = scope.parser;\n\nvar importSelector = 'link[rel=' + IMPORT_LI NK_TYPE + ']';\n\n\n// we track mutations for addedNodes, looking for imports\nf unction handler(mutations) {\n for (var i=0, l=mutations.length, m; (i<l) && (m =mutations[i]); i++) {\n if (m.type === 'childList' && m.addedNodes.length) { \n addedNodes(m.addedNodes);\n }\n }\n}\n\n// find loadable elements an d add them to the importer\n// IFF the owning document has already parsed, then parsable elements\n// need to be marked for dynamic parsing.\nfunction addedNode s(nodes) {\n var owner, parsed;\n for (var i=0, l=nodes.length, n, loading; (i <l) && (n=nodes[i]); i++) {\n if (!owner) {\n owner = n.ownerDocument;\n parsed = parser.isParsed(owner);\n }\n // note: the act of loading k icks the parser, so we use parseDynamic's\n // 2nd argument to control if thi s added node needs to kick the parser.\n loading = shouldLoadNode(n);\n if (loading) {\n importer.loadNode(n);\n }\n if (shouldParseNode(n) && parsed) {\n parser.parseDynamic(n, loading);\n }\n if (n.children && n.children.length) {\n addedNodes(n.children);\n }\n }\n}\n\nfunction s houldLoadNode(node) {\n return (node.nodeType === 1) && matches.call(node,\n importer.loadSelectorsForNode(node));\n}\n\nfunction shouldParseNode(node) {\ n return (node.nodeType === 1) && matches.call(node,\n parser.parseSelecto rsForNode(node)); \n}\n\n// x-plat matches\nvar matches = HTMLElement.prototype .matches || \n HTMLElement.prototype.matchesSelector || \n HTMLElement.pro totype.webkitMatchesSelector ||\n HTMLElement.prototype.mozMatchesSelector || \n HTMLElement.prototype.msMatchesSelector;\n\nvar observer = new MutationObs erver(handler);\n\n// observe the given root for loadable elements\nfunction obs erve(root) {\n observer.observe(root, {childList: true, subtree: true});\n}\n\n // exports\n// TODO(sorvell): factor so can put on scope\nscope.observe = observ e;\nimporter.observe = observe;\n\n})(HTMLImports);\n",
149 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(){\n\n// bootstra p\n\n// TODO(sorvell): SD polyfill intrusion\nvar doc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\n// no ne ed to bootstrap the polyfill when native imports is available.\nif (!HTMLImports .useNative) {\n function bootstrap() {\n HTMLImports.importer.bootDocument(d oc);\n }\n \n // TODO(sorvell): SD polyfill does *not* generate mutations f or nodes added\n // by the parser. For this reason, we must wait until the dom exists to \n // bootstrap.\n if (document.readyState === 'complete' ||\n (document.readyState === 'interactive' && !window.attachEvent)) {\n bootstrap ();\n } else {\n document.addEventListener('DOMContentLoaded', bootstrap);\n }\n}\n\n})();\n", 149 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(){\n\n// bootstra p\n\n// TODO(sorvell): SD polyfill intrusion\nvar doc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\n// no ne ed to bootstrap the polyfill when native imports is available.\nif (!HTMLImports .useNative) {\n function bootstrap() {\n HTMLImports.importer.bootDocument(d oc);\n }\n \n // TODO(sorvell): SD polyfill does *not* generate mutations f or nodes added\n // by the parser. For this reason, we must wait until the dom exists to \n // bootstrap.\n if (document.readyState === 'complete' ||\n (document.readyState === 'interactive' && !window.attachEvent)) {\n bootstrap ();\n } else {\n document.addEventListener('DOMContentLoaded', bootstrap);\n }\n}\n\n})();\n",
150 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nwindow.CustomElements = win dow.CustomElements || {flags:{}};", 150 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nwindow.CustomElements = win dow.CustomElements || {flags:{}};",
151 "/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve d.\r\n * This code may only be used under the BSD style license found at http:// polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as part of the polymer project is also\r\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n(functi on(scope){\r\n\r\nvar logFlags = window.logFlags || {};\r\nvar IMPORT_LINK_TYPE = window.HTMLImports ? HTMLImports.IMPORT_LINK_TYPE : 'none';\r\n\r\n// walk the subtree rooted at node, applying 'find(element, data)' function\r\n// to each e lement\r\n// if 'find' returns true for 'element', do not search element's subtr ee\r\nfunction findAll(node, find, data) {\r\n var e = node.firstElementChild;\ r\n if (!e) {\r\n e = node.firstChild;\r\n while (e && e.nodeType !== Nod e.ELEMENT_NODE) {\r\n e = e.nextSibling;\r\n }\r\n }\r\n while (e) {\r \n if (find(e, data) !== true) {\r\n findAll(e, find, data);\r\n }\r\ n e = e.nextElementSibling;\r\n }\r\n return null;\r\n}\r\n\r\n// walk all shadowRoots on a given node.\r\nfunction forRoots(node, cb) {\r\n var root = no de.shadowRoot;\r\n while(root) {\r\n forSubtree(root, cb);\r\n root = roo t.olderShadowRoot;\r\n }\r\n}\r\n\r\n// walk the subtree rooted at node, includ ing descent into shadow-roots,\r\n// applying 'cb' to each element\r\nfunction f orSubtree(node, cb) {\r\n //logFlags.dom && node.childNodes && node.childNodes. length && console.group('subTree: ', node);\r\n findAll(node, function(e) {\r\n if (cb(e)) {\r\n return true;\r\n }\r\n forRoots(e, cb);\r\n }); \r\n forRoots(node, cb);\r\n //logFlags.dom && node.childNodes && node.childNo des.length && console.groupEnd();\r\n}\r\n\r\n// manage lifecycle on added node\ r\nfunction added(node) {\r\n if (upgrade(node)) {\r\n insertedNode(node);\r \n return true;\r\n }\r\n inserted(node);\r\n}\r\n\r\n// manage lifecycle o n added node's subtree only\r\nfunction addedSubtree(node) {\r\n forSubtree(nod e, function(e) {\r\n if (added(e)) {\r\n return true;\r\n }\r\n });\ r\n}\r\n\r\n// manage lifecycle on added node and it's subtree\r\nfunction added Node(node) {\r\n return added(node) || addedSubtree(node);\r\n}\r\n\r\n// upgra de custom elements at node, if applicable\r\nfunction upgrade(node) {\r\n if (! node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) {\r\n var type = no de.getAttribute('is') || node.localName;\r\n var definition = scope.registry[ type];\r\n if (definition) {\r\n logFlags.dom && console.group('upgrade: ', node.localName);\r\n scope.upgrade(node);\r\n logFlags.dom && conso le.groupEnd();\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nfunction insert edNode(node) {\r\n inserted(node);\r\n if (inDocument(node)) {\r\n forSubtr ee(node, function(e) {\r\n inserted(e);\r\n });\r\n }\r\n}\r\n\r\n// TO DO(sorvell): on platforms without MutationObserver, mutations may not be\r\n// r eliable and therefore attached/detached are not reliable.\r\n// To make these ca llbacks less likely to fail, we defer all inserts and removes\r\n// to give a ch ance for elements to be inserted into dom.\r\n// This ensures attachedCallback f ires for elements that are created and\r\n// immediately added to dom.\r\nvar ha sPolyfillMutations = (!window.MutationObserver ||\r\n (window.MutationObserve r === window.JsMutationObserver));\r\nscope.hasPolyfillMutations = hasPolyfillMu tations;\r\n\r\nvar isPendingMutations = false;\r\nvar pendingMutations = [];\r\ nfunction deferMutation(fn) {\r\n pendingMutations.push(fn);\r\n if (!isPendin gMutations) {\r\n isPendingMutations = true;\r\n var async = (window.Platf orm && window.Platform.endOfMicrotask) ||\r\n setTimeout;\r\n async(ta keMutations);\r\n }\r\n}\r\n\r\nfunction takeMutations() {\r\n isPendingMutati ons = false;\r\n var $p = pendingMutations;\r\n for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {\r\n p();\r\n }\r\n pendingMutations = [];\r\n}\r \n\r\nfunction inserted(element) {\r\n if (hasPolyfillMutations) {\r\n defer Mutation(function() {\r\n _inserted(element);\r\n });\r\n } else {\r\n _inserted(element);\r\n }\r\n}\r\n\r\n// TODO(sjmiles): if there are descent s into trees that can never have inDocument(*) true, fix this\r\nfunction _inser ted(element) {\r\n // TODO(sjmiles): it's possible we were inserted and removed in the space\r\n // of one microtask, in which case we won't be 'inDocument' h ere\r\n // But there are other cases where we are testing for inserted without\ r\n // specific knowledge of mutations, and must test 'inDocument' to determine \r\n // whether to call inserted\r\n // If we can factor these cases into sepa rate code paths we can have\r\n // better diagnostics.\r\n // TODO(sjmiles): w hen logging, do work on all custom elements so we can\r\n // track behavior eve n when callbacks not defined\r\n //console.log('inserted: ', element.localName) ;\r\n if (element.attachedCallback || element.detachedCallback || (element.__up graded__ && logFlags.dom)) {\r\n logFlags.dom && console.group('inserted:', e lement.localName);\r\n if (inDocument(element)) {\r\n element.__inserted = (element.__inserted || 0) + 1;\r\n // if we are in a 'removed' state, bl untly adjust to an 'inserted' state\r\n if (element.__inserted < 1) {\r\n element.__inserted = 1;\r\n }\r\n // if we are 'over inserted', squelch the callback\r\n if (element.__inserted > 1) {\r\n logFlags. dom && console.warn('inserted:', element.localName,\r\n 'insert/remove count:', element.__inserted)\r\n } else if (element.attachedCallback) {\r\n logFlags.dom && console.log('inserted:', element.localName);\r\n element.attachedCallback();\r\n }\r\n }\r\n logFlags.dom && console.g roupEnd();\r\n }\r\n}\r\n\r\nfunction removedNode(node) {\r\n removed(node);\r \n forSubtree(node, function(e) {\r\n removed(e);\r\n });\r\n}\r\n\r\nfunct ion removed(element) {\r\n if (hasPolyfillMutations) {\r\n deferMutation(fun ction() {\r\n _removed(element);\r\n });\r\n } else {\r\n _removed(e lement);\r\n }\r\n}\r\n\r\nfunction _removed(element) {\r\n // TODO(sjmiles): temporary: do work on all custom elements so we can track\r\n // behavior even when callbacks not defined\r\n if (element.attachedCallback || element.detached Callback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlags.dom && con sole.group('removed:', element.localName);\r\n if (!inDocument(element)) {\r\ n element.__inserted = (element.__inserted || 0) - 1;\r\n // if we are in a 'inserted' state, bluntly adjust to an 'removed' state\r\n if (elemen t.__inserted > 0) {\r\n element.__inserted = 0;\r\n }\r\n // if we are 'over removed', squelch the callback\r\n if (element.__inserted < 0 ) {\r\n logFlags.dom && console.warn('removed:', element.localName,\r\n 'insert/remove count:', element.__inserted)\r\n } else if (elemen t.detachedCallback) {\r\n element.detachedCallback();\r\n }\r\n } \r\n logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\n// SD polyfill in trustion due mainly to the fact that 'document'\r\n// is not entirely wrapped\r\ nfunction wrapIfNeeded(node) {\r\n return window.ShadowDOMPolyfill ? ShadowDOMP olyfill.wrapIfNeeded(node)\r\n : node;\r\n}\r\n\r\nfunction inDocument(elem ent) {\r\n var p = element;\r\n var doc = wrapIfNeeded(document);\r\n while ( p) {\r\n if (p == doc) {\r\n return true;\r\n }\r\n p = p.parentNo de || p.host;\r\n }\r\n}\r\n\r\nfunction watchShadow(node) {\r\n if (node.shad owRoot && !node.shadowRoot.__watched) {\r\n logFlags.dom && console.log('watc hing shadow-root for: ', node.localName);\r\n // watch all unwatched roots... \r\n var root = node.shadowRoot;\r\n while (root) {\r\n watchRoot(roo t);\r\n root = root.olderShadowRoot;\r\n }\r\n }\r\n}\r\n\r\nfunction w atchRoot(root) {\r\n observe(root);\r\n}\r\n\r\nfunction handler(mutations) {\r \n //\r\n if (logFlags.dom) {\r\n var mx = mutations[0];\r\n if (mx && m x.type === 'childList' && mx.addedNodes) {\r\n if (mx.addedNodes) {\r\n var d = mx.addedNodes[0];\r\n while (d && d !== document && !d. host) {\r\n d = d.parentNode;\r\n }\r\n var u = d & & (d.URL || d._URL || (d.host && d.host.localName)) || '';\r\n u = u.sp lit('/?').shift().split('/').pop();\r\n }\r\n }\r\n console.group(' mutations (%d) [%s]', mutations.length, u || '');\r\n }\r\n //\r\n mutations. forEach(function(mx) {\r\n //logFlags.dom && console.group('mutation');\r\n if (mx.type === 'childList') {\r\n forEach(mx.addedNodes, function(n) {\r \n //logFlags.dom && console.log(n.localName);\r\n if (!n.localNam e) {\r\n return;\r\n }\r\n // nodes added may need lifecy cle management\r\n addedNode(n);\r\n });\r\n // removed nodes m ay need lifecycle management\r\n forEach(mx.removedNodes, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n if (!n.localName) {\r\n return;\r\n }\r\n removedNode(n);\r\n });\r\n }\r\n //logFlags.dom && console.groupEnd();\r\n });\r\n logFlags.dom && console.groupEnd();\r\n};\r\n\r\nfunction takeRecords(node) {\r\n // If the op tional node is not supplied, assume we mean the whole document.\r\n if (!node) node = wrapIfNeeded(document);\r\n\r\n // Find the root of the tree, which will be an Document or ShadowRoot.\r\n while (node.parentNode) {\r\n node = node .parentNode;\r\n }\r\n\r\n var observer = node.__observer;\r\n if (observer) {\r\n handler(observer.takeRecords());\r\n takeMutations();\r\n }\r\n}\r\ n\r\nvar forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);\r \n\r\nfunction observe(inRoot) {\r\n if (inRoot.__observer) return;\r\n\r\n // For each ShadowRoot, we create a new MutationObserver, so the root can be\r\n // garbage collected once all references to the `inRoot` node are gone.\r\n var observer = new MutationObserver(handler);\r\n observer.observe(inRoot, {childL ist: true, subtree: true});\r\n inRoot.__observer = observer;\r\n}\r\n\r\nfunct ion observeDocument(doc) {\r\n observe(doc);\r\n}\r\n\r\nfunction upgradeDocume nt(doc) {\r\n logFlags.dom && console.group('upgradeDocument: ', (doc.baseURI). split('/').pop());\r\n addedNode(doc);\r\n logFlags.dom && console.groupEnd(); \r\n}\r\n\r\n/*\r\nThis method is intended to be called when the document tree ( including imports)\r\nhas pending custom elements to upgrade. It can be called m ultiple times and \r\nshould do nothing if no elements are in need of upgrade.\r \n\r\nNote that the import tree can consume itself and therefore special care\r\ nmust be taken to avoid recursion.\r\n*/\r\nvar upgradedDocuments;\r\nfunction u pgradeDocumentTree(doc) {\r\n upgradedDocuments = [];\r\n _upgradeDocumentTree (doc);\r\n upgradedDocuments = null;\r\n}\r\n\r\n\r\nfunction _upgradeDocumentT ree(doc) {\r\n doc = wrapIfNeeded(doc);\r\n if (upgradedDocuments.indexOf(doc) >= 0) {\r\n return;\r\n }\r\n upgradedDocuments.push(doc);\r\n //console. log('upgradeDocumentTree: ', (doc.baseURI).split('/').pop());\r\n // upgrade co ntained imported documents\r\n var imports = doc.querySelectorAll('link[rel=' + IMPORT_LINK_TYPE + ']');\r\n for (var i=0, l=imports.length, n; (i<l) && (n=im ports[i]); i++) {\r\n if (n.import && n.import.__parsed) {\r\n _upgradeD ocumentTree(n.import);\r\n }\r\n }\r\n upgradeDocument(doc);\r\n}\r\n\r\n// exports\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\r\nscope.watchShadow = wa tchShadow;\r\nscope.upgradeDocumentTree = upgradeDocumentTree;\r\nscope.upgradeA ll = addedNode;\r\nscope.upgradeSubtree = addedSubtree;\r\nscope.insertedNode = insertedNode;\r\n\r\nscope.observeDocument = observeDocument;\r\nscope.upgradeDo cument = upgradeDocument;\r\n\r\nscope.takeRecords = takeRecords;\r\n\r\n})(wind ow.CustomElements);\r\n", 151 "/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve d.\r\n * This code may only be used under the BSD style license found at http:// polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as part of the polymer project is also\r\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n(functi on(scope){\r\n\r\nvar logFlags = window.logFlags || {};\r\nvar IMPORT_LINK_TYPE = window.HTMLImports ? HTMLImports.IMPORT_LINK_TYPE : 'none';\r\n\r\n// walk the subtree rooted at node, applying 'find(element, data)' function\r\n// to each e lement\r\n// if 'find' returns true for 'element', do not search element's subtr ee\r\nfunction findAll(node, find, data) {\r\n var e = node.firstElementChild;\ r\n if (!e) {\r\n e = node.firstChild;\r\n while (e && e.nodeType !== Nod e.ELEMENT_NODE) {\r\n e = e.nextSibling;\r\n }\r\n }\r\n while (e) {\r \n if (find(e, data) !== true) {\r\n findAll(e, find, data);\r\n }\r\ n e = e.nextElementSibling;\r\n }\r\n return null;\r\n}\r\n\r\n// walk all shadowRoots on a given node.\r\nfunction forRoots(node, cb) {\r\n var root = no de.shadowRoot;\r\n while(root) {\r\n forSubtree(root, cb);\r\n root = roo t.olderShadowRoot;\r\n }\r\n}\r\n\r\n// walk the subtree rooted at node, includ ing descent into shadow-roots,\r\n// applying 'cb' to each element\r\nfunction f orSubtree(node, cb) {\r\n //logFlags.dom && node.childNodes && node.childNodes. length && console.group('subTree: ', node);\r\n findAll(node, function(e) {\r\n if (cb(e)) {\r\n return true;\r\n }\r\n forRoots(e, cb);\r\n }); \r\n forRoots(node, cb);\r\n //logFlags.dom && node.childNodes && node.childNo des.length && console.groupEnd();\r\n}\r\n\r\n// manage lifecycle on added node\ r\nfunction added(node) {\r\n if (upgrade(node)) {\r\n insertedNode(node);\r \n return true;\r\n }\r\n inserted(node);\r\n}\r\n\r\n// manage lifecycle o n added node's subtree only\r\nfunction addedSubtree(node) {\r\n forSubtree(nod e, function(e) {\r\n if (added(e)) {\r\n return true;\r\n }\r\n });\ r\n}\r\n\r\n// manage lifecycle on added node and it's subtree\r\nfunction added Node(node) {\r\n return added(node) || addedSubtree(node);\r\n}\r\n\r\n// upgra de custom elements at node, if applicable\r\nfunction upgrade(node) {\r\n if (! node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) {\r\n var type = no de.getAttribute('is') || node.localName;\r\n var definition = scope.registry[ type];\r\n if (definition) {\r\n logFlags.dom && console.group('upgrade: ', node.localName);\r\n scope.upgrade(node);\r\n logFlags.dom && conso le.groupEnd();\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nfunction insert edNode(node) {\r\n inserted(node);\r\n if (inDocument(node)) {\r\n forSubtr ee(node, function(e) {\r\n inserted(e);\r\n });\r\n }\r\n}\r\n\r\n// TO DO(sorvell): on platforms without MutationObserver, mutations may not be\r\n// r eliable and therefore attached/detached are not reliable.\r\n// To make these ca llbacks less likely to fail, we defer all inserts and removes\r\n// to give a ch ance for elements to be inserted into dom.\r\n// This ensures attachedCallback f ires for elements that are created and\r\n// immediately added to dom.\r\nvar ha sPolyfillMutations = (!window.MutationObserver ||\r\n (window.MutationObserve r === window.JsMutationObserver));\r\nscope.hasPolyfillMutations = hasPolyfillMu tations;\r\n\r\nvar isPendingMutations = false;\r\nvar pendingMutations = [];\r\ nfunction deferMutation(fn) {\r\n pendingMutations.push(fn);\r\n if (!isPendin gMutations) {\r\n isPendingMutations = true;\r\n var async = (window.Platf orm && window.Platform.endOfMicrotask) ||\r\n setTimeout;\r\n async(ta keMutations);\r\n }\r\n}\r\n\r\nfunction takeMutations() {\r\n isPendingMutati ons = false;\r\n var $p = pendingMutations;\r\n for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {\r\n p();\r\n }\r\n pendingMutations = [];\r\n}\r \n\r\nfunction inserted(element) {\r\n if (hasPolyfillMutations) {\r\n defer Mutation(function() {\r\n _inserted(element);\r\n });\r\n } else {\r\n _inserted(element);\r\n }\r\n}\r\n\r\n// TODO(sjmiles): if there are descent s into trees that can never have inDocument(*) true, fix this\r\nfunction _inser ted(element) {\r\n // TODO(sjmiles): it's possible we were inserted and removed in the space\r\n // of one microtask, in which case we won't be 'inDocument' h ere\r\n // But there are other cases where we are testing for inserted without\ r\n // specific knowledge of mutations, and must test 'inDocument' to determine \r\n // whether to call inserted\r\n // If we can factor these cases into sepa rate code paths we can have\r\n // better diagnostics.\r\n // TODO(sjmiles): w hen logging, do work on all custom elements so we can\r\n // track behavior eve n when callbacks not defined\r\n //console.log('inserted: ', element.localName) ;\r\n if (element.attachedCallback || element.detachedCallback || (element.__up graded__ && logFlags.dom)) {\r\n logFlags.dom && console.group('inserted:', e lement.localName);\r\n if (inDocument(element)) {\r\n element.__inserted = (element.__inserted || 0) + 1;\r\n // if we are in a 'removed' state, bl untly adjust to an 'inserted' state\r\n if (element.__inserted < 1) {\r\n element.__inserted = 1;\r\n }\r\n // if we are 'over inserted', squelch the callback\r\n if (element.__inserted > 1) {\r\n logFlags. dom && console.warn('inserted:', element.localName,\r\n 'insert/remove count:', element.__inserted)\r\n } else if (element.attachedCallback) {\r\n logFlags.dom && console.log('inserted:', element.localName);\r\n element.attachedCallback();\r\n }\r\n }\r\n logFlags.dom && console.g roupEnd();\r\n }\r\n}\r\n\r\nfunction removedNode(node) {\r\n removed(node);\r \n forSubtree(node, function(e) {\r\n removed(e);\r\n });\r\n}\r\n\r\nfunct ion removed(element) {\r\n if (hasPolyfillMutations) {\r\n deferMutation(fun ction() {\r\n _removed(element);\r\n });\r\n } else {\r\n _removed(e lement);\r\n }\r\n}\r\n\r\nfunction _removed(element) {\r\n // TODO(sjmiles): temporary: do work on all custom elements so we can track\r\n // behavior even when callbacks not defined\r\n if (element.attachedCallback || element.detached Callback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlags.dom && con sole.group('removed:', element.localName);\r\n if (!inDocument(element)) {\r\ n element.__inserted = (element.__inserted || 0) - 1;\r\n // if we are in a 'inserted' state, bluntly adjust to an 'removed' state\r\n if (elemen t.__inserted > 0) {\r\n element.__inserted = 0;\r\n }\r\n // if we are 'over removed', squelch the callback\r\n if (element.__inserted < 0 ) {\r\n logFlags.dom && console.warn('removed:', element.localName,\r\n 'insert/remove count:', element.__inserted)\r\n } else if (elemen t.detachedCallback) {\r\n element.detachedCallback();\r\n }\r\n } \r\n logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\n// SD polyfill in trustion due mainly to the fact that 'document'\r\n// is not entirely wrapped\r\ nfunction wrapIfNeeded(node) {\r\n return window.ShadowDOMPolyfill ? ShadowDOMP olyfill.wrapIfNeeded(node)\r\n : node;\r\n}\r\n\r\nfunction inDocument(elem ent) {\r\n var p = element;\r\n var doc = wrapIfNeeded(document);\r\n while ( p) {\r\n if (p == doc) {\r\n return true;\r\n }\r\n p = p.parentNo de || p.host;\r\n }\r\n}\r\n\r\nfunction watchShadow(node) {\r\n if (node.shad owRoot && !node.shadowRoot.__watched) {\r\n logFlags.dom && console.log('watc hing shadow-root for: ', node.localName);\r\n // watch all unwatched roots... \r\n var root = node.shadowRoot;\r\n while (root) {\r\n watchRoot(roo t);\r\n root = root.olderShadowRoot;\r\n }\r\n }\r\n}\r\n\r\nfunction w atchRoot(root) {\r\n observe(root);\r\n}\r\n\r\nfunction handler(mutations) {\r \n //\r\n if (logFlags.dom) {\r\n var mx = mutations[0];\r\n if (mx && m x.type === 'childList' && mx.addedNodes) {\r\n if (mx.addedNodes) {\r\n var d = mx.addedNodes[0];\r\n while (d && d !== document && !d. host) {\r\n d = d.parentNode;\r\n }\r\n var u = d & & (d.URL || d._URL || (d.host && d.host.localName)) || '';\r\n u = u.sp lit('/?').shift().split('/').pop();\r\n }\r\n }\r\n console.group(' mutations (%d) [%s]', mutations.length, u || '');\r\n }\r\n //\r\n mutations. forEach(function(mx) {\r\n //logFlags.dom && console.group('mutation');\r\n if (mx.type === 'childList') {\r\n forEach(mx.addedNodes, function(n) {\r \n //logFlags.dom && console.log(n.localName);\r\n if (!n.localNam e) {\r\n return;\r\n }\r\n // nodes added may need lifecy cle management\r\n addedNode(n);\r\n });\r\n // removed nodes m ay need lifecycle management\r\n forEach(mx.removedNodes, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n if (!n.localName) {\r\n return;\r\n }\r\n removedNode(n);\r\n });\r\n }\r\n //logFlags.dom && console.groupEnd();\r\n });\r\n logFlags.dom && console.groupEnd();\r\n};\r\n\r\nfunction takeRecords(node) {\r\n // If the op tional node is not supplied, assume we mean the whole document.\r\n if (!node) node = wrapIfNeeded(document);\r\n\r\n // Find the root of the tree, which will be an Document or ShadowRoot.\r\n while (node.parentNode) {\r\n node = node .parentNode;\r\n }\r\n\r\n var observer = node.__observer;\r\n if (observer) {\r\n handler(observer.takeRecords());\r\n takeMutations();\r\n }\r\n}\r\ n\r\nvar forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);\r \n\r\nfunction observe(inRoot) {\r\n if (inRoot.__observer) return;\r\n\r\n // For each ShadowRoot, we create a new MutationObserver, so the root can be\r\n // garbage collected once all references to the `inRoot` node are gone.\r\n var observer = new MutationObserver(handler);\r\n observer.observe(inRoot, {childL ist: true, subtree: true});\r\n inRoot.__observer = observer;\r\n}\r\n\r\nfunct ion observeDocument(doc) {\r\n observe(doc);\r\n}\r\n\r\nfunction upgradeDocume nt(doc) {\r\n logFlags.dom && console.group('upgradeDocument: ', (doc.baseURI). split('/').pop());\r\n addedNode(doc);\r\n logFlags.dom && console.groupEnd(); \r\n}\r\n\r\n/*\r\nThis method is intended to be called when the document tree ( including imports)\r\nhas pending custom elements to upgrade. It can be called m ultiple times and \r\nshould do nothing if no elements are in need of upgrade.\r \n\r\nNote that the import tree can consume itself and therefore special care\r\ nmust be taken to avoid recursion.\r\n*/\r\nvar upgradedDocuments;\r\nfunction u pgradeDocumentTree(doc) {\r\n upgradedDocuments = [];\r\n _upgradeDocumentTree (doc);\r\n upgradedDocuments = null;\r\n}\r\n\r\n\r\nfunction _upgradeDocumentT ree(doc) {\r\n doc = wrapIfNeeded(doc);\r\n if (upgradedDocuments.indexOf(doc) >= 0) {\r\n return;\r\n }\r\n upgradedDocuments.push(doc);\r\n //console. log('upgradeDocumentTree: ', (doc.baseURI).split('/').pop());\r\n // upgrade co ntained imported documents\r\n var imports = doc.querySelectorAll('link[rel=' + IMPORT_LINK_TYPE + ']');\r\n for (var i=0, l=imports.length, n; (i<l) && (n=im ports[i]); i++) {\r\n if (n.import && n.import.__parsed) {\r\n _upgradeD ocumentTree(n.import);\r\n }\r\n }\r\n upgradeDocument(doc);\r\n}\r\n\r\n// exports\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\r\nscope.watchShadow = wa tchShadow;\r\nscope.upgradeDocumentTree = upgradeDocumentTree;\r\nscope.upgradeA ll = addedNode;\r\nscope.upgradeSubtree = addedSubtree;\r\nscope.insertedNode = insertedNode;\r\n\r\nscope.observeDocument = observeDocument;\r\nscope.upgradeDo cument = upgradeDocument;\r\n\r\nscope.takeRecords = takeRecords;\r\n\r\n})(wind ow.CustomElements);\r\n",
152 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * Implements `docum ent.registerElement`\n * @module CustomElements\n*/\n\n/**\n * Polyfilled extens ions to the `document` object.\n * @class Document\n*/\n\n(function(scope) {\n\n // imports\n\nif (!scope) {\n scope = window.CustomElements = {flags:{}};\n}\nv ar flags = scope.flags;\n\n// native document.registerElement?\n\nvar hasNative = Boolean(document.registerElement);\n// For consistent timing, use native custo m elements only when not polyfilling\n// other key related web components featur es.\nvar useNative = !flags.register && hasNative && !window.ShadowDOMPolyfill & & (!window.HTMLImports || HTMLImports.useNative);\n\nif (useNative) {\n\n // st ub\n var nop = function() {};\n\n // exports\n scope.registry = {};\n scope. upgradeElement = nop;\n\n scope.watchShadow = nop;\n scope.upgrade = nop;\n s cope.upgradeAll = nop;\n scope.upgradeSubtree = nop;\n scope.observeDocument = nop;\n scope.upgradeDocument = nop;\n scope.upgradeDocumentTree = nop;\n sco pe.takeRecords = nop;\n scope.reservedTagList = [];\n\n} else {\n\n /**\n * Registers a custom tag name with the document.\n *\n * When a registered ele ment is created, a `readyCallback` method is called\n * in the scope of the el ement. The `readyCallback` method can be specified on\n * either `options.prot otype` or `options.lifecycle` with the latter taking\n * precedence.\n *\n * @method register\n * @param {String} name The tag name to register. Must in clude a dash ('-'),\n * for example 'x-component'.\n * @param {Object} op tions\n * @param {String} [options.extends]\n * (_off spec_) Tag nam e of an element to extend (or blank for a new\n * element). This paramete r is not part of the specification, but instead\n * is a hint for the pol yfill because the extendee is difficult to infer.\n * Remember that the i nput prototype must chain to the extended element's\n * prototype (or HTM LElement.prototype) regardless of the value of\n * `extends`.\n * @p aram {Object} options.prototype The prototype to use for the new\n * elem ent. The prototype must inherit from HTMLElement.\n * @param {Object} [opti ons.lifecycle]\n * Callbacks that fire at important phases in the life of the custom\n * element.\n *\n * @example\n * FancyButton = do cument.registerElement(\"fancy-button\", {\n * extends: 'button',\n * prototype: Object.create(HTMLButtonElement.prototype, {\n * r eadyCallback: {\n * value: function() {\n * console. log(\"a fancy-button was created\",\n * }\n * }\n * })\n * });\n * @return {Function} Constructor for the newly regist ered type.\n */\n function register(name, options) {\n //console.warn('doc ument.registerElement(\"' + name + '\", ', options, ')');\n // construct a de fintion out of options\n // TODO(sjmiles): probably should clone options inst ead of mutating it\n var definition = options || {};\n if (!name) {\n // TODO(sjmiles): replace with more appropriate error (EricB can probably\n // offer guidance)\n throw new Error('document.registerElement: first arg ument `name` must not be empty');\n }\n if (name.indexOf('-') < 0) {\n // TODO(sjmiles): replace with more appropriate error (EricB can probably\n // offer guidance)\n throw new Error('document.registerElement: first ar gument (\\'name\\') must contain a dash (\\'-\\'). Argument provided was \\'' + String(name) + '\\'.');\n }\n // prevent registering reserved names\n i f (isReservedTag(name)) {\n throw new Error('Failed to execute \\'registerE lement\\' on \\'Document\\': Registration failed for type \\'' + String(name) + '\\'. The type name is invalid.');\n }\n // elements may only be registere d once\n if (getRegisteredDefinition(name)) {\n throw new Error('Duplica teDefinitionError: a type with name \\'' + String(name) + '\\' is already regist ered');\n }\n // must have a prototype, default to an extension of HTMLEle ment\n // TODO(sjmiles): probably should throw if no prototype, check spec\n if (!definition.prototype) {\n // TODO(sjmiles): replace with more appro priate error (EricB can probably\n // offer guidance)\n throw new Erro r('Options missing required prototype property');\n }\n // record name\n definition.__name = name.toLowerCase();\n // ensure a lifecycle object so w e don't have to null test it\n definition.lifecycle = definition.lifecycle || {};\n // build a list of ancestral custom elements (for native base detectio n)\n // TODO(sjmiles): we used to need to store this, but current code only\n // uses it in 'resolveTagName': it should probably be inlined\n definitio n.ancestry = ancestry(definition.extends);\n // extensions of native speciali zations of HTMLElement require localName\n // to remain native, and use secon dary 'is' specifier for extension type\n resolveTagName(definition);\n // some platforms require modifications to the user-supplied prototype\n // chai n\n resolvePrototypeChain(definition);\n // overrides to implement attribu teChanged callback\n overrideAttributeApi(definition.prototype);\n // 7.1. 5: Register the DEFINITION with DOCUMENT\n registerDefinition(definition.__na me, definition);\n // 7.1.7. Run custom element constructor generation algori thm with PROTOTYPE\n // 7.1.8. Return the output of the previous step.\n d efinition.ctor = generateConstructor(definition);\n definition.ctor.prototype = definition.prototype;\n // force our .constructor to be our actual constru ctor\n definition.prototype.constructor = definition.ctor;\n // if initial parsing is complete\n if (scope.ready) {\n // upgrade any pre-existing nodes of this type\n scope.upgradeDocumentTree(document);\n }\n retur n definition.ctor;\n }\n\n function isReservedTag(name) {\n for (var i = 0; i < reservedTagList.length; i++) {\n if (name === reservedTagList[i]) {\n return true;\n }\n }\n }\n\n var reservedTagList = [\n 'anno tation-xml', 'color-profile', 'font-face', 'font-face-src',\n 'font-face-uri' , 'font-face-format', 'font-face-name', 'missing-glyph'\n ];\n\n function ance stry(extnds) {\n var extendee = getRegisteredDefinition(extnds);\n if (ext endee) {\n return ancestry(extendee.extends).concat([extendee]);\n }\n return [];\n }\n\n function resolveTagName(definition) {\n // if we are e xplicitly extending something, that thing is our\n // baseTag, unless it repr esents a custom component\n var baseTag = definition.extends;\n // if our ancestry includes custom components, we only have a\n // baseTag if one of th em does\n for (var i=0, a; (a=definition.ancestry[i]); i++) {\n baseTag = a.is && a.tag;\n }\n // our tag is our baseTag, if it exists, and otherw ise just our name\n definition.tag = baseTag || definition.__name;\n if (b aseTag) {\n // if there is a base tag, use secondary 'is' specifier\n definition.is = definition.__name;\n }\n }\n\n function resolvePrototypeCha in(definition) {\n // if we don't support __proto__ we need to locate the nat ive level\n // prototype for precise mixing in\n if (!Object.__proto__) {\ n // default prototype\n var nativePrototype = HTMLElement.prototype;\ n // work out prototype when using type-extension\n if (definition.is) {\n var inst = document.createElement(definition.tag);\n var expe ctedPrototype = Object.getPrototypeOf(inst);\n // only set nativePrototyp e if it will actually appear in the definition's chain\n if (expectedProt otype === definition.prototype) {\n nativePrototype = expectedPrototype ;\n }\n }\n // ensure __proto__ reference is installed at each point on the prototype\n // chain.\n // NOTE: On platforms without __p roto__, a mixin strategy is used instead\n // of prototype swizzling. In th is case, this generated __proto__ provides\n // limited support for prototy pe traversal.\n var proto = definition.prototype, ancestor;\n while (p roto && (proto !== nativePrototype)) {\n ancestor = Object.getPrototypeOf (proto);\n proto.__proto__ = ancestor;\n proto = ancestor;\n }\n // cache this in case of mixin\n definition.native = nativePrototy pe;\n }\n }\n\n // SECTION 4\n\n function instantiate(definition) {\n / / 4.a.1. Create a new object that implements PROTOTYPE\n // 4.a.2. Let ELEMEN T by this new object\n //\n // the custom element instantiation algorithm must also ensure that the\n // output is a valid DOM element with the proper wrapper in place.\n //\n return upgrade(domCreateElement(definition.tag), definition);\n }\n\n function upgrade(element, definition) {\n // some defi nitions specify an 'is' attribute\n if (definition.is) {\n element.setAt tribute('is', definition.is);\n }\n // make 'element' implement definition .prototype\n implement(element, definition);\n // flag as upgraded\n el ement.__upgraded__ = true;\n // lifecycle management\n created(element);\n // attachedCallback fires in tree order, call before recursing\n scope.in sertedNode(element);\n // there should never be a shadow root on element at t his point\n scope.upgradeSubtree(element);\n // OUTPUT\n return element ;\n }\n\n function implement(element, definition) {\n // prototype swizzlin g is best\n if (Object.__proto__) {\n element.__proto__ = definition.pro totype;\n } else {\n // where above we can re-acquire inPrototype via\n // getPrototypeOf(Element), we cannot do so when\n // we use mixin, so we install a magic reference\n customMixin(element, definition.prototype, definition.native);\n element.__proto__ = definition.prototype;\n }\n } \n\n function customMixin(inTarget, inSrc, inNative) {\n // TODO(sjmiles): ' used' allows us to only copy the 'youngest' version of\n // any property. Thi s set should be precalculated. We also need to\n // consider this for support ing 'super'.\n var used = {};\n // start with inSrc\n var p = inSrc;\n // The default is HTMLElement.prototype, so we add a test to avoid mixing in\ n // native prototypes\n while (p !== inNative && p !== HTMLElement.protot ype) {\n var keys = Object.getOwnPropertyNames(p);\n for (var i=0, k; k=keys[i]; i++) {\n if (!used[k]) {\n Object.defineProperty(inTa rget, k,\n Object.getOwnPropertyDescriptor(p, k));\n used[ k] = 1;\n }\n }\n p = Object.getPrototypeOf(p);\n }\n }\n\n function created(element) {\n // invoke createdCallback\n if (element.cr eatedCallback) {\n element.createdCallback();\n }\n }\n\n // attribute watching\n\n function overrideAttributeApi(prototype) {\n // overrides to i mplement callbacks\n // TODO(sjmiles): should support access via .attributes NamedNodeMap\n // TODO(sjmiles): preserves user defined overrides, if any\n if (prototype.setAttribute._polyfilled) {\n return;\n }\n var setAt tribute = prototype.setAttribute;\n prototype.setAttribute = function(name, v alue) {\n changeAttribute.call(this, name, value, setAttribute);\n }\n var removeAttribute = prototype.removeAttribute;\n prototype.removeAttribut e = function(name) {\n changeAttribute.call(this, name, null, removeAttribu te);\n }\n prototype.setAttribute._polyfilled = true;\n }\n\n // https:/ /dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/\n // index.html#dfn-att ribute-changed-callback\n function changeAttribute(name, value, operation) {\n name = name.toLowerCase();\n var oldValue = this.getAttribute(name);\n operation.apply(this, arguments);\n var newValue = this.getAttribute(name);\n if (this.attributeChangedCallback\n && (newValue !== oldValue)) {\n this.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n // element registry (maps tag names to definitions)\n\n var registry = {};\n\n f unction getRegisteredDefinition(name) {\n if (name) {\n return registry[ name.toLowerCase()];\n }\n }\n\n function registerDefinition(name, definiti on) {\n registry[name] = definition;\n }\n\n function generateConstructor(d efinition) {\n return function() {\n return instantiate(definition);\n };\n }\n\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n function createElementNS(namespace, tag, typeExtension) {\n // NOTE: we do not support non-HTML elements,\n // just call createElementNS for non HTML Elements\n if (namespace === HTML_NAMESPACE) {\n return createElement(tag, typeExtens ion);\n } else {\n return domCreateElementNS(namespace, tag);\n }\n }\n\n function createElement(tag, typeExtension) {\n // TODO(sjmiles): ignor e 'tag' when using 'typeExtension', we could\n // error check it, or perhaps there should only ever be one argument\n var definition = getRegisteredDefini tion(typeExtension || tag);\n if (definition) {\n if (tag == definition. tag && typeExtension == definition.is) {\n return new definition.ctor();\ n }\n // Handle empty string for type extension.\n if (!typeExten sion && !definition.is) {\n return new definition.ctor();\n }\n } \n\n if (typeExtension) {\n var element = createElement(tag);\n ele ment.setAttribute('is', typeExtension);\n return element;\n }\n var e lement = domCreateElement(tag);\n // Custom tags should be HTMLElements even if not upgraded.\n if (tag.indexOf('-') >= 0) {\n implement(element, HTM LElement);\n }\n return element;\n }\n\n function upgradeElement(element ) {\n if (!element.__upgraded__ && (element.nodeType === Node.ELEMENT_NODE)) {\n var is = element.getAttribute('is');\n var definition = getRegiste redDefinition(is || element.localName);\n if (definition) {\n if (is && definition.tag == element.localName) {\n return upgrade(element, de finition);\n } else if (!is && !definition.extends) {\n return u pgrade(element, definition);\n }\n }\n }\n }\n\n function clone Node(deep) {\n // call original clone\n var n = domCloneNode.call(this, de ep);\n // upgrade the element and subtree\n scope.upgradeAll(n);\n // r eturn the clone\n return n;\n }\n // capture native createElement before we override it\n\n var domCreateElement = document.createElement.bind(document);\ n var domCreateElementNS = document.createElementNS.bind(document);\n\n // cap ture native cloneNode before we override it\n\n var domCloneNode = Node.prototy pe.cloneNode;\n\n // exports\n\n document.registerElement = register;\n docum ent.createElement = createElement; // override\n document.createElementNS = cre ateElementNS; // override\n Node.prototype.cloneNode = cloneNode; // override\n \n scope.registry = registry;\n\n /**\n * Upgrade an element to a custom ele ment. Upgrading an element\n * causes the custom prototype to be applied, an ` is` attribute\n * to be attached (as needed), and invocation of the `readyCall back`.\n * `upgrade` does nothing if the element is already upgraded, or\n * if it matches no registered custom tag name.\n *\n * @method ugprade\n * @param {Element} element The element to upgrade.\n * @return {Element} The upg raded element.\n */\n scope.upgrade = upgradeElement;\n}\n\n// Create a custo m 'instanceof'. This is necessary when CustomElements\n// are implemented via a mixin strategy, as for example on IE10.\nvar isInstance;\nif (!Object.__proto__ && !useNative) {\n isInstance = function(obj, ctor) {\n var p = obj;\n wh ile (p) {\n // NOTE: this is not technically correct since we're not checki ng if\n // an object is an instance of a constructor; however, this should\ n // be good enough for the mixin strategy.\n if (p === ctor.prototype ) {\n return true;\n }\n p = p.__proto__;\n }\n return fa lse;\n }\n} else {\n isInstance = function(obj, base) {\n return obj instan ceof base;\n }\n}\n\n// exports\nscope.instanceof = isInstance;\nscope.reserved TagList = reservedTagList;\n\n// bc\ndocument.register = document.registerElemen t;\n\nscope.hasNative = hasNative;\nscope.useNative = useNative;\n\n})(window.Cu stomElements);\n", 152 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * Implements `docum ent.registerElement`\n * @module CustomElements\n*/\n\n/**\n * Polyfilled extens ions to the `document` object.\n * @class Document\n*/\n\n(function(scope) {\n\n // imports\n\nif (!scope) {\n scope = window.CustomElements = {flags:{}};\n}\nv ar flags = scope.flags;\n\n// native document.registerElement?\n\nvar hasNative = Boolean(document.registerElement);\n// For consistent timing, use native custo m elements only when not polyfilling\n// other key related web components featur es.\nvar useNative = !flags.register && hasNative && !window.ShadowDOMPolyfill & & (!window.HTMLImports || HTMLImports.useNative);\n\nif (useNative) {\n\n // st ub\n var nop = function() {};\n\n // exports\n scope.registry = {};\n scope. upgradeElement = nop;\n\n scope.watchShadow = nop;\n scope.upgrade = nop;\n s cope.upgradeAll = nop;\n scope.upgradeSubtree = nop;\n scope.observeDocument = nop;\n scope.upgradeDocument = nop;\n scope.upgradeDocumentTree = nop;\n sco pe.takeRecords = nop;\n scope.reservedTagList = [];\n\n} else {\n\n /**\n * Registers a custom tag name with the document.\n *\n * When a registered ele ment is created, a `readyCallback` method is called\n * in the scope of the el ement. The `readyCallback` method can be specified on\n * either `options.prot otype` or `options.lifecycle` with the latter taking\n * precedence.\n *\n * @method register\n * @param {String} name The tag name to register. Must in clude a dash ('-'),\n * for example 'x-component'.\n * @param {Object} op tions\n * @param {String} [options.extends]\n * (_off spec_) Tag nam e of an element to extend (or blank for a new\n * element). This paramete r is not part of the specification, but instead\n * is a hint for the pol yfill because the extendee is difficult to infer.\n * Remember that the i nput prototype must chain to the extended element's\n * prototype (or HTM LElement.prototype) regardless of the value of\n * `extends`.\n * @p aram {Object} options.prototype The prototype to use for the new\n * elem ent. The prototype must inherit from HTMLElement.\n * @param {Object} [opti ons.lifecycle]\n * Callbacks that fire at important phases in the life of the custom\n * element.\n *\n * @example\n * FancyButton = do cument.registerElement(\"fancy-button\", {\n * extends: 'button',\n * prototype: Object.create(HTMLButtonElement.prototype, {\n * r eadyCallback: {\n * value: function() {\n * console. log(\"a fancy-button was created\",\n * }\n * }\n * })\n * });\n * @return {Function} Constructor for the newly regist ered type.\n */\n function register(name, options) {\n //console.warn('doc ument.registerElement(\"' + name + '\", ', options, ')');\n // construct a de fintion out of options\n // TODO(sjmiles): probably should clone options inst ead of mutating it\n var definition = options || {};\n if (!name) {\n // TODO(sjmiles): replace with more appropriate error (EricB can probably\n // offer guidance)\n throw new Error('document.registerElement: first arg ument `name` must not be empty');\n }\n if (name.indexOf('-') < 0) {\n // TODO(sjmiles): replace with more appropriate error (EricB can probably\n // offer guidance)\n throw new Error('document.registerElement: first ar gument (\\'name\\') must contain a dash (\\'-\\'). Argument provided was \\'' + String(name) + '\\'.');\n }\n // prevent registering reserved names\n i f (isReservedTag(name)) {\n throw new Error('Failed to execute \\'registerE lement\\' on \\'Document\\': Registration failed for type \\'' + String(name) + '\\'. The type name is invalid.');\n }\n // elements may only be registere d once\n if (getRegisteredDefinition(name)) {\n throw new Error('Duplica teDefinitionError: a type with name \\'' + String(name) + '\\' is already regist ered');\n }\n // must have a prototype, default to an extension of HTMLEle ment\n // TODO(sjmiles): probably should throw if no prototype, check spec\n if (!definition.prototype) {\n // TODO(sjmiles): replace with more appro priate error (EricB can probably\n // offer guidance)\n throw new Erro r('Options missing required prototype property');\n }\n // record name\n definition.__name = name.toLowerCase();\n // ensure a lifecycle object so w e don't have to null test it\n definition.lifecycle = definition.lifecycle || {};\n // build a list of ancestral custom elements (for native base detectio n)\n // TODO(sjmiles): we used to need to store this, but current code only\n // uses it in 'resolveTagName': it should probably be inlined\n definitio n.ancestry = ancestry(definition.extends);\n // extensions of native speciali zations of HTMLElement require localName\n // to remain native, and use secon dary 'is' specifier for extension type\n resolveTagName(definition);\n // some platforms require modifications to the user-supplied prototype\n // chai n\n resolvePrototypeChain(definition);\n // overrides to implement attribu teChanged callback\n overrideAttributeApi(definition.prototype);\n // 7.1. 5: Register the DEFINITION with DOCUMENT\n registerDefinition(definition.__na me, definition);\n // 7.1.7. Run custom element constructor generation algori thm with PROTOTYPE\n // 7.1.8. Return the output of the previous step.\n d efinition.ctor = generateConstructor(definition);\n definition.ctor.prototype = definition.prototype;\n // force our .constructor to be our actual constru ctor\n definition.prototype.constructor = definition.ctor;\n // if initial parsing is complete\n if (scope.ready) {\n // upgrade any pre-existing nodes of this type\n scope.upgradeDocumentTree(document);\n }\n retur n definition.ctor;\n }\n\n function isReservedTag(name) {\n for (var i = 0; i < reservedTagList.length; i++) {\n if (name === reservedTagList[i]) {\n return true;\n }\n }\n }\n\n var reservedTagList = [\n 'anno tation-xml', 'color-profile', 'font-face', 'font-face-src',\n 'font-face-uri' , 'font-face-format', 'font-face-name', 'missing-glyph'\n ];\n\n function ance stry(extnds) {\n var extendee = getRegisteredDefinition(extnds);\n if (ext endee) {\n return ancestry(extendee.extends).concat([extendee]);\n }\n return [];\n }\n\n function resolveTagName(definition) {\n // if we are e xplicitly extending something, that thing is our\n // baseTag, unless it repr esents a custom component\n var baseTag = definition.extends;\n // if our ancestry includes custom components, we only have a\n // baseTag if one of th em does\n for (var i=0, a; (a=definition.ancestry[i]); i++) {\n baseTag = a.is && a.tag;\n }\n // our tag is our baseTag, if it exists, and otherw ise just our name\n definition.tag = baseTag || definition.__name;\n if (b aseTag) {\n // if there is a base tag, use secondary 'is' specifier\n definition.is = definition.__name;\n }\n }\n\n function resolvePrototypeCha in(definition) {\n // if we don't support __proto__ we need to locate the nat ive level\n // prototype for precise mixing in\n if (!Object.__proto__) {\ n // default prototype\n var nativePrototype = HTMLElement.prototype;\ n // work out prototype when using type-extension\n if (definition.is) {\n var inst = document.createElement(definition.tag);\n var expe ctedPrototype = Object.getPrototypeOf(inst);\n // only set nativePrototyp e if it will actually appear in the definition's chain\n if (expectedProt otype === definition.prototype) {\n nativePrototype = expectedPrototype ;\n }\n }\n // ensure __proto__ reference is installed at each point on the prototype\n // chain.\n // NOTE: On platforms without __p roto__, a mixin strategy is used instead\n // of prototype swizzling. In th is case, this generated __proto__ provides\n // limited support for prototy pe traversal.\n var proto = definition.prototype, ancestor;\n while (p roto && (proto !== nativePrototype)) {\n ancestor = Object.getPrototypeOf (proto);\n proto.__proto__ = ancestor;\n proto = ancestor;\n }\n // cache this in case of mixin\n definition.native = nativePrototy pe;\n }\n }\n\n // SECTION 4\n\n function instantiate(definition) {\n / / 4.a.1. Create a new object that implements PROTOTYPE\n // 4.a.2. Let ELEMEN T by this new object\n //\n // the custom element instantiation algorithm must also ensure that the\n // output is a valid DOM element with the proper wrapper in place.\n //\n return upgrade(domCreateElement(definition.tag), definition);\n }\n\n function upgrade(element, definition) {\n // some defi nitions specify an 'is' attribute\n if (definition.is) {\n element.setAt tribute('is', definition.is);\n }\n // make 'element' implement definition .prototype\n implement(element, definition);\n // flag as upgraded\n el ement.__upgraded__ = true;\n // lifecycle management\n created(element);\n // attachedCallback fires in tree order, call before recursing\n scope.in sertedNode(element);\n // there should never be a shadow root on element at t his point\n scope.upgradeSubtree(element);\n // OUTPUT\n return element ;\n }\n\n function implement(element, definition) {\n // prototype swizzlin g is best\n if (Object.__proto__) {\n element.__proto__ = definition.pro totype;\n } else {\n // where above we can re-acquire inPrototype via\n // getPrototypeOf(Element), we cannot do so when\n // we use mixin, so we install a magic reference\n customMixin(element, definition.prototype, definition.native);\n element.__proto__ = definition.prototype;\n }\n } \n\n function customMixin(inTarget, inSrc, inNative) {\n // TODO(sjmiles): ' used' allows us to only copy the 'youngest' version of\n // any property. Thi s set should be precalculated. We also need to\n // consider this for support ing 'super'.\n var used = {};\n // start with inSrc\n var p = inSrc;\n // The default is HTMLElement.prototype, so we add a test to avoid mixing in\ n // native prototypes\n while (p !== inNative && p !== HTMLElement.protot ype) {\n var keys = Object.getOwnPropertyNames(p);\n for (var i=0, k; k=keys[i]; i++) {\n if (!used[k]) {\n Object.defineProperty(inTa rget, k,\n Object.getOwnPropertyDescriptor(p, k));\n used[ k] = 1;\n }\n }\n p = Object.getPrototypeOf(p);\n }\n }\n\n function created(element) {\n // invoke createdCallback\n if (element.cr eatedCallback) {\n element.createdCallback();\n }\n }\n\n // attribute watching\n\n function overrideAttributeApi(prototype) {\n // overrides to i mplement callbacks\n // TODO(sjmiles): should support access via .attributes NamedNodeMap\n // TODO(sjmiles): preserves user defined overrides, if any\n if (prototype.setAttribute._polyfilled) {\n return;\n }\n var setAt tribute = prototype.setAttribute;\n prototype.setAttribute = function(name, v alue) {\n changeAttribute.call(this, name, value, setAttribute);\n }\n var removeAttribute = prototype.removeAttribute;\n prototype.removeAttribut e = function(name) {\n changeAttribute.call(this, name, null, removeAttribu te);\n }\n prototype.setAttribute._polyfilled = true;\n }\n\n // https:/ /dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/\n // index.html#dfn-att ribute-changed-callback\n function changeAttribute(name, value, operation) {\n name = name.toLowerCase();\n var oldValue = this.getAttribute(name);\n operation.apply(this, arguments);\n var newValue = this.getAttribute(name);\n if (this.attributeChangedCallback\n && (newValue !== oldValue)) {\n this.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n // element registry (maps tag names to definitions)\n\n var registry = {};\n\n f unction getRegisteredDefinition(name) {\n if (name) {\n return registry[ name.toLowerCase()];\n }\n }\n\n function registerDefinition(name, definiti on) {\n registry[name] = definition;\n }\n\n function generateConstructor(d efinition) {\n return function() {\n return instantiate(definition);\n };\n }\n\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n function createElementNS(namespace, tag, typeExtension) {\n // NOTE: we do not support non-HTML elements,\n // just call createElementNS for non HTML Elements\n if (namespace === HTML_NAMESPACE) {\n return createElement(tag, typeExtens ion);\n } else {\n return domCreateElementNS(namespace, tag);\n }\n }\n\n function createElement(tag, typeExtension) {\n // TODO(sjmiles): ignor e 'tag' when using 'typeExtension', we could\n // error check it, or perhaps there should only ever be one argument\n var definition = getRegisteredDefini tion(typeExtension || tag);\n if (definition) {\n if (tag == definition. tag && typeExtension == definition.is) {\n return new definition.ctor();\ n }\n // Handle empty string for type extension.\n if (!typeExten sion && !definition.is) {\n return new definition.ctor();\n }\n } \n\n if (typeExtension) {\n var element = createElement(tag);\n ele ment.setAttribute('is', typeExtension);\n return element;\n }\n var e lement = domCreateElement(tag);\n // Custom tags should be HTMLElements even if not upgraded.\n if (tag.indexOf('-') >= 0) {\n implement(element, HTM LElement);\n }\n return element;\n }\n\n function upgradeElement(element ) {\n if (!element.__upgraded__ && (element.nodeType === Node.ELEMENT_NODE)) {\n var is = element.getAttribute('is');\n var definition = getRegiste redDefinition(is || element.localName);\n if (definition) {\n if (is && definition.tag == element.localName) {\n return upgrade(element, de finition);\n } else if (!is && !definition.extends) {\n return u pgrade(element, definition);\n }\n }\n }\n }\n\n function clone Node(deep) {\n // call original clone\n var n = domCloneNode.call(this, de ep);\n // upgrade the element and subtree\n scope.upgradeAll(n);\n // r eturn the clone\n return n;\n }\n // capture native createElement before we override it\n\n var domCreateElement = document.createElement.bind(document);\ n var domCreateElementNS = document.createElementNS.bind(document);\n\n // cap ture native cloneNode before we override it\n\n var domCloneNode = Node.prototy pe.cloneNode;\n\n // exports\n\n document.registerElement = register;\n docum ent.createElement = createElement; // override\n document.createElementNS = cre ateElementNS; // override\n Node.prototype.cloneNode = cloneNode; // override\n \n scope.registry = registry;\n\n /**\n * Upgrade an element to a custom ele ment. Upgrading an element\n * causes the custom prototype to be applied, an ` is` attribute\n * to be attached (as needed), and invocation of the `readyCall back`.\n * `upgrade` does nothing if the element is already upgraded, or\n * if it matches no registered custom tag name.\n *\n * @method ugprade\n * @param {Element} element The element to upgrade.\n * @return {Element} The upg raded element.\n */\n scope.upgrade = upgradeElement;\n}\n\n// Create a custo m 'instanceof'. This is necessary when CustomElements\n// are implemented via a mixin strategy, as for example on IE10.\nvar isInstance;\nif (!Object.__proto__ && !useNative) {\n isInstance = function(obj, ctor) {\n var p = obj;\n wh ile (p) {\n // NOTE: this is not technically correct since we're not checki ng if\n // an object is an instance of a constructor; however, this should\ n // be good enough for the mixin strategy.\n if (p === ctor.prototype ) {\n return true;\n }\n p = p.__proto__;\n }\n return fa lse;\n }\n} else {\n isInstance = function(obj, base) {\n return obj instan ceof base;\n }\n}\n\n// exports\nscope.instanceof = isInstance;\nscope.reserved TagList = reservedTagList;\n\n// bc\ndocument.register = document.registerElemen t;\n\nscope.hasNative = hasNative;\nscope.useNative = useNative;\n\n})(window.Cu stomElements);\n",
153 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n// import\n\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\n\n// highlander object for parsing a document tree\n\nvar parser = {\n selectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'\n ],\n map: {\n link: 'parseLink'\n },\n parse: function(inDocument) {\n if (!inDocument.__parsed) {\n // only parse onc e\n inDocument.__parsed = true;\n // all parsable elements in inDocume nt (depth-first pre-order traversal)\n var elts = inDocument.querySelectorA ll(parser.selectors);\n // for each parsable node type, call the mapped par sing method\n forEach(elts, function(e) {\n parser[parser.map[e.loca lName]](e);\n });\n // upgrade all upgradeable static elements, anythi ng dynamically\n // created should be caught by observer\n CustomEleme nts.upgradeDocument(inDocument);\n // observe document for dom changes\n CustomElements.observeDocument(inDocument);\n }\n },\n parseLink: functi on(linkElt) {\n // imports\n if (isDocumentLink(linkElt)) {\n this.pa rseImport(linkElt);\n }\n },\n parseImport: function(linkElt) {\n if (li nkElt.import) {\n parser.parse(linkElt.import);\n }\n }\n};\n\nfunction isDocumentLink(inElt) {\n return (inElt.localName === 'link'\n && inElt.g etAttribute('rel') === IMPORT_LINK_TYPE);\n}\n\nvar forEach = Array.prototype.fo rEach.call.bind(Array.prototype.forEach);\n\n// exports\n\nscope.parser = parser ;\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\n\n})(window.CustomElements);", 153 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n// import\n\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\n\n// highlander object for parsing a document tree\n\nvar parser = {\n selectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'\n ],\n map: {\n link: 'parseLink'\n },\n parse: function(inDocument) {\n if (!inDocument.__parsed) {\n // only parse onc e\n inDocument.__parsed = true;\n // all parsable elements in inDocume nt (depth-first pre-order traversal)\n var elts = inDocument.querySelectorA ll(parser.selectors);\n // for each parsable node type, call the mapped par sing method\n forEach(elts, function(e) {\n parser[parser.map[e.loca lName]](e);\n });\n // upgrade all upgradeable static elements, anythi ng dynamically\n // created should be caught by observer\n CustomEleme nts.upgradeDocument(inDocument);\n // observe document for dom changes\n CustomElements.observeDocument(inDocument);\n }\n },\n parseLink: functi on(linkElt) {\n // imports\n if (isDocumentLink(linkElt)) {\n this.pa rseImport(linkElt);\n }\n },\n parseImport: function(linkElt) {\n if (li nkElt.import) {\n parser.parse(linkElt.import);\n }\n }\n};\n\nfunction isDocumentLink(inElt) {\n return (inElt.localName === 'link'\n && inElt.g etAttribute('rel') === IMPORT_LINK_TYPE);\n}\n\nvar forEach = Array.prototype.fo rEach.call.bind(Array.prototype.forEach);\n\n// exports\n\nscope.parser = parser ;\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\n\n})(window.CustomElements);",
154 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope){\n\n// boo tstrap parsing\nfunction bootstrap() {\n // parse document\n CustomElements.pa rser.parse(document);\n // one more pass before register is 'live'\n CustomEle ments.upgradeDocument(document);\n // install upgrade hook if HTMLImports are a vailable\n if (window.HTMLImports) {\n HTMLImports.__importsParsingHook = fu nction(elt) {\n CustomElements.parser.parse(elt.import);\n }\n }\n // set internal 'ready' flag, now document.registerElement will trigger \n // sync hronous upgrades\n CustomElements.ready = true;\n // async to ensure *native* custom elements upgrade prior to this\n // DOMContentLoaded can fire before ele ments upgrade (e.g. when there's\n // an external script)\n setTimeout(functio n() {\n // capture blunt profiling data\n CustomElements.readyTime = Date. now();\n if (window.HTMLImports) {\n CustomElements.elapsed = CustomElem ents.readyTime - HTMLImports.readyTime;\n }\n // notify the system that we are bootstrapped\n document.dispatchEvent(\n new CustomEvent('WebCompon entsReady', {bubbles: true})\n );\n });\n}\n\n// CustomEvent shim for IE\nif (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = function(i nType, params) {\n params = params || {};\n var e = document.createEvent(' CustomEvent');\n e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(p arams.cancelable), params.detail);\n return e;\n };\n window.CustomEvent.pr ototype = window.Event.prototype;\n}\n\n// When loading at readyState complete t ime (or via flag), boot custom elements\n// immediately.\n// If relevant, HTMLIm ports must already be loaded.\nif (document.readyState === 'complete' || scope.f lags.eager) {\n bootstrap();\n// When loading at readyState interactive time, b ootstrap only if HTMLImports\n// are not pending. Also avoid IE as the semantics of this state are unreliable.\n} else if (document.readyState === 'interactive' && !window.attachEvent &&\n (!window.HTMLImports || window.HTMLImports.ready )) {\n bootstrap();\n// When loading at other readyStates, wait for the appropr iate DOM event to \n// bootstrap.\n} else {\n var loadEvent = window.HTMLImport s && !HTMLImports.ready ?\n 'HTMLImportsLoaded' : 'DOMContentLoaded';\n wi ndow.addEventListener(loadEvent, bootstrap);\n}\n\n})(window.CustomElements);\n" , 154 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope){\n\n// boo tstrap parsing\nfunction bootstrap() {\n // parse document\n CustomElements.pa rser.parse(document);\n // one more pass before register is 'live'\n CustomEle ments.upgradeDocument(document);\n // install upgrade hook if HTMLImports are a vailable\n if (window.HTMLImports) {\n HTMLImports.__importsParsingHook = fu nction(elt) {\n CustomElements.parser.parse(elt.import);\n }\n }\n // set internal 'ready' flag, now document.registerElement will trigger \n // sync hronous upgrades\n CustomElements.ready = true;\n // async to ensure *native* custom elements upgrade prior to this\n // DOMContentLoaded can fire before ele ments upgrade (e.g. when there's\n // an external script)\n setTimeout(functio n() {\n // capture blunt profiling data\n CustomElements.readyTime = Date. now();\n if (window.HTMLImports) {\n CustomElements.elapsed = CustomElem ents.readyTime - HTMLImports.readyTime;\n }\n // notify the system that we are bootstrapped\n document.dispatchEvent(\n new CustomEvent('WebCompon entsReady', {bubbles: true})\n );\n });\n}\n\n// CustomEvent shim for IE\nif (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = function(i nType, params) {\n params = params || {};\n var e = document.createEvent(' CustomEvent');\n e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(p arams.cancelable), params.detail);\n return e;\n };\n window.CustomEvent.pr ototype = window.Event.prototype;\n}\n\n// When loading at readyState complete t ime (or via flag), boot custom elements\n// immediately.\n// If relevant, HTMLIm ports must already be loaded.\nif (document.readyState === 'complete' || scope.f lags.eager) {\n bootstrap();\n// When loading at readyState interactive time, b ootstrap only if HTMLImports\n// are not pending. Also avoid IE as the semantics of this state are unreliable.\n} else if (document.readyState === 'interactive' && !window.attachEvent &&\n (!window.HTMLImports || window.HTMLImports.ready )) {\n bootstrap();\n// When loading at other readyStates, wait for the appropr iate DOM event to \n// bootstrap.\n} else {\n var loadEvent = window.HTMLImport s && !HTMLImports.ready ?\n 'HTMLImportsLoaded' : 'DOMContentLoaded';\n wi ndow.addEventListener(loadEvent, bootstrap);\n}\n\n})(window.CustomElements);\n" ,
155 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function() {\n\nif (wind ow.ShadowDOMPolyfill) {\n\n // ensure wrapped inputs for these functions\n var fns = ['upgradeAll', 'upgradeSubtree', 'observeDocument',\n 'upgradeDocume nt'];\n\n // cache originals\n var original = {};\n fns.forEach(function(fn) {\n original[fn] = CustomElements[fn];\n });\n\n // override\n fns.forEach (function(fn) {\n CustomElements[fn] = function(inNode) {\n return origi nal[fn](wrap(inNode));\n };\n });\n\n}\n\n})();\n", 155 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function() {\n\nif (wind ow.ShadowDOMPolyfill) {\n\n // ensure wrapped inputs for these functions\n var fns = ['upgradeAll', 'upgradeSubtree', 'observeDocument',\n 'upgradeDocume nt'];\n\n // cache originals\n var original = {};\n fns.forEach(function(fn) {\n original[fn] = CustomElements[fn];\n });\n\n // override\n fns.forEach (function(fn) {\n CustomElements[fn] = function(inNode) {\n return origi nal[fn](wrap(inNode));\n };\n });\n\n}\n\n})();\n",
156 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n ' use strict';\n\n // polyfill performance.now\n\n if (!window.performance) {\n var start = Date.now();\n // only at millisecond precision\n window.per formance = {now: function(){ return Date.now() - start }};\n }\n\n // polyfill for requestAnimationFrame\n\n if (!window.requestAnimationFrame) {\n window .requestAnimationFrame = (function() {\n var nativeRaf = window.webkitReque stAnimationFrame ||\n window.mozRequestAnimationFrame;\n\n return na tiveRaf ?\n function(callback) {\n return nativeRaf(function() { \n callback(performance.now());\n });\n } :\n function( callback ){\n return window.setTimeout(callback, 1000 / 60);\ n };\n })();\n }\n\n if (!window.cancelAnimationFrame) {\n window .cancelAnimationFrame = (function() {\n return window.webkitCancelAnimatio nFrame ||\n window.mozCancelAnimationFrame ||\n function(id) {\n clearTimeout(id);\n };\n })();\n }\n\n // Make a stub for Po lymer() for polyfill purposes; under the HTMLImports\n // polyfill, scripts in the main document run before imports. That means\n // if (1) polymer is importe d and (2) Polymer() is called in the main document\n // in a script after the i mport, 2 occurs before 1. We correct this here\n // by specfiically patching Po lymer(); this is not necessary under native\n // HTMLImports.\n var elementDec larations = [];\n\n var polymerStub = function(name, dictionary) {\n if ((ty peof name !== 'string') && (arguments.length === 1)) {\n Array.prototype.pu sh.call(arguments, document._currentScript);\n }\n elementDeclarations.pus h(arguments);\n };\n window.Polymer = polymerStub;\n\n // deliver queued delc arations\n scope.consumeDeclarations = function(callback) {\n scope.consumeD eclarations = function() {\n throw 'Possible attempt to load Polymer twice'; \n };\n if (callback) {\n callback(elementDeclarations);\n }\n elementDeclarations = null;\n };\n\n function installPolymerWarning() {\n i f (window.Polymer === polymerStub) {\n window.Polymer = function() {\n throw new Error('You tried to use polymer without loading it first. To ' +\n 'load polymer, <link rel=\"import\" href=\"' + \n 'components/ polymer/polymer.html\">');\n };\n }\n }\n\n // Once DOMContent has loa ded, any main document scripts that depend on\n // Polymer() should have run. C alling Polymer() now is an error until\n // polymer is imported.\n if (HTMLImp orts.useNative) {\n installPolymerWarning();\n } else {\n addEventListene r('DOMContentLoaded', installPolymerWarning);\n }\n\n})(window.Platform);\n", 156 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n ' use strict';\n\n // polyfill performance.now\n\n if (!window.performance) {\n var start = Date.now();\n // only at millisecond precision\n window.per formance = {now: function(){ return Date.now() - start }};\n }\n\n // polyfill for requestAnimationFrame\n\n if (!window.requestAnimationFrame) {\n window .requestAnimationFrame = (function() {\n var nativeRaf = window.webkitReque stAnimationFrame ||\n window.mozRequestAnimationFrame;\n\n return na tiveRaf ?\n function(callback) {\n return nativeRaf(function() { \n callback(performance.now());\n });\n } :\n function( callback ){\n return window.setTimeout(callback, 1000 / 60);\ n };\n })();\n }\n\n if (!window.cancelAnimationFrame) {\n window .cancelAnimationFrame = (function() {\n return window.webkitCancelAnimatio nFrame ||\n window.mozCancelAnimationFrame ||\n function(id) {\n clearTimeout(id);\n };\n })();\n }\n\n // Make a stub for Po lymer() for polyfill purposes; under the HTMLImports\n // polyfill, scripts in the main document run before imports. That means\n // if (1) polymer is importe d and (2) Polymer() is called in the main document\n // in a script after the i mport, 2 occurs before 1. We correct this here\n // by specfiically patching Po lymer(); this is not necessary under native\n // HTMLImports.\n var elementDec larations = [];\n\n var polymerStub = function(name, dictionary) {\n if ((ty peof name !== 'string') && (arguments.length === 1)) {\n Array.prototype.pu sh.call(arguments, document._currentScript);\n }\n elementDeclarations.pus h(arguments);\n };\n window.Polymer = polymerStub;\n\n // deliver queued delc arations\n scope.consumeDeclarations = function(callback) {\n scope.consumeD eclarations = function() {\n throw 'Possible attempt to load Polymer twice'; \n };\n if (callback) {\n callback(elementDeclarations);\n }\n elementDeclarations = null;\n };\n\n function installPolymerWarning() {\n i f (window.Polymer === polymerStub) {\n window.Polymer = function() {\n throw new Error('You tried to use polymer without loading it first. To ' +\n 'load polymer, <link rel=\"import\" href=\"' + \n 'components/ polymer/polymer.html\">');\n };\n }\n }\n\n // Once DOMContent has loa ded, any main document scripts that depend on\n // Polymer() should have run. C alling Polymer() now is an error until\n // polymer is imported.\n if (HTMLImp orts.useNative) {\n installPolymerWarning();\n } else {\n addEventListene r('DOMContentLoaded', installPolymerWarning);\n }\n\n})(window.Platform);\n",
157 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n / / It's desireable to provide a default stylesheet \n // that's convenient for s tyling unresolved elements, but\n // it's cumbersome to have to include this ma nually in every page.\n // It would make sense to put inside some HTMLImport bu t \n // the HTMLImports polyfill does not allow loading of stylesheets \n // t hat block rendering. Therefore this injection is tolerated here.\n //\n // NOT E: position: relative fixes IE's failure to inherit opacity \n // when a child is not statically positioned.\n var style = document.createElement('style');\n style.textContent = ''\n + 'body {'\n + 'transition: opacity ease-in 0.2s;' \n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; di splay: block; overflow: hidden; position: relative;' \n + ' } \\n'\n ; \n var head = document.querySelector('head');\n head.insertBefore(style, head. firstChild);\n\n})(Platform);\n", 157 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n / / It's desireable to provide a default stylesheet \n // that's convenient for s tyling unresolved elements, but\n // it's cumbersome to have to include this ma nually in every page.\n // It would make sense to put inside some HTMLImport bu t \n // the HTMLImports polyfill does not allow loading of stylesheets \n // t hat block rendering. Therefore this injection is tolerated here.\n //\n // NOT E: position: relative fixes IE's failure to inherit opacity \n // when a child is not statically positioned.\n var style = document.createElement('style');\n style.textContent = ''\n + 'body {'\n + 'transition: opacity ease-in 0.2s;' \n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; di splay: block; overflow: hidden; position: relative;' \n + ' } \\n'\n ; \n var head = document.querySelector('head');\n head.insertBefore(style, head. firstChild);\n\n})(Platform);\n",
158 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n f unction withDependencies(task, depends) {\n depends = depends || [];\n if (!depends.map) {\n depends = [depends];\n }\n return task.apply(this, depends.map(marshal));\n }\n\n function module(name, dependsOrFactory, module Factory) {\n var module;\n switch (arguments.length) {\n case 0:\n return;\n case 1:\n module = null;\n break;\n case 2:\n // dependsOrFactory is `factory` in this case\n module = depe ndsOrFactory.apply(this);\n break;\n default:\n // dependsOrF actory is `depends` in this case\n module = withDependencies(moduleFactor y, dependsOrFactory);\n break;\n }\n modules[name] = module;\n };\ n\n function marshal(name) {\n return modules[name];\n }\n\n var modules = {};\n\n function using(depends, task) {\n HTMLImports.whenImportsReady(func tion() {\n withDependencies(task, depends);\n });\n };\n\n // exports\ n\n scope.marshal = marshal;\n // `module` confuses commonjs detectors\n scop e.modularize = module;\n scope.using = using;\n\n})(window);\n" 158 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n f unction withDependencies(task, depends) {\n depends = depends || [];\n if (!depends.map) {\n depends = [depends];\n }\n return task.apply(this, depends.map(marshal));\n }\n\n function module(name, dependsOrFactory, module Factory) {\n var module;\n switch (arguments.length) {\n case 0:\n return;\n case 1:\n module = null;\n break;\n case 2:\n // dependsOrFactory is `factory` in this case\n module = depe ndsOrFactory.apply(this);\n break;\n default:\n // dependsOrF actory is `depends` in this case\n module = withDependencies(moduleFactor y, dependsOrFactory);\n break;\n }\n modules[name] = module;\n };\ n\n function marshal(name) {\n return modules[name];\n }\n\n var modules = {};\n\n function using(depends, task) {\n HTMLImports.whenImportsReady(func tion() {\n withDependencies(task, depends);\n });\n };\n\n // exports\ n\n scope.marshal = marshal;\n // `module` confuses commonjs detectors\n scop e.modularize = module;\n scope.using = using;\n\n})(window);\n"
159 ] 159 ]
160 } 160 }
OLDNEW
« no previous file with comments | « pkg/web_components/lib/platform.concat.js ('k') | pkg/web_components/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698