vendor: 4,648 bytes, lines 1-85
1/*! 2 * html2canvas 1.0.0-rc.3 <https://html2canvas.hertzen.com> 3 * Copyright (c) 2019 Niklas von Hertzen <https://hertzen.com> 4 * Released under MIT License 5 */ 6(function (global, factory) { 7 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 8 typeof define === 'function' && define.amd ? define(factory) : 9 (global = global || self, global.html2canvas = factory()); 10}(this, function () { 'use strict'; 11 12 /*! ***************************************************************************** 13 Copyright (c) Microsoft Corporation. All rights reserved. 14 Licensed under the Apache License, Version 2.0 (the "License"); you may not use 15 this file except in compliance with the License. You may obtain a copy of the 16 License at http://www.apache.org/licenses/LICENSE-2.0 17 18 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 19 KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 20 WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 21 MERCHANTABLITY OR NON-INFRINGEMENT. 22 23 See the Apache Version 2.0 License for specific language governing permissions 24 and limitations under the License. 25 ***************************************************************************** */ 26 /* global Reflect, Promise */ 27 28 var extendStatics = function(d, b) { 29 extendStatics = Object.setPrototypeOf || 30 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || 31 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; 32 return extendStatics(d, b); 33 }; 34 35 function __extends(d, b) { 36 extendStatics(d, b); 37 function __() { this.constructor = d; } 38 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 39 } 40 41 var __assign = function() { 42 __assign = Object.assign || function __assign(t) { 43 for (var s, i = 1, n = arguments.length; i < n; i++) { 44 s = arguments[i]; 45 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; 46 } 47 return t; 48 }; 49 return __assign.apply(this, arguments); 50 }; 51 52 function __awaiter(thisArg, _arguments, P, generator) { 53 return new (P || (P = Promise))(function (resolve, reject) { 54 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 55 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 56 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } 57 step((generator = generator.apply(thisArg, _arguments || [])).next()); 58 }); 59 } 60 61 function __generator(thisArg, body) { 62 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 63 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 64 function verb(n) { return function (v) { return step([n, v]); }; } 65 function step(op) { 66 if (f) throw new TypeError("Generator is already executing."); 67 while (_) try { 68 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 69 if (y = 0, t) op = [op[0] & 2, t.value]; 70 switch (op[0]) { 71 case 0: case 1: t = op; break; 72 case 4: _.label++; return { value: op[1], done: false }; 73 case 5: _.label++; y = op[1]; op = [0]; continue; 74 case 7: op = _.ops.pop(); _.trys.pop(); continue; 75 default: 76 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 77 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 78 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 79 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 80 if (t[2]) _.ops.pop(); 81 _.trys.pop(); continue; 82 } 83 op = body.call(thisArg, _); 84 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 85 if (op[0] & 5) throw op[1];
vendor: 17,953 bytes, lines 85-361
85 return { value: op[0] ? op[1] : void 0, done: true }; 86 } 87 } 88 89 var Bounds = /** @class */ (function () { 90 function Bounds(x, y, w, h) { 91 this.left = x; 92 this.top = y; 93 this.width = w; 94 this.height = h; 95 } 96 Bounds.prototype.add = function (x, y, w, h) { 97 return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h); 98 }; 99 Bounds.fromClientRect = function (clientRect) { 100 return new Bounds(clientRect.left, clientRect.top, clientRect.width, clientRect.height); 101 }; 102 return Bounds; 103 }()); 104 var parseBounds = function (node) { 105 return Bounds.fromClientRect(node.getBoundingClientRect()); 106 }; 107 var parseDocumentSize = function (document) { 108 var body = document.body; 109 var documentElement = document.documentElement; 110 if (!body || !documentElement) { 111 throw new Error("Unable to get document size"); 112 } 113 var width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth)); 114 var height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight)); 115 return new Bounds(0, 0, width, height); 116 }; 117 118 /* 119 * css-line-break 1.1.1 <https://github.com/niklasvh/css-line-break#readme> 120 * Copyright (c) 2019 Niklas von Hertzen <https://hertzen.com> 121 * Released under MIT License 122 */ 123 var toCodePoints = function (str) { 124 var codePoints = []; 125 var i = 0; 126 var length = str.length; 127 while (i < length) { 128 var value = str.charCodeAt(i++); 129 if (value >= 0xd800 && value <= 0xdbff && i < length) { 130 var extra = str.charCodeAt(i++); 131 if ((extra & 0xfc00) === 0xdc00) { 132 codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000); 133 } 134 else { 135 codePoints.push(value); 136 i--; 137 } 138 } 139 else { 140 codePoints.push(value); 141 } 142 } 143 return codePoints; 144 }; 145 var fromCodePoint = function () { 146 var codePoints = []; 147 for (var _i = 0; _i < arguments.length; _i++) { 148 codePoints[_i] = arguments[_i]; 149 } 150 if (String.fromCodePoint) { 151 return String.fromCodePoint.apply(String, codePoints); 152 } 153 var length = codePoints.length; 154 if (!length) { 155 return ''; 156 } 157 var codeUnits = []; 158 var index = -1; 159 var result = ''; 160 while (++index < length) { 161 var codePoint = codePoints[index]; 162 if (codePoint <= 0xffff) { 163 codeUnits.push(codePoint); 164 } 165 else { 166 codePoint -= 0x10000; 167 codeUnits.push((codePoint >> 10) + 0xd800, codePoint % 0x400 + 0xdc00); 168 } 169 if (index + 1 === length || codeUnits.length > 0x4000) { 170 result += String.fromCharCode.apply(String, codeUnits); 171 codeUnits.length = 0; 172 } 173 } 174 return result; 175 }; 176 var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; 177 // Use a lookup table to find the index. 178 var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256); 179 for (var i = 0; i < chars.length; i++) { 180 lookup[chars.charCodeAt(i)] = i; 181 } 182 var decode = function (base64) { 183 var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4; 184 if (base64[base64.length - 1] === '=') { 185 bufferLength--; 186 if (base64[base64.length - 2] === '=') { 187 bufferLength--; 188 } 189 } 190 var buffer = typeof ArrayBuffer !== 'undefined' && 191 typeof Uint8Array !== 'undefined' && 192 typeof Uint8Array.prototype.slice !== 'undefined' 193 ? new ArrayBuffer(bufferLength) 194 : new Array(bufferLength); 195 var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer); 196 for (i = 0; i < len; i += 4) { 197 encoded1 = lookup[base64.charCodeAt(i)]; 198 encoded2 = lookup[base64.charCodeAt(i + 1)]; 199 encoded3 = lookup[base64.charCodeAt(i + 2)]; 200 encoded4 = lookup[base64.charCodeAt(i + 3)]; 201 bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); 202 bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); 203 bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); 204 } 205 return buffer; 206 }; 207 var polyUint16Array = function (buffer) { 208 var length = buffer.length; 209 var bytes = []; 210 for (var i = 0; i < length; i += 2) { 211 bytes.push((buffer[i + 1] << 8) | buffer[i]); 212 } 213 return bytes; 214 }; 215 var polyUint32Array = function (buffer) { 216 var length = buffer.length; 217 var bytes = []; 218 for (var i = 0; i < length; i += 4) { 219 bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]); 220 } 221 return bytes; 222 }; 223 224 /** Shift size for getting the index-2 table offset. */ 225 var UTRIE2_SHIFT_2 = 5; 226 /** Shift size for getting the index-1 table offset. */ 227 var UTRIE2_SHIFT_1 = 6 + 5; 228 /** 229 * Shift size for shifting left the index array values. 230 * Increases possible data size with 16-bit index values at the cost 231 * of compactability. 232 * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY. 233 */ 234 var UTRIE2_INDEX_SHIFT = 2; 235 /** 236 * Difference between the two shift sizes, 237 * for getting an index-1 offset from an index-2 offset. 6=11-5 238 */ 239 var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2; 240 /** 241 * The part of the index-2 table for U+D800..U+DBFF stores values for 242 * lead surrogate code _units_ not code _points_. 243 * Values for lead surrogate code _points_ are indexed with this portion of the table. 244 * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.) 245 */ 246 var UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2; 247 /** Number of entries in a data block. 32=0x20 */ 248 var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2; 249 /** Mask for getting the lower bits for the in-data-block offset. */ 250 var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1; 251 var UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2; 252 /** Count the lengths of both BMP pieces. 2080=0x820 */ 253 var UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH; 254 /** 255 * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820. 256 * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2. 257 */ 258 var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH; 259 var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */ 260 /** 261 * The index-1 table, only used for supplementary code points, at offset 2112=0x840. 262 * Variable length, for code points up to highStart, where the last single-value range starts. 263 * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1. 264 * (For 0x100000 supplementary code points U+10000..U+10ffff.) 265 * 266 * The part of the index-2 table for supplementary code points starts 267 * after this index-1 table. 268 * 269 * Both the index-1 table and the following part of the index-2 table 270 * are omitted completely if there is only BMP data. 271 */ 272 var UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH; 273 /** 274 * Number of index-1 entries for the BMP. 32=0x20 275 * This part of the index-1 table is omitted from the serialized form. 276 */ 277 var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1; 278 /** Number of entries in an index-2 block. 64=0x40 */ 279 var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2; 280 /** Mask for getting the lower bits for the in-index-2-block offset. */ 281 var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1; 282 var slice16 = function (view, start, end) { 283 if (view.slice) { 284 return view.slice(start, end); 285 } 286 return new Uint16Array(Array.prototype.slice.call(view, start, end)); 287 }; 288 var slice32 = function (view, start, end) { 289 if (view.slice) { 290 return view.slice(start, end); 291 } 292 return new Uint32Array(Array.prototype.slice.call(view, start, end)); 293 }; 294 var createTrieFromBase64 = function (base64) { 295 var buffer = decode(base64); 296 var view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer); 297 var view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer); 298 var headerLength = 24; 299 var index = slice16(view16, headerLength / 2, view32[4] / 2); 300 var data = view32[5] === 2 301 ? slice16(view16, (headerLength + view32[4]) / 2) 302 : slice32(view32, Math.ceil((headerLength + view32[4]) / 4)); 303 return new Trie(view32[0], view32[1], view32[2], view32[3], index, data); 304 }; 305 var Trie = /** @class */ (function () { 306 function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) { 307 this.initialValue = initialValue; 308 this.errorValue = errorValue; 309 this.highStart = highStart; 310 this.highValueIndex = highValueIndex; 311 this.index = index; 312 this.data = data; 313 } 314 /** 315 * Get the value for a code point as stored in the Trie. 316 * 317 * @param codePoint the code point 318 * @return the value 319 */ 320 Trie.prototype.get = function (codePoint) { 321 var ix; 322 if (codePoint >= 0) { 323 if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) { 324 // Ordinary BMP code point, excluding leading surrogates. 325 // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index. 326 // 16 bit data is stored in the index array itself. 327 ix = this.index[codePoint >> UTRIE2_SHIFT_2]; 328 ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); 329 return this.data[ix]; 330 } 331 if (codePoint <= 0xffff) { 332 // Lead Surrogate Code Point. A Separate index section is stored for 333 // lead surrogate code units and code points. 334 // The main index has the code unit data. 335 // For this function, we need the code point data. 336 // Note: this expression could be refactored for slightly improved efficiency, but 337 // surrogate code points will be so rare in practice that it's not worth it. 338 ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)]; 339 ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); 340 return this.data[ix]; 341 } 342 if (codePoint < this.highStart) { 343 // Supplemental code point, use two-level lookup. 344 ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1); 345 ix = this.index[ix]; 346 ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK; 347 ix = this.index[ix]; 348 ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK); 349 return this.data[ix]; 350 } 351 if (codePoint <= 0x10ffff) { 352 return this.data[this.highValueIndex]; 353 } 354 } 355 // Fall through. The code point is outside of the legal range of 0..0x10ffff. 356 return this.errorValue; 357 }; 358 return Trie; 359 }()); 360 361 var base64 = 'KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA/QD/AOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC/B8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg/CCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAA
361XgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C/4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw/3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK/gHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN/g3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwA
361KAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD//wQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AH
361QAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATw
361BPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATw
361BPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUA
vendor: 6,833 bytes, lines 361-427
361BQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA'; 362 363 /* @flow */ 364 var LETTER_NUMBER_MODIFIER = 50; 365 // Non-tailorable Line Breaking Classes 366 var BK = 1; // Cause a line break (after) 367 var CR = 2; // Cause a line break (after), except between CR and LF 368 var LF = 3; // Cause a line break (after) 369 var CM = 4; // Prohibit a line break between the character and the preceding character 370 var NL = 5; // Cause a line break (after) 371 var WJ = 7; // Prohibit line breaks before and after 372 var ZW = 8; // Provide a break opportunity 373 var GL = 9; // Prohibit line breaks before and after 374 var SP = 10; // Enable indirect line breaks 375 var ZWJ = 11; // Prohibit line breaks within joiner sequences 376 // Break Opportunities 377 var B2 = 12; // Provide a line break opportunity before and after the character 378 var BA = 13; // Generally provide a line break opportunity after the character 379 var BB = 14; // Generally provide a line break opportunity before the character 380 var HY = 15; // Provide a line break opportunity after the character, except in numeric context 381 var CB = 16; // Provide a line break opportunity contingent on additional information 382 // Characters Prohibiting Certain Breaks 383 var CL = 17; // Prohibit line breaks before 384 var CP = 18; // Prohibit line breaks before 385 var EX = 19; // Prohibit line breaks before 386 var IN = 20; // Allow only indirect line breaks between pairs 387 var NS = 21; // Allow only indirect line breaks before 388 var OP = 22; // Prohibit line breaks after 389 var QU = 23; // Act like they are both opening and closing 390 // Numeric Context 391 var IS = 24; // Prevent breaks after any and before numeric 392 var NU = 25; // Form numeric expressions for line breaking purposes 393 var PO = 26; // Do not break following a numeric expression 394 var PR = 27; // Do not break in front of a numeric expression 395 var SY = 28; // Prevent a break before; and allow a break after 396 // Other Characters 397 var AI = 29; // Act like AL when the resolvedEAW is N; otherwise; act as ID 398 var AL = 30; // Are alphabetic characters or symbols that are used with alphabetic characters 399 var CJ = 31; // Treat as NS or ID for strict or normal breaking. 400 var EB = 32; // Do not break from following Emoji Modifier 401 var EM = 33; // Do not break from preceding Emoji Base 402 var H2 = 34; // Form Korean syllable blocks 403 var H3 = 35; // Form Korean syllable blocks 404 var HL = 36; // Do not break around a following hyphen; otherwise act as Alphabetic 405 var ID = 37; // Break before or after; except in some numeric context 406 var JL = 38; // Form Korean syllable blocks 407 var JV = 39; // Form Korean syllable blocks 408 var JT = 40; // Form Korean syllable blocks 409 var RI = 41; // Keep pairs together. For pairs; break before and after other classes 410 var SA = 42; // Provide a line break opportunity contingent on additional, language-specific context analysis 411 var XX = 43; // Have as yet unknown line breaking behavior or unassigned code positions 412 var BREAK_MANDATORY = '!'; 413 var BREAK_NOT_ALLOWED = 'Ã'; 414 var BREAK_ALLOWED = '÷'; 415 var UnicodeTrie = createTrieFromBase64(base64); 416 var ALPHABETICS = [AL, HL]; 417 var HARD_LINE_BREAKS = [BK, CR, LF, NL]; 418 var SPACE = [SP, ZW]; 419 var PREFIX_POSTFIX = [PR, PO]; 420 var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE); 421 var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3]; 422 var HYPHEN = [HY, BA]; 423 var codePointsToCharacterClasses = function (codePoints, lineBreak) { 424 if (lineBreak === void 0) { lineBreak = 'strict'; } 425 var types = []; 426 var indicies = []; 427 var categories = [];
vendor: 34,373 bytes, lines 428-1216
428 codePoints.forEach(function (codePoint, index) { 429 var classType = UnicodeTrie.get(codePoint); 430 if (classType > LETTER_NUMBER_MODIFIER) { 431 categories.push(true); 432 classType -= LETTER_NUMBER_MODIFIER; 433 } 434 else { 435 categories.push(false); 436 } 437 if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) { 438 // U+2010, â U+2013, ã U+301C, ã U+30A0 439 if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) { 440 indicies.push(index); 441 return types.push(CB); 442 } 443 } 444 if (classType === CM || classType === ZWJ) { 445 // LB10 Treat any remaining combining mark or ZWJ as AL. 446 if (index === 0) { 447 indicies.push(index); 448 return types.push(AL); 449 } 450 // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of 451 // the base character in all of the following rules. Treat ZWJ as if it were CM. 452 var prev = types[index - 1]; 453 if (LINE_BREAKS.indexOf(prev) === -1) { 454 indicies.push(indicies[index - 1]); 455 return types.push(prev); 456 } 457 indicies.push(index); 458 return types.push(AL); 459 } 460 indicies.push(index); 461 if (classType === CJ) { 462 return types.push(lineBreak === 'strict' ? NS : ID); 463 } 464 if (classType === SA) { 465 return types.push(AL); 466 } 467 if (classType === AI) { 468 return types.push(AL); 469 } 470 // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL 471 // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised 472 // to take into account the actual line breaking properties for these characters. 473 if (classType === XX) { 474 if ((codePoint >= 0x20000 && codePoint <= 0x2fffd) || (codePoint >= 0x30000 && codePoint <= 0x3fffd)) { 475 return types.push(ID); 476 } 477 else { 478 return types.push(AL); 479 } 480 } 481 types.push(classType); 482 }); 483 return [indicies, types, categories]; 484 }; 485 var isAdjacentWithSpaceIgnored = function (a, b, currentIndex, classTypes) { 486 var current = classTypes[currentIndex]; 487 if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) { 488 var i = currentIndex; 489 while (i <= classTypes.length) { 490 i++; 491 var next = classTypes[i]; 492 if (next === b) { 493 return true; 494 } 495 if (next !== SP) { 496 break; 497 } 498 } 499 } 500 if (current === SP) { 501 var i = currentIndex; 502 while (i > 0) { 503 i--; 504 var prev = classTypes[i]; 505 if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) { 506 var n = currentIndex; 507 while (n <= classTypes.length) { 508 n++; 509 var next = classTypes[n]; 510 if (next === b) { 511 return true; 512 } 513 if (next !== SP) { 514 break; 515 } 516 } 517 } 518 if (prev !== SP) { 519 break; 520 } 521 } 522 } 523 return false; 524 }; 525 var previousNonSpaceClassType = function (currentIndex, classTypes) { 526 var i = currentIndex; 527 while (i >= 0) { 528 var type = classTypes[i]; 529 if (type === SP) { 530 i--; 531 } 532 else { 533 return type; 534 } 535 } 536 return 0; 537 }; 538 var _lineBreakAtIndex = function (codePoints, classTypes, indicies, index, forbiddenBreaks) { 539 if (indicies[index] === 0) { 540 return BREAK_NOT_ALLOWED; 541 } 542 var currentIndex = index - 1; 543 if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) { 544 return BREAK_NOT_ALLOWED; 545 } 546 var beforeIndex = currentIndex - 1; 547 var afterIndex = currentIndex + 1; 548 var current = classTypes[currentIndex]; 549 // LB4 Always break after hard line breaks. 550 // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks. 551 var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0; 552 var next = classTypes[afterIndex]; 553 if (current === CR && next === LF) { 554 return BREAK_NOT_ALLOWED; 555 } 556 if (HARD_LINE_BREAKS.indexOf(current) !== -1) { 557 return BREAK_MANDATORY; 558 } 559 // LB6 Do not break before hard line breaks. 560 if (HARD_LINE_BREAKS.indexOf(next) !== -1) { 561 return BREAK_NOT_ALLOWED; 562 } 563 // LB7 Do not break before spaces or zero width space. 564 if (SPACE.indexOf(next) !== -1) { 565 return BREAK_NOT_ALLOWED; 566 } 567 // LB8 Break before any character following a zero-width space, even if one or more spaces intervene. 568 if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) { 569 return BREAK_ALLOWED; 570 } 571 // LB8a Do not break between a zero width joiner and an ideograph, emoji base or emoji modifier. 572 if (UnicodeTrie.get(codePoints[currentIndex]) === ZWJ && (next === ID || next === EB || next === EM)) { 573 return BREAK_NOT_ALLOWED; 574 } 575 // LB11 Do not break before or after Word joiner and related characters. 576 if (current === WJ || next === WJ) { 577 return BREAK_NOT_ALLOWED; 578 } 579 // LB12 Do not break after NBSP and related characters. 580 if (current === GL) { 581 return BREAK_NOT_ALLOWED; 582 } 583 // LB12a Do not break before NBSP and related characters, except after spaces and hyphens. 584 if ([SP, BA, HY].indexOf(current) === -1 && next === GL) { 585 return BREAK_NOT_ALLOWED; 586 } 587 // LB13 Do not break before â]â or â!â or â;â or â/â, even after spaces. 588 if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) { 589 return BREAK_NOT_ALLOWED; 590 } 591 // LB14 Do not break after â[â, even after spaces. 592 if (previousNonSpaceClassType(currentIndex, classTypes) === OP) { 593 return BREAK_NOT_ALLOWED; 594 } 595 // LB15 Do not break within ââ[â, even with intervening spaces. 596 if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) { 597 return BREAK_NOT_ALLOWED; 598 } 599 // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces. 600 if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) { 601 return BREAK_NOT_ALLOWED; 602 } 603 // LB17 Do not break within ââââ, even with intervening spaces. 604 if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) { 605 return BREAK_NOT_ALLOWED; 606 } 607 // LB18 Break after spaces. 608 if (current === SP) { 609 return BREAK_ALLOWED; 610 } 611 // LB19 Do not break before or after quotation marks, such as â â â. 612 if (current === QU || next === QU) { 613 return BREAK_NOT_ALLOWED; 614 } 615 // LB20 Break before and after unresolved CB. 616 if (next === CB || current === CB) { 617 return BREAK_ALLOWED; 618 } 619 // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents. 620 if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) { 621 return BREAK_NOT_ALLOWED; 622 } 623 // LB21a Don't break after Hebrew + Hyphen. 624 if (before === HL && HYPHEN.indexOf(current) !== -1) { 625 return BREAK_NOT_ALLOWED; 626 } 627 // LB21b Donât break between Solidus and Hebrew letters. 628 if (current === SY && next === HL) { 629 return BREAK_NOT_ALLOWED; 630 } 631 // LB22 Do not break between two ellipses, or between letters, numbers or exclamations and ellipsis. 632 if (next === IN && ALPHABETICS.concat(IN, EX, NU, ID, EB, EM).indexOf(current) !== -1) { 633 return BREAK_NOT_ALLOWED; 634 } 635 // LB23 Do not break between digits and letters. 636 if ((ALPHABETICS.indexOf(next) !== -1 && current === NU) || (ALPHABETICS.indexOf(current) !== -1 && next === NU)) { 637 return BREAK_NOT_ALLOWED; 638 } 639 // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes. 640 if ((current === PR && [ID, EB, EM].indexOf(next) !== -1) || 641 ([ID, EB, EM].indexOf(current) !== -1 && next === PO)) { 642 return BREAK_NOT_ALLOWED; 643 } 644 // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix. 645 if ((ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1) || 646 (PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1)) { 647 return BREAK_NOT_ALLOWED; 648 } 649 // LB25 Do not break between the following pairs of classes relevant to numbers: 650 if ( 651 // (PR | PO) Ã ( OP | HY )? NU 652 ([PR, PO].indexOf(current) !== -1 && 653 (next === NU || ([OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU))) || 654 // ( OP | HY ) Ã NU 655 ([OP, HY].indexOf(current) !== -1 && next === NU) || 656 // NU Ã (NU | SY | IS) 657 (current === NU && [NU, SY, IS].indexOf(next) !== -1)) { 658 return BREAK_NOT_ALLOWED; 659 } 660 // NU (NU | SY | IS)* Ã (NU | SY | IS | CL | CP) 661 if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) { 662 var prevIndex = currentIndex; 663 while (prevIndex >= 0) { 664 var type = classTypes[prevIndex]; 665 if (type === NU) { 666 return BREAK_NOT_ALLOWED; 667 } 668 else if ([SY, IS].indexOf(type) !== -1) { 669 prevIndex--; 670 } 671 else { 672 break; 673 } 674 } 675 } 676 // NU (NU | SY | IS)* (CL | CP)? Ã (PO | PR)) 677 if ([PR, PO].indexOf(next) !== -1) { 678 var prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex; 679 while (prevIndex >= 0) { 680 var type = classTypes[prevIndex]; 681 if (type === NU) { 682 return BREAK_NOT_ALLOWED; 683 } 684 else if ([SY, IS].indexOf(type) !== -1) { 685 prevIndex--; 686 } 687 else { 688 break; 689 } 690 } 691 } 692 // LB26 Do not break a Korean syllable. 693 if ((JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) || 694 ([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) || 695 ([JT, H3].indexOf(current) !== -1 && next === JT)) { 696 return BREAK_NOT_ALLOWED; 697 } 698 // LB27 Treat a Korean Syllable Block the same as ID. 699 if ((KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1) || 700 (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)) { 701 return BREAK_NOT_ALLOWED; 702 } 703 // LB28 Do not break between alphabetics (âatâ). 704 if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) { 705 return BREAK_NOT_ALLOWED; 706 } 707 // LB29 Do not break between numeric punctuation and alphabetics (âe.g.â). 708 if (current === IS && ALPHABETICS.indexOf(next) !== -1) { 709 return BREAK_NOT_ALLOWED; 710 } 711 // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses. 712 if ((ALPHABETICS.concat(NU).indexOf(current) !== -1 && next === OP) || 713 (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)) { 714 return BREAK_NOT_ALLOWED; 715 } 716 // LB30a Break between two regional indicator symbols if and only if there are an even number of regional 717 // indicators preceding the position of the break. 718 if (current === RI && next === RI) { 719 var i = indicies[currentIndex]; 720 var count = 1; 721 while (i > 0) { 722 i--; 723 if (classTypes[i] === RI) { 724 count++; 725 } 726 else { 727 break; 728 } 729 } 730 if (count % 2 !== 0) { 731 return BREAK_NOT_ALLOWED; 732 } 733 } 734 // LB30b Do not break between an emoji base and an emoji modifier. 735 if (current === EB && next === EM) { 736 return BREAK_NOT_ALLOWED; 737 } 738 return BREAK_ALLOWED; 739 }; 740 var cssFormattedClasses = function (codePoints, options) { 741 if (!options) { 742 options = { lineBreak: 'normal', wordBreak: 'normal' }; 743 } 744 var _a = codePointsToCharacterClasses(codePoints, options.lineBreak), indicies = _a[0], classTypes = _a[1], isLetterNumber = _a[2]; 745 if (options.wordBreak === 'break-all' || options.wordBreak === 'break-word') { 746 classTypes = classTypes.map(function (type) { return ([NU, AL, SA].indexOf(type) !== -1 ? ID : type); }); 747 } 748 var forbiddenBreakpoints = options.wordBreak === 'keep-all' 749 ? isLetterNumber.map(function (letterNumber, i) { 750 return letterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff; 751 }) 752 : undefined; 753 return [indicies, classTypes, forbiddenBreakpoints]; 754 }; 755 var Break = /** @class */ (function () { 756 function Break(codePoints, lineBreak, start, end) { 757 this.codePoints = codePoints; 758 this.required = lineBreak === BREAK_MANDATORY; 759 this.start = start; 760 this.end = end; 761 } 762 Break.prototype.slice = function () { 763 return fromCodePoint.apply(void 0, this.codePoints.slice(this.start, this.end)); 764 }; 765 return Break; 766 }()); 767 var LineBreaker = function (str, options) { 768 var codePoints = toCodePoints(str); 769 var _a = cssFormattedClasses(codePoints, options), indicies = _a[0], classTypes = _a[1], forbiddenBreakpoints = _a[2]; 770 var length = codePoints.length; 771 var lastEnd = 0; 772 var nextIndex = 0; 773 return { 774 next: function () { 775 if (nextIndex >= length) { 776 return { done: true, value: null }; 777 } 778 var lineBreak = BREAK_NOT_ALLOWED; 779 while (nextIndex < length && 780 (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) === 781 BREAK_NOT_ALLOWED) { } 782 if (lineBreak !== BREAK_NOT_ALLOWED || nextIndex === length) { 783 var value = new Break(codePoints, lineBreak, lastEnd, nextIndex); 784 lastEnd = nextIndex; 785 return { value: value, done: false }; 786 } 787 return { done: true, value: null }; 788 }, 789 }; 790 }; 791 792 // https://www.w3.org/TR/css-syntax-3 793 var TokenType; 794 (function (TokenType) { 795 TokenType[TokenType["STRING_TOKEN"] = 0] = "STRING_TOKEN"; 796 TokenType[TokenType["BAD_STRING_TOKEN"] = 1] = "BAD_STRING_TOKEN"; 797 TokenType[TokenType["LEFT_PARENTHESIS_TOKEN"] = 2] = "LEFT_PARENTHESIS_TOKEN"; 798 TokenType[TokenType["RIGHT_PARENTHESIS_TOKEN"] = 3] = "RIGHT_PARENTHESIS_TOKEN"; 799 TokenType[TokenType["COMMA_TOKEN"] = 4] = "COMMA_TOKEN"; 800 TokenType[TokenType["HASH_TOKEN"] = 5] = "HASH_TOKEN"; 801 TokenType[TokenType["DELIM_TOKEN"] = 6] = "DELIM_TOKEN"; 802 TokenType[TokenType["AT_KEYWORD_TOKEN"] = 7] = "AT_KEYWORD_TOKEN"; 803 TokenType[TokenType["PREFIX_MATCH_TOKEN"] = 8] = "PREFIX_MATCH_TOKEN"; 804 TokenType[TokenType["DASH_MATCH_TOKEN"] = 9] = "DASH_MATCH_TOKEN"; 805 TokenType[TokenType["INCLUDE_MATCH_TOKEN"] = 10] = "INCLUDE_MATCH_TOKEN"; 806 TokenType[TokenType["LEFT_CURLY_BRACKET_TOKEN"] = 11] = "LEFT_CURLY_BRACKET_TOKEN"; 807 TokenType[TokenType["RIGHT_CURLY_BRACKET_TOKEN"] = 12] = "RIGHT_CURLY_BRACKET_TOKEN"; 808 TokenType[TokenType["SUFFIX_MATCH_TOKEN"] = 13] = "SUFFIX_MATCH_TOKEN"; 809 TokenType[TokenType["SUBSTRING_MATCH_TOKEN"] = 14] = "SUBSTRING_MATCH_TOKEN"; 810 TokenType[TokenType["DIMENSION_TOKEN"] = 15] = "DIMENSION_TOKEN"; 811 TokenType[TokenType["PERCENTAGE_TOKEN"] = 16] = "PERCENTAGE_TOKEN"; 812 TokenType[TokenType["NUMBER_TOKEN"] = 17] = "NUMBER_TOKEN"; 813 TokenType[TokenType["FUNCTION"] = 18] = "FUNCTION"; 814 TokenType[TokenType["FUNCTION_TOKEN"] = 19] = "FUNCTION_TOKEN"; 815 TokenType[TokenType["IDENT_TOKEN"] = 20] = "IDENT_TOKEN"; 816 TokenType[TokenType["COLUMN_TOKEN"] = 21] = "COLUMN_TOKEN"; 817 TokenType[TokenType["URL_TOKEN"] = 22] = "URL_TOKEN"; 818 TokenType[TokenType["BAD_URL_TOKEN"] = 23] = "BAD_URL_TOKEN"; 819 TokenType[TokenType["CDC_TOKEN"] = 24] = "CDC_TOKEN"; 820 TokenType[TokenType["CDO_TOKEN"] = 25] = "CDO_TOKEN"; 821 TokenType[TokenType["COLON_TOKEN"] = 26] = "COLON_TOKEN"; 822 TokenType[TokenType["SEMICOLON_TOKEN"] = 27] = "SEMICOLON_TOKEN"; 823 TokenType[TokenType["LEFT_SQUARE_BRACKET_TOKEN"] = 28] = "LEFT_SQUARE_BRACKET_TOKEN"; 824 TokenType[TokenType["RIGHT_SQUARE_BRACKET_TOKEN"] = 29] = "RIGHT_SQUARE_BRACKET_TOKEN"; 825 TokenType[TokenType["UNICODE_RANGE_TOKEN"] = 30] = "UNICODE_RANGE_TOKEN"; 826 TokenType[TokenType["WHITESPACE_TOKEN"] = 31] = "WHITESPACE_TOKEN"; 827 TokenType[TokenType["EOF_TOKEN"] = 32] = "EOF_TOKEN"; 828 })(TokenType || (TokenType = {})); 829 var FLAG_UNRESTRICTED = 1 << 0; 830 var FLAG_ID = 1 << 1; 831 var FLAG_INTEGER = 1 << 2; 832 var FLAG_NUMBER = 1 << 3; 833 var LINE_FEED = 0x000a; 834 var SOLIDUS = 0x002f; 835 var REVERSE_SOLIDUS = 0x005c; 836 var CHARACTER_TABULATION = 0x0009; 837 var SPACE$1 = 0x0020; 838 var QUOTATION_MARK = 0x0022; 839 var EQUALS_SIGN = 0x003d; 840 var NUMBER_SIGN = 0x0023; 841 var DOLLAR_SIGN = 0x0024; 842 var PERCENTAGE_SIGN = 0x0025; 843 var APOSTROPHE = 0x0027; 844 var LEFT_PARENTHESIS = 0x0028; 845 var RIGHT_PARENTHESIS = 0x0029; 846 var LOW_LINE = 0x005f; 847 var HYPHEN_MINUS = 0x002d; 848 var EXCLAMATION_MARK = 0x0021; 849 var LESS_THAN_SIGN = 0x003c; 850 var GREATER_THAN_SIGN = 0x003e; 851 var COMMERCIAL_AT = 0x0040; 852 var LEFT_SQUARE_BRACKET = 0x005b; 853 var RIGHT_SQUARE_BRACKET = 0x005d; 854 var CIRCUMFLEX_ACCENT = 0x003d; 855 var LEFT_CURLY_BRACKET = 0x007b; 856 var QUESTION_MARK = 0x003f; 857 var RIGHT_CURLY_BRACKET = 0x007d; 858 var VERTICAL_LINE = 0x007c; 859 var TILDE = 0x007e; 860 var CONTROL = 0x0080; 861 var REPLACEMENT_CHARACTER = 0xfffd; 862 var ASTERISK = 0x002a; 863 var PLUS_SIGN = 0x002b; 864 var COMMA = 0x002c; 865 var COLON = 0x003a; 866 var SEMICOLON = 0x003b; 867 var FULL_STOP = 0x002e; 868 var NULL = 0x0000; 869 var BACKSPACE = 0x0008; 870 var LINE_TABULATION = 0x000b; 871 var SHIFT_OUT = 0x000e; 872 var INFORMATION_SEPARATOR_ONE = 0x001f; 873 var DELETE = 0x007f; 874 var EOF = -1; 875 var ZERO = 0x0030; 876 var a = 0x0061; 877 var e = 0x0065; 878 var f = 0x0066; 879 var u = 0x0075; 880 var z = 0x007a; 881 var A = 0x0041; 882 var E = 0x0045; 883 var F = 0x0046; 884 var U = 0x0055; 885 var Z = 0x005a; 886 var isDigit = function (codePoint) { return codePoint >= ZERO && codePoint <= 0x0039; }; 887 var isSurrogateCodePoint = function (codePoint) { return codePoint >= 0xd800 && codePoint <= 0xdfff; }; 888 var isHex = function (codePoint) { 889 return isDigit(codePoint) || (codePoint >= A && codePoint <= F) || (codePoint >= a && codePoint <= f); 890 }; 891 var isLowerCaseLetter = function (codePoint) { return codePoint >= a && codePoint <= z; }; 892 var isUpperCaseLetter = function (codePoint) { return codePoint >= A && codePoint <= Z; }; 893 var isLetter = function (codePoint) { return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint); }; 894 var isNonASCIICodePoint = function (codePoint) { return codePoint >= CONTROL; }; 895 var isWhiteSpace = function (codePoint) { 896 return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE$1; 897 }; 898 var isNameStartCodePoint = function (codePoint) { 899 return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE; 900 }; 901 var isNameCodePoint = function (codePoint) { 902 return isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS; 903 }; 904 var isNonPrintableCodePoint = function (codePoint) { 905 return ((codePoint >= NULL && codePoint <= BACKSPACE) || 906 codePoint === LINE_TABULATION || 907 (codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) || 908 codePoint === DELETE); 909 }; 910 var isValidEscape = function (c1, c2) { 911 if (c1 !== REVERSE_SOLIDUS) { 912 return false; 913 } 914 return c2 !== LINE_FEED; 915 }; 916 var isIdentifierStart = function (c1, c2, c3) { 917 if (c1 === HYPHEN_MINUS) { 918 return isNameStartCodePoint(c2) || isValidEscape(c2, c3); 919 } 920 else if (isNameStartCodePoint(c1)) { 921 return true; 922 } 923 else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) { 924 return true; 925 } 926 return false; 927 }; 928 var isNumberStart = function (c1, c2, c3) { 929 if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) { 930 if (isDigit(c2)) { 931 return true; 932 } 933 return c2 === FULL_STOP && isDigit(c3); 934 } 935 if (c1 === FULL_STOP) { 936 return isDigit(c2); 937 } 938 return isDigit(c1); 939 }; 940 var stringToNumber = function (codePoints) { 941 var c = 0; 942 var sign = 1; 943 if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) { 944 if (codePoints[c] === HYPHEN_MINUS) { 945 sign = -1; 946 } 947 c++; 948 } 949 var integers = []; 950 while (isDigit(codePoints[c])) { 951 integers.push(codePoints[c++]); 952 } 953 var int = integers.length ? parseInt(fromCodePoint.apply(void 0, integers), 10) : 0; 954 if (codePoints[c] === FULL_STOP) { 955 c++; 956 } 957 var fraction = []; 958 while (isDigit(codePoints[c])) { 959 fraction.push(codePoints[c++]); 960 } 961 var fracd = fraction.length; 962 var frac = fracd ? parseInt(fromCodePoint.apply(void 0, fraction), 10) : 0; 963 if (codePoints[c] === E || codePoints[c] === e) { 964 c++; 965 } 966 var expsign = 1; 967 if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) { 968 if (codePoints[c] === HYPHEN_MINUS) { 969 expsign = -1; 970 } 971 c++; 972 } 973 var exponent = []; 974 while (isDigit(codePoints[c])) { 975 exponent.push(codePoints[c++]); 976 } 977 var exp = exponent.length ? parseInt(fromCodePoint.apply(void 0, exponent), 10) : 0; 978 return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp); 979 }; 980 var LEFT_PARENTHESIS_TOKEN = { 981 type: TokenType.LEFT_PARENTHESIS_TOKEN 982 }; 983 var RIGHT_PARENTHESIS_TOKEN = { 984 type: TokenType.RIGHT_PARENTHESIS_TOKEN 985 }; 986 var COMMA_TOKEN = { type: TokenType.COMMA_TOKEN }; 987 var SUFFIX_MATCH_TOKEN = { type: TokenType.SUFFIX_MATCH_TOKEN }; 988 var PREFIX_MATCH_TOKEN = { type: TokenType.PREFIX_MATCH_TOKEN }; 989 var COLUMN_TOKEN = { type: TokenType.COLUMN_TOKEN }; 990 var DASH_MATCH_TOKEN = { type: TokenType.DASH_MATCH_TOKEN }; 991 var INCLUDE_MATCH_TOKEN = { type: TokenType.INCLUDE_MATCH_TOKEN }; 992 var LEFT_CURLY_BRACKET_TOKEN = { 993 type: TokenType.LEFT_CURLY_BRACKET_TOKEN 994 }; 995 var RIGHT_CURLY_BRACKET_TOKEN = { 996 type: TokenType.RIGHT_CURLY_BRACKET_TOKEN 997 }; 998 var SUBSTRING_MATCH_TOKEN = { type: TokenType.SUBSTRING_MATCH_TOKEN }; 999 var BAD_URL_TOKEN = { type: TokenType.BAD_URL_TOKEN }; 1000 var BAD_STRING_TOKEN = { type: TokenType.BAD_STRING_TOKEN }; 1001 var CDO_TOKEN = { type: TokenType.CDO_TOKEN }; 1002 var CDC_TOKEN = { type: TokenType.CDC_TOKEN }; 1003 var COLON_TOKEN = { type: TokenType.COLON_TOKEN }; 1004 var SEMICOLON_TOKEN = { type: TokenType.SEMICOLON_TOKEN }; 1005 var LEFT_SQUARE_BRACKET_TOKEN = { 1006 type: TokenType.LEFT_SQUARE_BRACKET_TOKEN 1007 }; 1008 var RIGHT_SQUARE_BRACKET_TOKEN = { 1009 type: TokenType.RIGHT_SQUARE_BRACKET_TOKEN 1010 }; 1011 var WHITESPACE_TOKEN = { type: TokenType.WHITESPACE_TOKEN }; 1012 var EOF_TOKEN = { type: TokenType.EOF_TOKEN }; 1013 var Tokenizer = /** @class */ (function () { 1014 function Tokenizer() { 1015 this._value = []; 1016 } 1017 Tokenizer.prototype.write = function (chunk) { 1018 this._value = this._value.concat(toCodePoints(chunk)); 1019 }; 1020 Tokenizer.prototype.read = function () { 1021 var tokens = []; 1022 var token = this.consumeToken(); 1023 while (token !== EOF_TOKEN) { 1024 tokens.push(token); 1025 token = this.consumeToken(); 1026 } 1027 return tokens; 1028 }; 1029 Tokenizer.prototype.consumeToken = function () { 1030 var codePoint = this.consumeCodePoint(); 1031 switch (codePoint) { 1032 case QUOTATION_MARK: 1033 return this.consumeStringToken(QUOTATION_MARK); 1034 case NUMBER_SIGN: 1035 var c1 = this.peekCodePoint(0); 1036 var c2 = this.peekCodePoint(1); 1037 var c3 = this.peekCodePoint(2); 1038 if (isNameCodePoint(c1) || isValidEscape(c2, c3)) { 1039 var flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED; 1040 var value = this.consumeName(); 1041 return { type: TokenType.HASH_TOKEN, value: value, flags: flags }; 1042 } 1043 break; 1044 case DOLLAR_SIGN: 1045 if (this.peekCodePoint(0) === EQUALS_SIGN) { 1046 this.consumeCodePoint(); 1047 return SUFFIX_MATCH_TOKEN; 1048 } 1049 break; 1050 case APOSTROPHE: 1051 return this.consumeStringToken(APOSTROPHE); 1052 case LEFT_PARENTHESIS: 1053 return LEFT_PARENTHESIS_TOKEN; 1054 case RIGHT_PARENTHESIS: 1055 return RIGHT_PARENTHESIS_TOKEN; 1056 case ASTERISK: 1057 if (this.peekCodePoint(0) === EQUALS_SIGN) { 1058 this.consumeCodePoint(); 1059 return SUBSTRING_MATCH_TOKEN; 1060 } 1061 break; 1062 case PLUS_SIGN: 1063 if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) { 1064 this.reconsumeCodePoint(codePoint); 1065 return this.consumeNumericToken(); 1066 } 1067 break; 1068 case COMMA: 1069 return COMMA_TOKEN; 1070 case HYPHEN_MINUS: 1071 var e1 = codePoint; 1072 var e2 = this.peekCodePoint(0); 1073 var e3 = this.peekCodePoint(1); 1074 if (isNumberStart(e1, e2, e3)) { 1075 this.reconsumeCodePoint(codePoint); 1076 return this.consumeNumericToken(); 1077 } 1078 if (isIdentifierStart(e1, e2, e3)) { 1079 this.reconsumeCodePoint(codePoint); 1080 return this.consumeIdentLikeToken(); 1081 } 1082 if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) { 1083 this.consumeCodePoint(); 1084 this.consumeCodePoint(); 1085 return CDC_TOKEN; 1086 } 1087 break; 1088 case FULL_STOP: 1089 if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) { 1090 this.reconsumeCodePoint(codePoint); 1091 return this.consumeNumericToken(); 1092 } 1093 break; 1094 case SOLIDUS: 1095 if (this.peekCodePoint(0) === ASTERISK) { 1096 this.consumeCodePoint(); 1097 while (true) { 1098 var c = this.consumeCodePoint(); 1099 if (c === ASTERISK) { 1100 c = this.consumeCodePoint(); 1101 if (c === SOLIDUS) { 1102 return this.consumeToken(); 1103 } 1104 } 1105 if (c === EOF) { 1106 return this.consumeToken(); 1107 } 1108 } 1109 } 1110 break; 1111 case COLON: 1112 return COLON_TOKEN; 1113 case SEMICOLON: 1114 return SEMICOLON_TOKEN; 1115 case LESS_THAN_SIGN: 1116 if (this.peekCodePoint(0) === EXCLAMATION_MARK && 1117 this.peekCodePoint(1) === HYPHEN_MINUS && 1118 this.peekCodePoint(2) === HYPHEN_MINUS) { 1119 this.consumeCodePoint(); 1120 this.consumeCodePoint(); 1121 return CDO_TOKEN; 1122 } 1123 break; 1124 case COMMERCIAL_AT: 1125 var a1 = this.peekCodePoint(0); 1126 var a2 = this.peekCodePoint(1); 1127 var a3 = this.peekCodePoint(2); 1128 if (isIdentifierStart(a1, a2, a3)) { 1129 var value = this.consumeName(); 1130 return { type: TokenType.AT_KEYWORD_TOKEN, value: value }; 1131 } 1132 break; 1133 case LEFT_SQUARE_BRACKET: 1134 return LEFT_SQUARE_BRACKET_TOKEN; 1135 case REVERSE_SOLIDUS: 1136 if (isValidEscape(codePoint, this.peekCodePoint(0))) { 1137 this.reconsumeCodePoint(codePoint); 1138 return this.consumeIdentLikeToken(); 1139 } 1140 break; 1141 case RIGHT_SQUARE_BRACKET: 1142 return RIGHT_SQUARE_BRACKET_TOKEN; 1143 case CIRCUMFLEX_ACCENT: 1144 if (this.peekCodePoint(0) === EQUALS_SIGN) { 1145 this.consumeCodePoint(); 1146 return PREFIX_MATCH_TOKEN; 1147 } 1148 break; 1149 case LEFT_CURLY_BRACKET: 1150 return LEFT_CURLY_BRACKET_TOKEN; 1151 case RIGHT_CURLY_BRACKET: 1152 return RIGHT_CURLY_BRACKET_TOKEN; 1153 case u: 1154 case U: 1155 var u1 = this.peekCodePoint(0); 1156 var u2 = this.peekCodePoint(1); 1157 if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) { 1158 this.consumeCodePoint(); 1159 this.consumeUnicodeRangeToken(); 1160 } 1161 this.reconsumeCodePoint(codePoint); 1162 return this.consumeIdentLikeToken(); 1163 case VERTICAL_LINE: 1164 if (this.peekCodePoint(0) === EQUALS_SIGN) { 1165 this.consumeCodePoint(); 1166 return DASH_MATCH_TOKEN; 1167 } 1168 if (this.peekCodePoint(0) === VERTICAL_LINE) { 1169 this.consumeCodePoint(); 1170 return COLUMN_TOKEN; 1171 } 1172 break; 1173 case TILDE: 1174 if (this.peekCodePoint(0) === EQUALS_SIGN) { 1175 this.consumeCodePoint(); 1176 return INCLUDE_MATCH_TOKEN; 1177 } 1178 break; 1179 case EOF: 1180 return EOF_TOKEN; 1181 } 1182 if (isWhiteSpace(codePoint)) { 1183 this.consumeWhiteSpace(); 1184 return WHITESPACE_TOKEN; 1185 } 1186 if (isDigit(codePoint)) { 1187 this.reconsumeCodePoint(codePoint); 1188 return this.consumeNumericToken(); 1189 } 1190 if (isNameStartCodePoint(codePoint)) { 1191 this.reconsumeCodePoint(codePoint); 1192 return this.consumeIdentLikeToken(); 1193 } 1194 return { type: TokenType.DELIM_TOKEN, value: fromCodePoint(codePoint) }; 1195 }; 1196 Tokenizer.prototype.consumeCodePoint = function () { 1197 var value = this._value.shift(); 1198 return typeof value === 'undefined' ? -1 : value; 1199 }; 1200 Tokenizer.prototype.reconsumeCodePoint = function (codePoint) { 1201 this._value.unshift(codePoint); 1202 }; 1203 Tokenizer.prototype.peekCodePoint = function (delta) { 1204 if (delta >= this._value.length) { 1205 return -1; 1206 } 1207 return this._value[delta]; 1208 }; 1209 Tokenizer.prototype.consumeUnicodeRangeToken = function () { 1210 var digits = []; 1211 var codePoint = this.consumeCodePoint(); 1212 while (isHex(codePoint) && digits.length < 6) { 1213 digits.push(codePoint); 1214 codePoint = this.consumeCodePoint(); 1215 } 1216 var questionMarks = false;
vendor: 21,493 bytes, lines 1217-1728
1217 while (codePoint === QUESTION_MARK && digits.length < 6) { 1218 digits.push(codePoint); 1219 codePoint = this.consumeCodePoint(); 1220 questionMarks = true; 1221 } 1222 if (questionMarks) { 1223 var start_1 = parseInt(fromCodePoint.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? ZERO : digit); })), 16); 1224 var end = parseInt(fromCodePoint.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? F : digit); })), 16); 1225 return { type: TokenType.UNICODE_RANGE_TOKEN, start: start_1, end: end }; 1226 } 1227 var start = parseInt(fromCodePoint.apply(void 0, digits), 16); 1228 if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) { 1229 this.consumeCodePoint(); 1230 codePoint = this.consumeCodePoint(); 1231 var endDigits = []; 1232 while (isHex(codePoint) && endDigits.length < 6) { 1233 endDigits.push(codePoint); 1234 codePoint = this.consumeCodePoint(); 1235 } 1236 var end = parseInt(fromCodePoint.apply(void 0, endDigits), 16); 1237 return { type: TokenType.UNICODE_RANGE_TOKEN, start: start, end: end }; 1238 } 1239 else { 1240 return { type: TokenType.UNICODE_RANGE_TOKEN, start: start, end: start }; 1241 } 1242 }; 1243 Tokenizer.prototype.consumeIdentLikeToken = function () { 1244 var value = this.consumeName(); 1245 if (value.toLowerCase() === 'url' && this.peekCodePoint(0) === LEFT_PARENTHESIS) { 1246 this.consumeCodePoint(); 1247 return this.consumeUrlToken(); 1248 } 1249 else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) { 1250 this.consumeCodePoint(); 1251 return { type: TokenType.FUNCTION_TOKEN, value: value }; 1252 } 1253 return { type: TokenType.IDENT_TOKEN, value: value }; 1254 }; 1255 Tokenizer.prototype.consumeUrlToken = function () { 1256 var value = []; 1257 this.consumeWhiteSpace(); 1258 if (this.peekCodePoint(0) === EOF) { 1259 return { type: TokenType.URL_TOKEN, value: '' }; 1260 } 1261 var next = this.peekCodePoint(0); 1262 if (next === APOSTROPHE || next === QUOTATION_MARK) { 1263 var stringToken = this.consumeStringToken(this.consumeCodePoint()); 1264 if (stringToken.type === TokenType.STRING_TOKEN) { 1265 this.consumeWhiteSpace(); 1266 if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) { 1267 this.consumeCodePoint(); 1268 return { type: TokenType.URL_TOKEN, value: stringToken.value }; 1269 } 1270 } 1271 this.consumeBadUrlRemnants(); 1272 return BAD_URL_TOKEN; 1273 } 1274 while (true) { 1275 var codePoint = this.consumeCodePoint(); 1276 if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) { 1277 return { type: TokenType.URL_TOKEN, value: fromCodePoint.apply(void 0, value) }; 1278 } 1279 else if (isWhiteSpace(codePoint)) { 1280 this.consumeWhiteSpace(); 1281 if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) { 1282 this.consumeCodePoint(); 1283 return { type: TokenType.URL_TOKEN, value: fromCodePoint.apply(void 0, value) }; 1284 } 1285 this.consumeBadUrlRemnants(); 1286 return BAD_URL_TOKEN; 1287 } 1288 else if (codePoint === QUOTATION_MARK || 1289 codePoint === APOSTROPHE || 1290 codePoint === LEFT_PARENTHESIS || 1291 isNonPrintableCodePoint(codePoint)) { 1292 this.consumeBadUrlRemnants(); 1293 return BAD_URL_TOKEN; 1294 } 1295 else if (codePoint === REVERSE_SOLIDUS) { 1296 if (isValidEscape(codePoint, this.peekCodePoint(0))) { 1297 value.push(this.consumeEscapedCodePoint()); 1298 } 1299 else { 1300 this.consumeBadUrlRemnants(); 1301 return BAD_URL_TOKEN; 1302 } 1303 } 1304 else { 1305 value.push(codePoint); 1306 } 1307 } 1308 }; 1309 Tokenizer.prototype.consumeWhiteSpace = function () { 1310 while (isWhiteSpace(this.peekCodePoint(0))) { 1311 this.consumeCodePoint(); 1312 } 1313 }; 1314 Tokenizer.prototype.consumeBadUrlRemnants = function () { 1315 while (true) { 1316 var codePoint = this.consumeCodePoint(); 1317 if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) { 1318 return; 1319 } 1320 if (isValidEscape(codePoint, this.peekCodePoint(0))) { 1321 this.consumeEscapedCodePoint(); 1322 } 1323 } 1324 }; 1325 Tokenizer.prototype.consumeStringSlice = function (count) { 1326 var SLICE_STACK_SIZE = 60000; 1327 var value = ''; 1328 while (count > 0) { 1329 var amount = Math.min(SLICE_STACK_SIZE, count); 1330 value += fromCodePoint.apply(void 0, this._value.splice(0, amount)); 1331 count -= amount; 1332 } 1333 this._value.shift(); 1334 return value; 1335 }; 1336 Tokenizer.prototype.consumeStringToken = function (endingCodePoint) { 1337 var value = ''; 1338 var i = 0; 1339 do { 1340 var codePoint = this._value[i]; 1341 if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) { 1342 value += this.consumeStringSlice(i); 1343 return { type: TokenType.STRING_TOKEN, value: value }; 1344 } 1345 if (codePoint === LINE_FEED) { 1346 this._value.splice(0, i); 1347 return BAD_STRING_TOKEN; 1348 } 1349 if (codePoint === REVERSE_SOLIDUS) { 1350 var next = this._value[i + 1]; 1351 if (next !== EOF && next !== undefined) { 1352 if (next === LINE_FEED) { 1353 value += this.consumeStringSlice(i); 1354 i = -1; 1355 this._value.shift(); 1356 } 1357 else if (isValidEscape(codePoint, next)) { 1358 value += this.consumeStringSlice(i); 1359 value += fromCodePoint(this.consumeEscapedCodePoint()); 1360 i = -1; 1361 } 1362 } 1363 } 1364 i++; 1365 } while (true); 1366 }; 1367 Tokenizer.prototype.consumeNumber = function () { 1368 var repr = []; 1369 var type = FLAG_INTEGER; 1370 var c1 = this.peekCodePoint(0); 1371 if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) { 1372 repr.push(this.consumeCodePoint()); 1373 } 1374 while (isDigit(this.peekCodePoint(0))) { 1375 repr.push(this.consumeCodePoint()); 1376 } 1377 c1 = this.peekCodePoint(0); 1378 var c2 = this.peekCodePoint(1); 1379 if (c1 === FULL_STOP && isDigit(c2)) { 1380 repr.push(this.consumeCodePoint(), this.consumeCodePoint()); 1381 type = FLAG_NUMBER; 1382 while (isDigit(this.peekCodePoint(0))) { 1383 repr.push(this.consumeCodePoint()); 1384 } 1385 } 1386 c1 = this.peekCodePoint(0); 1387 c2 = this.peekCodePoint(1); 1388 var c3 = this.peekCodePoint(2); 1389 if ((c1 === E || c1 === e) && (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) || isDigit(c2))) { 1390 repr.push(this.consumeCodePoint(), this.consumeCodePoint()); 1391 type = FLAG_NUMBER; 1392 while (isDigit(this.peekCodePoint(0))) { 1393 repr.push(this.consumeCodePoint()); 1394 } 1395 } 1396 return [stringToNumber(repr), type]; 1397 }; 1398 Tokenizer.prototype.consumeNumericToken = function () { 1399 var _a = this.consumeNumber(), number = _a[0], flags = _a[1]; 1400 var c1 = this.peekCodePoint(0); 1401 var c2 = this.peekCodePoint(1); 1402 var c3 = this.peekCodePoint(2); 1403 if (isIdentifierStart(c1, c2, c3)) { 1404 var unit = this.consumeName(); 1405 return { type: TokenType.DIMENSION_TOKEN, number: number, flags: flags, unit: unit }; 1406 } 1407 if (c1 === PERCENTAGE_SIGN) { 1408 this.consumeCodePoint(); 1409 return { type: TokenType.PERCENTAGE_TOKEN, number: number, flags: flags }; 1410 } 1411 return { type: TokenType.NUMBER_TOKEN, number: number, flags: flags }; 1412 }; 1413 Tokenizer.prototype.consumeEscapedCodePoint = function () { 1414 var codePoint = this.consumeCodePoint(); 1415 if (isHex(codePoint)) { 1416 var hex = fromCodePoint(codePoint); 1417 while (isHex(this.peekCodePoint(0)) && hex.length < 6) { 1418 hex += fromCodePoint(this.consumeCodePoint()); 1419 } 1420 if (isWhiteSpace(this.peekCodePoint(0))) { 1421 this.consumeCodePoint(); 1422 } 1423 var hexCodePoint = parseInt(hex, 16); 1424 if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 0x10ffff) { 1425 return REPLACEMENT_CHARACTER; 1426 } 1427 return hexCodePoint; 1428 } 1429 if (codePoint === EOF) { 1430 return REPLACEMENT_CHARACTER; 1431 } 1432 return codePoint; 1433 }; 1434 Tokenizer.prototype.consumeName = function () { 1435 var result = ''; 1436 while (true) { 1437 var codePoint = this.consumeCodePoint(); 1438 if (isNameCodePoint(codePoint)) { 1439 result += fromCodePoint(codePoint); 1440 } 1441 else if (isValidEscape(codePoint, this.peekCodePoint(0))) { 1442 result += fromCodePoint(this.consumeEscapedCodePoint()); 1443 } 1444 else { 1445 this.reconsumeCodePoint(codePoint); 1446 return result; 1447 } 1448 } 1449 }; 1450 return Tokenizer; 1451 }()); 1452 1453 var Parser = /** @class */ (function () { 1454 function Parser(tokens) { 1455 this._tokens = tokens; 1456 } 1457 Parser.create = function (value) { 1458 var tokenizer = new Tokenizer(); 1459 tokenizer.write(value); 1460 return new Parser(tokenizer.read()); 1461 }; 1462 Parser.parseValue = function (value) { 1463 return Parser.create(value).parseComponentValue(); 1464 }; 1465 Parser.parseValues = function (value) { 1466 return Parser.create(value).parseComponentValues(); 1467 }; 1468 Parser.prototype.parseComponentValue = function () { 1469 var token = this.consumeToken(); 1470 while (token.type === TokenType.WHITESPACE_TOKEN) { 1471 token = this.consumeToken(); 1472 } 1473 if (token.type === TokenType.EOF_TOKEN) { 1474 throw new SyntaxError("Error parsing CSS component value, unexpected EOF"); 1475 } 1476 this.reconsumeToken(token); 1477 var value = this.consumeComponentValue(); 1478 do { 1479 token = this.consumeToken(); 1480 } while (token.type === TokenType.WHITESPACE_TOKEN); 1481 if (token.type === TokenType.EOF_TOKEN) { 1482 return value; 1483 } 1484 throw new SyntaxError("Error parsing CSS component value, multiple values found when expecting only one"); 1485 }; 1486 Parser.prototype.parseComponentValues = function () { 1487 var values = []; 1488 while (true) { 1489 var value = this.consumeComponentValue(); 1490 if (value.type === TokenType.EOF_TOKEN) { 1491 return values; 1492 } 1493 values.push(value); 1494 values.push(); 1495 } 1496 }; 1497 Parser.prototype.consumeComponentValue = function () { 1498 var token = this.consumeToken(); 1499 switch (token.type) { 1500 case TokenType.LEFT_CURLY_BRACKET_TOKEN: 1501 case TokenType.LEFT_SQUARE_BRACKET_TOKEN: 1502 case TokenType.LEFT_PARENTHESIS_TOKEN: 1503 return this.consumeSimpleBlock(token.type); 1504 case TokenType.FUNCTION_TOKEN: 1505 return this.consumeFunction(token); 1506 } 1507 return token; 1508 }; 1509 Parser.prototype.consumeSimpleBlock = function (type) { 1510 var block = { type: type, values: [] }; 1511 var token = this.consumeToken(); 1512 while (true) { 1513 if (token.type === TokenType.EOF_TOKEN || isEndingTokenFor(token, type)) { 1514 return block; 1515 } 1516 this.reconsumeToken(token); 1517 block.values.push(this.consumeComponentValue()); 1518 token = this.consumeToken(); 1519 } 1520 }; 1521 Parser.prototype.consumeFunction = function (functionToken) { 1522 var cssFunction = { 1523 name: functionToken.value, 1524 values: [], 1525 type: TokenType.FUNCTION 1526 }; 1527 while (true) { 1528 var token = this.consumeToken(); 1529 if (token.type === TokenType.EOF_TOKEN || token.type === TokenType.RIGHT_PARENTHESIS_TOKEN) { 1530 return cssFunction; 1531 } 1532 this.reconsumeToken(token); 1533 cssFunction.values.push(this.consumeComponentValue()); 1534 } 1535 }; 1536 Parser.prototype.consumeToken = function () { 1537 var token = this._tokens.shift(); 1538 return typeof token === 'undefined' ? EOF_TOKEN : token; 1539 }; 1540 Parser.prototype.reconsumeToken = function (token) { 1541 this._tokens.unshift(token); 1542 }; 1543 return Parser; 1544 }()); 1545 var isDimensionToken = function (token) { return token.type === TokenType.DIMENSION_TOKEN; }; 1546 var isNumberToken = function (token) { return token.type === TokenType.NUMBER_TOKEN; }; 1547 var isIdentToken = function (token) { return token.type === TokenType.IDENT_TOKEN; }; 1548 var isStringToken = function (token) { return token.type === TokenType.STRING_TOKEN; }; 1549 var isIdentWithValue = function (token, value) { 1550 return isIdentToken(token) && token.value === value; 1551 }; 1552 var nonWhiteSpace = function (token) { return token.type !== TokenType.WHITESPACE_TOKEN; }; 1553 var nonFunctionArgSeparator = function (token) { 1554 return token.type !== TokenType.WHITESPACE_TOKEN && token.type !== TokenType.COMMA_TOKEN; 1555 }; 1556 var parseFunctionArgs = function (tokens) { 1557 var args = []; 1558 var arg = []; 1559 tokens.forEach(function (token) { 1560 if (token.type === TokenType.COMMA_TOKEN) { 1561 if (arg.length === 0) { 1562 throw new Error("Error parsing function args, zero tokens for arg"); 1563 } 1564 args.push(arg); 1565 arg = []; 1566 return; 1567 } 1568 if (token.type !== TokenType.WHITESPACE_TOKEN) { 1569 arg.push(token); 1570 } 1571 }); 1572 if (arg.length) { 1573 args.push(arg); 1574 } 1575 return args; 1576 }; 1577 var isEndingTokenFor = function (token, type) { 1578 if (type === TokenType.LEFT_CURLY_BRACKET_TOKEN && token.type === TokenType.RIGHT_CURLY_BRACKET_TOKEN) { 1579 return true; 1580 } 1581 if (type === TokenType.LEFT_SQUARE_BRACKET_TOKEN && token.type === TokenType.RIGHT_SQUARE_BRACKET_TOKEN) { 1582 return true; 1583 } 1584 return type === TokenType.LEFT_PARENTHESIS_TOKEN && token.type === TokenType.RIGHT_PARENTHESIS_TOKEN; 1585 }; 1586 1587 var isLength = function (token) { 1588 return token.type === TokenType.NUMBER_TOKEN || token.type === TokenType.DIMENSION_TOKEN; 1589 }; 1590 1591 var isLengthPercentage = function (token) { 1592 return token.type === TokenType.PERCENTAGE_TOKEN || isLength(token); 1593 }; 1594 var parseLengthPercentageTuple = function (tokens) { 1595 return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]]; 1596 }; 1597 var ZERO_LENGTH = { 1598 type: TokenType.NUMBER_TOKEN, 1599 number: 0, 1600 flags: FLAG_INTEGER 1601 }; 1602 var FIFTY_PERCENT = { 1603 type: TokenType.PERCENTAGE_TOKEN, 1604 number: 50, 1605 flags: FLAG_INTEGER 1606 }; 1607 var HUNDRED_PERCENT = { 1608 type: TokenType.PERCENTAGE_TOKEN, 1609 number: 100, 1610 flags: FLAG_INTEGER 1611 }; 1612 var getAbsoluteValueForTuple = function (tuple, width, height) { 1613 var x = tuple[0], y = tuple[1]; 1614 return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)]; 1615 }; 1616 var getAbsoluteValue = function (token, parent) { 1617 if (token.type === TokenType.PERCENTAGE_TOKEN) { 1618 return (token.number / 100) * parent; 1619 } 1620 if (isDimensionToken(token)) { 1621 switch (token.unit) { 1622 case 'rem': 1623 case 'em': 1624 return 16 * token.number; // TODO use correct font-size 1625 case 'px': 1626 default: 1627 return token.number; 1628 } 1629 } 1630 return token.number; 1631 }; 1632 1633 var DEG = 'deg'; 1634 var GRAD = 'grad'; 1635 var RAD = 'rad'; 1636 var TURN = 'turn'; 1637 var angle = { 1638 name: 'angle', 1639 parse: function (value) { 1640 if (value.type === TokenType.DIMENSION_TOKEN) { 1641 switch (value.unit) { 1642 case DEG: 1643 return (Math.PI * value.number) / 180; 1644 case GRAD: 1645 return (Math.PI / 200) * value.number; 1646 case RAD: 1647 return value.number; 1648 case TURN: 1649 return Math.PI * 2 * value.number; 1650 } 1651 } 1652 throw new Error("Unsupported angle type"); 1653 } 1654 }; 1655 var isAngle = function (value) { 1656 if (value.type === TokenType.DIMENSION_TOKEN) { 1657 if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) { 1658 return true; 1659 } 1660 } 1661 return false; 1662 }; 1663 var parseNamedSide = function (tokens) { 1664 var sideOrCorner = tokens 1665 .filter(isIdentToken) 1666 .map(function (ident) { return ident.value; }) 1667 .join(' '); 1668 switch (sideOrCorner) { 1669 case 'to bottom right': 1670 case 'to right bottom': 1671 case 'left top': 1672 case 'top left': 1673 return [ZERO_LENGTH, ZERO_LENGTH]; 1674 case 'to top': 1675 case 'bottom': 1676 return deg(0); 1677 case 'to bottom left': 1678 case 'to left bottom': 1679 case 'right top': 1680 case 'top right': 1681 return [ZERO_LENGTH, HUNDRED_PERCENT]; 1682 case 'to right': 1683 case 'left': 1684 return deg(90); 1685 case 'to top left': 1686 case 'to left top': 1687 case 'right bottom': 1688 case 'bottom right': 1689 return [HUNDRED_PERCENT, HUNDRED_PERCENT]; 1690 case 'to bottom': 1691 case 'top': 1692 return deg(180); 1693 case 'to top right': 1694 case 'to right top': 1695 case 'left bottom': 1696 case 'bottom left': 1697 return [HUNDRED_PERCENT, ZERO_LENGTH]; 1698 case 'to left': 1699 case 'right': 1700 return deg(270); 1701 } 1702 return 0; 1703 }; 1704 var deg = function (deg) { return (Math.PI * deg) / 180; }; 1705 1706 var color = { 1707 name: 'color', 1708 parse: function (value) { 1709 if (value.type === TokenType.FUNCTION) { 1710 var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name]; 1711 if (typeof colorFunction === 'undefined') { 1712 throw new Error("Attempting to parse an unsupported color function \"" + value.name + "\""); 1713 } 1714 return colorFunction(value.values); 1715 } 1716 if (value.type === TokenType.HASH_TOKEN) { 1717 if (value.value.length === 3) { 1718 var r = value.value.substring(0, 1); 1719 var g = value.value.substring(1, 2); 1720 var b = value.value.substring(2, 3); 1721 return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1); 1722 } 1723 if (value.value.length === 4) { 1724 var r = value.value.substring(0, 1); 1725 var g = value.value.substring(1, 2); 1726 var b = value.value.substring(2, 3); 1727 var a = value.value.substring(3, 4); 1728 return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), parseInt(a + a, 16) / 25
vendor: 4,189 bytes, lines 1728-1837
17285); 1729 } 1730 if (value.value.length === 6) { 1731 var r = value.value.substring(0, 2); 1732 var g = value.value.substring(2, 4); 1733 var b = value.value.substring(4, 6); 1734 return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1); 1735 } 1736 if (value.value.length === 8) { 1737 var r = value.value.substring(0, 2); 1738 var g = value.value.substring(2, 4); 1739 var b = value.value.substring(4, 6); 1740 var a = value.value.substring(6, 8); 1741 return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a, 16) / 255); 1742 } 1743 } 1744 if (value.type === TokenType.IDENT_TOKEN) { 1745 var namedColor = COLORS[value.value.toUpperCase()]; 1746 if (typeof namedColor !== 'undefined') { 1747 return namedColor; 1748 } 1749 } 1750 return COLORS.TRANSPARENT; 1751 } 1752 }; 1753 var isTransparent = function (color) { return (0xff & color) === 0; }; 1754 var asString = function (color) { 1755 var alpha = 0xff & color; 1756 var blue = 0xff & (color >> 8); 1757 var green = 0xff & (color >> 16); 1758 var red = 0xff & (color >> 24); 1759 return alpha < 255 ? "rgba(" + red + "," + green + "," + blue + "," + alpha / 255 + ")" : "rgb(" + red + "," + green + "," + blue + ")"; 1760 }; 1761 var pack = function (r, g, b, a) { 1762 return ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0; 1763 }; 1764 var getTokenColorValue = function (token, i) { 1765 if (token.type === TokenType.NUMBER_TOKEN) { 1766 return token.number; 1767 } 1768 if (token.type === TokenType.PERCENTAGE_TOKEN) { 1769 var max = i === 3 ? 1 : 255; 1770 return i === 3 ? (token.number / 100) * max : Math.round((token.number / 100) * max); 1771 } 1772 return 0; 1773 }; 1774 var rgb = function (args) { 1775 var tokens = args.filter(nonFunctionArgSeparator); 1776 if (tokens.length === 3) { 1777 var _a = tokens.map(getTokenColorValue), r = _a[0], g = _a[1], b = _a[2]; 1778 return pack(r, g, b, 1); 1779 } 1780 if (tokens.length === 4) { 1781 var _b = tokens.map(getTokenColorValue), r = _b[0], g = _b[1], b = _b[2], a = _b[3]; 1782 return pack(r, g, b, a); 1783 } 1784 return 0; 1785 }; 1786 function hue2rgb(t1, t2, hue) { 1787 if (hue < 0) { 1788 hue += 1; 1789 } 1790 if (hue >= 1) { 1791 hue -= 1; 1792 } 1793 if (hue < 1 / 6) { 1794 return (t2 - t1) * hue * 6 + t1; 1795 } 1796 else if (hue < 1 / 2) { 1797 return t2; 1798 } 1799 else if (hue < 2 / 3) { 1800 return (t2 - t1) * 6 * (2 / 3 - hue) + t1; 1801 } 1802 else { 1803 return t1; 1804 } 1805 } 1806 var hsl = function (args) { 1807 var tokens = args.filter(nonFunctionArgSeparator); 1808 var hue = tokens[0], saturation = tokens[1], lightness = tokens[2], alpha = tokens[3]; 1809 var h = (hue.type === TokenType.NUMBER_TOKEN ? deg(hue.number) : angle.parse(hue)) / (Math.PI * 2); 1810 var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0; 1811 var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0; 1812 var a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1; 1813 if (s === 0) { 1814 return pack(l * 255, l * 255, l * 255, 1); 1815 } 1816 var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s; 1817 var t1 = l * 2 - t2; 1818 var r = hue2rgb(t1, t2, h + 1 / 3); 1819 var g = hue2rgb(t1, t2, h); 1820 var b = hue2rgb(t1, t2, h - 1 / 3); 1821 return pack(r * 255, g * 255, b * 255, a); 1822 }; 1823 var SUPPORTED_COLOR_FUNCTIONS = { 1824 hsl: hsl, 1825 hsla: hsl, 1826 rgb: rgb, 1827 rgba: rgb 1828 }; 1829 var COLORS = { 1830 ALICEBLUE: 0xf0f8ffff, 1831 ANTIQUEWHITE: 0xfaebd7ff, 1832 AQUA: 0x00ffffff, 1833 AQUAMARINE: 0x7fffd4ff, 1834 AZURE: 0xf0ffffff, 1835 BEIGE: 0xf5f5dcff, 1836 BISQUE: 0xffe4c4ff, 1837 BLACK: 0x000000ff,
1838 BLANCHEDALMOND: 0xffebcdff, 1839 BLUE: 0x0000ffff, 1840 BLUEVIOLET: 0x8a2be2ff, 1841 BROWN: 0xa52a2aff, 1842 BURLYWOOD: 0xdeb887ff, 1843 CADETBLUE: 0x5f9ea0ff, 1844 CHARTREUSE: 0x7fff00ff, 1845 CHOCOLATE: 0xd2691eff, 1846 CORAL: 0xff7f50ff, 1847 CORNFLOWERBLUE: 0x6495edff, 1848 CORNSILK: 0xfff8dcff, 1849 CRIMSON: 0xdc143cff, 1850 CYAN: 0x00ffffff, 1851 DARKBLUE: 0x00008bff, 1852 DARKCYAN: 0x008b8bff, 1853 DARKGOLDENROD: 0xb886bbff, 1854 DARKGRAY: 0xa9a9a9ff, 1855 DARKGREEN: 0x006400ff, 1856 DARKGREY: 0xa9a9a9ff, 1857 DARKKHAKI: 0xbdb76bff, 1858 DARKMAGENTA: 0x8b008bff, 1859 DARKOLIVEGREEN: 0x556b2fff, 1860 DARKORANGE: 0xff8c00ff, 1861 DARKORCHID: 0x9932ccff, 1862 DARKRED: 0x8b0000ff, 1863 DARKSALMON: 0xe9967aff, 1864 DARKSEAGREEN: 0x8fbc8fff, 1865 DARKSLATEBLUE: 0x483d8bff, 1866 DARKSLATEGRAY: 0x2f4f4fff, 1867 DARKSLATEGREY: 0x2f4f4fff, 1868 DARKTURQUOISE: 0x00ced1ff, 1869 DARKVIOLET: 0x9400d3ff, 1870 DEEPPINK: 0xff1493ff, 1871 DEEPSKYBLUE: 0x00bfffff, 1872 DIMGRAY: 0x696969ff, 1873 DIMGREY: 0x696969ff, 1874 DODGERBLUE: 0x1e90ffff, 1875 FIREBRICK: 0xb22222ff, 1876 FLORALWHITE: 0xfffaf0ff, 1877 FORESTGREEN: 0x228b22ff, 1878 FUCHSIA: 0xff00ffff, 1879 GAINSBORO: 0xdcdcdcff, 1880 GHOSTWHITE: 0xf8f8ffff, 1881 GOLD: 0xffd700ff, 1882 GOLDENROD: 0xdaa520ff, 1883 GRAY: 0x808080ff, 1884 GREEN: 0x008000ff, 1885 GREENYELLOW: 0xadff2fff, 1886 GREY: 0x808080ff, 1887 HONEYDEW: 0xf0fff0ff, 1888 HOTPINK: 0xff69b4ff, 1889 INDIANRED: 0xcd5c5cff, 1890 INDIGO: 0x4b0082ff, 1891 IVORY: 0xfffff0ff, 1892 KHAKI: 0xf0e68cff, 1893 LAVENDER: 0xe6e6faff, 1894 LAVENDERBLUSH: 0xfff0f5ff, 1895 LAWNGREEN: 0x7cfc00ff, 1896 LEMONCHIFFON: 0xfffacdff, 1897 LIGHTBLUE: 0xadd8e6ff, 1898 LIGHTCORAL: 0xf08080ff, 1899 LIGHTCYAN: 0xe0ffffff, 1900 LIGHTGOLDENRODYELLOW: 0xfafad2ff, 1901 LIGHTGRAY: 0xd3d3d3ff, 1902 LIGHTGREEN: 0x90ee90ff, 1903 LIGHTGREY: 0xd3d3d3ff, 1904 LIGHTPINK: 0xffb6c1ff, 1905 LIGHTSALMON: 0xffa07aff, 1906 LIGHTSEAGREEN: 0x20b2aaff, 1907 LIGHTSKYBLUE: 0x87cefaff, 1908 LIGHTSLATEGRAY: 0x778899ff, 1909 LIGHTSLATEGREY: 0x778899ff, 1910 LIGHTSTEELBLUE: 0xb0c4deff, 1911 LIGHTYELLOW: 0xffffe0ff, 1912 LIME: 0x00ff00ff, 1913 LIMEGREEN: 0x32cd32ff, 1914 LINEN: 0xfaf0e6ff, 1915 MAGENTA: 0xff00ffff, 1916 MAROON: 0x800000ff, 1917 MEDIUMAQUAMARINE: 0x66cdaaff, 1918 MEDIUMBLUE: 0x0000cdff, 1919 MEDIUMORCHID: 0xba55d3ff, 1920 MEDIUMPURPLE: 0x9370dbff, 1921 MEDIUMSEAGREEN: 0x3cb371ff, 1922 MEDIUMSLATEBLUE: 0x7b68eeff, 1923 MEDIUMSPRINGGREEN: 0x00fa9aff, 1924 MEDIUMTURQUOISE: 0x48d1ccff, 1925 MEDIUMVIOLETRED: 0xc71585ff, 1926 MIDNIGHTBLUE: 0x191970ff, 1927 MINTCREAM: 0xf5fffaff, 1928 MISTYROSE: 0xffe4e1ff, 1929 MOCCASIN: 0xffe4b5ff, 1930 NAVAJOWHITE: 0xffdeadff, 1931 NAVY: 0x000080ff, 1932 OLDLACE: 0xfdf5e6ff, 1933 OLIVE: 0x808000ff, 1934 OLIVEDRAB: 0x6b8e23ff, 1935 ORANGE: 0xffa500ff, 1936 ORANGERED: 0xff4500ff, 1937 ORCHID: 0xda70d6ff, 1938 PALEGOLDENROD: 0xeee8aaff, 1939 PALEGREEN: 0x98fb98ff, 1940 PALETURQUOISE: 0xafeeeeff, 1941 PALEVIOLETRED: 0xdb7093ff, 1942 PAPAYAWHIP: 0xffefd5ff, 1943 PEACHPUFF: 0xffdab9ff, 1944 PERU: 0xcd853fff, 1945 PINK: 0xffc0cbff, 1946 PLUM: 0xdda0ddff, 1947 POWDERBLUE: 0xb0e0e6ff, 1948 PURPLE: 0x800080ff, 1949 REBECCAPURPLE: 0x663399ff, 1950 RED: 0xff0000ff, 1951 ROSYBROWN: 0xbc8f8fff, 1952 ROYALBLUE: 0x4169e1ff, 1953 SADDLEBROWN: 0x8b4513ff, 1954 SALMON: 0xfa8072ff, 1955 SANDYBROWN: 0xf4a460ff, 1956 SEAGREEN: 0x2e8b57ff, 1957 SEASHELL: 0xfff5eeff, 1958 SIENNA: 0xa0522dff, 1959 SILVER: 0xc0c0c0ff, 1960 SKYBLUE: 0x87ceebff, 1961 SLATEBLUE: 0x6a5acdff, 1962 SLATEGRAY: 0x708090ff, 1963 SLATEGREY: 0x708090ff, 1964 SNOW: 0xfffafaff, 1965 SPRINGGREEN: 0x00ff7fff, 1966 STEELBLUE: 0x4682b4ff, 1967 TAN: 0xd2b48cff, 1968 TEAL: 0x008080ff, 1969 THISTLE: 0xd8bfd8ff, 1970 TOMATO: 0xff6347ff, 1971 TRANSPARENT: 0x00000000, 1972 TURQUOISE: 0x40e0d0ff, 1973 VIOLET: 0xee82eeff, 1974 WHEAT: 0xf5deb3ff, 1975 WHITE: 0xffffffff, 1976 WHITESMOKE: 0xf5f5f5ff, 1977 YELLOW: 0xffff00ff, 1978 YELLOWGREEN: 0x9acd32ff 1979 }; 1980 1981 var PropertyDescriptorParsingType; 1982 (function (PropertyDescriptorParsingType) { 1983 PropertyDescriptorParsingType[PropertyDescriptorParsingType["VALUE"] = 0] = "VALUE"; 1984 PropertyDescriptorParsingType[PropertyDescriptorParsingType["LIST"] = 1] = "LIST"; 1985 PropertyDescriptorParsingType[PropertyDescriptorParsingType["IDENT_VALUE"] = 2] = "IDENT_VALUE"; 1986 PropertyDescriptorParsingType[PropertyDescriptorParsingType["TYPE_VALUE"] = 3] = "TYPE_VALUE"; 1987 PropertyDescriptorParsingType[PropertyDescriptorParsingType["TOKEN_VALUE"] = 4] = "TOKEN_VALUE"; 1988 })(PropertyDescriptorParsingType || (PropertyDescriptorParsingType = {})); 1989 1990 var BACKGROUND_CLIP; 1991 (function (BACKGROUND_CLIP) { 1992 BACKGROUND_CLIP[BACKGROUND_CLIP["BORDER_BOX"] = 0] = "BORDER_BOX"; 1993 BACKGROUND_CLIP[BACKGROUND_CLIP["PADDING_BOX"] = 1] = "PADD
vendor: 22,877 bytes, lines 1993-2521
1993ING_BOX"; 1994 BACKGROUND_CLIP[BACKGROUND_CLIP["CONTENT_BOX"] = 2] = "CONTENT_BOX"; 1995 })(BACKGROUND_CLIP || (BACKGROUND_CLIP = {})); 1996 var backgroundClip = { 1997 name: 'background-clip', 1998 initialValue: 'border-box', 1999 prefix: false, 2000 type: PropertyDescriptorParsingType.LIST, 2001 parse: function (tokens) { 2002 return tokens.map(function (token) { 2003 if (isIdentToken(token)) { 2004 switch (token.value) { 2005 case 'padding-box': 2006 return BACKGROUND_CLIP.PADDING_BOX; 2007 case 'content-box': 2008 return BACKGROUND_CLIP.CONTENT_BOX; 2009 } 2010 } 2011 return BACKGROUND_CLIP.BORDER_BOX; 2012 }); 2013 } 2014 }; 2015 2016 var backgroundColor = { 2017 name: "background-color", 2018 initialValue: 'transparent', 2019 prefix: false, 2020 type: PropertyDescriptorParsingType.TYPE_VALUE, 2021 format: 'color' 2022 }; 2023 2024 var parseColorStop = function (args) { 2025 var color$1 = color.parse(args[0]); 2026 var stop = args[1]; 2027 return stop && isLengthPercentage(stop) ? { color: color$1, stop: stop } : { color: color$1, stop: null }; 2028 }; 2029 var processColorStops = function (stops, lineLength) { 2030 var first = stops[0]; 2031 var last = stops[stops.length - 1]; 2032 if (first.stop === null) { 2033 first.stop = ZERO_LENGTH; 2034 } 2035 if (last.stop === null) { 2036 last.stop = HUNDRED_PERCENT; 2037 } 2038 var processStops = []; 2039 var previous = 0; 2040 for (var i = 0; i < stops.length; i++) { 2041 var stop_1 = stops[i].stop; 2042 if (stop_1 !== null) { 2043 var absoluteValue = getAbsoluteValue(stop_1, lineLength); 2044 if (absoluteValue > previous) { 2045 processStops.push(absoluteValue); 2046 } 2047 else { 2048 processStops.push(previous); 2049 } 2050 previous = absoluteValue; 2051 } 2052 else { 2053 processStops.push(null); 2054 } 2055 } 2056 var gapBegin = null; 2057 for (var i = 0; i < processStops.length; i++) { 2058 var stop_2 = processStops[i]; 2059 if (stop_2 === null) { 2060 if (gapBegin === null) { 2061 gapBegin = i; 2062 } 2063 } 2064 else if (gapBegin !== null) { 2065 var gapLength = i - gapBegin; 2066 var beforeGap = processStops[gapBegin - 1]; 2067 var gapValue = (stop_2 - beforeGap) / (gapLength + 1); 2068 for (var g = 1; g <= gapLength; g++) { 2069 processStops[gapBegin + g - 1] = gapValue * g; 2070 } 2071 gapBegin = null; 2072 } 2073 } 2074 return stops.map(function (_a, i) { 2075 var color = _a.color; 2076 return { color: color, stop: Math.max(Math.min(1, processStops[i] / lineLength), 0) }; 2077 }); 2078 }; 2079 var getAngleFromCorner = function (corner, width, height) { 2080 var centerX = width / 2; 2081 var centerY = height / 2; 2082 var x = getAbsoluteValue(corner[0], width) - centerX; 2083 var y = centerY - getAbsoluteValue(corner[1], height); 2084 return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2); 2085 }; 2086 var calculateGradientDirection = function (angle, width, height) { 2087 var radian = typeof angle === 'number' ? angle : getAngleFromCorner(angle, width, height); 2088 var lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian)); 2089 var halfWidth = width / 2; 2090 var halfHeight = height / 2; 2091 var halfLineLength = lineLength / 2; 2092 var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength; 2093 var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength; 2094 return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff]; 2095 }; 2096 var distance = function (a, b) { return Math.sqrt(a * a + b * b); }; 2097 var findCorner = function (width, height, x, y, closest) { 2098 var corners = [[0, 0], [0, height], [width, 0], [width, height]]; 2099 return corners.reduce(function (stat, corner) { 2100 var cx = corner[0], cy = corner[1]; 2101 var d = distance(x - cx, y - cy); 2102 if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) { 2103 return { 2104 optimumCorner: corner, 2105 optimumDistance: d 2106 }; 2107 } 2108 return stat; 2109 }, { 2110 optimumDistance: closest ? Infinity : -Infinity, 2111 optimumCorner: null 2112 }).optimumCorner; 2113 }; 2114 var calculateRadius = function (gradient, x, y, width, height) { 2115 var rx = 0; 2116 var ry = 0; 2117 switch (gradient.size) { 2118 case CSSRadialExtent.CLOSEST_SIDE: 2119 // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradientâs center. 2120 // If the shape is an ellipse, it exactly meets the closest side in each dimension. 2121 if (gradient.shape === CSSRadialShape.CIRCLE) { 2122 rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height)); 2123 } 2124 else if (gradient.shape === CSSRadialShape.ELLIPSE) { 2125 rx = Math.min(Math.abs(x), Math.abs(x - width)); 2126 ry = Math.min(Math.abs(y), Math.abs(y - height)); 2127 } 2128 break; 2129 case CSSRadialExtent.CLOSEST_CORNER: 2130 // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradientâs center. 2131 // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified. 2132 if (gradient.shape === CSSRadialShape.CIRCLE) { 2133 rx = ry = Math.min(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height)); 2134 } 2135 else if (gradient.shape === CSSRadialShape.ELLIPSE) { 2136 // Compute the ratio ry/rx (which is to be the same as for "closest-side") 2137 var c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width)); 2138 var _a = findCorner(width, height, x, y, true), cx = _a[0], cy = _a[1]; 2139 rx = distance(cx - x, (cy - y) / c); 2140 ry = c * rx; 2141 } 2142 break; 2143 case CSSRadialExtent.FARTHEST_SIDE: 2144 // Same as closest-side, except the ending shape is sized based on the farthest side(s) 2145 if (gradient.shape === CSSRadialShape.CIRCLE) { 2146 rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height)); 2147 } 2148 else if (gradient.shape === CSSRadialShape.ELLIPSE) { 2149 rx = Math.max(Math.abs(x), Math.abs(x - width)); 2150 ry = Math.max(Math.abs(y), Math.abs(y - height)); 2151 } 2152 break; 2153 case CSSRadialExtent.FARTHEST_CORNER: 2154 // Same as closest-corner, except the ending shape is sized based on the farthest corner. 2155 // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified. 2156 if (gradient.shape === CSSRadialShape.CIRCLE) { 2157 rx = ry = Math.max(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height)); 2158 } 2159 else if (gradient.shape === CSSRadialShape.ELLIPSE) { 2160 // Compute the ratio ry/rx (which is to be the same as for "farthest-side") 2161 var c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width)); 2162 var _b = findCorner(width, height, x, y, false), cx = _b[0], cy = _b[1]; 2163 rx = distance(cx - x, (cy - y) / c); 2164 ry = c * rx; 2165 } 2166 break; 2167 } 2168 if (Array.isArray(gradient.size)) { 2169 rx = getAbsoluteValue(gradient.size[0], width); 2170 ry = gradient.size.length === 2 ? getAbsoluteValue(gradient.size[1], height) : rx; 2171 } 2172 return [rx, ry]; 2173 }; 2174 2175 var linearGradient = function (tokens) { 2176 var angle$1 = deg(180); 2177 var stops = []; 2178 parseFunctionArgs(tokens).forEach(function (arg, i) { 2179 if (i === 0) { 2180 var firstToken = arg[0]; 2181 if (firstToken.type === TokenType.IDENT_TOKEN && firstToken.value === 'to') { 2182 angle$1 = parseNamedSide(arg); 2183 return; 2184 } 2185 else if (isAngle(firstToken)) { 2186 angle$1 = angle.parse(firstToken); 2187 return; 2188 } 2189 } 2190 var colorStop = parseColorStop(arg); 2191 stops.push(colorStop); 2192 }); 2193 return { angle: angle$1, stops: stops, type: CSSImageType.LINEAR_GRADIENT }; 2194 }; 2195 2196 var prefixLinearGradient = function (tokens) { 2197 var angle$1 = deg(180); 2198 var stops = []; 2199 parseFunctionArgs(tokens).forEach(function (arg, i) { 2200 if (i === 0) { 2201 var firstToken = arg[0]; 2202 if (firstToken.type === TokenType.IDENT_TOKEN && 2203 ['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !== -1) { 2204 angle$1 = parseNamedSide(arg); 2205 return; 2206 } 2207 else if (isAngle(firstToken)) { 2208 angle$1 = (angle.parse(firstToken) + deg(270)) % deg(360); 2209 return; 2210 } 2211 } 2212 var colorStop = parseColorStop(arg); 2213 stops.push(colorStop); 2214 }); 2215 return { 2216 angle: angle$1, 2217 stops: stops, 2218 type: CSSImageType.LINEAR_GRADIENT 2219 }; 2220 }; 2221 2222 var testRangeBounds = function (document) { 2223 var TEST_HEIGHT = 123; 2224 if (document.createRange) { 2225 var range = document.createRange(); 2226 if (range.getBoundingClientRect) { 2227 var testElement = document.createElement('boundtest'); 2228 testElement.style.height = TEST_HEIGHT + "px"; 2229 testElement.style.display = 'block'; 2230 document.body.appendChild(testElement); 2231 range.selectNode(testElement); 2232 var rangeBounds = range.getBoundingClientRect(); 2233 var rangeHeight = Math.round(rangeBounds.height); 2234 document.body.removeChild(testElement); 2235 if (rangeHeight === TEST_HEIGHT) { 2236 return true; 2237 } 2238 } 2239 } 2240 return false; 2241 }; 2242 var testCORS = function () { return typeof new Image().crossOrigin !== 'undefined'; }; 2243 var testResponseType = function () { return typeof new XMLHttpRequest().responseType === 'string'; }; 2244 var testSVG = function (document) { 2245 var img = new Image(); 2246 var canvas = document.createElement('canvas'); 2247 var ctx = canvas.getContext('2d'); 2248 if (!ctx) { 2249 return false; 2250 } 2251 img.src = "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>"; 2252 try { 2253 ctx.drawImage(img, 0, 0); 2254 canvas.toDataURL(); 2255 } 2256 catch (e) { 2257 return false; 2258 } 2259 return true; 2260 }; 2261 var isGreenPixel = function (data) { 2262 return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255; 2263 }; 2264 var testForeignObject = function (document) { 2265 var canvas = document.createElement('canvas'); 2266 var size = 100; 2267 canvas.width = size; 2268 canvas.height = size; 2269 var ctx = canvas.getContext('2d'); 2270 if (!ctx) { 2271 return Promise.reject(false); 2272 } 2273 ctx.fillStyle = 'rgb(0, 255, 0)'; 2274 ctx.fillRect(0, 0, size, size); 2275 var img = new Image(); 2276 var greenImageSrc = canvas.toDataURL(); 2277 img.src = greenImageSrc; 2278 var svg = createForeignObjectSVG(size, size, 0, 0, img); 2279 ctx.fillStyle = 'red'; 2280 ctx.fillRect(0, 0, size, size); 2281 return loadSerializedSVG(svg) 2282 .then(function (img) { 2283 ctx.drawImage(img, 0, 0); 2284 var data = ctx.getImageData(0, 0, size, size).data; 2285 ctx.fillStyle = 'red'; 2286 ctx.fillRect(0, 0, size, size); 2287 var node = document.createElement('div'); 2288 node.style.backgroundImage = "url(" + greenImageSrc + ")"; 2289 node.style.height = size + "px"; 2290 // Firefox 55 does not render inline <img /> tags 2291 return isGreenPixel(data) 2292 ? loadSerializedSVG(createForeignObjectSVG(size, size, 0, 0, node)) 2293 : Promise.reject(false); 2294 }) 2295 .then(function (img) { 2296 ctx.drawImage(img, 0, 0); 2297 // Edge does not render background-images 2298 return isGreenPixel(ctx.getImageData(0, 0, size, size).data); 2299 }) 2300 .catch(function () { return false; }); 2301 }; 2302 var createForeignObjectSVG = function (width, height, x, y, node) { 2303 var xmlns = 'http://www.w3.org/2000/svg'; 2304 var svg = document.createElementNS(xmlns, 'svg'); 2305 var foreignObject = document.createElementNS(xmlns, 'foreignObject'); 2306 svg.setAttributeNS(null, 'width', width.toString()); 2307 svg.setAttributeNS(null, 'height', height.toString()); 2308 foreignObject.setAttributeNS(null, 'width', '100%'); 2309 foreignObject.setAttributeNS(null, 'height', '100%'); 2310 foreignObject.setAttributeNS(null, 'x', x.toString()); 2311 foreignObject.setAttributeNS(null, 'y', y.toString()); 2312 foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true'); 2313 svg.appendChild(foreignObject); 2314 foreignObject.appendChild(node); 2315 return svg; 2316 }; 2317 var loadSerializedSVG = function (svg) { 2318 return new Promise(function (resolve, reject) { 2319 var img = new Image(); 2320 img.onload = function () { return resolve(img); }; 2321 img.onerror = reject; 2322 img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(new XMLSerializer().serializeToString(svg)); 2323 }); 2324 }; 2325 var FEATURES = { 2326 get SUPPORT_RANGE_BOUNDS() { 2327 var value = testRangeBounds(document); 2328 Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', { value: value }); 2329 return value; 2330 }, 2331 get SUPPORT_SVG_DRAWING() { 2332 var value = testSVG(document); 2333 Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value }); 2334 return value; 2335 }, 2336 get SUPPORT_FOREIGNOBJECT_DRAWING() { 2337 var value = typeof Array.from === 'function' && typeof window.fetch === 'function' 2338 ? testForeignObject(document) 2339 : Promise.resolve(false); 2340 Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', { value: value }); 2341 return value; 2342 }, 2343 get SUPPORT_CORS_IMAGES() { 2344 var value = testCORS(); 2345 Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value }); 2346 return value; 2347 }, 2348 get SUPPORT_RESPONSE_TYPE() { 2349 var value = testResponseType(); 2350 Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', { value: value }); 2351 return value; 2352 }, 2353 get SUPPORT_CORS_XHR() { 2354 var value = 'withCredentials' in new XMLHttpRequest(); 2355 Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value }); 2356 return value; 2357 } 2358 }; 2359 2360 var Logger = /** @class */ (function () { 2361 function Logger(id) { 2362 this.id = id; 2363 this.start = Date.now(); 2364 } 2365 // eslint-disable-next-line @typescript-eslint/no-explicit-any 2366 Logger.prototype.debug = function () { 2367 var args = []; 2368 for (var _i = 0; _i < arguments.length; _i++) { 2369 args[_i] = arguments[_i]; 2370 } 2371 // eslint-disable-next-line no-console 2372 if (typeof window !== 'undefined' && window.console && typeof console.debug === 'function') { 2373 // eslint-disable-next-line no-console 2374 console.debug.apply(console, [this.id, this.getTime() + "ms"].concat(args)); 2375 } 2376 else { 2377 this.info.apply(this, args); 2378 } 2379 }; 2380 Logger.prototype.getTime = function () { 2381 return Date.now() - this.start; 2382 }; 2383 Logger.create = function (id) { 2384 Logger.instances[id] = new Logger(id); 2385 }; 2386 Logger.destroy = function (id) { 2387 delete Logger.instances[id]; 2388 }; 2389 Logger.getInstance = function (id) { 2390 var instance = Logger.instances[id]; 2391 if (typeof instance === 'undefined') { 2392 throw new Error("No logger instance found with id " + id); 2393 } 2394 return instance; 2395 }; 2396 // eslint-disable-next-line @typescript-eslint/no-explicit-any 2397 Logger.prototype.info = function () { 2398 var args = []; 2399 for (var _i = 0; _i < arguments.length; _i++) { 2400 args[_i] = arguments[_i]; 2401 } 2402 // eslint-disable-next-line no-console 2403 if (typeof window !== 'undefined' && window.console && typeof console.info === 'function') { 2404 // eslint-disable-next-line no-console 2405 console.info.apply(console, [this.id, this.getTime() + "ms"].concat(args)); 2406 } 2407 }; 2408 // eslint-disable-next-line @typescript-eslint/no-explicit-any 2409 Logger.prototype.error = function () { 2410 var args = []; 2411 for (var _i = 0; _i < arguments.length; _i++) { 2412 args[_i] = arguments[_i]; 2413 } 2414 // eslint-disable-next-line no-console 2415 if (typeof window !== 'undefined' && window.console && typeof console.error === 'function') { 2416 // eslint-disable-next-line no-console 2417 console.error.apply(console, [this.id, this.getTime() + "ms"].concat(args)); 2418 } 2419 else { 2420 this.info.apply(this, args); 2421 } 2422 }; 2423 Logger.instances = {}; 2424 return Logger; 2425 }()); 2426 2427 var CacheStorage = /** @class */ (function () { 2428 function CacheStorage() { 2429 } 2430 CacheStorage.create = function (name, options) { 2431 return (CacheStorage._caches[name] = new Cache(name, options)); 2432 }; 2433 CacheStorage.destroy = function (name) { 2434 delete CacheStorage._caches[name]; 2435 }; 2436 CacheStorage.open = function (name) { 2437 var cache = CacheStorage._caches[name]; 2438 if (typeof cache !== 'undefined') { 2439 return cache; 2440 } 2441 throw new Error("Cache with key \"" + name + "\" not found"); 2442 }; 2443 CacheStorage.getOrigin = function (url) { 2444 var link = CacheStorage._link; 2445 if (!link) { 2446 return 'about:blank'; 2447 } 2448 link.href = url; 2449 link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/ 2450 return link.protocol + link.hostname + link.port; 2451 }; 2452 CacheStorage.isSameOrigin = function (src) { 2453 return CacheStorage.getOrigin(src) === CacheStorage._origin; 2454 }; 2455 CacheStorage.setContext = function (window) { 2456 CacheStorage._link = window.document.createElement('a'); 2457 CacheStorage._origin = CacheStorage.getOrigin(window.location.href); 2458 }; 2459 CacheStorage.getInstance = function () { 2460 var current = CacheStorage._current; 2461 if (current === null) { 2462 throw new Error("No cache instance attached"); 2463 } 2464 return current; 2465 }; 2466 CacheStorage.attachInstance = function (cache) { 2467 CacheStorage._current = cache; 2468 }; 2469 CacheStorage.detachInstance = function () { 2470 CacheStorage._current = null; 2471 }; 2472 CacheStorage._caches = {}; 2473 CacheStorage._origin = 'about:blank'; 2474 CacheStorage._current = null; 2475 return CacheStorage; 2476 }()); 2477 var Cache = /** @class */ (function () { 2478 function Cache(id, options) { 2479 this.id = id; 2480 this._options = options; 2481 this._cache = {}; 2482 } 2483 Cache.prototype.addImage = function (src) { 2484 var result = Promise.resolve(); 2485 if (this.has(src)) { 2486 return result; 2487 } 2488 if (isBlobImage(src) || isRenderable(src)) { 2489 this._cache[src] = this.loadImage(src); 2490 return result; 2491 } 2492 return result; 2493 }; 2494 // eslint-disable-next-line @typescript-eslint/no-explicit-any 2495 Cache.prototype.match = function (src) { 2496 return this._cache[src]; 2497 }; 2498 Cache.prototype.loadImage = function (key) { 2499 return __awaiter(this, void 0, void 0, function () { 2500 var isSameOrigin, useCORS, useProxy, src; 2501 var _this = this; 2502 return __generator(this, function (_a) { 2503 switch (_a.label) { 2504 case 0: 2505 isSameOrigin = CacheStorage.isSameOrigin(key); 2506 useCORS = !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin; 2507 useProxy = !isInlineImage(key) && 2508 !isSameOrigin && 2509 typeof this._options.proxy === 'string' && 2510 FEATURES.SUPPORT_CORS_XHR && 2511 !useCORS; 2512 if (!isSameOrigin && this._options.allowTaint === false && !isInlineImage(key) && !useProxy && !useCORS) { 2513 return [2 /*return*/]; 2514 } 2515 src = key; 2516 if (!useProxy) return [3 /*break*/, 2]; 2517 return [4 /*yield*/, this.proxy(src)]; 2518 case 1: 2519 src = _a.sent(); 2520 _a.label = 2; 2521 case 2:
vendor: 4,574 bytes, lines 2522-2607
2522 Logger.getInstance(this.id).debug("Added image " + key.substring(0, 256)); 2523 return [4 /*yield*/, new Promise(function (resolve, reject) { 2524 var img = new Image(); 2525 img.onload = function () { return resolve(img); }; 2526 img.onerror = reject; 2527 //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous 2528 if (isInlineBase64Image(src) || useCORS) { 2529 img.crossOrigin = 'anonymous'; 2530 } 2531 img.src = src; 2532 if (img.complete === true) { 2533 // Inline XML images may fail to parse, throwing an Error later on 2534 setTimeout(function () { return resolve(img); }, 500); 2535 } 2536 if (_this._options.imageTimeout > 0) { 2537 setTimeout(function () { return reject("Timed out (" + _this._options.imageTimeout + "ms) loading image"); }, _this._options.imageTimeout); 2538 } 2539 })]; 2540 case 3: return [2 /*return*/, _a.sent()]; 2541 } 2542 }); 2543 }); 2544 }; 2545 Cache.prototype.has = function (key) { 2546 return typeof this._cache[key] !== 'undefined'; 2547 }; 2548 Cache.prototype.keys = function () { 2549 return Promise.resolve(Object.keys(this._cache)); 2550 }; 2551 Cache.prototype.proxy = function (src) { 2552 var _this = this; 2553 var proxy = this._options.proxy; 2554 if (!proxy) { 2555 throw new Error('No proxy defined'); 2556 } 2557 var key = src.substring(0, 256); 2558 return new Promise(function (resolve, reject) { 2559 var responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text'; 2560 var xhr = new XMLHttpRequest(); 2561 xhr.onload = function () { 2562 if (xhr.status === 200) { 2563 if (responseType === 'text') { 2564 resolve(xhr.response); 2565 } 2566 else { 2567 var reader_1 = new FileReader(); 2568 reader_1.addEventListener('load', function () { return resolve(reader_1.result); }, false); 2569 reader_1.addEventListener('error', function (e) { return reject(e); }, false); 2570 reader_1.readAsDataURL(xhr.response); 2571 } 2572 } 2573 else { 2574 reject("Failed to proxy resource " + key + " with status code " + xhr.status); 2575 } 2576 }; 2577 xhr.onerror = reject; 2578 xhr.open('GET', proxy + "?url=" + encodeURIComponent(src) + "&responseType=" + responseType); 2579 if (responseType !== 'text' && xhr instanceof XMLHttpRequest) { 2580 xhr.responseType = responseType; 2581 } 2582 if (_this._options.imageTimeout) { 2583 var timeout_1 = _this._options.imageTimeout; 2584 xhr.timeout = timeout_1; 2585 xhr.ontimeout = function () { return reject("Timed out (" + timeout_1 + "ms) proxying " + key); }; 2586 } 2587 xhr.send(); 2588 }); 2589 }; 2590 return Cache; 2591 }()); 2592 var INLINE_SVG = /^data:image\/svg\+xml/i; 2593 var INLINE_BASE64 = /^data:image\/.*;base64,/i; 2594 var INLINE_IMG = /^data:image\/.*/i; 2595 var isRenderable = function (src) { return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src); }; 2596 var isInlineImage = function (src) { return INLINE_IMG.test(src); }; 2597 var isInlineBase64Image = function (src) { return INLINE_BASE64.test(src); }; 2598 var isBlobImage = function (src) { return src.substr(0, 4) === 'blob'; }; 2599 var isSVG = function (src) { return src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src); }; 2600 2601 var webkitGradient = function (tokens) { 2602 var angle = deg(180); 2603 var stops = []; 2604 var type = CSSImageType.LINEAR_GRADIENT; 2605 var shape = CSSRadialShape.CIRCLE; 2606 var size = CSSRadialExtent.FARTHEST_CORNER; 2607 var position = [];
2608 parseFunctionArgs(tokens).forEach(function (arg, i) { 2609 var firstToken = arg[0]; 2610 if (i === 0) { 2611 if (isIdentToken(firstToken) && firstToken.value === 'linear') { 2612 type = CSSImageType.LINEAR_GRADIENT; 2613 return; 2614 } 2615 else if (isIdentToken(firstToken) && firstToken.value === 'radial') { 2616 type = CSSImageType.RADIAL_GRADIENT; 2617 return; 2618 } 2619 } 2620 if (firstToken.type === TokenType.FUNCTION) { 2621 if (firstToken.name === 'from') { 2622 var color$1 = color.parse(firstToken.values[0]); 2623 stops.push({ stop: ZERO_LENGTH, color: color$1 }); 2624 } 2625 else if (firstToken.name === 'to') { 2626 var color$1 = color.parse(firstToken.values[0]); 2627 stops.push({ stop: HUNDRED_PERCENT, color: color$1 }); 2628 } 2629 else if (firstToken.name === 'color-stop') { 2630 var values = firstToken.values.filter(nonFunctionArgSeparator); 2631 if (values.length === 2) { 2632 var color$1 = color.parse(values[1]); 2633 var stop_1 = values[0]; 2634 if (isNumberToken(stop_1)) { 2635 stops.push({ 2636 stop: { type: TokenType.PERCENTAGE_TOKEN, number: stop_1.number * 100, flags: stop_1.flags }, 2637 color: color$1 2638 }); 2639 } 2640 } 2641 } 2642 } 2643 }); 2644 return type === CSSImageType.LINEAR_GRADIENT 2645 ? { 2646 angle: (angle + deg(180)) % deg(360), 2647 stops: stops, 2648 type: type 2649 } 2650 : { size: size, shape: shape, stops: stops, position: position, type: type }; 2651 }; 2652 2653 var CLOSEST_SIDE = 'closest-side'; 2654 var FARTHEST_SIDE = 'farthest-side'; 2655 var CLOSEST_CORNER = 'closest-corner'; 2656 var FARTHEST_CORNER = 'farthest-corner'; 2657 var CIRCLE = 'circle'; 2658 var ELLIPSE = 'ellipse'; 2659 var COVER = 'cover'; 2660 var CONTAIN = 'contain'; 2661 var radialGradient = function (tokens) { 2662 var shape = CSSRadialShape.CIRCLE; 2663 var size = CSSRadialExtent.FARTHEST_CORNER; 2664 var stops = []; 2665 var position = []; 2666 parseFunctionArgs(tokens).forEach(function (arg, i) { 2667 var isColorStop = true; 2668 if (i === 0) { 2669 var isAtPosition_1 = false; 2670 isColorStop = arg.reduce(function (acc, token) { 2671 if (isAtPosition_1) { 2672 if (isIdentToken(token)) { 2673 switch (token.value) { 2674 case 'center': 2675 position.push(FIFTY_PERCENT); 2676 return acc; 2677 case 'top': 2678 case 'left': 2679 position.push(ZERO_LENGTH); 2680 return acc; 2681 case 'right': 2682 case 'bottom': 2683 position.push(HUNDRED_PERCENT); 2684 return acc; 2685 } 2686 } 2687 else if (isLengthPercentage(token) || isLength(token)) { 2688 position.push(token); 2689 } 2690 } 2691 else if (isIdentToken(token)) { 2692 switch (token.value) { 2693 case CIRCLE: 2694 shape = CSSRadialShape.CIRCLE; 2695 return false; 2696 case ELLIPSE: 2697 shape = CSSRadialShape.ELLIPSE; 2698 return false; 2699 case 'at': 2700 isAtPosition_1 = true; 2701 return false;
vendor: 4,318 bytes, lines 2702-2798
2702 case CLOSEST_SIDE: 2703 size = CSSRadialExtent.CLOSEST_SIDE; 2704 return false; 2705 case COVER: 2706 case FARTHEST_SIDE: 2707 size = CSSRadialExtent.FARTHEST_SIDE; 2708 return false; 2709 case CONTAIN: 2710 case CLOSEST_CORNER: 2711 size = CSSRadialExtent.CLOSEST_CORNER; 2712 return false; 2713 case FARTHEST_CORNER: 2714 size = CSSRadialExtent.FARTHEST_CORNER; 2715 return false; 2716 } 2717 } 2718 else if (isLength(token) || isLengthPercentage(token)) { 2719 if (!Array.isArray(size)) { 2720 size = []; 2721 } 2722 size.push(token); 2723 return false; 2724 } 2725 return acc; 2726 }, isColorStop); 2727 } 2728 if (isColorStop) { 2729 var colorStop = parseColorStop(arg); 2730 stops.push(colorStop); 2731 } 2732 }); 2733 return { size: size, shape: shape, stops: stops, position: position, type: CSSImageType.RADIAL_GRADIENT }; 2734 }; 2735 2736 var prefixRadialGradient = function (tokens) { 2737 var shape = CSSRadialShape.CIRCLE; 2738 var size = CSSRadialExtent.FARTHEST_CORNER; 2739 var stops = []; 2740 var position = []; 2741 parseFunctionArgs(tokens).forEach(function (arg, i) { 2742 var isColorStop = true; 2743 if (i === 0) { 2744 isColorStop = arg.reduce(function (acc, token) { 2745 if (isIdentToken(token)) { 2746 switch (token.value) { 2747 case 'center': 2748 position.push(FIFTY_PERCENT); 2749 return false; 2750 case 'top': 2751 case 'left': 2752 position.push(ZERO_LENGTH); 2753 return false; 2754 case 'right': 2755 case 'bottom': 2756 position.push(HUNDRED_PERCENT); 2757 return false; 2758 } 2759 } 2760 else if (isLengthPercentage(token) || isLength(token)) { 2761 position.push(token); 2762 return false; 2763 } 2764 return acc; 2765 }, isColorStop); 2766 } 2767 else if (i === 1) { 2768 isColorStop = arg.reduce(function (acc, token) { 2769 if (isIdentToken(token)) { 2770 switch (token.value) { 2771 case CIRCLE: 2772 shape = CSSRadialShape.CIRCLE; 2773 return false; 2774 case ELLIPSE: 2775 shape = CSSRadialShape.ELLIPSE; 2776 return false; 2777 case CONTAIN: 2778 case CLOSEST_SIDE: 2779 size = CSSRadialExtent.CLOSEST_SIDE; 2780 return false; 2781 case FARTHEST_SIDE: 2782 size = CSSRadialExtent.FARTHEST_SIDE; 2783 return false; 2784 case CLOSEST_CORNER: 2785 size = CSSRadialExtent.CLOSEST_CORNER; 2786 return false; 2787 case COVER: 2788 case FARTHEST_CORNER: 2789 size = CSSRadialExtent.FARTHEST_CORNER; 2790 return false; 2791 } 2792 } 2793 else if (isLength(token) || isLengthPercentage(token)) { 2794 if (!Array.isArray(size)) { 2795 size = []; 2796 } 2797 size.push(token); 2798 return false;
2799 } 2800 return acc; 2801 }, isColorStop); 2802 } 2803 if (isColorStop) { 2804 var colorStop = parseColorStop(arg); 2805 stops.push(colorStop); 2806 } 2807 }); 2808 return { size: size, shape: shape, stops: stops, position: position, type: CSSImageType.RADIAL_GRADIENT }; 2809 }; 2810 2811 var CSSImageType; 2812 (function (CSSImageType) { 2813 CSSImageType[CSSImageType["URL"] = 0] = "URL"; 2814 CSSImageType[CSSImageType["LINEAR_GRADIENT"] = 1] = "LINEAR_GRADIENT"; 2815 CSSImageType[CSSImageType["RADIAL_GRADIENT"] = 2] = "RADIAL_GRADIENT"; 2816 })(CSSImageType || (CSSImageType = {})); 2817 var isLinearGradient = function (background) { 2818 return background.type === CSSImageType.LINEAR_GRADIENT; 2819 }; 2820 var isRadialGradient = function (background) { 2821 return background.type === CSSImageType.RADIAL_GRADIENT; 2822 }; 2823 var CSSRadialShape; 2824 (function (CSSRadialShape) { 2825 CSSRadialShape[CSSRadialShape["CIRCLE"] = 0] = "CIRCLE"; 2826 CSSRadialShape[CSSRadialShape["ELLIPSE"] = 1] = "ELLIPSE"; 2827 })(CSSRadialShape || (CSSRadialShape = {})); 2828 var CSSRadialExtent; 2829 (function (CSSRadialExtent) { 2830 CSSRadialExtent[CSSRadialExtent["CLOSEST_SIDE"] = 0] = "CLOSEST_SIDE"; 2831 CSSRadialExtent[CSSRadialExtent["FARTHEST_SIDE"] = 1] = "FARTHEST_SIDE"; 2832 CSSRadialExtent[CSSRadialExtent["CLOSEST_CORNER"] = 2] = "CLOSEST_CORNER"; 2833 CSSRadialExtent[CSSRadialExtent["FARTHEST_CORNER"] = 3] = "FARTHEST_CORNER"; 2834 })(CSSRadialExtent || (CSSRadialExtent = {})); 2835 var image = { 2836 name: 'image', 2837 parse: function (value) { 2838 if (value.type === TokenType.URL_TOKEN) { 2839 var image_1 = { url: value.value, type: CSSImageType.URL }; 2840 CacheStorage.getInstance().addImage(value.value); 2841 return image_1; 2842 } 2843 if (value.type === TokenType.FUNCTION) { 2844 var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name]; 2845 if (typeof imageFunction === 'undefined') { 2846 throw new Error("Attempting to parse an unsupported image function \"" + value.name + "\""); 2847 } 2848 return imageFunction(value.values); 2849 } 2850 throw new Error("Unsupported image type"); 2851 } 2852 }; 2853 function isSupportedImage(value) { 2854 return value.type !== TokenType.FUNCTION || SUPPORTED_IMAGE_FUNCTIONS[value.name]; 2855 } 2856 var SUPPORTED_IMAGE_FUNCTIONS = { 2857 'linear-gradient': linearGradient,
2858 '-moz-linear-gradient': prefixLinearGradient, 2859 '-ms-linear-gradient': prefixLinearGradient, 2860 '-o-linear-gradient': prefixLinearGradient, 2861 '-webkit-linear-gradient': prefixLinearGradient, 2862 'radial-gradient': radialGradient, 2863 '-moz-radial-gradient': prefixRadialGradient, 2864 '-ms-radial-gradient': prefixRadialGradient, 2865 '-o-radial-gradient': prefixRadialGradient, 2866 '-webkit-radial-gradient': prefixRadialGradient, 2867 '-webkit-gradient': webkitGradient 2868 }; 2869 2870 var backgroundImage = { 2871 name: 'background-image', 2872 initialValue: 'none', 2873 type: PropertyDescriptorParsingType.LIST, 2874 prefix: false, 2875 parse: function (tokens) { 2876 if (tokens.length === 0) { 2877 return []; 2878 } 2879 var first = tokens[0]; 2880 if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') { 2881 return []; 2882 } 2883 return tokens.filter(function (value) { return nonFunctionArgSeparator(value) && isSupportedImage(value); }).map(image.parse); 2884 } 2885 }; 2886 2887 var backgroundOrigin = { 2888 name: 'background-origin', 2889 initialValue: 'border-box', 2890 prefix: false, 2891 type: PropertyDescriptorParsingType.LIST, 2892 parse: function (tokens) { 2893 return tokens.map(function (token) { 2894 if (isIdentToken(token)) { 2895 switch (token.value) { 2896 case 'padding-box': 2897 return 1 /* PADDING_BOX */; 2898 case 'content-box': 2899 return 2 /* CONTENT_BOX */; 2900 } 2901 } 2902 return 0 /* BORDER_BOX */; 2903 }); 2904 } 2905 }; 2906 2907 var backgroundPosition = { 2908 name: 'background-position', 2909 initialValue: '0% 0%', 2910 type: PropertyDescriptorParsingType.LIST, 2911 prefix: false, 2912 parse: function (tokens) { 2913 return parseFunctionArgs(tokens) 2914 .map(function (values) { return values.filter(isLengthPercentage); }) 2915 .map(parseLengthPercentageTuple); 2916 } 2917 }; 2918 2919 var BACKGROUND_REPEAT; 2920 (function (BACKGROUND_REPEAT) { 2921 BACKGROUND_REPEAT[BACKGROUND_REPEAT["REPEAT"] = 0] = "REPEAT"; 2922 BACKGROUND_REPEAT[BACKGROUND_REPEAT["NO_REPEAT"] = 1] = "NO_REPEAT"; 2923 BACKGROUND_REPEAT[BACKGROUND_REPEAT["REPEAT_X"] = 2] = "REPEAT_X"; 2924 BACKGROUND_REPEAT[BACKGROUND_REPEAT["REPEAT_Y"] = 3] = "REPEAT_Y"; 2925 })(BACKGROUND_REPEAT || (BACKGROUND_REPEAT = {})); 2926 var backgroundRepeat = { 2927 name: 'background-repeat', 2928 initialValue: 'repeat', 2929 prefix: false, 2930 type: PropertyDescriptorParsingType.LIST, 2931 parse: function (tokens) { 2932 return parseFunctionArgs(tokens) 2933 .map(function (values) { 2934 return values 2935 .filter(isIdentToken) 2936 .map(function (token) { return token.value; }) 2937 .join(' '); 2938 }) 2939 .map(parseBackgroundRepeat); 2940 } 2941 }; 2942 var parseBackgroundRepeat = function (value) { 2943 switch (value) { 2944 case 'no-repeat': 2945 return BACKGROUND_REPEAT.NO_REPEAT; 2946 case 'repeat-x': 2947 case 'repeat no-repeat': 2948 return BACKGROUND_REPEAT.REPEAT_X; 2949 case 'repeat-y': 2950 case 'no-repeat repeat': 2951 return BACKGROUND_REPEAT.REPEAT_Y; 2952 case 'repeat': 2953 default: 2954 return BACKGROUND_REPEAT.REPEAT; 2955 } 2956 }; 2957 2958 var BACKGROUND_SIZE; 2959 (function (BACKGROUND_SIZE) { 2960 BACKGROUND_SIZE["AUTO"] = "auto"; 2961 BACKGROUND_SIZE["CONTAIN"] = "contain"; 2962 BACKGROUND_SIZE["COVER"] = "cover"; 2963 })(BACKGROUND_SIZE || (BACKGROUND_SIZE = {})); 2964 var backgroundSize = { 2965 name: 'background-size', 2966 initialValue: '0', 2967 prefix: false, 2968 type: PropertyDescriptorParsingType.LIST, 2969 parse: function (tokens) { 2970 return parseFunctionArgs(tokens).map(function (values) { return values.filter(isBackgroun
2970dSizeInfoToken); }); 2971 } 2972 }; 2973 var isBackgroundSizeInfoToken = function (value) { 2974 return isIdentToken(value) || isLengthPercentage(value); 2975 }; 2976 2977 var borderColorForSide = function (side) { return ({ 2978 name: "border-" + side + "-color", 2979 initialValue: 'transparent', 2980 prefix: false, 2981 type: PropertyDescriptorParsingType.TYPE_VALUE, 2982 format: 'color' 2983 }); }; 2984 var borderTopColor = borderColorForSide('top'); 2985 var borderRightColor = borderColorForSide('right'); 2986 var borderBottomColor = borderColorForSide('bottom'); 2987 var borderLeftColor = borderColorForSide('left'); 2988 2989 var borderRadiusForSide = function (side) { return ({ 2990 name: "border-radius-" + side, 2991 initialValue: '0 0', 2992 prefix: false, 2993 type: PropertyDescriptorParsingType.LIST, 2994 parse: function (tokens) { return parseLengthPercentageTuple(tokens.filter(isLengthPercentage)); } 2995 }); }; 2996 var borderTopLeftRadius = borderRadiusForSide('top-left'); 2997 var borderTopRightRadius = borderRadiusForSide('top-right'); 2998 var borderBottomRightRadius = borderRadiusForSide('bottom-right'); 2999 var borderBottomLeftRadius = borderRadiusForSide('bottom-left'); 3000 3001 var BORDER_STYLE; 3002 (function (BORDER_STYLE) { 3003 BORDER_STYLE[BORDER_STYLE["NONE"] = 0] = "NONE"; 3004 BORDER_STYLE[BORDER_STYLE["SOLID"] = 1] = "SOLID"; 3005 })(BORDER_STYLE || (BORDER_STYLE = {})); 3006 var borderStyleForSide = function (side) { return ({ 3007 name: "border-" + side + "-style", 3008 initialValue: 'solid', 3009 prefix: false, 3010 type: PropertyDescriptorParsingType.IDENT_VALUE, 3011 parse: function (style) { 3012 switch (style) { 3013 case 'none': 3014 return BORDER_STYLE.NONE; 3015 } 3016 return BORDER_STYLE.SOLID; 3017 } 3018 }); }; 3019 var borderTopStyle = borderStyleForSide('top'); 3020 var borderRightStyle = borderStyleForSide('right'); 3021 var borderBottomStyle = borderStyleForSide('bottom'); 3022 var borderLeftStyle = borderStyleForSide('left'); 3023 3024 var borderWidthForSide = function (side) { return ({ 3025 name: "border-" + side + "-width", 3026 initialValue: '0', 3027 type: PropertyDescriptorParsingType.VALUE, 3028 prefix: false, 3029 parse: function (token) { 3030 if (isDimensionToken(token)) { 3031 return token.number; 3032 } 3033 return 0; 3034 } 3035 }); }; 3036 var borderTopWidth = borderWidthForSide('top'); 3037 var borderRightWidth = borderWidthForSide('right'); 3038 var borderBottomWidth = borderWidthForSide('bottom'); 3039 var borderLeftWidth = borderWidthForSide('left'); 3040 3041 var color$1 = { 3042 name: "color", 3043 initialValue: 'transparent', 3044 prefix: false, 3045 type: PropertyDescriptorParsingType.TYPE_VALUE, 3046 format: 'color' 3047 }; 3048 3049 var display = { 3050 name: 'display', 3051 initialValue: 'inline-block', 3052 prefix: false, 3053 type: PropertyDescriptorParsingType.LIST, 3054 parse: function (tokens) { 3055 return tokens.filter(isIdentToken).reduce(function (bit, token) { 3056 return bit | parseDisplayValue(token.value); 3057 }, 0 /* NONE */); 3058 } 3059 }; 3060 var parseDisplayValue = function (display) { 3061 switch (display) { 3062 case 'block': 3063 return 2 /* BLOCK */; 3064 case 'inline': 3065 return 4 /* INLINE */; 3066 case 'run-in': 3067 return 8 /* RUN_IN */; 3068 case 'flow': 3069 return 16 /* FLOW */; 3070 case 'flow-root': 3071 return 32 /* FLOW_ROOT */; 3072 case 'table': 3073 return 64 /* TABLE */; 3074 case 'flex': 3075 case '-webkit-flex': 3076 return 128 /* FLEX */; 3077 case 'grid': 3078 return 256 /* GRID */; 3079 case 'ruby': 3080 return 512 /* RUBY */; 3081 case 'subgrid': 3082 return 1024 /* SUBGRID */; 3083 case 'list-item': 3084 return 2048 /* LIST_ITEM */; 3085 case 'table-row-group': 3086 return 4096 /* TABLE_ROW_GROUP */; 3087 case 'table-header-group': 3088 return 8192 /* TABLE_HEADER_GROUP */; 3089 case 'table-footer-group': 3090 return 16384 /* TABLE_FOOTER_GROUP */; 3091 case 'table-row': 3092 return 32768 /* TABLE_ROW */; 3093 case 'table-cell': 3094 return 65536 /* TABLE_CELL */; 3095 case 'table-column-group': 3096 return 131072 /* TABLE_COLUMN_GROUP */; 3097 case 'table-column': 3098 return 262144 /* TABLE_COLUMN */; 3099 case 'table-caption': 3100 return 524288 /* TABLE_CAPTION */; 3101 case 'ruby-base': 3102 return 1048576 /* RUBY_BASE */; 3103 case 'ruby-text': 3104 return 2097152 /* RUBY_TEXT */; 3105 case 'ruby-base-container': 3106 return 4194304 /* RUBY_BASE_CONTAINER */; 3107 case 'ruby-text-container': 3108 return 8388608 /* RUBY_TEXT_CONTAINER */; 3109 case 'contents': 3110 return 16777216 /* CONTENTS */; 3111 case 'inline-block': 3112 return 33554432 /* INLINE_BLOCK */; 3113 case 'inline-list-item': 3114 return 67108864 /* INLINE_LIST_ITEM */; 3115 case 'inline-table': 3116 return 134217728 /* INLINE_TABLE */; 3117 case 'inline-flex': 3118 return 268435456 /* INLINE_FLEX */; 3119 case 'inline-grid': 3120 return 536870912 /* INLINE_GRID */; 3121 } 3122 return 0 /* NONE */; 3123 }; 3124 3125 var FLOAT; 3126 (function (FLOAT) { 3127 FLOAT[FLOAT["NONE"] = 0] = "NONE"; 3128 FLOAT[FLOAT["LEFT"] = 1] = "LEFT"; 3129 FLOAT[FLOAT["RIGHT"] = 2] = "RIGHT"; 3130 FLOAT[FLOAT["INLINE_START"] = 3] = "INLINE_START"; 3131 FLOAT[FLOAT["INLINE_END"] = 4] = "INLINE_END"; 3132 })(FLOAT || (FLOAT = {})); 3133 var float = { 3134 name: 'float', 3135 initialValue: 'none', 3136 prefix: false, 3137 type: PropertyDescriptorParsingType.IDENT_VALUE, 3138 parse: function (float) { 3139 switch (float) { 3140 case 'left': 3141 return FLOAT.LEFT; 3142 case 'right': 3143 return FLOAT.RIGHT; 3144 case 'inline-start': 3145 return FLOAT.INLINE_START; 3146 case 'inline-end': 3147 return FLOAT.INLINE_END; 3148 } 3149 return FLOAT.NONE; 3150 } 3151 }; 3152 3153 var letterSpacing = { 3154 name: 'letter-spacing', 3155 initialValue: '0', 3156 prefix: false, 3157 type: PropertyDescriptorParsingType.VALUE, 3158 parse: function (token) { 3159 if (token.type === TokenType.IDENT_TOKEN && token.value === 'normal') { 3160 return 0; 3161 } 3162 if (token.type === TokenType.NUMBER_TOKEN) { 3163 return token.number; 3164 } 3165 if (token.type === TokenType.DIMENSION_TOKEN) { 3166 return token.number; 3167 } 3168 return 0; 3169 } 3170 }; 3171 3172 var LINE_BREAK; 3173 (function (LINE_BREAK) { 3174 LINE_BREAK["NORMAL"] = "normal"; 3175 LINE_BREAK["STRICT"] = "strict"; 3176 })(LINE_BREAK || (LINE_BREAK = {})); 3177 var lineBreak = { 3178 name: 'line-break', 3179 initialValue: 'normal', 3180 prefix: false, 3181 type: PropertyDescriptorParsingType.IDENT_VALUE, 3182 parse: function (lineBreak) { 3183 switch (lineBreak) { 3184 case 'strict': 3185 return LINE_BREAK.STRICT; 3186 case 'normal': 3187 default: 3188 return LINE_BREAK.NORMAL; 3189 } 3190 } 3191 }; 3192 3193 var lineHeight = { 3194 name: 'line-height', 3195 initialValue: 'normal', 3196 prefix: false, 3197 type: PropertyDescriptorParsingType.TOKEN_VALUE 3198 }; 3199 var computeLineHeight = function (token, fontSize) { 3200 if (isIdentToken(token) && token.value === 'normal') { 3201 return 1.2 * fontSize; 3202 } 3203 else if (token.type === TokenType.NUMBER_TOKEN) { 3204 return fontSize * token.number; 3205 } 3206 else if (isLengthPercentage(token)) { 3207 return getAbsoluteValue(token, fontSize); 3208 } 3209 return fontSize; 3210 }; 3211 3212 var listStyleImage = { 3213 name: 'list-style-image', 3214 initialValue: 'none', 3215 type: PropertyDescriptorParsingType.VALUE, 3216 prefix: false, 3217 parse: function (token) { 3218 if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') { 3219 return null; 3220 } 3221 return image.parse(token); 3222 } 3223 }; 3224 3225 var LIST_STYLE_POSITION; 3226 (function (LIST_STYLE_POSITION) { 3227 LIST_STYLE_POSITION[LIST_STYLE_POSITION["INSIDE"] = 0] = "INSI
3227DE"; 3228 LIST_STYLE_POSITION[LIST_STYLE_POSITION["OUTSIDE"] = 1] = "OUTSIDE"; 3229 })(LIST_STYLE_POSITION || (LIST_STYLE_POSITION = {})); 3230 var listStylePosition = { 3231 name: 'list-style-position', 3232 initialValue: 'outside', 3233 prefix: false, 3234 type: PropertyDescriptorParsingType.IDENT_VALUE, 3235 parse: function (position) { 3236 switch (position) { 3237 case 'inside': 3238 return LIST_STYLE_POSITION.INSIDE; 3239 case 'outside': 3240 default: 3241 return LIST_STYLE_POSITION.OUTSIDE; 3242 } 3243 } 3244 }; 3245 3246 var LIST_STYLE_TYPE; 3247 (function (LIST_STYLE_TYPE) { 3248 LIST_STYLE_TYPE[LIST_STYLE_TYPE["NONE"] = -1] = "NONE"; 3249 LIST_STYLE_TYPE[LIST_STYLE_TYPE["DISC"] = 0] = "DISC"; 3250 LIST_STYLE_TYPE[LIST_STYLE_TYPE["CIRCLE"] = 1] = "CIRCLE"; 3251 LIST_STYLE_TYPE[LIST_STYLE_TYPE["SQUARE"] = 2] = "SQUARE"; 3252 LIST_STYLE_TYPE[LIST_STYLE_TYPE["DECIMAL"] = 3] = "DECIMAL"; 3253 LIST_STYLE_TYPE[LIST_STYLE_TYPE["CJK_DECIMAL"] = 4] = "CJK_DECIMAL"; 3254 LIST_STYLE_TYPE[LIST_STYLE_TYPE["DECIMAL_LEADING_ZERO"] = 5] = "DECIMAL_LEADING_ZERO"; 3255 LIST_STYLE_TYPE[LIST_STYLE_TYPE["LOWER_ROMAN"] = 6] = "LOWER_ROMAN"; 3256 LIST_STYLE_TYPE[LIST_STYLE_TYPE["UPPER_ROMAN"] = 7] = "UPPER_ROMAN"; 3257 LIST_STYLE_TYPE[LIST_STYLE_TYPE["LOWER_GREEK"] = 8] = "LOWER_GREEK"; 3258 LIST_STYLE_TYPE[LIST_STYLE_TYPE["LOWER_ALPHA"] = 9] = "LOWER_ALPHA"; 3259 LIST_STYLE_TYPE[LIST_STYLE_TYPE["UPPER_ALPHA"] = 10] = "UPPER_ALPHA"; 3260 LIST_STYLE_TYPE[LIST_STYLE_TYPE["ARABIC_INDIC"] = 11] = "ARABIC_INDIC"; 3261 LIST_STYLE_TYPE[LIST_STYLE_TYPE["ARMENIAN"] = 12] = "ARMENIAN"; 3262 LIST_STYLE_TYPE[LIST_STYLE_TYPE["BENGALI"] = 13] = "BENGALI"; 3263 LIST_STYLE_TYPE[LIST_STYLE_TYPE["CAMBODIAN"] = 14] = "CAMBODIAN"; 3264 LIST_STYLE_TYPE[LIST_STYLE_TYPE["CJK_EARTHLY_BRANCH"] = 15] = "CJK_EARTHLY_BRANCH"; 3265 LIST_STYLE_TYPE[LIST_STYLE_TYPE["CJK_HEAVENLY_STEM"] = 16] = "CJK_HEAVENLY_STEM"; 3266 LIST_STYLE_TYPE[LIST_STYLE_TYPE["CJK_IDEOGRAPHIC"] = 17] = "CJK_IDEOGRAPHIC"; 3267 LIST_STYLE_TYPE[LIST_STYLE_TYPE["DEVANAGARI"] = 18] = "DEVANAGARI"; 3268 LIST_STYLE_TYPE[LIST_STYLE_TYPE["ETHIOPIC_NUMERIC"] = 19] = "ETHIOPIC_NUMERIC"; 3269 LIST_STYLE_TYPE[LIST_STYLE_TYPE["GEORGIAN"] = 20] = "GEORGIAN"; 3270 LIST_STYLE_TYPE[LIST_STYLE_TYPE["GUJARATI"] = 21] = "GUJARATI"; 3271 LIST_STYLE_TYPE[LIST_STYLE_TYPE["GURMUKHI"] = 22] = "GURMUKHI"; 3272 LIST_STYLE_TYPE[LIST_STYLE_TYPE["HEBREW"] = 22] = "HEBREW"; 3273 LIST_STYLE_TYPE[LIST_STYLE_TYPE["HIRAGANA"] = 23] = "HIRAGANA"; 3274 LIST_STYLE_TYPE[LIST_STYLE_TYPE["HIRAGANA_IROHA"] = 24] = "HIRAGANA_IROHA"; 3275 LIST_STYLE_TYPE[LIST_STYLE_TYPE["JAPANESE_FORMAL"] = 25] = "JAPANESE_FORMAL"; 3276 LIST_STYLE_TYPE[LIST_STYLE_TYPE["JAPANESE_INFORMAL"] = 26] = "JAPANESE_INFORMAL"; 3277 LIST_STYLE_TYPE[LIST_STYLE_TYPE["KANNADA"] = 27] = "KANNADA"; 3278 LIST_STYLE_TYPE[LIST_STYLE_TYPE["KATAKANA"] = 28] = "KATAKANA"; 3279 LIST_STYLE_TYPE[LIST_STYLE_TYPE["KATAKANA_IROHA"] = 29] = "KATAKANA_IROHA"; 3280 LIST_STYLE_TYPE[LIST_STYLE_TYPE["KHMER"] = 30] = "KHMER"; 3281 LIST_STYLE_TYPE[LIST_STYLE_TYPE["KOREAN_HANGUL_FORMAL"] = 31] = "KOREAN_HANGUL_FORMAL"; 3282 LIST_STYLE_TYPE[LIST_STYLE_TYPE["KOREAN_HANJA_FORMAL"] = 32] = "KOREAN_HANJA_FORMAL"; 3283 LIST_STYLE_TYPE[LIST_STYLE_TYPE["KOREAN_HANJA_INFORMAL"] = 33] = "KOREAN_HANJA_INFORMAL"; 3284 LIST_STYLE_TYPE[LIST_STYLE_TYPE["LAO"] = 34] = "LAO"; 3285 LIST_STYLE_TYPE[LIST_STYLE_TYPE["LOWER_ARMENIAN"] = 35] = "LOWER_ARMENIAN"; 3286 LIST_STYLE_TYPE[LIST_STYLE_TYPE["MALAYALAM"] = 36] = "MALAYALAM"; 3287 LIST_STYLE_TYPE[LIST_STYLE_TYPE["MONGOLIAN"] = 37] = "MONGOLIAN"; 3288 LIST_STYLE_TYPE[LIST_STYLE_TYPE["MYANMAR"] = 38] = "MYANMAR"; 3289 LIST_STYLE_TYPE[LIST_STYLE_TYPE["ORIYA"] = 39] = "ORIYA"; 3290 LIST_STYLE_TYPE[LIST_STYLE_TYPE["PERSIAN"] = 40] = "PERSIAN"; 3291 LIST_STYLE_TYPE[LIST_STYLE_TYPE["SIMP_CHINESE_FORMAL"] = 41] = "SIMP_CHINESE_FORMAL"; 3292 LIST_STYLE_TYPE[LIST_STYLE_TYPE["SIMP_CHINESE_INFORMAL"] = 42] = "SIMP_CHINESE_INFORMAL"; 3293 LIST_STYLE_TYPE[LIST_STYLE_TYPE["TAMIL"] = 43] = "TAMIL"; 3294 LIST_STYLE_TYPE[LIST_STYLE_TYPE["TELUGU"] = 44] = "TELUGU"; 3295 LIST_STYLE_TYPE[LIST_STYLE_TYPE["THAI"] = 45] = "THAI"; 3296 LIST_STYLE_TYPE[LIST_STYLE_TYPE["TIBETAN"] = 46] = "TIBETAN"; 3297 LIST_STYLE_TYPE[LIST_STYLE_TYPE["TRAD_CHINESE_FORMAL"] = 47] = "TRAD_CHINESE_FORMAL"; 3298 LIST_STYLE_TYPE[LIST_STYLE_TYPE["TRAD_CHINESE_INFORMAL"] = 48] = "TRAD_CHINESE_INFORMAL"; 3299 LIST_STYLE_TYPE[LIST_STYLE_TYPE["UPPER_ARMENIAN"] = 49] = "UPPER_ARMENIAN"; 3300 LIST_STYLE_TYPE[LIST_STYLE_TYPE["DISCLOSURE_OPEN"] = 50] = "DISCLOSURE_OPEN"; 3301 LIST_STYLE_TYPE[LIST_STYLE_TYPE["DISCLOSURE_CLOSED"] = 51] = "DISCLOSURE_CLOSED"; 3302 })(LIST_STYLE_TYPE || (LIST_STYLE_TYPE = {})); 3303 var listStyleType = { 3304 name: 'list-style-type', 3305 initialValue: 'none', 3306 prefix: false, 3307 type: PropertyDescriptorParsingType.IDENT_VALUE, 3308 parse: function (type) { 3309 switch (type) { 3310 case 'disc': 3311 return LIST_STYLE_TYPE.DISC; 3312 case 'circle': 3313 return LIST_STYLE_TYPE.CIRCLE; 3314 case 'square': 3315 return LIST_STYLE_TYPE.SQUARE; 3316 case 'decimal': 3317 return LIST_STYLE_TYPE.DECIMAL; 3318 case 'cjk-decimal': 3319 return LIST_STYLE_TYPE.CJK_DECIMAL; 3320 case 'decimal-leading-zero': 3321 return LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO;
3322 case 'lower-roman': 3323 return LIST_STYLE_TYPE.LOWER_ROMAN; 3324 case 'upper-roman': 3325 return LIST_STYLE_TYPE.UPPER_ROMAN; 3326 case 'lower-greek': 3327 return LIST_STYLE_TYPE.LOWER_GREEK; 3328 case 'lower-alpha': 3329 return LIST_STYLE_TYPE.LOWER_ALPHA; 3330 case 'upper-alpha': 3331 return LIST_STYLE_TYPE.UPPER_ALPHA; 3332 case 'arabic-indic': 3333 return LIST_STYLE_TYPE.ARABIC_INDIC; 3334 case 'armenian': 3335 return LIST_STYLE_TYPE.ARMENIAN; 3336 case 'bengali': 3337 return LIST_STYLE_TYPE.BENGALI; 3338 case 'cambodian': 3339 return LIST_STYLE_TYPE.CAMBODIAN; 3340 case 'cjk-earthly-branch': 3341 return LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH; 3342 case 'cjk-heavenly-stem': 3343 return LIST_STYLE_TYPE.CJK_HEAVENLY_STEM; 3344 case 'cjk-ideographic': 3345 return LIST_STYLE_TYPE.CJK_IDEOGRAPHIC; 3346 case 'devanagari': 3347 return LIST_STYLE_TYPE.DEVANAGARI; 3348 case 'ethiopic-numeric': 3349 return LIST_STYLE_TYPE.ETHIOPIC_NUMERIC; 3350 case 'georgian': 3351 return LIST_STYLE_TYPE.GEORGIAN; 3352 case 'gujarati': 3353 return LIST_STYLE_TYPE.GUJARATI; 3354 case 'gurmukhi': 3355 return LIST_STYLE_TYPE.GURMUKHI; 3356 case 'hebrew': 3357 return LIST_STYLE_TYPE.HEBREW; 3358 case 'hiragana': 3359 return LIST_STYLE_TYPE.HIRAGANA; 3360 case 'hiragana-iroha': 3361 return LIST_STYLE_TYPE.HIRAGANA_IROHA; 3362 case 'japanese-formal': 3363 return LIST_STYLE_TYPE.JAPANESE_FORMAL; 3364 case 'japanese-informal': 3365 return LIST_STYLE_TYPE.JAPANESE_INFORMAL; 3366 case 'kannada': 3367 return LIST_STYLE_TYPE.KANNADA; 3368 case 'katakana': 3369 return LIST_STYLE_TYPE.KATAKANA; 3370 case 'katakana-iroha': 3371 return LIST_STYLE_TYPE.KATAKANA_IROHA; 3372 case 'khmer': 3373 return LIST_STYLE_TYPE.KHMER; 3374 case 'korean-hangul-formal': 3375 return LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL; 3376 case 'korean-hanja-formal': 3377 return LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL; 3378 case 'korean-hanja-informal': 3379 return LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL; 3380 case 'lao': 3381 return LIST_STYLE_TYPE.LAO; 3382 case 'lower-armenian': 3383 return LIST_STYLE_TYPE.LOWER_ARMENIAN; 3384 case 'malayalam': 3385 return LIST_STYLE_TYPE.MALAYALAM; 3386 case 'mongolian': 3387 return LIST_STYLE_TYPE.MONGOLIAN; 3388 case 'myanmar': 3389 return LIST_STYLE_TYPE.MYANMAR; 3390 case 'oriya': 3391 return LIST_STYLE_TYPE.ORIYA; 3392 case 'persian': 3393 return LIST_STYLE_TYPE.PERSIAN; 3394 case 'simp-chinese-formal': 3395 return LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL; 3396 case 'simp-chinese-informal': 3397 return LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL; 3398 case 'tamil': 3399 return LIST_STYLE_TYPE.TAMIL; 3400 case 'telugu': 3401 return LIST_STYLE_TYPE.TELUGU; 3402 case 'thai': 3403 return LIST_STYLE_TYPE.THAI; 3404 case 'tibetan': 3405 return LIST_STYLE_TYPE.TIBETAN; 3406 case 'trad-chinese-formal': 3407 return LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL; 3408 case 'trad-chinese-informal': 3409 return LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL; 3410 case 'upper-armenian': 3411 return LIST_STYLE_TYPE.UPPER_ARMENIAN; 3412 case 'disclosure-open': 3413 return LIST_STYLE_TYPE.DISCLOSURE_OPEN; 3414 case 'disclosure-closed': 3415 return LIST_STYLE_TYPE.DISCLOSURE_CLOSED; 3416 case 'none': 3417 default: 3418 return LIST_STYLE_TYPE.NONE; 3419 } 3420 } 3421 }; 3422 3423 var marginForSide = function (side) { return ({ 3424 name: "margin-" + side, 3425 initialValue: '0', 3426 prefix: false, 3427 type: PropertyDescriptorParsingType.TOKEN_VALUE 3428 }); }; 3429 var marginTop = marginForSide('top'); 3430 var marginRight = marginForSide('right'); 3431 var marginBottom = marginForSide('bottom'); 3432 var marginLeft = marginForSide('left'); 3433 3434 var OVERFLOW; 3435 (function (OVERFLOW) { 3436 OVERFLOW[OVERFLOW["VISIBLE"] = 0] = "VISIBLE"; 3437 OVERFLOW[OVERFLOW["HIDDEN"] = 1] = "HIDDEN"; 3438 OVERFLOW[OVERFLOW["SCROLL"] = 2] = "SCROLL"; 3439 OVERFLOW[OVERFLOW["AUTO"] = 3] = "AUTO"; 3440 })(OVERFLOW || (OVERFLOW = {})); 3441 var overflow = { 3442 name: 'overflow', 3443 initialValue: 'visible', 3444 prefix: false, 3445 type: PropertyDescriptorParsingType.LIST, 3446 parse: function (tokens) { 3447 return tokens.filter(isIdentToken).map(function (overflow) { 3448 switch (overflow.value) { 3449 case 'hidden': 3450 return OVERFLOW.HIDDEN; 3451 case 'scroll': 3452 return OVERFLOW.SCROLL; 3453 case 'auto': 3454 return OVERFLOW.AUTO; 3455 case 'visible': 3456 default: 3457 return OVERFLOW.VISIBLE; 3458 } 3459 }); 3460 } 3461 }; 3462 3463 var OVERFLOW_WRAP; 3464 (function (OVERFLOW_WRAP) { 3465 OVERFLOW_WRAP["NORMAL"] = "normal"; 3466 OVERFLOW_WRAP["BREAK_WORD"] = "break-word"; 3467 })(OVERFLOW_WRAP || (OVERFLOW_WRAP = {})); 3468 var overflowWrap = { 3469 name: 'overflow-wrap', 3470 initialValue: 'normal', 3471 prefix: false, 3472 type: PropertyDescriptorParsingType.IDENT_VALUE, 3473 parse: function (overflow) { 3474 switch (overflow) { 3475 case 'break-word': 3476 return OVERFLOW_WRAP.BREAK_WORD; 3477 case 'normal': 3478 default: 3479 return OVERFLOW_WRAP.NORMAL; 3480 } 3481 } 3482 }; 3483 3484 var paddingForSide = function (side) { return ({ 3485 name: "padding-" + side, 3486 initialValue: '0', 3487 prefix: false, 3488 type: PropertyDescriptorParsingType.TYPE_VALUE, 3489 format: 'length-percentage' 3490 }); }; 3491 var paddingTop = paddingForSide('top'); 3492 var paddingRight = paddingForSide('right'); 3493 var paddingBottom = paddingForSide('bottom'); 3494 var paddingLeft = paddingForSide('left'); 3495 3496 var TEXT_ALIGN; 3497 (function (TEXT_ALIGN) { 3498 TEXT_ALIGN[TEXT_ALIGN["LEFT"] = 0] = "LEFT";
vendor: 6,945 bytes, lines 3499-3686
3499 TEXT_ALIGN[TEXT_ALIGN["CENTER"] = 1] = "CENTER"; 3500 TEXT_ALIGN[TEXT_ALIGN["RIGHT"] = 2] = "RIGHT"; 3501 })(TEXT_ALIGN || (TEXT_ALIGN = {})); 3502 var textAlign = { 3503 name: 'text-align', 3504 initialValue: 'left', 3505 prefix: false, 3506 type: PropertyDescriptorParsingType.IDENT_VALUE, 3507 parse: function (textAlign) { 3508 switch (textAlign) { 3509 case 'right': 3510 return TEXT_ALIGN.RIGHT; 3511 case 'center': 3512 case 'justify': 3513 return TEXT_ALIGN.CENTER; 3514 case 'left': 3515 default: 3516 return TEXT_ALIGN.LEFT; 3517 } 3518 } 3519 }; 3520 3521 var POSITION; 3522 (function (POSITION) { 3523 POSITION[POSITION["STATIC"] = 0] = "STATIC"; 3524 POSITION[POSITION["RELATIVE"] = 1] = "RELATIVE"; 3525 POSITION[POSITION["ABSOLUTE"] = 2] = "ABSOLUTE"; 3526 POSITION[POSITION["FIXED"] = 3] = "FIXED"; 3527 POSITION[POSITION["STICKY"] = 4] = "STICKY"; 3528 })(POSITION || (POSITION = {})); 3529 var position = { 3530 name: 'position', 3531 initialValue: 'static', 3532 prefix: false, 3533 type: PropertyDescriptorParsingType.IDENT_VALUE, 3534 parse: function (position) { 3535 switch (position) { 3536 case 'relative': 3537 return POSITION.RELATIVE; 3538 case 'absolute': 3539 return POSITION.ABSOLUTE; 3540 case 'fixed': 3541 return POSITION.FIXED; 3542 case 'sticky': 3543 return POSITION.STICKY; 3544 } 3545 return POSITION.STATIC; 3546 } 3547 }; 3548 3549 var textShadow = { 3550 name: 'text-shadow', 3551 initialValue: 'none', 3552 type: PropertyDescriptorParsingType.LIST, 3553 prefix: false, 3554 parse: function (tokens) { 3555 if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) { 3556 return []; 3557 } 3558 return parseFunctionArgs(tokens).map(function (values) { 3559 var shadow = { 3560 color: COLORS.TRANSPARENT, 3561 offsetX: ZERO_LENGTH, 3562 offsetY: ZERO_LENGTH, 3563 blur: ZERO_LENGTH 3564 }; 3565 var c = 0; 3566 for (var i = 0; i < values.length; i++) { 3567 var token = values[i]; 3568 if (isLength(token)) { 3569 if (c === 0) { 3570 shadow.offsetX = token; 3571 } 3572 else if (c === 1) { 3573 shadow.offsetY = token; 3574 } 3575 else { 3576 shadow.blur = token; 3577 } 3578 c++; 3579 } 3580 else { 3581 shadow.color = color.parse(token); 3582 } 3583 } 3584 return shadow; 3585 }); 3586 } 3587 }; 3588 3589 var TEXT_TRANSFORM; 3590 (function (TEXT_TRANSFORM) { 3591 TEXT_TRANSFORM[TEXT_TRANSFORM["NONE"] = 0] = "NONE"; 3592 TEXT_TRANSFORM[TEXT_TRANSFORM["LOWERCASE"] = 1] = "LOWERCASE"; 3593 TEXT_TRANSFORM[TEXT_TRANSFORM["UPPERCASE"] = 2] = "UPPERCASE"; 3594 TEXT_TRANSFORM[TEXT_TRANSFORM["CAPITALIZE"] = 3] = "CAPITALIZE"; 3595 })(TEXT_TRANSFORM || (TEXT_TRANSFORM = {})); 3596 var textTransform = { 3597 name: 'text-transform', 3598 initialValue: 'none', 3599 prefix: false, 3600 type: PropertyDescriptorParsingType.IDENT_VALUE, 3601 parse: function (textTransform) { 3602 switch (textTransform) { 3603 case 'uppercase': 3604 return TEXT_TRANSFORM.UPPERCASE; 3605 case 'lowercase': 3606 return TEXT_TRANSFORM.LOWERCASE; 3607 case 'capitalize': 3608 return TEXT_TRANSFORM.CAPITALIZE; 3609 } 3610 return TEXT_TRANSFORM.NONE; 3611 } 3612 }; 3613 3614 var transform = { 3615 name: 'transform', 3616 initialValue: 'none', 3617 prefix: true, 3618 type: PropertyDescriptorParsingType.VALUE, 3619 parse: function (token) { 3620 if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') { 3621 return null; 3622 } 3623 if (token.type === TokenType.FUNCTION) { 3624 var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name]; 3625 if (typeof transformFunction === 'undefined') { 3626 throw new Error("Attempting to parse an unsupported transform function \"" + token.name + "\""); 3627 } 3628 return transformFunction(token.values); 3629 } 3630 return null; 3631 } 3632 }; 3633 var matrix = function (args) { 3634 var values = args.filter(function (arg) { return arg.type === TokenType.NUMBER_TOKEN; }).map(function (arg) { return arg.number; }); 3635 return values.length === 6 ? values : null; 3636 }; 3637 // doesn't support 3D transforms at the moment 3638 var matrix3d = function (args) { 3639 var values = args.filter(function (arg) { return arg.type === TokenType.NUMBER_TOKEN; }).map(function (arg) { return arg.number; }); 3640 var a1 = values[0], b1 = values[1], _a = values[2], _b = values[3], a2 = values[4], b2 = values[5], _c = values[6], _d = values[7], _e = values[8], _f = values[9], _g = values[10], _h = values[11], a4 = values[12], b4 = values[13], _j = values[14], _k = values[15]; 3641 return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null; 3642 }; 3643 var SUPPORTED_TRANSFORM_FUNCTIONS = { 3644 matrix: matrix, 3645 matrix3d: matrix3d 3646 }; 3647 3648 var DEFAULT_VALUE = { 3649 type: TokenType.PERCENTAGE_TOKEN, 3650 number: 50, 3651 flags: FLAG_INTEGER 3652 }; 3653 var DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE]; 3654 var transformOrigin = { 3655 name: 'transform-origin', 3656 initialValue: '50% 50%', 3657 prefix: true, 3658 type: PropertyDescriptorParsingType.LIST, 3659 parse: function (tokens) { 3660 var origins = tokens.filter(isLengthPercentage); 3661 if (origins.length !== 2) { 3662 return DEFAULT; 3663 } 3664 return [origins[0], origins[1]]; 3665 } 3666 }; 3667 3668 var VISIBILITY; 3669 (function (VISIBILITY) { 3670 VISIBILITY[VISIBILITY["VISIBLE"] = 0] = "VISIBLE"; 3671 VISIBILITY[VISIBILITY["HIDDEN"] = 1] = "HIDDEN"; 3672 VISIBILITY[VISIBILITY["COLLAPSE"] = 2] = "COLLAPSE"; 3673 })(VISIBILITY || (VISIBILITY = {})); 3674 var visibility = { 3675 name: 'visible', 3676 initialValue: 'none', 3677 prefix: false, 3678 type: PropertyDescriptorParsingType.IDENT_VALUE, 3679 parse: function (visibility) { 3680 switch (visibility) { 3681 case 'hidden': 3682 return VISIBILITY.HIDDEN; 3683 case 'collapse': 3684 return VISIBILITY.COLLAPSE; 3685 case 'visible': 3686 default:
vendor: 8,494 bytes, lines 3687-3960
3687 return VISIBILITY.VISIBLE; 3688 } 3689 } 3690 }; 3691 3692 var WORD_BREAK; 3693 (function (WORD_BREAK) { 3694 WORD_BREAK["NORMAL"] = "normal"; 3695 WORD_BREAK["BREAK_ALL"] = "break-all"; 3696 WORD_BREAK["KEEP_ALL"] = "keep-all"; 3697 })(WORD_BREAK || (WORD_BREAK = {})); 3698 var wordBreak = { 3699 name: 'word-break', 3700 initialValue: 'normal', 3701 prefix: false, 3702 type: PropertyDescriptorParsingType.IDENT_VALUE, 3703 parse: function (wordBreak) { 3704 switch (wordBreak) { 3705 case 'break-all': 3706 return WORD_BREAK.BREAK_ALL; 3707 case 'keep-all': 3708 return WORD_BREAK.KEEP_ALL; 3709 case 'normal': 3710 default: 3711 return WORD_BREAK.NORMAL; 3712 } 3713 } 3714 }; 3715 3716 var zIndex = { 3717 name: 'z-index', 3718 initialValue: 'auto', 3719 prefix: false, 3720 type: PropertyDescriptorParsingType.VALUE, 3721 parse: function (token) { 3722 if (token.type === TokenType.IDENT_TOKEN) { 3723 return { auto: true, order: 0 }; 3724 } 3725 if (isNumberToken(token)) { 3726 return { auto: false, order: token.number }; 3727 } 3728 throw new Error("Invalid z-index number parsed"); 3729 } 3730 }; 3731 3732 var opacity = { 3733 name: 'opacity', 3734 initialValue: '1', 3735 type: PropertyDescriptorParsingType.VALUE, 3736 prefix: false, 3737 parse: function (token) { 3738 if (isNumberToken(token)) { 3739 return token.number; 3740 } 3741 return 1; 3742 } 3743 }; 3744 3745 var textDecorationColor = { 3746 name: "text-decoration-color", 3747 initialValue: 'transparent', 3748 prefix: false, 3749 type: PropertyDescriptorParsingType.TYPE_VALUE, 3750 format: 'color' 3751 }; 3752 3753 var textDecorationLine = { 3754 name: 'text-decoration-line', 3755 initialValue: 'none', 3756 prefix: false, 3757 type: PropertyDescriptorParsingType.LIST, 3758 parse: function (tokens) { 3759 return tokens 3760 .filter(isIdentToken) 3761 .map(function (token) { 3762 switch (token.value) { 3763 case 'underline': 3764 return 1 /* UNDERLINE */; 3765 case 'overline': 3766 return 2 /* OVERLINE */; 3767 case 'line-through': 3768 return 3 /* LINE_THROUGH */; 3769 case 'none': 3770 return 4 /* BLINK */; 3771 } 3772 return 0 /* NONE */; 3773 }) 3774 .filter(function (line) { return line !== 0 /* NONE */; }); 3775 } 3776 }; 3777 3778 var fontFamily = { 3779 name: "font-family", 3780 initialValue: '', 3781 prefix: false, 3782 type: PropertyDescriptorParsingType.LIST, 3783 parse: function (tokens) { 3784 return tokens.filter(isStringToken$1).map(function (token) { return token.value; }); 3785 } 3786 }; 3787 var isStringToken$1 = function (token) { 3788 return token.type === TokenType.STRING_TOKEN || token.type === TokenType.IDENT_TOKEN; 3789 }; 3790 3791 var fontSize = { 3792 name: "font-size", 3793 initialValue: '0', 3794 prefix: false, 3795 type: PropertyDescriptorParsingType.TYPE_VALUE, 3796 format: 'length' 3797 }; 3798 3799 var fontWeight = { 3800 name: 'font-weight', 3801 initialValue: 'normal', 3802 type: PropertyDescriptorParsingType.VALUE, 3803 prefix: false, 3804 parse: function (token) { 3805 if (isNumberToken(token)) { 3806 return token.number; 3807 } 3808 if (isIdentToken(token)) { 3809 switch (token.value) { 3810 case 'bold': 3811 return 700; 3812 case 'normal': 3813 default: 3814 return 400; 3815 } 3816 } 3817 return 400; 3818 } 3819 }; 3820 3821 var fontVariant = { 3822 name: 'font-variant', 3823 initialValue: 'none', 3824 type: PropertyDescriptorParsingType.LIST, 3825 prefix: false, 3826 parse: function (tokens) { 3827 return tokens.filter(isIdentToken).map(function (token) { return token.value; }); 3828 } 3829 }; 3830 3831 var FONT_STYLE; 3832 (function (FONT_STYLE) { 3833 FONT_STYLE["NORMAL"] = "normal"; 3834 FONT_STYLE["ITALIC"] = "italic"; 3835 FONT_STYLE["OBLIQUE"] = "oblique"; 3836 })(FONT_STYLE || (FONT_STYLE = {})); 3837 var fontStyle = { 3838 name: 'font-style', 3839 initialValue: 'normal', 3840 prefix: false, 3841 type: PropertyDescriptorParsingType.IDENT_VALUE, 3842 parse: function (overflow) { 3843 switch (overflow) { 3844 case 'oblique': 3845 return FONT_STYLE.OBLIQUE; 3846 case 'italic': 3847 return FONT_STYLE.ITALIC; 3848 case 'normal': 3849 default: 3850 return FONT_STYLE.NORMAL; 3851 } 3852 } 3853 }; 3854 3855 var contains = function (bit, value) { return (bit & value) !== 0; }; 3856 3857 var content = { 3858 name: 'content', 3859 initialValue: 'none', 3860 type: PropertyDescriptorParsingType.LIST, 3861 prefix: false, 3862 parse: function (tokens) { 3863 if (tokens.length === 0) { 3864 return []; 3865 } 3866 var first = tokens[0]; 3867 if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') { 3868 return []; 3869 } 3870 return tokens; 3871 } 3872 }; 3873 3874 var counterIncrement = { 3875 name: 'counter-increment', 3876 initialValue: 'none', 3877 prefix: true, 3878 type: PropertyDescriptorParsingType.LIST, 3879 parse: function (tokens) { 3880 if (tokens.length === 0) { 3881 return null; 3882 } 3883 var first = tokens[0]; 3884 if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') { 3885 return null; 3886 } 3887 var increments = []; 3888 var filtered = tokens.filter(nonWhiteSpace); 3889 for (var i = 0; i < filtered.length; i++) { 3890 var counter = filtered[i]; 3891 var next = filtered[i + 1]; 3892 if (counter.type === TokenType.IDENT_TOKEN) { 3893 var increment = next && isNumberToken(next) ? next.number : 1; 3894 increments.push({ counter: counter.value, increment: increment }); 3895 } 3896 } 3897 return increments; 3898 } 3899 }; 3900 3901 var counterReset = { 3902 name: 'counter-reset', 3903 initialValue: 'none', 3904 prefix: true, 3905 type: PropertyDescriptorParsingType.LIST, 3906 parse: function (tokens) { 3907 if (tokens.length === 0) { 3908 return []; 3909 } 3910 var resets = []; 3911 var filtered = tokens.filter(nonWhiteSpace); 3912 for (var i = 0; i < filtered.length; i++) { 3913 var counter = filtered[i]; 3914 var next = filtered[i + 1]; 3915 if (isIdentToken(counter) && counter.value !== 'none') { 3916 var reset = next && isNumberToken(next) ? next.number : 0; 3917 resets.push({ counter: counter.value, reset: reset }); 3918 } 3919 } 3920 return resets; 3921 } 3922 }; 3923 3924 var quotes = { 3925 name: 'quotes', 3926 initialValue: 'none', 3927 prefix: true, 3928 type: PropertyDescriptorParsingType.LIST, 3929 parse: function (tokens) { 3930 if (tokens.length === 0) { 3931 return null; 3932 } 3933 var first = tokens[0]; 3934 if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') { 3935 return null; 3936 } 3937 var quotes = []; 3938 var filtered = tokens.filter(isStringToken); 3939 if (filtered.length % 2 !== 0) { 3940 return null; 3941 } 3942 for (var i = 0; i < filtered.length; i += 2) { 3943 var open_1 = filtered[i].value; 3944 var close_1 = filtered[i + 1].value; 3945 quotes.push({ open: open_1, close: close_1 }); 3946 } 3947 return quotes; 3948 } 3949 }; 3950 var getQuote = function (quotes, depth, open) { 3951 if (!quotes) { 3952 return ''; 3953 } 3954 var quote = quotes[Math.min(depth, quotes.length - 1)]; 3955 if (!quote) { 3956 return ''; 3957 } 3958 return open ? quote.open : quote.close; 3959 }; 3960
vendor: 6,956 bytes, lines 3961-4075
3961 var boxShadow = { 3962 name: 'box-shadow', 3963 initialValue: 'none', 3964 type: PropertyDescriptorParsingType.LIST, 3965 prefix: false, 3966 parse: function (tokens) { 3967 if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) { 3968 return []; 3969 } 3970 return parseFunctionArgs(tokens).map(function (values) { 3971 var shadow = { 3972 color: 0x000000ff, 3973 offsetX: ZERO_LENGTH, 3974 offsetY: ZERO_LENGTH, 3975 blur: ZERO_LENGTH, 3976 spread: ZERO_LENGTH, 3977 inset: false 3978 }; 3979 var c = 0; 3980 for (var i = 0; i < values.length; i++) { 3981 var token = values[i]; 3982 if (isIdentWithValue(token, 'inset')) { 3983 shadow.inset = true; 3984 } 3985 else if (isLength(token)) { 3986 if (c === 0) { 3987 shadow.offsetX = token; 3988 } 3989 else if (c === 1) { 3990 shadow.offsetY = token; 3991 } 3992 else if (c === 2) { 3993 shadow.blur = token; 3994 } 3995 else { 3996 shadow.spread = token; 3997 } 3998 c++; 3999 } 4000 else { 4001 shadow.color = color.parse(token); 4002 } 4003 } 4004 return shadow; 4005 }); 4006 } 4007 }; 4008 4009 var CSSParsedDeclaration = /** @class */ (function () { 4010 function CSSParsedDeclaration(declaration) { 4011 this.backgroundClip = parse(backgroundClip, declaration.backgroundClip); 4012 this.backgroundColor = parse(backgroundColor, declaration.backgroundColor); 4013 this.backgroundImage = parse(backgroundImage, declaration.backgroundImage); 4014 this.backgroundOrigin = parse(backgroundOrigin, declaration.backgroundOrigin); 4015 this.backgroundPosition = parse(backgroundPosition, declaration.backgroundPosition); 4016 this.backgroundRepeat = parse(backgroundRepeat, declaration.backgroundRepeat); 4017 this.backgroundSize = parse(backgroundSize, declaration.backgroundSize); 4018 this.borderTopColor = parse(borderTopColor, declaration.borderTopColor); 4019 this.borderRightColor = parse(borderRightColor, declaration.borderRightColor); 4020 this.borderBottomColor = parse(borderBottomColor, declaration.borderBottomColor); 4021 this.borderLeftColor = parse(borderLeftColor, declaration.borderLeftColor); 4022 this.borderTopLeftRadius = parse(borderTopLeftRadius, declaration.borderTopLeftRadius); 4023 this.borderTopRightRadius = parse(borderTopRightRadius, declaration.borderTopRightRadius); 4024 this.borderBottomRightRadius = parse(borderBottomRightRadius, declaration.borderBottomRightRadius); 4025 this.borderBottomLeftRadius = parse(borderBottomLeftRadius, declaration.borderBottomLeftRadius); 4026 this.borderTopStyle = parse(borderTopStyle, declaration.borderTopStyle); 4027 this.borderRightStyle = parse(borderRightStyle, declaration.borderRightStyle); 4028 this.borderBottomStyle = parse(borderBottomStyle, declaration.borderBottomStyle); 4029 this.borderLeftStyle = parse(borderLeftStyle, declaration.borderLeftStyle); 4030 this.borderTopWidth = parse(borderTopWidth, declaration.borderTopWidth); 4031 this.borderRightWidth = parse(borderRightWidth, declaration.borderRightWidth); 4032 this.borderBottomWidth = parse(borderBottomWidth, declaration.borderBottomWidth); 4033 this.borderLeftWidth = parse(borderLeftWidth, declaration.borderLeftWidth); 4034 this.boxShadow = parse(boxShadow, declaration.boxShadow); 4035 this.color = parse(color$1, declaration.color); 4036 this.display = parse(display, declaration.display); 4037 this.float = parse(float, declaration.cssFloat); 4038 this.fontFamily = parse(fontFamily, declaration.fontFamily); 4039 this.fontSize = parse(fontSize, declaration.fontSize); 4040 this.fontStyle = parse(fontStyle, declaration.fontStyle); 4041 this.fontVariant = parse(fontVariant, declaration.fontVariant); 4042 this.fontWeight = parse(fontWeight, declaration.fontWeight); 4043 this.letterSpacing = parse(letterSpacing, declaration.letterSpacing); 4044 this.lineBreak = parse(lineBreak, declaration.lineBreak); 4045 this.lineHeight = parse(lineHeight, declaration.lineHeight); 4046 this.listStyleImage = parse(listStyleImage, declaration.listStyleImage); 4047 this.listStylePosition = parse(listStylePosition, declaration.listStylePosition); 4048 this.listStyleType = parse(listStyleType, declaration.listStyleType); 4049 this.marginTop = parse(marginTop, declaration.marginTop); 4050 this.marginRight = parse(marginRight, declaration.marginRight); 4051 this.marginBottom = parse(marginBottom, declaration.marginBottom); 4052 this.marginLeft = parse(marginLeft, declaration.marginLeft); 4053 this.opacity = parse(opacity, declaration.opacity); 4054 var overflowTuple = parse(overflow, declaration.overflow); 4055 this.overflowX = overflowTuple[0]; 4056 this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0]; 4057 this.overflowWrap = parse(overflowWrap, declaration.overflowWrap); 4058 this.paddingTop = parse(paddingTop, declaration.paddingTop); 4059 this.paddingRight = parse(paddingRight, declaration.paddingRight); 4060 this.paddingBottom = parse(paddingBottom, declaration.paddingBottom); 4061 this.paddingLeft = parse(paddingLeft, declaration.paddingLeft); 4062 this.position = parse(position, declaration.position); 4063 this.textAlign = parse(textAlign, declaration.textAlign); 4064 this.textDecorationColor = parse(textDecorationColor, declaration.textDecorationColor || declaration.color); 4065 this.textDecorationLine = parse(textDecorationLine, declaration.textDecorationLine); 4066 this.textShadow = parse(textShadow, declaration.textShadow); 4067 this.textTransform = parse(textTransform, declaration.textTransform); 4068 this.transform = parse(transform, declaration.transform); 4069 this.transformOrigin = parse(transformOrigin, declaration.transformOrigin); 4070 this.visibility = parse(visibility, declaration.visibility); 4071 this.wordBreak = parse(wordBreak, declaration.wordBreak); 4072 this.zIndex = parse(zIndex, declaration.zIndex); 4073 } 4074 CSSParsedDeclaration.prototype.isVisible = function () { 4075 return this.display > 0 && this.opacity >
4075 0 && this.visibility === VISIBILITY.VISIBLE; 4076 }; 4077 CSSParsedDeclaration.prototype.isTransparent = function () { 4078 return isTransparent(this.backgroundColor); 4079 }; 4080 CSSParsedDeclaration.prototype.isTransformed = function () { 4081 return this.transform !== null; 4082 }; 4083 CSSParsedDeclaration.prototype.isPositioned = function () { 4084 return this.position !== POSITION.STATIC; 4085 }; 4086 CSSParsedDeclaration.prototype.isPositionedWithZIndex = function () { 4087 return this.isPositioned() && !this.zIndex.auto; 4088 }; 4089 CSSParsedDeclaration.prototype.isFloating = function () { 4090 return this.float !== FLOAT.NONE; 4091 }; 4092 CSSParsedDeclaration.prototype.isInlineLevel = function () { 4093 return (contains(this.display, 4 /* INLINE */) || 4094 contains(this.display, 33554432 /* INLINE_BLOCK */) || 4095 contains(this.display, 268435456 /* INLINE_FLEX */) || 4096 contains(this.display, 536870912 /* INLINE_GRID */) || 4097 contains(this.display, 67108864 /* INLINE_LIST_ITEM */) || 4098 contains(this.display, 134217728 /* INLINE_TABLE */)); 4099 }; 4100 return CSSParsedDeclaration; 4101 }()); 4102 var CSSParsedPseudoDeclaration = /** @class */ (function () { 4103 function CSSParsedPseudoDeclaration(declaration) { 4104 this.content = parse(content, declaration.content); 4105 this.quotes = parse(quotes, declaration.quotes); 4106 } 4107 return CSSParsedPseudoDeclaration; 4108 }()); 4109 var CSSParsedCounterDeclaration = /** @class */ (function () { 4110 function CSSParsedCounterDeclaration(declaration) { 4111 this.counterIncrement = parse(counterIncrement, declaration.counterIncrement); 4112 this.counterReset = parse(counterReset, declaration.counterReset); 4113 } 4114 return CSSParsedCounterDeclaration; 4115 }()); 4116 // eslint-disable-next-line @typescript-eslint/no-explicit-any 4117 var parse = function (descriptor, style) { 4118 var tokenizer = new Tokenizer(); 4119 var value = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue; 4120 tokenizer.write(value); 4121 var parser = new Parser(tokenizer.read()); 4122 switch (descriptor.type) { 4123 case PropertyDescriptorParsingType.IDENT_VALUE: 4124 var token = parser.parseComponentValue(); 4125 return descriptor.parse(isIdentToken(token) ? token.value : descriptor.initialValue); 4126 case PropertyDescriptorParsingType.VALUE: 4127 return descriptor.parse(parser.parseComponentValue()); 4128 case PropertyDescriptorParsingType.LIST: 4129 return descriptor.parse(parser.parseComponentValues()); 4130 case PropertyDescriptorParsingType.TOKEN_VALUE: 4131 return parser.parseComponentValue(); 4132 case PropertyDescriptorParsingType.TYPE_VALUE: 4133 switch (descriptor.format) { 4134 case 'angle': 4135 return angle.parse(parser.parseComponentValue()); 4136 case 'color': 4137 return color.parse(parser.parseComponentValue()); 4138 case 'image': 4139 return image.parse(parser.parseComponentValue()); 4140 case 'length': 4141 var length_1 = parser.parseComponentValue(); 4142 return isLength(length_1) ? length_1 : ZERO_LENGTH; 4143 case 'length-percentage': 4144 var value_1 = parser.parseComponentValue(); 4145 return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH; 4146 } 4147 } 4148 throw new Error("Attempting to parse unsupported css format type " + descriptor.format); 4149 }; 4150 4151 var ElementContainer = /** @class */ (function () { 4152 function ElementContainer(element) { 4153 this.styles = new CSSParsedDeclaration(window.getComputedStyle(element, null)); 4154 this.textNodes = []; 4155 this.elements = []; 4156 if (this.styles.transform !== null && isHTMLElementNode(element)) { 4157 // getBoundingClientRect takes transforms into account 4158 element.style.transform = 'none'; 4159 } 4160 this.bounds = parseBounds(element); 4161 this.flags = 0; 4162 } 4163 return ElementContainer; 4164 }()); 4165 4166 var TextBounds = /** @class */ (function () { 4167 function TextBounds(text, bounds) { 4168 this.text = text; 4169 this.bounds = bounds; 4170 } 4171 return TextBounds; 4172 }()); 4173 var parseTextBounds = function (value, styles, node) { 4174 var textList = breakText(value, styles); 4175 var textBounds = []; 4176 var offset = 0; 4177 textList.forEach(function (text) { 4178 if (styles.textDecorationLine.length || text.trim().length > 0) { 4179 if (FEATURES.SUPPORT_RANGE_BOUNDS) { 4180 textBounds.push(new TextBounds(text, getRangeBounds(node, offset, text.length))); 4181 } 4182 else { 4183 var replacementNode = node.splitText(text.length); 4184 textBounds.push(new TextBounds(text, getWrapperBounds(node))); 4185 node = replacementNode; 4186 } 4187 } 4188 else if (!FEATURES.SUPPORT_RANGE_BOUNDS) { 4189 node = node.splitText(text.length); 4190 } 4191 offset += text.length; 4192 }); 4193 return textBounds; 4194 }; 4195 var getWrapperBounds = function (node) { 4196 var ownerDocument = node.ownerDocument; 4197 if (ownerDocument) { 4198 var wrapper = ownerDocument.createElement('html2canvaswrapper'); 4199 wrapper.appendChild(node.cloneNode(true)); 4200 var parentNode = node.parentNode; 4201 if (parentNode) { 4202 parentNode.replaceChild(wrapper, node); 4203 var bounds = parseBounds(wrapper); 4204 if (wrapper.firstChild) { 4205 parentNode.replaceChild(wrapper.firstChild, wrapper); 4206 } 4207 return bounds; 4208 } 4209 } 4210 return new Bounds(0, 0, 0, 0); 4211 }; 4212 var getRangeBounds = function (node, offset, length) { 4213 var ownerDocument = node.ownerDocument; 4214 if (!ownerDocument) { 4215 throw new Error('Node has no owner document'); 4216 } 4217 var range = ownerDocument.createRange(); 4218 range.setStart(node, offset); 4219 range.setEnd(node, offset + length); 4220 return Bounds.fromClientRect(range.getBoundingClientRect()); 4221 }; 4222 var breakText = function (value, styles) { 4223 return styles.letterSpacing !== 0 ? toCodePoints(value).map(function (i) { return fromCodePoint(i); }) : breakWords(value, styles); 4224 }; 4225 var breakWords = function (str, styles) { 4226 var breaker = LineBreaker(str, { 4227 lineBreak: styles.lineBreak,
vendor: 12,290 bytes, lines 4228-4511
4228 wordBreak: styles.overflowWrap === OVERFLOW_WRAP.BREAK_WORD ? 'break-word' : styles.wordBreak 4229 }); 4230 var words = []; 4231 var bk; 4232 while (!(bk = breaker.next()).done) { 4233 if (bk.value) { 4234 words.push(bk.value.slice()); 4235 } 4236 } 4237 return words; 4238 }; 4239 4240 var TextContainer = /** @class */ (function () { 4241 function TextContainer(node, styles) { 4242 this.text = transform$1(node.data, styles.textTransform); 4243 this.textBounds = parseTextBounds(this.text, styles, node); 4244 } 4245 return TextContainer; 4246 }()); 4247 var transform$1 = function (text, transform) { 4248 switch (transform) { 4249 case TEXT_TRANSFORM.LOWERCASE: 4250 return text.toLowerCase(); 4251 case TEXT_TRANSFORM.CAPITALIZE: 4252 return text.replace(CAPITALIZE, capitalize); 4253 case TEXT_TRANSFORM.UPPERCASE: 4254 return text.toUpperCase(); 4255 default: 4256 return text; 4257 } 4258 }; 4259 var CAPITALIZE = /(^|\s|:|-|\(|\))([a-z])/g; 4260 var capitalize = function (m, p1, p2) { 4261 if (m.length > 0) { 4262 return p1 + p2.toUpperCase(); 4263 } 4264 return m; 4265 }; 4266 4267 var ImageElementContainer = /** @class */ (function (_super) { 4268 __extends(ImageElementContainer, _super); 4269 function ImageElementContainer(img) { 4270 var _this = _super.call(this, img) || this; 4271 _this.src = img.currentSrc || img.src; 4272 _this.intrinsicWidth = img.naturalWidth; 4273 _this.intrinsicHeight = img.naturalHeight; 4274 CacheStorage.getInstance().addImage(_this.src); 4275 return _this; 4276 } 4277 return ImageElementContainer; 4278 }(ElementContainer)); 4279 4280 var CanvasElementContainer = /** @class */ (function (_super) { 4281 __extends(CanvasElementContainer, _super); 4282 function CanvasElementContainer(canvas) { 4283 var _this = _super.call(this, canvas) || this; 4284 _this.canvas = canvas; 4285 _this.intrinsicWidth = canvas.width; 4286 _this.intrinsicHeight = canvas.height; 4287 return _this; 4288 } 4289 return CanvasElementContainer; 4290 }(ElementContainer)); 4291 4292 var SVGElementContainer = /** @class */ (function (_super) { 4293 __extends(SVGElementContainer, _super); 4294 function SVGElementContainer(img) { 4295 var _this = _super.call(this, img) || this; 4296 var s = new XMLSerializer(); 4297 _this.svg = "data:image/svg+xml," + encodeURIComponent(s.serializeToString(img)); 4298 _this.intrinsicWidth = img.width.baseVal.value; 4299 _this.intrinsicHeight = img.height.baseVal.value; 4300 CacheStorage.getInstance().addImage(_this.svg); 4301 return _this; 4302 } 4303 return SVGElementContainer; 4304 }(ElementContainer)); 4305 4306 var LIElementContainer = /** @class */ (function (_super) { 4307 __extends(LIElementContainer, _super); 4308 function LIElementContainer(element) { 4309 var _this = _super.call(this, element) || this; 4310 _this.value = element.value; 4311 return _this; 4312 } 4313 return LIElementContainer; 4314 }(ElementContainer)); 4315 4316 var OLElementContainer = /** @class */ (function (_super) { 4317 __extends(OLElementContainer, _super); 4318 function OLElementContainer(element) { 4319 var _this = _super.call(this, element) || this; 4320 _this.start = element.start; 4321 _this.reversed = typeof element.reversed === 'boolean' && element.reversed === true; 4322 return _this; 4323 } 4324 return OLElementContainer; 4325 }(ElementContainer)); 4326 4327 var CHECKBOX_BORDER_RADIUS = [ 4328 { 4329 type: TokenType.DIMENSION_TOKEN, 4330 flags: 0, 4331 unit: 'px', 4332 number: 3 4333 } 4334 ]; 4335 var RADIO_BORDER_RADIUS = [ 4336 { 4337 type: TokenType.PERCENTAGE_TOKEN, 4338 flags: 0, 4339 number: 50 4340 } 4341 ]; 4342 var reformatInputBounds = function (bounds) { 4343 if (bounds.width > bounds.height) { 4344 return new Bounds(bounds.left + (bounds.width - bounds.height) / 2, bounds.top, bounds.height, bounds.height); 4345 } 4346 else if (bounds.width < bounds.height) { 4347 return new Bounds(bounds.left, bounds.top + (bounds.height - bounds.width) / 2, bounds.width, bounds.width); 4348 } 4349 return bounds; 4350 }; 4351 var getInputValue = function (node) { 4352 var value = node.type === PASSWORD ? new Array(node.value.length + 1).join('\u2022') : node.value; 4353 return value.length === 0 ? node.placeholder || '' : value; 4354 }; 4355 var CHECKBOX = 'checkbox'; 4356 var RADIO = 'radio'; 4357 var PASSWORD = 'password'; 4358 var INPUT_COLOR = 0x2a2a2aff; 4359 var InputElementContainer = /** @class */ (function (_super) { 4360 __extends(InputElementContainer, _super); 4361 function InputElementContainer(input) { 4362 var _this = _super.call(this, input) || this; 4363 _this.type = input.type.toLowerCase(); 4364 _this.checked = input.checked; 4365 _this.value = getInputValue(input); 4366 if (_this.type === CHECKBOX || _this.type === RADIO) { 4367 _this.styles.backgroundColor = 0xdededeff; 4368 _this.styles.borderTopColor = _this.styles.borderRightColor = _this.styles.borderBottomColor = _this.styles.borderLeftColor = 0xa5a5a5ff; 4369 _this.styles.borderTopWidth = _this.styles.borderRightWidth = _this.styles.borderBottomWidth = _this.styles.borderLeftWidth = 1; 4370 _this.styles.borderTopStyle = _this.styles.borderRightStyle = _this.styles.borderBottomStyle = _this.styles.borderLeftStyle = 4371 BORDER_STYLE.SOLID; 4372 _this.styles.backgroundClip = [BACKGROUND_CLIP.BORDER_BOX]; 4373 _this.styles.backgroundOrigin = [0 /* BORDER_BOX */]; 4374 _this.bounds = reformatInputBounds(_this.bounds); 4375 } 4376 switch (_this.type) { 4377 case CHECKBOX: 4378 _this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = CHECKBOX_BORDER_RADIUS; 4379 break; 4380 case RADIO: 4381 _this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = RADIO_BORDER_RADIUS; 4382 break; 4383 } 4384 return _this; 4385 } 4386 return InputElementContainer; 4387 }(ElementContainer)); 4388 4389 var SelectElementContainer = /** @class */ (function (_super) { 4390 __extends(SelectElementContainer, _super); 4391 function SelectElementContainer(element) { 4392 var _this = _super.call(this, element) || this; 4393 var option = element.options[element.selectedIndex || 0]; 4394 _this.value = option ? option.text || '' : ''; 4395 return _this; 4396 } 4397 return SelectElementContainer; 4398 }(ElementContainer)); 4399 4400 var TextareaElementContainer = /** @class */ (function (_super) { 4401 __extends(TextareaElementContainer, _super); 4402 function TextareaElementContainer(element) { 4403 var _this = _super.call(this, element) || this; 4404 _this.value = element.value; 4405 return _this; 4406 } 4407 return TextareaElementContainer; 4408 }(ElementContainer)); 4409 4410 var parseColor = function (value) { return color.parse(Parser.create(value).parseComponentValue()); }; 4411 var IFrameElementContainer = /** @class */ (function (_super) { 4412 __extends(IFrameElementContainer, _super); 4413 function IFrameElementContainer(iframe) { 4414 var _this = _super.call(this, iframe) || this; 4415 _this.src = iframe.src; 4416 _this.width = parseInt(iframe.width, 10) || 0; 4417 _this.height = parseInt(iframe.height, 10) || 0; 4418 _this.backgroundColor = _this.styles.backgroundColor; 4419 try { 4420 if (iframe.contentWindow && 4421 iframe.contentWindow.document && 4422 iframe.contentWindow.document.documentElement) { 4423 _this.tree = parseTree(iframe.contentWindow.document.documentElement); 4424 // http://www.w3.org/TR/css3-background/#special-backgrounds 4425 var documentBackgroundColor = iframe.contentWindow.document.documentElement 4426 ? parseColor(getComputedStyle(iframe.contentWindow.document.documentElement) 4427 .backgroundColor) 4428 : COLORS.TRANSPARENT; 4429 var bodyBackgroundColor = iframe.contentWindow.document.body 4430 ? parseColor(getComputedStyle(iframe.contentWindow.document.body).backgroundColor) 4431 : COLORS.TRANSPARENT; 4432 _this.backgroundColor = isTransparent(documentBackgroundColor) 4433 ? isTransparent(bodyBackgroundColor) 4434 ? _this.styles.backgroundColor 4435 : bodyBackgroundColor 4436 : documentBackgroundColor; 4437 } 4438 } 4439 catch (e) { } 4440 return _this; 4441 } 4442 return IFrameElementContainer; 4443 }(ElementContainer)); 4444 4445 var LIST_OWNERS = ['OL', 'UL', 'MENU']; 4446 var parseNodeTree = function (node, parent, root) { 4447 for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) { 4448 nextNode = childNode.nextSibling; 4449 if (isTextNode(childNode) && childNode.data.trim().length > 0) { 4450 parent.textNodes.push(new TextContainer(childNode, parent.styles)); 4451 } 4452 else if (isElementNode(childNode)) { 4453 var container = createContainer(childNode); 4454 if (container.styles.isVisible()) { 4455 if (createsRealStackingContext(childNode, container, root)) { 4456 container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */; 4457 } 4458 else if (createsStackingContext(container.styles)) { 4459 container.flags |= 2 /* CREATES_STACKING_CONTEXT */; 4460 } 4461 if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) { 4462 container.flags |= 8 /* IS_LIST_OWNER */; 4463 } 4464 parent.elements.push(container); 4465 if (!isTextareaElement(childNode) && !isSVGElement(childNode) && !isSelectElement(childNode)) { 4466 parseNodeTree(childNode, container, root); 4467 } 4468 } 4469 } 4470 } 4471 }; 4472 var createContainer = function (element) { 4473 if (isImageElement(element)) { 4474 return new ImageElementContainer(element); 4475 } 4476 if (isCanvasElement(element)) { 4477 return new CanvasElementContainer(element); 4478 } 4479 if (isSVGElement(element)) { 4480 return new SVGElementContainer(element); 4481 } 4482 if (isLIElement(element)) { 4483 return new LIElementContainer(element); 4484 } 4485 if (isOLElement(element)) { 4486 return new OLElementContainer(element); 4487 } 4488 if (isInputElement(element)) { 4489 return new InputElementContainer(element); 4490 } 4491 if (isSelectElement(element)) { 4492 return new SelectElementContainer(element); 4493 } 4494 if (isTextareaElement(element)) { 4495 return new TextareaElementContainer(element); 4496 } 4497 if (isIFrameElement(element)) { 4498 return new IFrameElementContainer(element); 4499 } 4500 return new ElementContainer(element); 4501 }; 4502 var parseTree = function (element) { 4503 var container = createContainer(element); 4504 container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */; 4505 parseNodeTree(element, container, container); 4506 return container; 4507 }; 4508 var createsRealStackingContext = function (node, container, root) { 4509 return (container.styles.isPositionedWithZIndex() || 4510 container.styles.opacity < 1 || 4511 container.styles.isTransformed() ||
vendor: 9,813 bytes, lines 4512-4866
4512 (isBodyElement(node) && root.styles.isTransparent())); 4513 }; 4514 var createsStackingContext = function (styles) { return styles.isPositioned() || styles.isFloating(); }; 4515 var isTextNode = function (node) { return node.nodeType === Node.TEXT_NODE; }; 4516 var isElementNode = function (node) { return node.nodeType === Node.ELEMENT_NODE; }; 4517 var isHTMLElementNode = function (node) { 4518 return typeof node.style !== 'undefined'; 4519 }; 4520 var isLIElement = function (node) { return node.tagName === 'LI'; }; 4521 var isOLElement = function (node) { return node.tagName === 'OL'; }; 4522 var isInputElement = function (node) { return node.tagName === 'INPUT'; }; 4523 var isHTMLElement = function (node) { return node.tagName === 'HTML'; }; 4524 var isSVGElement = function (node) { return node.tagName === 'svg'; }; 4525 var isBodyElement = function (node) { return node.tagName === 'BODY'; }; 4526 var isCanvasElement = function (node) { return node.tagName === 'CANVAS'; }; 4527 var isImageElement = function (node) { return node.tagName === 'IMG'; }; 4528 var isIFrameElement = function (node) { return node.tagName === 'IFRAME'; }; 4529 var isStyleElement = function (node) { return node.tagName === 'STYLE'; }; 4530 var isScriptElement = function (node) { return node.tagName === 'SCRIPT'; }; 4531 var isTextareaElement = function (node) { return node.tagName === 'TEXTAREA'; }; 4532 var isSelectElement = function (node) { return node.tagName === 'SELECT'; }; 4533 4534 var CounterState = /** @class */ (function () { 4535 function CounterState() { 4536 this.counters = {}; 4537 } 4538 CounterState.prototype.getCounterValue = function (name) { 4539 var counter = this.counters[name]; 4540 if (counter && counter.length) { 4541 return counter[counter.length - 1]; 4542 } 4543 return 1; 4544 }; 4545 CounterState.prototype.getCounterValues = function (name) { 4546 var counter = this.counters[name]; 4547 return counter ? counter : []; 4548 }; 4549 CounterState.prototype.pop = function (counters) { 4550 var _this = this; 4551 counters.forEach(function (counter) { return _this.counters[counter].pop(); }); 4552 }; 4553 CounterState.prototype.parse = function (style) { 4554 var _this = this; 4555 var counterIncrement = style.counterIncrement; 4556 var counterReset = style.counterReset; 4557 if (counterIncrement !== null) { 4558 counterIncrement.forEach(function (entry) { 4559 var counter = _this.counters[entry.counter]; 4560 if (counter) { 4561 counter[Math.max(0, counter.length - 1)] += entry.increment; 4562 } 4563 }); 4564 } 4565 var counterNames = []; 4566 counterReset.forEach(function (entry) { 4567 var counter = _this.counters[entry.counter]; 4568 counterNames.push(entry.counter); 4569 if (!counter) { 4570 counter = _this.counters[entry.counter] = []; 4571 } 4572 counter.push(entry.reset); 4573 }); 4574 return counterNames; 4575 }; 4576 return CounterState; 4577 }()); 4578 var ROMAN_UPPER = { 4579 integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1], 4580 values: ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'] 4581 }; 4582 var ARMENIAN = { 4583 integers: [ 4584 9000, 4585 8000, 4586 7000, 4587 6000, 4588 5000, 4589 4000, 4590 3000, 4591 2000, 4592 1000, 4593 900, 4594 800, 4595 700, 4596 600, 4597 500, 4598 400, 4599 300, 4600 200, 4601 100, 4602 90, 4603 80, 4604 70, 4605 60, 4606 50, 4607 40, 4608 30, 4609 20, 4610 10, 4611 9, 4612 8, 4613 7, 4614 6, 4615 5, 4616 4, 4617 3, 4618 2, 4619 1 4620 ], 4621 values: [ 4622 'Õ', 4623 'Õ', 4624 'Õ', 4625 'Õ', 4626 'Õ', 4627 'Õ', 4628 'Õ', 4629 'Õ', 4630 'Õ', 4631 'Õ', 4632 'Õ', 4633 'Õ', 4634 'Õ', 4635 'Õ', 4636 'Õ', 4637 'Õ ', 4638 'Õ', 4639 'Õ', 4640 'Õ', 4641 'Õ', 4642 'Õ', 4643 'Ô¿', 4644 'Ô¾', 4645 'Ô½', 4646 'Ô¼', 4647 'Ô»', 4648 'Ôº', 4649 'Ô¹', 4650 'Ô¸', 4651 'Ô·', 4652 'Ô¶', 4653 'Ôµ', 4654 'Ô´', 4655 'Ô³', 4656 'Ô²', 4657 'Ô±' 4658 ] 4659 }; 4660 var HEBREW = { 4661 integers: [ 4662 10000, 4663 9000, 4664 8000, 4665 7000, 4666 6000, 4667 5000, 4668 4000, 4669 3000, 4670 2000, 4671 1000, 4672 400, 4673 300, 4674 200, 4675 100, 4676 90, 4677 80, 4678 70, 4679 60, 4680 50, 4681 40, 4682 30, 4683 20, 4684 19, 4685 18, 4686 17, 4687 16, 4688 15, 4689 10, 4690 9, 4691 8, 4692 7, 4693 6, 4694 5, 4695 4, 4696 3, 4697 2, 4698 1 4699 ], 4700 values: [ 4701 '×׳', 4702 '×׳', 4703 '×׳', 4704 '×׳', 4705 '×׳', 4706 '×׳', 4707 '×׳', 4708 '×׳', 4709 '×׳', 4710 '×׳', 4711 'ת', 4712 'ש', 4713 'ר', 4714 '×§', 4715 'צ', 4716 'פ', 4717 '×¢', 4718 'ס', 4719 '× ', 4720 '×', 4721 '×', 4722 '×', 4723 '××', 4724 '××', 4725 '××', 4726 '××', 4727 '××', 4728 '×', 4729 '×', 4730 '×', 4731 '×', 4732 '×', 4733 '×', 4734 '×', 4735 '×', 4736 '×', 4737 '×' 4738 ] 4739 }; 4740 var GEORGIAN = { 4741 integers: [ 4742 10000, 4743 9000, 4744 8000, 4745 7000, 4746 6000, 4747 5000, 4748 4000, 4749 3000, 4750 2000, 4751 1000, 4752 900, 4753 800, 4754 700, 4755 600, 4756 500, 4757 400, 4758 300, 4759 200, 4760 100, 4761 90, 4762 80, 4763 70, 4764 60, 4765 50, 4766 40, 4767 30, 4768 20, 4769 10, 4770 9, 4771 8, 4772 7, 4773 6, 4774 5, 4775 4, 4776 3, 4777 2, 4778 1 4779 ], 4780 values: [ 4781 'áµ', 4782 'á°', 4783 'á¯', 4784 'á´', 4785 'á®', 4786 'á', 4787 'á¬', 4788 'á«', 4789 'áª', 4790 'á©', 4791 'á¨', 4792 'á§', 4793 'á¦', 4794 'á¥', 4795 'á¤', 4796 'á³', 4797 'á¢', 4798 'á¡', 4799 'á ', 4800 'á', 4801 'á', 4802 'á', 4803 'á²', 4804 'á', 4805 'á', 4806 'á', 4807 'á', 4808 'á', 4809 'á', 4810 'á±', 4811 'á', 4812 'á', 4813 'á', 4814 'á', 4815 'á', 4816 'á', 4817 'á' 4818 ] 4819 }; 4820 var createAdditiveCounter = function (value, min, max, symbols, fallback, suffix) { 4821 if (value < min || value > max) { 4822 return createCounterText(value, fallback, suffix.length > 0); 4823 } 4824 return (symbols.integers.reduce(function (string, integer, index) { 4825 while (value >= integer) { 4826 value -= integer; 4827 string += symbols.values[index]; 4828 } 4829 return string; 4830 }, '') + suffix); 4831 }; 4832 var createCounterStyleWithSymbolResolver = function (value, codePointRangeLength, isNumeric, resolver) { 4833 var string = ''; 4834 do { 4835 if (!isNumeric) { 4836 value--; 4837 } 4838 string = resolver(value) + string; 4839 value /= codePointRangeLength; 4840 } while (value * codePointRangeLength >= codePointRangeLength); 4841 return string; 4842 }; 4843 var createCounterStyleFromRange = function (value, codePointRangeStart, codePointRangeEnd, isNumeric, suffix) { 4844 var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1; 4845 return ((value < 0 ? '-' : '') + 4846 (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function (codePoint) { 4847 return fromCodePoint(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart); 4848 }) + 4849 suffix)); 4850 }; 4851 var createCounterStyleFromSymbols = function (value, symbols, suffix) { 4852 if (suffix === void 0) { suffix = '. '; } 4853 var codePointRangeLength = symbols.length; 4854 return (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, false, function (codePoint) { return symbols[Math.floor(codePoint % codePointRangeLength)]; }) + suffix); 4855 }; 4856 var CJK_ZEROS = 1 << 0; 4857 var CJK_TEN_COEFFICIENTS = 1 << 1; 4858 var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2; 4859 var CJK_HUNDRED_COEFFICIENTS = 1 << 3; 4860 var createCJKCounter = function (value, numbers, multipliers, negativeSign, suffix, flags) { 4861 if (value < -9999 || value > 9999) { 4862 return createCounterText(value, LIST_STYLE_TYPE.CJK_DECIMAL, suffix.length > 0); 4863 } 4864 var tmp = Math.abs(value); 4865 var string = suffix; 4866 if (tmp === 0) {
4867 return numbers[0] + string; 4868 } 4869 for (var digit = 0; tmp > 0 && digit <= 4; digit++) { 4870 var coefficient = tmp % 10; 4871 if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') { 4872 string = numbers[coefficient] + string; 4873 } 4874 else if (coefficient > 1 || 4875 (coefficient === 1 && digit === 0) || 4876 (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS)) || 4877 (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100) || 4878 (coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS))) { 4879 string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string; 4880 } 4881 else if (coefficient === 1 && digit > 0) { 4882 string = multipliers[digit - 1] + string; 4883 } 4884 tmp = Math.floor(tmp / 10); 4885 } 4886 return (value < 0 ? negativeSign : '') + string; 4887 }; 4888 var CHINESE_INFORMAL_MULTIPLIERS = 'åç¾åè¬'; 4889 var CHINESE_FORMAL_MULTIPLIERS = 'æ¾ä½°ä»è¬'; 4890 var JAPANESE_NEGATIVE = 'ãã¤ãã¹'; 4891 var KOREAN_NEGATIVE = 'ë§ì´ëì¤'; 4892 var createCounterText = function (value, type, appendSuffix) { 4893 var defaultSuffix = appendSuffix ? '. ' : ''; 4894 var cjkSuffix = appendSuffix ? 'ã' : ''; 4895 var koreanSuffix = appendSuffix ? ', ' : ''; 4896 var spaceSuffix = appendSuffix ? ' ' : ''; 4897 switch (type) { 4898 case LIST_STYLE_TYPE.DISC: 4899 return 'â¢' + spaceSuffix; 4900 case LIST_STYLE_TYPE.CIRCLE: 4901 return 'â¦' + spaceSuffix; 4902 case LIST_STYLE_TYPE.SQUARE: 4903 return 'â¾' + spaceSuffix; 4904 case LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO: 4905 var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix); 4906 return string.length < 4 ? "0" + string : string; 4907 case LIST_STYLE_TYPE.CJK_DECIMAL: 4908 return createCounterStyleFromSymbols(value, 'ãä¸äºä¸åäºå ä¸å «ä¹', cjkSuffix); 4909 case LIST_STYLE_TYPE.LOWER_ROMAN: 4910 return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase(); 4911 case LIST_STYLE_TYPE.UPPER_ROMAN: 4912 return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix); 4913 case LIST_STYLE_TYPE.LOWER_GREEK: 4914 return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix); 4915 case LIST_STYLE_TYPE.LOWER_ALPHA: 4916 return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix); 4917 case LIST_STYLE_TYPE.UPPER_ALPHA: 4918 return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix); 4919 case LIST_STYLE_TYPE.ARABIC_INDIC: 4920 return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix); 4921 case LIST_STYLE_TYPE.ARMENIAN: 4922 case LIST_STYLE_TYPE.UPPER_ARMENIAN: 4923 return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix); 4924 case LIST_STYLE_TYPE.LOWER_ARMENIAN: 4925 return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase(); 4926 case LIST_STYLE_TYPE.BENGALI: 4927 return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix); 4928 case LIST_STYLE_TYPE.CAMBODIAN: 4929 case LIST_STYLE_TYPE.KHMER: 4930 return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix); 4931 case LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH: 4932 return createCounterStyleFromSymbols(value, 'åä¸å¯ å¯è¾°å·³åæªç³é æäº¥', cjkSuffix); 4933 case LIST_STYLE_TYPE.CJK_HEAVENLY_STEM: 4934 return createCounterStyleFromSymbols(value, 'ç²ä¹ä¸ä¸æå·±åºè¾å£¬ç¸', cjkSuffix); 4935 case LIST_STYLE_TYPE.CJK_IDEOGRAPHIC: 4936 case LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL: 4937 return createCJKCounter(value, 'é¶ä¸äºä¸åäºå ä¸å «ä¹', CHINESE_INFORMAL_MULTIPLIERS, 'è² ', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); 4938 case LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL: 4939 return createCJKCounter(value, 'é¶å£¹è²³åèä¼é¸ææç', CHINESE_FORMAL_MULTIPLIERS, 'è² ', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); 4940 case LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL: 4941 return createCJKCounter(value, 'é¶ä¸äºä¸åäºå ä¸å «ä¹', CHINESE_INFORMAL_MULTIPLIERS, 'è´', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); 4942 case LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL: 4943 return createCJKCounter(value, 'é¶å£¹è´°åèä¼éææç', CHINESE_FORMAL_MULTIPLIERS, 'è´', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS); 4944 case LIST_STYLE_TYPE.JAPANESE_INFORMAL: 4945 return createCJKCounter(value, 'ãä¸äºä¸åäºå ä¸å «ä¹', 'åç¾åä¸', JAPANESE_NEGATIVE, cjkSuffix, 0); 4946 case LIST_STYLE_TYPE.JAPANESE_FORMAL: 4947 return createCJKCounter(value, 'é¶å£±å¼ååä¼å ä¸å «ä¹', 'æ¾ç¾åä¸', JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS); 4948 case LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL: 4949 return createCJKCounter(value, 'ìì¼ì´ì¼ì¬ì¤ì¡ì¹ í구', 'ìë°±ì²ë§', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS); 4950 case LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL: 4951 return createCJKCounter(value, 'é¶ä¸äºä¸åäºå ä¸å «ä¹', 'åç¾åè¬', KOREAN_NEGATIVE, koreanSuffix, 0); 4952 case LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL: 4953 return createCJKCounter(value, 'é¶å£¹è²³ååäºå ä¸å «ä¹', 'æ¾ç¾å', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS); 4954 case LIST_STYLE_TYPE.DEVANAGARI: 4955 return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix); 4956 case LIST_STYLE_TYPE.GEORGIAN: 4957 return createAdditiveCounter(value, 1, 19999, GEORGIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix); 4958 case LIST_STYLE_TYPE.GUJARATI: 4959 return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix); 4960 case LIST_STYLE_TYPE.GURMUKHI: 4961 return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix); 4962 case LIST_STYLE_TYPE.HEBREW: 4963 return createAdditiveCounter(value, 1, 10999, HEBREW, LIST_STYLE_TYPE.DECIMAL, defaultSuffix); 4964 case LIST_STYLE_TYPE.HIRAGANA: 4965 return createCounterStyleFromSymbols(value, 'ããããããããããããããããã¡ã¤ã¦ã¨ãªã«ã¬ãã®ã¯ã²ãµã¸ã»ã¾ã¿ãããããããããããããããã'); 4966 case LIST_STYLE_TYPE.HIRAGANA_IROHA: 4967 return createCounterStyleFromSymbols(value, 'ããã¯ã«ã»ã¸ã¨ã¡ãã¬ããããããããã¤ããªããããã®ãããã¾ããµããã¦ãããããã¿ããã²ããã'); 4968 case LIST_STYLE_TYPE.KANNADA: 4969 return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix);
vendor: 22,988 bytes, lines 4970-5414
4970 case LIST_STYLE_TYPE.KATAKANA: 4971 return createCounterStyleFromSymbols(value, 'ã¢ã¤ã¦ã¨ãªã«ãã¯ã±ã³ãµã·ã¹ã»ã½ã¿ããããããããããããããããã ã¡ã¢ã¤ã¦ã¨ã©ãªã«ã¬ãã¯ã°ã±ã²ã³', cjkSuffix); 4972 case LIST_STYLE_TYPE.KATAKANA_IROHA: 4973 return createCounterStyleFromSymbols(value, 'ã¤ããããããããªãã«ã²ã¯ã«ã¨ã¿ã¬ã½ãããã©ã ã¦ã°ããªã¯ã¤ãã±ãã³ã¨ãã¢ãµãã¦ã¡ãã·ã±ãã¢ã»ã¹', cjkSuffix); 4974 case LIST_STYLE_TYPE.LAO: 4975 return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix); 4976 case LIST_STYLE_TYPE.MONGOLIAN: 4977 return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix); 4978 case LIST_STYLE_TYPE.MYANMAR: 4979 return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix); 4980 case LIST_STYLE_TYPE.ORIYA: 4981 return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix); 4982 case LIST_STYLE_TYPE.PERSIAN: 4983 return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix); 4984 case LIST_STYLE_TYPE.TAMIL: 4985 return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix); 4986 case LIST_STYLE_TYPE.TELUGU: 4987 return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix); 4988 case LIST_STYLE_TYPE.THAI: 4989 return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix); 4990 case LIST_STYLE_TYPE.TIBETAN: 4991 return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix); 4992 case LIST_STYLE_TYPE.DECIMAL: 4993 default: 4994 return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix); 4995 } 4996 }; 4997 4998 var IGNORE_ATTRIBUTE = 'data-html2canvas-ignore'; 4999 var DocumentCloner = /** @class */ (function () { 5000 function DocumentCloner(element, options) { 5001 this.options = options; 5002 this.scrolledElements = []; 5003 this.referenceElement = element; 5004 this.counters = new CounterState(); 5005 this.quoteDepth = 0; 5006 if (!element.ownerDocument) { 5007 throw new Error('Cloned element does not have an owner document'); 5008 } 5009 this.documentElement = this.cloneNode(element.ownerDocument.documentElement); 5010 } 5011 DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) { 5012 var _this = this; 5013 var iframe = createIFrameContainer(ownerDocument, windowSize); 5014 if (!iframe.contentWindow) { 5015 return Promise.reject("Unable to find iframe window"); 5016 } 5017 var scrollX = ownerDocument.defaultView.pageXOffset; 5018 var scrollY = ownerDocument.defaultView.pageYOffset; 5019 var cloneWindow = iframe.contentWindow; 5020 var documentClone = cloneWindow.document; 5021 /* Chrome doesn't detect relative background-images assigned in inline <style> sheets when fetched through getComputedStyle 5022 if window url is about:blank, we can assign the url to current by writing onto the document 5023 */ 5024 var iframeLoad = iframeLoader(iframe).then(function () { 5025 _this.scrolledElements.forEach(restoreNodeScroll); 5026 if (cloneWindow) { 5027 cloneWindow.scrollTo(windowSize.left, windowSize.top); 5028 if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent) && 5029 (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)) { 5030 documentClone.documentElement.style.top = -windowSize.top + 'px'; 5031 documentClone.documentElement.style.left = -windowSize.left + 'px'; 5032 documentClone.documentElement.style.position = 'absolute'; 5033 } 5034 } 5035 var onclone = _this.options.onclone; 5036 if (typeof _this.clonedReferenceElement === 'undefined') { 5037 return Promise.reject("Error finding the " + _this.referenceElement.nodeName + " in the cloned document"); 5038 } 5039 if (typeof onclone === 'function') { 5040 return Promise.resolve() 5041 .then(function () { return onclone(documentClone); }) 5042 .then(function () { return iframe; }); 5043 } 5044 return iframe; 5045 }); 5046 documentClone.open(); 5047 documentClone.write(serializeDoctype(document.doctype) + "<html></html>"); 5048 // Chrome scrolls the parent document for some reason after the write to the cloned window??? 5049 restoreOwnerScroll(this.referenceElement.ownerDocument, scrollX, scrollY); 5050 documentClone.replaceChild(documentClone.adoptNode(this.documentElement), documentClone.documentElement); 5051 documentClone.close(); 5052 return iframeLoad; 5053 }; 5054 DocumentCloner.prototype.createElementClone = function (node) { 5055 if (isCanvasElement(node)) { 5056 return this.createCanvasClone(node); 5057 } 5058 /* 5059 if (isIFrameElement(node)) { 5060 return this.createIFrameClone(node); 5061 } 5062 */ 5063 if (isStyleElement(node)) { 5064 return this.createStyleClone(node); 5065 } 5066 return node.cloneNode(false); 5067 }; 5068 DocumentCloner.prototype.createStyleClone = function (node) { 5069 try { 5070 var sheet = node.sheet; 5071 if (sheet && sheet.cssRules) { 5072 var css = [].slice.call(sheet.cssRules, 0).reduce(function (css, rule) { 5073 if (rule && typeof rule.cssText === 'string') { 5074 return css + rule.cssText; 5075 } 5076 return css; 5077 }, ''); 5078 var style = node.cloneNode(false); 5079 style.textContent = css; 5080 return style; 5081 } 5082 } 5083 catch (e) { 5084 // accessing node.sheet.cssRules throws a DOMException 5085 Logger.getInstance(this.options.id).error('Unable to access cssRules property', e); 5086 if (e.name !== 'SecurityError') { 5087 throw e; 5088 } 5089 } 5090 return node.cloneNode(false); 5091 }; 5092 DocumentCloner.prototype.createCanvasClone = function (canvas) { 5093 if (this.options.inlineImages && canvas.ownerDocument) { 5094 var img = canvas.ownerDocument.createElement('img'); 5095 try { 5096 img.src = canvas.toDataURL(); 5097 return img; 5098 } 5099 catch (e) { 5100 Logger.getInstance(this.options.id).info("Unable to clone canvas contents, canvas is tainted"); 5101 } 5102 } 5103 var clonedCanvas = canvas.cloneNode(false); 5104 try { 5105 clonedCanvas.width = canvas.width; 5106 clonedCanvas.height = canvas.height; 5107 var ctx = canvas.getContext('2d'); 5108 var clonedCtx = clonedCanvas.getContext('2d'); 5109 if (clonedCtx) { 5110 if (ctx) { 5111 clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0); 5112 } 5113 else { 5114 clonedCtx.drawImage(canvas, 0, 0); 5115 } 5116 } 5117 return clonedCanvas; 5118 } 5119 catch (e) { } 5120 return clonedCanvas; 5121 }; 5122 /* 5123 createIFrameClone(iframe: HTMLIFrameElement) { 5124 const tempIframe = <HTMLIFrameElement>iframe.cloneNode(false); 5125 const iframeKey = generateIframeKey(); 5126 tempIframe.setAttribute('data-html2canvas-internal-iframe-key', iframeKey); 5127 5128 const {width, height} = parseBounds(iframe); 5129 5130 this.resourceLoader.cache[iframeKey] = getIframeDocumentElement(iframe, this.options) 5131 .then(documentElement => { 5132 return this.renderer( 5133 documentElement, 5134 { 5135 allowTaint: this.options.allowTaint, 5136 backgroundColor: '#ffffff', 5137 canvas: null, 5138 imageTimeout: this.options.imageTimeout, 5139 logging: this.options.logging, 5140 proxy: this.options.proxy, 5141 removeContainer: this.options.removeContainer, 5142 scale: this.options.scale, 5143 foreignObjectRendering: this.options.foreignObjectRendering, 5144 useCORS: this.options.useCORS, 5145 target: new CanvasRenderer(), 5146 width, 5147 height, 5148 x: 0, 5149 y: 0, 5150 windowWidth: documentElement.ownerDocument.defaultView.innerWidth, 5151 windowHeight: documentElement.ownerDocument.defaultView.innerHeight, 5152 scrollX: documentElement.ownerDocument.defaultView.pageXOffset, 5153 scrollY: documentElement.ownerDocument.defaultView.pageYOffset 5154 }, 5155 ); 5156 }) 5157 .then( 5158 (canvas: HTMLCanvasElement) => 5159 new Promise((resolve, reject) => { 5160 const iframeCanvas = document.createElement('img'); 5161 iframeCanvas.onload = () => resolve(canvas); 5162 iframeCanvas.onerror = (event) => { 5163 // Empty iframes may result in empty "data:," URLs, which are invalid from the <img>'s point of view 5164 // and instead of `onload` cause `onerror` and unhandled rejection warnings 5165 // https://github.com/niklasvh/html2canvas/issues/1502 5166 iframeCanvas.src == 'data:,' ? resolve(canvas) : reject(event); 5167 }; 5168 iframeCanvas.src = canvas.toDataURL(); 5169 if (tempIframe.parentNode && iframe.ownerDocument && iframe.ownerDocument.defaultView) { 5170 tempIframe.parentNode.replaceChild( 5171 copyCSSStyles( 5172 iframe.ownerDocument.defaultView.getComputedStyle(iframe), 5173 iframeCanvas 5174 ), 5175 tempIframe 5176 ); 5177 } 5178 }) 5179 ); 5180 return tempIframe; 5181 } 5182 */ 5183 DocumentCloner.prototype.cloneNode = function (node) { 5184 if (isTextNode(node)) { 5185 return document.createTextNode(node.data); 5186 } 5187 if (!node.ownerDocument) { 5188 return node.cloneNode(false); 5189 } 5190 var window = node.ownerDocument.defaultView; 5191 if (isHTMLElementNode(node) && window) { 5192 var clone = this.createElementClone(node); 5193 var style = window.getComputedStyle(node); 5194 var styleBefore = window.getComputedStyle(node, ':before'); 5195 var styleAfter = window.getComputedStyle(node, ':after'); 5196 if (this.referenceElement === node) { 5197 this.clonedReferenceElement = clone; 5198 } 5199 if (isBodyElement(clone)) { 5200 createPseudoHideStyles(clone); 5201 } 5202 var counters = this.counters.parse(new CSSParsedCounterDeclaration(style)); 5203 var before_1 = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE); 5204 for (var child = node.firstChild; child; child = child.nextSibling) { 5205 if (!isElementNode(child) || 5206 (!isScriptElement(child) && 5207 !child.hasAttribute(IGNORE_ATTRIBUTE) && 5208 (typeof this.options.ignoreElements !== 'function' || !this.options.ignoreElements(child)))) { 5209 if (!this.options.copyStyles || !isElementNode(child) || !isStyleElement(child)) { 5210 clone.appendChild(this.cloneNode(child)); 5211 } 5212 } 5213 } 5214 if (before_1) { 5215 clone.insertBefore(before_1, clone.firstChild); 5216 } 5217 var after_1 = this.resolvePseudoContent(node, clone, styleAfter, PseudoElementType.AFTER); 5218 if (after_1) { 5219 clone.appendChild(after_1); 5220 } 5221 this.counters.pop(counters); 5222 if (style && this.options.copyStyles && !isIFrameElement(node)) { 5223 copyCSSStyles(style, clone); 5224 } 5225 //this.inlineAllImages(clone); 5226 if (node.scrollTop !== 0 || node.scrollLeft !== 0) { 5227 this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]); 5228 } 5229 if ((isTextareaElement(node) || isSelectElement(node)) && 5230 (isTextareaElement(clone) || isSelectElement(clone))) { 5231 clone.value = node.value; 5232 } 5233 return clone; 5234 } 5235 return node.cloneNode(false); 5236 }; 5237 DocumentCloner.prototype.resolvePseudoContent = function (node, clone, style, pseudoElt) { 5238 var _this = this; 5239 if (!style) { 5240 return; 5241 } 5242 var value = style.content; 5243 var document = clone.ownerDocument; 5244 if (!document || !value || value === 'none' || value === '-moz-alt-content' || style.display === 'none') { 5245 return; 5246 } 5247 this.counters.parse(new CSSParsedCounterDeclaration(style)); 5248 var declaration = new CSSParsedPseudoDeclaration(style); 5249 var anonymousReplacedElement = document.createElement('html2canvaspseudoelement'); 5250 copyCSSStyles(style, anonymousReplacedElement); 5251 declaration.content.forEach(function (token) { 5252 if (token.type === TokenType.STRING_TOKEN) { 5253 anonymousReplacedElement.appendChild(document.createTextNode(token.value)); 5254 } 5255 else if (token.type === TokenType.URL_TOKEN) { 5256 var img = document.createElement('img'); 5257 img.src = token.value; 5258 img.style.opacity = '1'; 5259 anonymousReplacedElement.appendChild(img); 5260 } 5261 else if (token.type === TokenType.FUNCTION) { 5262 if (token.name === 'attr') { 5263 var attr = token.values.filter(isIdentToken); 5264 if (attr.length) { 5265 anonymousReplacedElement.appendChild(document.createTextNode(node.getAttribute(attr[0].value) || '')); 5266 } 5267 } 5268 else if (token.name === 'counter') { 5269 var _a = token.values.filter(nonFunctionArgSeparator), counter = _a[0], counterStyle = _a[1]; 5270 if (counter && isIdentToken(counter)) { 5271 var counterState = _this.counters.getCounterValue(counter.value); 5272 var counterType = counterStyle && isIdentToken(counterStyle) 5273 ? listStyleType.parse(counterStyle.value) 5274 : LIST_STYLE_TYPE.DECIMAL; 5275 anonymousReplacedElement.appendChild(document.createTextNode(createCounterText(counterState, counterType, false))); 5276 } 5277 } 5278 else if (token.name === 'counters') { 5279 var _b = token.values.filter(nonFunctionArgSeparator), counter = _b[0], delim = _b[1], counterStyle = _b[2]; 5280 if (counter && isIdentToken(counter)) { 5281 var counterStates = _this.counters.getCounterValues(counter.value); 5282 var counterType_1 = counterStyle && isIdentToken(counterStyle) 5283 ? listStyleType.parse(counterStyle.value) 5284 : LIST_STYLE_TYPE.DECIMAL; 5285 var separator = delim && delim.type === TokenType.STRING_TOKEN ? delim.value : ''; 5286 var text = counterStates 5287 .map(function (value) { return createCounterText(value, counterType_1, false); }) 5288 .join(separator); 5289 anonymousReplacedElement.appendChild(document.createTextNode(text)); 5290 } 5291 } 5292 } 5293 else if (token.type === TokenType.IDENT_TOKEN) { 5294 switch (token.value) { 5295 case 'open-quote': 5296 anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, _this.quoteDepth++, true))); 5297 break; 5298 case 'close-quote': 5299 anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, --_this.quoteDepth, false))); 5300 break; 5301 default: 5302 // console.log('ident', token, declaration); 5303 } 5304 } 5305 }); 5306 anonymousReplacedElement.className = PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + " " + PSEUDO_HIDE_ELEMENT_CLASS_AFTER; 5307 clone.className += 5308 pseudoElt === PseudoElementType.BEFORE 5309 ? " " + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE 5310 : " " + PSEUDO_HIDE_ELEMENT_CLASS_AFTER; 5311 return anonymousReplacedElement; 5312 }; 5313 return DocumentCloner; 5314 }()); 5315 var PseudoElementType; 5316 (function (PseudoElementType) { 5317 PseudoElementType[PseudoElementType["BEFORE"] = 0] = "BEFORE"; 5318 PseudoElementType[PseudoElementType["AFTER"] = 1] = "AFTER"; 5319 })(PseudoElementType || (PseudoElementType = {})); 5320 var createIFrameContainer = function (ownerDocument, bounds) { 5321 var cloneIframeContainer = ownerDocument.createElement('iframe'); 5322 cloneIframeContainer.className = 'html2canvas-container'; 5323 cloneIframeContainer.style.visibility = 'hidden'; 5324 cloneIframeContainer.style.position = 'fixed'; 5325 cloneIframeContainer.style.left = '-10000px'; 5326 cloneIframeContainer.style.top = '0px'; 5327 cloneIframeContainer.style.border = '0'; 5328 cloneIframeContainer.width = bounds.width.toString(); 5329 cloneIframeContainer.height = bounds.height.toString(); 5330 cloneIframeContainer.scrolling = 'no'; // ios won't scroll without it 5331 cloneIframeContainer.setAttribute(IGNORE_ATTRIBUTE, 'true'); 5332 ownerDocument.body.appendChild(cloneIframeContainer); 5333 return cloneIframeContainer; 5334 }; 5335 var iframeLoader = function (iframe) { 5336 return new Promise(function (resolve, reject) { 5337 var cloneWindow = iframe.contentWindow; 5338 if (!cloneWindow) { 5339 return reject("No window assigned for iframe"); 5340 } 5341 var documentClone = cloneWindow.document; 5342 cloneWindow.onload = iframe.onload = documentClone.onreadystatechange = function () { 5343 cloneWindow.onload = iframe.onload = documentClone.onreadystatechange = null; 5344 var interval = setInterval(function () { 5345 if (documentClone.body.childNodes.length > 0 && documentClone.readyState === 'complete') { 5346 clearInterval(interval); 5347 resolve(iframe); 5348 } 5349 }, 50); 5350 }; 5351 }); 5352 }; 5353 var copyCSSStyles = function (style, target) { 5354 // Edge does not provide value for cssText 5355 for (var i = style.length - 1; i >= 0; i--) { 5356 var property = style.item(i); 5357 // Safari shows pseudoelements if content is set 5358 if (property !== 'content') { 5359 target.style.setProperty(property, style.getPropertyValue(property)); 5360 } 5361 } 5362 return target; 5363 }; 5364 var serializeDoctype = function (doctype) { 5365 var str = ''; 5366 if (doctype) { 5367 str += '<!DOCTYPE '; 5368 if (doctype.name) { 5369 str += doctype.name; 5370 } 5371 if (doctype.internalSubset) { 5372 str += doctype.internalSubset; 5373 } 5374 if (doctype.publicId) { 5375 str += "\"" + doctype.publicId + "\""; 5376 } 5377 if (doctype.systemId) { 5378 str += "\"" + doctype.systemId + "\""; 5379 } 5380 str += '>'; 5381 } 5382 return str; 5383 }; 5384 var restoreOwnerScroll = function (ownerDocument, x, y) { 5385 if (ownerDocument && 5386 ownerDocument.defaultView && 5387 (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)) { 5388 ownerDocument.defaultView.scrollTo(x, y); 5389 } 5390 }; 5391 var restoreNodeScroll = function (_a) { 5392 var element = _a[0], x = _a[1], y = _a[2]; 5393 element.scrollLeft = x; 5394 element.scrollTop = y; 5395 }; 5396 var PSEUDO_BEFORE = ':before'; 5397 var PSEUDO_AFTER = ':after'; 5398 var PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = '___html2canvas___pseudoelement_before'; 5399 var PSEUDO_HIDE_ELEMENT_CLASS_AFTER = '___html2canvas___pseudoelement_after'; 5400 var PSEUDO_HIDE_ELEMENT_STYLE = "{\n content: \"\" !important;\n display: none !important;\n}"; 5401 var createPseudoHideStyles = function (body) { 5402 createStyles(body, "." + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + PSEUDO_BEFORE + PSEUDO_HIDE_ELEMENT_STYLE + "\n ." + PSEUDO_HIDE_ELEMENT_CLASS_AFTER + PSEUDO_AFTER + PSEUDO_HIDE_ELEMENT_STYLE); 5403 }; 5404 var createStyles = function (body, styles) { 5405 var document = body.ownerDocument; 5406 if (document) { 5407 var style = document.createElement('style'); 5408 style.textContent = styles; 5409 body.appendChild(style); 5410 } 5411 }; 5412 5413 var PathType; 5414 (function (PathType) {
vendor: 11,536 bytes, lines 5415-5614
5415 PathType[PathType["VECTOR"] = 0] = "VECTOR"; 5416 PathType[PathType["BEZIER_CURVE"] = 1] = "BEZIER_CURVE"; 5417 })(PathType || (PathType = {})); 5418 var equalPath = function (a, b) { 5419 if (a.length === b.length) { 5420 return a.some(function (v, i) { return v === b[i]; }); 5421 } 5422 return false; 5423 }; 5424 var transformPath = function (path, deltaX, deltaY, deltaW, deltaH) { 5425 return path.map(function (point, index) { 5426 switch (index) { 5427 case 0: 5428 return point.add(deltaX, deltaY); 5429 case 1: 5430 return point.add(deltaX + deltaW, deltaY); 5431 case 2: 5432 return point.add(deltaX + deltaW, deltaY + deltaH); 5433 case 3: 5434 return point.add(deltaX, deltaY + deltaH); 5435 } 5436 return point; 5437 }); 5438 }; 5439 5440 var Vector = /** @class */ (function () { 5441 function Vector(x, y) { 5442 this.type = PathType.VECTOR; 5443 this.x = x; 5444 this.y = y; 5445 } 5446 Vector.prototype.add = function (deltaX, deltaY) { 5447 return new Vector(this.x + deltaX, this.y + deltaY); 5448 }; 5449 return Vector; 5450 }()); 5451 5452 var lerp = function (a, b, t) { 5453 return new Vector(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t); 5454 }; 5455 var BezierCurve = /** @class */ (function () { 5456 function BezierCurve(start, startControl, endControl, end) { 5457 this.type = PathType.BEZIER_CURVE; 5458 this.start = start; 5459 this.startControl = startControl; 5460 this.endControl = endControl; 5461 this.end = end; 5462 } 5463 BezierCurve.prototype.subdivide = function (t, firstHalf) { 5464 var ab = lerp(this.start, this.startControl, t); 5465 var bc = lerp(this.startControl, this.endControl, t); 5466 var cd = lerp(this.endControl, this.end, t); 5467 var abbc = lerp(ab, bc, t); 5468 var bccd = lerp(bc, cd, t); 5469 var dest = lerp(abbc, bccd, t); 5470 return firstHalf ? new BezierCurve(this.start, ab, abbc, dest) : new BezierCurve(dest, bccd, cd, this.end); 5471 }; 5472 BezierCurve.prototype.add = function (deltaX, deltaY) { 5473 return new BezierCurve(this.start.add(deltaX, deltaY), this.startControl.add(deltaX, deltaY), this.endControl.add(deltaX, deltaY), this.end.add(deltaX, deltaY)); 5474 }; 5475 BezierCurve.prototype.reverse = function () { 5476 return new BezierCurve(this.end, this.endControl, this.startControl, this.start); 5477 }; 5478 return BezierCurve; 5479 }()); 5480 var isBezierCurve = function (path) { return path.type === PathType.BEZIER_CURVE; }; 5481 5482 var BoundCurves = /** @class */ (function () { 5483 function BoundCurves(element) { 5484 var styles = element.styles; 5485 var bounds = element.bounds; 5486 var _a = getAbsoluteValueForTuple(styles.borderTopLeftRadius, bounds.width, bounds.height), tlh = _a[0], tlv = _a[1]; 5487 var _b = getAbsoluteValueForTuple(styles.borderTopRightRadius, bounds.width, bounds.height), trh = _b[0], trv = _b[1]; 5488 var _c = getAbsoluteValueForTuple(styles.borderBottomRightRadius, bounds.width, bounds.height), brh = _c[0], brv = _c[1]; 5489 var _d = getAbsoluteValueForTuple(styles.borderBottomLeftRadius, bounds.width, bounds.height), blh = _d[0], blv = _d[1]; 5490 var factors = []; 5491 factors.push((tlh + trh) / bounds.width); 5492 factors.push((blh + brh) / bounds.width); 5493 factors.push((tlv + blv) / bounds.height); 5494 factors.push((trv + brv) / bounds.height); 5495 var maxFactor = Math.max.apply(Math, factors); 5496 if (maxFactor > 1) { 5497 tlh /= maxFactor; 5498 tlv /= maxFactor; 5499 trh /= maxFactor; 5500 trv /= maxFactor; 5501 brh /= maxFactor; 5502 brv /= maxFactor; 5503 blh /= maxFactor; 5504 blv /= maxFactor; 5505 } 5506 var topWidth = bounds.width - trh; 5507 var rightHeight = bounds.height - brv; 5508 var bottomWidth = bounds.width - brh; 5509 var leftHeight = bounds.height - blv; 5510 var borderTopWidth = styles.borderTopWidth; 5511 var borderRightWidth = styles.borderRightWidth; 5512 var borderBottomWidth = styles.borderBottomWidth; 5513 var borderLeftWidth = styles.borderLeftWidth; 5514 var paddingTop = getAbsoluteValue(styles.paddingTop, element.bounds.width); 5515 var paddingRight = getAbsoluteValue(styles.paddingRight, element.bounds.width); 5516 var paddingBottom = getAbsoluteValue(styles.paddingBottom, element.bounds.width); 5517 var paddingLeft = getAbsoluteValue(styles.paddingLeft, element.bounds.width); 5518 this.topLeftBorderBox = 5519 tlh > 0 || tlv > 0 5520 ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT) 5521 : new Vector(bounds.left, bounds.top); 5522 this.topRightBorderBox = 5523 trh > 0 || trv > 0 5524 ? getCurvePoints(bounds.left + topWidth, bounds.top, trh, trv, CORNER.TOP_RIGHT) 5525 : new Vector(bounds.left + bounds.width, bounds.top); 5526 this.bottomRightBorderBox = 5527 brh > 0 || brv > 0 5528 ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh, brv, CORNER.BOTTOM_RIGHT) 5529 : new Vector(bounds.left + bounds.width, bounds.top + bounds.height); 5530 this.bottomLeftBorderBox = 5531 blh > 0 || blv > 0 5532 ? getCurvePoints(bounds.left, bounds.top + leftHeight, blh, blv, CORNER.BOTTOM_LEFT) 5533 : new Vector(bounds.left, bounds.top + bounds.height); 5534 this.topLeftPaddingBox = 5535 tlh > 0 || tlv > 0 5536 ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + borderTopWidth, Math.max(0, tlh - borderLeftWidth), Math.max(0, tlv - borderTopWidth), CORNER.TOP_LEFT) 5537 : new Vector(bounds.left + borderLeftWidth, bounds.top + borderTopWidth); 5538 this.topRightPaddingBox = 5539 trh > 0 || trv > 0 5540 ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth), bounds.top + borderTopWidth, topWidth > bounds.width + borderLeftWidth ? 0 : trh - borderLeftWidth, trv - borderTopWidth, CORNER.TOP_RIGHT) 5541 : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + borderTopWidth); 5542 this.bottomRightPaddingBox = 5543 brh > 0 || brv > 0 5544 ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - borderLeftWidth), bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth), Math.max(0, brh - borderRightWidth), brv - borderBottomWidth, CORNER.BOTTOM_RIGHT) 5545 : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + bounds.height - borderBottomWidth); 5546 this.bottomLeftPaddingBox = 5547 blh > 0 || blv > 0 5548 ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + leftHeight, Math.max(0, blh - borderLeftWidth), blv - borderBottomWidth, CORNER.BOTTOM_LEFT) 5549 : new Vector(bounds.left + borderLeftWidth, bounds.top + bounds.height - borderBottomWidth); 5550 this.topLeftContentBox = 5551 tlh > 0 || tlv > 0 5552 ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop, Math.max(0, tlh - (borderLeftWidth + paddingLeft)), Math.max(0, tlv - (borderTopWidth + paddingTop)), CORNER.TOP_LEFT) 5553 : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop); 5554 this.topRightContentBox = 5555 trh > 0 || trv > 0 5556 ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth + paddingLeft), bounds.top + borderTopWidth + paddingTop, topWidth > bounds.width + borderLeftWidth + paddingLeft ? 0 : trh - borderLeftWidth + paddingLeft, trv - (borderTopWidth + paddingTop), CORNER.TOP_RIGHT) 5557 : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + borderTopWidth + paddingTop); 5558 this.bottomRightContentBox = 5559 brh > 0 || brv > 0 5560 ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - (borderLeftWidth + paddingLeft)), bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth + paddingTop), Math.max(0, brh - (borderRightWidth + paddingRight)), brv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_RIGHT) 5561 : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + bounds.height - (borderBottomWidth + paddingBottom)); 5562 this.bottomLeftContentBox = 5563 blh > 0 || blv > 0 5564 ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + leftHeight, Math.max(0, blh - (borderLeftWidth + paddingLeft)), blv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_LEFT) 5565 : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + bounds.height - (borderBottomWidth + paddingBottom)); 5566 } 5567 return BoundCurves; 5568 }()); 5569 var CORNER; 5570 (function (CORNER) { 5571 CORNER[CORNER["TOP_LEFT"] = 0] = "TOP_LEFT"; 5572 CORNER[CORNER["TOP_RIGHT"] = 1] = "TOP_RIGHT"; 5573 CORNER[CORNER["BOTTOM_RIGHT"] = 2] = "BOTTOM_RIGHT"; 5574 CORNER[CORNER["BOTTOM_LEFT"] = 3] = "BOTTOM_LEFT"; 5575 })(CORNER || (CORNER = {})); 5576 var getCurvePoints = function (x, y, r1, r2, position) { 5577 var kappa = 4 * ((Math.sqrt(2) - 1) / 3); 5578 var ox = r1 * kappa; // control point offset horizontal 5579 var oy = r2 * kappa; // control point offset vertical 5580 var xm = x + r1; // x-middle 5581 var ym = y + r2; // y-middle 5582 switch (position) { 5583 case CORNER.TOP_LEFT: 5584 return new BezierCurve(new Vector(x, ym), new Vector(x, ym - oy), new Vector(xm - ox, y), new Vector(xm, y)); 5585 case CORNER.TOP_RIGHT: 5586 return new BezierCurve(new Vector(x, y), new Vector(x + ox, y), new Vector(xm, ym - oy), new Vector(xm, ym)); 5587 case CORNER.BOTTOM_RIGHT: 5588 return new BezierCurve(new Vector(xm, y), new Vector(xm, y + oy), new Vector(x + ox, ym), new Vector(x, ym)); 5589 case CORNER.BOTTOM_LEFT: 5590 default: 5591 return new BezierCurve(new Vector(xm, ym), new Vector(xm - ox, ym), new Vector(x, y + oy), new Vector(x, y)); 5592 } 5593 }; 5594 var calculateBorderBoxPath = function (curves) { 5595 return [curves.topLeftBorderBox, curves.topRightBorderBox, curves.bottomRightBorderBox, curves.bottomLeftBorderBox]; 5596 }; 5597 var calculateContentBoxPath = function (curves) { 5598 return [ 5599 curves.topLeftContentBox, 5600 curves.topRightContentBox, 5601 curves.bottomRightContentBox, 5602 curves.bottomLeftContentBox 5603 ]; 5604 }; 5605 var calculatePaddingBoxPath = function (curves) { 5606 return [ 5607 curves.topLeftPaddingBox, 5608 curves.topRightPaddingBox, 5609 curves.bottomRightPaddingBox, 5610 curves.bottomLeftPaddingBox 5611 ]; 5612 }; 5613 5614 var TransformEffect = /** @class */ (function () {
vendor: 10,153 bytes, lines 5615-5829
5615 function TransformEffect(offsetX, offsetY, matrix) { 5616 this.type = 0 /* TRANSFORM */; 5617 this.offsetX = offsetX; 5618 this.offsetY = offsetY; 5619 this.matrix = matrix; 5620 this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */; 5621 } 5622 return TransformEffect; 5623 }()); 5624 var ClipEffect = /** @class */ (function () { 5625 function ClipEffect(path, target) { 5626 this.type = 1 /* CLIP */; 5627 this.target = target; 5628 this.path = path; 5629 } 5630 return ClipEffect; 5631 }()); 5632 var isTransformEffect = function (effect) { 5633 return effect.type === 0 /* TRANSFORM */; 5634 }; 5635 var isClipEffect = function (effect) { return effect.type === 1 /* CLIP */; }; 5636 5637 var StackingContext = /** @class */ (function () { 5638 function StackingContext(container) { 5639 this.element = container; 5640 this.inlineLevel = []; 5641 this.nonInlineLevel = []; 5642 this.negativeZIndex = []; 5643 this.zeroOrAutoZIndexOrTransformedOrOpacity = []; 5644 this.positiveZIndex = []; 5645 this.nonPositionedFloats = []; 5646 this.nonPositionedInlineLevel = []; 5647 } 5648 return StackingContext; 5649 }()); 5650 var ElementPaint = /** @class */ (function () { 5651 function ElementPaint(element, parentStack) { 5652 this.container = element; 5653 this.effects = parentStack.slice(0); 5654 this.curves = new BoundCurves(element); 5655 if (element.styles.transform !== null) { 5656 var offsetX = element.bounds.left + element.styles.transformOrigin[0].number; 5657 var offsetY = element.bounds.top + element.styles.transformOrigin[1].number; 5658 var matrix = element.styles.transform; 5659 this.effects.push(new TransformEffect(offsetX, offsetY, matrix)); 5660 } 5661 if (element.styles.overflowX !== OVERFLOW.VISIBLE) { 5662 var borderBox = calculateBorderBoxPath(this.curves); 5663 var paddingBox = calculatePaddingBoxPath(this.curves); 5664 if (equalPath(borderBox, paddingBox)) { 5665 this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */)); 5666 } 5667 else { 5668 this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */)); 5669 this.effects.push(new ClipEffect(paddingBox, 4 /* CONTENT */)); 5670 } 5671 } 5672 } 5673 ElementPaint.prototype.getParentEffects = function () { 5674 var effects = this.effects.slice(0); 5675 if (this.container.styles.overflowX !== OVERFLOW.VISIBLE) { 5676 var borderBox = calculateBorderBoxPath(this.curves); 5677 var paddingBox = calculatePaddingBoxPath(this.curves); 5678 if (!equalPath(borderBox, paddingBox)) { 5679 effects.push(new ClipEffect(paddingBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */)); 5680 } 5681 } 5682 return effects; 5683 }; 5684 return ElementPaint; 5685 }()); 5686 var parseStackTree = function (parent, stackingContext, realStackingContext, listItems) { 5687 parent.container.elements.forEach(function (child) { 5688 var treatAsRealStackingContext = contains(child.flags, 4 /* CREATES_REAL_STACKING_CONTEXT */); 5689 var createsStackingContext = contains(child.flags, 2 /* CREATES_STACKING_CONTEXT */); 5690 var paintContainer = new ElementPaint(child, parent.getParentEffects()); 5691 if (contains(child.styles.display, 2048 /* LIST_ITEM */)) { 5692 listItems.push(paintContainer); 5693 } 5694 var listOwnerItems = contains(child.flags, 8 /* IS_LIST_OWNER */) ? [] : listItems; 5695 if (treatAsRealStackingContext || createsStackingContext) { 5696 var parentStack = treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext; 5697 var stack = new StackingContext(paintContainer); 5698 if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) { 5699 var order_1 = child.styles.zIndex.order; 5700 if (order_1 < 0) { 5701 var index_1 = 0; 5702 parentStack.negativeZIndex.some(function (current, i) { 5703 if (order_1 > current.element.container.styles.zIndex.order) { 5704 index_1 = i; 5705 return true; 5706 } 5707 return false; 5708 }); 5709 parentStack.negativeZIndex.splice(index_1, 0, stack); 5710 } 5711 else if (order_1 > 0) { 5712 var index_2 = 0; 5713 parentStack.positiveZIndex.some(function (current, i) { 5714 if (order_1 > current.element.container.styles.zIndex.order) { 5715 index_2 = i + 1; 5716 return true; 5717 } 5718 return false; 5719 }); 5720 parentStack.positiveZIndex.splice(index_2, 0, stack); 5721 } 5722 else { 5723 parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack); 5724 } 5725 } 5726 else { 5727 if (child.styles.isFloating()) { 5728 parentStack.nonPositionedFloats.push(stack); 5729 } 5730 else { 5731 parentStack.nonPositionedInlineLevel.push(stack); 5732 } 5733 } 5734 parseStackTree(paintContainer, stack, treatAsRealStackingContext ? stack : realStackingContext, listOwnerItems); 5735 } 5736 else { 5737 if (child.styles.isInlineLevel()) { 5738 stackingContext.inlineLevel.push(paintContainer); 5739 } 5740 else { 5741 stackingContext.nonInlineLevel.push(paintContainer); 5742 } 5743 parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems); 5744 } 5745 if (contains(child.flags, 8 /* IS_LIST_OWNER */)) { 5746 processListItems(child, listOwnerItems); 5747 } 5748 }); 5749 }; 5750 var processListItems = function (owner, elements) { 5751 var numbering = owner instanceof OLElementContainer ? owner.start : 1; 5752 var reversed = owner instanceof OLElementContainer ? owner.reversed : false; 5753 for (var i = 0; i < elements.length; i++) { 5754 var item = elements[i]; 5755 if (item.container instanceof LIElementContainer && 5756 typeof item.container.value === 'number' && 5757 item.container.value !== 0) { 5758 numbering = item.container.value; 5759 } 5760 item.listValue = createCounterText(numbering, item.container.styles.listStyleType, true); 5761 numbering += reversed ? -1 : 1; 5762 } 5763 }; 5764 var parseStackingContexts = function (container) { 5765 var paintContainer = new ElementPaint(container, []); 5766 var root = new StackingContext(paintContainer); 5767 var listItems = []; 5768 parseStackTree(paintContainer, root, root, listItems); 5769 processListItems(paintContainer.container, listItems); 5770 return root; 5771 }; 5772 5773 var parsePathForBorder = function (curves, borderSide) { 5774 switch (borderSide) { 5775 case 0: 5776 return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftPaddingBox, curves.topRightBorderBox, curves.topRightPaddingBox); 5777 case 1: 5778 return createPathFromCurves(curves.topRightBorderBox, curves.topRightPaddingBox, curves.bottomRightBorderBox, curves.bottomRightPaddingBox); 5779 case 2: 5780 return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox); 5781 case 3: 5782 default: 5783 return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox, curves.topLeftBorderBox, curves.topLeftPaddingBox); 5784 } 5785 }; 5786 var createPathFromCurves = function (outer1, inner1, outer2, inner2) { 5787 var path = []; 5788 if (isBezierCurve(outer1)) { 5789 path.push(outer1.subdivide(0.5, false)); 5790 } 5791 else { 5792 path.push(outer1); 5793 } 5794 if (isBezierCurve(outer2)) { 5795 path.push(outer2.subdivide(0.5, true)); 5796 } 5797 else { 5798 path.push(outer2); 5799 } 5800 if (isBezierCurve(inner2)) { 5801 path.push(inner2.subdivide(0.5, true).reverse()); 5802 } 5803 else { 5804 path.push(inner2); 5805 } 5806 if (isBezierCurve(inner1)) { 5807 path.push(inner1.subdivide(0.5, false).reverse()); 5808 } 5809 else { 5810 path.push(inner1); 5811 } 5812 return path; 5813 }; 5814 5815 var paddingBox = function (element) { 5816 var bounds = element.bounds; 5817 var styles = element.styles; 5818 return bounds.add(styles.borderLeftWidth, styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth), -(styles.borderTopWidth + styles.borderBottomWidth)); 5819 }; 5820 var contentBox = function (element) { 5821 var styles = element.styles; 5822 var bounds = element.bounds; 5823 var paddingLeft = getAbsoluteValue(styles.paddingLeft, bounds.width); 5824 var paddingRight = getAbsoluteValue(styles.paddingRight, bounds.width); 5825 var paddingTop = getAbsoluteValue(styles.paddingTop, bounds.width); 5826 var paddingBottom = getAbsoluteValue(styles.paddingBottom, bounds.width); 5827 return bounds.add(paddingLeft + styles.borderLeftWidth, paddingTop + styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft + paddingRight), -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop + paddingBottom)); 5828 }; 5829
vendor: 7,465 bytes, lines 5830-5956
5830 var calculateBackgroundPositioningArea = function (backgroundOrigin, element) { 5831 if (backgroundOrigin === 0 /* BORDER_BOX */) { 5832 return element.bounds; 5833 } 5834 if (backgroundOrigin === 2 /* CONTENT_BOX */) { 5835 return contentBox(element); 5836 } 5837 return paddingBox(element); 5838 }; 5839 var calculateBackgroundPaintingArea = function (backgroundClip, element) { 5840 if (backgroundClip === BACKGROUND_CLIP.BORDER_BOX) { 5841 return element.bounds; 5842 } 5843 if (backgroundClip === BACKGROUND_CLIP.CONTENT_BOX) { 5844 return contentBox(element); 5845 } 5846 return paddingBox(element); 5847 }; 5848 var calculateBackgroundRendering = function (container, index, intrinsicSize) { 5849 var backgroundPositioningArea = calculateBackgroundPositioningArea(getBackgroundValueForIndex(container.styles.backgroundOrigin, index), container); 5850 var backgroundPaintingArea = calculateBackgroundPaintingArea(getBackgroundValueForIndex(container.styles.backgroundClip, index), container); 5851 var backgroundImageSize = calculateBackgroundSize(getBackgroundValueForIndex(container.styles.backgroundSize, index), intrinsicSize, backgroundPositioningArea); 5852 var sizeWidth = backgroundImageSize[0], sizeHeight = backgroundImageSize[1]; 5853 var position = getAbsoluteValueForTuple(getBackgroundValueForIndex(container.styles.backgroundPosition, index), backgroundPositioningArea.width - sizeWidth, backgroundPositioningArea.height - sizeHeight); 5854 var path = calculateBackgroundRepeatPath(getBackgroundValueForIndex(container.styles.backgroundRepeat, index), position, backgroundImageSize, backgroundPositioningArea, backgroundPaintingArea); 5855 var offsetX = Math.round(backgroundPositioningArea.left + position[0]); 5856 var offsetY = Math.round(backgroundPositioningArea.top + position[1]); 5857 return [path, offsetX, offsetY, sizeWidth, sizeHeight]; 5858 }; 5859 var isAuto = function (token) { return isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO; }; 5860 var hasIntrinsicValue = function (value) { return typeof value === 'number'; }; 5861 var calculateBackgroundSize = function (size, _a, bounds) { 5862 var intrinsicWidth = _a[0], intrinsicHeight = _a[1], intrinsicProportion = _a[2]; 5863 var first = size[0], second = size[1]; 5864 if (isLengthPercentage(first) && second && isLengthPercentage(second)) { 5865 return [getAbsoluteValue(first, bounds.width), getAbsoluteValue(second, bounds.height)]; 5866 } 5867 var hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion); 5868 if (isIdentToken(first) && (first.value === BACKGROUND_SIZE.CONTAIN || first.value === BACKGROUND_SIZE.COVER)) { 5869 if (hasIntrinsicValue(intrinsicProportion)) { 5870 var targetRatio = bounds.width / bounds.height; 5871 return targetRatio < intrinsicProportion !== (first.value === BACKGROUND_SIZE.COVER) 5872 ? [bounds.width, bounds.width / intrinsicProportion] 5873 : [bounds.height * intrinsicProportion, bounds.height]; 5874 } 5875 return [bounds.width, bounds.height]; 5876 } 5877 var hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth); 5878 var hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight); 5879 var hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight; 5880 // If the background-size is auto or auto auto: 5881 if (isAuto(first) && (!second || isAuto(second))) { 5882 // If the image has both horizontal and vertical intrinsic dimensions, it's rendered at that size. 5883 if (hasIntrinsicWidth && hasIntrinsicHeight) { 5884 return [intrinsicWidth, intrinsicHeight]; 5885 } 5886 // If the image has no intrinsic dimensions and has no intrinsic proportions, 5887 // it's rendered at the size of the background positioning area. 5888 if (!hasIntrinsicProportion && !hasIntrinsicDimensions) { 5889 return [bounds.width, bounds.height]; 5890 } 5891 // TODO If the image has no intrinsic dimensions but has intrinsic proportions, it's rendered as if contain had been specified instead. 5892 // If the image has only one intrinsic dimension and has intrinsic proportions, it's rendered at the size corresponding to that one dimension. 5893 // The other dimension is computed using the specified dimension and the intrinsic proportions. 5894 if (hasIntrinsicDimensions && hasIntrinsicProportion) { 5895 var width_1 = hasIntrinsicWidth 5896 ? intrinsicWidth 5897 : intrinsicHeight * intrinsicProportion; 5898 var height_1 = hasIntrinsicHeight 5899 ? intrinsicHeight 5900 : intrinsicWidth / intrinsicProportion; 5901 return [width_1, height_1]; 5902 } 5903 // If the image has only one intrinsic dimension but has no intrinsic proportions, 5904 // it's rendered using the specified dimension and the other dimension of the background positioning area. 5905 var width_2 = hasIntrinsicWidth ? intrinsicWidth : bounds.width; 5906 var height_2 = hasIntrinsicHeight ? intrinsicHeight : bounds.height; 5907 return [width_2, height_2]; 5908 } 5909 // If the image has intrinsic proportions, it's stretched to the specified dimension. 5910 // The unspecified dimension is computed using the specified dimension and the intrinsic proportions. 5911 if (hasIntrinsicProportion) { 5912 var width_3 = 0; 5913 var height_3 = 0; 5914 if (isLengthPercentage(first)) { 5915 width_3 = getAbsoluteValue(first, bounds.width); 5916 } 5917 else if (isLengthPercentage(second)) { 5918 height_3 = getAbsoluteValue(second, bounds.height); 5919 } 5920 if (isAuto(first)) { 5921 width_3 = height_3 * intrinsicProportion; 5922 } 5923 else if (!second || isAuto(second)) { 5924 height_3 = width_3 / intrinsicProportion; 5925 } 5926 return [width_3, height_3]; 5927 } 5928 // If the image has no intrinsic proportions, it's stretched to the specified dimension. 5929 // The unspecified dimension is computed using the image's corresponding intrinsic dimension, 5930 // if there is one. If there is no such intrinsic dimension, 5931 // it becomes the corresponding dimension of the background positioning area. 5932 var width = null; 5933 var height = null; 5934 if (isLengthPercentage(first)) { 5935 width = getAbsoluteValue(first, bounds.width); 5936 } 5937 else if (second && isLengthPercentage(second)) { 5938 height = getAbsoluteValue(second, bounds.height); 5939 } 5940 if (width !== null && (!second || isAuto(second))) { 5941 height = 5942 hasIntrinsicWidth && hasIntrinsicHeight 5943 ? (width / intrinsicWidth) * intrinsicHeight 5944 : bounds.height; 5945 } 5946 if (height !== null && isAuto(first)) { 5947 width = 5948 hasIntrinsicWidth && hasIntrinsicHeight 5949 ? (height / intrinsicHeight) * intrinsicWidth 5950 : bounds.width; 5951 } 5952 if (width !== null && height !== null) { 5953 return [width, height]; 5954 } 5955 throw new Error("Unable to calculate background-size for element"); 5956 };
vendor: 14,786 bytes, lines 5957-6216
5957 var getBackgroundValueForIndex = function (values, index) { 5958 var value = values[index]; 5959 if (typeof value === 'undefined') { 5960 return values[0]; 5961 } 5962 return value; 5963 }; 5964 var calculateBackgroundRepeatPath = function (repeat, _a, _b, backgroundPositioningArea, backgroundPaintingArea) { 5965 var x = _a[0], y = _a[1]; 5966 var width = _b[0], height = _b[1]; 5967 switch (repeat) { 5968 case BACKGROUND_REPEAT.REPEAT_X: 5969 return [ 5970 new Vector(Math.round(backgroundPositioningArea.left), Math.round(backgroundPositioningArea.top + y)), 5971 new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(backgroundPositioningArea.top + y)), 5972 new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(height + backgroundPositioningArea.top + y)), 5973 new Vector(Math.round(backgroundPositioningArea.left), Math.round(height + backgroundPositioningArea.top + y)) 5974 ]; 5975 case BACKGROUND_REPEAT.REPEAT_Y: 5976 return [ 5977 new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top)), 5978 new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top)), 5979 new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)), 5980 new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)) 5981 ]; 5982 case BACKGROUND_REPEAT.NO_REPEAT: 5983 return [ 5984 new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y)), 5985 new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y)), 5986 new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y + height)), 5987 new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y + height)) 5988 ]; 5989 default: 5990 return [ 5991 new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.top)), 5992 new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.top)), 5993 new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)), 5994 new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)) 5995 ]; 5996 } 5997 }; 5998 5999 var SMALL_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'; 6000 6001 var SAMPLE_TEXT = 'Hidden Text'; 6002 var FontMetrics = /** @class */ (function () { 6003 function FontMetrics(document) { 6004 this._data = {}; 6005 this._document = document; 6006 } 6007 FontMetrics.prototype.parseMetrics = function (fontFamily, fontSize) { 6008 var container = this._document.createElement('div'); 6009 var img = this._document.createElement('img'); 6010 var span = this._document.createElement('span'); 6011 var body = this._document.body; 6012 container.style.visibility = 'hidden'; 6013 container.style.fontFamily = fontFamily; 6014 container.style.fontSize = fontSize; 6015 container.style.margin = '0'; 6016 container.style.padding = '0'; 6017 body.appendChild(container); 6018 img.src = SMALL_IMAGE; 6019 img.width = 1; 6020 img.height = 1; 6021 img.style.margin = '0'; 6022 img.style.padding = '0'; 6023 img.style.verticalAlign = 'baseline'; 6024 span.style.fontFamily = fontFamily; 6025 span.style.fontSize = fontSize; 6026 span.style.margin = '0'; 6027 span.style.padding = '0'; 6028 span.appendChild(this._document.createTextNode(SAMPLE_TEXT)); 6029 container.appendChild(span); 6030 container.appendChild(img); 6031 var baseline = img.offsetTop - span.offsetTop + 2; 6032 container.removeChild(span); 6033 container.appendChild(this._document.createTextNode(SAMPLE_TEXT)); 6034 container.style.lineHeight = 'normal'; 6035 img.style.verticalAlign = 'super'; 6036 var middle = img.offsetTop - container.offsetTop + 2; 6037 body.removeChild(container); 6038 return { baseline: baseline, middle: middle }; 6039 }; 6040 FontMetrics.prototype.getMetrics = function (fontFamily, fontSize) { 6041 var key = fontFamily + " " + fontSize; 6042 if (typeof this._data[key] === 'undefined') { 6043 this._data[key] = this.parseMetrics(fontFamily, fontSize); 6044 } 6045 return this._data[key]; 6046 }; 6047 return FontMetrics; 6048 }()); 6049 6050 var MASK_OFFSET = 10000; 6051 var CanvasRenderer = /** @class */ (function () { 6052 function CanvasRenderer(options) { 6053 this._activeEffects = []; 6054 this.canvas = options.canvas ? options.canvas : document.createElement('canvas'); 6055 this.ctx = this.canvas.getContext('2d'); 6056 this.options = options; 6057 this.canvas.width = Math.floor(options.width * options.scale); 6058 this.canvas.height = Math.floor(options.height * options.scale); 6059 this.canvas.style.width = options.width + "px"; 6060 this.canvas.style.height = options.height + "px"; 6061 this.fontMetrics = new FontMetrics(document); 6062 this.ctx.scale(this.options.scale, this.options.scale); 6063 this.ctx.translate(-options.x + options.scrollX, -options.y + options.scrollY); 6064 this.ctx.textBaseline = 'bottom'; 6065 this._activeEffects = []; 6066 Logger.getInstance(options.id).debug("Canvas renderer initialized (" + options.width + "x" + options.height + " at " + options.x + "," + options.y + ") with scale " + options.scale); 6067 } 6068 CanvasRenderer.prototype.applyEffects = function (effects, target) { 6069 var _this = this; 6070 while (this._activeEffects.length) { 6071 this.popEffect(); 6072 } 6073 effects.filter(function (effect) { return contains(effect.target, target); }).forEach(function (effect) { return _this.applyEffect(effect); }); 6074 }; 6075 CanvasRenderer.prototype.applyEffect = function (effect) { 6076 this.ctx.save(); 6077 if (isTransformEffect(effect)) { 6078 this.ctx.translate(effect.offsetX, effect.offsetY); 6079 this.ctx.transform(effect.matrix[0], effect.matrix[1], effect.matrix[2], effect.matrix[3], effect.matrix[4], effect.matrix[5]); 6080 this.ctx.translate(-effect.offsetX, -effect.offsetY); 6081 } 6082 if (isClipEffect(effect)) { 6083 this.path(effect.path); 6084 this.ctx.clip(); 6085 } 6086 this._activeEffects.push(effect); 6087 }; 6088 CanvasRenderer.prototype.popEffect = function () { 6089 this._activeEffects.pop(); 6090 this.ctx.restore(); 6091 }; 6092 CanvasRenderer.prototype.renderStack = function (stack) { 6093 return __awaiter(this, void 0, void 0, function () { 6094 var styles; 6095 return __generator(this, function (_a) { 6096 switch (_a.label) { 6097 case 0: 6098 styles = stack.element.container.styles; 6099 if (!styles.isVisible()) return [3 /*break*/, 2]; 6100 this.ctx.globalAlpha = styles.opacity; 6101 return [4 /*yield*/, this.renderStackContent(stack)]; 6102 case 1: 6103 _a.sent(); 6104 _a.label = 2; 6105 case 2: return [2 /*return*/]; 6106 } 6107 }); 6108 }); 6109 }; 6110 CanvasRenderer.prototype.renderNode = function (paint) { 6111 return __awaiter(this, void 0, void 0, function () { 6112 return __generator(this, function (_a) { 6113 switch (_a.label) { 6114 case 0: 6115 if (!paint.container.styles.isVisible()) return [3 /*break*/, 3]; 6116 return [4 /*yield*/, this.renderNodeBackgroundAndBorders(paint)]; 6117 case 1: 6118 _a.sent(); 6119 return [4 /*yield*/, this.renderNodeContent(paint)]; 6120 case 2: 6121 _a.sent(); 6122 _a.label = 3; 6123 case 3: return [2 /*return*/]; 6124 } 6125 }); 6126 }); 6127 }; 6128 CanvasRenderer.prototype.renderTextWithLetterSpacing = function (text, letterSpacing) { 6129 var _this = this; 6130 if (letterSpacing === 0) { 6131 this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + text.bounds.height); 6132 } 6133 else { 6134 var letters = toCodePoints(text.text).map(function (i) { return fromCodePoint(i); }); 6135 letters.reduce(function (left, letter) { 6136 _this.ctx.fillText(letter, left, text.bounds.top + text.bounds.height); 6137 return left + _this.ctx.measureText(letter).width; 6138 }, text.bounds.left); 6139 } 6140 }; 6141 CanvasRenderer.prototype.createFontStyle = function (styles) { 6142 var fontVariant = styles.fontVariant 6143 .filter(function (variant) { return variant === 'normal' || variant === 'small-caps'; }) 6144 .join(''); 6145 var fontFamily = styles.fontFamily.join(', '); 6146 var fontSize = isDimensionToken(styles.fontSize) 6147 ? "" + styles.fontSize.number + styles.fontSize.unit 6148 : styles.fontSize.number + "px"; 6149 return [ 6150 [styles.fontStyle, fontVariant, styles.fontWeight, fontSize, fontFamily].join(' '), 6151 fontFamily, 6152 fontSize 6153 ]; 6154 }; 6155 CanvasRenderer.prototype.renderTextNode = function (text, styles) { 6156 return __awaiter(this, void 0, void 0, function () { 6157 var _a, font, fontFamily, fontSize; 6158 var _this = this; 6159 return __generator(this, function (_b) { 6160 _a = this.createFontStyle(styles), font = _a[0], fontFamily = _a[1], fontSize = _a[2]; 6161 this.ctx.font = font; 6162 text.textBounds.forEach(function (text) { 6163 _this.ctx.fillStyle = asString(styles.color); 6164 _this.renderTextWithLetterSpacing(text, styles.letterSpacing); 6165 var textShadows = styles.textShadow; 6166 if (textShadows.length && text.text.trim().length) { 6167 textShadows 6168 .slice(0) 6169 .reverse() 6170 .forEach(function (textShadow) { 6171 _this.ctx.shadowColor = asString(textShadow.color); 6172 _this.ctx.shadowOffsetX = textShadow.offsetX.number * _this.options.scale; 6173 _this.ctx.shadowOffsetY = textShadow.offsetY.number * _this.options.scale; 6174 _this.ctx.shadowBlur = textShadow.blur.number; 6175 _this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + text.bounds.height); 6176 }); 6177 _this.ctx.shadowColor = ''; 6178 _this.ctx.shadowOffsetX = 0; 6179 _this.ctx.shadowOffsetY = 0; 6180 _this.ctx.shadowBlur = 0; 6181 } 6182 if (styles.textDecorationLine.length) { 6183 _this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color); 6184 styles.textDecorationLine.forEach(function (textDecorationLine) { 6185 switch (textDecorationLine) { 6186 case 1 /* UNDERLINE */: 6187 // Draws a line at the baseline of the font 6188 // TODO As some browsers display the line as more than 1px if the font-size is big, 6189 // need to take that into account both in position and size 6190 var baseline = _this.fontMetrics.getMetrics(fontFamily, fontSize).baseline; 6191 _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top + baseline), text.bounds.width, 1); 6192 break; 6193 case 2 /* OVERLINE */: 6194 _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top), text.bounds.width, 1); 6195 break; 6196 case 3 /* LINE_THROUGH */: 6197 // TODO try and find exact position for line-through 6198 var middle = _this.fontMetrics.getMetrics(fontFamily, fontSize).middle; 6199 _this.ctx.fillRect(text.bounds.left, Math.ceil(text.bounds.top + middle), text.bounds.width, 1); 6200 break; 6201 } 6202 }); 6203 } 6204 }); 6205 return [2 /*return*/]; 6206 }); 6207 }); 6208 }; 6209 CanvasRenderer.prototype.renderReplacedElement = function (container, curves, image) { 6210 if (image && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) { 6211 var box = contentBox(container); 6212 var path = calculatePaddingBoxPath(curves); 6213 this.path(path); 6214 this.ctx.save(); 6215 this.ctx.clip(); 6216 this.ctx.drawImage(image, 0, 0, container.intrinsicWidth, container.intrinsicHeight, box.left, box.top, box.width, box.height);
vendor: 6,133 bytes, lines 6217-6312
6217 this.ctx.restore(); 6218 } 6219 }; 6220 CanvasRenderer.prototype.renderNodeContent = function (paint) { 6221 return __awaiter(this, void 0, void 0, function () { 6222 var container, curves, styles, _i, _a, child, image, e_1, image, e_2, iframeRenderer, canvas, size, bounds, x, textBounds, img, image, url, e_3, bounds; 6223 return __generator(this, function (_b) { 6224 switch (_b.label) { 6225 case 0: 6226 this.applyEffects(paint.effects, 4 /* CONTENT */); 6227 container = paint.container; 6228 curves = paint.curves; 6229 styles = container.styles; 6230 _i = 0, _a = container.textNodes; 6231 _b.label = 1; 6232 case 1: 6233 if (!(_i < _a.length)) return [3 /*break*/, 4]; 6234 child = _a[_i]; 6235 return [4 /*yield*/, this.renderTextNode(child, styles)]; 6236 case 2: 6237 _b.sent(); 6238 _b.label = 3; 6239 case 3: 6240 _i++; 6241 return [3 /*break*/, 1]; 6242 case 4: 6243 if (!(container instanceof ImageElementContainer)) return [3 /*break*/, 8]; 6244 _b.label = 5; 6245 case 5: 6246 _b.trys.push([5, 7, , 8]); 6247 return [4 /*yield*/, this.options.cache.match(container.src)]; 6248 case 6: 6249 image = _b.sent(); 6250 this.renderReplacedElement(container, curves, image); 6251 return [3 /*break*/, 8]; 6252 case 7: 6253 e_1 = _b.sent(); 6254 Logger.getInstance(this.options.id).error("Error loading image " + container.src); 6255 return [3 /*break*/, 8]; 6256 case 8: 6257 if (container instanceof CanvasElementContainer) { 6258 this.renderReplacedElement(container, curves, container.canvas); 6259 } 6260 if (!(container instanceof SVGElementContainer)) return [3 /*break*/, 12]; 6261 _b.label = 9; 6262 case 9: 6263 _b.trys.push([9, 11, , 12]); 6264 return [4 /*yield*/, this.options.cache.match(container.svg)]; 6265 case 10: 6266 image = _b.sent(); 6267 this.renderReplacedElement(container, curves, image); 6268 return [3 /*break*/, 12]; 6269 case 11: 6270 e_2 = _b.sent(); 6271 Logger.getInstance(this.options.id).error("Error loading svg " + container.svg.substring(0, 255)); 6272 return [3 /*break*/, 12]; 6273 case 12: 6274 if (!(container instanceof IFrameElementContainer && container.tree)) return [3 /*break*/, 14]; 6275 iframeRenderer = new CanvasRenderer({ 6276 id: this.options.id, 6277 scale: this.options.scale, 6278 backgroundColor: container.backgroundColor, 6279 x: 0, 6280 y: 0, 6281 scrollX: 0, 6282 scrollY: 0, 6283 width: container.width, 6284 height: container.height, 6285 cache: this.options.cache, 6286 windowWidth: container.width, 6287 windowHeight: container.height 6288 }); 6289 return [4 /*yield*/, iframeRenderer.render(container.tree)]; 6290 case 13: 6291 canvas = _b.sent(); 6292 if (container.width && container.height) { 6293 this.ctx.drawImage(canvas, 0, 0, container.width, container.height, container.bounds.left, container.bounds.top, container.bounds.width, container.bounds.height); 6294 } 6295 _b.label = 14; 6296 case 14: 6297 if (container instanceof InputElementContainer) { 6298 size = Math.min(container.bounds.width, container.bounds.height); 6299 if (container.type === CHECKBOX) { 6300 if (container.checked) { 6301 this.ctx.save(); 6302 this.path([ 6303 new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79), 6304 new Vector(container.bounds.left + size * 0.16, container.bounds.top + size * 0.5549), 6305 new Vector(container.bounds.left + size * 0.27347, container.bounds.top + size * 0.44071), 6306 new Vector(container.bounds.left + size * 0.39694, container.bounds.top + size * 0.5649), 6307 new Vector(container.bounds.left + size * 0.72983, container.bounds.top + size * 0.23), 6308 new Vector(container.bounds.left + size * 0.84, container.bounds.top + size * 0.34085), 6309 new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79) 6310 ]); 6311 this.ctx.fillStyle = asString(INPUT_COLOR); 6312 this.ctx.fill();
vendor: 5,785 bytes, lines 6313-6400
6313 this.ctx.restore(); 6314 } 6315 } 6316 else if (container.type === RADIO) { 6317 if (container.checked) { 6318 this.ctx.save(); 6319 this.ctx.beginPath(); 6320 this.ctx.arc(container.bounds.left + size / 2, container.bounds.top + size / 2, size / 4, 0, Math.PI * 2, true); 6321 this.ctx.fillStyle = asString(INPUT_COLOR); 6322 this.ctx.fill(); 6323 this.ctx.restore(); 6324 } 6325 } 6326 } 6327 if (isTextInputElement(container) && container.value.length) { 6328 this.ctx.font = this.createFontStyle(styles)[0]; 6329 this.ctx.fillStyle = asString(styles.color); 6330 this.ctx.textBaseline = 'middle'; 6331 this.ctx.textAlign = canvasTextAlign(container.styles.textAlign); 6332 bounds = contentBox(container); 6333 x = 0; 6334 switch (container.styles.textAlign) { 6335 case TEXT_ALIGN.CENTER: 6336 x += bounds.width / 2; 6337 break; 6338 case TEXT_ALIGN.RIGHT: 6339 x += bounds.width; 6340 break; 6341 } 6342 textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1); 6343 this.ctx.save(); 6344 this.path([ 6345 new Vector(bounds.left, bounds.top), 6346 new Vector(bounds.left + bounds.width, bounds.top), 6347 new Vector(bounds.left + bounds.width, bounds.top + bounds.height), 6348 new Vector(bounds.left, bounds.top + bounds.height) 6349 ]); 6350 this.ctx.clip(); 6351 this.renderTextWithLetterSpacing(new TextBounds(container.value, textBounds), styles.letterSpacing); 6352 this.ctx.restore(); 6353 this.ctx.textBaseline = 'bottom'; 6354 this.ctx.textAlign = 'left'; 6355 } 6356 if (!contains(container.styles.display, 2048 /* LIST_ITEM */)) return [3 /*break*/, 20]; 6357 if (!(container.styles.listStyleImage !== null)) return [3 /*break*/, 19]; 6358 img = container.styles.listStyleImage; 6359 if (!(img.type === CSSImageType.URL)) return [3 /*break*/, 18]; 6360 image = void 0; 6361 url = img.url; 6362 _b.label = 15; 6363 case 15: 6364 _b.trys.push([15, 17, , 18]); 6365 return [4 /*yield*/, this.options.cache.match(url)]; 6366 case 16: 6367 image = _b.sent(); 6368 this.ctx.drawImage(image, container.bounds.left - (image.width + 10), container.bounds.top); 6369 return [3 /*break*/, 18]; 6370 case 17: 6371 e_3 = _b.sent(); 6372 Logger.getInstance(this.options.id).error("Error loading list-style-image " + url); 6373 return [3 /*break*/, 18]; 6374 case 18: return [3 /*break*/, 20]; 6375 case 19: 6376 if (paint.listValue && container.styles.listStyleType !== LIST_STYLE_TYPE.NONE) { 6377 this.ctx.font = this.createFontStyle(styles)[0]; 6378 this.ctx.fillStyle = asString(styles.color); 6379 this.ctx.textBaseline = 'middle'; 6380 this.ctx.textAlign = 'right'; 6381 bounds = new Bounds(container.bounds.left, container.bounds.top + getAbsoluteValue(container.styles.paddingTop, container.bounds.width), container.bounds.width, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 1); 6382 this.renderTextWithLetterSpacing(new TextBounds(paint.listValue, bounds), styles.letterSpacing); 6383 this.ctx.textBaseline = 'bottom'; 6384 this.ctx.textAlign = 'left'; 6385 } 6386 _b.label = 20; 6387 case 20: return [2 /*return*/]; 6388 } 6389 }); 6390 }); 6391 }; 6392 CanvasRenderer.prototype.renderStackContent = function (stack) { 6393 return __awaiter(this, void 0, void 0, function () { 6394 var _i, _a, child, _b, _c, child, _d, _e, child, _f, _g, child, _h, _j, child, _k, _l, child, _m, _o, child; 6395 return __generator(this, function (_p) { 6396 switch (_p.label) { 6397 case 0: 6398 // https://www.w3.org/TR/css-position-3/#painting-order 6399 // 1. the background and borders of the element forming the stacking context. 6400 return [4 /*yield*/, this.renderNodeBackgroun
vendor: 20,471 bytes, lines 6400-6739
6400dAndBorders(stack.element)]; 6401 case 1: 6402 // https://www.w3.org/TR/css-position-3/#painting-order 6403 // 1. the background and borders of the element forming the stacking context. 6404 _p.sent(); 6405 _i = 0, _a = stack.negativeZIndex; 6406 _p.label = 2; 6407 case 2: 6408 if (!(_i < _a.length)) return [3 /*break*/, 5]; 6409 child = _a[_i]; 6410 return [4 /*yield*/, this.renderStack(child)]; 6411 case 3: 6412 _p.sent(); 6413 _p.label = 4; 6414 case 4: 6415 _i++; 6416 return [3 /*break*/, 2]; 6417 case 5: 6418 // 3. For all its in-flow, non-positioned, block-level descendants in tree order: 6419 return [4 /*yield*/, this.renderNodeContent(stack.element)]; 6420 case 6: 6421 // 3. For all its in-flow, non-positioned, block-level descendants in tree order: 6422 _p.sent(); 6423 _b = 0, _c = stack.nonInlineLevel; 6424 _p.label = 7; 6425 case 7: 6426 if (!(_b < _c.length)) return [3 /*break*/, 10]; 6427 child = _c[_b]; 6428 return [4 /*yield*/, this.renderNode(child)]; 6429 case 8: 6430 _p.sent(); 6431 _p.label = 9; 6432 case 9: 6433 _b++; 6434 return [3 /*break*/, 7]; 6435 case 10: 6436 _d = 0, _e = stack.nonPositionedFloats; 6437 _p.label = 11; 6438 case 11: 6439 if (!(_d < _e.length)) return [3 /*break*/, 14]; 6440 child = _e[_d]; 6441 return [4 /*yield*/, this.renderStack(child)]; 6442 case 12: 6443 _p.sent(); 6444 _p.label = 13; 6445 case 13: 6446 _d++; 6447 return [3 /*break*/, 11]; 6448 case 14: 6449 _f = 0, _g = stack.nonPositionedInlineLevel; 6450 _p.label = 15; 6451 case 15: 6452 if (!(_f < _g.length)) return [3 /*break*/, 18]; 6453 child = _g[_f]; 6454 return [4 /*yield*/, this.renderStack(child)]; 6455 case 16: 6456 _p.sent(); 6457 _p.label = 17; 6458 case 17: 6459 _f++; 6460 return [3 /*break*/, 15]; 6461 case 18: 6462 _h = 0, _j = stack.inlineLevel; 6463 _p.label = 19; 6464 case 19: 6465 if (!(_h < _j.length)) return [3 /*break*/, 22]; 6466 child = _j[_h]; 6467 return [4 /*yield*/, this.renderNode(child)]; 6468 case 20: 6469 _p.sent(); 6470 _p.label = 21; 6471 case 21: 6472 _h++; 6473 return [3 /*break*/, 19]; 6474 case 22: 6475 _k = 0, _l = stack.zeroOrAutoZIndexOrTransformedOrOpacity; 6476 _p.label = 23; 6477 case 23: 6478 if (!(_k < _l.length)) return [3 /*break*/, 26]; 6479 child = _l[_k]; 6480 return [4 /*yield*/, this.renderStack(child)]; 6481 case 24: 6482 _p.sent(); 6483 _p.label = 25; 6484 case 25: 6485 _k++; 6486 return [3 /*break*/, 23]; 6487 case 26: 6488 _m = 0, _o = stack.positiveZIndex; 6489 _p.label = 27; 6490 case 27: 6491 if (!(_m < _o.length)) return [3 /*break*/, 30]; 6492 child = _o[_m]; 6493 return [4 /*yield*/, this.renderStack(child)]; 6494 case 28: 6495 _p.sent(); 6496 _p.label = 29; 6497 case 29: 6498 _m++; 6499 return [3 /*break*/, 27]; 6500 case 30: return [2 /*return*/]; 6501 } 6502 }); 6503 }); 6504 }; 6505 CanvasRenderer.prototype.mask = function (paths) { 6506 this.ctx.beginPath(); 6507 this.ctx.moveTo(0, 0); 6508 this.ctx.lineTo(this.canvas.width, 0); 6509 this.ctx.lineTo(this.canvas.width, this.canvas.height); 6510 this.ctx.lineTo(0, this.canvas.height); 6511 this.ctx.lineTo(0, 0); 6512 this.formatPath(paths.slice(0).reverse()); 6513 this.ctx.closePath(); 6514 }; 6515 CanvasRenderer.prototype.path = function (paths) { 6516 this.ctx.beginPath(); 6517 this.formatPath(paths); 6518 this.ctx.closePath(); 6519 }; 6520 CanvasRenderer.prototype.formatPath = function (paths) { 6521 var _this = this; 6522 paths.forEach(function (point, index) { 6523 var start = isBezierCurve(point) ? point.start : point; 6524 if (index === 0) { 6525 _this.ctx.moveTo(start.x, start.y); 6526 } 6527 else { 6528 _this.ctx.lineTo(start.x, start.y); 6529 } 6530 if (isBezierCurve(point)) { 6531 _this.ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y); 6532 } 6533 }); 6534 }; 6535 CanvasRenderer.prototype.renderRepeat = function (path, pattern, offsetX, offsetY) { 6536 this.path(path); 6537 this.ctx.fillStyle = pattern; 6538 this.ctx.translate(offsetX, offsetY); 6539 this.ctx.fill(); 6540 this.ctx.translate(-offsetX, -offsetY); 6541 }; 6542 CanvasRenderer.prototype.resizeImage = function (image, width, height) { 6543 if (image.width === width && image.height === height) { 6544 return image; 6545 } 6546 var canvas = this.canvas.ownerDocument.createElement('canvas'); 6547 canvas.width = width; 6548 canvas.height = height; 6549 var ctx = canvas.getContext('2d'); 6550 ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, width, height); 6551 return canvas; 6552 }; 6553 CanvasRenderer.prototype.renderBackgroundImage = function (container) { 6554 return __awaiter(this, void 0, void 0, function () { 6555 var index, _loop_1, this_1, _i, _a, backgroundImage; 6556 return __generator(this, function (_b) { 6557 switch (_b.label) { 6558 case 0: 6559 index = container.styles.backgroundImage.length - 1; 6560 _loop_1 = function (backgroundImage) { 6561 var image, url, e_4, _a, path, x, y, width, height, pattern, _b, path, x, y, width, height, _c, lineLength, x0, x1, y0, y1, canvas, ctx, gradient_1, pattern, _d, path, left, top_1, width, height, position, x, y, _e, rx, ry, radialGradient_1, midX, midY, f, invF; 6562 return __generator(this, function (_f) { 6563 switch (_f.label) { 6564 case 0: 6565 if (!(backgroundImage.type === CSSImageType.URL)) return [3 /*break*/, 5]; 6566 image = void 0; 6567 url = backgroundImage.url; 6568 _f.label = 1; 6569 case 1: 6570 _f.trys.push([1, 3, , 4]); 6571 return [4 /*yield*/, this_1.options.cache.match(url)]; 6572 case 2: 6573 image = _f.sent(); 6574 return [3 /*break*/, 4]; 6575 case 3: 6576 e_4 = _f.sent(); 6577 Logger.getInstance(this_1.options.id).error("Error loading background-image " + url); 6578 return [3 /*break*/, 4]; 6579 case 4: 6580 if (image) { 6581 _a = calculateBackgroundRendering(container, index, [ 6582 image.width, 6583 image.height, 6584 image.width / image.height 6585 ]), path = _a[0], x = _a[1], y = _a[2], width = _a[3], height = _a[4]; 6586 pattern = this_1.ctx.createPattern(this_1.resizeImage(image, width, height), 'repeat'); 6587 this_1.renderRepeat(path, pattern, x, y); 6588 } 6589 return [3 /*break*/, 6]; 6590 case 5: 6591 if (isLinearGradient(backgroundImage)) { 6592 _b = calculateBackgroundRendering(container, index, [null, null, null]), path = _b[0], x = _b[1], y = _b[2], width = _b[3], height = _b[4]; 6593 _c = calculateGradientDirection(backgroundImage.angle, width, height), lineLength = _c[0], x0 = _c[1], x1 = _c[2], y0 = _c[3], y1 = _c[4]; 6594 canvas = document.createElement('canvas'); 6595 canvas.width = width; 6596 canvas.height = height; 6597 ctx = canvas.getContext('2d'); 6598 gradient_1 = ctx.createLinearGradient(x0, y0, x1, y1); 6599 processColorStops(backgroundImage.stops, lineLength).forEach(function (colorStop) { 6600 return gradient_1.addColorStop(colorStop.stop, asString(colorStop.color)); 6601 }); 6602 ctx.fillStyle = gradient_1; 6603 ctx.fillRect(0, 0, width, height); 6604 pattern = this_1.ctx.createPattern(canvas, 'repeat'); 6605 this_1.renderRepeat(path, pattern, x, y); 6606 } 6607 else if (isRadialGradient(backgroundImage)) { 6608 _d = calculateBackgroundRendering(container, index, [ 6609 null, 6610 null, 6611 null 6612 ]), path = _d[0], left = _d[1], top_1 = _d[2], width = _d[3], height = _d[4]; 6613 position = backgroundImage.position.length === 0 ? [FIFTY_PERCENT] : backgroundImage.position; 6614 x = getAbsoluteValue(position[0], width); 6615 y = getAbsoluteValue(position[position.length - 1], height); 6616 _e = calculateRadius(backgroundImage, x, y, width, height), rx = _e[0], ry = _e[1]; 6617 if (rx > 0 && rx > 0) { 6618 radialGradient_1 = this_1.ctx.createRadialGradient(left + x, top_1 + y, 0, left + x, top_1 + y, rx); 6619 processColorStops(backgroundImage.stops, rx * 2).forEach(function (colorStop) { 6620 return radialGradient_1.addColorStop(colorStop.stop, asString(colorStop.color)); 6621 }); 6622 this_1.path(path); 6623 this_1.ctx.fillStyle = radialGradient_1; 6624 if (rx !== ry) { 6625 midX = container.bounds.left + 0.5 * container.bounds.width; 6626 midY = container.bounds.top + 0.5 * container.bounds.height; 6627 f = ry / rx; 6628 invF = 1 / f; 6629 this_1.ctx.save(); 6630 this_1.ctx.translate(midX, midY); 6631 this_1.ctx.transform(1, 0, 0, f, 0, 0); 6632 this_1.ctx.translate(-midX, -midY); 6633 this_1.ctx.fillRect(left, invF * (top_1 - midY) + midY, width, height * invF); 6634 this_1.ctx.restore(); 6635 } 6636 else { 6637 this_1.ctx.fill(); 6638 } 6639 } 6640 } 6641 _f.label = 6; 6642 case 6: 6643 index--; 6644 return [2 /*return*/]; 6645 } 6646 }); 6647 }; 6648 this_1 = this; 6649 _i = 0, _a = container.styles.backgroundImage.slice(0).reverse(); 6650 _b.label = 1; 6651 case 1: 6652 if (!(_i < _a.length)) return [3 /*break*/, 4]; 6653 backgroundImage = _a[_i]; 6654 return [5 /*yield**/, _loop_1(backgroundImage)]; 6655 case 2: 6656 _b.sent(); 6657 _b.label = 3; 6658 case 3: 6659 _i++; 6660 return [3 /*break*/, 1]; 6661 case 4: return [2 /*return*/]; 6662 } 6663 }); 6664 }); 6665 }; 6666 CanvasRenderer.prototype.renderBorder = function (color, side, curvePoints) { 6667 return __awaiter(this, void 0, void 0, function () { 6668 return __generator(this, function (_a) { 6669 this.path(parsePathForBorder(curvePoints, side)); 6670 this.ctx.fillStyle = asString(color); 6671 this.ctx.fill(); 6672 return [2 /*return*/]; 6673 }); 6674 }); 6675 }; 6676 CanvasRenderer.prototype.renderNodeBackgroundAndBorders = function (paint) { 6677 return __awaiter(this, void 0, void 0, function () { 6678 var styles, hasBackground, borders, backgroundPaintingArea, side, _i, borders_1, border; 6679 var _this = this; 6680 return __generator(this, function (_a) { 6681 switch (_a.label) { 6682 case 0: 6683 this.applyEffects(paint.effects, 2 /* BACKGROUND_BORDERS */); 6684 styles = paint.container.styles; 6685 hasBackground = !isTransparent(styles.backgroundColor) || styles.backgroundImage.length; 6686 borders = [ 6687 { style: styles.borderTopStyle, color: styles.borderTopColor }, 6688 { style: styles.borderRightStyle, color: styles.borderRightColor }, 6689 { style: styles.borderBottomStyle, color: styles.borderBottomColor }, 6690 { style: styles.borderLeftStyle, color: styles.borderLeftColor } 6691 ]; 6692 backgroundPaintingArea = calculateBackgroundCurvedPaintingArea(getBackgroundValueForIndex(styles.backgroundClip, 0), paint.curves); 6693 if (!(hasBackground || styles.boxShadow.length)) return [3 /*break*/, 2]; 6694 this.ctx.save(); 6695 this.path(backgroundPaintingArea); 6696 this.ctx.clip(); 6697 if (!isTransparent(styles.backgroundColor)) { 6698 this.ctx.fillStyle = asString(styles.backgroundColor); 6699 this.ctx.fill(); 6700 } 6701 return [4 /*yield*/, this.renderBackgroundImage(paint.container)]; 6702 case 1: 6703 _a.sent(); 6704 this.ctx.restore(); 6705 styles.boxShadow 6706 .slice(0) 6707 .reverse() 6708 .forEach(function (shadow) { 6709 _this.ctx.save(); 6710 var borderBoxArea = calculateBorderBoxPath(paint.curves); 6711 var maskOffset = shadow.inset ? 0 : MASK_OFFSET; 6712 var shadowPaintingArea = transformPath(borderBoxArea, -maskOffset + (shadow.inset ? 1 : -1) * shadow.spread.number, (shadow.inset ? 1 : -1) * shadow.spread.number, shadow.spread.number * (shadow.inset ? -2 : 2), shadow.spread.number * (shadow.inset ? -2 : 2)); 6713 if (shadow.inset) { 6714 _this.path(borderBoxArea); 6715 _this.ctx.clip(); 6716 _this.mask(shadowPaintingArea); 6717 } 6718 else { 6719 _this.mask(borderBoxArea); 6720 _this.ctx.clip(); 6721 _this.path(shadowPaintingArea); 6722 } 6723 _this.ctx.shadowOffsetX = shadow.offsetX.number + maskOffset; 6724 _this.ctx.shadowOffsetY = shadow.offsetY.number; 6725 _this.ctx.shadowColor = asString(shadow.color); 6726 _this.ctx.shadowBlur = shadow.blur.number; 6727 _this.ctx.fillStyle = shadow.inset ? asString(shadow.color) : 'rgba(0,0,0,1)'; 6728 _this.ctx.fill(); 6729 _this.ctx.restore(); 6730 }); 6731 _a.label = 2; 6732 case 2: 6733 side = 0; 6734 _i = 0, borders_1 = borders; 6735 _a.label = 3; 6736 case 3: 6737 if (!(_i < borders_1.length)) return [3 /*break*/, 6]; 6738 border = borders_1[_i]; 6739 if (!(border.style !== BORDER_STYLE.NONE && !isTransparent
6739(border.color))) return [3 /*break*/, 5]; 6740 return [4 /*yield*/, this.renderBorder(border.color, side++, paint.curves)]; 6741 case 4: 6742 _a.sent(); 6743 _a.label = 5; 6744 case 5: 6745 _i++; 6746 return [3 /*break*/, 3]; 6747 case 6: return [2 /*return*/]; 6748 } 6749 }); 6750 }); 6751 }; 6752 CanvasRenderer.prototype.render = function (element) { 6753 return __awaiter(this, void 0, void 0, function () { 6754 var stack; 6755 return __generator(this, function (_a) { 6756 switch (_a.label) { 6757 case 0: 6758 if (this.options.backgroundColor) { 6759 this.ctx.fillStyle = asString(this.options.backgroundColor); 6760 this.ctx.fillRect(this.options.x - this.options.scrollX, this.options.y - this.options.scrollY, this.options.width, this.options.height); 6761 } 6762 stack = parseStackingContexts(element); 6763 return [4 /*yield*/, this.renderStack(stack)]; 6764 case 1: 6765 _a.sent(); 6766 this.applyEffects([], 2 /* BACKGROUND_BORDERS */); 6767 return [2 /*return*/, this.canvas]; 6768 } 6769 }); 6770 }); 6771 }; 6772 return CanvasRenderer; 6773 }()); 6774 var isTextInputElement = function (container) { 6775 if (container instanceof TextareaElementContainer) { 6776 return true; 6777 } 6778 else if (container instanceof SelectElementContainer) { 6779 return true; 6780 } 6781 else if (container instanceof InputElementContainer && container.type !== RADIO && container.type !== CHECKBOX) { 6782 return true; 6783 } 6784 return false; 6785 }; 6786 var calculateBackgroundCurvedPaintingArea = function (clip, curves) { 6787 switch (clip) { 6788 case BACKGROUND_CLIP.BORDER_BOX: 6789 return calculateBorderBoxPath(curves); 6790 case BACKGROUND_CLIP.CONTENT_BOX: 6791 return calculateContentBoxPath(curves); 6792 case BACKGROUND_CLIP.PADDING_BOX: 6793 default: 6794 return calculatePaddingBoxPath(curves); 6795 } 6796 }; 6797 var canvasTextAlign = function (textAlign) { 6798 switch (textAlign) { 6799 case TEXT_ALIGN.CENTER: 6800 return 'center'; 6801 case TEXT_ALIGN.RIGHT: 6802 return 'right'; 6803 case TEXT_ALIGN.LEFT: 6804 default: 6805 return 'left'; 6806 } 6807 }; 6808 6809 var ForeignObjectRenderer = /** @class */ (function () { 6810 function ForeignObjectRenderer(options) { 6811 this.canvas = options.canvas ? options.canvas : document.createElement('canvas'); 6812 this.ctx = this.canvas.getContext('2d'); 6813 this.options = options; 6814 this.canvas.width = Math.floor(options.width * options.scale); 6815 this.canvas.height = Math.floor(options.height * options.scale); 6816 this.canvas.style.width = options.width + "px"; 6817 this.canvas.style.height = options.height + "px"; 6818 this.ctx.scale(this.options.scale, this.options.scale); 6819 this.ctx.translate(-options.x + options.scrollX, -options.y + options.scrollY); 6820 Logger.getInstance(options.id).debug("EXPERIMENTAL ForeignObject renderer initialized (" + options.width + "x" + options.height + " at " + options.x + "," + options.y + ") with scale " + options.scale); 6821 } 6822 ForeignObjectRenderer.prototype.render = function (element) { 6823 return __awaiter(this, void 0, void 0, function () { 6824 var svg, img; 6825 return __generator(this, function (_a) { 6826 switch (_a.label) { 6827 case 0: 6828 svg = createForeignObjectSVG(Math.max(this.options.windowWidth, this.options.width) * this.options.scale, Math.max(this.options.windowHeight, this.options.height) * this.options.scale, this.options.scrollX * this.options.scale, this.options.scrollY * this.options.scale, element); 6829 return [4 /*yield*/, loadSerializedSVG$1(svg)]; 6830 case 1: 6831 img = _a.sent(); 6832 if (this.options.backgroundColor) { 6833 this.ctx.fillStyle = asString(this.options.backgroundColor); 6834 this.ctx.fillRect(0, 0, this.options.width * this.options.scale, this.options.height * this.options.scale); 6835 } 6836 this.ctx.drawImage(img, -this.options.x * this.options.scale, -this.options.y * this.options.scale); 6837 return [2 /*return*/, this.canvas]; 6838 } 6839 }); 6840 }); 6841 }; 6842 return ForeignObjectRenderer; 6843 }()); 6844 var loadSerializedSVG$1 = function (svg) { 6845 return new Promise(function (resolve, reject) { 6846 var img = new Image(); 6847 img.onload = function () { 6848 resolve(img); 6849 }; 6850 img.onerror = reject; 6851 img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(new XMLSerializer().serializeToString(svg)); 6852 }); 6853 }; 6854 6855 var _this = undefined; 6856 var parseColor$1 = function (value) { return color.parse(Parser.create(value).parseComponentValue()); }; 6857 var html2canvas = function (element, options) { 6858 if (options === void 0) { options = {}; } 6859 return renderElement(element, options); 6860 }; 6861 CacheStorage.setContext(window); 6862 var renderElement = function (element, opts) { return __awaiter(_this, void 0, void 0, function () { 6863 var ownerDocument, defaultView, instanceName, _a, width, height, left, top, defaultResourceOptions, resourceOptions, defaultOptions, options, windowBounds, documentCloner, clonedElement, container, documentBackgroun
6863dColor, bodyBackgroundColor, bgColor, defaultBackgroundColor, backgroundColor, renderOptions, canvas, renderer, root, renderer; 6864 return __generator(this, function (_b) { 6865 switch (_b.label) { 6866 case 0: 6867 ownerDocument = element.ownerDocument; 6868 if (!ownerDocument) { 6869 throw new Error("Element is not attached to a Document"); 6870 } 6871 defaultView = ownerDocument.defaultView; 6872 if (!defaultView) { 6873 throw new Error("Document is not attached to a Window"); 6874 } 6875 instanceName = (Math.round(Math.random() * 1000) + Date.now()).toString(16); 6876 _a = isBodyElement(element) || isHTMLElement(element) ? parseDocumentSize(ownerDocument) : parseBounds(element), width = _a.width, height = _a.height, left = _a.left, top = _a.top; 6877 defaultResourceOptions = { 6878 allowTaint: false, 6879 imageTimeout: 15000, 6880 proxy: undefined, 6881 useCORS: false 6882 }; 6883 resourceOptions = __assign({}, defaultResourceOptions, opts); 6884 defaultOptions = { 6885 backgroundColor: '#ffffff', 6886 cache: opts.cache ? opts.cache : CacheStorage.create(instanceName, resourceOptions), 6887 logging: true, 6888 removeContainer: true, 6889 foreignObjectRendering: false, 6890 scale: defaultView.devicePixelRatio || 1, 6891 windowWidth: defaultView.innerWidth, 6892 windowHeight: defaultView.innerHeight, 6893 scrollX: defaultView.pageXOffset, 6894 scrollY: defaultView.pageYOffset, 6895 x: left, 6896 y: top, 6897 width: Math.ceil(width), 6898 height: Math.ceil(height), 6899 id: instanceName 6900 }; 6901 options = __assign({}, defaultOptions, resourceOptions, opts); 6902 windowBounds = new Bounds(options.scrollX, options.scrollY, options.windowWidth, options.windowHeight); 6903 Logger.create(instanceName); 6904 Logger.getInstance(instanceName).debug("Starting document clone"); 6905 documentCloner = new DocumentCloner(element, { 6906 id: instanceName, 6907 onclone: options.onclone, 6908 ignoreElements: options.ignoreElements, 6909 inlineImages: options.foreignObjectRendering, 6910 copyStyles: options.foreignObjectRendering 6911 }); 6912 clonedElement = documentCloner.clonedReferenceElement; 6913 if (!clonedElement) { 6914 return [2 /*return*/, Promise.reject("Unable to find element in cloned iframe")]; 6915 } 6916 return [4 /*yield*/, documentCloner.toIFrame(ownerDocument, windowBounds)]; 6917 case 1: 6918 container = _b.sent(); 6919 documentBackgroundColor = ownerDocument.documentElement 6920 ? parseColor$1(getComputedStyle(ownerDocument.documentElement).backgroundColor) 6921 : COLORS.TRANSPARENT; 6922 bodyBackgroundColor = ownerDocument.body 6923 ? parseColor$1(getComputedStyle(ownerDocument.body).backgroundColor) 6924 : COLORS.TRANSPARENT; 6925 bgColor = opts.backgroundColor; 6926 defaultBackgroundColor = typeof bgColor === 'string' ? parseColor$1(bgColor) : 0xffffffff; 6927 backgroundColor = element === ownerDocument.documentElement 6928 ? isTransparent(documentBackgroundColor) 6929 ? isTransparent(bodyBackgroundColor)
6930 ? defaultBackgroundColor 6931 : bodyBackgroundColor 6932 : documentBackgroundColor 6933 : defaultBackgroundColor; 6934 renderOptions = { 6935 id: instanceName, 6936 cache: options.cache, 6937 backgroundColor: backgroundColor, 6938 scale: options.scale, 6939 x: options.x, 6940 y: options.y, 6941 scrollX: options.scrollX, 6942 scrollY: options.scrollY, 6943 width: options.width, 6944 height: options.height, 6945 windowWidth: options.windowWidth, 6946 windowHeight: options.windowHeight 6947 }; 6948 if (!options.foreignObjectRendering) return [3 /*break*/, 3]; 6949 Logger.getInstance(instanceName).debug("Document cloned, using foreign object rendering"); 6950 renderer = new ForeignObjectRenderer(renderOptions); 6951 return [4 /*yield*/, renderer.render(clonedElement)]; 6952 case 2: 6953 canvas = _b.sent(); 6954 return [3 /*break*/, 5]; 6955 case 3: 6956 Logger.getInstance(instanceName).debug("Document cloned, using computed rendering"); 6957 CacheStorage.attachInstance(options.cache); 6958 Logger.getInstance(instanceName).debug("Starting DOM parsing"); 6959 root = parseTree(clonedElement); 6960 CacheStorage.detachInstance(); 6961 if (backgroundColor === root.styles.backgroundColor) { 6962 root.styles.backgroundColor = COLORS.TRANSPARENT; 6963 } 6964 Logger.getInstance(instanceName).debug("Starting renderer"); 6965 renderer = new CanvasRenderer(renderOptions); 6966 return [4 /*yield*/, renderer.render(root)]; 6967 case 4: 6968 canvas = _b.sent(); 6969 _b.label = 5; 6970 case 5: 6971 if (options.removeContainer === true) { 6972 if (!cleanContainer(container)) { 6973 Logger.getInstance(instanceName).error("Cannot detach cloned iframe as it is not in the DOM anymore"); 6974 } 6975 } 6976 Logger.getInstance(instanceName).debug("Finished rendering"); 6977 Logger.destroy(instanceName); 6978 CacheStorage.destroy(instanceName); 6979 return [2 /*return*/, canvas]; 6980 } 6981 }); 6982 }); }; 6983 var cleanContainer = function (container) { 6984 if (container.parentNode) { 6985 container.parentNode.removeChild(container); 6986 return true; 6987 } 6988 return false; 6989 }; 6990 6991 return html2canvas; 6992 6993})); 6994//# sourceMappingURL=html2canvas.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.