PageSourceSearch

https://siscad.cfmv.gov.br/vendors/pdfmake/pdfmake.js

js cfmv.gov.br collected 2026-09-24 19:19:51 UTC 1,918,375 bytes, 50,468 lines download raw bytes

1/*! pdfmake v0.1.36, @license MIT, @link http://pdfmake.org */
2(function webpackUniversalModuleDefinition(root, factory) {
3	if(typeof exports === 'object' && typeof module === 'object')
4		module.exports = factory();
5	else if(typeof define === 'function' && define.amd)
6		define([], factory);
7	else {
8		var a = factory();
9		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
10	}
11})(typeof self !== 'undefined' ? self : this, function() {
12return /******/ (function(modules) { // webpackBootstrap
13/******/ 	// The module cache
14/******/ 	var installedModules = {};
15/******/
16/******/ 	// The require function
17/******/ 	function __webpack_require__(moduleId) {
18/******/
19/******/ 		// Check if module is in cache
20/******/ 		if(installedModules[moduleId]) {
21/******/ 			return installedModules[moduleId].exports;
22/******/ 		}
23/******/ 		// Create a new module (and put it into the cache)
24/******/ 		var module = installedModules[moduleId] = {
25/******/ 			i: moduleId,
26/******/ 			l: false,
27/******/ 			exports: {}
28/******/ 		};
29/******/
30/******/ 		// Execute the module function
31/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
32/******/
33/******/ 		// Flag the module as loaded
34/******/ 		module.l = true;
35/******/
36/******/ 		// Return the exports of the module
37/******/ 		return module.exports;
38/******/ 	}
39/******/
40/******/
41/******/ 	// expose the modules object (__webpack_modules__)
42/******/ 	__webpack_require__.m = modules;
43/******/
44/******/ 	// expose the module cache
45/******/ 	__webpack_require__.c = installedModules;
46/******/
47/******/ 	// define getter function for harmony exports
48/******/ 	__webpack_require__.d = function(exports, name, getter) {
49/******/ 		if(!__webpack_require__.o(exports, name)) {
50/******/ 			Object.defineProperty(exports, name, {
51/******/ 				configurable: false,
52/******/ 				enumerable: true,
53/******/ 				get: getter
54/******/ 			});
55/******/ 		}
56/******/ 	};
57/******/
58/******/ 	// getDefaultExport function for compatibility with non-harmony modules
59/******/ 	__webpack_require__.n = function(module) {
60/******/ 		var getter = module && module.__esModule ?
61/******/ 			function getDefault() { return module['default']; } :
62/******/ 			function getModuleExports() { return module; };
63/******/ 		__webpack_require__.d(getter, 'a', getter);
64/******/ 		return getter;
65/******/ 	};
66/******/
67/******/ 	// Object.prototype.hasOwnProperty.call
68/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
69/******/
70/******/ 	// __webpack_public_path__
71/******/ 	__webpack_require__.p = "";
72/******/
73/******/ 	// Load entry module and return exports
74/******/ 	return __webpack_require__(__webpack_require__.s = 122);
75/******/ })
76/************************************************************************/
77/******/ ([
78/* 0 */
79/***/ (function(module, exports, __webpack_require__) {
80
81"use strict";
82
83
84function isString(variable) {
85	return typeof variable === 'string' || variable instanceof String;
86}
87
88function isNumber(variable) {
89	return typeof variable === 'number' || variable instanceof Number;
90}
91
92function isBoolean(variable) {
93	return typeof variable === 'boolean';
94}
95
96function isArray(variable) {
97	return Array.isArray(variable);
98}
99
100function isFunction(variable) {
101	return typeof variable === 'function';
102}
103
104function isObject(variable) {
105	return variable !== null && typeof variable === 'object';
106}
107
108function isNull(variable) {
109	return variable === null;
110}
111
112function isUndefined(variable) {
113	return variable === undefined;
114}
115
116function pack() {
117	var result = {};
118
119	for (var i = 0, l = arguments.length; i < l; i++) {
120		var obj = arguments[i];
121
122		if (obj) {
123			for (var key in obj) {
124				if (obj.hasOwnProperty(key)) {
125					result[key] = obj[key];
126				}
127			}
128		}
129	}
130
131	return result;
132}
133
134function offsetVector(vector, x, y) {
135	switch (vector.type) {
136		case 'ellipse':
137		case 'rect':
138			vector.x += x;
139			vector.y += y;
140			break;
141		case 'line':
142			vector.x1 += x;
143			vector.x2 += x;
144			vector.y1 += y;
145			vector.y2 += y;
146			break;
147		case 'polyline':
148			for (var i = 0, l = vector.points.length; i < l; i++) {
149				vector.points[i].x += x;
150				vector.points[i].y += y;
151			}
152			break;
153	}
154}
155
156function fontStringify(key, val) {
157	if (key === 'font') {
158		return 'font';
159	}
160	return val;
161}
162
163module.exports = {
164	isString: isString,
165	isNumber: isNumber,
166	isBoolean: isBoolean,
167	isArray: isArray,
168	isFunction: isFunction,
169	isObject: isObject,
170	isNull: isNull,
171	isUndefined: isUndefined,
172	pack: pack,
173	fontStringify: fontStringify,
174	offsetVector: offsetVector
175};
176
177
178/***/ }),
179/* 1 */
180/***/ (function(module, exports, __webpack_require__) {
181
182"use strict";
183/* WEBPACK VAR INJECTION */(function(global) {/*!
184 * The buffer module from node.js, for the browser.
185 *
186 * @author   Feross Aboukhadijeh <[email protected]> <http://feross.org>
187 * @license  MIT
188 */
189/* eslint-disable no-proto */
190
191
192
193var base64 = __webpack_require__(124)
194var ieee754 = __webpack_require__(125)
195var isArray = __webpack_require__(76
vendor: 6,472 bytes, lines 195-417
195)
196
197exports.Buffer = Buffer
198exports.SlowBuffer = SlowBuffer
199exports.INSPECT_MAX_BYTES = 50
200
201/**
202 * If `Buffer.TYPED_ARRAY_SUPPORT`:
203 *   === true    Use Uint8Array implementation (fastest)
204 *   === false   Use Object implementation (most compatible, even IE6)
205 *
206 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
207 * Opera 11.6+, iOS 4.2+.
208 *
209 * Due to various browser bugs, sometimes the Object implementation will be used even
210 * when the browser supports typed arrays.
211 *
212 * Note:
213 *
214 *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
215 *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
216 *
217 *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
218 *
219 *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
220 *     incorrect length in some situations.
221
222 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
223 * get the Object implementation, which is slower but behaves correctly.
224 */
225Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
226  ? global.TYPED_ARRAY_SUPPORT
227  : typedArraySupport()
228
229/*
230 * Export kMaxLength after typed array support is determined.
231 */
232exports.kMaxLength = kMaxLength()
233
234function typedArraySupport () {
235  try {
236    var arr = new Uint8Array(1)
237    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
238    return arr.foo() === 42 && // typed array instances can be augmented
239        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
240        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
241  } catch (e) {
242    return false
243  }
244}
245
246function kMaxLength () {
247  return Buffer.TYPED_ARRAY_SUPPORT
248    ? 0x7fffffff
249    : 0x3fffffff
250}
251
252function createBuffer (that, length) {
253  if (kMaxLength() < length) {
254    throw new RangeError('Invalid typed array length')
255  }
256  if (Buffer.TYPED_ARRAY_SUPPORT) {
257    // Return an augmented `Uint8Array` instance, for best performance
258    that = new Uint8Array(length)
259    that.__proto__ = Buffer.prototype
260  } else {
261    // Fallback: Return an object instance of the Buffer class
262    if (that === null) {
263      that = new Buffer(length)
264    }
265    that.length = length
266  }
267
268  return that
269}
270
271/**
272 * The Buffer constructor returns instances of `Uint8Array` that have their
273 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
274 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
275 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
276 * returns a single octet.
277 *
278 * The `Uint8Array` prototype remains unmodified.
279 */
280
281function Buffer (arg, encodingOrOffset, length) {
282  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
283    return new Buffer(arg, encodingOrOffset, length)
284  }
285
286  // Common case.
287  if (typeof arg === 'number') {
288    if (typeof encodingOrOffset === 'string') {
289      throw new Error(
290        'If encoding is specified then the first argument must be a string'
291      )
292    }
293    return allocUnsafe(this, arg)
294  }
295  return from(this, arg, encodingOrOffset, length)
296}
297
298Buffer.poolSize = 8192 // not used by this implementation
299
300// TODO: Legacy, not needed anymore. Remove in next major version.
301Buffer._augment = function (arr) {
302  arr.__proto__ = Buffer.prototype
303  return arr
304}
305
306function from (that, value, encodingOrOffset, length) {
307  if (typeof value === 'number') {
308    throw new TypeError('"value" argument must not be a number')
309  }
310
311  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
312    return fromArrayBuffer(that, value, encodingOrOffset, length)
313  }
314
315  if (typeof value === 'string') {
316    return fromString(that, value, encodingOrOffset)
317  }
318
319  return fromObject(that, value)
320}
321
322/**
323 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
324 * if value is a number.
325 * Buffer.from(str[, encoding])
326 * Buffer.from(array)
327 * Buffer.from(buffer)
328 * Buffer.from(arrayBuffer[, byteOffset[, length]])
329 **/
330Buffer.from = function (value, encodingOrOffset, length) {
331  return from(null, value, encodingOrOffset, length)
332}
333
334if (Buffer.TYPED_ARRAY_SUPPORT) {
335  Buffer.prototype.__proto__ = Uint8Array.prototype
336  Buffer.__proto__ = Uint8Array
337  if (typeof Symbol !== 'undefined' && Symbol.species &&
338      Buffer[Symbol.species] === Buffer) {
339    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
340    Object.defineProperty(Buffer, Symbol.species, {
341      value: null,
342      configurable: true
343    })
344  }
345}
346
347function assertSize (size) {
348  if (typeof size !== 'number') {
349    throw new TypeError('"size" argument must be a number')
350  } else if (size < 0) {
351    throw new RangeError('"size" argument must not be negative')
352  }
353}
354
355function alloc (that, size, fill, encoding) {
356  assertSize(size)
357  if (size <= 0) {
358    return createBuffer(that, size)
359  }
360  if (fill !== undefined) {
361    // Only pay attention to encoding if it's a string. This
362    // prevents accidentally sending in a number that would
363    // be interpretted as a start offset.
364    return typeof encoding === 'string'
365      ? createBuffer(that, size).fill(fill, encoding)
366      : createBuffer(that, size).fill(fill)
367  }
368  return createBuffer(that, size)
369}
370
371/**
372 * Creates a new filled Buffer instance.
373 * alloc(size[, fill[, encoding]])
374 **/
375Buffer.alloc = function (size, fill, encoding) {
376  return alloc(null, size, fill, encoding)
377}
378
379function allocUnsafe (that, size) {
380  assertSize(size)
381  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
382  if (!Buffer.TYPED_ARRAY_SUPPORT) {
383    for (var i = 0; i < size; ++i) {
384      that[i] = 0
385    }
386  }
387  return that
388}
389
390/**
391 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
392 * */
393Buffer.allocUnsafe = function (size) {
394  return allocUnsafe(null, size)
395}
396/**
397 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
398 */
399Buffer.allocUnsafeSlow = function (size) {
400  return allocUnsafe(null, size)
401}
402
403function fromString (that, string, encoding) {
404  if (typeof encoding !== 'string' || encoding === '') {
405    encoding = 'utf8'
406  }
407
408  if (!Buffer.isEncoding(encoding)) {
409    throw new TypeError('"encoding" must be a valid string encoding')
410  }
411
412  var length = byteLength(string, encoding) | 0
413  that = createBuffer(that, length)
414
415  var actual = that.write(string, encoding)
416
417  if (actual !== length) {
vendor: 8,522 bytes, lines 418-765
418    // Writing a hex string, for example, that contains invalid characters will
419    // cause everything after the first invalid character to be ignored. (e.g.
420    // 'abxxcd' will be treated as 'ab')
421    that = that.slice(0, actual)
422  }
423
424  return that
425}
426
427function fromArrayLike (that, array) {
428  var length = array.length < 0 ? 0 : checked(array.length) | 0
429  that = createBuffer(that, length)
430  for (var i = 0; i < length; i += 1) {
431    that[i] = array[i] & 255
432  }
433  return that
434}
435
436function fromArrayBuffer (that, array, byteOffset, length) {
437  array.byteLength // this throws if `array` is not a valid ArrayBuffer
438
439  if (byteOffset < 0 || array.byteLength < byteOffset) {
440    throw new RangeError('\'offset\' is out of bounds')
441  }
442
443  if (array.byteLength < byteOffset + (length || 0)) {
444    throw new RangeError('\'length\' is out of bounds')
445  }
446
447  if (byteOffset === undefined && length === undefined) {
448    array = new Uint8Array(array)
449  } else if (length === undefined) {
450    array = new Uint8Array(array, byteOffset)
451  } else {
452    array = new Uint8Array(array, byteOffset, length)
453  }
454
455  if (Buffer.TYPED_ARRAY_SUPPORT) {
456    // Return an augmented `Uint8Array` instance, for best performance
457    that = array
458    that.__proto__ = Buffer.prototype
459  } else {
460    // Fallback: Return an object instance of the Buffer class
461    that = fromArrayLike(that, array)
462  }
463  return that
464}
465
466function fromObject (that, obj) {
467  if (Buffer.isBuffer(obj)) {
468    var len = checked(obj.length) | 0
469    that = createBuffer(that, len)
470
471    if (that.length === 0) {
472      return that
473    }
474
475    obj.copy(that, 0, 0, len)
476    return that
477  }
478
479  if (obj) {
480    if ((typeof ArrayBuffer !== 'undefined' &&
481        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
482      if (typeof obj.length !== 'number' || isnan(obj.length)) {
483        return createBuffer(that, 0)
484      }
485      return fromArrayLike(that, obj)
486    }
487
488    if (obj.type === 'Buffer' && isArray(obj.data)) {
489      return fromArrayLike(that, obj.data)
490    }
491  }
492
493  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
494}
495
496function checked (length) {
497  // Note: cannot use `length < kMaxLength()` here because that fails when
498  // length is NaN (which is otherwise coerced to zero.)
499  if (length >= kMaxLength()) {
500    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
501                         'size: 0x' + kMaxLength().toString(16) + ' bytes')
502  }
503  return length | 0
504}
505
506function SlowBuffer (length) {
507  if (+length != length) { // eslint-disable-line eqeqeq
508    length = 0
509  }
510  return Buffer.alloc(+length)
511}
512
513Buffer.isBuffer = function isBuffer (b) {
514  return !!(b != null && b._isBuffer)
515}
516
517Buffer.compare = function compare (a, b) {
518  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
519    throw new TypeError('Arguments must be Buffers')
520  }
521
522  if (a === b) return 0
523
524  var x = a.length
525  var y = b.length
526
527  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
528    if (a[i] !== b[i]) {
529      x = a[i]
530      y = b[i]
531      break
532    }
533  }
534
535  if (x < y) return -1
536  if (y < x) return 1
537  return 0
538}
539
540Buffer.isEncoding = function isEncoding (encoding) {
541  switch (String(encoding).toLowerCase()) {
542    case 'hex':
543    case 'utf8':
544    case 'utf-8':
545    case 'ascii':
546    case 'latin1':
547    case 'binary':
548    case 'base64':
549    case 'ucs2':
550    case 'ucs-2':
551    case 'utf16le':
552    case 'utf-16le':
553      return true
554    default:
555      return false
556  }
557}
558
559Buffer.concat = function concat (list, length) {
560  if (!isArray(list)) {
561    throw new TypeError('"list" argument must be an Array of Buffers')
562  }
563
564  if (list.length === 0) {
565    return Buffer.alloc(0)
566  }
567
568  var i
569  if (length === undefined) {
570    length = 0
571    for (i = 0; i < list.length; ++i) {
572      length += list[i].length
573    }
574  }
575
576  var buffer = Buffer.allocUnsafe(length)
577  var pos = 0
578  for (i = 0; i < list.length; ++i) {
579    var buf = list[i]
580    if (!Buffer.isBuffer(buf)) {
581      throw new TypeError('"list" argument must be an Array of Buffers')
582    }
583    buf.copy(buffer, pos)
584    pos += buf.length
585  }
586  return buffer
587}
588
589function byteLength (string, encoding) {
590  if (Buffer.isBuffer(string)) {
591    return string.length
592  }
593  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
594      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
595    return string.byteLength
596  }
597  if (typeof string !== 'string') {
598    string = '' + string
599  }
600
601  var len = string.length
602  if (len === 0) return 0
603
604  // Use a for loop to avoid recursion
605  var loweredCase = false
606  for (;;) {
607    switch (encoding) {
608      case 'ascii':
609      case 'latin1':
610      case 'binary':
611        return len
612      case 'utf8':
613      case 'utf-8':
614      case undefined:
615        return utf8ToBytes(string).length
616      case 'ucs2':
617      case 'ucs-2':
618      case 'utf16le':
619      case 'utf-16le':
620        return len * 2
621      case 'hex':
622        return len >>> 1
623      case 'base64':
624        return base64ToBytes(string).length
625      default:
626        if (loweredCase) return utf8ToBytes(string).length // assume utf8
627        encoding = ('' + encoding).toLowerCase()
628        loweredCase = true
629    }
630  }
631}
632Buffer.byteLength = byteLength
633
634function slowToString (encoding, start, end) {
635  var loweredCase = false
636
637  // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
638  // property of a typed array.
639
640  // This behaves neither like String nor Uint8Array in that we set start/end
641  // to their upper/lower bounds if the value passed is out of range.
642  // undefined is handled specially as per ECMA-262 6th Edition,
643  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
644  if (start === undefined || start < 0) {
645    start = 0
646  }
647  // Return early if start > this.length. Done here to prevent potential uint32
648  // coercion fail below.
649  if (start > this.length) {
650    return ''
651  }
652
653  if (end === undefined || end > this.length) {
654    end = this.length
655  }
656
657  if (end <= 0) {
658    return ''
659  }
660
661  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
662  end >>>= 0
663  start >>>= 0
664
665  if (end <= start) {
666    return ''
667  }
668
669  if (!encoding) encoding = 'utf8'
670
671  while (true) {
672    switch (encoding) {
673      case 'hex':
674        return hexSlice(this, start, end)
675
676      case 'utf8':
677      case 'utf-8':
678        return utf8Slice(this, start, end)
679
680      case 'ascii':
681        return asciiSlice(this, start, end)
682
683      case 'latin1':
684      case 'binary':
685        return latin1Slice(this, start, end)
686
687      case 'base64':
688        return base64Slice(this, start, end)
689
690      case 'ucs2':
691      case 'ucs-2':
692      case 'utf16le':
693      case 'utf-16le':
694        return utf16leSlice(this, start, end)
695
696      default:
697        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
698        encoding = (encoding + '').toLowerCase()
699        loweredCase = true
700    }
701  }
702}
703
704// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
705// Buffer instances.
706Buffer.prototype._isBuffer = true
707
708function swap (b, n, m) {
709  var i = b[n]
710  b[n] = b[m]
711  b[m] = i
712}
713
714Buffer.prototype.swap16 = function swap16 () {
715  var len = this.length
716  if (len % 2 !== 0) {
717    throw new RangeError('Buffer size must be a multiple of 16-bits')
718  }
719  for (var i = 0; i < len; i += 2) {
720    swap(this, i, i + 1)
721  }
722  return this
723}
724
725Buffer.prototype.swap32 = function swap32 () {
726  var len = this.length
727  if (len % 4 !== 0) {
728    throw new RangeError('Buffer size must be a multiple of 32-bits')
729  }
730  for (var i = 0; i < len; i += 4) {
731    swap(this, i, i + 3)
732    swap(this, i + 1, i + 2)
733  }
734  return this
735}
736
737Buffer.prototype.swap64 = function swap64 () {
738  var len = this.length
739  if (len % 8 !== 0) {
740    throw new RangeError('Buffer size must be a multiple of 64-bits')
741  }
742  for (var i = 0; i < len; i += 8) {
743    swap(this, i, i + 7)
744    swap(this, i + 1, i + 6)
745    swap(this, i + 2, i + 5)
746    swap(this, i + 3, i + 4)
747  }
748  return this
749}
750
751Buffer.prototype.toString = function toString () {
752  var length = this.length | 0
753  if (length === 0) return ''
754  if (arguments.length === 0) return utf8Slice(this, 0, length)
755  return slowToString.apply(this, arguments)
756}
757
758Buffer.prototype.equals = function equals (b) {
759  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
760  if (this === b) return true
761  return Buffer.compare(this, b) === 0
762}
763
764Buffer.prototype.inspect = function inspect () {
765  var str = ''
vendor: 2,989 bytes, lines 766-878
766  var max = exports.INSPECT_MAX_BYTES
767  if (this.length > 0) {
768    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
769    if (this.length > max) str += ' ... '
770  }
771  return '<Buffer ' + str + '>'
772}
773
774Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
775  if (!Buffer.isBuffer(target)) {
776    throw new TypeError('Argument must be a Buffer')
777  }
778
779  if (start === undefined) {
780    start = 0
781  }
782  if (end === undefined) {
783    end = target ? target.length : 0
784  }
785  if (thisStart === undefined) {
786    thisStart = 0
787  }
788  if (thisEnd === undefined) {
789    thisEnd = this.length
790  }
791
792  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
793    throw new RangeError('out of range index')
794  }
795
796  if (thisStart >= thisEnd && start >= end) {
797    return 0
798  }
799  if (thisStart >= thisEnd) {
800    return -1
801  }
802  if (start >= end) {
803    return 1
804  }
805
806  start >>>= 0
807  end >>>= 0
808  thisStart >>>= 0
809  thisEnd >>>= 0
810
811  if (this === target) return 0
812
813  var x = thisEnd - thisStart
814  var y = end - start
815  var len = Math.min(x, y)
816
817  var thisCopy = this.slice(thisStart, thisEnd)
818  var targetCopy = target.slice(start, end)
819
820  for (var i = 0; i < len; ++i) {
821    if (thisCopy[i] !== targetCopy[i]) {
822      x = thisCopy[i]
823      y = targetCopy[i]
824      break
825    }
826  }
827
828  if (x < y) return -1
829  if (y < x) return 1
830  return 0
831}
832
833// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
834// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
835//
836// Arguments:
837// - buffer - a Buffer to search
838// - val - a string, Buffer, or number
839// - byteOffset - an index into `buffer`; will be clamped to an int32
840// - encoding - an optional encoding, relevant is val is a string
841// - dir - true for indexOf, false for lastIndexOf
842function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
843  // Empty buffer means no match
844  if (buffer.length === 0) return -1
845
846  // Normalize byteOffset
847  if (typeof byteOffset === 'string') {
848    encoding = byteOffset
849    byteOffset = 0
850  } else if (byteOffset > 0x7fffffff) {
851    byteOffset = 0x7fffffff
852  } else if (byteOffset < -0x80000000) {
853    byteOffset = -0x80000000
854  }
855  byteOffset = +byteOffset  // Coerce to Number.
856  if (isNaN(byteOffset)) {
857    // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
858    byteOffset = dir ? 0 : (buffer.length - 1)
859  }
860
861  // Normalize byteOffset: negative offsets start from the end of the buffer
862  if (byteOffset < 0) byteOffset = buffer.length + byteOffset
863  if (byteOffset >= buffer.length) {
864    if (dir) return -1
865    else byteOffset = buffer.length - 1
866  } else if (byteOffset < 0) {
867    if (dir) byteOffset = 0
868    else return -1
869  }
870
871  // Normalize val
872  if (typeof val === 'string') {
873    val = Buffer.from(val, encoding)
874  }
875
876  // Finally, search either indexOf (if dir is true) or lastIndexOf
877  if (Buffer.isBuffer(val)) {
878    // Special case: looking for empty string/buffer always fail
vendor: 30,332 bytes, lines 878-1972
878s
879    if (val.length === 0) {
880      return -1
881    }
882    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
883  } else if (typeof val === 'number') {
884    val = val & 0xFF // Search for a byte value [0-255]
885    if (Buffer.TYPED_ARRAY_SUPPORT &&
886        typeof Uint8Array.prototype.indexOf === 'function') {
887      if (dir) {
888        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
889      } else {
890        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
891      }
892    }
893    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
894  }
895
896  throw new TypeError('val must be string, number or Buffer')
897}
898
899function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
900  var indexSize = 1
901  var arrLength = arr.length
902  var valLength = val.length
903
904  if (encoding !== undefined) {
905    encoding = String(encoding).toLowerCase()
906    if (encoding === 'ucs2' || encoding === 'ucs-2' ||
907        encoding === 'utf16le' || encoding === 'utf-16le') {
908      if (arr.length < 2 || val.length < 2) {
909        return -1
910      }
911      indexSize = 2
912      arrLength /= 2
913      valLength /= 2
914      byteOffset /= 2
915    }
916  }
917
918  function read (buf, i) {
919    if (indexSize === 1) {
920      return buf[i]
921    } else {
922      return buf.readUInt16BE(i * indexSize)
923    }
924  }
925
926  var i
927  if (dir) {
928    var foundIndex = -1
929    for (i = byteOffset; i < arrLength; i++) {
930      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
931        if (foundIndex === -1) foundIndex = i
932        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
933      } else {
934        if (foundIndex !== -1) i -= i - foundIndex
935        foundIndex = -1
936      }
937    }
938  } else {
939    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
940    for (i = byteOffset; i >= 0; i--) {
941      var found = true
942      for (var j = 0; j < valLength; j++) {
943        if (read(arr, i + j) !== read(val, j)) {
944          found = false
945          break
946        }
947      }
948      if (found) return i
949    }
950  }
951
952  return -1
953}
954
955Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
956  return this.indexOf(val, byteOffset, encoding) !== -1
957}
958
959Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
960  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
961}
962
963Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
964  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
965}
966
967function hexWrite (buf, string, offset, length) {
968  offset = Number(offset) || 0
969  var remaining = buf.length - offset
970  if (!length) {
971    length = remaining
972  } else {
973    length = Number(length)
974    if (length > remaining) {
975      length = remaining
976    }
977  }
978
979  // must be an even number of digits
980  var strLen = string.length
981  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
982
983  if (length > strLen / 2) {
984    length = strLen / 2
985  }
986  for (var i = 0; i < length; ++i) {
987    var parsed = parseInt(string.substr(i * 2, 2), 16)
988    if (isNaN(parsed)) return i
989    buf[offset + i] = parsed
990  }
991  return i
992}
993
994function utf8Write (buf, string, offset, length) {
995  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
996}
997
998function asciiWrite (buf, string, offset, length) {
999  return blitBuffer(asciiToBytes(string), buf, offset, length)
1000}
1001
1002function latin1Write (buf, string, offset, length) {
1003  return asciiWrite(buf, string, offset, length)
1004}
1005
1006function base64Write (buf, string, offset, length) {
1007  return blitBuffer(base64ToBytes(string), buf, offset, length)
1008}
1009
1010function ucs2Write (buf, string, offset, length) {
1011  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
1012}
1013
1014Buffer.prototype.write = function write (string, offset, length, encoding) {
1015  // Buffer#write(string)
1016  if (offset === undefined) {
1017    encoding = 'utf8'
1018    length = this.length
1019    offset = 0
1020  // Buffer#write(string, encoding)
1021  } else if (length === undefined && typeof offset === 'string') {
1022    encoding = offset
1023    length = this.length
1024    offset = 0
1025  // Buffer#write(string, offset[, length][, encoding])
1026  } else if (isFinite(offset)) {
1027    offset = offset | 0
1028    if (isFinite(length)) {
1029      length = length | 0
1030      if (encoding === undefined) encoding = 'utf8'
1031    } else {
1032      encoding = length
1033      length = undefined
1034    }
1035  // legacy write(string, encoding, offset, length) - remove in v0.13
1036  } else {
1037    throw new Error(
1038      'Buffer.write(string, encoding, offset[, length]) is no longer supported'
1039    )
1040  }
1041
1042  var remaining = this.length - offset
1043  if (length === undefined || length > remaining) length = remaining
1044
1045  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
1046    throw new RangeError('Attempt to write outside buffer bounds')
1047  }
1048
1049  if (!encoding) encoding = 'utf8'
1050
1051  var loweredCase = false
1052  for (;;) {
1053    switch (encoding) {
1054      case 'hex':
1055        return hexWrite(this, string, offset, length)
1056
1057      case 'utf8':
1058      case 'utf-8':
1059        return utf8Write(this, string, offset, length)
1060
1061      case 'ascii':
1062        return asciiWrite(this, string, offset, length)
1063
1064      case 'latin1':
1065      case 'binary':
1066        return latin1Write(this, string, offset, length)
1067
1068      case 'base64':
1069        // Warning: maxLength not taken into account in base64Write
1070        return base64Write(this, string, offset, length)
1071
1072      case 'ucs2':
1073      case 'ucs-2':
1074      case 'utf16le':
1075      case 'utf-16le':
1076        return ucs2Write(this, string, offset, length)
1077
1078      default:
1079        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
1080        encoding = ('' + encoding).toLowerCase()
1081        loweredCase = true
1082    }
1083  }
1084}
1085
1086Buffer.prototype.toJSON = function toJSON () {
1087  return {
1088    type: 'Buffer',
1089    data: Array.prototype.slice.call(this._arr || this, 0)
1090  }
1091}
1092
1093function base64Slice (buf, start, end) {
1094  if (start === 0 && end === buf.length) {
1095    return base64.fromByteArray(buf)
1096  } else {
1097    return base64.fromByteArray(buf.slice(start, end))
1098  }
1099}
1100
1101function utf8Slice (buf, start, end) {
1102  end = Math.min(buf.length, end)
1103  var res = []
1104
1105  var i = start
1106  while (i < end) {
1107    var firstByte = buf[i]
1108    var codePoint = null
1109    var bytesPerSequence = (firstByte > 0xEF) ? 4
1110      : (firstByte > 0xDF) ? 3
1111      : (firstByte > 0xBF) ? 2
1112      : 1
1113
1114    if (i + bytesPerSequence <= end) {
1115      var secondByte, thirdByte, fourthByte, tempCodePoint
1116
1117      switch (bytesPerSequence) {
1118        case 1:
1119          if (firstByte < 0x80) {
1120            codePoint = firstByte
1121          }
1122          break
1123        case 2:
1124          secondByte = buf[i + 1]
1125          if ((secondByte & 0xC0) === 0x80) {
1126            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
1127            if (tempCodePoint > 0x7F) {
1128              codePoint = tempCodePoint
1129            }
1130          }
1131          break
1132        case 3:
1133          secondByte = buf[i + 1]
1134          thirdByte = buf[i + 2]
1135          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
1136            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
1137            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
1138              codePoint = tempCodePoint
1139            }
1140          }
1141          break
1142        case 4:
1143          secondByte = buf[i + 1]
1144          thirdByte = buf[i + 2]
1145          fourthByte = buf[i + 3]
1146          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
1147            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
1148            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
1149              codePoint = tempCodePoint
1150            }
1151          }
1152      }
1153    }
1154
1155    if (codePoint === null) {
1156      // we did not generate a valid codePoint so insert a
1157      // replacement char (U+FFFD) and advance only 1 byte
1158      codePoint = 0xFFFD
1159      bytesPerSequence = 1
1160    } else if (codePoint > 0xFFFF) {
1161      // encode to utf16 (surrogate pair dance)
1162      codePoint -= 0x10000
1163      res.push(codePoint >>> 10 & 0x3FF | 0xD800)
1164      codePoint = 0xDC00 | codePoint & 0x3FF
1165    }
1166
1167    res.push(codePoint)
1168    i += bytesPerSequence
1169  }
1170
1171  return decodeCodePointsArray(res)
1172}
1173
1174// Based on http://stackoverflow.com/a/22747272/680742, the browser with
1175// the lowest limit is Chrome, with 0x10000 args.
1176// We go 1 magnitude less, for safety
1177var MAX_ARGUMENTS_LENGTH = 0x1000
1178
1179function decodeCodePointsArray (codePoints) {
1180  var len = codePoints.length
1181  if (len <= MAX_ARGUMENTS_LENGTH) {
1182    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
1183  }
1184
1185  // Decode in chunks to avoid "call stack size exceeded".
1186  var res = ''
1187  var i = 0
1188  while (i < len) {
1189    res += String.fromCharCode.apply(
1190      String,
1191      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
1192    )
1193  }
1194  return res
1195}
1196
1197function asciiSlice (buf, start, end) {
1198  var ret = ''
1199  end = Math.min(buf.length, end)
1200
1201  for (var i = start; i < end; ++i) {
1202    ret += String.fromCharCode(buf[i] & 0x7F)
1203  }
1204  return ret
1205}
1206
1207function latin1Slice (buf, start, end) {
1208  var ret = ''
1209  end = Math.min(buf.length, end)
1210
1211  for (var i = start; i < end; ++i) {
1212    ret += String.fromCharCode(buf[i])
1213  }
1214  return ret
1215}
1216
1217function hexSlice (buf, start, end) {
1218  var len = buf.length
1219
1220  if (!start || start < 0) start = 0
1221  if (!end || end < 0 || end > len) end = len
1222
1223  var out = ''
1224  for (var i = start; i < end; ++i) {
1225    out += toHex(buf[i])
1226  }
1227  return out
1228}
1229
1230function utf16leSlice (buf, start, end) {
1231  var bytes = buf.slice(start, end)
1232  var res = ''
1233  for (var i = 0; i < bytes.length; i += 2) {
1234    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
1235  }
1236  return res
1237}
1238
1239Buffer.prototype.slice = function slice (start, end) {
1240  var len = this.length
1241  start = ~~start
1242  end = end === undefined ? len : ~~end
1243
1244  if (start < 0) {
1245    start += len
1246    if (start < 0) start = 0
1247  } else if (start > len) {
1248    start = len
1249  }
1250
1251  if (end < 0) {
1252    end += len
1253    if (end < 0) end = 0
1254  } else if (end > len) {
1255    end = len
1256  }
1257
1258  if (end < start) end = start
1259
1260  var newBuf
1261  if (Buffer.TYPED_ARRAY_SUPPORT) {
1262    newBuf = this.subarray(start, end)
1263    newBuf.__proto__ = Buffer.prototype
1264  } else {
1265    var sliceLen = end - start
1266    newBuf = new Buffer(sliceLen, undefined)
1267    for (var i = 0; i < sliceLen; ++i) {
1268      newBuf[i] = this[i + start]
1269    }
1270  }
1271
1272  return newBuf
1273}
1274
1275/*
1276 * Need to make sure that buffer isn't trying to write out of bounds.
1277 */
1278function checkOffset (offset, ext, length) {
1279  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
1280  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
1281}
1282
1283Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
1284  offset = offset | 0
1285  byteLength = byteLength | 0
1286  if (!noAssert) checkOffset(offset, byteLength, this.length)
1287
1288  var val = this[offset]
1289  var mul = 1
1290  var i = 0
1291  while (++i < byteLength && (mul *= 0x100)) {
1292    val += this[offset + i] * mul
1293  }
1294
1295  return val
1296}
1297
1298Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
1299  offset = offset | 0
1300  byteLength = byteLength | 0
1301  if (!noAssert) {
1302    checkOffset(offset, byteLength, this.length)
1303  }
1304
1305  var val = this[offset + --byteLength]
1306  var mul = 1
1307  while (byteLength > 0 && (mul *= 0x100)) {
1308    val += this[offset + --byteLength] * mul
1309  }
1310
1311  return val
1312}
1313
1314Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
1315  if (!noAssert) checkOffset(offset, 1, this.length)
1316  return this[offset]
1317}
1318
1319Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
1320  if (!noAssert) checkOffset(offset, 2, this.length)
1321  return this[offset] | (this[offset + 1] << 8)
1322}
1323
1324Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
1325  if (!noAssert) checkOffset(offset, 2, this.length)
1326  return (this[offset] << 8) | this[offset + 1]
1327}
1328
1329Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
1330  if (!noAssert) checkOffset(offset, 4, this.length)
1331
1332  return ((this[offset]) |
1333      (this[offset + 1] << 8) |
1334      (this[offset + 2] << 16)) +
1335      (this[offset + 3] * 0x1000000)
1336}
1337
1338Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
1339  if (!noAssert) checkOffset(offset, 4, this.length)
1340
1341  return (this[offset] * 0x1000000) +
1342    ((this[offset + 1] << 16) |
1343    (this[offset + 2] << 8) |
1344    this[offset + 3])
1345}
1346
1347Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
1348  offset = offset | 0
1349  byteLength = byteLength | 0
1350  if (!noAssert) checkOffset(offset, byteLength, this.length)
1351
1352  var val = this[offset]
1353  var mul = 1
1354  var i = 0
1355  while (++i < byteLength && (mul *= 0x100)) {
1356    val += this[offset + i] * mul
1357  }
1358  mul *= 0x80
1359
1360  if (val >= mul) val -= Math.pow(2, 8 * byteLength)
1361
1362  return val
1363}
1364
1365Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
1366  offset = offset | 0
1367  byteLength = byteLength | 0
1368  if (!noAssert) checkOffset(offset, byteLength, this.length)
1369
1370  var i = byteLength
1371  var mul = 1
1372  var val = this[offset + --i]
1373  while (i > 0 && (mul *= 0x100)) {
1374    val += this[offset + --i] * mul
1375  }
1376  mul *= 0x80
1377
1378  if (val >= mul) val -= Math.pow(2, 8 * byteLength)
1379
1380  return val
1381}
1382
1383Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
1384  if (!noAssert) checkOffset(offset, 1, this.length)
1385  if (!(this[offset] & 0x80)) return (this[offset])
1386  return ((0xff - this[offset] + 1) * -1)
1387}
1388
1389Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
1390  if (!noAssert) checkOffset(offset, 2, this.length)
1391  var val = this[offset] | (this[offset + 1] << 8)
1392  return (val & 0x8000) ? val | 0xFFFF0000 : val
1393}
1394
1395Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
1396  if (!noAssert) checkOffset(offset, 2, this.length)
1397  var val = this[offset + 1] | (this[offset] << 8)
1398  return (val & 0x8000) ? val | 0xFFFF0000 : val
1399}
1400
1401Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
1402  if (!noAssert) checkOffset(offset, 4, this.length)
1403
1404  return (this[offset]) |
1405    (this[offset + 1] << 8) |
1406    (this[offset + 2] << 16) |
1407    (this[offset + 3] << 24)
1408}
1409
1410Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
1411  if (!noAssert) checkOffset(offset, 4, this.length)
1412
1413  return (this[offset] << 24) |
1414    (this[offset + 1] << 16) |
1415    (this[offset + 2] << 8) |
1416    (this[offset + 3])
1417}
1418
1419Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
1420  if (!noAssert) checkOffset(offset, 4, this.length)
1421  return ieee754.read(this, offset, true, 23, 4)
1422}
1423
1424Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
1425  if (!noAssert) checkOffset(offset, 4, this.length)
1426  return ieee754.read(this, offset, false, 23, 4)
1427}
1428
1429Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
1430  if (!noAssert) checkOffset(offset, 8, this.length)
1431  return ieee754.read(this, offset, true, 52, 8)
1432}
1433
1434Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
1435  if (!noAssert) checkOffset(offset, 8, this.length)
1436  return ieee754.read(this, offset, false, 52, 8)
1437}
1438
1439function checkInt (buf, value, offset, ext, max, min) {
1440  if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
1441  if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
1442  if (offset + ext > buf.length) throw new RangeError('Index out of range')
1443}
1444
1445Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
1446  value = +value
1447  offset = offset | 0
1448  byteLength = byteLength | 0
1449  if (!noAssert) {
1450    var maxBytes = Math.pow(2, 8 * byteLength) - 1
1451    checkInt(this, value, offset, byteLength, maxBytes, 0)
1452  }
1453
1454  var mul = 1
1455  var i = 0
1456  this[offset] = value & 0xFF
1457  while (++i < byteLength && (mul *= 0x100)) {
1458    this[offset + i] = (value / mul) & 0xFF
1459  }
1460
1461  return offset + byteLength
1462}
1463
1464Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
1465  value = +value
1466  offset = offset | 0
1467  byteLength = byteLength | 0
1468  if (!noAssert) {
1469    var maxBytes = Math.pow(2, 8 * byteLength) - 1
1470    checkInt(this, value, offset, byteLength, maxBytes, 0)
1471  }
1472
1473  var i = byteLength - 1
1474  var mul = 1
1475  this[offset + i] = value & 0xFF
1476  while (--i >= 0 && (mul *= 0x100)) {
1477    this[offset + i] = (value / mul) & 0xFF
1478  }
1479
1480  return offset + byteLength
1481}
1482
1483Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
1484  value = +value
1485  offset = offset | 0
1486  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
1487  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
1488  this[offset] = (value & 0xff)
1489  return offset + 1
1490}
1491
1492function objectWriteUInt16 (buf, value, offset, littleEndian) {
1493  if (value < 0) value = 0xffff + value + 1
1494  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
1495    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
1496      (littleEndian ? i : 1 - i) * 8
1497  }
1498}
1499
1500Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
1501  value = +value
1502  offset = offset | 0
1503  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
1504  if (Buffer.TYPED_ARRAY_SUPPORT) {
1505    this[offset] = (value & 0xff)
1506    this[offset + 1] = (value >>> 8)
1507  } else {
1508    objectWriteUInt16(this, value, offset, true)
1509  }
1510  return offset + 2
1511}
1512
1513Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
1514  value = +value
1515  offset = offset | 0
1516  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
1517  if (Buffer.TYPED_ARRAY_SUPPORT) {
1518    this[offset] = (value >>> 8)
1519    this[offset + 1] = (value & 0xff)
1520  } else {
1521    objectWriteUInt16(this, value, offset, false)
1522  }
1523  return offset + 2
1524}
1525
1526function objectWriteUInt32 (buf, value, offset, littleEndian) {
1527  if (value < 0) value = 0xffffffff + value + 1
1528  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
1529    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
1530  }
1531}
1532
1533Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
1534  value = +value
1535  offset = offset | 0
1536  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
1537  if (Buffer.TYPED_ARRAY_SUPPORT) {
1538    this[offset + 3] = (value >>> 24)
1539    this[offset + 2] = (value >>> 16)
1540    this[offset + 1] = (value >>> 8)
1541    this[offset] = (value & 0xff)
1542  } else {
1543    objectWriteUInt32(this, value, offset, true)
1544  }
1545  return offset + 4
1546}
1547
1548Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
1549  value = +value
1550  offset = offset | 0
1551  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
1552  if (Buffer.TYPED_ARRAY_SUPPORT) {
1553    this[offset] = (value >>> 24)
1554    this[offset + 1] = (value >>> 16)
1555    this[offset + 2] = (value >>> 8)
1556    this[offset + 3] = (value & 0xff)
1557  } else {
1558    objectWriteUInt32(this, value, offset, false)
1559  }
1560  return offset + 4
1561}
1562
1563Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
1564  value = +value
1565  offset = offset | 0
1566  if (!noAssert) {
1567    var limit = Math.pow(2, 8 * byteLength - 1)
1568
1569    checkInt(this, value, offset, byteLength, limit - 1, -limit)
1570  }
1571
1572  var i = 0
1573  var mul = 1
1574  var sub = 0
1575  this[offset] = value & 0xFF
1576  while (++i < byteLength && (mul *= 0x100)) {
1577    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
1578      sub = 1
1579    }
1580    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
1581  }
1582
1583  return offset + byteLength
1584}
1585
1586Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
1587  value = +value
1588  offset = offset | 0
1589  if (!noAssert) {
1590    var limit = Math.pow(2, 8 * byteLength - 1)
1591
1592    checkInt(this, value, offset, byteLength, limit - 1, -limit)
1593  }
1594
1595  var i = byteLength - 1
1596  var mul = 1
1597  var sub = 0
1598  this[offset + i] = value & 0xFF
1599  while (--i >= 0 && (mul *= 0x100)) {
1600    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
1601      sub = 1
1602    }
1603    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
1604  }
1605
1606  return offset + byteLength
1607}
1608
1609Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
1610  value = +value
1611  offset = offset | 0
1612  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
1613  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
1614  if (value < 0) value = 0xff + value + 1
1615  this[offset] = (value & 0xff)
1616  return offset + 1
1617}
1618
1619Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
1620  value = +value
1621  offset = offset | 0
1622  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
1623  if (Buffer.TYPED_ARRAY_SUPPORT) {
1624    this[offset] = (value & 0xff)
1625    this[offset + 1] = (value >>> 8)
1626  } else {
1627    objectWriteUInt16(this, value, offset, true)
1628  }
1629  return offset + 2
1630}
1631
1632Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
1633  value = +value
1634  offset = offset | 0
1635  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
1636  if (Buffer.TYPED_ARRAY_SUPPORT) {
1637    this[offset] = (value >>> 8)
1638    this[offset + 1] = (value & 0xff)
1639  } else {
1640    objectWriteUInt16(this, value, offset, false)
1641  }
1642  return offset + 2
1643}
1644
1645Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
1646  value = +value
1647  offset = offset | 0
1648  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
1649  if (Buffer.TYPED_ARRAY_SUPPORT) {
1650    this[offset] = (value & 0xff)
1651    this[offset + 1] = (value >>> 8)
1652    this[offset + 2] = (value >>> 16)
1653    this[offset + 3] = (value >>> 24)
1654  } else {
1655    objectWriteUInt32(this, value, offset, true)
1656  }
1657  return offset + 4
1658}
1659
1660Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
1661  value = +value
1662  offset = offset | 0
1663  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
1664  if (value < 0) value = 0xffffffff + value + 1
1665  if (Buffer.TYPED_ARRAY_SUPPORT) {
1666    this[offset] = (value >>> 24)
1667    this[offset + 1] = (value >>> 16)
1668    this[offset + 2] = (value >>> 8)
1669    this[offset + 3] = (value & 0xff)
1670  } else {
1671    objectWriteUInt32(this, value, offset, false)
1672  }
1673  return offset + 4
1674}
1675
1676function checkIEEE754 (buf, value, offset, ext, max, min) {
1677  if (offset + ext > buf.length) throw new RangeError('Index out of range')
1678  if (offset < 0) throw new RangeError('Index out of range')
1679}
1680
1681function writeFloat (buf, value, offset, littleEndian, noAssert) {
1682  if (!noAssert) {
1683    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
1684  }
1685  ieee754.write(buf, value, offset, littleEndian, 23, 4)
1686  return offset + 4
1687}
1688
1689Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
1690  return writeFloat(this, value, offset, true, noAssert)
1691}
1692
1693Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
1694  return writeFloat(this, value, offset, false, noAssert)
1695}
1696
1697function writeDouble (buf, value, offset, littleEndian, noAssert) {
1698  if (!noAssert) {
1699    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
1700  }
1701  ieee754.write(buf, value, offset, littleEndian, 52, 8)
1702  return offset + 8
1703}
1704
1705Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
1706  return writeDouble(this, value, offset, true, noAssert)
1707}
1708
1709Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
1710  return writeDouble(this, value, offset, false, noAssert)
1711}
1712
1713// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
1714Buffer.prototype.copy = function copy (target, targetStart, start, end) {
1715  if (!start) start = 0
1716  if (!end && end !== 0) end = this.length
1717  if (targetStart >= target.length) targetStart = target.length
1718  if (!targetStart) targetStart = 0
1719  if (end > 0 && end < start) end = start
1720
1721  // Copy 0 bytes; we're done
1722  if (end === start) return 0
1723  if (target.length === 0 || this.length === 0) return 0
1724
1725  // Fatal error conditions
1726  if (targetStart < 0) {
1727    throw new RangeError('targetStart out of bounds')
1728  }
1729  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
1730  if (end < 0) throw new RangeError('sourceEnd out of bounds')
1731
1732  // Are we oob?
1733  if (end > this.length) end = this.length
1734  if (target.length - targetStart < end - start) {
1735    end = target.length - targetStart + start
1736  }
1737
1738  var len = end - start
1739  var i
1740
1741  if (this === target && start < targetStart && targetStart < end) {
1742    // descending copy from end
1743    for (i = len - 1; i >= 0; --i) {
1744      target[i + targetStart] = this[i + start]
1745    }
1746  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
1747    // ascending copy from start
1748    for (i = 0; i < len; ++i) {
1749      target[i + targetStart] = this[i + start]
1750    }
1751  } else {
1752    Uint8Array.prototype.set.call(
1753      target,
1754      this.subarray(start, start + len),
1755      targetStart
1756    )
1757  }
1758
1759  return len
1760}
1761
1762// Usage:
1763//    buffer.fill(number[, offset[, end]])
1764//    buffer.fill(buffer[, offset[, end]])
1765//    buffer.fill(string[, offset[, end]][, encoding])
1766Buffer.prototype.fill = function fill (val, start, end, encoding) {
1767  // Handle string cases:
1768  if (typeof val === 'string') {
1769    if (typeof start === 'string') {
1770      encoding = start
1771      start = 0
1772      end = this.length
1773    } else if (typeof end === 'string') {
1774      encoding = end
1775      end = this.length
1776    }
1777    if (val.length === 1) {
1778      var code = val.charCodeAt(0)
1779      if (code < 256) {
1780        val = code
1781      }
1782    }
1783    if (encoding !== undefined && typeof encoding !== 'string') {
1784      throw new TypeError('encoding must be a string')
1785    }
1786    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
1787      throw new TypeError('Unknown encoding: ' + encoding)
1788    }
1789  } else if (typeof val === 'number') {
1790    val = val & 255
1791  }
1792
1793  // Invalid ranges are not set to a default, so can range check early.
1794  if (start < 0 || this.length < start || this.length < end) {
1795    throw new RangeError('Out of range index')
1796  }
1797
1798  if (end <= start) {
1799    return this
1800  }
1801
1802  start = start >>> 0
1803  end = end === undefined ? this.length : end >>> 0
1804
1805  if (!val) val = 0
1806
1807  var i
1808  if (typeof val === 'number') {
1809    for (i = start; i < end; ++i) {
1810      this[i] = val
1811    }
1812  } else {
1813    var bytes = Buffer.isBuffer(val)
1814      ? val
1815      : utf8ToBytes(new Buffer(val, encoding).toString())
1816    var len = bytes.length
1817    for (i = 0; i < end - start; ++i) {
1818      this[i + start] = bytes[i % len]
1819    }
1820  }
1821
1822  return this
1823}
1824
1825// HELPER FUNCTIONS
1826// ================
1827
1828var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
1829
1830function base64clean (str) {
1831  // Node strips out invalid characters like \n and \t from the string, base64-js does not
1832  str = stringtrim(str).replace(INVALID_BASE64_RE, '')
1833  // Node converts strings with length < 2 to ''
1834  if (str.length < 2) return ''
1835  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
1836  while (str.length % 4 !== 0) {
1837    str = str + '='
1838  }
1839  return str
1840}
1841
1842function stringtrim (str) {
1843  if (str.trim) return str.trim()
1844  return str.replace(/^\s+|\s+$/g, '')
1845}
1846
1847function toHex (n) {
1848  if (n < 16) return '0' + n.toString(16)
1849  return n.toString(16)
1850}
1851
1852function utf8ToBytes (string, units) {
1853  units = units || Infinity
1854  var codePoint
1855  var length = string.length
1856  var leadSurrogate = null
1857  var bytes = []
1858
1859  for (var i = 0; i < length; ++i) {
1860    codePoint = string.charCodeAt(i)
1861
1862    // is surrogate component
1863    if (codePoint > 0xD7FF && codePoint < 0xE000) {
1864      // last char was a lead
1865      if (!leadSurrogate) {
1866        // no lead yet
1867        if (codePoint > 0xDBFF) {
1868          // unexpected trail
1869          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
1870          continue
1871        } else if (i + 1 === length) {
1872          // unpaired lead
1873          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
1874          continue
1875        }
1876
1877        // valid lead
1878        leadSurrogate = codePoint
1879
1880        continue
1881      }
1882
1883      // 2 leads in a row
1884      if (codePoint < 0xDC00) {
1885        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
1886        leadSurrogate = codePoint
1887        continue
1888      }
1889
1890      // valid surrogate pair
1891      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
1892    } else if (leadSurrogate) {
1893      // valid bmp char, but last char was a lead
1894      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
1895    }
1896
1897    leadSurrogate = null
1898
1899    // encode utf8
1900    if (codePoint < 0x80) {
1901      if ((units -= 1) < 0) break
1902      bytes.push(codePoint)
1903    } else if (codePoint < 0x800) {
1904      if ((units -= 2) < 0) break
1905      bytes.push(
1906        codePoint >> 0x6 | 0xC0,
1907        codePoint & 0x3F | 0x80
1908      )
1909    } else if (codePoint < 0x10000) {
1910      if ((units -= 3) < 0) break
1911      bytes.push(
1912        codePoint >> 0xC | 0xE0,
1913        codePoint >> 0x6 & 0x3F | 0x80,
1914        codePoint & 0x3F | 0x80
1915      )
1916    } else if (codePoint < 0x110000) {
1917      if ((units -= 4) < 0) break
1918      bytes.push(
1919        codePoint >> 0x12 | 0xF0,
1920        codePoint >> 0xC & 0x3F | 0x80,
1921        codePoint >> 0x6 & 0x3F | 0x80,
1922        codePoint & 0x3F | 0x80
1923      )
1924    } else {
1925      throw new Error('Invalid code point')
1926    }
1927  }
1928
1929  return bytes
1930}
1931
1932function asciiToBytes (str) {
1933  var byteArray = []
1934  for (var i = 0; i < str.length; ++i) {
1935    // Node's code seems to be doing this and not & 0x7F..
1936    byteArray.push(str.charCodeAt(i) & 0xFF)
1937  }
1938  return byteArray
1939}
1940
1941function utf16leToBytes (str, units) {
1942  var c, hi, lo
1943  var byteArray = []
1944  for (var i = 0; i < str.length; ++i) {
1945    if ((units -= 2) < 0) break
1946
1947    c = str.charCodeAt(i)
1948    hi = c >> 8
1949    lo = c % 256
1950    byteArray.push(lo)
1951    byteArray.push(hi)
1952  }
1953
1954  return byteArray
1955}
1956
1957function base64ToBytes (str) {
1958  return base64.toByteArray(base64clean(str))
1959}
1960
1961function blitBuffer (src, dst, offset, length) {
1962  for (var i = 0; i < length; ++i) {
1963    if ((i + offset >= dst.length) || (i >= src.length)) break
1964    dst[i + offset] = src[i]
1965  }
1966  return i
1967}
1968
1969function isnan (val) {
1970  return val !== val // eslint-disable-line no-self-compare
1971}
1972
vendor: 2,905 bytes, lines 1973-2058
1973/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)))
1974
1975/***/ }),
1976/* 2 */
1977/***/ (function(module, exports) {
1978
1979var core = module.exports = { version: '2.5.3' };
1980if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
1981
1982
1983/***/ }),
1984/* 3 */
1985/***/ (function(module, exports, __webpack_require__) {
1986
1987var global = __webpack_require__(10);
1988var core = __webpack_require__(2);
1989var ctx = __webpack_require__(20);
1990var hide = __webpack_require__(13);
1991var PROTOTYPE = 'prototype';
1992
1993var $export = function (type, name, source) {
1994  var IS_FORCED = type & $export.F;
1995  var IS_GLOBAL = type & $export.G;
1996  var IS_STATIC = type & $export.S;
1997  var IS_PROTO = type & $export.P;
1998  var IS_BIND = type & $export.B;
1999  var IS_WRAP = type & $export.W;
2000  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
2001  var expProto = exports[PROTOTYPE];
2002  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
2003  var key, own, out;
2004  if (IS_GLOBAL) source = name;
2005  for (key in source) {
2006    // contains in native
2007    own = !IS_FORCED && target && target[key] !== undefined;
2008    if (own && key in exports) continue;
2009    // export native or passed
2010    out = own ? target[key] : source[key];
2011    // prevent global pollution for namespaces
2012    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
2013    // bind timers to global for call from export context
2014    : IS_BIND && own ? ctx(out, global)
2015    // wrap global constructors for prevent change them in library
2016    : IS_WRAP && target[key] == out ? (function (C) {
2017      var F = function (a, b, c) {
2018        if (this instanceof C) {
2019          switch (arguments.length) {
2020            case 0: return new C();
2021            case 1: return new C(a);
2022            case 2: return new C(a, b);
2023          } return new C(a, b, c);
2024        } return C.apply(this, arguments);
2025      };
2026      F[PROTOTYPE] = C[PROTOTYPE];
2027      return F;
2028    // make static versions for prototype methods
2029    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
2030    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
2031    if (IS_PROTO) {
2032      (exports.virtual || (exports.virtual = {}))[key] = out;
2033      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
2034      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
2035    }
2036  }
2037};
2038// type bitmap
2039$export.F = 1;   // forced
2040$export.G = 2;   // global
2041$export.S = 4;   // static
2042$export.P = 8;   // proto
2043$export.B = 16;  // bind
2044$export.W = 32;  // wrap
2045$export.U = 64;  // safe
2046$export.R = 128; // real proto method for `library`
2047module.exports = $export;
2048
2049
2050/***/ }),
2051/* 4 */
2052/***/ (function(module, exports, __webpack_require__) {
2053
2054var store = __webpack_require__(65)('wks');
2055var uid = __webpack_require__(38);
2056var Symbol = __webpack_require__(10).Symbol;
2057var USE_SYMBOL = typeof Symbol == 'function';
2058
vendor: 6,791 bytes, lines 2059-2294
2059var $exports = module.exports = function (name) {
2060  return store[name] || (store[name] =
2061    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
2062};
2063
2064$exports.store = store;
2065
2066
2067/***/ }),
2068/* 5 */
2069/***/ (function(module, exports, __webpack_require__) {
2070
2071// Thank's IE8 for his funny defineProperty
2072module.exports = !__webpack_require__(19)(function () {
2073  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
2074});
2075
2076
2077/***/ }),
2078/* 6 */
2079/***/ (function(module, exports, __webpack_require__) {
2080
2081var anObject = __webpack_require__(14);
2082var IE8_DOM_DEFINE = __webpack_require__(95);
2083var toPrimitive = __webpack_require__(58);
2084var dP = Object.defineProperty;
2085
2086exports.f = __webpack_require__(5) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
2087  anObject(O);
2088  P = toPrimitive(P, true);
2089  anObject(Attributes);
2090  if (IE8_DOM_DEFINE) try {
2091    return dP(O, P, Attributes);
2092  } catch (e) { /* empty */ }
2093  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
2094  if ('value' in Attributes) O[P] = Attributes.value;
2095  return O;
2096};
2097
2098
2099/***/ }),
2100/* 7 */
2101/***/ (function(module, exports) {
2102
2103var g;
2104
2105// This works in non-strict mode
2106g = (function() {
2107	return this;
2108})();
2109
2110try {
2111	// This works if eval is allowed (see CSP)
2112	g = g || Function("return this")() || (1,eval)("this");
2113} catch(e) {
2114	// This works if the window reference is available
2115	if(typeof window === "object")
2116		g = window;
2117}
2118
2119// g can still be undefined, but nothing to do about it...
2120// We return undefined, instead of nothing here, so it's
2121// easier to handle this case. if(!global) { ...}
2122
2123module.exports = g;
2124
2125
2126/***/ }),
2127/* 8 */
2128/***/ (function(module, exports, __webpack_require__) {
2129
2130"use strict";
2131/* WEBPACK VAR INJECTION */(function(Buffer, __dirname) {
2132
2133function VirtualFileSystem() {
2134	this.fileSystem = {};
2135	this.baseSystem = {};
2136}
2137
2138VirtualFileSystem.prototype.readFileSync = function (filename) {
2139	filename = fixFilename(filename);
2140
2141	var base64content = this.baseSystem[filename];
2142	if (base64content) {
2143		return new Buffer(base64content, 'base64');
2144	}
2145
2146	var content = this.fileSystem[filename];
2147	if (content) {
2148		return content;
2149	}
2150
2151	throw 'File \'' + filename + '\' not found in virtual file system';
2152};
2153
2154VirtualFileSystem.prototype.writeFileSync = function (filename, content) {
2155	this.fileSystem[fixFilename(filename)] = content;
2156};
2157
2158VirtualFileSystem.prototype.bindFS = function (data) {
2159	this.baseSystem = data || {};
2160};
2161
2162
2163function fixFilename(filename) {
2164	if (filename.indexOf(__dirname) === 0) {
2165		filename = filename.substring(__dirname.length);
2166	}
2167
2168	if (filename.indexOf('/') === 0) {
2169		filename = filename.substring(1);
2170	}
2171
2172	return filename;
2173}
2174
2175module.exports = new VirtualFileSystem();
2176
2177/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer, "/"))
2178
2179/***/ }),
2180/* 9 */
2181/***/ (function(module, exports) {
2182
2183module.exports = function (it) {
2184  return typeof it === 'object' ? it !== null : typeof it === 'function';
2185};
2186
2187
2188/***/ }),
2189/* 10 */
2190/***/ (function(module, exports) {
2191
2192// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
2193var global = module.exports = typeof window != 'undefined' && window.Math == Math
2194  ? window : typeof self != 'undefined' && self.Math == Math ? self
2195  // eslint-disable-next-line no-new-func
2196  : Function('return this')();
2197if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
2198
2199
2200/***/ }),
2201/* 11 */
2202/***/ (function(module, exports) {
2203
2204// shim for using process in browser
2205var process = module.exports = {};
2206
2207// cached from whatever global is present so that test runners that stub it
2208// don't break things.  But we need to wrap it in a try catch in case it is
2209// wrapped in strict mode code which doesn't define any globals.  It's inside a
2210// function because try/catches deoptimize in certain engines.
2211
2212var cachedSetTimeout;
2213var cachedClearTimeout;
2214
2215function defaultSetTimout() {
2216    throw new Error('setTimeout has not been defined');
2217}
2218function defaultClearTimeout () {
2219    throw new Error('clearTimeout has not been defined');
2220}
2221(function () {
2222    try {
2223        if (typeof setTimeout === 'function') {
2224            cachedSetTimeout = setTimeout;
2225        } else {
2226            cachedSetTimeout = defaultSetTimout;
2227        }
2228    } catch (e) {
2229        cachedSetTimeout = defaultSetTimout;
2230    }
2231    try {
2232        if (typeof clearTimeout === 'function') {
2233            cachedClearTimeout = clearTimeout;
2234        } else {
2235            cachedClearTimeout = defaultClearTimeout;
2236        }
2237    } catch (e) {
2238        cachedClearTimeout = defaultClearTimeout;
2239    }
2240} ())
2241function runTimeout(fun) {
2242    if (cachedSetTimeout === setTimeout) {
2243        //normal enviroments in sane situations
2244        return setTimeout(fun, 0);
2245    }
2246    // if setTimeout wasn't available but was latter defined
2247    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
2248        cachedSetTimeout = setTimeout;
2249        return setTimeout(fun, 0);
2250    }
2251    try {
2252        // when when somebody has screwed with setTimeout but no I.E. maddness
2253        return cachedSetTimeout(fun, 0);
2254    } catch(e){
2255        try {
2256            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
2257            return cachedSetTimeout.call(null, fun, 0);
2258        } catch(e){
2259            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
2260            return cachedSetTimeout.call(this, fun, 0);
2261        }
2262    }
2263
2264
2265}
2266function runClearTimeout(marker) {
2267    if (cachedClearTimeout === clearTimeout) {
2268        //normal enviroments in sane situations
2269        return clearTimeout(marker);
2270    }
2271    // if clearTimeout wasn't available but was latter defined
2272    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
2273        cachedClearTimeout = clearTimeout;
2274        return clearTimeout(marker);
2275    }
2276    try {
2277        // when when somebody has screwed with setTimeout but no I.E. maddness
2278        return cachedClearTimeout(marker);
2279    } catch (e){
2280        try {
2281            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
2282            return cachedClearTimeout.call(null, marker);
2283        } catch (e){
2284            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
2285            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
2286            return cachedClearTimeout.call(this, marker);
2287        }
2288    }
2289
2290
2291
2292}
2293var queue = [];
2294var draining = false;
vendor: 7,555 bytes, lines 2295-2602
2295var currentQueue;
2296var queueIndex = -1;
2297
2298function cleanUpNextTick() {
2299    if (!draining || !currentQueue) {
2300        return;
2301    }
2302    draining = false;
2303    if (currentQueue.length) {
2304        queue = currentQueue.concat(queue);
2305    } else {
2306        queueIndex = -1;
2307    }
2308    if (queue.length) {
2309        drainQueue();
2310    }
2311}
2312
2313function drainQueue() {
2314    if (draining) {
2315        return;
2316    }
2317    var timeout = runTimeout(cleanUpNextTick);
2318    draining = true;
2319
2320    var len = queue.length;
2321    while(len) {
2322        currentQueue = queue;
2323        queue = [];
2324        while (++queueIndex < len) {
2325            if (currentQueue) {
2326                currentQueue[queueIndex].run();
2327            }
2328        }
2329        queueIndex = -1;
2330        len = queue.length;
2331    }
2332    currentQueue = null;
2333    draining = false;
2334    runClearTimeout(timeout);
2335}
2336
2337process.nextTick = function (fun) {
2338    var args = new Array(arguments.length - 1);
2339    if (arguments.length > 1) {
2340        for (var i = 1; i < arguments.length; i++) {
2341            args[i - 1] = arguments[i];
2342        }
2343    }
2344    queue.push(new Item(fun, args));
2345    if (queue.length === 1 && !draining) {
2346        runTimeout(drainQueue);
2347    }
2348};
2349
2350// v8 likes predictible objects
2351function Item(fun, array) {
2352    this.fun = fun;
2353    this.array = array;
2354}
2355Item.prototype.run = function () {
2356    this.fun.apply(null, this.array);
2357};
2358process.title = 'browser';
2359process.browser = true;
2360process.env = {};
2361process.argv = [];
2362process.version = ''; // empty string to avoid regexp issues
2363process.versions = {};
2364
2365function noop() {}
2366
2367process.on = noop;
2368process.addListener = noop;
2369process.once = noop;
2370process.off = noop;
2371process.removeListener = noop;
2372process.removeAllListeners = noop;
2373process.emit = noop;
2374process.prependListener = noop;
2375process.prependOnceListener = noop;
2376
2377process.listeners = function (name) { return [] }
2378
2379process.binding = function (name) {
2380    throw new Error('process.binding is not supported');
2381};
2382
2383process.cwd = function () { return '/' };
2384process.chdir = function (dir) {
2385    throw new Error('process.chdir is not supported');
2386};
2387process.umask = function() { return 0; };
2388
2389
2390/***/ }),
2391/* 12 */
2392/***/ (function(module, exports, __webpack_require__) {
2393
2394// Generated by CoffeeScript 1.7.1
2395(function() {
2396  var NumberT, PropertyDescriptor;
2397
2398  NumberT = __webpack_require__(22).Number;
2399
2400  exports.resolveLength = function(length, stream, parent) {
2401    var res;
2402    if (typeof length === 'number') {
2403      res = length;
2404    } else if (typeof length === 'function') {
2405      res = length.call(parent, parent);
2406    } else if (parent && typeof length === 'string') {
2407      res = parent[length];
2408    } else if (stream && length instanceof NumberT) {
2409      res = length.decode(stream);
2410    }
2411    if (isNaN(res)) {
2412      throw new Error('Not a fixed size');
2413    }
2414    return res;
2415  };
2416
2417  PropertyDescriptor = (function() {
2418    function PropertyDescriptor(opts) {
2419      var key, val;
2420      if (opts == null) {
2421        opts = {};
2422      }
2423      this.enumerable = true;
2424      this.configurable = true;
2425      for (key in opts) {
2426        val = opts[key];
2427        this[key] = val;
2428      }
2429    }
2430
2431    return PropertyDescriptor;
2432
2433  })();
2434
2435  exports.PropertyDescriptor = PropertyDescriptor;
2436
2437}).call(this);
2438
2439
2440/***/ }),
2441/* 13 */
2442/***/ (function(module, exports, __webpack_require__) {
2443
2444var dP = __webpack_require__(6);
2445var createDesc = __webpack_require__(27);
2446module.exports = __webpack_require__(5) ? function (object, key, value) {
2447  return dP.f(object, key, createDesc(1, value));
2448} : function (object, key, value) {
2449  object[key] = value;
2450  return object;
2451};
2452
2453
2454/***/ }),
2455/* 14 */
2456/***/ (function(module, exports, __webpack_require__) {
2457
2458var isObject = __webpack_require__(9);
2459module.exports = function (it) {
2460  if (!isObject(it)) throw TypeError(it + ' is not an object!');
2461  return it;
2462};
2463
2464
2465/***/ }),
2466/* 15 */
2467/***/ (function(module, exports, __webpack_require__) {
2468
2469// Copyright Joyent, Inc. and other Node contributors.
2470//
2471// Permission is hereby granted, free of charge, to any person obtaining a
2472// copy of this software and associated documentation files (the
2473// "Software"), to deal in the Software without restriction, including
2474// without limitation the rights to use, copy, modify, merge, publish,
2475// distribute, sublicense, and/or sell copies of the Software, and to permit
2476// persons to whom the Software is furnished to do so, subject to the
2477// following conditions:
2478//
2479// The above copyright notice and this permission notice shall be included
2480// in all copies or substantial portions of the Software.
2481//
2482// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2483// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2484// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
2485// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
2486// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2487// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2488// USE OR OTHER DEALINGS IN THE SOFTWARE.
2489
2490module.exports = Stream;
2491
2492var EE = __webpack_require__(31).EventEmitter;
2493var inherits = __webpack_require__(21);
2494
2495inherits(Stream, EE);
2496Stream.Readable = __webpack_require__(45);
2497Stream.Writable = __webpack_require__(146);
2498Stream.Duplex = __webpack_require__(147);
2499Stream.Transform = __webpack_require__(148);
2500Stream.PassThrough = __webpack_require__(149);
2501
2502// Backwards-compat with node 0.4.x
2503Stream.Stream = Stream;
2504
2505
2506
2507// old-style streams.  Note that the pipe method (the only relevant
2508// part of this class) is overridden in the Readable class.
2509
2510function Stream() {
2511  EE.call(this);
2512}
2513
2514Stream.prototype.pipe = function(dest, options) {
2515  var source = this;
2516
2517  function ondata(chunk) {
2518    if (dest.writable) {
2519      if (false === dest.write(chunk) && source.pause) {
2520        source.pause();
2521      }
2522    }
2523  }
2524
2525  source.on('data', ondata);
2526
2527  function ondrain() {
2528    if (source.readable && source.resume) {
2529      source.resume();
2530    }
2531  }
2532
2533  dest.on('drain', ondrain);
2534
2535  // If the 'end' option is not supplied, dest.end() will be called when
2536  // source gets the 'end' or 'close' events.  Only dest.end() once.
2537  if (!dest._isStdio && (!options || options.end !== false)) {
2538    source.on('end', onend);
2539    source.on('close', onclose);
2540  }
2541
2542  var didOnEnd = false;
2543  function onend() {
2544    if (didOnEnd) return;
2545    didOnEnd = true;
2546
2547    dest.end();
2548  }
2549
2550
2551  function onclose() {
2552    if (didOnEnd) return;
2553    didOnEnd = true;
2554
2555    if (typeof dest.destroy === 'function') dest.destroy();
2556  }
2557
2558  // don't leave dangling pipes when there are errors.
2559  function onerror(er) {
2560    cleanup();
2561    if (EE.listenerCount(this, 'error') === 0) {
2562      throw er; // Unhandled stream error in pipe.
2563    }
2564  }
2565
2566  source.on('error', onerror);
2567  dest.on('error', onerror);
2568
2569  // remove all the event listeners that were added.
2570  function cleanup() {
2571    source.removeListener('data', ondata);
2572    dest.removeListener('drain', ondrain);
2573
2574    source.removeListener('end', onend);
2575    source.removeListener('close', onclose);
2576
2577    source.removeListener('error', onerror);
2578    dest.removeListener('error', onerror);
2579
2580    source.removeListener('end', cleanup);
2581    source.removeListener('close', cleanup);
2582
2583    dest.removeListener('close', cleanup);
2584  }
2585
2586  source.on('end', cleanup);
2587  source.on('close', cleanup);
2588
2589  dest.on('close', cleanup);
2590
2591  dest.emit('pipe', source);
2592
2593  // Allow for unix-like usage: A.pipe(B).pipe(C)
2594  return dest;
2595};
2596
2597
2598/***/ }),
2599/* 16 */
2600/***/ (function(module, exports, __webpack_require__) {
2601
2602"use strict";
vendor: 4,219 bytes, lines 2603-2751
2603// Copyright Joyent, Inc. and other Node contributors.
2604//
2605// Permission is hereby granted, free of charge, to any person obtaining a
2606// copy of this software and associated documentation files (the
2607// "Software"), to deal in the Software without restriction, including
2608// without limitation the rights to use, copy, modify, merge, publish,
2609// distribute, sublicense, and/or sell copies of the Software, and to permit
2610// persons to whom the Software is furnished to do so, subject to the
2611// following conditions:
2612//
2613// The above copyright notice and this permission notice shall be included
2614// in all copies or substantial portions of the Software.
2615//
2616// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2617// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2618// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
2619// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
2620// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2621// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2622// USE OR OTHER DEALINGS IN THE SOFTWARE.
2623
2624// a duplex stream is just a stream that is both readable and writable.
2625// Since JS doesn't have multiple prototypal inheritance, this class
2626// prototypally inherits from Readable, and then parasitically from
2627// Writable.
2628
2629
2630
2631/*<replacement>*/
2632
2633var processNextTick = __webpack_require__(32).nextTick;
2634/*</replacement>*/
2635
2636/*<replacement>*/
2637var objectKeys = Object.keys || function (obj) {
2638  var keys = [];
2639  for (var key in obj) {
2640    keys.push(key);
2641  }return keys;
2642};
2643/*</replacement>*/
2644
2645module.exports = Duplex;
2646
2647/*<replacement>*/
2648var util = __webpack_require__(25);
2649util.inherits = __webpack_require__(21);
2650/*</replacement>*/
2651
2652var Readable = __webpack_require__(83);
2653var Writable = __webpack_require__(46);
2654
2655util.inherits(Duplex, Readable);
2656
2657var keys = objectKeys(Writable.prototype);
2658for (var v = 0; v < keys.length; v++) {
2659  var method = keys[v];
2660  if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
2661}
2662
2663function Duplex(options) {
2664  if (!(this instanceof Duplex)) return new Duplex(options);
2665
2666  Readable.call(this, options);
2667  Writable.call(this, options);
2668
2669  if (options && options.readable === false) this.readable = false;
2670
2671  if (options && options.writable === false) this.writable = false;
2672
2673  this.allowHalfOpen = true;
2674  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
2675
2676  this.once('end', onend);
2677}
2678
2679// the no-half-open enforcer
2680function onend() {
2681  // if we allow half-open state, or if the writable side ended,
2682  // then we're ok.
2683  if (this.allowHalfOpen || this._writableState.ended) return;
2684
2685  // no more data can be written.
2686  // But allow more writes to happen in this tick.
2687  processNextTick(onEndNT, this);
2688}
2689
2690function onEndNT(self) {
2691  self.end();
2692}
2693
2694Object.defineProperty(Duplex.prototype, 'destroyed', {
2695  get: function () {
2696    if (this._readableState === undefined || this._writableState === undefined) {
2697      return false;
2698    }
2699    return this._readableState.destroyed && this._writableState.destroyed;
2700  },
2701  set: function (value) {
2702    // we ignore the value if the stream
2703    // has not been initialized yet
2704    if (this._readableState === undefined || this._writableState === undefined) {
2705      return;
2706    }
2707
2708    // backward compatibility, the user is explicitly
2709    // managing destroyed
2710    this._readableState.destroyed = value;
2711    this._writableState.destroyed = value;
2712  }
2713});
2714
2715Duplex.prototype._destroy = function (err, cb) {
2716  this.push(null);
2717  this.end();
2718
2719  processNextTick(cb, err);
2720};
2721
2722function forEach(xs, f) {
2723  for (var i = 0, l = xs.length; i < l; i++) {
2724    f(xs[i], i);
2725  }
2726}
2727
2728/***/ }),
2729/* 17 */
2730/***/ (function(module, exports, __webpack_require__) {
2731
2732// to indexed object, toObject with fallback for non-array-like ES3 strings
2733var IObject = __webpack_require__(54);
2734var defined = __webpack_require__(56);
2735module.exports = function (it) {
2736  return IObject(defined(it));
2737};
2738
2739
2740/***/ }),
2741/* 18 */
2742/***/ (function(module, exports) {
2743
2744var hasOwnProperty = {}.hasOwnProperty;
2745module.exports = function (it, key) {
2746  return hasOwnProperty.call(it, key);
2747};
2748
2749
2750/***/ }),
2751/* 19 */
2752/***/ (function(module, exports) {
2753
2754module.exports = function (exec) {
2755  try {
2756    return !!exec();
2757  } catch (e) {
2758    return true;
2759  }
2760};
2761
2762
2763/***/ }),
2764/* 20 */
2765/***/ (function(module, exports, __webpack_require__) {
2766
2767// optional / simple context binding
2768var aFunction = __webpack_require__(97);
2769module.exports = function (fn, that, length) {
2770  aFunction(fn);
2771  if (that === undefined) return fn;
2772  switch (length) {
2773    case 1: return function (a) {
2774      return fn.call(that, a);
2775    };
2776    case 2: return function (a, b) {
2777      return fn.call(that, a, b);
2778    };
2779    case 3: return function (a, b, c) {
2780      return fn.call(that, a, b, c);
2781    };
2782  }
2783  return function (/* ...args */) {
2784    return fn.apply(that, arguments);
2785  };
2786};
2787
2788
2789/***/ }),
2790/* 21 */
2791/***/ (function(module, exports) {
2792
2793if (typeof Object.create === 'function') {
2794  // implementation from standard node.js 'util' module
2795  module.exports = function inherits(ctor, superCtor) {
2796    ctor.super_ = superCtor
2797    ctor.prototype = Object.create(superCtor.prototype, {
2798      constructor: {
2799        value: ctor,
2800        enumerable: false,
2801        writable: true,
2802        configurable: true
2803      }
2804    });
2805  };
2806} else {
2807  // old school shim for old browsers
2808  module.exports = function inherits(ctor, superCtor) {
2809    ctor.super_ = superCtor
2810    var TempCtor = function () {}
2811    TempCtor.prototype = superCtor.prototype
2812    ctor.prototype = new TempCtor()
2813    ctor.prototype.constructor = ctor
2814  }
2815}
2816
2817
2818/***/ }),
2819/* 22 */
2820/***/ (function(module, exports, __webpack_require__) {
2821
2822// Generated by CoffeeScript 1.7.1
2823(function() {
2824  var DecodeStream, Fixed, NumberT,
2825    __hasProp = {}.hasOwnProperty,
2826    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
2827
2828  DecodeStream = __webpack_require__(51);
2829
2830  NumberT = (function() {
2831    function NumberT(type, endian) {
2832      this.type = type;
2833      this.endian = endian != null ? endian : 'BE';
2834      this.fn = this.type;
2835      if (this.type[this.type.length - 1] !== '8') {
2836        this.fn += this.endian;
2837      }
2838    }
2839
2840    NumberT.prototype.size = function() {
2841      return DecodeStream.TYPES[this.type];
2842    };
2843
2844    NumberT.prototype.decode = function(stream) {
2845      return stream['read' + this.fn]();
2846    };
2847
2848    NumberT.prototype.encode = function(stream, val) {
2849      return stream['write' + this.fn](val);
2850    };
2851
2852    return NumberT;
2853
2854  })();
2855
2856  exports.Number = NumberT;
2857
2858  exports.uint8 = new NumberT('UInt8');
2859
2860  exports.uint16be = exports.uint16 = new NumberT('UInt16', 'BE');
2861
2862  exports.uint16le = new NumberT('UInt16', 'LE');
2863
2864  exports.uint24be = exports.uint24 = new NumberT('UInt24', 'BE');
2865
2866  exports.uint24le = new NumberT('UInt24', 'LE');
2867
2868  exports.uint32be = exports.uint32 = new NumberT('UInt32', 'BE');
2869
2870  exports.uint32le = new NumberT('UInt32', 'LE');
2871
2872  exports.int8 = new NumberT('Int8');
2873
2874  exports.int16be = exports.int16 = new NumberT('Int16', 'BE');
2875
2876  exports.int16le = new NumberT('Int16', 'LE');
2877
2878  exports.int24be = exports.int24 = new NumberT('Int24', 'BE');
2879
2880  exports.int24le = new NumberT('Int24', 'LE');
2881
2882  exports.int32be = exports.int32 = new NumberT('Int32', 'BE');
2883
2884  exports.int32le = new NumberT('Int32', 'LE');
2885
2886  exports.floatbe = exports.float = new NumberT('Float', 'BE');
2887
2888  exports.floatle = new NumberT('Float', 'LE');
2889
2890  exports.doublebe = exports.double = new NumberT('Double', 'BE');
2891
2892  exports.doublele = new NumberT('Double', 'LE');
2893
2894  Fixed = (function(_super) {
2895    __extends(Fixed, _super);
2896
2897    function Fixed(size, endian, fracBits) {
2898      if (fracBits == null) {
2899        fracBits = size >> 1;
2900      }
2901      Fixed.__super__.constructor.call(this, "Int" + size, endian);
2902      this._point = 1 << fracBits;
2903    }
2904
2905    Fixed.prototype.decode = function(stream) {
2906      return Fixed.__super__.decode.call(this, stream) / this._point;
2907    };
2908
2909    Fixed.prototype.encode = function(stream, val) {
2910      return Fixed.__super__.encode.call(this, stream, val * this._point | 0);
2911    };
2912
2913    return Fixed;
2914
2915  })(NumberT);
2916
2917  exports.Fixed = Fixed;
2918
2919  exports.fixed16be = exports.fixed16 = new Fixed(16, 'BE');
2920
2921  exports.fixed16le = new Fixed(16, 'LE');
2922
2923  exports.fixed32be = exports.fixed32 = new Fixed(32, 'BE');
2924
2925  exports.fixed32le = new Fixed(32, 'LE');
2926
2927}).call(this);
2928
2929
2930/***/ }),
2931/* 23 */
2932/***/ (function(module, exports) {
2933
2934module.exports = {};
2935
2936
2937/***/ }),
2938/* 24 */
2939/***/ (function(module, exports, __webpack_require__) {
2940
2941"use strict";
2942
2943var $at = __webpack_require__(207)(true);
2944
2945// 21.1.3.27 String.prototype[@@iterator]()
2946__webpack_require__(61)(String, 'String', function (iterated) {
2947  this._t = String(iterated); // target
2948  this._i = 0;                // next index
2949// 21.1.5.2.1 %StringIteratorPrototype%.next()
2950}, function () {
2951  var O = this._t;
2952  var index = this._i;
2953  var point;
2954  if (index >= O.length) return { value: undefined, done: true };
2955  point = $at(O, index);
2956  this._i += point.length;
2957  return { value: point, done: false };
2958});
2959
2960
2961/***/ }),
2962/* 25 */
2963/***/ (function(module, exports, __webpack_require__) {
2964
2965/* WEBPACK VAR INJECTION */(function(Buffer) {// Copyright Joyent, Inc. and other Node contributors.
2966//
2967// Permission is hereby granted, free of charge, to any person obtaining a
2968// copy of this software and associated documentation files (the
2969// "Software"), to deal in the Software without restriction, including
2970// without limitation the rights to use, copy, modify, merge, publish,
2971// distribute, sublicense, and/or sell copies of the Software, and to permit
2972// persons to whom the Software is furnished to do so, subject to the
2973// following conditions:
2974//
2975// The above copyright notice and this permission notice shall be included
2976// in all copies or substantial portions of the Software.
2977//
2978// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2979// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2980// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
2981// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
2982// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2983// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2984// USE OR OTHER DEALINGS IN THE SOFTWARE.
2985
2986// NOTE: These type checking functions intentionally don't use `instanceof`
2987// because it is fragile and can be easily faked with `Object.create()`.
2988
2989function isArray(arg) {
2990  if (Array.isArray) {
2991    return Array.isArray(arg);
2992  }
2993  return objectToString(arg) === '[object Array]';
2994}
2995exports.isArray = isArray;
2996
2997function isBoolean(arg) {
2998  return typeof arg === 'boolean';
2999}
3000exports.isBoolean = isBoolean;
3001
3002function isNull(arg) {
3003  return arg === null;
3004}
3005exports.isNull = isNull;
3006
3007function isNullOrUndefined(arg) {
3008  return arg == null;
3009}
3010exports.isNullOrUndefined = isNullOrUndefined;
3011
3012function isNumber(arg) {
3013  return typeof arg === 'number';
3014}
3015exports.isNumber = isNumber;
3016
3017function isString(arg) {
3018  return typeof arg === 'string';
3019}
3020exports.isString = isString;
3021
3022function isSymbol(arg) {
3023  return typeof arg === 'symbol';
3024}
3025exports.isSymbol = isSymbol;
3026
3027function isUndefined(arg) {
3028  return arg === void 0;
3029}
3030exports.isUndefined = isUndefined;
3031
3032function isRegExp(re) {
3033  return objectToString(re) === '[object RegExp]';
3034}
3035exports.isRegExp = isRegExp;
3036
3037function isObject(arg) {
3038  return typeof arg === 'object' && arg !== null;
3039}
3040exports.isObject = isObject;
3041
3042function isDate(d) {
3043  return objectToString(d) === '[object Date]';
3044}
3045exports.isDate = isDate;
3046
3047function isError(e) {
3048  return (objectToString(e) === '[object Error]' || e instanceof Error);
3049}
3050exports.isError = isError;
3051
3052function isFunction(arg) {
3053  return typeof arg === 'function';
3054}
3055exports.isFunction = isFunction;
3056
3057function isPrimitive(arg) {
3058  return arg === null ||
3059         typeof arg === 'boolean' ||
3060         typeof arg === 'number' ||
3061         typeof arg === 'string' ||
3062         typeof arg === 'symbol' ||  // ES6 symbol
3063         typeof arg === 'undefined';
3064}
3065exports.isPrimitive = isPrimitive;
3066
3067exports.isBuffer = Buffer.isBuffer;
3068
3069function objectToString(o) {
3070  return Object.prototype.toString.call(o);
3071}
3072
3073/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
3074
3075/***/ }),
3076/* 26 */
3077/***/ (function(module, exports, __webpack_require__) {
3078
3079/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.12.6
3080
3081/*
3082PDFObject - converts JavaScript types into their corrisponding PDF types.
3083By Devon Govett
3084 */
3085
3086(function() {
3087  var PDFObject, PDFReference;
3088
3089  PDFObject = (function() {
3090    var escapable, escapableRe, pad, swapBytes;
3091
3092    function PDFObject() {}
3093
3094    pad = function(str, length) {
3095      return (Array(length + 1).join('0') + str).slice(-length);
3096    };
3097
3098    escapableRe = /[\n\r\t\b\f\(\)\\]/g;
3099
3100    escapable = {
3101      '\n': '\\n',
3102      '\r': '\\r',
3103      '\t': '\\t',
3104      '\b': '\\b',
3105      '\f': '\\f',
3106      '\\': '\\\\',
3107      '(': '\\(',
3108      ')': '\\)'
3109    };
3110
3111    swapBytes = function(buff) {
3112      var a, i, j, l, ref;
3113      l = buff.length;
3114      if (l & 0x01) {
3115        throw new Error("Buffer length must be even");
3116      } else {
3117        for (i = j = 0, ref = l - 1; j < ref; i = j += 2) {
3118          a = buff[i];
3119          buff[i] = buff[i + 1];
3120          buff[i + 1] = a;
3121        }
3122      }
3123      return buff;
3124    };
3125
3126    PDFObject.convert = function(object) {
3127      var e, i, isUnicode, items, j, key, out, ref, string, val;
3128      if (typeof object === 'string') {
3129        return '/' + object;
3130      } else if (object instanceof String) {
3131        string = object;
3132        isUnicode = false;
3133        for (i = j = 0, ref = string.length; j < ref; i = j += 1) {
3134          if (string.charCodeAt(i) > 0x7f) {
3135            isUnicode = true;
3136            break;
3137          }
3138        }
3139        if (isUnicode) {
3140          string = swapBytes(new Buffer('\ufeff' + string, 'utf16le')).toString('binary');
3141        }
3142        string = string.replace(escapableRe, function(c) {
3143          return escapable[c];
3144        });
3145        return '(' + string + ')';
3146      } else if (Buffer.isBuffer(object)) {
3147        return '<' + object.toString('hex') + '>';
3148      } else if (object instanceof PDFReference) {
3149        return object.toString();
3150      } else if (object instanceof Date) {
3151        return '(D:' + pad(object.getUTCFullYear(), 4) + pad(object.getUTCMonth() + 1, 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z)';
3152      } else if (Array.isArray(object)) {
3153        items = ((function() {
3154          var k, len, results;
3155          results = [];
3156          for (k = 0, len = object.length; k < len; k++) {
3157            e = object[k];
3158            results.push(PDFObject.convert(e));
3159          }
3160          return results;
3161        })()).join(' ');
3162        return '[' + items + ']';
3163      } else if ({}.toString.call(object) === '[object Object]') {
3164        out = ['<<'];
3165        for (key in object) {
3166          val = object[key];
3167          out.push('/' + key + ' ' + PDFObject.convert(val));
3168        }
3169        out.push('>>');
3170        return out.join('\n');
3171      } else if (typeof object === 'number') {
3172        return PDFObject.number(object);
3173      } else {
3174        return '' + object;
3175      }
3176    };
3177
3178    PDFObject.number = function(n) {
3179      if (n > -1e21 && n < 1e21) {
3180        return Math.round(n * 1e6) / 1e6;
3181      }
3182      throw new Error("unsupported number: " + n);
3183    };
3184
3185    return PDFObject;
3186
3187  })();
3188
3189  module.exports = PDFObject;
3190
3191  PDFReference = __webpack_require__(87);
3192
3193}).call(this);
3194
3195/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
3196
3197/***/ }),
3198/* 27 */
3199/***/ (function(module, exports) {
3200
3201module.exports = function (bitmap, value) {
3202  return {
3203    enumerable: !(bitmap & 1),
3204    configurable: !(bitmap & 2),
3205    writable: !(bitmap & 4),
3206    value: value
3207  };
3208};
3209
3210
3211/***/ }),
3212/* 28 */
3213/***/ (function(module, exports, __webpack_require__) {
3214
3215__webpack_require__(201);
3216var global = __webpack_require__(10);
3217var hide = __webpack_require__(13);
3218var Iterators = __webpack_require__(23);
3219var TO_STRING_TAG = __webpack_require__(4)('toStringTag');
3220
3221var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
3222  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
3223  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
3224  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
3225  'TextTrackList,TouchList').split(',');
3226
3227for (var i = 0; i < DOMIterables.length; i++) {
3228  var NAME = DOMIterables[i];
3229  var Collection = global[NAME];
3230  var proto = Collection && Collection.prototype;
3231  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
3232  Iterators[NAME] = Iterators.Array;
3233}
3234
3235
3236/***/ }),
3237/* 29 */
3238/***/ (function(module, exports, __webpack_require__) {
3239
3240// 19.1.2.14 / 15.2.3.14 Object.keys(O)
3241var $keys = __webpack_require__(101);
3242var enumBugKeys = __webpack_require__(66);
3243
3244module.exports = Object.keys || function keys(O) {
3245  return $keys(O, enumBugKeys);
3246};
3247
3248
3249/***/ }),
3250/* 30 */
3251/***/ (function(module, exports, __webpack_require__) {
3252
3253// 7.1.13 ToObject(argument)
3254var defined = __webpack_require__(56);
3255module.exports = function (it) {
3256  return Object(defined(it));
3257};
3258
3259
3260/***/ }),
3261/* 31 */
3262/***/ (function(module, exports) {
3263
3264// Copyright Joyent, Inc. and other Node contributors.
3265//
3266// Permission is hereby granted, free of charge, to any person obtaining a
3267// copy of this software and associated documentation files (the
3268// "Software"), to deal in the Software without restriction, including
3269// without limitation the rights to use, copy, modify, merge, publish,
3270// distribute, sublicense, and/or sell copies of the Software, and to permit
3271// persons to whom the Software is furnished to do so, subject to the
3272// following conditions:
3273//
3274// The above copyright notice and this permission notice shall be included
3275// in all copies or substantial portions of the Software.
3276//
3277// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
3278// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
3279// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
3280// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
3281// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
3282// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
3283// USE OR OTHER DEALINGS IN THE SOFTWARE.
3284
3285function EventEmitter() {
3286  this._events = this._events || {};
3287  this._maxListeners = this._maxListeners || undefined;
3288}
3289module.exports = EventEmitter;
3290
3291// Backwards-compat with node 0.10.x
3292EventEmitter.EventEmitter = EventEmitter;
3293
3294EventEmitter.prototype._events = undefined;
3295EventEmitter.prototype._maxListeners = undefined;
3296
3297// By default EventEmitters will print a warning if more than 10 listeners are
3298// added to it. This is a useful default which helps finding memory leaks.
3299EventEmitter.defaultMaxListeners = 10;
3300
3301// Obviously not all Emitters should be limited to 10. This function allows
3302// that to be increased. Set to zero for unlimited.
3303EventEmitter.prototype.setMaxListeners = function(n) {
3304  if (!isNumber(n) || n < 0 || isNaN(n))
3305    throw TypeError('n must be a positive number');
3306  this._maxListeners = n;
3307  return this;
3308};
3309
3310EventEmitter.prototype.emit = function(type) {
3311  var er, handler, len, args, i, listeners;
3312
3313  if (!this._events)
3314    this._events = {};
3315
3316  // If there is no 'error' event listener then throw.
3317  if (type === 'error') {
3318    if (!this._events.error ||
3319        (isObject(this._events.error) && !this._events.error.length)) {
3320      er = arguments[1];
3321      if (er instanceof Error) {
3322        throw er; // Unhandled 'error' event
3323      } else {
3324        // At least give some kind of context to the user
3325        var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
3326        err.context = er;
3327        throw err;
3328      }
3329    }
3330  }
3331
3332  handler = this._events[type];
3333
3334  if (isUndefined(handler))
3335    return false;
vendor: 6,757 bytes, lines 3336-3611
3336
3337  if (isFunction(handler)) {
3338    switch (arguments.length) {
3339      // fast cases
3340      case 1:
3341        handler.call(this);
3342        break;
3343      case 2:
3344        handler.call(this, arguments[1]);
3345        break;
3346      case 3:
3347        handler.call(this, arguments[1], arguments[2]);
3348        break;
3349      // slower
3350      default:
3351        args = Array.prototype.slice.call(arguments, 1);
3352        handler.apply(this, args);
3353    }
3354  } else if (isObject(handler)) {
3355    args = Array.prototype.slice.call(arguments, 1);
3356    listeners = handler.slice();
3357    len = listeners.length;
3358    for (i = 0; i < len; i++)
3359      listeners[i].apply(this, args);
3360  }
3361
3362  return true;
3363};
3364
3365EventEmitter.prototype.addListener = function(type, listener) {
3366  var m;
3367
3368  if (!isFunction(listener))
3369    throw TypeError('listener must be a function');
3370
3371  if (!this._events)
3372    this._events = {};
3373
3374  // To avoid recursion in the case that type === "newListener"! Before
3375  // adding it to the listeners, first emit "newListener".
3376  if (this._events.newListener)
3377    this.emit('newListener', type,
3378              isFunction(listener.listener) ?
3379              listener.listener : listener);
3380
3381  if (!this._events[type])
3382    // Optimize the case of one listener. Don't need the extra array object.
3383    this._events[type] = listener;
3384  else if (isObject(this._events[type]))
3385    // If we've already got an array, just append.
3386    this._events[type].push(listener);
3387  else
3388    // Adding the second element, need to change to array.
3389    this._events[type] = [this._events[type], listener];
3390
3391  // Check for listener leak
3392  if (isObject(this._events[type]) && !this._events[type].warned) {
3393    if (!isUndefined(this._maxListeners)) {
3394      m = this._maxListeners;
3395    } else {
3396      m = EventEmitter.defaultMaxListeners;
3397    }
3398
3399    if (m && m > 0 && this._events[type].length > m) {
3400      this._events[type].warned = true;
3401      console.error('(node) warning: possible EventEmitter memory ' +
3402                    'leak detected. %d listeners added. ' +
3403                    'Use emitter.setMaxListeners() to increase limit.',
3404                    this._events[type].length);
3405      if (typeof console.trace === 'function') {
3406        // not supported in IE 10
3407        console.trace();
3408      }
3409    }
3410  }
3411
3412  return this;
3413};
3414
3415EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3416
3417EventEmitter.prototype.once = function(type, listener) {
3418  if (!isFunction(listener))
3419    throw TypeError('listener must be a function');
3420
3421  var fired = false;
3422
3423  function g() {
3424    this.removeListener(type, g);
3425
3426    if (!fired) {
3427      fired = true;
3428      listener.apply(this, arguments);
3429    }
3430  }
3431
3432  g.listener = listener;
3433  this.on(type, g);
3434
3435  return this;
3436};
3437
3438// emits a 'removeListener' event iff the listener was removed
3439EventEmitter.prototype.removeListener = function(type, listener) {
3440  var list, position, length, i;
3441
3442  if (!isFunction(listener))
3443    throw TypeError('listener must be a function');
3444
3445  if (!this._events || !this._events[type])
3446    return this;
3447
3448  list = this._events[type];
3449  length = list.length;
3450  position = -1;
3451
3452  if (list === listener ||
3453      (isFunction(list.listener) && list.listener === listener)) {
3454    delete this._events[type];
3455    if (this._events.removeListener)
3456      this.emit('removeListener', type, listener);
3457
3458  } else if (isObject(list)) {
3459    for (i = length; i-- > 0;) {
3460      if (list[i] === listener ||
3461          (list[i].listener && list[i].listener === listener)) {
3462        position = i;
3463        break;
3464      }
3465    }
3466
3467    if (position < 0)
3468      return this;
3469
3470    if (list.length === 1) {
3471      list.length = 0;
3472      delete this._events[type];
3473    } else {
3474      list.splice(position, 1);
3475    }
3476
3477    if (this._events.removeListener)
3478      this.emit('removeListener', type, listener);
3479  }
3480
3481  return this;
3482};
3483
3484EventEmitter.prototype.removeAllListeners = function(type) {
3485  var key, listeners;
3486
3487  if (!this._events)
3488    return this;
3489
3490  // not listening for removeListener, no need to emit
3491  if (!this._events.removeListener) {
3492    if (arguments.length === 0)
3493      this._events = {};
3494    else if (this._events[type])
3495      delete this._events[type];
3496    return this;
3497  }
3498
3499  // emit removeListener for all listeners on all events
3500  if (arguments.length === 0) {
3501    for (key in this._events) {
3502      if (key === 'removeListener') continue;
3503      this.removeAllListeners(key);
3504    }
3505    this.removeAllListeners('removeListener');
3506    this._events = {};
3507    return this;
3508  }
3509
3510  listeners = this._events[type];
3511
3512  if (isFunction(listeners)) {
3513    this.removeListener(type, listeners);
3514  } else if (listeners) {
3515    // LIFO order
3516    while (listeners.length)
3517      this.removeListener(type, listeners[listeners.length - 1]);
3518  }
3519  delete this._events[type];
3520
3521  return this;
3522};
3523
3524EventEmitter.prototype.listeners = function(type) {
3525  var ret;
3526  if (!this._events || !this._events[type])
3527    ret = [];
3528  else if (isFunction(this._events[type]))
3529    ret = [this._events[type]];
3530  else
3531    ret = this._events[type].slice();
3532  return ret;
3533};
3534
3535EventEmitter.prototype.listenerCount = function(type) {
3536  if (this._events) {
3537    var evlistener = this._events[type];
3538
3539    if (isFunction(evlistener))
3540      return 1;
3541    else if (evlistener)
3542      return evlistener.length;
3543  }
3544  return 0;
3545};
3546
3547EventEmitter.listenerCount = function(emitter, type) {
3548  return emitter.listenerCount(type);
3549};
3550
3551function isFunction(arg) {
3552  return typeof arg === 'function';
3553}
3554
3555function isNumber(arg) {
3556  return typeof arg === 'number';
3557}
3558
3559function isObject(arg) {
3560  return typeof arg === 'object' && arg !== null;
3561}
3562
3563function isUndefined(arg) {
3564  return arg === void 0;
3565}
3566
3567
3568/***/ }),
3569/* 32 */
3570/***/ (function(module, exports, __webpack_require__) {
3571
3572"use strict";
3573/* WEBPACK VAR INJECTION */(function(process) {
3574
3575if (!process.version ||
3576    process.version.indexOf('v0.') === 0 ||
3577    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
3578  module.exports = { nextTick: nextTick };
3579} else {
3580  module.exports = process
3581}
3582
3583function nextTick(fn, arg1, arg2, arg3) {
3584  if (typeof fn !== 'function') {
3585    throw new TypeError('"callback" argument must be a function');
3586  }
3587  var len = arguments.length;
3588  var args, i;
3589  switch (len) {
3590  case 0:
3591  case 1:
3592    return process.nextTick(fn);
3593  case 2:
3594    return process.nextTick(function afterTickOne() {
3595      fn.call(null, arg1);
3596    });
3597  case 3:
3598    return process.nextTick(function afterTickTwo() {
3599      fn.call(null, arg1, arg2);
3600    });
3601  case 4:
3602    return process.nextTick(function afterTickThree() {
3603      fn.call(null, arg1, arg2, arg3);
3604    });
3605  default:
3606    args = new Array(len - 1);
3607    i = 0;
3608    while (i < args.length) {
3609      args[i++] = arguments[i];
3610    }
3611    return process.nextTick(function afterTick() {
3612      fn.apply(null, args);
3613    });
3614  }
3615}
3616
3617
3618/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(11)))
3619
3620/***/ }),
3621/* 33 */
3622/***/ (function(module, exports, __webpack_require__) {
3623
3624/* eslint-disable node/no-deprecated-api */
3625var buffer = __webpack_require__(1)
3626var Buffer = buffer.Buffer
3627
3628// alternative to using Object.keys for old browsers
3629function copyProps (src, dst) {
3630  for (var key in src) {
3631    dst[key] = src[key]
3632  }
3633}
3634if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
3635  module.exports = buffer
3636} else {
3637  // Copy properties from require('buffer')
3638  copyProps(buffer, exports)
3639  exports.Buffer = SafeBuffer
3640}
3641
3642function SafeBuffer (arg, encodingOrOffset, length) {
3643  return Buffer(arg, encodingOrOffset, length)
3644}
3645
3646// Copy static methods from Buffer
3647copyProps(Buffer, SafeBuffer)
3648
3649SafeBuffer.from = function (arg, encodingOrOffset, length) {
3650  if (typeof arg === 'number') {
3651    throw new TypeError('Argument must not be a number')
3652  }
3653  return Buffer(arg, encodingOrOffset, length)
3654}
3655
3656SafeBuffer.alloc = function (size, fill, encoding) {
3657  if (typeof size !== 'number') {
3658    throw new TypeError('Argument must be a number')
3659  }
3660  var buf = Buffer(size)
3661  if (fill !== undefined) {
3662    if (typeof encoding === 'string') {
3663      buf.fill(fill, encoding)
3664    } else {
3665      buf.fill(fill)
3666    }
3667  } else {
3668    buf.fill(0)
3669  }
3670  return buf
3671}
3672
3673SafeBuffer.allocUnsafe = function (size) {
3674  if (typeof size !== 'number') {
3675    throw new TypeError('Argument must be a number')
3676  }
3677  return Buffer(size)
3678}
3679
3680SafeBuffer.allocUnsafeSlow = function (size) {
3681  if (typeof size !== 'number') {
3682    throw new TypeError('Argument must be a number')
3683  }
3684  return buffer.SlowBuffer(size)
3685}
3686
3687
3688/***/ }),
3689/* 34 */
3690/***/ (function(module, exports, __webpack_require__) {
3691
3692"use strict";
3693
3694
3695
3696var TYPED_OK =  (typeof Uint8Array !== 'undefined') &&
3697                (typeof Uint16Array !== 'undefined') &&
3698                (typeof Int32Array !== 'undefined');
3699
3700function _has(obj, key) {
3701  return Object.prototype.hasOwnProperty.call(obj, key);
3702}
3703
3704exports.assign = function (obj /*from1, from2, from3, ...*/) {
3705  var sources = Array.prototype.slice.call(arguments, 1);
3706  while (sources.length) {
3707    var source = sources.shift();
3708    if (!source) { continue; }
3709
3710    if (typeof source !== 'object') {
3711      throw new TypeError(source + 'must be non-object');
3712    }
3713
3714    for (var p in source) {
3715      if (_has(source, p)) {
3716        obj[p] = source[p];
3717      }
3718    }
3719  }
3720
3721  return obj;
3722};
3723
3724
3725// reduce buffer size, avoiding mem copy
3726exports.shrinkBuf = function (buf, size) {
3727  if (buf.length === size) { return buf; }
3728  if (buf.subarray) { return buf.subarray(0, size); }
3729  buf.length = size;
3730  return buf;
3731};
3732
3733
3734var fnTyped = {
3735  arraySet: function (dest, src, src_offs, len, dest_offs) {
3736    if (src.subarray && dest.subarray) {
3737      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
3738      return;
3739    }
3740    // Fallback to ordinary array
3741    for (var i = 0; i < len; i++) {
3742      dest[dest_offs + i] = src[src_offs + i];
3743    }
3744  },
3745  // Join array of chunks to single array.
3746  flattenChunks: function (chunks) {
3747    var i, l, len, pos, chunk, result;
3748
3749    // calculate data length
3750    len = 0;
3751    for (i = 0, l = chunks.length; i < l; i++) {
3752      len += chunks[i].length;
3753    }
3754
3755    // join chunks
3756    result = new Uint8Array(len);
3757    pos = 0;
3758    for (i = 0, l = chunks.length; i < l; i++) {
3759      chunk = chunks[i];
3760      result.set(chunk, pos);
3761      pos += chunk.length;
3762    }
3763
3764    return result;
3765  }
3766};
3767
3768var fnUntyped = {
3769  arraySet: function (dest, src, src_offs, len, dest_offs) {
3770    for (var i = 0; i < len; i++) {
3771      dest[dest_offs + i] = src[src_offs + i];
3772    }
3773  },
3774  // Join array of chunks to single array.
3775  flattenChunks: function (chunks) {
3776    return [].concat.apply([], chunks);
3777  }
3778};
3779
3780
3781// Enable/Disable typed arrays use, for testing
3782//
3783exports.setTyped = function (on) {
3784  if (on) {
3785    exports.Buf8  = Uint8Array;
3786    exports.Buf16 = Uint16Array;
3787    exports.Buf32 = Int32Array;
3788    exports.assign(exports, fnTyped);
3789  } else {
3790    exports.Buf8  = Array;
3791    exports.Buf16 = Array;
3792    exports.Buf32 = Array;
3793    exports.assign(exports, fnUntyped);
3794  }
3795};
3796
3797exports.setTyped(TYPED_OK);
3798
3799
3800/***/ }),
3801/* 35 */
vendor: 4,401 bytes, lines 3802-3956
3802/***/ (function(module, exports) {
3803
3804exports.f = {}.propertyIsEnumerable;
3805
3806
3807/***/ }),
3808/* 36 */
3809/***/ (function(module, exports, __webpack_require__) {
3810
3811// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
3812var anObject = __webpack_require__(14);
3813var dPs = __webpack_require__(100);
3814var enumBugKeys = __webpack_require__(66);
3815var IE_PROTO = __webpack_require__(64)('IE_PROTO');
3816var Empty = function () { /* empty */ };
3817var PROTOTYPE = 'prototype';
3818
3819// Create object with fake `null` prototype: use iframe Object with cleared prototype
3820var createDict = function () {
3821  // Thrash, waste and sodomy: IE GC bug
3822  var iframe = __webpack_require__(96)('iframe');
3823  var i = enumBugKeys.length;
3824  var lt = '<';
3825  var gt = '>';
3826  var iframeDocument;
3827  iframe.style.display = 'none';
3828  __webpack_require__(205).appendChild(iframe);
3829  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
3830  // createDict = iframe.contentWindow.Object;
3831  // html.removeChild(iframe);
3832  iframeDocument = iframe.contentWindow.document;
3833  iframeDocument.open();
3834  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
3835  iframeDocument.close();
3836  createDict = iframeDocument.F;
3837  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
3838  return createDict();
3839};
3840
3841module.exports = Object.create || function create(O, Properties) {
3842  var result;
3843  if (O !== null) {
3844    Empty[PROTOTYPE] = anObject(O);
3845    result = new Empty();
3846    Empty[PROTOTYPE] = null;
3847    // add "__proto__" for Object.getPrototypeOf polyfill
3848    result[IE_PROTO] = O;
3849  } else result = createDict();
3850  return Properties === undefined ? result : dPs(result, Properties);
3851};
3852
3853
3854/***/ }),
3855/* 37 */
3856/***/ (function(module, exports, __webpack_require__) {
3857
3858// 7.1.15 ToLength
3859var toInteger = __webpack_require__(63);
3860var min = Math.min;
3861module.exports = function (it) {
3862  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
3863};
3864
3865
3866/***/ }),
3867/* 38 */
3868/***/ (function(module, exports) {
3869
3870var id = 0;
3871var px = Math.random();
3872module.exports = function (key) {
3873  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
3874};
3875
3876
3877/***/ }),
3878/* 39 */
3879/***/ (function(module, exports, __webpack_require__) {
3880
3881var def = __webpack_require__(6).f;
3882var has = __webpack_require__(18);
3883var TAG = __webpack_require__(4)('toStringTag');
3884
3885module.exports = function (it, tag, stat) {
3886  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
3887};
3888
3889
3890/***/ }),
3891/* 40 */
3892/***/ (function(module, exports, __webpack_require__) {
3893
3894var META = __webpack_require__(38)('meta');
3895var isObject = __webpack_require__(9);
3896var has = __webpack_require__(18);
3897var setDesc = __webpack_require__(6).f;
3898var id = 0;
3899var isExtensible = Object.isExtensible || function () {
3900  return true;
3901};
3902var FREEZE = !__webpack_require__(19)(function () {
3903  return isExtensible(Object.preventExtensions({}));
3904});
3905var setMeta = function (it) {
3906  setDesc(it, META, { value: {
3907    i: 'O' + ++id, // object ID
3908    w: {}          // weak collections IDs
3909  } });
3910};
3911var fastKey = function (it, create) {
3912  // return primitive with prefix
3913  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
3914  if (!has(it, META)) {
3915    // can't set metadata to uncaught frozen object
3916    if (!isExtensible(it)) return 'F';
3917    // not necessary to add metadata
3918    if (!create) return 'E';
3919    // add missing metadata
3920    setMeta(it);
3921  // return object ID
3922  } return it[META].i;
3923};
3924var getWeak = function (it, create) {
3925  if (!has(it, META)) {
3926    // can't set metadata to uncaught frozen object
3927    if (!isExtensible(it)) return true;
3928    // not necessary to add metadata
3929    if (!create) return false;
3930    // add missing metadata
3931    setMeta(it);
3932  // return hash weak collections IDs
3933  } return it[META].w;
3934};
3935// add metadata on freeze-family methods calling
3936var onFreeze = function (it) {
3937  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
3938  return it;
3939};
3940var meta = module.exports = {
3941  KEY: META,
3942  NEED: false,
3943  fastKey: fastKey,
3944  getWeak: getWeak,
3945  onFreeze: onFreeze
3946};
3947
3948
3949/***/ }),
3950/* 41 */
3951/***/ (function(module, exports, __webpack_require__) {
3952
3953var ctx = __webpack_require__(20);
3954var call = __webpack_require__(111);
3955var isArrayIter = __webpack_require__(112);
3956var anObject = __webpack_require__(14);
3957var toLength = __webpack_require__(37);
3958var getIterFn = __webpack_require__(67);
3959var BREAK = {};
3960var RETURN = {};
3961var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
3962  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);
3963  var f = ctx(fn, that, entries ? 2 : 1);
3964  var index = 0;
3965  var length, step, iterator, result;
3966  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');
3967  // fast case for arrays with default iterator
3968  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
3969    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
3970    if (result === BREAK || result === RETURN) return result;
3971  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
3972    result = call(iterator, f, step.value, entries);
3973    if (result === BREAK || result === RETURN) return result;
3974  }
3975};
3976exports.BREAK = BREAK;
3977exports.RETURN = RETURN;
3978
3979
3980/***/ }),
3981/* 42 */
3982/***/ (function(module, exports, __webpack_require__) {
3983
3984"use strict";
3985
3986
3987var isString = __webpack_require__(0).isString;
3988var isNumber = __webpack_require__(0).isNumber;
3989var isObject = __webpack_require__(0).isObject;
3990var isArray = __webpack_require__(0).isArray;
3991var LineBreaker = __webpack_require__(78);
3992
3993var LEADING = /^(\s)+/g;
3994var TRAILING = /(\s)+$/g;
3995
3996/**
3997 * Creates an instance of TextTools - text measurement utility
3998 *
3999 * @constructor
4000 * @param {FontProvider} fontProvider
4001 */
4002function TextTools(fontProvider) {
4003	this.fontProvider = fontProvider;
4004}
4005
4006/**
4007 * Converts an array of strings (or inline-definition-objects) into a collection
4008 * of inlines and calculated minWidth/maxWidth.
4009 * and their min/max widths
4010 * @param  {Object} textArray - an array of inline-definition-objects (or strings)
4011 * @param  {Object} styleContextStack current style stack
4012 * @return {Object}                   collection of inlines, minWidth, maxWidth
4013 */
4014TextTools.prototype.buildInlines = function (textArray, styleContextStack) {
4015	var measured = measure(this.fontProvider, textArray, styleContextStack);
4016
4017	var minWidth = 0,
4018		maxWidth = 0,
4019		currentLineWidth;
4020
4021	measured.forEach(function (inline) {
4022		minWidth = Math.max(minWidth, inline.width - inline.leadingCut - inline.trailingCut);
4023
4024		if (!currentLineWidth) {
4025			currentLineWidth = {width: 0, leadingCut: inline.leadingCut, trailingCut: 0};
4026		}
4027
4028		currentLineWidth.width += inline.width;
4029		currentLineWidth.trailingCut = inline.trailingCut;
4030
4031		maxWidth = Math.max(maxWidth, getTrimmedWidth(currentLineWidth));
4032
4033		if (inline.lineEnd) {
4034			currentLineWidth = null;
4035		}
4036	});
4037
4038	if (getStyleProperty({}, styleContextStack, 'noWrap', false)) {
4039		minWidth = maxWidth;
4040	}
4041
4042	return {
4043		items: measured,
4044		minWidth: minWidth,
4045		maxWidth: maxWidth
4046	};
4047
4048	function getTrimmedWidth(item) {
4049		return Math.max(0, item.width - item.leadingCut - item.trailingCut);
4050	}
4051};
4052
4053/**
4054 * Returns size of the specified string (without breaking it) using the current style
4055 * @param  {String} text              text to be measured
4056 * @param  {Object} styleContextStack current style stack
4057 * @return {Object}                   size of the specified string
4058 */
4059TextTools.prototype.sizeOfString = function (text, styleContextStack) {
4060	text = text ? text.toString().replace(/\t/g, '    ') : '';
4061
4062	//TODO: refactor - extract from measure
4063	var fontName = getStyleProperty({}, styleContextStack, 'font', 'Roboto');
4064	var fontSize = getStyleProperty({}, styleContextStack, 'fontSize', 12);
4065	var fontFeatures = getStyleProperty({}, styleContextStack, 'fontFeatures', null);
4066	var bold = getStyleProperty({}, styleContextStack, 'bold', false);
4067	var italics = getStyleProperty({}, styleContextStack, 'italics', false);
4068	var lineHeight = getStyleProperty({}, styleContextStack, 'lineHeight', 1);
4069	var characterSpacing = getStyleProperty({}, styleContextStack, 'characterSpacing', 0);
4070
4071	var font = this.fontProvider.provideFont(fontName, bold, italics);
4072
4073	return {
4074		width: widthOfString(text, font, fontSize, characterSpacing, fontFeatures),
4075		height: font.lineHeight(fontSize) * lineHeight,
4076		fontSize: fontSize,
4077		lineHeight: lineHeight,
4078		ascender: font.ascender / 1000 * fontSize,
4079		descender: font.descender / 1000 * fontSize
4080	};
4081};
4082
4083TextTools.prototype.widthOfString = function (text, font, fontSize, characterSpacing, fontFeatures) {
4084	return widthOfString(text, font, fontSize, characterSpacing, fontFeatures);
4085};
4086
4087function splitWords(text, noWrap) {
4088	var results = [];
4089	text = text.replace(/\t/g, '    ');
4090
4091	if (noWrap) {
4092		results.push({text: text});
4093		return results;
4094	}
4095
4096	var breaker = new LineBreaker(text);
4097	var last = 0;
4098	var bk;
4099
4100	while (bk = breaker.nextBreak()) {
4101		var word = text.slice(last, bk.position);
4102
4103		if (bk.required || word.match(/\r?\n$|\r$/)) { // new line
4104			word = word.replace(/\r?\n$|\r$/, '');
4105			results.push({text: word, lineEnd: true});
4106		} else {
4107			results.push({text: word});
4108		}
4109
4110		last = bk.position;
4111	}
4112
4113	return results;
4114}
4115
4116function copyStyle(source, destination) {
4117	destination = destination || {};
4118	source = source || {}; //TODO: default style
4119
4120	for (var key in source) {
4121		if (key != 'text' && source.hasOwnProperty(key)) {
4122			destination[key] = source[key];
4123		}
4124	}
4125
4126	return destination;
4127}
4128
4129function normalizeTextArray(array, styleContextStack) {
4130	function flatten(array) {
4131		return array.reduce(function (prev, cur) {
4132			var current = isArray(cur.text) ? flatten(cur.text) : cur;
4133			var more = [].concat(current).some(Array.isArray);
4134			return prev.concat(more ? flatten(current) : current);
4135		}, []);
4136	}
4137
4138	var results = [];
4139
4140	if (!isArray(array)) {
4141		array = [array];
4142	}
4143
4144	array = flatten(array);
4145
4146	for (var i = 0, l = array.length; i < l; i++) {
4147		var item = array[i];
4148		var style = null;
4149		var words;
4150
4151		var noWrap = getStyleProperty(item || {}, styleContextStack, 'noWrap', false);
4152		if (isObject(item)) {
4153			words = splitWords(normalizeString(item.text), noWrap);
4154			style = copyStyle(item);
4155		} else {
4156			words = splitWords(normalizeString(item), noWrap);
4157		}
4158
4159		for (var i2 = 0, l2 = words.length; i2 < l2; i2++) {
4160			var result = {
4161				text: words[i2].text
4162			};
4163
4164			if (words[i2].lineEnd) {
4165				result.lineEnd = true;
4166			}
4167
4168			copyStyle(style, result);
4169
4170			results.push(result);
4171		}
4172	}
4173
4174	return results;
4175}
4176
4177function normalizeString(value) {
4178	if (value === undefined || value === null) {
4179		return '';
4180	} else if (isNumber(value)) {
4181		return value.toString();
4182	} else if (isString(value)) {
4183		return value;
4184	} else {
4185		return value.toString();
4186	}
4187}
4188
4189function getStyleProperty(item, styleContextStack, property, defaultValue) {
4190	var value;
4191
4192	if (item[property] !== undefined && item[property] !== null) {
4193		// item defines this property
4194		return item[property];
4195	}
4196
4197	if (!styleContextStack) {
4198		return defaultValue;
4199	}
4200
4201	styleContextStack.auto(item, function () {
4202		value = styleContextStack.getProperty(property);
4203	});
4204
4205	if (value !== null && value !== undefined) {
4206		return value;
4207	} else {
4208		return defaultValue;
4209	}
4210}
4211
4212function measure(fontProvider, textArray, styleContextStack) {
4213	var normalized = normalizeTextArray(textArray, styleContextStack);
4214
4215	if (normalized.length) {
4216		var leadingIndent = getStyleProperty(normalized[0], styleContextStack, 'leadingIndent', 0);
4217
4218		if (leadingIndent) {
4219			normalized[0].leadingCut = -leadingIndent;
4220			normalized[0].leadingIndent = leadingIndent;
4221		}
4222	}
4223
4224	normalized.forEach(function (item) {
4225		var fontName = getStyleProperty(item, styleContextStack, 'font', 'Roboto');
4226		var fontSize = getStyleProperty(item, styleContextStack, 'fontSize', 12);
4227		var fontFeatures = getStyleProperty(item, styleContextStack, 'fontFeatures', null);
4228		var bold = getStyleProperty(item, styleContextStack, 'bold', false);
4229		var italics = getStyleProperty(item, styleContextStack, 'italics', false);
4230		var color = getStyleProperty(item, styleContextStack, 'color', 'black');
4231		var decoration = getStyleProperty(item, styleContextStack, 'decoration', null);
4232		var decorationColor = getStyleProperty(item, styleContextStack, 'decorationColor', null);
4233		var decorationStyle = getStyleProperty(item, styleContextStack, 'decorationStyle', null);
4234		var background = getStyleProperty(item, styleContextStack, 'background', null);
4235		var lineHeight = getStyleProperty(item, styleContextStack, 'lineHeight', 1);
4236		var characterSpacing = getStyleProperty(item, styleContextStack, 'characterSpacing', 
42360);
4237		var link = getStyleProperty(item, styleContextStack, 'link', null);
4238		var linkToPage = getStyleProperty(item, styleContextStack, 'linkToPage', null);
4239		var noWrap = getStyleProperty(item, styleContextStack, 'noWrap', null);
4240		var preserveLeadingSpaces = getStyleProperty(item, styleContextStack, 'preserveLeadingSpaces', false);
4241
4242		var font = fontProvider.provideFont(fontName, bold, italics);
4243
4244		item.width = widthOfString(item.text, font, fontSize, characterSpacing, fontFeatures);
4245		item.height = font.lineHeight(fontSize) * lineHeight;
4246
4247		var leadingSpaces = item.text.match(LEADING);
4248
4249		if (!item.leadingCut) {
4250			item.leadingCut = 0;
4251		}
4252
4253		if (leadingSpaces && !preserveLeadingSpaces) {
4254			item.leadingCut += widthOfString(leadingSpaces[0], font, fontSize, characterSpacing, fontFeatures);
4255		}
4256
4257		var trailingSpaces = item.text.match(TRAILING);
4258		if (trailingSpaces) {
4259			item.trailingCut = widthOfString(trailingSpaces[0], font, fontSize, characterSpacing, fontFeatures);
4260		} else {
4261			item.trailingCut = 0;
4262		}
4263
4264		item.alignment = getStyleProperty(item, styleContextStack, 'alignment', 'left');
4265		item.font = font;
4266		item.fontSize = fontSize;
4267		item.fontFeatures = fontFeatures;
4268		item.characterSpacing = characterSpacing;
4269		item.color = color;
4270		item.decoration = decoration;
4271		item.decorationColor = decorationColor;
4272		item.decorationStyle = decorationStyle;
4273		item.background = background;
4274		item.link = link;
4275		item.linkToPage = linkToPage;
4276		item.noWrap = noWrap;
4277	});
4278
4279	return normalized;
4280}
4281
4282function widthOfString(text, font, fontSize, characterSpacing, fontFeatures) {
4283	return font.widthOfString(text, fontSize, fontFeatures) + ((characterSpacing || 0) * (text.length - 1));
4284}
4285
4286module.exports = TextTools;
4287
4288
4289/***/ }),
4290/* 43 */
4291/***/ (function(module, exports, __webpack_require__) {
4292
4293// Generated by CoffeeScript 1.7.1
4294var UnicodeTrie, inflate;
4295
4296inflate = __webpack_require__(79);
4297
4298UnicodeTrie = (function() {
4299  var DATA_BLOCK_LENGTH, DATA_GRANULARITY, DATA_MASK, INDEX_1_OFFSET, INDEX_2_BLOCK_LENGTH, INDEX_2_BMP_LENGTH, INDEX_2_MASK, INDEX_SHIFT, LSCP_INDEX_2_LENGTH, LSCP_INDEX_2_OFFSET, OMITTED_BMP_INDEX_1_LENGTH, SHIFT_1, SHIFT_1_2, SHIFT_2, UTF8_2B_INDEX_2_LENGTH, UTF8_2B_INDEX_2_OFFSET;
4300
4301  SHIFT_1 = 6 + 5;
4302
4303  SHIFT_2 = 5;
4304
4305  SHIFT_1_2 = SHIFT_1 - SHIFT_2;
4306
4307  OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1;
4308
4309  INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;
4310
4311  INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;
4312
4313  INDEX_SHIFT = 2;
4314
4315  DATA_BLOCK_LENGTH = 1 << SHIFT_2;
4316
4317  DATA_MASK = DATA_BLOCK_LENGTH - 1;
4318
4319  LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2;
4320
4321  LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2;
4322
4323  INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;
4324
4325  UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;
4326
4327  UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6;
4328
4329  INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;
4330
4331  DATA_GRANULARITY = 1 << INDEX_SHIFT;
4332
4333  function UnicodeTrie(data) {
4334    var isBuffer, uncompressedLength, view;
4335    isBuffer = typeof data.readUInt32BE === 'function' && typeof data.slice === 'function';
4336    if (isBuffer || data instanceof Uint8Array) {
4337      if (isBuffer) {
4338        this.highStart = data.readUInt32BE(0);
4339        this.errorValue = data.readUInt32BE(4);
4340        uncompressedLength = data.readUInt32BE(8);
4341        data = data.slice(12);
4342      } else {
4343        view = new DataView(data.buffer);
4344        this.highStart = view.getUint32(0);
4345        this.errorValue = view.getUint32(4);
4346        uncompressedLength = view.getUint32(8);
4347        data = data.subarray(12);
4348      }
4349      data = inflate(data, new Uint8Array(uncompressedLength));
4350      data = inflate(data, new Uint8Array(uncompressedLength));
4351      this.data = new Uint32Array(data.buffer);
4352    } else {
4353      this.data = data.data, this.highStart = data.highStart, this.errorValue = data.errorValue;
4354    }
4355  }
4356
4357  UnicodeTrie.prototype.get = function(codePoint) {
4358    var index;
4359    if (codePoint < 0 || codePoint > 0x10ffff) {
4360      return this.errorValue;
4361    }
4362    if (codePoint < 0xd800 || (codePoint > 0xdbff && codePoint <= 0xffff)) {
4363      index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);
4364      return this.data[index];
4365    }
4366    if (codePoint <= 0xffff) {
4367      index = (this.data[LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);
4368      return this.data[index];
4369    }
4370    if (codePoint < this.highStart) {
4371      index = this.data[(INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH) + (codePoint >>
4371 SHIFT_1)];
4372      index = this.data[index + ((codePoint >> SHIFT_2) & INDEX_2_MASK)];
4373      index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);
4374      return this.data[index];
4375    }
4376    return this.data[this.data.length - DATA_GRANULARITY];
4377  };
4378
4379  return UnicodeTrie;
4380
4381})();
4382
4383module.exports = UnicodeTrie;
4384
4385
4386/***/ }),
4387/* 44 */
4388/***/ (function(module, exports, __webpack_require__) {
4389
4390"use strict";
4391
4392
4393var isString = __webpack_require__(0).isString;
4394
4395function buildColumnWidths(columns, availableWidth) {
4396	var autoColumns = [],
4397		autoMin = 0, autoMax = 0,
4398		starColumns = [],
4399		starMaxMin = 0,
4400		starMaxMax = 0,
4401		fixedColumns = [],
4402		initial_availableWidth = availableWidth;
4403
4404	columns.forEach(function (column) {
4405		if (isAutoColumn(column)) {
4406			autoColumns.push(column);
4407			autoMin += column._minWidth;
4408			autoMax += column._maxWidth;
4409		} else if (isStarColumn(column)) {
4410			starColumns.push(column);
4411			starMaxMin = Math.max(starMaxMin, column._minWidth);
4412			starMaxMax = Math.max(starMaxMax, column._maxWidth);
4413		} else {
4414			fixedColumns.push(column);
4415		}
4416	});
4417
4418	fixedColumns.forEach(function (col) {
4419		// width specified as %
4420		if (isString(col.width) && /\d+%/.test(col.width)) {
4421			col.width = parseFloat(col.width) * initial_availableWidth / 100;
4422		}
4423		if (col.width < (col._minWidth) && col.elasticWidth) {
4424			col._calcWidth = col._minWidth;
4425		} else {
4426			col._calcWidth = col.width;
4427		}
4428
4429		availableWidth -= col._calcWidth;
4430	});
4431
4432	// http://www.freesoft.org/CIE/RFC/1942/18.htm
4433	// http://www.w3.org/TR/CSS2/tables.html#width-layout
4434	// http://dev.w3.org/csswg/css3-tables-algorithms/Overview.src.htm
4435	var minW = autoMin + starMaxMin * starColumns.length;
4436	var maxW = autoMax + starMaxMax * starColumns.length;
4437	if (minW >= availableWidth) {
4438		// case 1 - there's no way to fit all columns within available width
4439		// that's actually pretty bad situation with PDF as we have no horizontal scroll
4440		// no easy workaround (unless we decide, in the future, to split single words)
4441		// currently we simply use minWidths for all columns
4442		autoColumns.forEach(function (col) {
4443			col._calcWidth = col._minWidth;
4444		});
4445
4446		starColumns.forEach(function (col) {
4447			col._calcWidth = starMaxMin; // starMaxMin already contains padding
4448		});
4449	} else {
4450		if (maxW < availableWidth) {
4451			// case 2 - we can fit rest of the table within available space
4452			autoColumns.forEach(function (col) {
4453				col._calcWidth = col._maxWidth;
4454				availableWidth -= col._calcWidth;
4455			});
4456		} else {
4457			// maxW is too large, but minW fits within available width
4458			var W = availableWidth - minW;
4459			var D = maxW - minW;
4460
4461			autoColumns.forEach(function (col) {
4462				var d = col._maxWidth - col._minWidth;
4463				col._calcWidth = col._minWidth + d * W / D;
4464				availableWidth -= col._calcWidth;
4465			});
4466		}
4467
4468		if (starColumns.length > 0) {
4469			var starSize = availableWidth / starColumns.length;
4470
4471			starColumns.forEach(function (col) {
4472				col._calcWidth = starSize;
4473			});
4474		}
4475	}
4476}
4477
4478function isAutoColumn(column) {
4479	return column.width === 'auto';
4480}
4481
4482function isStarColumn(column) {
4483	return column.width === null || column.width === undefined || column.width === '*' || column.width === 'star';
4484}
4485
4486//TODO: refactor and reuse in measureTable
4487function measureMinMax(columns) {
4488	var result = {min: 0, max: 0};
4489
4490	var maxStar = {min: 0, max: 0};
4491	var starCount = 0;
4492
4493	for (var i = 0, l = columns.length; i < l; i++) {
4494		var c = columns[i];
4495
4496		if (isStarColumn(c)) {
4497			maxStar.min = Math.max(maxStar.min, c._minWidth);
4498			maxStar.max = Math.max(maxStar.max, c._maxWidth);
4499			starCount++;
4500		} else if (isAutoColumn(c)) {
4501			result.min += c._minWidth;
4502			result.max += c._maxWidth;
4503		} else {
4504			result.min += ((c.width !== undefined && c.width) || c._minWidth);
4505			result.max += ((c.width !== undefined && c.width) || c._maxWidth);
4506		}
4507	}
4508
4509	if (starCount) {
4510		result.min += starCount * maxStar.min;
4511		result.max += starCount * maxStar.max;
4512	}
4513
4514	return result;
4515}
4516
4517/**
4518 * Calculates column widths
4519 * @private
4520 */
4521module.exports = {
4522	buildColumnWidths: buildColumnWidths,
4523	measureMinMax: measureMinMax,
4524	isAutoColumn: isAutoColumn,
4525	isStarColumn: isStarColumn
4526};
4527
4528
4529/***/ }),
4530/* 45 */
4531/***/ (function(module, exports, __webpack_require__) {
4532
4533exports = module.exports = __webpack_require__(83);
4534exports.Stream = exports;
4535exports.Readable = exports;
4536exports.Writable = __webpack_require__(46);
4537exports.Duplex = __webpack_require__(16);
4538exports.Transform = __webpack_require__(86);
4539exports.PassThrough = __webpack_require__(145);
4540
4541
4542/***/ }),
4543/* 46 */
4544/***/ (function(module, exports, __webpack_require__) {
4545
4546"use strict";
4547/* WEBPACK VAR INJECTION */(function(process, setImmediate, global) {// Copyright Joyent, Inc. and other Node contributors.
4548//
4549// Permission is hereby granted, free of charge, to any person obtaining a
4550// copy of this software and associated documentation files (the
4551// "Software"), to deal in the Software without restriction, including
4552// without limitation the rights to use, copy, modify, merge, publish,
4553// distribute, sublicense, and/or sell copies of the Software, and to permit
4554// persons to whom the Software is furnished to do so, subject to the
4555// following conditions:
4556//
4557// The above copyright notice and this permission notice shall be included
4558// in all copies or substantial portions of the Software.
4559//
4560// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4561// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4562// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4563// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4564// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4565// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4566// USE OR OTHER DEALINGS IN THE SOFTWARE.
4567
4568// A bit simpler than readable streams.
4569// Implement an async ._write(chunk, encoding, cb), and it'll handle all
4570// the drain event emission and buffering.
4571
4572
4573
4574/*<replacement>*/
4575
4576var processNextTick = __webpack_require__(32).nextTick;
4577/*</replacement>*/
4578
4579module.exports = Writable;
4580
4581/* <replacement> */
4582function WriteReq(chunk, encoding, cb) {
4583  this.chunk = chunk;
4584  this.encoding = encoding;
4585  this.callback = cb;
4586  this.next = null;
4587}
4588
4589// It seems a linked list but it is not
4590// there will be only 2 of these for each stream
4591function CorkedRequest(state) {
4592  var _this = this;
4593
4594  this.next = null;
4595  this.entry = null;
4596  this.finish = function () {
4597    onCorkedFinish(_this, state);
4598  };
4599}
4600/* </replacement> */
4601
vendor: 8,296 bytes, lines 4602-4862
4602/*<replacement>*/
4603var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
4604/*</replacement>*/
4605
4606/*<replacement>*/
4607var Duplex;
4608/*</replacement>*/
4609
4610Writable.WritableState = WritableState;
4611
4612/*<replacement>*/
4613var util = __webpack_require__(25);
4614util.inherits = __webpack_require__(21);
4615/*</replacement>*/
4616
4617/*<replacement>*/
4618var internalUtil = {
4619  deprecate: __webpack_require__(144)
4620};
4621/*</replacement>*/
4622
4623/*<replacement>*/
4624var Stream = __webpack_require__(84);
4625/*</replacement>*/
4626
4627/*<replacement>*/
4628
4629var Buffer = __webpack_require__(33).Buffer;
4630var OurUint8Array = global.Uint8Array || function () {};
4631function _uint8ArrayToBuffer(chunk) {
4632  return Buffer.from(chunk);
4633}
4634function _isUint8Array(obj) {
4635  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
4636}
4637
4638/*</replacement>*/
4639
4640var destroyImpl = __webpack_require__(85);
4641
4642util.inherits(Writable, Stream);
4643
4644function nop() {}
4645
4646function WritableState(options, stream) {
4647  Duplex = Duplex || __webpack_require__(16);
4648
4649  options = options || {};
4650
4651  // Duplex streams are both readable and writable, but share
4652  // the same options object.
4653  // However, some cases require setting options to different
4654  // values for the readable and the writable sides of the duplex stream.
4655  // These options can be provided separately as readableXXX and writableXXX.
4656  var isDuplex = stream instanceof Duplex;
4657
4658  // object stream flag to indicate whether or not this stream
4659  // contains buffers or objects.
4660  this.objectMode = !!options.objectMode;
4661
4662  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
4663
4664  // the point at which write() starts returning false
4665  // Note: 0 is a valid value, means that we always return false if
4666  // the entire buffer is not flushed immediately on write()
4667  var hwm = options.highWaterMark;
4668  var writableHwm = options.writableHighWaterMark;
4669  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
4670
4671  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;
4672
4673  // cast to ints.
4674  this.highWaterMark = Math.floor(this.highWaterMark);
4675
4676  // if _final has been called
4677  this.finalCalled = false;
4678
4679  // drain event flag.
4680  this.needDrain = false;
4681  // at the start of calling end()
4682  this.ending = false;
4683  // when end() has been called, and returned
4684  this.ended = false;
4685  // when 'finish' is emitted
4686  this.finished = false;
4687
4688  // has it been destroyed
4689  this.destroyed = false;
4690
4691  // should we decode strings into buffers before passing to _write?
4692  // this is here so that some node-core streams can optimize string
4693  // handling at a lower level.
4694  var noDecode = options.decodeStrings === false;
4695  this.decodeStrings = !noDecode;
4696
4697  // Crypto is kind of old and crusty.  Historically, its default string
4698  // encoding is 'binary' so we have to make this configurable.
4699  // Everything else in the universe uses 'utf8', though.
4700  this.defaultEncoding = options.defaultEncoding || 'utf8';
4701
4702  // not an actual buffer we keep track of, but a measurement
4703  // of how much we're waiting to get pushed to some underlying
4704  // socket or file.
4705  this.length = 0;
4706
4707  // a flag to see when we're in the middle of a write.
4708  this.writing = false;
4709
4710  // when true all writes will be buffered until .uncork() call
4711  this.corked = 0;
4712
4713  // a flag to be able to tell if the onwrite cb is called immediately,
4714  // or on a later tick.  We set this to true at first, because any
4715  // actions that shouldn't happen until "later" should generally also
4716  // not happen before the first write call.
4717  this.sync = true;
4718
4719  // a flag to know if we're processing previously buffered items, which
4720  // may call the _write() callback in the same tick, so that we don't
4721  // end up in an overlapped onwrite situation.
4722  this.bufferProcessing = false;
4723
4724  // the callback that's passed to _write(chunk,cb)
4725  this.onwrite = function (er) {
4726    onwrite(stream, er);
4727  };
4728
4729  // the callback that the user supplies to write(chunk,encoding,cb)
4730  this.writecb = null;
4731
4732  // the amount that is being written when _write is called.
4733  this.writelen = 0;
4734
4735  this.bufferedRequest = null;
4736  this.lastBufferedRequest = null;
4737
4738  // number of pending user-supplied write callbacks
4739  // this must be 0 before 'finish' can be emitted
4740  this.pendingcb = 0;
4741
4742  // emit prefinish if the only thing we're waiting for is _write cbs
4743  // This is relevant for synchronous Transform streams
4744  this.prefinished = false;
4745
4746  // True if the error was already emitted and should not be thrown again
4747  this.errorEmitted = false;
4748
4749  // count buffered requests
4750  this.bufferedRequestCount = 0;
4751
4752  // allocate the first CorkedRequest, there is always
4753  // one allocated and free to use, and we maintain at most two
4754  this.corkedRequestsFree = new CorkedRequest(this);
4755}
4756
4757WritableState.prototype.getBuffer = function getBuffer() {
4758  var current = this.bufferedRequest;
4759  var out = [];
4760  while (current) {
4761    out.push(current);
4762    current = current.next;
4763  }
4764  return out;
4765};
4766
4767(function () {
4768  try {
4769    Object.defineProperty(WritableState.prototype, 'buffer', {
4770      get: internalUtil.deprecate(function () {
4771        return this.getBuffer();
4772      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
4773    });
4774  } catch (_) {}
4775})();
4776
4777// Test _writableState for inheritance to account for Duplex streams,
4778// whose prototype chain only points to Readable.
4779var realHasInstance;
4780if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
4781  realHasInstance = Function.prototype[Symbol.hasInstance];
4782  Object.defineProperty(Writable, Symbol.hasInstance, {
4783    value: function (object) {
4784      if (realHasInstance.call(this, object)) return true;
4785      if (this !== Writable) return false;
4786
4787      return object && object._writableState instanceof WritableState;
4788    }
4789  });
4790} else {
4791  realHasInstance = function (object) {
4792    return object instanceof this;
4793  };
4794}
4795
4796function Writable(options) {
4797  Duplex = Duplex || __webpack_require__(16);
4798
4799  // Writable ctor is applied to Duplexes, too.
4800  // `realHasInstance` is necessary because using plain `instanceof`
4801  // would return false, as no `_writableState` property is attached.
4802
4803  // Trying to use the custom `instanceof` for Writable here will also break the
4804  // Node.js LazyTransform implementation, which has a non-trivial getter for
4805  // `_writableState` that would lead to infinite recursion.
4806  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
4807    return new Writable(options);
4808  }
4809
4810  this._writableState = new WritableState(options, this);
4811
4812  // legacy.
4813  this.writable = true;
4814
4815  if (options) {
4816    if (typeof options.write === 'function') this._write = options.write;
4817
4818    if (typeof options.writev === 'function') this._writev = options.writev;
4819
4820    if (typeof options.destroy === 'function') this._destroy = options.destroy;
4821
4822    if (typeof options.final === 'function') this._final = options.final;
4823  }
4824
4825  Stream.call(this);
4826}
4827
4828// Otherwise people can pipe Writable streams, which is just wrong.
4829Writable.prototype.pipe = function () {
4830  this.emit('error', new Error('Cannot pipe, not readable'));
4831};
4832
4833function writeAfterEnd(stream, cb) {
4834  var er = new Error('write after end');
4835  // TODO: defer error events consistently everywhere, not just the cb
4836  stream.emit('error', er);
4837  processNextTick(cb, er);
4838}
4839
4840// Checks that a user-supplied chunk is valid, especially for the particular
4841// mode the stream is in. Currently this means that `null` is never accepted
4842// and undefined/non-string values are only allowed in object mode.
4843function validChunk(stream, state, chunk, cb) {
4844  var valid = true;
4845  var er = false;
4846
4847  if (chunk === null) {
4848    er = new TypeError('May not write null values to stream');
4849  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
4850    er = new TypeError('Invalid non-string/buffer chunk');
4851  }
4852  if (er) {
4853    stream.emit('error', er);
4854    processNextTick(cb, er);
4855    valid = false;
4856  }
4857  return valid;
4858}
4859
4860Writable.prototype.write = function (chunk, encoding, cb) {
4861  var state = this._writableState;
4862  var ret = false;
vendor: 8,830 bytes, lines 4863-5179
4863  var isBuf = !state.objectMode && _isUint8Array(chunk);
4864
4865  if (isBuf && !Buffer.isBuffer(chunk)) {
4866    chunk = _uint8ArrayToBuffer(chunk);
4867  }
4868
4869  if (typeof encoding === 'function') {
4870    cb = encoding;
4871    encoding = null;
4872  }
4873
4874  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
4875
4876  if (typeof cb !== 'function') cb = nop;
4877
4878  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
4879    state.pendingcb++;
4880    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
4881  }
4882
4883  return ret;
4884};
4885
4886Writable.prototype.cork = function () {
4887  var state = this._writableState;
4888
4889  state.corked++;
4890};
4891
4892Writable.prototype.uncork = function () {
4893  var state = this._writableState;
4894
4895  if (state.corked) {
4896    state.corked--;
4897
4898    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
4899  }
4900};
4901
4902Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
4903  // node::ParseEncoding() requires lower case.
4904  if (typeof encoding === 'string') encoding = encoding.toLowerCase();
4905  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
4906  this._writableState.defaultEncoding = encoding;
4907  return this;
4908};
4909
4910function decodeChunk(state, chunk, encoding) {
4911  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
4912    chunk = Buffer.from(chunk, encoding);
4913  }
4914  return chunk;
4915}
4916
4917// if we're already writing something, then just put this
4918// in the queue, and wait our turn.  Otherwise, call _write
4919// If we return false, then we need a drain event, so set that flag.
4920function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
4921  if (!isBuf) {
4922    var newChunk = decodeChunk(state, chunk, encoding);
4923    if (chunk !== newChunk) {
4924      isBuf = true;
4925      encoding = 'buffer';
4926      chunk = newChunk;
4927    }
4928  }
4929  var len = state.objectMode ? 1 : chunk.length;
4930
4931  state.length += len;
4932
4933  var ret = state.length < state.highWaterMark;
4934  // we must ensure that previous needDrain will not be reset to false.
4935  if (!ret) state.needDrain = true;
4936
4937  if (state.writing || state.corked) {
4938    var last = state.lastBufferedRequest;
4939    state.lastBufferedRequest = {
4940      chunk: chunk,
4941      encoding: encoding,
4942      isBuf: isBuf,
4943      callback: cb,
4944      next: null
4945    };
4946    if (last) {
4947      last.next = state.lastBufferedRequest;
4948    } else {
4949      state.bufferedRequest = state.lastBufferedRequest;
4950    }
4951    state.bufferedRequestCount += 1;
4952  } else {
4953    doWrite(stream, state, false, len, chunk, encoding, cb);
4954  }
4955
4956  return ret;
4957}
4958
4959function doWrite(stream, state, writev, len, chunk, encoding, cb) {
4960  state.writelen = len;
4961  state.writecb = cb;
4962  state.writing = true;
4963  state.sync = true;
4964  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
4965  state.sync = false;
4966}
4967
4968function onwriteError(stream, state, sync, er, cb) {
4969  --state.pendingcb;
4970
4971  if (sync) {
4972    // defer the callback if we are being called synchronously
4973    // to avoid piling up things on the stack
4974    processNextTick(cb, er);
4975    // this can emit finish, and it will always happen
4976    // after error
4977    processNextTick(finishMaybe, stream, state);
4978    stream._writableState.errorEmitted = true;
4979    stream.emit('error', er);
4980  } else {
4981    // the caller expect this to happen before if
4982    // it is async
4983    cb(er);
4984    stream._writableState.errorEmitted = true;
4985    stream.emit('error', er);
4986    // this can emit finish, but finish must
4987    // always follow error
4988    finishMaybe(stream, state);
4989  }
4990}
4991
4992function onwriteStateUpdate(state) {
4993  state.writing = false;
4994  state.writecb = null;
4995  state.length -= state.writelen;
4996  state.writelen = 0;
4997}
4998
4999function onwrite(stream, er) {
5000  var state = stream._writableState;
5001  var sync = state.sync;
5002  var cb = state.writecb;
5003
5004  onwriteStateUpdate(state);
5005
5006  if (er) onwriteError(stream, state, sync, er, cb);else {
5007    // Check if we're actually ready to finish, but don't emit yet
5008    var finished = needFinish(state);
5009
5010    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
5011      clearBuffer(stream, state);
5012    }
5013
5014    if (sync) {
5015      /*<replacement>*/
5016      asyncWrite(afterWrite, stream, state, finished, cb);
5017      /*</replacement>*/
5018    } else {
5019      afterWrite(stream, state, finished, cb);
5020    }
5021  }
5022}
5023
5024function afterWrite(stream, state, finished, cb) {
5025  if (!finished) onwriteDrain(stream, state);
5026  state.pendingcb--;
5027  cb();
5028  finishMaybe(stream, state);
5029}
5030
5031// Must force callback to be called on nextTick, so that we don't
5032// emit 'drain' before the write() consumer gets the 'false' return
5033// value, and has a chance to attach a 'drain' listener.
5034function onwriteDrain(stream, state) {
5035  if (state.length === 0 && state.needDrain) {
5036    state.needDrain = false;
5037    stream.emit('drain');
5038  }
5039}
5040
5041// if there's something in the buffer waiting, then process it
5042function clearBuffer(stream, state) {
5043  state.bufferProcessing = true;
5044  var entry = state.bufferedRequest;
5045
5046  if (stream._writev && entry && entry.next) {
5047    // Fast case, write everything using _writev()
5048    var l = state.bufferedRequestCount;
5049    var buffer = new Array(l);
5050    var holder = state.corkedRequestsFree;
5051    holder.entry = entry;
5052
5053    var count = 0;
5054    var allBuffers = true;
5055    while (entry) {
5056      buffer[count] = entry;
5057      if (!entry.isBuf) allBuffers = false;
5058      entry = entry.next;
5059      count += 1;
5060    }
5061    buffer.allBuffers = allBuffers;
5062
5063    doWrite(stream, state, true, state.length, buffer, '', holder.finish);
5064
5065    // doWrite is almost always async, defer these to save a bit of time
5066    // as the hot path ends with doWrite
5067    state.pendingcb++;
5068    state.lastBufferedRequest = null;
5069    if (holder.next) {
5070      state.corkedRequestsFree = holder.next;
5071      holder.next = null;
5072    } else {
5073      state.corkedRequestsFree = new CorkedRequest(state);
5074    }
5075    state.bufferedRequestCount = 0;
5076  } else {
5077    // Slow case, write chunks one-by-one
5078    while (entry) {
5079      var chunk = entry.chunk;
5080      var encoding = entry.encoding;
5081      var cb = entry.callback;
5082      var len = state.objectMode ? 1 : chunk.length;
5083
5084      doWrite(stream, state, false, len, chunk, encoding, cb);
5085      entry = entry.next;
5086      state.bufferedRequestCount--;
5087      // if we didn't call the onwrite immediately, then
5088      // it means that we need to wait until it does.
5089      // also, that means that the chunk and cb are currently
5090      // being processed, so move the buffer counter past them.
5091      if (state.writing) {
5092        break;
5093      }
5094    }
5095
5096    if (entry === null) state.lastBufferedRequest = null;
5097  }
5098
5099  state.bufferedRequest = entry;
5100  state.bufferProcessing = false;
5101}
5102
5103Writable.prototype._write = function (chunk, encoding, cb) {
5104  cb(new Error('_write() is not implemented'));
5105};
5106
5107Writable.prototype._writev = null;
5108
5109Writable.prototype.end = function (chunk, encoding, cb) {
5110  var state = this._writableState;
5111
5112  if (typeof chunk === 'function') {
5113    cb = chunk;
5114    chunk = null;
5115    encoding = null;
5116  } else if (typeof encoding === 'function') {
5117    cb = encoding;
5118    encoding = null;
5119  }
5120
5121  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
5122
5123  // .end() fully uncorks
5124  if (state.corked) {
5125    state.corked = 1;
5126    this.uncork();
5127  }
5128
5129  // ignore unnecessary end() calls.
5130  if (!state.ending && !state.finished) endWritable(this, state, cb);
5131};
5132
5133function needFinish(state) {
5134  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
5135}
5136function callFinal(stream, state) {
5137  stream._final(function (err) {
5138    state.pendingcb--;
5139    if (err) {
5140      stream.emit('error', err);
5141    }
5142    state.prefinished = true;
5143    stream.emit('prefinish');
5144    finishMaybe(stream, state);
5145  });
5146}
5147function prefinish(stream, state) {
5148  if (!state.prefinished && !state.finalCalled) {
5149    if (typeof stream._final === 'function') {
5150      state.pendingcb++;
5151      state.finalCalled = true;
5152      processNextTick(callFinal, stream, state);
5153    } else {
5154      state.prefinished = true;
5155      stream.emit('prefinish');
5156    }
5157  }
5158}
5159
5160function finishMaybe(stream, state) {
5161  var need = needFinish(state);
5162  if (need) {
5163    prefinish(stream, state);
5164    if (state.pendingcb === 0) {
5165      state.finished = true;
5166      stream.emit('finish');
5167    }
5168  }
5169  return need;
5170}
5171
5172function endWritable(stream, state, cb) {
5173  state.ending = true;
5174  finishMaybe(stream, state);
5175  if (cb) {
5176    if (state.finished) processNextTick(cb);else stream.once('finish', cb);
5177  }
5178  state.ended = true;
5179  stream.writable = false;
vendor: 1,279 bytes, lines 5180-5233
5180}
5181
5182function onCorkedFinish(corkReq, state, err) {
5183  var entry = corkReq.entry;
5184  corkReq.entry = null;
5185  while (entry) {
5186    var cb = entry.callback;
5187    state.pendingcb--;
5188    cb(err);
5189    entry = entry.next;
5190  }
5191  if (state.corkedRequestsFree) {
5192    state.corkedRequestsFree.next = corkReq;
5193  } else {
5194    state.corkedRequestsFree = corkReq;
5195  }
5196}
5197
5198Object.defineProperty(Writable.prototype, 'destroyed', {
5199  get: function () {
5200    if (this._writableState === undefined) {
5201      return false;
5202    }
5203    return this._writableState.destroyed;
5204  },
5205  set: function (value) {
5206    // we ignore the value if the stream
5207    // has not been initialized yet
5208    if (!this._writableState) {
5209      return;
5210    }
5211
5212    // backward compatibility, the user is explicitly
5213    // managing destroyed
5214    this._writableState.destroyed = value;
5215  }
5216});
5217
5218Writable.prototype.destroy = destroyImpl.destroy;
5219Writable.prototype._undestroy = destroyImpl.undestroy;
5220Writable.prototype._destroy = function (err, cb) {
5221  this.end();
5222  cb(err);
5223};
5224/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(11), __webpack_require__(142).setImmediate, __webpack_require__(7)))
5225
5226/***/ }),
5227/* 47 */
5228/***/ (function(module, exports, __webpack_require__) {
5229
5230"use strict";
5231
5232
5233var Buffer = __webpack_require__(33
vendor: 8,264 bytes, lines 5233-5505
5233).Buffer;
5234
5235var isEncoding = Buffer.isEncoding || function (encoding) {
5236  encoding = '' + encoding;
5237  switch (encoding && encoding.toLowerCase()) {
5238    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
5239      return true;
5240    default:
5241      return false;
5242  }
5243};
5244
5245function _normalizeEncoding(enc) {
5246  if (!enc) return 'utf8';
5247  var retried;
5248  while (true) {
5249    switch (enc) {
5250      case 'utf8':
5251      case 'utf-8':
5252        return 'utf8';
5253      case 'ucs2':
5254      case 'ucs-2':
5255      case 'utf16le':
5256      case 'utf-16le':
5257        return 'utf16le';
5258      case 'latin1':
5259      case 'binary':
5260        return 'latin1';
5261      case 'base64':
5262      case 'ascii':
5263      case 'hex':
5264        return enc;
5265      default:
5266        if (retried) return; // undefined
5267        enc = ('' + enc).toLowerCase();
5268        retried = true;
5269    }
5270  }
5271};
5272
5273// Do not cache `Buffer.isEncoding` when checking encoding names as some
5274// modules monkey-patch it to support additional encodings
5275function normalizeEncoding(enc) {
5276  var nenc = _normalizeEncoding(enc);
5277  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
5278  return nenc || enc;
5279}
5280
5281// StringDecoder provides an interface for efficiently splitting a series of
5282// buffers into a series of JS strings without breaking apart multi-byte
5283// characters.
5284exports.StringDecoder = StringDecoder;
5285function StringDecoder(encoding) {
5286  this.encoding = normalizeEncoding(encoding);
5287  var nb;
5288  switch (this.encoding) {
5289    case 'utf16le':
5290      this.text = utf16Text;
5291      this.end = utf16End;
5292      nb = 4;
5293      break;
5294    case 'utf8':
5295      this.fillLast = utf8FillLast;
5296      nb = 4;
5297      break;
5298    case 'base64':
5299      this.text = base64Text;
5300      this.end = base64End;
5301      nb = 3;
5302      break;
5303    default:
5304      this.write = simpleWrite;
5305      this.end = simpleEnd;
5306      return;
5307  }
5308  this.lastNeed = 0;
5309  this.lastTotal = 0;
5310  this.lastChar = Buffer.allocUnsafe(nb);
5311}
5312
5313StringDecoder.prototype.write = function (buf) {
5314  if (buf.length === 0) return '';
5315  var r;
5316  var i;
5317  if (this.lastNeed) {
5318    r = this.fillLast(buf);
5319    if (r === undefined) return '';
5320    i = this.lastNeed;
5321    this.lastNeed = 0;
5322  } else {
5323    i = 0;
5324  }
5325  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
5326  return r || '';
5327};
5328
5329StringDecoder.prototype.end = utf8End;
5330
5331// Returns only complete characters in a Buffer
5332StringDecoder.prototype.text = utf8Text;
5333
5334// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
5335StringDecoder.prototype.fillLast = function (buf) {
5336  if (this.lastNeed <= buf.length) {
5337    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
5338    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
5339  }
5340  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
5341  this.lastNeed -= buf.length;
5342};
5343
5344// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
5345// continuation byte.
5346function utf8CheckByte(byte) {
5347  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
5348  return -1;
5349}
5350
5351// Checks at most 3 bytes at the end of a Buffer in order to detect an
5352// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
5353// needed to complete the UTF-8 character (if applicable) are returned.
5354function utf8CheckIncomplete(self, buf, i) {
5355  var j = buf.length - 1;
5356  if (j < i) return 0;
5357  var nb = utf8CheckByte(buf[j]);
5358  if (nb >= 0) {
5359    if (nb > 0) self.lastNeed = nb - 1;
5360    return nb;
5361  }
5362  if (--j < i) return 0;
5363  nb = utf8CheckByte(buf[j]);
5364  if (nb >= 0) {
5365    if (nb > 0) self.lastNeed = nb - 2;
5366    return nb;
5367  }
5368  if (--j < i) return 0;
5369  nb = utf8CheckByte(buf[j]);
5370  if (nb >= 0) {
5371    if (nb > 0) {
5372      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
5373    }
5374    return nb;
5375  }
5376  return 0;
5377}
5378
5379// Validates as many continuation bytes for a multi-byte UTF-8 character as
5380// needed or are available. If we see a non-continuation byte where we expect
5381// one, we "replace" the validated continuation bytes we've seen so far with
5382// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
5383// behavior. The continuation byte check is included three times in the case
5384// where all of the continuation bytes for a character exist in the same buffer.
5385// It is also done this way as a slight performance increase instead of using a
5386// loop.
5387function utf8CheckExtraBytes(self, buf, p) {
5388  if ((buf[0] & 0xC0) !== 0x80) {
5389    self.lastNeed = 0;
5390    return '\ufffd'.repeat(p);
5391  }
5392  if (self.lastNeed > 1 && buf.length > 1) {
5393    if ((buf[1] & 0xC0) !== 0x80) {
5394      self.lastNeed = 1;
5395      return '\ufffd'.repeat(p + 1);
5396    }
5397    if (self.lastNeed > 2 && buf.length > 2) {
5398      if ((buf[2] & 0xC0) !== 0x80) {
5399        self.lastNeed = 2;
5400        return '\ufffd'.repeat(p + 2);
5401      }
5402    }
5403  }
5404}
5405
5406// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
5407function utf8FillLast(buf) {
5408  var p = this.lastTotal - this.lastNeed;
5409  var r = utf8CheckExtraBytes(this, buf, p);
5410  if (r !== undefined) return r;
5411  if (this.lastNeed <= buf.length) {
5412    buf.copy(this.lastChar, p, 0, this.lastNeed);
5413    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
5414  }
5415  buf.copy(this.lastChar, p, 0, buf.length);
5416  this.lastNeed -= buf.length;
5417}
5418
5419// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
5420// partial character, the character's bytes are buffered until the required
5421// number of bytes are available.
5422function utf8Text(buf, i) {
5423  var total = utf8CheckIncomplete(this, buf, i);
5424  if (!this.lastNeed) return buf.toString('utf8', i);
5425  this.lastTotal = total;
5426  var end = buf.length - (total - this.lastNeed);
5427  buf.copy(this.lastChar, 0, end);
5428  return buf.toString('utf8', i, end);
5429}
5430
5431// For UTF-8, a replacement character for each buffered byte of a (partial)
5432// character needs to be added to the output.
5433function utf8End(buf) {
5434  var r = buf && buf.length ? this.write(buf) : '';
5435  if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
5436  return r;
5437}
5438
5439// UTF-16LE typically needs two bytes per character, but even if we have an even
5440// number of bytes available, we need to check if we end on a leading/high
5441// surrogate. In that case, we need to wait for the next two bytes in order to
5442// decode the last character properly.
5443function utf16Text(buf, i) {
5444  if ((buf.length - i) % 2 === 0) {
5445    var r = buf.toString('utf16le', i);
5446    if (r) {
5447      var c = r.charCodeAt(r.length - 1);
5448      if (c >= 0xD800 && c <= 0xDBFF) {
5449        this.lastNeed = 2;
5450        this.lastTotal = 4;
5451        this.lastChar[0] = buf[buf.length - 2];
5452        this.lastChar[1] = buf[buf.length - 1];
5453        return r.slice(0, -1);
5454      }
5455    }
5456    return r;
5457  }
5458  this.lastNeed = 1;
5459  this.lastTotal = 2;
5460  this.lastChar[0] = buf[buf.length - 1];
5461  return buf.toString('utf16le', i, buf.length - 1);
5462}
5463
5464// For UTF-16LE we do not explicitly append special replacement characters if we
5465// end on a partial character, we simply let v8 handle that.
5466function utf16End(buf) {
5467  var r = buf && buf.length ? this.write(buf) : '';
5468  if (this.lastNeed) {
5469    var end = this.lastTotal - this.lastNeed;
5470    return r + this.lastChar.toString('utf16le', 0, end);
5471  }
5472  return r;
5473}
5474
5475function base64Text(buf, i) {
5476  var n = (buf.length - i) % 3;
5477  if (n === 0) return buf.toString('base64', i);
5478  this.lastNeed = 3 - n;
5479  this.lastTotal = 3;
5480  if (n === 1) {
5481    this.lastChar[0] = buf[buf.length - 1];
5482  } else {
5483    this.lastChar[0] = buf[buf.length - 2];
5484    this.lastChar[1] = buf[buf.length - 1];
5485  }
5486  return buf.toString('base64', i, buf.length - n);
5487}
5488
5489function base64End(buf) {
5490  var r = buf && buf.length ? this.write(buf) : '';
5491  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
5492  return r;
5493}
5494
5495// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
5496function simpleWrite(buf) {
5497  return buf.toString(this.encoding);
5498}
5499
5500function simpleEnd(buf) {
5501  return buf && buf.length ? this.write(buf) : '';
5502}
5503
5504/***/ }),
5505/* 
vendor: 1,743 bytes, lines 5505-5559
550548 */
5506/***/ (function(module, exports, __webpack_require__) {
5507
5508"use strict";
5509/* WEBPACK VAR INJECTION */(function(process) {
5510
5511var Buffer = __webpack_require__(1).Buffer;
5512var Transform = __webpack_require__(15).Transform;
5513var binding = __webpack_require__(150);
5514var util = __webpack_require__(49);
5515var assert = __webpack_require__(88).ok;
5516var kMaxLength = __webpack_require__(1).kMaxLength;
5517var kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes';
5518
5519// zlib doesn't provide these, so kludge them in following the same
5520// const naming scheme zlib uses.
5521binding.Z_MIN_WINDOWBITS = 8;
5522binding.Z_MAX_WINDOWBITS = 15;
5523binding.Z_DEFAULT_WINDOWBITS = 15;
5524
5525// fewer than 64 bytes per chunk is stupid.
5526// technically it could work with as few as 8, but even 64 bytes
5527// is absurdly low.  Usually a MB or more is best.
5528binding.Z_MIN_CHUNK = 64;
5529binding.Z_MAX_CHUNK = Infinity;
5530binding.Z_DEFAULT_CHUNK = 16 * 1024;
5531
5532binding.Z_MIN_MEMLEVEL = 1;
5533binding.Z_MAX_MEMLEVEL = 9;
5534binding.Z_DEFAULT_MEMLEVEL = 8;
5535
5536binding.Z_MIN_LEVEL = -1;
5537binding.Z_MAX_LEVEL = 9;
5538binding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;
5539
5540// expose all the zlib constants
5541var bkeys = Object.keys(binding);
5542for (var bk = 0; bk < bkeys.length; bk++) {
5543  var bkey = bkeys[bk];
5544  if (bkey.match(/^Z/)) {
5545    Object.defineProperty(exports, bkey, {
5546      enumerable: true, value: binding[bkey], writable: false
5547    });
5548  }
5549}
5550
5551// translation table for return codes.
5552var codes = {
5553  Z_OK: binding.Z_OK,
5554  Z_STREAM_END: binding.Z_STREAM_END,
5555  Z_NEED_DICT: binding.Z_NEED_DICT,
5556  Z_ERRNO: binding.Z_ERRNO,
5557  Z_STREAM_ERROR: binding.Z_STREAM_ERROR,
5558  Z_DATA_ERROR: binding.Z_DATA_ERROR,
5559  Z_MEM_ERROR: binding.Z_MEM_ERROR,
5560  Z_BUF_ERROR: binding.Z_BUF_ERROR,
5561  Z_VERSION_ERROR: binding.Z_VERSION_ERROR
5562};
5563
5564var ckeys = Object.keys(codes);
5565for (var ck = 0; ck < ckeys.length; ck++) {
5566  var ckey = ckeys[ck];
5567  codes[codes[ckey]] = ckey;
5568}
5569
5570Object.defineProperty(exports, 'codes', {
5571  enumerable: true, value: Object.freeze(codes), writable: false
5572}
vendor: 14,778 bytes, lines 5572-6117
5572);
5573
5574exports.Deflate = Deflate;
5575exports.Inflate = Inflate;
5576exports.Gzip = Gzip;
5577exports.Gunzip = Gunzip;
5578exports.DeflateRaw = DeflateRaw;
5579exports.InflateRaw = InflateRaw;
5580exports.Unzip = Unzip;
5581
5582exports.createDeflate = function (o) {
5583  return new Deflate(o);
5584};
5585
5586exports.createInflate = function (o) {
5587  return new Inflate(o);
5588};
5589
5590exports.createDeflateRaw = function (o) {
5591  return new DeflateRaw(o);
5592};
5593
5594exports.createInflateRaw = function (o) {
5595  return new InflateRaw(o);
5596};
5597
5598exports.createGzip = function (o) {
5599  return new Gzip(o);
5600};
5601
5602exports.createGunzip = function (o) {
5603  return new Gunzip(o);
5604};
5605
5606exports.createUnzip = function (o) {
5607  return new Unzip(o);
5608};
5609
5610// Convenience methods.
5611// compress/decompress a string or buffer in one step.
5612exports.deflate = function (buffer, opts, callback) {
5613  if (typeof opts === 'function') {
5614    callback = opts;
5615    opts = {};
5616  }
5617  return zlibBuffer(new Deflate(opts), buffer, callback);
5618};
5619
5620exports.deflateSync = function (buffer, opts) {
5621  return zlibBufferSync(new Deflate(opts), buffer);
5622};
5623
5624exports.gzip = function (buffer, opts, callback) {
5625  if (typeof opts === 'function') {
5626    callback = opts;
5627    opts = {};
5628  }
5629  return zlibBuffer(new Gzip(opts), buffer, callback);
5630};
5631
5632exports.gzipSync = function (buffer, opts) {
5633  return zlibBufferSync(new Gzip(opts), buffer);
5634};
5635
5636exports.deflateRaw = function (buffer, opts, callback) {
5637  if (typeof opts === 'function') {
5638    callback = opts;
5639    opts = {};
5640  }
5641  return zlibBuffer(new DeflateRaw(opts), buffer, callback);
5642};
5643
5644exports.deflateRawSync = function (buffer, opts) {
5645  return zlibBufferSync(new DeflateRaw(opts), buffer);
5646};
5647
5648exports.unzip = function (buffer, opts, callback) {
5649  if (typeof opts === 'function') {
5650    callback = opts;
5651    opts = {};
5652  }
5653  return zlibBuffer(new Unzip(opts), buffer, callback);
5654};
5655
5656exports.unzipSync = function (buffer, opts) {
5657  return zlibBufferSync(new Unzip(opts), buffer);
5658};
5659
5660exports.inflate = function (buffer, opts, callback) {
5661  if (typeof opts === 'function') {
5662    callback = opts;
5663    opts = {};
5664  }
5665  return zlibBuffer(new Inflate(opts), buffer, callback);
5666};
5667
5668exports.inflateSync = function (buffer, opts) {
5669  return zlibBufferSync(new Inflate(opts), buffer);
5670};
5671
5672exports.gunzip = function (buffer, opts, callback) {
5673  if (typeof opts === 'function') {
5674    callback = opts;
5675    opts = {};
5676  }
5677  return zlibBuffer(new Gunzip(opts), buffer, callback);
5678};
5679
5680exports.gunzipSync = function (buffer, opts) {
5681  return zlibBufferSync(new Gunzip(opts), buffer);
5682};
5683
5684exports.inflateRaw = function (buffer, opts, callback) {
5685  if (typeof opts === 'function') {
5686    callback = opts;
5687    opts = {};
5688  }
5689  return zlibBuffer(new InflateRaw(opts), buffer, callback);
5690};
5691
5692exports.inflateRawSync = function (buffer, opts) {
5693  return zlibBufferSync(new InflateRaw(opts), buffer);
5694};
5695
5696function zlibBuffer(engine, buffer, callback) {
5697  var buffers = [];
5698  var nread = 0;
5699
5700  engine.on('error', onError);
5701  engine.on('end', onEnd);
5702
5703  engine.end(buffer);
5704  flow();
5705
5706  function flow() {
5707    var chunk;
5708    while (null !== (chunk = engine.read())) {
5709      buffers.push(chunk);
5710      nread += chunk.length;
5711    }
5712    engine.once('readable', flow);
5713  }
5714
5715  function onError(err) {
5716    engine.removeListener('end', onEnd);
5717    engine.removeListener('readable', flow);
5718    callback(err);
5719  }
5720
5721  function onEnd() {
5722    var buf;
5723    var err = null;
5724
5725    if (nread >= kMaxLength) {
5726      err = new RangeError(kRangeErrorMessage);
5727    } else {
5728      buf = Buffer.concat(buffers, nread);
5729    }
5730
5731    buffers = [];
5732    engine.close();
5733    callback(err, buf);
5734  }
5735}
5736
5737function zlibBufferSync(engine, buffer) {
5738  if (typeof buffer === 'string') buffer = Buffer.from(buffer);
5739
5740  if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer');
5741
5742  var flushFlag = engine._finishFlushFlag;
5743
5744  return engine._processChunk(buffer, flushFlag);
5745}
5746
5747// generic zlib
5748// minimal 2-byte header
5749function Deflate(opts) {
5750  if (!(this instanceof Deflate)) return new Deflate(opts);
5751  Zlib.call(this, opts, binding.DEFLATE);
5752}
5753
5754function Inflate(opts) {
5755  if (!(this instanceof Inflate)) return new Inflate(opts);
5756  Zlib.call(this, opts, binding.INFLATE);
5757}
5758
5759// gzip - bigger header, same deflate compression
5760function Gzip(opts) {
5761  if (!(this instanceof Gzip)) return new Gzip(opts);
5762  Zlib.call(this, opts, binding.GZIP);
5763}
5764
5765function Gunzip(opts) {
5766  if (!(this instanceof Gunzip)) return new Gunzip(opts);
5767  Zlib.call(this, opts, binding.GUNZIP);
5768}
5769
5770// raw - no header
5771function DeflateRaw(opts) {
5772  if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);
5773  Zlib.call(this, opts, binding.DEFLATERAW);
5774}
5775
5776function InflateRaw(opts) {
5777  if (!(this instanceof InflateRaw)) return new InflateRaw(opts);
5778  Zlib.call(this, opts, binding.INFLATERAW);
5779}
5780
5781// auto-detect header.
5782function Unzip(opts) {
5783  if (!(this instanceof Unzip)) return new Unzip(opts);
5784  Zlib.call(this, opts, binding.UNZIP);
5785}
5786
5787function isValidFlushFlag(flag) {
5788  return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK;
5789}
5790
5791// the Zlib class they all inherit from
5792// This thing manages the queue of requests, and returns
5793// true or false if there is anything in the queue when
5794// you call the .write() method.
5795
5796function Zlib(opts, mode) {
5797  var _this = this;
5798
5799  this._opts = opts = opts || {};
5800  this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;
5801
5802  Transform.call(this, opts);
5803
5804  if (opts.flush && !isValidFlushFlag(opts.flush)) {
5805    throw new Error('Invalid flush flag: ' + opts.flush);
5806  }
5807  if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {
5808    throw new Error('Invalid flush flag: ' + opts.finishFlush);
5809  }
5810
5811  this._flushFlag = opts.flush || binding.Z_NO_FLUSH;
5812  this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH;
5813
5814  if (opts.chunkSize) {
5815    if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) {
5816      throw new Error('Invalid chunk size: ' + opts.chunkSize);
5817    }
5818  }
5819
5820  if (opts.windowBits) {
5821    if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) {
5822      throw new Error('Invalid windowBits: ' + opts.windowBits);
5823    }
5824  }
5825
5826  if (opts.level) {
5827    if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) {
5828      throw new Error('Invalid compression level: ' + opts.level);
5829    }
5830  }
5831
5832  if (opts.memLevel) {
5833    if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) {
5834      throw new Error('Invalid memLevel: ' + opts.memLevel);
5835    }
5836  }
5837
5838  if (opts.strategy) {
5839    if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) {
5840      throw new Error('Invalid strategy: ' + opts.strategy);
5841    }
5842  }
5843
5844  if (opts.dictionary) {
5845    if (!Buffer.isBuffer(opts.dictionary)) {
5846      throw new Error('Invalid dictionary: it should be a Buffer instance');
5847    }
5848  }
5849
5850  this._handle = new binding.Zlib(mode);
5851
5852  var self = this;
5853  this._hadError = false;
5854  this._handle.onerror = function (message, errno) {
5855    // there is no way to cleanly recover.
5856    // continuing only obscures problems.
5857    _close(self);
5858    self._hadError = true;
5859
5860    var error = new Error(message);
5861    error.errno = errno;
5862    error.code = exports.codes[errno];
5863    self.emit('error', error);
5864  };
5865
5866  var level = exports.Z_DEFAULT_COMPRESSION;
5867  if (typeof opts.level === 'number') level = opts.level;
5868
5869  var strategy = exports.Z_DEFAULT_STRATEGY;
5870  if (typeof opts.strategy === 'number') strategy = opts.strategy;
5871
5872  this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary);
5873
5874  this._buffer = Buffer.allocUnsafe(this._chunkSize);
5875  this._offset = 0;
5876  this._level = level;
5877  this._strategy = strategy;
5878
5879  this.once('end', this.close);
5880
5881  Object.defineProperty(this, '_closed', {
5882    get: function () {
5883      return !_this._handle;
5884    },
5885    configurable: true,
5886    enumerable: true
5887  });
5888}
5889
5890util.inherits(Zlib, Transform);
5891
5892Zlib.prototype.params = function (level, strategy, callback) {
5893  if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) {
5894    throw new RangeError('Invalid compression level: ' + level);
5895  }
5896  if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) {
5897    throw new TypeError('Invalid strategy: ' + strategy);
5898  }
5899
5900  if (this._level !== level || this._strategy !== strategy) {
5901    var self = this;
5902    this.flush(binding.Z_SYNC_FLUSH, function () {
5903      assert(self._handle, 'zlib binding closed');
5904      self._handle.params(level, strategy);
5905      if (!self._hadError) {
5906        self._level = level;
5907        self._strategy = strategy;
5908        if (callback) callback();
5909      }
5910    });
5911  } else {
5912    process.nextTick(callback);
5913  }
5914};
5915
5916Zlib.prototype.reset = function () {
5917  assert(this._handle, 'zlib binding closed');
5918  return this._handle.reset();
5919};
5920
5921// This is the _flush function called by the transform class,
5922// internally, when the last chunk has been written.
5923Zlib.prototype._flush = function (callback) {
5924  this._transform(Buffer.alloc(0), '', callback);
5925};
5926
5927Zlib.prototype.flush = function (kind, callback) {
5928  var _this2 = this;
5929
5930  var ws = this._writableState;
5931
5932  if (typeof kind === 'function' || kind === undefined && !callback) {
5933    callback = kind;
5934    kind = binding.Z_FULL_FLUSH;
5935  }
5936
5937  if (ws.ended) {
5938    if (callback) process.nextTick(callback);
5939  } else if (ws.ending) {
5940    if (callback) this.once('end', callback);
5941  } else if (ws.needDrain) {
5942    if (callback) {
5943      this.once('drain', function () {
5944        return _this2.flush(kind, callback);
5945      });
5946    }
5947  } else {
5948    this._flushFlag = kind;
5949    this.write(Buffer.alloc(0), '', callback);
5950  }
5951};
5952
5953Zlib.prototype.close = function (callback) {
5954  _close(this, callback);
5955  process.nextTick(emitCloseNT, this);
5956};
5957
5958function _close(engine, callback) {
5959  if (callback) process.nextTick(callback);
5960
5961  // Caller may invoke .close after a zlib error (which will null _handle).
5962  if (!engine._handle) return;
5963
5964  engine._handle.close();
5965  engine._handle = null;
5966}
5967
5968function emitCloseNT(self) {
5969  self.emit('close');
5970}
5971
5972Zlib.prototype._transform = function (chunk, encoding, cb) {
5973  var flushFlag;
5974  var ws = this._writableState;
5975  var ending = ws.ending || ws.ended;
5976  var last = ending && (!chunk || ws.length === chunk.length);
5977
5978  if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input'));
5979
5980  if (!this._handle) return cb(new Error('zlib binding closed'));
5981
5982  // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag
5983  // (or whatever flag was provided using opts.finishFlush).
5984  // If it's explicitly flushing at some other time, then we use
5985  // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression
5986  // goodness.
5987  if (last) flushFlag = this._finishFlushFlag;else {
5988    flushFlag = this._flushFlag;
5989    // once we've flushed the last of the queue, stop flushing and
5990    // go back to the normal behavior.
5991    if (chunk.length >= ws.length) {
5992      this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;
5993    }
5994  }
5995
5996  this._processChunk(chunk, flushFlag, cb);
5997};
5998
5999Zlib.prototype._processChunk = function (chunk, flushFlag, cb) {
6000  var availInBefore = chunk && chunk.length;
6001  var availOutBefore = this._chunkSize - this._offset;
6002  var inOff = 0;
6003
6004  var self = this;
6005
6006  var async = typeof cb === 'function';
6007
6008  if (!async) {
6009    var buffers = [];
6010    var nread = 0;
6011
6012    var error;
6013    this.on('error', function (er) {
6014      error = er;
6015    });
6016
6017    assert(this._handle, 'zlib binding closed');
6018    do {
6019      var res = this._handle.writeSync(flushFlag, chunk, // in
6020      inOff, // in_off
6021      availInBefore, // in_len
6022      this._buffer, // out
6023      this._offset, //out_off
6024      availOutBefore); // out_len
6025    } while (!this._hadError && callback(res[0], res[1]));
6026
6027    if (this._hadError) {
6028      throw error;
6029    }
6030
6031    if (nread >= kMaxLength) {
6032      _close(this);
6033      throw new RangeError(kRangeErrorMessage);
6034    }
6035
6036    var buf = Buffer.concat(buffers, nread);
6037    _close(this);
6038
6039    return buf;
6040  }
6041
6042  assert(this._handle, 'zlib binding closed');
6043  var req = this._handle.write(flushFlag, chunk, // in
6044  inOff, // in_off
6045  availInBefore, // in_len
6046  this._buffer, // out
6047  this._offset, //out_off
6048  availOutBefore); // out_len
6049
6050  req.buffer = chunk;
6051  req.callback = callback;
6052
6053  function callback(availInAfter, availOutAfter) {
6054    // When the callback is used in an async write, the callback's
6055    // context is the `req` object that was created. The req object
6056    // is === this._handle, and that's why it's important to null
6057    // out the values after they are done being used. `this._handle`
6058    // can stay in memory longer than the callback and buffer are needed.
6059    if (this) {
6060      this.buffer = null;
6061      this.callback = null;
6062    }
6063
6064    if (self._hadError) return;
6065
6066    var have = availOutBefore - availOutAfter;
6067    assert(have >= 0, 'have should not go down');
6068
6069    if (have > 0) {
6070      var out = self._buffer.slice(self._offset, self._offset + have);
6071      self._offset += have;
6072      // serve some output to the consumer.
6073      if (async) {
6074        self.push(out);
6075      } else {
6076        buffers.push(out);
6077        nread += out.length;
6078      }
6079    }
6080
6081    // exhausted the output buffer, or used all the input create a new one.
6082    if (availOutAfter === 0 || self._offset >= self._chunkSize) {
6083      availOutBefore = self._chunkSize;
6084      self._offset = 0;
6085      self._buffer = Buffer.allocUnsafe(self._chunkSize);
6086    }
6087
6088    if (availOutAfter === 0) {
6089      // Not actually done.  Need to reprocess.
6090      // Also, update the availInBefore to the availInAfter value,
6091      // so that if we have to hit it a third (fourth, etc.) time,
6092      // it'll have the correct byte counts.
6093      inOff += availInBefore - availInAfter;
6094      availInBefore = availInAfter;
6095
6096      if (!async) return true;
6097
6098      var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize);
6099      newReq.callback = callback; // this same function
6100      newReq.buffer = chunk;
6101      return;
6102    }
6103
6104    if (!async) return false;
6105
6106    // finished with the chunk.
6107    cb();
6108  }
6109};
6110
6111util.inherits(Deflate, Zlib);
6112util.inherits(Inflate, Zlib);
6113util.inherits(Gzip, Zlib);
6114util.inherits(Gunzip, Zlib);
6115util.inherits(DeflateRaw, Zlib);
6116util.inherits(InflateRaw, Zlib);
6117util.inherits(Unzip, Zlib);
vendor: 15,606 bytes, lines 6118-6701
6118/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(11)))
6119
6120/***/ }),
6121/* 49 */
6122/***/ (function(module, exports, __webpack_require__) {
6123
6124/* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors.
6125//
6126// Permission is hereby granted, free of charge, to any person obtaining a
6127// copy of this software and associated documentation files (the
6128// "Software"), to deal in the Software without restriction, including
6129// without limitation the rights to use, copy, modify, merge, publish,
6130// distribute, sublicense, and/or sell copies of the Software, and to permit
6131// persons to whom the Software is furnished to do so, subject to the
6132// following conditions:
6133//
6134// The above copyright notice and this permission notice shall be included
6135// in all copies or substantial portions of the Software.
6136//
6137// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6138// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6139// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6140// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6141// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6142// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6143// USE OR OTHER DEALINGS IN THE SOFTWARE.
6144
6145var formatRegExp = /%[sdj%]/g;
6146exports.format = function(f) {
6147  if (!isString(f)) {
6148    var objects = [];
6149    for (var i = 0; i < arguments.length; i++) {
6150      objects.push(inspect(arguments[i]));
6151    }
6152    return objects.join(' ');
6153  }
6154
6155  var i = 1;
6156  var args = arguments;
6157  var len = args.length;
6158  var str = String(f).replace(formatRegExp, function(x) {
6159    if (x === '%%') return '%';
6160    if (i >= len) return x;
6161    switch (x) {
6162      case '%s': return String(args[i++]);
6163      case '%d': return Number(args[i++]);
6164      case '%j':
6165        try {
6166          return JSON.stringify(args[i++]);
6167        } catch (_) {
6168          return '[Circular]';
6169        }
6170      default:
6171        return x;
6172    }
6173  });
6174  for (var x = args[i]; i < len; x = args[++i]) {
6175    if (isNull(x) || !isObject(x)) {
6176      str += ' ' + x;
6177    } else {
6178      str += ' ' + inspect(x);
6179    }
6180  }
6181  return str;
6182};
6183
6184
6185// Mark that a method should not be used.
6186// Returns a modified function which warns once by default.
6187// If --no-deprecation is set, then it is a no-op.
6188exports.deprecate = function(fn, msg) {
6189  // Allow for deprecating things in the process of starting up.
6190  if (isUndefined(global.process)) {
6191    return function() {
6192      return exports.deprecate(fn, msg).apply(this, arguments);
6193    };
6194  }
6195
6196  if (process.noDeprecation === true) {
6197    return fn;
6198  }
6199
6200  var warned = false;
6201  function deprecated() {
6202    if (!warned) {
6203      if (process.throwDeprecation) {
6204        throw new Error(msg);
6205      } else if (process.traceDeprecation) {
6206        console.trace(msg);
6207      } else {
6208        console.error(msg);
6209      }
6210      warned = true;
6211    }
6212    return fn.apply(this, arguments);
6213  }
6214
6215  return deprecated;
6216};
6217
6218
6219var debugs = {};
6220var debugEnviron;
6221exports.debuglog = function(set) {
6222  if (isUndefined(debugEnviron))
6223    debugEnviron = process.env.NODE_DEBUG || '';
6224  set = set.toUpperCase();
6225  if (!debugs[set]) {
6226    if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
6227      var pid = process.pid;
6228      debugs[set] = function() {
6229        var msg = exports.format.apply(exports, arguments);
6230        console.error('%s %d: %s', set, pid, msg);
6231      };
6232    } else {
6233      debugs[set] = function() {};
6234    }
6235  }
6236  return debugs[set];
6237};
6238
6239
6240/**
6241 * Echos the value of a value. Trys to print the value out
6242 * in the best way possible given the different types.
6243 *
6244 * @param {Object} obj The object to print out.
6245 * @param {Object} opts Optional options object that alters the output.
6246 */
6247/* legacy: obj, showHidden, depth, colors*/
6248function inspect(obj, opts) {
6249  // default options
6250  var ctx = {
6251    seen: [],
6252    stylize: stylizeNoColor
6253  };
6254  // legacy...
6255  if (arguments.length >= 3) ctx.depth = arguments[2];
6256  if (arguments.length >= 4) ctx.colors = arguments[3];
6257  if (isBoolean(opts)) {
6258    // legacy...
6259    ctx.showHidden = opts;
6260  } else if (opts) {
6261    // got an "options" object
6262    exports._extend(ctx, opts);
6263  }
6264  // set default options
6265  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
6266  if (isUndefined(ctx.depth)) ctx.depth = 2;
6267  if (isUndefined(ctx.colors)) ctx.colors = false;
6268  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
6269  if (ctx.colors) ctx.stylize = stylizeWithColor;
6270  return formatValue(ctx, obj, ctx.depth);
6271}
6272exports.inspect = inspect;
6273
6274
6275// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
6276inspect.colors = {
6277  'bold' : [1, 22],
6278  'italic' : [3, 23],
6279  'underline' : [4, 24],
6280  'inverse' : [7, 27],
6281  'white' : [37, 39],
6282  'grey' : [90, 39],
6283  'black' : [30, 39],
6284  'blue' : [34, 39],
6285  'cyan' : [36, 39],
6286  'green' : [32, 39],
6287  'magenta' : [35, 39],
6288  'red' : [31, 39],
6289  'yellow' : [33, 39]
6290};
6291
6292// Don't use 'blue' not visible on cmd.exe
6293inspect.styles = {
6294  'special': 'cyan',
6295  'number': 'yellow',
6296  'boolean': 'yellow',
6297  'undefined': 'grey',
6298  'null': 'bold',
6299  'string': 'green',
6300  'date': 'magenta',
6301  // "name": intentionally not styling
6302  'regexp': 'red'
6303};
6304
6305
6306function stylizeWithColor(str, styleType) {
6307  var style = inspect.styles[styleType];
6308
6309  if (style) {
6310    return '\u001b[' + inspect.colors[style][0] + 'm' + str +
6311           '\u001b[' + inspect.colors[style][1] + 'm';
6312  } else {
6313    return str;
6314  }
6315}
6316
6317
6318function stylizeNoColor(str, styleType) {
6319  return str;
6320}
6321
6322
6323function arrayToHash(array) {
6324  var hash = {};
6325
6326  array.forEach(function(val, idx) {
6327    hash[val] = true;
6328  });
6329
6330  return hash;
6331}
6332
6333
6334function formatValue(ctx, value, recurseTimes) {
6335  // Provide a hook for user-specified inspect functions.
6336  // Check that value is an object with an inspect function on it
6337  if (ctx.customInspect &&
6338      value &&
6339      isFunction(value.inspect) &&
6340      // Filter out the util module, it's inspect function is special
6341      value.inspect !== exports.inspect &&
6342      // Also filter out any prototype objects using the circular check.
6343      !(value.constructor && value.constructor.prototype === value)) {
6344    var ret = value.inspect(recurseTimes, ctx);
6345    if (!isString(ret)) {
6346      ret = formatValue(ctx, ret, recurseTimes);
6347    }
6348    return ret;
6349  }
6350
6351  // Primitive types cannot have properties
6352  var primitive = formatPrimitive(ctx, value);
6353  if (primitive) {
6354    return primitive;
6355  }
6356
6357  // Look up the keys of the object.
6358  var keys = Object.keys(value);
6359  var visibleKeys = arrayToHash(keys);
6360
6361  if (ctx.showHidden) {
6362    keys = Object.getOwnPropertyNames(value);
6363  }
6364
6365  // IE doesn't make error fields non-enumerable
6366  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
6367  if (isError(value)
6368      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
6369    return formatError(value);
6370  }
6371
6372  // Some type of object without properties can be shortcutted.
6373  if (keys.length === 0) {
6374    if (isFunction(value)) {
6375      var name = value.name ? ': ' + value.name : '';
6376      return ctx.stylize('[Function' + name + ']', 'special');
6377    }
6378    if (isRegExp(value)) {
6379      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
6380    }
6381    if (isDate(value)) {
6382      return ctx.stylize(Date.prototype.toString.call(value), 'date');
6383    }
6384    if (isError(value)) {
6385      return formatError(value);
6386    }
6387  }
6388
6389  var base = '', array = false, braces = ['{', '}'];
6390
6391  // Make Array say that they are Array
6392  if (isArray(value)) {
6393    array = true;
6394    braces = ['[', ']'];
6395  }
6396
6397  // Make functions say that they are functions
6398  if (isFunction(value)) {
6399    var n = value.name ? ': ' + value.name : '';
6400    base = ' [Function' + n + ']';
6401  }
6402
6403  // Make RegExps say that they are RegExps
6404  if (isRegExp(value)) {
6405    base = ' ' + RegExp.prototype.toString.call(value);
6406  }
6407
6408  // Make dates with properties first say the date
6409  if (isDate(value)) {
6410    base = ' ' + Date.prototype.toUTCString.call(value);
6411  }
6412
6413  // Make error with message first say the error
6414  if (isError(value)) {
6415    base = ' ' + formatError(value);
6416  }
6417
6418  if (keys.length === 0 && (!array || value.length == 0)) {
6419    return braces[0] + base + braces[1];
6420  }
6421
6422  if (recurseTimes < 0) {
6423    if (isRegExp(value)) {
6424      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
6425    } else {
6426      return ctx.stylize('[Object]', 'special');
6427    }
6428  }
6429
6430  ctx.seen.push(value);
6431
6432  var output;
6433  if (array) {
6434    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
6435  } else {
6436    output = keys.map(function(key) {
6437      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
6438    });
6439  }
6440
6441  ctx.seen.pop();
6442
6443  return reduceToSingleString(output, base, braces);
6444}
6445
6446
6447function formatPrimitive(ctx, value) {
6448  if (isUndefined(value))
6449    return ctx.stylize('undefined', 'undefined');
6450  if (isString(value)) {
6451    var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
6452                                             .replace(/'/g, "\\'")
6453                                             .replace(/\\"/g, '"') + '\'';
6454    return ctx.stylize(simple, 'string');
6455  }
6456  if (isNumber(value))
6457    return ctx.stylize('' + value, 'number');
6458  if (isBoolean(value))
6459    return ctx.stylize('' + value, 'boolean');
6460  // For some reason typeof null is "object", so special case here.
6461  if (isNull(value))
6462    return ctx.stylize('null', 'null');
6463}
6464
6465
6466function formatError(value) {
6467  return '[' + Error.prototype.toString.call(value) + ']';
6468}
6469
6470
6471function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
6472  var output = [];
6473  for (var i = 0, l = value.length; i < l; ++i) {
6474    if (hasOwnProperty(value, String(i))) {
6475      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
6476          String(i), true));
6477    } else {
6478      output.push('');
6479    }
6480  }
6481  keys.forEach(function(key) {
6482    if (!key.match(/^\d+$/)) {
6483      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
6484          key, true));
6485    }
6486  });
6487  return output;
6488}
6489
6490
6491function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
6492  var name, str, desc;
6493  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
6494  if (desc.get) {
6495    if (desc.set) {
6496      str = ctx.stylize('[Getter/Setter]', 'special');
6497    } else {
6498      str = ctx.stylize('[Getter]', 'special');
6499    }
6500  } else {
6501    if (desc.set) {
6502      str = ctx.stylize('[Setter]', 'special');
6503    }
6504  }
6505  if (!hasOwnProperty(visibleKeys, key)) {
6506    name = '[' + key + ']';
6507  }
6508  if (!str) {
6509    if (ctx.seen.indexOf(desc.value) < 0) {
6510      if (isNull(recurseTimes)) {
6511        str = formatValue(ctx, desc.value, null);
6512      } else {
6513        str = formatValue(ctx, desc.value, recurseTimes - 1);
6514      }
6515      if (str.indexOf('\n') > -1) {
6516        if (array) {
6517          str = str.split('\n').map(function(line) {
6518            return '  ' + line;
6519          }).join('\n').substr(2);
6520        } else {
6521          str = '\n' + str.split('\n').map(function(line) {
6522            return '   ' + line;
6523          }).join('\n');
6524        }
6525      }
6526    } else {
6527      str = ctx.stylize('[Circular]', 'special');
6528    }
6529  }
6530  if (isUndefined(name)) {
6531    if (array && key.match(/^\d+$/)) {
6532      return str;
6533    }
6534    name = JSON.stringify('' + key);
6535    if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
6536      name = name.substr(1, name.length - 2);
6537      name = ctx.stylize(name, 'name');
6538    } else {
6539      name = name.replace(/'/g, "\\'")
6540                 .replace(/\\"/g, '"')
6541                 .replace(/(^"|"$)/g, "'");
6542      name = ctx.stylize(name, 'string');
6543    }
6544  }
6545
6546  return name + ': ' + str;
6547}
6548
6549
6550function reduceToSingleString(output, base, braces) {
6551  var numLinesEst = 0;
6552  var length = output.reduce(function(prev, cur) {
6553    numLinesEst++;
6554    if (cur.indexOf('\n') >= 0) numLinesEst++;
6555    return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
6556  }, 0);
6557
6558  if (length > 60) {
6559    return braces[0] +
6560           (base === '' ? '' : base + '\n ') +
6561           ' ' +
6562           output.join(',\n  ') +
6563           ' ' +
6564           braces[1];
6565  }
6566
6567  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
6568}
6569
6570
6571// NOTE: These type checking functions intentionally don't use `instanceof`
6572// because it is fragile and can be easily faked with `Object.create()`.
6573function isArray(ar) {
6574  return Array.isArray(ar);
6575}
6576exports.isArray = isArray;
6577
6578function isBoolean(arg) {
6579  return typeof arg === 'boolean';
6580}
6581exports.isBoolean = isBoolean;
6582
6583function isNull(arg) {
6584  return arg === null;
6585}
6586exports.isNull = isNull;
6587
6588function isNullOrUndefined(arg) {
6589  return arg == null;
6590}
6591exports.isNullOrUndefined = isNullOrUndefined;
6592
6593function isNumber(arg) {
6594  return typeof arg === 'number';
6595}
6596exports.isNumber = isNumber;
6597
6598function isString(arg) {
6599  return typeof arg === 'string';
6600}
6601exports.isString = isString;
6602
6603function isSymbol(arg) {
6604  return typeof arg === 'symbol';
6605}
6606exports.isSymbol = isSymbol;
6607
6608function isUndefined(arg) {
6609  return arg === void 0;
6610}
6611exports.isUndefined = isUndefined;
6612
6613function isRegExp(re) {
6614  return isObject(re) && objectToString(re) === '[object RegExp]';
6615}
6616exports.isRegExp = isRegExp;
6617
6618function isObject(arg) {
6619  return typeof arg === 'object' && arg !== null;
6620}
6621exports.isObject = isObject;
6622
6623function isDate(d) {
6624  return isObject(d) && objectToString(d) === '[object Date]';
6625}
6626exports.isDate = isDate;
6627
6628function isError(e) {
6629  return isObject(e) &&
6630      (objectToString(e) === '[object Error]' || e instanceof Error);
6631}
6632exports.isError = isError;
6633
6634function isFunction(arg) {
6635  return typeof arg === 'function';
6636}
6637exports.isFunction = isFunction;
6638
6639function isPrimitive(arg) {
6640  return arg === null ||
6641         typeof arg === 'boolean' ||
6642         typeof arg === 'number' ||
6643         typeof arg === 'string' ||
6644         typeof arg === 'symbol' ||  // ES6 symbol
6645         typeof arg === 'undefined';
6646}
6647exports.isPrimitive = isPrimitive;
6648
6649exports.isBuffer = __webpack_require__(151);
6650
6651function objectToString(o) {
6652  return Object.prototype.toString.call(o);
6653}
6654
6655
6656function pad(n) {
6657  return n < 10 ? '0' + n.toString(10) : n.toString(10);
6658}
6659
6660
6661var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
6662              'Oct', 'Nov', 'Dec'];
6663
6664// 26 Feb 16:19:34
6665function timestamp() {
6666  var d = new Date();
6667  var time = [pad(d.getHours()),
6668              pad(d.getMinutes()),
6669              pad(d.getSeconds())].join(':');
6670  return [d.getDate(), months[d.getMonth()], time].join(' ');
6671}
6672
6673
6674// log is just a thin wrapper to console.log that prepends a timestamp
6675exports.log = function() {
6676  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
6677};
6678
6679
6680/**
6681 * Inherit the prototype methods from one constructor into another.
6682 *
6683 * The Function.prototype.inherits from lang.js rewritten as a standalone
6684 * function (not on Function.prototype). NOTE: If this file is to be loaded
6685 * during bootstrapping this function needs to be rewritten using some native
6686 * functions as prototype setup using normal JavaScript does not work as
6687 * expected during bootstrapping (see mirror.js in r114903).
6688 *
6689 * @param {function} ctor Constructor function which needs to inherit the
6690 *     prototype.
6691 * @param {function} superCtor Constructor function to inherit prototype from.
6692 */
6693exports.inherits = __webpack_require__(152);
6694
6695exports._extend = function(origin, add) {
6696  // Don't do anything if add isn't an object
6697  if (!add || !isObject(add)) return origin;
6698
6699  var keys = Object.keys(add);
6700  var i = keys.length;
6701  while (i--) {
6702    origin[keys[i]] = add[keys[i]];
6703  }
6704  return origin;
6705};
6706
6707function hasOwnProperty(obj, prop) {
6708  return Object.prototype.hasOwnProperty.call(obj, prop);
6709}
6710
6711/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7), __webpack_require__(11)))
6712
6713/***/ }),
6714/* 50 */
6715/***/ (function(module, exports, __webpack_require__) {
6716
6717/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.12.6
6718(function() {
6719  var EmbeddedFont, PDFFont, StandardFont, fontkit;
6720
6721  fontkit = __webpack_require__(167);
6722
6723  PDFFont = (function() {
6724    PDFFont.open = function(document, src, family, id) {
6725      var font;
6726      if (typeof src === 'string') {
6727        if (StandardFont.isStandardFont(src)) {
6728          return new StandardFont(document, src, id);
6729        }
6730        font = fontkit.openSync(src, family);
6731      } else if (Buffer.isBuffer(src)) {
6732        font = fontkit.create(src, family);
6733      } else if (src instanceof Uint8Array) {
6734        font = fontkit.create(new Buffer(src), family);
6735      } else if (src instanceof ArrayBuffer) {
6736        font = fontkit.create(new Buffer(new Uint8Array(src)), family);
6737      }
6738      if (font == null) {
6739        throw new Error('Not a supported font format or standard PDF font.');
6740      }
6741      return new EmbeddedFont(document, font, id);
6742    };
6743
6744    function PDFFont() {
6745      throw new Error('Cannot construct a PDFFont directly.');
6746    }
6747
6748    PDFFont.prototype.encode = function(text) {
6749      throw new Error('Must be implemented by subclasses');
6750    };
6751
6752    PDFFont.prototype.widthOfString = function(text) {
6753      throw new Error('Must be implemented by subclasses');
6754    };
6755
6756    PDFFont.prototype.ref = function() {
6757      return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref();
6758    };
6759
6760    PDFFont.prototype.finalize = function() {
6761      if (this.embedded || (this.dictionary == null)) {
6762        return;
6763      }
6764      this.embed();
6765      return this.embedded = true;
6766    };
6767
6768    PDFFont.prototype.embed = function() {
6769      throw new Error('Must be implemented by subclasses');
6770    };
6771
6772    PDFFont.prototype.lineHeight = function(size, includeGap) {
6773      var gap;
6774      if (includeGap == null) {
6775        includeGap = false;
6776      }
6777      gap = includeGap ? this.lineGap : 0;
6778      return (this.ascender + gap - this.descender) / 1000 * size;
6779    };
6780
6781    return PDFFont;
6782
6783  })();
6784
6785  module.exports = PDFFont;
6786
6787  StandardFont = __webpack_require__(292);
6788
6789  EmbeddedFont = __webpack_require__(294);
6790
6791}).call(this);
6792
6793/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
6794
6795/***/ }),
6796/* 51 */
6797/***/ (function(module, exports, __webpack_require__) {
6798
6799/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
6800(function() {
6801  var DecodeStream, iconv;
6802
6803  try {
6804    iconv = __webpack_require__(52);
6805  } catch (_error) {}
6806
6807  DecodeStream = (function() {
6808    var key;
6809
6810    function DecodeStream(buffer) {
6811      this.buffer = buffer;
6812      this.pos = 0;
6813      this.length = this.buffer.length;
6814    }
6815
6816    DecodeStream.TYPES = {
6817      UInt8: 1,
6818      UInt16: 2,
6819      UInt24: 3,
6820      UInt32: 4,
6821      Int8: 1,
6822      Int16: 2,
6823      Int24: 3,
6824      Int32: 4,
6825      Float: 4,
6826      Double: 8
6827    };
6828
6829    for (key in Buffer.prototype) {
6830      if (key.slice(0, 4) === 'read') {
6831        (function(key) {
6832          var bytes;
6833          bytes = DecodeStream.TYPES[key.replace(/read|[BL]E/g, '')];
6834          return DecodeStream.prototype[key] = function() {
6835            var ret;
6836            ret = this.buffer[key](this.pos);
6837            this.pos += bytes;
6838            return ret;
6839          };
6840        })(key);
6841      }
6842    }
6843
6844    DecodeStream.prototype.readString = function(length, encoding) {
6845      var buf, byte, i, _i, _ref;
6846      if (encoding == null) {
6847        encoding = 'ascii';
6848      }
6849      switch (encoding) {
6850        case 'utf16le':
6851        case 'ucs2':
6852        case 'utf8':
6853        case 'ascii':
6854          return this.buffer.toString(encoding, this.pos, this.pos += length);
6855        case 'utf16be':
6856          buf = new Buffer(this.readBuffer(length));
6857          for (i = _i = 0, _ref = buf.length - 1; _i < _ref; i = _i += 2) {
6858            byte = buf[i];
6859            buf[i] = buf[i + 1];
6860            buf[i + 1] = byte;
6861          }
6862          return buf.toString('utf16le');
6863        default:
6864          buf = this.readBuffer(length);
6865          if (iconv) {
6866            try {
6867              return iconv.decode(buf, encoding);
6868            } catch (_error) {}
6869          }
6870          return buf;
6871      }
6872    };
6873
6874    DecodeStream.prototype.readBuffer = function(length) {
6875      return this.buffer.slice(this.pos, this.pos += length);
6876    };
6877
6878    DecodeStream.prototype.readUInt24BE = function() {
6879      return (this.readUInt16BE() << 8) + this.readUInt8();
6880    };
6881
6882    DecodeStream.prototype.readUInt24LE = function() {
6883      return this.readUInt16LE() + (this.readUInt8() << 16);
6884    };
6885
6886    DecodeStream.prototype.readInt24BE = function() {
6887      return (this.readInt16BE() << 8) + this.readUInt8();
6888    };
6889
6890    DecodeStream.prototype.readInt24LE = function() {
6891      return this.readUInt16LE() + (this.readInt8() << 16);
6892    };
6893
6894    return DecodeStream;
6895
6896  })();
6897
6898  module.exports = DecodeStream;
6899
6900}).call(this);
6901
6902/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
6903
6904/***/ }),
6905/* 52 */
6906/***/ (function(module, exports, __webpack_require__) {
6907
6908"use strict";
6909/* WEBPACK VAR INJECTION */(function(process) {
6910
6911// Some environments don't have global Buffer (e.g. React Native).
6912// Solution would be installing npm modules "buffer" and "stream" explicitly.
6913var Buffer = __webpack_require__(1).Buffer;
6914
6915var bomHandling = __webpack_require__(170),
6916    iconv = module.exports;
6917
6918// All codecs and aliases are kept here, keyed by encoding name/alias.
6919// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.
6920iconv.encodings = null;
6921
6922// Characters emitted in case of error.
6923iconv.defaultCharUnicode = '�';
6924iconv.defaultCharSingleByte = '?';
6925
6926// Public API.
6927iconv.encode = function encode(str, encoding, options) {
6928    str = "" + (str || ""); // Ensure string.
6929
6930    var encoder = iconv.getEncoder(encoding, options);
6931
6932    var res = encoder.write(str);
6933    var trail = encoder.end();
6934
6935    return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;
6936}
6937
6938iconv.decode = function decode(buf, encoding, options) {
6939    if (typeof buf === 'string') {
6940        if (!iconv.skipDecodeWarning) {
6941            console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');
6942            iconv.skipDecodeWarning = true;
6943        }
6944
6945        buf = new Buffer("" + (buf || ""), "binary"); // Ensure buffer.
6946    }
6947
6948    var decoder = iconv.getDecoder(encoding, options);
6949
6950    var res = decoder.write(buf);
6951    var trail = decoder.end();
6952
6953    return trail ? (res + trail) : res;
6954}
6955
6956iconv.encodingExists = function encodingExists(enc) {
6957    try {
6958        iconv.getCodec(enc);
6959        return true;
6960    } catch (e) {
6961        return false;
6962    }
6963}
6964
6965// Legacy aliases to convert functions
6966iconv.toEncoding = iconv.encode;
6967iconv.fromEncoding = iconv.decode;
6968
6969// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.
6970iconv._codecDataCache = {};
6971iconv.getCodec = function getCodec(encoding) {
6972    if (!iconv.encodings)
6973        iconv.encodings = __webpack_require__(171); // Lazy load all encoding definitions.
6974
6975    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.
6976    var enc = (''+encoding).toLowerCase().replace(/[^0-9a-z]|:\d{4}$/g, "");
6977
6978    // Traverse iconv.encodings to find actual codec.
6979    var codecOptions = {};
6980    while (true) {
6981        var codec = iconv._codecDataCache[enc];
6982        if (codec)
6983            return codec;
6984
6985        var codecDef = iconv.encodings[enc];
6986
6987        switch (typeof codecDef) {
6988            case "string": // Direct alias to other encoding.
6989                enc = codecDef;
6990                break;
6991
6992            case "object": // Alias with options. Can be layered.
6993                for (var key in codecDef)
6994                    codecOptions[key] = codecDef[key];
6995
6996                if (!codecOptions.encodingName)
6997                    codecOptions.encodingName = enc;
6998
6999                enc = codecDef.type;
7000                break;
7001
7002            case "function": // Codec itself.
7003                if (!codecOptions.encodingName)
7004                    codecOptions.encodingName = enc;
7005
7006                // The codec function must load all tables and return object with .encoder and .decoder methods.
7007                // It'll be called only once (for each different options object).
7008                codec = new codecDef(codecOptions, iconv);
7009
7010                iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.
7011                return codec;
7012
7013            default:
7014                throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')");
7015        }
7016    }
7017}
7018
7019iconv.getEncoder = function getEncoder(encoding, options) {
7020    var codec = iconv.getCodec(encoding),
7021        encoder = new codec.encoder(options, codec);
7022
7023    if (codec.bomAware && options && options.addBOM)
7024        encoder = new bomHandling.PrependBOM(encoder, options);
7025
7026    return encoder;
7027}
7028
7029iconv.getDecoder = function getDecoder(encoding, options) {
7030    var codec = iconv.getCodec(encoding),
7031        decoder = new codec.decoder(options, codec);
7032
7033    if (codec.bomAware && !(options && options.stripBOM === false))
7034        decoder = new bomHandling.StripBOM(decoder, options);
7035
7036    return decoder;
7037}
7038
7039
7040// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.
7041var nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;
7042if (nodeVer) {
7043
7044    // Load streaming support in Node v0.10+
7045    var nodeVerArr = nodeVer.split(".").map(Number);
7046    if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {
7047        __webpack_require__(185)(iconv);
7048    }
7049
7050    // Load Node primitive extensions.
7051    __webpack_require__(186)(iconv);
7052}
7053
7054if (false) {
7055    console.error("iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.");
7056}
7057
7058/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(11)))
7059
7060/***/ }),
7061/* 53 */
7062/***/ (function(module, exports) {
7063
7064module.exports = [["0","
vendor: 14,886 bytes, line 7064
7064\u0000",127,"€"],["8140","丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪",5,"乲乴",9,"乿",6,"亇亊"],["8180","亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂",6,"伋伌伒",4,"伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾",4,"佄佅佇",5,"佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢"],["8240","侤侫侭侰",4,"ä¾¶",8,"俀俁係俆俇俈俉俋俌俍俒",4,"俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿",11],["8280","個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯",10,"倻倽倿偀偁偂偄偅偆偉偊偋偍偐",4,"偖偗偘偙偛偝",7,"偦",5,"偭",8,"偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎",20,"傤傦傪傫傭",4,"傳",6,"傼"],["8340","傽",17,"僐",5,"僗僘僙僛",10,"僨僩僪僫僯僰僱僲僴僶",4,"僼",9,"儈"],["8380","儉儊儌",5,"儓",13,"儢",28,"兂兇兊兌兎兏児兒兓兗兘兙兛兝",4,"兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦",4,"冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒",5],["8440","凘凙凚凜凞凟凢凣凥",5,"凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄",5,"剋剎剏剒剓剕剗剘"],["8480","剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳",9,"剾劀劃",4,"劉",6,"劑劒劔",6,"劜劤劥劦劧劮劯劰労",9,"勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務",5,"勠勡勢勣勥",10,"勱",7,"勻勼勽匁匂匃匄匇匉匊匋匌匎"],["8540","匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯",9,"匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏"],["8580","厐",4,"厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯",6,"厷厸厹厺厼厽厾叀參",4,"収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝",4,"呣呥呧呩",7,"呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡"],["8640","咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠",4,"哫哬哯哰哱哴",5,"哻哾唀唂唃唄唅唈唊",4,"唒唓唕",5,"唜唝唞唟唡唥唦"],["8680","唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋",4,"啑啒啓啔啗",4,"啝啞啟啠啢啣啨啩啫啯",5,"啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠",6,"喨",8,"喲喴営喸喺喼喿",4,"嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗",4,"嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸",4,"嗿嘂嘃嘄嘅"],["8740","嘆嘇嘊嘋嘍嘐",7,"嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀",11,"噏",4,"噕噖噚噛噝",4],["8780","噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽",7,"嚇",6,"嚐嚑嚒嚔",14,"嚤",10,"嚰",6,"嚸嚹嚺嚻嚽",12,"囋",8,"囕囖囘囙囜団囥",5,"囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國",6],["8840","園",9,"圝圞圠圡圢圤圥圦圧圫圱圲圴",4,"圼圽圿坁坃坄坅坆坈坉坋坒",4,"坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀"],["8880","垁垇垈垉垊垍",4,"垔",6,"垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹",8,"埄",6,"埌埍埐埑埓埖埗埛埜埞埡埢埣埥",7,"埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥",4,"å «",4,"報堲堳場堶",7],["8940","å ¾",5,"塅",6,"塎塏塐塒塓塕塖塗塙",4,"塟",5,"塦",4,"å¡­",16,"塿墂墄墆墇墈墊墋墌"],["8980","墍",4,"墔",4,"墛墜墝墠",7,"墪",17,"墽墾墿壀壂壃壄壆",10,"壒壓壔壖",13,"壥",5,"壭壯壱売壴壵壷壸壺",7,"夃夅夆夈",4,"夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻"],["8a40","夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛",4,"奡奣奤奦",12,"奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦"],["8a80","妧妬妭妰妱妳",5,"妺妼妽妿",6,"姇姈姉姌姍姎姏姕姖姙姛姞",4,"姤姦姧姩姪姫姭",11,"姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪",6,"娳娵娷",4,"娽娾娿婁",4,"婇婈婋",9,"婖婗婘婙婛",5],["8b40","婡婣婤婥婦婨婩婫",8,"婸婹婻婼婽婾媀",17,"媓",6,"媜",13,"媫媬"],["8b80","媭",4,"媴媶媷媹",4,"媿嫀嫃",5,"嫊嫋嫍",4,"嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬",4,"嫲",22,"嬊",11,"嬘",25,"嬳嬵嬶嬸",7,"孁",6],["8c40","孈",7,"孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏"],["8c80","寑寔",8,"寠寢寣實寧審",4,"寯寱",6,"寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧",6,"å±°å±²",6,"屻屼屽屾岀岃",4,"岉岊岋岎岏岒岓岕岝",4,"岤",4],["8d40","岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅",5,"峌",5,"峓",5,"峚",6,"峢峣峧峩峫峬峮峯峱",9,"å³¼",4],["8d80","崁崄崅崈",5,"崏",4,"崕崗崘崙崚崜崝崟",4,"崥崨崪崫崬崯",4,"å´µ",7,"å´¿",7,"嵈嵉嵍",10,"嵙嵚嵜嵞",10,"嵪嵭嵮嵰嵱嵲嵳嵵",12,"嶃",21,"嶚嶛嶜嶞嶟嶠"],["8e40","å¶¡",21,"嶸",12,"巆",6,"巎",12,"巜巟巠巣巤巪巬巭"],["8e80","巰巵巶巸",4,"巿帀帄帇帉帊帋帍帎帒帓帗帞",7,"帨",4,"帯帰帲",4,"帹帺帾帿幀幁幃幆",5,"幍",6,"幖",4,"幜幝幟幠幣",14,"幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨",4,"庮",4,"庴庺庻庼庽庿",6],["8f40","廆廇廈廋",5,"廔廕廗廘廙廚廜",11,"廩廫",8,"廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤"],["8f80","弨弫弬弮弰弲",6,"弻弽弾弿彁",14,"彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢",5,"復徫徬徯",5,"徶徸徹徺徻徾",4,"忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇"],["9040","怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰",4,"怶",4,"怽怾恀恄",6,"恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀"],["9080","悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽",7,"惇惈惉惌",4,"惒惓惔惖惗惙惛惞惡",4,"惪惱惲惵惷惸惻",4,"愂愃愄愅愇愊愋愌愐",4,"愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬",18,"慀",6],["9140","慇慉態慍慏慐慒慓慔慖",6,"慞慟慠慡慣慤慥慦慩",6,"慱慲慳慴慶慸",18,"憌憍憏",4,"憕"],["9180","憖",6,"憞",8,"憪憫憭",9,"憸",5,"憿懀懁懃",4,"應懌",4,"懓懕",16,"懧",13,"懶",8,"戀",5,"戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸",4,"扂扄扅扆扊"],["9240","扏扐払扖扗扙扚扜",6,"扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋",5,"抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁"],["9280","拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳",5,"挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖",7,"捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙",6,"採掤掦掫掯掱掲掵掶掹掻掽掿揀"],["9340","揁揂揃揅揇揈揊揋揌揑揓揔揕揗",6,"揟揢揤",4,"揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆",4,"損搎搑搒搕",5,"搝搟搢搣搤"],["9380","搥搧搨搩搫搮",5,"搵",4,"搻搼搾摀摂摃摉摋",6,"摓摕摖摗摙",4,"摟",7,"摨摪摫摬摮",9,"摻",6,"撃撆撈",8,"撓撔撗撘撚撛撜撝撟",4,"撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆",6,"擏擑擓擔擕擖擙據"],["9440","擛擜擝擟擠擡擣擥擧",24,"攁",7,"攊",7,"攓",4,"攙",8],["9480","攢攣攤攦",4,"攬攭攰攱攲攳攷攺攼攽敀",4,"敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數",14,"斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱",7,"斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘",7,"旡旣旤旪旫"],["9540","旲旳旴旵旸旹旻",4,"昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷",4,"昽昿晀時晄",6,"晍晎晐晑晘"],["9580","晙晛晜晝晞晠晢晣晥晧晩",4,"晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘",4,"暞",8,"暩",4,"暯",4,"暵暶暷暸暺暻暼暽暿",25,"曚曞",7,"曧曨曪",5,"曱曵曶書曺曻曽朁朂會"],["9640","朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠",5,"朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗",4,"杝杢杣杤杦杧杫杬杮東杴杶"],["9680","杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹",7,"柂柅",9,"柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵",7,"柾栁栂栃栄栆栍栐栒栔栕栘",4,"栞栟栠栢",6,"æ «",6,"栴栵栶栺栻栿桇桋桍桏桒桖",5],["9740","桜桝桞桟桪桬",7,"桵桸",8,"梂梄梇",7,"梐梑梒梔梕梖梘",9,"梣梤梥梩梪梫梬梮梱梲梴梶梷梸"],["9780","梹",6,"棁棃",5,"棊棌棎棏棐棑棓棔棖棗棙棛",4,"棡棢棤",9,"棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆",4,"椌椏椑椓",11,"椡椢椣椥",7,"椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃",16,"楕楖楘楙楛楜楟"],["9840","楡楢楤楥楧楨楩楪楬業楯楰楲",4,"楺楻楽楾楿榁榃榅榊榋榌榎",5,"榖榗榙榚榝",9,"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽"],["9880","榾榿槀槂",7,"構槍槏槑槒槓槕",5,"槜槝槞槡",11,"槮槯槰槱槳",9,"槾樀",9,"樋",11,"標",5,"樠樢",5,"権樫樬樭樮樰樲樳樴樶",6,"樿",4,"橅橆橈",7,"橑",6,"橚"],["9940","橜",4,"橢橣橤橦",10,"橲",6,"橺橻橽橾橿檁檂檃檅",8,"檏檒",4,"檘",7,"檡",5],["9980","檧檨檪檭",114,"欥欦欨",6],["9a40","欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍",11,"歚",7,"歨歩歫",13,"歺歽歾歿殀殅殈"],["9a80","殌殎殏殐殑殔殕殗殘殙殜",4,"殢",7,"殫",7,"殶殸",6,"毀毃毄毆",4,"毌毎毐毑毘毚毜",4,"毢",7,"毬毭毮毰毱毲毴毶毷毸毺毻毼毾",6,"氈",4,"氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋",4,"汑汒汓汖汘"],["9b40","汙汚汢汣汥汦汧汫",4,"汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘"],["9b80","泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟",5,"洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽",4,"涃涄涆涇涊涋涍涏涐涒涖",4,"涜涢涥涬涭涰涱涳涴涶涷涹",5,"淁淂淃淈淉淊"],["9c40","淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽",7,"渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵"],["9c80","渶渷渹渻",7,"湅",7,"湏湐湑湒湕湗湙湚湜湝湞湠",10,"湬湭湯",14,"満溁溂溄溇溈溊",4,"溑",6,"溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪",5],["9d40","滰滱滲滳滵滶滷滸滺",7,"漃漄漅漇漈漊",4,"漐漑漒漖",9,"漡漢漣漥漦漧漨漬漮漰漲漴漵漷",6,"漿潀潁潂"],["9d80","潃潄潅潈潉潊潌潎",9,"潙潚潛潝潟潠潡潣潤潥潧",5,"潯潰潱潳潵潶潷潹潻潽",6,"澅澆澇澊澋澏",12,"澝澞澟澠澢",4,"澨",10,"澴澵澷澸澺",5,"濁濃",5,"濊",6,"濓",10,"濟濢濣濤濥"],["9e40","濦",7,"æ¿°",32,"瀒",7,"瀜",6,"瀤",6],["9e80","瀫",9,"瀶瀷瀸瀺",17,"灍灎灐",13,"灟",11,"灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞",12,"炰炲炴炵炶為炾炿烄烅烆烇烉烋",12,"烚"],["9f40","烜烝烞烠烡烢烣烥烪烮烰",6,"烸烺烻烼烾",10,"焋",4,"焑焒焔焗焛",10,"焧",7,"焲焳焴"],["9f80","焵焷",13,"煆煇煈煉煋煍煏",12,"煝煟",4,"煥煩",4,"煯煰煱煴煵煶煷煹煻煼煾",5,"熅",4,"熋熌熍熎熐熑熒熓熕熖熗熚",4,"熡",6,"熩熪熫熭",5,"熴熶熷熸熺",8,"燄",9,"燏",4],["a040","燖",9,"燡燢燣燤燦燨",5,"燯",9,"燺",11,"爇",19],["a080","爛爜爞",9,"爩爫爭爮爯爲爳爴爺爼爾牀",6,"牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅",4,"犌犎犐犑犓",11,"犠",11,"犮犱犲犳犵犺",6,"狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛"],["a1a1"," 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈",7,"〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓"],["a2a1","ⅰ",9],["a2b1","⒈",19,"⑴",19,"①",9],["a2e5","㈠",9],["a2f1","Ⅰ",11],["a3a1","!"#¥%",88,"ï¿£"],["a4a1","ぁ",82],["a5a1","ァ",85],["a6a1","Α",16,"Σ",6],["a6c1","α",16,"σ",6],["a6e0","︵︶︹︺︿﹀︽︾﹁﹂﹃﹄"],["a6ee","︻︼︷︸︱"],["a6f4","︳︴"],["a7a1","А",5,"ЁЖ",25],["a7d1","а",5,"ёж",25],["a840","ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═",35,"▁",6],["a880","█",7,"▓▔▕▼▽◢◣◤◥☉⊕〒〝〞"],["a8a1","āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ"],["a8bd","ńň"],["a8c0","É¡"],["a8c5","ㄅ",36],["a940","〡",8,"㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦"],["a959","℡㈱"],["a95c","‐"],["a960","ー゛゜ヽヾ〆ゝゞ﹉",9,"﹔﹕﹖﹗﹙",8],["a980","ï¹¢",4,"﹨﹩﹪﹫"],["a996","〇"],["a9a4","─",75],["aa40","狜狝狟狢",5,"狪狫狵狶狹狽狾狿猀猂猄",5,"猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀",8],["aa80","獉獊獋獌獎獏獑獓獔獕獖獘",7,"獡",10,"獮獰獱"],["ab40","獲",11,"獿",4,"玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣",5,"玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃",4],["ab80","珋珌珎珒",6,"珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳",4],["ac40","珸",10,"琄琇琈琋琌琍琎琑",8,"琜",5,"琣琤琧琩琫琭琯琱琲琷",4,"琽琾琿瑀瑂",11],["ac80","瑎",6,"瑖瑘瑝瑠",12,"瑮瑯瑱",4,"瑸瑹瑺"],["ad40","瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑",10,"璝璟",7,"璪",15,"璻",12],["ad80","瓈",9,"瓓",8,"瓝瓟瓡瓥瓧",6,"瓰瓱瓲"],["ae40","瓳瓵瓸",6,"甀甁甂甃甅",7,"甎甐甒甔甕甖甗甛甝甞甠",4,"甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘"],["ae80","畝",7,"畧畨畩畫",6,"ç•
vendor: 32,163 bytes, line 7064
7064³ç•µç•¶ç•·ç•º",4,"疀疁疂疄疅疇"],["af40","疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦",4,"疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇"],["af80","瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄"],["b040","癅",6,"癎",5,"癕癗",4,"癝癟癠癡癢癤",6,"癬癭癮癰",7,"癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛"],["b080","皜",7,"皥",8,"皯皰皳皵",9,"盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥"],["b140","盄盇盉盋盌盓盕盙盚盜盝盞盠",4,"盦",7,"盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎",10,"眛眜眝眞眡眣眤眥眧眪眫"],["b180","眬眮眰",4,"眹眻眽眾眿睂睄睅睆睈",7,"睒",7,"睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳"],["b240","睝睞睟睠睤睧睩睪睭",11,"睺睻睼瞁瞂瞃瞆",5,"瞏瞐瞓",11,"瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶",4],["b280","瞼瞾矀",12,"矎",8,"矘矙矚矝",4,"矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖"],["b340","矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃",5,"砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚"],["b380","硛硜硞",11,"硯",7,"硸硹硺硻硽",6,"场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚"],["b440","碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨",7,"碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚",9],["b480","磤磥磦磧磩磪磫磭",4,"磳磵磶磸磹磻",5,"礂礃礄礆",6,"础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮"],["b540","礍",5,"礔",9,"礟",4,"礥",14,"礵",4,"礽礿祂祃祄祅祇祊",8,"祔祕祘祙祡祣"],["b580","祤祦祩祪祫祬祮祰",6,"祹祻",4,"禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠"],["b640","禓",6,"禛",11,"禨",10,"禴",4,"禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙",5,"秠秡秢秥秨秪"],["b680","秬秮秱",6,"秹秺秼秾秿稁稄稅稇稈稉稊稌稏",4,"稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二"],["b740","稝稟稡稢稤",14,"稴稵稶稸稺稾穀",5,"穇",9,"穒",4,"穘",16],["b780","ç©©",6,"穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服"],["b840","窣窤窧窩窪窫窮",4,"窴",10,"竀",10,"竌",9,"竗竘竚竛竜竝竡竢竤竧",5,"竮竰竱竲竳"],["b880","ç«´",4,"竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹"],["b940","笯笰笲笴笵笶笷笹笻笽笿",5,"筆筈筊筍筎筓筕筗筙筜筞筟筡筣",10,"筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆",6,"箎箏"],["b980","箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹",7,"篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈"],["ba40","篅篈築篊篋篍篎篏篐篒篔",4,"篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲",4,"篸篹篺篻篽篿",7,"簈簉簊簍簎簐",5,"簗簘簙"],["ba80","簚",4,"ç° ",5,"簨簩簫",12,"ç°¹",5,"籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖"],["bb40","籃",9,"籎",36,"ç±µ",5,"ç±¾",9],["bb80","粈粊",6,"粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴",4,"粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕"],["bc40","粿糀糂糃糄糆糉糋糎",6,"糘糚糛糝糞糡",6,"糩",5,"ç³°",7,"糹糺糼",13,"紋",5],["bc80","紑",14,"紡紣紤紥紦紨紩紪紬紭紮細",6,"肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件"],["bd40","ç´·",54,"絯",7],["bd80","絸",32,"健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸"],["be40","継",12,"ç¶§",6,"綯",42],["be80","線",32,"尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻"],["bf40","ç·»",62],["bf80","縺縼",4,"繂",4,"繈",21,"俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀"],["c040","繞",35,"纃",23,"纜纝纞"],["c080","纮纴纻纼绖绤绬绹缊缐缞缷缹缻",6,"罃罆",9,"罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐"],["c140","罖罙罛罜罝罞罠罣",4,"罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂",7,"羋羍羏",4,"羕",4,"羛羜羠羢羣羥羦羨",6,"ç¾±"],["c180","ç¾³",4,"羺羻羾翀翂翃翄翆翇翈翉翋翍翏",4,"翖翗翙",5,"翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿"],["c240","翤翧翨翪翫翬翭翯翲翴",6,"翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫",5,"耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗"],["c280","聙聛",13,"聫",5,"聲",11,"隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫"],["c340","聾肁肂肅肈肊肍",5,"肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇",4,"胏",6,"胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋"],["c380","脌脕脗脙脛脜脝脟",12,"脭脮脰脳脴脵脷脹",4,"脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸"],["c440","腀",5,"腇腉腍腎腏腒腖腗腘腛",4,"腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃",4,"膉膋膌膍膎膐膒",5,"膙膚膞",4,"膤膥"],["c480","膧膩膫",7,"膴",5,"膼膽膾膿臄臅臇臈臉臋臍",6,"摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁"],["c540","臔",14,"臤臥臦臨臩臫臮",4,"臵",5,"臽臿舃與",4,"舎舏舑舓舕",5,"舝舠舤舥舦舧舩舮舲舺舼舽舿"],["c580","艀艁艂艃艅艆艈艊艌艍艎艐",7,"艙艛艜艝艞艠",7,"艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗"],["c640","艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸"],["c680","苺苼",4,"茊茋茍茐茒茓茖茘茙茝",9,"茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐"],["c740","茾茿荁荂荄荅荈荊",4,"荓荕",4,"荝荢荰",6,"荹荺荾",6,"莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡",6,"莬莭莮"],["c780","莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠"],["c840","菮華菳",4,"菺菻菼菾菿萀萂萅萇萈萉萊萐萒",5,"萙萚萛萞",5,"萩",7,"萲",5,"萹萺萻萾",7,"葇葈葉"],["c880","葊",6,"葒",4,"葘葝葞葟葠葢葤",4,"葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁"],["c940","葽",4,"蒃蒄蒅蒆蒊蒍蒏",7,"蒘蒚蒛蒝蒞蒟蒠蒢",12,"蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗"],["c980","蓘",4,"蓞蓡蓢蓤蓧",4,"蓭蓮蓯蓱",10,"蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳"],["ca40","蔃",8,"蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢",8,"蔭",9,"蔾",4,"蕄蕅蕆蕇蕋",10],["ca80","蕗蕘蕚蕛蕜蕝蕟",4,"蕥蕦蕧蕩",8,"蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱"],["cb40","薂薃薆薈",6,"薐",10,"薝",6,"薥薦薧薩薫薬薭薱",5,"薸薺",6,"藂",6,"藊",4,"藑藒"],["cb80","藔藖",5,"藝",6,"藥藦藧藨藪",14,"恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔"],["cc40","藹藺藼藽藾蘀",4,"蘆",10,"蘒蘓蘔蘕蘗",15,"蘨蘪",13,"蘹蘺蘻蘽蘾蘿虀"],["cc80","虁",11,"虒虓處",4,"虛虜虝號虠虡虣",7,"獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃"],["cd40","虭虯虰虲",6,"蚃",6,"蚎",4,"蚔蚖",5,"蚞",4,"蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻",4,"蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜"],["cd80","蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威"],["ce40","蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀",6,"蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚",5,"蝡蝢蝦",7,"蝯蝱蝲蝳蝵"],["ce80","蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎",4,"螔螕螖螘",6,"螠",4,"巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺"],["cf40","螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁",4,"蟇蟈蟉蟌",4,"蟔",6,"蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯",9],["cf80","蟺蟻蟼蟽蟿蠀蠁蠂蠄",5,"蠋",7,"蠔蠗蠘蠙蠚蠜",4,"蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓"],["d040","è ¤",13,"è ³",5,"蠺蠻蠽蠾蠿衁衂衃衆",5,"衎",5,"衕衖衘衚",6,"衦衧衪衭衯衱衳衴衵衶衸衹衺"],["d080","衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗",4,"袝",4,"袣袥",5,"小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄"],["d140","袬袮袯袰袲",4,"袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚",4,"裠裡裦裧裩",6,"裲裵裶裷裺裻製裿褀褁褃",5],["d180","褉褋",4,"褑褔",4,"褜",4,"褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶"],["d240","褸",8,"襂襃襅",24,"襠",5,"襧",19,"襼"],["d280","襽襾覀覂覄覅覇",26,"摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐"],["d340","覢",30,"觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴",6],["d380","è§»",4,"訁",5,"計",21,"印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉"],["d440","訞",31,"訿",8,"詉",21],["d480","詟",25,"詺",6,"浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧"],["d540","誁",7,"誋",7,"誔",46],["d580","諃",32,"铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政"],["d640","諤",34,"謈",27],["d680","謤謥謧",30,"帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑"],["d740","譆",31,"è­§",4,"è­­",25],["d780","讇",24,"讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座"],["d840","è°¸",8,"豂豃豄豅豈豊豋豍",7,"豖豗豘豙豛",5,"è±£",6,"豬",6,"豴豵豶豷豻",6,"貃貄貆貇"],["d880","貈貋貍",6,"貕貖貗貙",20,"亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝"],["d940","è²®",62],["d980","è³­",32,"佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼"],["da40","贎",14,"贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸",8,"趂趃趆趇趈趉趌",4,"趒趓趕",9,"è¶ è¶¡"],["da80","趢趤",12,"趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺"],["db40","跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾",6,"踆踇踈踋踍踎踐踑踒踓踕",7,"踠踡踤",4,"踫踭踰踲踳踴踶踷踸踻踼踾"],["db80","踿蹃蹅蹆蹌",4,"蹓",5,"蹚",11,"蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝"],["dc40","蹳蹵蹷",4,"蹽蹾躀躂躃躄躆躈",6,"躑躒躓躕",6,"躝躟",11,"躭躮躰躱躳",6,"躻",7],["dc80","軃",10,"軏",21,"堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥"],["dd40","軥",62],["dd80","輤",32,"荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺"],["de40","轅",32,"轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆"],["de80","迉",4,"迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖"],["df40","這逜連逤逥逧",5,"逰",4,"逷逹逺逽逿遀遃遅遆遈",4,"過達違遖遙遚遜",5,"遤遦遧適遪遫遬遯",4,"遶",6,"遾邁"],["df80","還邅邆邇邉邊邌",4,"邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼"],["e040","郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅",19,"鄚鄛鄜"],["e080","鄝鄟鄠鄡鄤",10,"鄰鄲",6,"鄺",8,"酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼"],["e140","酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀",4,"醆醈醊醎醏醓",6,"醜",5,"醤",5,"醫醬醰醱醲醳醶醷醸醹醻"],["e180","醼",10,"釈釋釐釒",9,"針",8,"帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺"],["e240","釦",62],["e280","鈥",32,"狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧",5,"饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂"],["e340","鉆",45,"鉵",16],["e380","銆",7,"銏",24,"恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾"],["e440","銨",5,"銯",24,"鋉",31],["e480","鋩",32,"洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑"],["e540","錊",51,"錿",10],["e580","鍊",31,"鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣"],["e640","鍬",34,"鎐",27],["e680","鎬",29,"鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩"],["e740","鏎",7,"鏗",54],["e780","鐎",32,"纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡",6,"缪缫缬缭缯",4,"缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬"],["e840","鐯",14,"鐿",43,"鑬鑭鑮鑯"],["e880","鑰",20,"钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹"],["e940","锧锳锽镃镈镋镕镚镠镮镴镵長",7,"門",42],["e980","閫",32,"椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋"],["ea40","闌",27,"闬闿阇阓阘阛阞阠阣",6,"阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗"],["ea80","陘陙陚陜陝陞陠陣陥陦陫陭",4,"陳陸",12,"隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰"],["eb40","隌階隑隒隓隕隖隚際隝",9,"隨",7,"隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖",9,"雡",6,"雫"],["eb80","雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗",4,"霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻"],["ec40","霡",8,"霫霬霮霯霱霳",4,"霺霻霼霽霿",18,"靔靕靗靘靚靜靝靟靣靤靦靧靨靪",7],["ec80","靲靵靷",4,"靽",7,"鞆",4,"鞌鞎鞏鞐鞓鞕鞖鞗鞙",4,"臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐"],["ed40","鞞鞟鞡鞢鞤",6,"鞬鞮鞰鞱鞳鞵",46],["ed80","韤韥韨韮",4,"韴韷",23,"怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨"],["ee40","頏",62],["ee80","顎",32,"睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶",4,"钼钽钿铄铈",6,"铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪"],["ef40","顯",5,"颋颎颒颕颙颣風",37,"飏飐飔飖飗飛飜飝飠",4],["ef80","飥飦飩",30,"铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒",4,"锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤",8,"镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔"],["f040","餈",4,"餎餏餑",28,"餯",26],["f080","饊",9,"饖",12,"饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨",4,"鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦",6,"鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙"],["f140","馌馎馚",10,"馦馧馩",47],["f180","駙",32,"瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃"],["f240","駺",62],["f280","騹",32,"颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒"],["f340","驚",17,"驲骃骉骍骎骔骕骙骦骩",6,"骲骳骴骵骹骻骽骾骿髃髄髆",4,"髍髎髏髐髒體髕髖髗髙髚髛髜"],["f380","髝髞髠髢髣髤髥髧髨髩髪髬髮髰",8,"髺髼",6,"鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋"],["f440","鬇鬉",5,"鬐鬑鬒鬔",10,"鬠鬡鬢鬤",10,"鬰鬱鬳",7,"鬽鬾鬿魀魆魊魋魌魎魐魒魓魕",5],["f480","魛",32,"簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤"],["f540","é­¼",62],["f580","é®»",32,"酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜"],["f640","鯜",62],["f680","鰛",32,"觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅",5,"龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞",5,"é²¥",4,"鲫鲭鲮鲰",7,"鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋"],["f740","é°¼",62],["f780","鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾",4,"鳈鳉鳑鳒鳚鳛鳠鳡鳌",4,"鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄"],["f840","é³£",62],["f880","é´¢",32],["f940","鵃",62],["f980","鶂",32],["fa40","é¶£",62],["fa80","é·¢",32],["fb40","鸃",27,"鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴",9,"麀"],["fb80","麁麃麄麅麆麉麊麌",5,"麔",8,"麞麠",5,"麧麨麩麪"],["fc40","麫",8,"麵麶麷麹麺麼麿",4,"黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰",8,"黺黽黿",6],["fc80","鼆",4,"鼌鼏鼑鼒鼔鼕鼖鼘鼚",5,"鼡鼣",8,"鼭鼮鼰鼱"],["fd40","é¼²",4,"鼸鼺鼼鼿",4,"齅",10,"齒",38],["fd80","é½¹",5,"龁龂龍",11,"龜龝龞龡",4,"郎凉秊裏隣"],["fe40","兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩"]]
vendor: 10,232 bytes, lines 7064-7414
7064
7065
7066/***/ }),
7067/* 54 */
7068/***/ (function(module, exports, __webpack_require__) {
7069
7070// fallback for non-array-like ES3 and non-enumerable old V8 strings
7071var cof = __webpack_require__(55);
7072// eslint-disable-next-line no-prototype-builtins
7073module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
7074  return cof(it) == 'String' ? it.split('') : Object(it);
7075};
7076
7077
7078/***/ }),
7079/* 55 */
7080/***/ (function(module, exports) {
7081
7082var toString = {}.toString;
7083
7084module.exports = function (it) {
7085  return toString.call(it).slice(8, -1);
7086};
7087
7088
7089/***/ }),
7090/* 56 */
7091/***/ (function(module, exports) {
7092
7093// 7.2.1 RequireObjectCoercible(argument)
7094module.exports = function (it) {
7095  if (it == undefined) throw TypeError("Can't call method on  " + it);
7096  return it;
7097};
7098
7099
7100/***/ }),
7101/* 57 */
7102/***/ (function(module, exports, __webpack_require__) {
7103
7104var pIE = __webpack_require__(35);
7105var createDesc = __webpack_require__(27);
7106var toIObject = __webpack_require__(17);
7107var toPrimitive = __webpack_require__(58);
7108var has = __webpack_require__(18);
7109var IE8_DOM_DEFINE = __webpack_require__(95);
7110var gOPD = Object.getOwnPropertyDescriptor;
7111
7112exports.f = __webpack_require__(5) ? gOPD : function getOwnPropertyDescriptor(O, P) {
7113  O = toIObject(O);
7114  P = toPrimitive(P, true);
7115  if (IE8_DOM_DEFINE) try {
7116    return gOPD(O, P);
7117  } catch (e) { /* empty */ }
7118  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
7119};
7120
7121
7122/***/ }),
7123/* 58 */
7124/***/ (function(module, exports, __webpack_require__) {
7125
7126// 7.1.1 ToPrimitive(input [, PreferredType])
7127var isObject = __webpack_require__(9);
7128// instead of the ES6 spec version, we didn't implement @@toPrimitive case
7129// and the second argument - flag - preferred type is a string
7130module.exports = function (it, S) {
7131  if (!isObject(it)) return it;
7132  var fn, val;
7133  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
7134  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
7135  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
7136  throw TypeError("Can't convert object to primitive value");
7137};
7138
7139
7140/***/ }),
7141/* 59 */
7142/***/ (function(module, exports, __webpack_require__) {
7143
7144// most Object methods by ES6 should accept primitives
7145var $export = __webpack_require__(3);
7146var core = __webpack_require__(2);
7147var fails = __webpack_require__(19);
7148module.exports = function (KEY, exec) {
7149  var fn = (core.Object || {})[KEY] || Object[KEY];
7150  var exp = {};
7151  exp[KEY] = exec(fn);
7152  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);
7153};
7154
7155
7156/***/ }),
7157/* 60 */
7158/***/ (function(module, exports, __webpack_require__) {
7159
7160module.exports = { "default": __webpack_require__(200), __esModule: true };
7161
7162/***/ }),
7163/* 61 */
7164/***/ (function(module, exports, __webpack_require__) {
7165
7166"use strict";
7167
7168var LIBRARY = __webpack_require__(62);
7169var $export = __webpack_require__(3);
7170var redefine = __webpack_require__(99);
7171var hide = __webpack_require__(13);
7172var has = __webpack_require__(18);
7173var Iterators = __webpack_require__(23);
7174var $iterCreate = __webpack_require__(203);
7175var setToStringTag = __webpack_require__(39);
7176var getPrototypeOf = __webpack_require__(206);
7177var ITERATOR = __webpack_require__(4)('iterator');
7178var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
7179var FF_ITERATOR = '@@iterator';
7180var KEYS = 'keys';
7181var VALUES = 'values';
7182
7183var returnThis = function () { return this; };
7184
7185module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
7186  $iterCreate(Constructor, NAME, next);
7187  var getMethod = function (kind) {
7188    if (!BUGGY && kind in proto) return proto[kind];
7189    switch (kind) {
7190      case KEYS: return function keys() { return new Constructor(this, kind); };
7191      case VALUES: return function values() { return new Constructor(this, kind); };
7192    } return function entries() { return new Constructor(this, kind); };
7193  };
7194  var TAG = NAME + ' Iterator';
7195  var DEF_VALUES = DEFAULT == VALUES;
7196  var VALUES_BUG = false;
7197  var proto = Base.prototype;
7198  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
7199  var $default = (!BUGGY && $native) || getMethod(DEFAULT);
7200  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
7201  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
7202  var methods, key, IteratorPrototype;
7203  // Fix native
7204  if ($anyNative) {
7205    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
7206    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
7207      // Set @@toStringTag to native iterators
7208      setToStringTag(IteratorPrototype, TAG, true);
7209      // fix for some old engines
7210      if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);
7211    }
7212  }
7213  // fix Array#{values, @@iterator}.name in V8 / FF
7214  if (DEF_VALUES && $native && $native.name !== VALUES) {
7215    VALUES_BUG = true;
7216    $default = function values() { return $native.call(this); };
7217  }
7218  // Define iterator
7219  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
7220    hide(proto, ITERATOR, $default);
7221  }
7222  // Plug for library
7223  Iterators[NAME] = $default;
7224  Iterators[TAG] = returnThis;
7225  if (DEFAULT) {
7226    methods = {
7227      values: DEF_VALUES ? $default : getMethod(VALUES),
7228      keys: IS_SET ? $default : getMethod(KEYS),
7229      entries: $entries
7230    };
7231    if (FORCED) for (key in methods) {
7232      if (!(key in proto)) redefine(proto, key, methods[key]);
7233    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
7234  }
7235  return methods;
7236};
7237
7238
7239/***/ }),
7240/* 62 */
7241/***/ (function(module, exports) {
7242
7243module.exports = true;
7244
7245
7246/***/ }),
7247/* 63 */
7248/***/ (function(module, exports) {
7249
7250// 7.1.4 ToInteger
7251var ceil = Math.ceil;
7252var floor = Math.floor;
7253module.exports = function (it) {
7254  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
7255};
7256
7257
7258/***/ }),
7259/* 64 */
7260/***/ (function(module, exports, __webpack_require__) {
7261
7262var shared = __webpack_require__(65)('keys');
7263var uid = __webpack_require__(38);
7264module.exports = function (key) {
7265  return shared[key] || (shared[key] = uid(key));
7266};
7267
7268
7269/***/ }),
7270/* 65 */
7271/***/ (function(module, exports, __webpack_require__) {
7272
7273var global = __webpack_require__(10);
7274var SHARED = '__core-js_shared__';
7275var store = global[SHARED] || (global[SHARED] = {});
7276module.exports = function (key) {
7277  return store[key] || (store[key] = {});
7278};
7279
7280
7281/***/ }),
7282/* 66 */
7283/***/ (function(module, exports) {
7284
7285// IE 8- don't enum bug keys
7286module.exports = (
7287  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
7288).split(',');
7289
7290
7291/***/ }),
7292/* 67 */
7293/***/ (function(module, exports, __webpack_require__) {
7294
7295var classof = __webpack_require__(68);
7296var ITERATOR = __webpack_require__(4)('iterator');
7297var Iterators = __webpack_require__(23);
7298module.exports = __webpack_require__(2).getIteratorMethod = function (it) {
7299  if (it != undefined) return it[ITERATOR]
7300    || it['@@iterator']
7301    || Iterators[classof(it)];
7302};
7303
7304
7305/***/ }),
7306/* 68 */
7307/***/ (function(module, exports, __webpack_require__) {
7308
7309// getting tag from 19.1.3.6 Object.prototype.toString()
7310var cof = __webpack_require__(55);
7311var TAG = __webpack_require__(4)('toStringTag');
7312// ES3 wrong here
7313var ARG = cof(function () { return arguments; }()) == 'Arguments';
7314
7315// fallback for IE11 Script Access Denied error
7316var tryGet = function (it, key) {
7317  try {
7318    return it[key];
7319  } catch (e) { /* empty */ }
7320};
7321
7322module.exports = function (it) {
7323  var O, T, B;
7324  return it === undefined ? 'Undefined' : it === null ? 'Null'
7325    // @@toStringTag case
7326    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
7327    // builtinTag case
7328    : ARG ? cof(O)
7329    // ES3 arguments fallback
7330    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
7331};
7332
7333
7334/***/ }),
7335/* 69 */
7336/***/ (function(module, exports, __webpack_require__) {
7337
7338"use strict";
7339
7340
7341exports.__esModule = true;
7342
7343var _iterator = __webpack_require__(103);
7344
7345var _iterator2 = _interopRequireDefault(_iterator);
7346
7347var _symbol = __webpack_require__(216);
7348
7349var _symbol2 = _interopRequireDefault(_symbol);
7350
7351var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
7352
7353function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7354
7355exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
7356  return typeof obj === "undefined" ? "undefined" : _typeof(obj);
7357} : function (obj) {
7358  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
7359};
7360
7361/***/ }),
7362/* 70 */
7363/***/ (function(module, exports, __webpack_require__) {
7364
7365exports.f = __webpack_require__(4);
7366
7367
7368/***/ }),
7369/* 71 */
7370/***/ (function(module, exports, __webpack_require__) {
7371
7372var global = __webpack_require__(10);
7373var core = __webpack_require__(2);
7374var LIBRARY = __webpack_require__(62);
7375var wksExt = __webpack_require__(70);
7376var defineProperty = __webpack_require__(6).f;
7377module.exports = function (name) {
7378  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
7379  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
7380};
7381
7382
7383/***/ }),
7384/* 72 */
7385/***/ (function(module, exports) {
7386
7387exports.f = Object.getOwnPropertySymbols;
7388
7389
7390/***/ }),
7391/* 73 */
7392/***/ (function(module, exports) {
7393
7394
7395
7396/***/ }),
7397/* 74 */
7398/***/ (function(module, exports, __webpack_require__) {
7399
7400module.exports = { "default": __webpack_require__(223), __esModule: true };
7401
7402/***/ }),
7403/* 75 */
7404/***/ (function(module, exports, __webpack_require__) {
7405
7406var isObject = __webpack_require__(9);
7407module.exports = function (it, TYPE) {
7408  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
7409  return it;
7410};
7411
7412
7413/***/ }),
7414/* 76 */
7415/***/ (function(module, exports) {
7416
7417var toString = {}.toString;
7418
7419module.exports = Array.isArray || function (arr) {
7420  return toString.call(arr) == '[object Array]';
7421};
7422
7423
7424/***/ }),
7425/* 77 */
7426/***/ (function(module, exports, __webpack_require__) {
7427
7428"use strict";
7429
7430
7431function TraversalTracker() {
7432	this.events = {};
7433}
7434
7435TraversalTracker.prototype.startTracking = function (event, callback) {
7436	var callbacks = this.events[event] || (this.events[event] = []);
7437
7438	if (callbacks.indexOf(callback) < 0) {
7439		callbacks.push(callback);
7440	}
7441};
7442
7443TraversalTracker.prototype.stopTracking = function (event, callback) {
7444	var callbacks = this.events[event];
7445
7446	if (!callbacks) {
7447		return;
7448	}
7449
7450	var index = callbacks.indexOf(callback);
7451	if (index >= 0) {
7452		callbacks.splice(index, 1);
7453	}
7454};
7455
7456TraversalTracker.prototype.emit = function (event) {
7457	var args = Array.prototype.slice.call(arguments, 1);
7458	var callbacks = this.events[event];
7459
7460	if (!callbacks) {
7461		return;
7462	}
7463
7464	callbacks.forEach(function (callback) {
7465		callback.apply(this, args);
7466	});
7467};
7468
7469TraversalTracker.prototype.auto = function (event, callback, innerFunction) {
7470	this.startTracking(event, callback);
7471	innerFunction();
7472	this.stopTracking(event, callback);
7473};
7474
7475module.exports = TraversalTracker;
7476
7477
7478/***/ }),
7479/* 78 */
7480/***/ (function(module, exports, __webpack_require__) {
7481
7482// Generated by CoffeeScript 1.7.1
7483(function() {
7484  var AI, AL, BA, BK, CB, CI_BRK, CJ, CP_BRK, CR, DI_BRK, ID, IN_BRK, LF, LineBreaker, NL, NS, PR_BRK, SA, SG, SP, UnicodeTrie, WJ, XX, base64, characterClasses, classTrie, data, fs, pairTable, _ref, _ref1;
7485
7486  UnicodeTrie = __webpack_require__(43);
7487
7488
7489
7490  base64 = __webpack_require__(131);
7491
7492  _ref = __webpack_require__(132), BK = _ref.BK, CR = _ref.CR, LF = _ref.LF, NL = _ref.NL, CB = _ref.CB, BA = _ref.BA, SP = _ref.SP, WJ = _ref.WJ, SP = _ref.SP, BK = _ref.BK, LF = _ref.LF, NL = _ref.NL, AI = _ref.AI, AL = _ref.AL, SA = _ref.SA, SG = _ref.SG, XX = _ref.XX, CJ = _ref.CJ, ID = _ref.ID, NS = _ref.NS, characterClasses = _ref.characterClasses;
7493
7494  _ref1 = __webpack_require__(133), DI_BRK = _ref1.DI_BRK, IN_BRK = _ref1.IN_BRK, CI_BRK = _ref1.CI_BRK, CP_BRK = _ref1.CP_BRK, PR_BRK = _ref1.PR_BRK, pairTable = _ref1.pairTable;
7495
7496  data = base64.toByteArray("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");
7497
7498  classTrie = new UnicodeTrie(data);
7499
7500  LineBreaker = (function() {
7501    var Break, mapClass, mapFirst;
7502
7503    function LineBreaker(string) {
7504      this.string = string;
7505      this.pos = 0;
7506      this.lastPos = 0;
7507      this.curClass = null;
7508      this.nextClass = null;
7509    }
7510
7511    LineBreaker.prototype.nextCodePoint = function() {
7512      var code, next;
7513      code = this.string.charCodeAt(this.pos++);
7514      next = this.string.charCodeAt(this.pos);
7515      if ((0xd800 <= code && code <= 0xdbff) && (0xdc00 <= next && next <= 0xdfff)) {
7516        this.pos++;
7517        return ((code - 0xd800) * 0x400) + (next - 0xdc00) + 0x10000;
7518      }
7519      return code;
7520    };
7521
7522    mapClass = function(c) {
7523      switch (c) {
7524        case AI:
7525          return AL;
7526        case SA:
7527        case SG:
7528        case XX:
7529          return AL;
7530        case CJ:
7531          return NS;
7532        default:
7533          return c;
7534      }
7535    };
7536
7537    mapFirst = function(c) {
7538      switch (c) {
7539        case LF:
7540        case NL:
7541          return BK;
7542        case CB:
7543          return BA;
7544        case SP:
7545          return WJ;
7546        default:
7547          return c;
7548      }
7549    };
7550
7551    LineBreaker.prototype.nextCharClass = function(first) {
7552      if (first == null) {
7553        first = false;
7554      }
7555      return mapClass(classTrie.get(this.nextCodePoint()));
7556    };
7557
7558    Break = (function() {
7559      function Break(position, required) {
7560        this.position = position;
7561        this.required = required != null ? required : false;
7562      }
7563
7564      return Break;
7565
7566    })();
7567
7568    LineBreaker.prototype.nextBreak = function() {
7569      var cur, lastClass, shouldBreak;
7570      if (this.curClass == null) {
7571        this.curClass = mapFirst(this.nextCharClass());
7572      }
7573      while (this.pos < this.string.length) {
7574        this.lastPos = this.pos;
7575        lastClass = this.nextClass;
7576        this.nextClass = this.nextCharClass();
7577        if (this.curClass === BK || (this.curClass === CR && this.nextClass !== LF)) {
7578          this.curClass = mapFirst(mapClass(this.nextClass));
7579          return new Break(this.lastPos, true);
7580        }
7581        cur = (function() {
7582          switch (this.nextClass) {
7583            case SP:
7584              return this.curClass;
7585            case BK:
7586            case LF:
7587            case NL:
7588              return BK;
7589            case CR:
7590              return CR;
7591            case CB:
7592              return BA;
7593          }
7594        }).call(this);
7595        if (cur != null) {
7596          this.curClass = cur;
7597          if (this.nextClass === CB) {
7598            return new Break(this.lastPos);
7599          }
7600          continue;
7601        }
7602        shouldBreak = false;
7603        switch (pairTable[this.curClass][this.nextClass]) {
7604          case DI_BRK:
7605            shouldBreak = true;
7606            break;
7607          case IN_BRK:
7608            shouldBreak = lastClass === SP;
7609            break;
7610          case CI_BRK:
7611            shouldBreak = lastClass === SP;
7612            if (!shouldBreak) {
7613              continue;
7614            }
7615            break;
7616          case CP_BRK:
7617            if (lastClass !== SP) {
7618              continue;
7619            }
7620        }
7621        this.curClass = this.nextClass;
7622        if (shouldBreak) {
7623          return new Break(this.lastPos);
7624        }
7625      }
7626      if (this.pos >= this.string.length) {
7627        if (this.lastPos < this.string.length) {
7628          this.lastPos = this.string.length;
7629          return new Break(this.string.length);
7630        } else {
7631          return null;
7632        }
7633      }
7634    };
7635
7636    return LineBreaker;
7637
7638  })();
7639
7640  module.exports = LineBreaker;
7641
7642}).call(this);
7643
7644
7645/***/ }),
7646/* 79 */
7647/***/ (function(module, exports) {
7648
7649var TINF_OK = 0;
7650var TINF_DATA_ERROR = -3;
7651
7652function Tree() {
7653  this.table = new Uint16Array(16);   /* table of code length counts */
7654  this.trans = new Uint16Array(288);  /* code -> symbol translation table */
7655}
7656
7657function Data(source, dest) {
7658  this.source = source;
7659  this.sourceIndex = 0;
7660  this.tag = 0;
7661  this.bitcount = 0;
7662
7663  this.dest = dest;
7664  this.destLen = 0;
7665
7666  this.ltree = new Tree();  /* dynamic length/symbol tree */
7667  this.dtree = new Tree();  /* dynamic distance tree */
7668}
7669
7670/* --------------------------------------------------- *
vendor: 7,339 bytes, lines 7671-7971
7671 * -- uninitialized global data (static structures) -- *
7672 * --------------------------------------------------- */
7673
7674var sltree = new Tree();
7675var sdtree = new Tree();
7676
7677/* extra bits and base tables for length codes */
7678var length_bits = new Uint8Array(30);
7679var length_base = new Uint16Array(30);
7680
7681/* extra bits and base tables for distance codes */
7682var dist_bits = new Uint8Array(30);
7683var dist_base = new Uint16Array(30);
7684
7685/* special ordering of code length codes */
7686var clcidx = new Uint8Array([
7687  16, 17, 18, 0, 8, 7, 9, 6,
7688  10, 5, 11, 4, 12, 3, 13, 2,
7689  14, 1, 15
7690]);
7691
7692/* used by tinf_decode_trees, avoids allocations every call */
7693var code_tree = new Tree();
7694var lengths = new Uint8Array(288 + 32);
7695
7696/* ----------------------- *
7697 * -- utility functions -- *
7698 * ----------------------- */
7699
7700/* build extra bits and base tables */
7701function tinf_build_bits_base(bits, base, delta, first) {
7702  var i, sum;
7703
7704  /* build bits table */
7705  for (i = 0; i < delta; ++i) bits[i] = 0;
7706  for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0;
7707
7708  /* build base table */
7709  for (sum = first, i = 0; i < 30; ++i) {
7710    base[i] = sum;
7711    sum += 1 << bits[i];
7712  }
7713}
7714
7715/* build the fixed huffman trees */
7716function tinf_build_fixed_trees(lt, dt) {
7717  var i;
7718
7719  /* build fixed length tree */
7720  for (i = 0; i < 7; ++i) lt.table[i] = 0;
7721
7722  lt.table[7] = 24;
7723  lt.table[8] = 152;
7724  lt.table[9] = 112;
7725
7726  for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i;
7727  for (i = 0; i < 144; ++i) lt.trans[24 + i] = i;
7728  for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i;
7729  for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i;
7730
7731  /* build fixed distance tree */
7732  for (i = 0; i < 5; ++i) dt.table[i] = 0;
7733
7734  dt.table[5] = 32;
7735
7736  for (i = 0; i < 32; ++i) dt.trans[i] = i;
7737}
7738
7739/* given an array of code lengths, build a tree */
7740var offs = new Uint16Array(16);
7741
7742function tinf_build_tree(t, lengths, off, num) {
7743  var i, sum;
7744
7745  /* clear code length count table */
7746  for (i = 0; i < 16; ++i) t.table[i] = 0;
7747
7748  /* scan symbol lengths, and sum code length counts */
7749  for (i = 0; i < num; ++i) t.table[lengths[off + i]]++;
7750
7751  t.table[0] = 0;
7752
7753  /* compute offset table for distribution sort */
7754  for (sum = 0, i = 0; i < 16; ++i) {
7755    offs[i] = sum;
7756    sum += t.table[i];
7757  }
7758
7759  /* create code->symbol translation table (symbols sorted by code) */
7760  for (i = 0; i < num; ++i) {
7761    if (lengths[off + i]) t.trans[offs[lengths[off + i]]++] = i;
7762  }
7763}
7764
7765/* ---------------------- *
7766 * -- decode functions -- *
7767 * ---------------------- */
7768
7769/* get one bit from source stream */
7770function tinf_getbit(d) {
7771  /* check if tag is empty */
7772  if (!d.bitcount--) {
7773    /* load next tag */
7774    d.tag = d.source[d.sourceIndex++];
7775    d.bitcount = 7;
7776  }
7777
7778  /* shift bit out of tag */
7779  var bit = d.tag & 1;
7780  d.tag >>>= 1;
7781
7782  return bit;
7783}
7784
7785/* read a num bit value from a stream and add base */
7786function tinf_read_bits(d, num, base) {
7787  if (!num)
7788    return base;
7789
7790  while (d.bitcount < 24) {
7791    d.tag |= d.source[d.sourceIndex++] << d.bitcount;
7792    d.bitcount += 8;
7793  }
7794
7795  var val = d.tag & (0xffff >>> (16 - num));
7796  d.tag >>>= num;
7797  d.bitcount -= num;
7798  return val + base;
7799}
7800
7801/* given a data stream and a tree, decode a symbol */
7802function tinf_decode_symbol(d, t) {
7803  while (d.bitcount < 24) {
7804    d.tag |= d.source[d.sourceIndex++] << d.bitcount;
7805    d.bitcount += 8;
7806  }
7807
7808  var sum = 0, cur = 0, len = 0;
7809  var tag = d.tag;
7810
7811  /* get more bits while code value is above sum */
7812  do {
7813    cur = 2 * cur + (tag & 1);
7814    tag >>>= 1;
7815    ++len;
7816
7817    sum += t.table[len];
7818    cur -= t.table[len];
7819  } while (cur >= 0);
7820
7821  d.tag = tag;
7822  d.bitcount -= len;
7823
7824  return t.trans[sum + cur];
7825}
7826
7827/* given a data stream, decode dynamic trees from it */
7828function tinf_decode_trees(d, lt, dt) {
7829  var hlit, hdist, hclen;
7830  var i, num, length;
7831
7832  /* get 5 bits HLIT (257-286) */
7833  hlit = tinf_read_bits(d, 5, 257);
7834
7835  /* get 5 bits HDIST (1-32) */
7836  hdist = tinf_read_bits(d, 5, 1);
7837
7838  /* get 4 bits HCLEN (4-19) */
7839  hclen = tinf_read_bits(d, 4, 4);
7840
7841  for (i = 0; i < 19; ++i) lengths[i] = 0;
7842
7843  /* read code lengths for code length alphabet */
7844  for (i = 0; i < hclen; ++i) {
7845    /* get 3 bits code length (0-7) */
7846    var clen = tinf_read_bits(d, 3, 0);
7847    lengths[clcidx[i]] = clen;
7848  }
7849
7850  /* build code length tree */
7851  tinf_build_tree(code_tree, lengths, 0, 19);
7852
7853  /* decode code lengths for the dynamic trees */
7854  for (num = 0; num < hlit + hdist;) {
7855    var sym = tinf_decode_symbol(d, code_tree);
7856
7857    switch (sym) {
7858      case 16:
7859        /* copy previous code length 3-6 times (read 2 bits) */
7860        var prev = lengths[num - 1];
7861        for (length = tinf_read_bits(d, 2, 3); length; --length) {
7862          lengths[num++] = prev;
7863        }
7864        break;
7865      case 17:
7866        /* repeat code length 0 for 3-10 times (read 3 bits) */
7867        for (length = tinf_read_bits(d, 3, 3); length; --length) {
7868          lengths[num++] = 0;
7869        }
7870        break;
7871      case 18:
7872        /* repeat code length 0 for 11-138 times (read 7 bits) */
7873        for (length = tinf_read_bits(d, 7, 11); length; --length) {
7874          lengths[num++] = 0;
7875        }
7876        break;
7877      default:
7878        /* values 0-15 represent the actual code lengths */
7879        lengths[num++] = sym;
7880        break;
7881    }
7882  }
7883
7884  /* build dynamic trees */
7885  tinf_build_tree(lt, lengths, 0, hlit);
7886  tinf_build_tree(dt, lengths, hlit, hdist);
7887}
7888
7889/* ----------------------------- *
7890 * -- block inflate functions -- *
7891 * ----------------------------- */
7892
7893/* given a stream and two trees, inflate a block of data */
7894function tinf_inflate_block_data(d, lt, dt) {
7895  while (1) {
7896    var sym = tinf_decode_symbol(d, lt);
7897
7898    /* check for end of block */
7899    if (sym === 256) {
7900      return TINF_OK;
7901    }
7902
7903    if (sym < 256) {
7904      d.dest[d.destLen++] = sym;
7905    } else {
7906      var length, dist, offs;
7907      var i;
7908
7909      sym -= 257;
7910
7911      /* possibly get more bits from length code */
7912      length = tinf_read_bits(d, length_bits[sym], length_base[sym]);
7913
7914      dist = tinf_decode_symbol(d, dt);
7915
7916      /* possibly get more bits from distance code */
7917      offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);
7918
7919      /* copy match */
7920      for (i = offs; i < offs + length; ++i) {
7921        d.dest[d.destLen++] = d.dest[i];
7922      }
7923    }
7924  }
7925}
7926
7927/* inflate an uncompressed block of data */
7928function tinf_inflate_uncompressed_block(d) {
7929  var length, invlength;
7930  var i;
7931
7932  /* unread from bitbuffer */
7933  while (d.bitcount > 8) {
7934    d.sourceIndex--;
7935    d.bitcount -= 8;
7936  }
7937
7938  /* get length */
7939  length = d.source[d.sourceIndex + 1];
7940  length = 256 * length + d.source[d.sourceIndex];
7941
7942  /* get one's complement of length */
7943  invlength = d.source[d.sourceIndex + 3];
7944  invlength = 256 * invlength + d.source[d.sourceIndex + 2];
7945
7946  /* check length */
7947  if (length !== (~invlength & 0x0000ffff))
7948    return TINF_DATA_ERROR;
7949
7950  d.sourceIndex += 4;
7951
7952  /* copy block */
7953  for (i = length; i; --i)
7954    d.dest[d.destLen++] = d.source[d.sourceIndex++];
7955
7956  /* make sure we start next block on a byte boundary */
7957  d.bitcount = 0;
7958
7959  return TINF_OK;
7960}
7961
7962/* inflate stream from source to dest */
7963function tinf_uncompress(source, dest) {
7964  var d = new Data(source, dest);
7965  var bfinal, btype, res;
7966
7967  do {
7968    /* read final block flag */
7969    bfinal = tinf_getbit(d);
7970
7971    /* read block type (2 bits) */
7972    btype = tinf_read_bits(d, 2, 0);
7973
7974    /* decompress block */
7975    switch (btype) {
7976      case 0:
7977        /* decompress uncompressed block */
7978        res = tinf_inflate_uncompressed_block(d);
7979        break;
7980      case 1:
7981        /* decompress block with fixed huffman trees */
7982        res = tinf_inflate_block_data(d, sltree, sdtree);
7983        break;
7984      case 2:
7985        /* decompress block with dynamic huffman trees */
7986        tinf_decode_trees(d, d.ltree, d.dtree);
7987        res = tinf_inflate_block_data(d, d.ltree, d.dtree);
7988        break;
7989      default:
7990        res = TINF_DATA_ERROR;
7991    }
7992
7993    if (res !== TINF_OK)
7994      throw new Error('Data error');
7995
7996  } while (!bfinal);
7997
7998  if (d.destLen < d.dest.length) {
7999    if (typeof d.dest.slice === 'function')
8000      return d.dest.slice(0, d.destLen);
8001    else
8002      return d.dest.subarray(0, d.destLen);
8003  }
8004
8005  return d.dest;
8006}
8007
8008/* -------------------- *
8009 * -- initialization -- *
8010 * -------------------- */
8011
8012/* build fixed huffman trees */
8013tinf_build_fixed_trees(sltree, sdtree);
8014
8015/* build extra bits and base tables */
8016tinf_build_bits_base(length_bits, length_base, 4, 3);
8017tinf_build_bits_base(dist_bits, dist_base, 2, 1);
8018
8019/* fix a special case */
8020length_bits[28] = 0;
8021length_base[28] = 258;
8022
8023module.exports = tinf_uncompress;
8024
8025
8026/***/ }),
8027/* 80 */
8028/***/ (function(module, exports, __webpack_require__) {
8029
8030"use strict";
8031
8032
8033var isString = __webpack_require__(0).isString;
8034var isArray = __webpack_require__(0).isArray;
8035var isUndefined = __webpack_require__(0).isUndefined;
8036var isNull = __webpack_require__(0).isNull;
8037
8038/**
8039 * Creates an instance of StyleContextStack used for style inheritance and style overrides
8040 *
8041 * @constructor
8042 * @this {StyleContextStack}
8043 * @param {Object} named styles dictionary
8044 * @param {Object} optional default style definition
8045 */
8046function StyleContextStack(styleDictionary, defaultStyle) {
8047	this.defaultStyle = defaultStyle || {};
8048	this.styleDictionary = styleDictionary;
8049	this.styleOverrides = [];
8050}
8051
8052/**
8053 * Creates cloned version of current stack
8054 * @return {StyleContextStack} current stack snapshot
8055 */
8056StyleContextStack.prototype.clone = function () {
8057	var stack = new StyleContextStack(this.styleDictionary, this.defaultStyle);
8058
8059	this.styleOverrides.forEach(function (item) {
8060		stack.styleOverrides.push(item);
8061	});
8062
8063	return stack;
8064};
8065
8066/**
8067 * Pushes style-name or style-overrides-object onto the stack for future evaluation
8068 *
8069 * @param {String|Object} styleNameOrOverride style-name (referring to styleDictionary) or
8070 *                                            a new dictionary defining overriding properties
8071 */
8072StyleContextStack.prototype.push = function (styleNameOrOverride) {
8073	this.styleOverrides.push(styleNameOrOverride);
8074};
8075
8076/**
8077 * Removes last style-name or style-overrides-object from the stack
8078 *
8079 * @param {Number} howMany - optional number of elements to be popped (if not specified,
8080 *                           one element will be removed from the stack)
8081 */
8082StyleContextStack.prototype.pop = function (howMany) {
8083	howMany = howMany || 1;
8084
8085	while (howMany-- > 0) {
8086		this.styleOverrides.pop();
8087	}
8088};
8089
8090/**
8091 * Creates a set of named styles or/and a style-overrides-object based on the item,
8092 * pushes those elements onto the stack for future evaluation and returns the number
8093 * of elements pushed, so they can be easily poped then.
8094 *
8095 * @param {Object} item - an object with optional style property and/or style overrides
8096 * @return the number of items pushed onto the stack
8097 */
8098StyleContextStack.prototype.autopush = function (item) {
8099	if (isString(item)) {
8100		return 0;
8101	}
8102
8103	var styleNames = [];
8104
8105	if (item.style) {
8106		if (isArray(item.style)) {
8107			styleNames = item.style;
8108		} else {
8109			styleNames = [item.style];
8110		}
8111	}
8112
8113	for (var i = 0, l = styleNames.length; i < l; i++) {
8114		this.push(styleNames[i]);
8115	}
8116
8117	var styleProperties = [
8118		'font',
8119		'fontSize',
8120		'fontFeatures',
8121		'bold',
8122		'italics',
8123		'alignment',
8124		'color',
8125		'columnGap',
8126		'fillColor',
8127		'decoration',
8128		'decorationStyle',
8129		'decorationColor',
8130		'background',
8131		'lineHeight',
8132		'characterSpacing',
8133		'noWrap',
8134		'markerColor',
8135		'leadingIndent'
8136			//'tableCellPadding'
8137			// 'cellBorder',
8138			// 'headerCellBorder',
8139			// 'oddRowCellBorder',
8140			// 'evenRowCellBorder',
8141			// 'tableBorder'
8142	];
8143	var styleOverrideObject = {};
8144	var pushStyleOverrideObject = false;
8145
8146	styleProperties.forEach(function (key) {
8147		if (!isUndefined(item[key]) && !isNull(item[key])) {
8148			styleOverrideObject[key] = item[key];
8149			pushStyleOverrideObject = true;
8150		}
8151	});
8152
8153	if (pushStyleOverrideObject) {
8154		this.push(styleOverrideObject);
8155	}
8156
8157	return styleNames.length + (pushStyleOverrideObject ? 1 : 0);
8158};
8159
8160/**
8161 * Automatically pushes elements onto the stack, using autopush based on item,
8162 * executes callback and then pops elements back. Returns value returned by callback
8163 *
8164 * @param  {Object}   item - an object with optional style property and/or style overrides
8165 * @param  {Function} function to be called between autopush and pop
8166 * @return {Object} value returned by callback
8167 */
8168StyleContextStack.prototype.auto = function (item, callback) {
8169	var pushedItems = this.autopush(item);
8170	var result = callback();
8171
8172	if (pushedItems > 0) {
8173		this.pop(pushedItems);
8174	}
8175
8176	return result;
8177};
8178
8179/**
8180 * Evaluates stack and returns value of a named property
8181 *
8182 * @param {String} property - property name
8183 * @return property value or null if not found
8184 */
8185StyleContextStack.prototype.getProperty = function (property) {
8186	if (this.styleOverrides) {
8187		for (var i = this.styleOverrides.length - 1; i >= 0; i--) {
8188			var item = this.styleOverrides[i];
8189
8190			if (isString(item)) {
8191				// named-style-override
8192				var style = this.styleDictionary[item];
8193				if (style && !isUndefined(style[property]) && !isNull(style[property])) {
8194					return style[property];
8195				}
8196			} else if (!isUndefined(item[property]) && !isNull(item[property])) {
8197				// style-overrides-object
8198				return item[property];
8199			}
8200		}
8201	}
8202
8203	return this.defaultStyle && this.defaultStyle[property];
8204};
8205
8206module.exports = StyleContextStack;
8207
8208
8209/***/ }),
8210/* 81 */
8211/***/ (function(module, exports, __webpack_require__) {
8212
8213"use strict";
8214
8215
8216var TraversalTracker = __webpack_require__(77);
8217var isString = __webpack_require__(0).isString;
8218
8219/**
8220 * Creates an instance of DocumentContext - a store for current x, y positions and available width/height.
8221 * It facilitates column divisions and vertical sync
8222 */
8223function DocumentContext(pageSize, pageMargins) {
8224	this.pages = [];
8225
8226	this.pageMargins = pageMargins;
8227
8228	this.x = pageMargins.left;
8229	this.availableWidth = pageSize.width - pageMargins.left - pageMargins.right;
8230	this.availableHeight = 0;
8231	this.page = -1;
8232
8233	this.snapshots = [];
8234
8235	this.endingCell = null;
8236
8237	this.tracker = new TraversalTracker();
8238
8239	this.addPage(pageSize);
8240
8241	this.hasBackground = false;
8242}
8243
8244DocumentContext.prototype.beginColumnGroup = function () {
8245	this.snapshots.push({
8246		x: this.x,
8247		y: this.y,
8248		availableHeight: this.availableHeight,
8249		availableWidth: this.availableWidth,
8250		page: this.page,
8251		bottomMost: {
8252			x: this.x,
8253			y: this.y,
8254			availableHeight: this.availableHeight,
8255			availableWidth: this.availableWidth,
8256			page: this.page
8257		},
8258		endingCell: this.endingCell,
8259		lastColumnWidth: this.lastColumnWidth
8260	});
8261
8262	this.lastColumnWidth = 0;
8263};
8264
8265DocumentContext.prototype.beginColumn = function (width, offset, endingCell) {
8266	var saved = this.snapshots[this.snapshots.length - 1];
8267
8268	this.calculateBottomMost(saved);
8269
8270	this.endingCell = endingCell;
8271	this.page = saved.page;
8272	this.x = this.x + this.lastColumnWidth + (offset || 0);
8273	this.y = saved.y;
8274	this.availableWidth = width;	//saved.availableWidth - offset;
8275	this.availableHeight = saved.availableHeight;
8276
8277	this.lastColumnWidth = width;
8278};
8279
8280DocumentContext.prototype.calculateBottomMost = function (destContext) {
8281	if (this.endingCell) {
8282		this.saveContextInEndingCell(this.endingCell);
8283		this.endingCell = null;
8284	} else {
8285		destContext.bottomMost = bottomMostContext(this, destContext.bottomMost);
8286	}
8287};
8288
8289DocumentContext.prototype.markEnding = function (endingCell) {
8290	this.page = endingCell._columnEndingContext.page;
8291	this.x = endingCell._columnEndingContext.x;
8292	this.y = endingCell._columnEndingContext.y;
8293	this.availableWidth = endingCell._columnEndingContext.availableWidth;
8294	this.availableHeight = endingCell._columnEndingContext.availableHeight;
8295	this.lastColumnWidth = endingCell._columnEndingContext.lastColumnWidth;
8296};
8297
8298DocumentContext.prototype.saveContextInEndingCell = function (endingCell) {
8299	endingCell._columnEndingContext = {
8300		page: this.page,
8301		x: this.x,
8302		y: this.y,
8303		availableHeight: this.availableHeight,
8304		availableWidth: this.availableWidth,
8305		lastColumnWidth: this.lastColumnWidth
8306	};
8307};
8308
8309DocumentContext.prototype.completeColumnGroup = function (height) {
8310	var saved = this.snapshots.pop();
8311
8312	this.calculateBottomMost(saved);
8313
8314	this.endingCell = null;
8315	this.x = saved.x;
8316
8317	var y = saved.bottomMost.y;
8318	if (height) {
8319		if (saved.page === saved.bottomMost.page) {
8320			if ((saved.y + height) > y) {
8321				y = saved.y + height;
8322			}
8323		} else {
8324			y += height;
8325		}
8326	}
8327
8328	this.y = y;
8329	this.page = saved.bottomMost.page;
8330	this.availableWidth = saved.availableWidth;
8331	this.availableHeight = saved.bottomMost.availableHeight;
8332	if (height) {
8333		this.availableHeight -= (y - saved.bottomMost.y);
8334	}
8335	this.lastColumnWidth = saved.lastColumnWidth;
8336};
8337
8338DocumentContext.prototype.addMargin = function (left, right) {
8339	this.x += left;
8340	this.availableWidth -= left + (right || 0);
8341};
8342
8343DocumentContext.prototype.moveDown = function (offset) {
8344	this.y += offset;
8345	this.availableHeight -= offset;
8346
8347	return this.availableHeight > 0;
8348};
8349
8350DocumentContext.prototype.initializePage = function () {
8351	this.y = this.pageMargins.top;
8352	this.availableHeight = this.getCurrentPage().pageSize.height - this.pageMargins.top - this.pageMargins.bottom;
8353	this.pageSnapshot().availableWidth = this.getCurrentPage().pageSize.width - this.pageMargins.left - this.pageMargins.right;
8354};
8355
8356DocumentContext.prototype.pageSnapshot = function () {
8357	if (this.snapshots[0]) {
8358		return this.snapshots[0];
8359	} else {
8360		return this;
8361	}
8362};
8363
8364DocumentContext.prototype.moveTo = function (x, y) {
8365	if (x !== undefined && x !== null) {
8366		this.x = x;
8367		this.availableWidth = this.getCurrentPage().pageSize.width - this.x - this.pageMargins.right;
8368	}
8369	if (y !== undefined && y !== null) {
8370		this.y = y;
8371		this.availableHeight = this.getCurrentPage().pageSize.height - this.y - this.pageMargins.bottom;
8372	}
8373};
8374
8375DocumentContext.prototype.beginDetachedBlock = function () {
8376	this.snapshots.push({
8377		x: this.x,
8378		y: this.y,
8379		availableHeight: this.availableHeight,
8380		availableWidth: this.availableWidth,
8381		page: this.page,
8382		endingCell: this.endingCell,
8383		lastColumnWidth: this.lastColumnWidth
8384	});
8385};
8386
8387DocumentContext.prototype.endDetachedBlock = function () {
8388	var saved = this.snapshots.pop();
8389
8390	this.x = saved.x;
8391	this.y = saved.y;
8392	this.availableWidth = saved.availableWidth;
8393	this.availableHeight = saved.availableHeight;
8394	this.page = saved.page;
8395	this.endingCell = saved.endingCell;
8396	this.lastColumnWidth = saved.lastColumnWidth;
8397};
8398
8399function pageOrientation(pageOrientationString, currentPageOrientation) {
8400	if (pageOrientationString === undefined) {
8401		return currentPageOrientation;
8402	} else if (isString(pageOrientationString) && (pageOrientationString.toLowerCase() === 'landscape')) {
8403		return 'landscape';
8404	} else {
8405		return 'portrait';
8406	}
8407}
8408
8409var getPageSize = function (currentPage, newPageOrientation) {
8410
8411	newPageOrientation = pageOrientation(newPageOrientation, currentPage.pageSize.orientation);
8412
8413	if (newPageOrientation !== currentPage.pageSize.orientation) {
8414		return {
8415			orientation: newPageOrientation,
8416			width: currentPage.pageSize.height,
8417			height: currentPage.pageSize.width
8418		};
8419	} else {
8420		return {
8421			orientation: currentPage.pageSize.orientation,
8422			width: currentPage.pageSize.width,
8423			height: currentPage.pageSize.height
8424		};
8425	}
8426
8427};
8428
8429
8430DocumentContext.prototype.moveToNextPage = function (pageOrientation) {
8431	var nextPageIndex = this.page + 1;
8432
8433	var prevPage = this.page;
8434	var prevY = this.y;
8435
8436	var createNewPage = nextPageIndex >= this.pages.length;
8437	if (createNewPage) {
8438		var currentAvailableWidth = this.availableWidth;
8439		var currentPageOrientation = this.getCurrentPage().pageSize.orientation;
8440
8441		var pageSize = getPageSize(this.getCurrentPage(), pageOrientation);
8442		this.addPage(pageSize);
8443
8444		if (currentPageOrientation === pageSize.orientation) {
8445			this.availableWidth = currentAvailableWidth;
8446		}
8447	} else {
8448		this.page = nextPageIndex;
8449		this.initializePage();
8450	}
8451
8452	return {
8453		newPageCreated: createNewPage,
8454		prevPage: prevPage,
8455		prevY: prevY,
8456		y: this.y
8457	};
8458};
8459
8460
8461DocumentContext.prototype.addPage = function (pageSize) {
8462	var page = {items: [], pageSize: pageSize};
8463	this.pages.push(page);
8464	this.page = this.pages.length - 1;
8465	this.initializePage();
8466
8467	this.tracker.emit('pageAdded');
8468
8469	return page;
8470};
8471
8472DocumentContext.prototype.getCurrentPage = function () {
8473	if (this.page < 0 || this.page >= this.pages.length) {
8474		return null;
8475	}
8476
8477	return this.pages[this.page];
8478};
8479
8480DocumentContext.prototype.getCurrentPosition = function () {
8481	var pageSize = this.getCurrentPage().pageSize;
8482	var innerHeight = pageSize.height - this.pageMargins.top - this.pageMargins.bottom;
8483	var innerWidth = pageSize.width - this.pageMargins.left - this.pageMargins.right;
8484
8485	return {
8486		pageNumber: this.page + 1,
8487		pageOrientation: pageSize.orientation,
8488		pageInnerHeight: innerHeight,
8489		pageInnerWidth: innerWidth,
8490		left: this.x,
8491		top: this.y,
8492		verticalRatio: ((this.y - this.pageMargins.top) / innerHeight),
8493		horizontalRatio: ((this.x - this.pageMargins.left) / innerWidth)
8494	};
8495};
8496
8497function bottomMostContext(c1, c2) {
8498	var r;
8499
8500	if (c1.page > c2.page) {
8501		r = c1;
8502	} else if (c2.page > c1.page) {
8503		r = c2;
8504	} else {
8505		r = (c1.y > c2.y) ? c1 : c2;
8506	}
8507
8508	return {
8509		page: r.page,
8510		x: r.x,
8511		y: r.y,
8512		availableHeight: r.availableHeight,
8513		availableWidth: r.availableWidth
8514	};
8515}
8516
8517module.exports = DocumentContext;
8518
8519
8520/***/ }),
8521/* 82 */
8522/***/ (function(module, exports, __webpack_require__) {
8523
8524"use strict";
8525
8526
8527/**
8528 * Creates an instance of Line
8529 *
8530 * @constructor
8531 * @this {Line}
8532 * @param {Number} Maximum width this line can have
8533 */
8534function Line(maxWidth) {
8535	this.maxWidth = maxWidth;
8536	this.leadingCut = 0;
8537	this.trailingCut = 0;
8538	this.inlineWidths = 0;
8539	this.inlines = [];
8540}
8541
8542Line.prototype.getAscenderHeight = function () {
8543	var y = 0;
8544
8545	this.inlines.forEach(function (inline) {
8546		y = Math.max(y, inline.font.ascender / 1000 * inline.fontSize);
8547	});
8548	return y;
8549};
8550
8551Line.prototype.hasEnoughSpaceForInline = function (inline) {
8552	if (this.inlines.length === 0) {
8553		return true;
8554	}
8555	if (this.newLineForced) {
8556		return false;
8557	}
8558
8559	return this.inlineWidths + inline.width - this.leadingCut - (inline.trailingCut || 0) <= this.maxWidth;
8560};
8561
8562Line.prototype.addInline = function (inline) {
8563	if (this.inlines.length === 0) {
8564		this.leadingCut = inline.leadingCut || 0;
8565	}
8566	this.trailingCut = inline.trailingCut || 0;
8567
8568	inline.x = this.inlineWidths - this.leadingCut;
8569
8570	this.inlines.push(inline);
8571	this.inlineWidths += inline.width;
8572
8573	if (inline.lineEnd) {
8574		this.newLineForced = true;
8575	}
8576};
8577
8578Line.prototype.getWidth = function () {
8579	return this.inlineWidths - this.leadingCut - this.trailingCut;
8580};
8581
8582/**
8583 * Returns line height
8584 * @return {Number}
8585 */
8586Line.prototype.getHeight = function () {
8587	var max = 0;
8588
8589	this.inlines.forEach(function (item) {
8590		max = Math.max(max, item.height || 0);
8591	});
8592
8593	return max;
8594};
8595
8596module.exports = Line;
8597
8598
8599/***/ }),
8600/* 83 */
8601/***/ (function(module, exports, __webpack_require__) {
8602
8603"use strict";
8604/* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors.
8605//
8606// Permission is hereby granted, free of charge, to any person obtaining a
8607// copy of this software and associated documentation files (the
8608// "Software"), to deal in the Software without restriction, including
8609// without limitation the rights to use, copy, modify, merge, publish,
8610// distribute, sublicense, and/or sell copies of the Software, and to permit
8611// persons to whom the Software is furnished to do so, subject to the
8612// following conditions:
8613//
8614// The above copyright notice and this permission notice shall be included
8615// in all copies or substantial portions of the Software.
8616//
8617// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
8618// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
8619// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
8620// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
8621// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
8622// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
8623// USE OR OTHER DEALINGS IN THE SOFTWARE.
8624
8625
8626
8627/*<replacement>*/
8628
8629var processNextTick = __webpack_require__(32).nextTick;
8630/*</replacement>*/
8631
8632module.exports = Readable;
8633
8634/*<replacement>*/
8635var isArray = __webpack_require__(76);
8636/*</replacement>*/
8637
8638/*<replacement>*/
8639var Duplex;
8640/*</replacement>*/
8641
8642Readable.ReadableState = ReadableState;
8643
8644/*<replacement>*/
8645var EE = __webpack_require__(31).EventEmitter;
8646
8647var EElistenerCount = function (emitter, type) {
8648  return emitter.listeners(type).length;
8649};
8650/*</replacement>*/
8651
8652/*<replacement>*/
8653var Stream = __webpack_require__(84);
8654/*</replacement>*/
8655
8656/*<replacement>*/
8657
8658var Buffer = __webpack_require__(33).Buffer;
8659var OurUint8Array = global.Uint8Array || function () {};
8660function _uint8ArrayToBuffer(chunk) {
8661  return Buffer.from(chunk);
8662}
8663function _isUint8Array(obj) {
8664  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
8665}
8666
8667/*</replacement>*/
8668
8669/*<replacement>*/
8670var util = __webpack_require__(25);
8671util.inherits = __webpack_require__(21);
8672/*</replacement>*/
8673
8674/*<replacement>*/
8675var debugUtil = __webpack_require__(139);
8676var debug = void 0;
8677if (debugUtil && debugUtil.debuglog) {
8678  debug = debugUtil.debuglog('stream');
8679} else {
8680  debug = function () {};
8681}
8682/*</replacement>*/
8683
8684var BufferList = __webpack_require__(140);
8685var destroyImpl = __webpack_require__(85);
8686var StringDecoder;
8687
8688util.inherits(Readable, Stream);
8689
8690var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
8691
8692function prependListener(emitter, event, fn) {
8693  // Sadly this is not cacheable as some libraries bundle their own
8694  // event emitter implementation with them.
8695  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
8696
8697  // This is a hack to make sure that our error handler is attached before any
8698  // userland ones.  NEVER DO THIS. This is here only because this code needs
8699  // to continue to work with older versions of Node.js that do not include
8700  // the prependListener() method. The goal is to eventually remove this hack.
8701  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);
vendor: 5,093 bytes, lines 8701-8859
8701else emitter._events[event] = [fn, emitter._events[event]];
8702}
8703
8704function ReadableState(options, stream) {
8705  Duplex = Duplex || __webpack_require__(16);
8706
8707  options = options || {};
8708
8709  // Duplex streams are both readable and writable, but share
8710  // the same options object.
8711  // However, some cases require setting options to different
8712  // values for the readable and the writable sides of the duplex stream.
8713  // These options can be provided separately as readableXXX and writableXXX.
8714  var isDuplex = stream instanceof Duplex;
8715
8716  // object stream flag. Used to make read(n) ignore n and to
8717  // make all the buffer merging and length checks go away
8718  this.objectMode = !!options.objectMode;
8719
8720  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
8721
8722  // the point at which it stops calling _read() to fill the buffer
8723  // Note: 0 is a valid value, means "don't call _read preemptively ever"
8724  var hwm = options.highWaterMark;
8725  var readableHwm = options.readableHighWaterMark;
8726  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
8727
8728  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;
8729
8730  // cast to ints.
8731  this.highWaterMark = Math.floor(this.highWaterMark);
8732
8733  // A linked list is used to store data chunks instead of an array because the
8734  // linked list can remove elements from the beginning faster than
8735  // array.shift()
8736  this.buffer = new BufferList();
8737  this.length = 0;
8738  this.pipes = null;
8739  this.pipesCount = 0;
8740  this.flowing = null;
8741  this.ended = false;
8742  this.endEmitted = false;
8743  this.reading = false;
8744
8745  // a flag to be able to tell if the event 'readable'/'data' is emitted
8746  // immediately, or on a later tick.  We set this to true at first, because
8747  // any actions that shouldn't happen until "later" should generally also
8748  // not happen before the first read call.
8749  this.sync = true;
8750
8751  // whenever we return null, then we set a flag to say
8752  // that we're awaiting a 'readable' event emission.
8753  this.needReadable = false;
8754  this.emittedReadable = false;
8755  this.readableListening = false;
8756  this.resumeScheduled = false;
8757
8758  // has it been destroyed
8759  this.destroyed = false;
8760
8761  // Crypto is kind of old and crusty.  Historically, its default string
8762  // encoding is 'binary' so we have to make this configurable.
8763  // Everything else in the universe uses 'utf8', though.
8764  this.defaultEncoding = options.defaultEncoding || 'utf8';
8765
8766  // the number of writers that are awaiting a drain event in .pipe()s
8767  this.awaitDrain = 0;
8768
8769  // if true, a maybeReadMore has been scheduled
8770  this.readingMore = false;
8771
8772  this.decoder = null;
8773  this.encoding = null;
8774  if (options.encoding) {
8775    if (!StringDecoder) StringDecoder = __webpack_require__(47).StringDecoder;
8776    this.decoder = new StringDecoder(options.encoding);
8777    this.encoding = options.encoding;
8778  }
8779}
8780
8781function Readable(options) {
8782  Duplex = Duplex || __webpack_require__(16);
8783
8784  if (!(this instanceof Readable)) return new Readable(options);
8785
8786  this._readableState = new ReadableState(options, this);
8787
8788  // legacy
8789  this.readable = true;
8790
8791  if (options) {
8792    if (typeof options.read === 'function') this._read = options.read;
8793
8794    if (typeof options.destroy === 'function') this._destroy = options.destroy;
8795  }
8796
8797  Stream.call(this);
8798}
8799
8800Object.defineProperty(Readable.prototype, 'destroyed', {
8801  get: function () {
8802    if (this._readableState === undefined) {
8803      return false;
8804    }
8805    return this._readableState.destroyed;
8806  },
8807  set: function (value) {
8808    // we ignore the value if the stream
8809    // has not been initialized yet
8810    if (!this._readableState) {
8811      return;
8812    }
8813
8814    // backward compatibility, the user is explicitly
8815    // managing destroyed
8816    this._readableState.destroyed = value;
8817  }
8818});
8819
8820Readable.prototype.destroy = destroyImpl.destroy;
8821Readable.prototype._undestroy = destroyImpl.undestroy;
8822Readable.prototype._destroy = function (err, cb) {
8823  this.push(null);
8824  cb(err);
8825};
8826
8827// Manually shove something into the read() buffer.
8828// This returns true if the highWaterMark has not been hit yet,
8829// similar to how Writable.write() returns true if you should
8830// write() some more.
8831Readable.prototype.push = function (chunk, encoding) {
8832  var state = this._readableState;
8833  var skipChunkCheck;
8834
8835  if (!state.objectMode) {
8836    if (typeof chunk === 'string') {
8837      encoding = encoding || state.defaultEncoding;
8838      if (encoding !== state.encoding) {
8839        chunk = Buffer.from(chunk, encoding);
8840        encoding = '';
8841      }
8842      skipChunkCheck = true;
8843    }
8844  } else {
8845    skipChunkCheck = true;
8846  }
8847
8848  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
8849};
8850
8851// Unshift should *always* be something directly out of read()
8852Readable.prototype.unshift = function (chunk) {
8853  return readableAddChunk(this, chunk, null, true, false);
8854};
8855
8856function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
8857  var state = stream._readableState;
8858  if (chunk === null) {
8859    state.reading = false;
vendor: 2,542 bytes, lines 8860-8931
8860    onEofChunk(stream, state);
8861  } else {
8862    var er;
8863    if (!skipChunkCheck) er = chunkInvalid(state, chunk);
8864    if (er) {
8865      stream.emit('error', er);
8866    } else if (state.objectMode || chunk && chunk.length > 0) {
8867      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
8868        chunk = _uint8ArrayToBuffer(chunk);
8869      }
8870
8871      if (addToFront) {
8872        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
8873      } else if (state.ended) {
8874        stream.emit('error', new Error('stream.push() after EOF'));
8875      } else {
8876        state.reading = false;
8877        if (state.decoder && !encoding) {
8878          chunk = state.decoder.write(chunk);
8879          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
8880        } else {
8881          addChunk(stream, state, chunk, false);
8882        }
8883      }
8884    } else if (!addToFront) {
8885      state.reading = false;
8886    }
8887  }
8888
8889  return needMoreData(state);
8890}
8891
8892function addChunk(stream, state, chunk, addToFront) {
8893  if (state.flowing && state.length === 0 && !state.sync) {
8894    stream.emit('data', chunk);
8895    stream.read(0);
8896  } else {
8897    // update the buffer info.
8898    state.length += state.objectMode ? 1 : chunk.length;
8899    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
8900
8901    if (state.needReadable) emitReadable(stream);
8902  }
8903  maybeReadMore(stream, state);
8904}
8905
8906function chunkInvalid(state, chunk) {
8907  var er;
8908  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
8909    er = new TypeError('Invalid non-string/buffer chunk');
8910  }
8911  return er;
8912}
8913
8914// if it's past the high water mark, we can push in some more.
8915// Also, if we have no data yet, we can stand some
8916// more bytes.  This is to work around cases where hwm=0,
8917// such as the repl.  Also, if the push() triggered a
8918// readable event, and the user called read(largeNumber) such that
8919// needReadable was set, then we ought to push more, so that another
8920// 'readable' event will be triggered.
8921function needMoreData(state) {
8922  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
8923}
8924
8925Readable.prototype.isPaused = function () {
8926  return this._readableState.flowing === false;
8927};
8928
8929// backwards compatibility.
8930Readable.prototype.setEncoding = function (enc) {
8931  if (!StringDecoder) StringDecoder = __webpack_require__(47
vendor: 14,902 bytes, lines 8931-9423
8931).StringDecoder;
8932  this._readableState.decoder = new StringDecoder(enc);
8933  this._readableState.encoding = enc;
8934  return this;
8935};
8936
8937// Don't raise the hwm > 8MB
8938var MAX_HWM = 0x800000;
8939function computeNewHighWaterMark(n) {
8940  if (n >= MAX_HWM) {
8941    n = MAX_HWM;
8942  } else {
8943    // Get the next highest power of 2 to prevent increasing hwm excessively in
8944    // tiny amounts
8945    n--;
8946    n |= n >>> 1;
8947    n |= n >>> 2;
8948    n |= n >>> 4;
8949    n |= n >>> 8;
8950    n |= n >>> 16;
8951    n++;
8952  }
8953  return n;
8954}
8955
8956// This function is designed to be inlinable, so please take care when making
8957// changes to the function body.
8958function howMuchToRead(n, state) {
8959  if (n <= 0 || state.length === 0 && state.ended) return 0;
8960  if (state.objectMode) return 1;
8961  if (n !== n) {
8962    // Only flow one buffer at a time
8963    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
8964  }
8965  // If we're asking for more than the current hwm, then raise the hwm.
8966  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
8967  if (n <= state.length) return n;
8968  // Don't have enough
8969  if (!state.ended) {
8970    state.needReadable = true;
8971    return 0;
8972  }
8973  return state.length;
8974}
8975
8976// you can override either this method, or the async _read(n) below.
8977Readable.prototype.read = function (n) {
8978  debug('read', n);
8979  n = parseInt(n, 10);
8980  var state = this._readableState;
8981  var nOrig = n;
8982
8983  if (n !== 0) state.emittedReadable = false;
8984
8985  // if we're doing read(0) to trigger a readable event, but we
8986  // already have a bunch of data in the buffer, then just trigger
8987  // the 'readable' event and move on.
8988  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
8989    debug('read: emitReadable', state.length, state.ended);
8990    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
8991    return null;
8992  }
8993
8994  n = howMuchToRead(n, state);
8995
8996  // if we've ended, and we're now clear, then finish it up.
8997  if (n === 0 && state.ended) {
8998    if (state.length === 0) endReadable(this);
8999    return null;
9000  }
9001
9002  // All the actual chunk generation logic needs to be
9003  // *below* the call to _read.  The reason is that in certain
9004  // synthetic stream cases, such as passthrough streams, _read
9005  // may be a completely synchronous operation which may change
9006  // the state of the read buffer, providing enough data when
9007  // before there was *not* enough.
9008  //
9009  // So, the steps are:
9010  // 1. Figure out what the state of things will be after we do
9011  // a read from the buffer.
9012  //
9013  // 2. If that resulting state will trigger a _read, then call _read.
9014  // Note that this may be asynchronous, or synchronous.  Yes, it is
9015  // deeply ugly to write APIs this way, but that still doesn't mean
9016  // that the Readable class should behave improperly, as streams are
9017  // designed to be sync/async agnostic.
9018  // Take note if the _read call is sync or async (ie, if the read call
9019  // has returned yet), so that we know whether or not it's safe to emit
9020  // 'readable' etc.
9021  //
9022  // 3. Actually pull the requested chunks out of the buffer and return.
9023
9024  // if we need a readable event, then we need to do some reading.
9025  var doRead = state.needReadable;
9026  debug('need readable', doRead);
9027
9028  // if we currently have less than the highWaterMark, then also read some
9029  if (state.length === 0 || state.length - n < state.highWaterMark) {
9030    doRead = true;
9031    debug('length less than watermark', doRead);
9032  }
9033
9034  // however, if we've ended, then there's no point, and if we're already
9035  // reading, then it's unnecessary.
9036  if (state.ended || state.reading) {
9037    doRead = false;
9038    debug('reading or ended', doRead);
9039  } else if (doRead) {
9040    debug('do read');
9041    state.reading = true;
9042    state.sync = true;
9043    // if the length is currently zero, then we *need* a readable event.
9044    if (state.length === 0) state.needReadable = true;
9045    // call internal read method
9046    this._read(state.highWaterMark);
9047    state.sync = false;
9048    // If _read pushed data synchronously, then `reading` will be false,
9049    // and we need to re-evaluate how much data we can return to the user.
9050    if (!state.reading) n = howMuchToRead(nOrig, state);
9051  }
9052
9053  var ret;
9054  if (n > 0) ret = fromList(n, state);else ret = null;
9055
9056  if (ret === null) {
9057    state.needReadable = true;
9058    n = 0;
9059  } else {
9060    state.length -= n;
9061  }
9062
9063  if (state.length === 0) {
9064    // If we have nothing in the buffer, then we want to know
9065    // as soon as we *do* get something into the buffer.
9066    if (!state.ended) state.needReadable = true;
9067
9068    // If we tried to read() past the EOF, then emit end on the next tick.
9069    if (nOrig !== n && state.ended) endReadable(this);
9070  }
9071
9072  if (ret !== null) this.emit('data', ret);
9073
9074  return ret;
9075};
9076
9077function onEofChunk(stream, state) {
9078  if (state.ended) return;
9079  if (state.decoder) {
9080    var chunk = state.decoder.end();
9081    if (chunk && chunk.length) {
9082      state.buffer.push(chunk);
9083      state.length += state.objectMode ? 1 : chunk.length;
9084    }
9085  }
9086  state.ended = true;
9087
9088  // emit 'readable' now to make sure it gets picked up.
9089  emitReadable(stream);
9090}
9091
9092// Don't emit readable right away in sync mode, because this can trigger
9093// another read() call => stack overflow.  This way, it might trigger
9094// a nextTick recursion warning, but that's not so bad.
9095function emitReadable(stream) {
9096  var state = stream._readableState;
9097  state.needReadable = false;
9098  if (!state.emittedReadable) {
9099    debug('emitReadable', state.flowing);
9100    state.emittedReadable = true;
9101    if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
9102  }
9103}
9104
9105function emitReadable_(stream) {
9106  debug('emit readable');
9107  stream.emit('readable');
9108  flow(stream);
9109}
9110
9111// at this point, the user has presumably seen the 'readable' event,
9112// and called read() to consume some data.  that may have triggered
9113// in turn another _read(n) call, in which case reading = true if
9114// it's in progress.
9115// However, if we're not ended, or reading, and the length < hwm,
9116// then go ahead and try to read some more preemptively.
9117function maybeReadMore(stream, state) {
9118  if (!state.readingMore) {
9119    state.readingMore = true;
9120    processNextTick(maybeReadMore_, stream, state);
9121  }
9122}
9123
9124function maybeReadMore_(stream, state) {
9125  var len = state.length;
9126  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
9127    debug('maybeReadMore read 0');
9128    stream.read(0);
9129    if (len === state.length)
9130      // didn't get any data, stop spinning.
9131      break;else len = state.length;
9132  }
9133  state.readingMore = false;
9134}
9135
9136// abstract method.  to be overridden in specific implementation classes.
9137// call cb(er, data) where data is <= n in length.
9138// for virtual (non-string, non-buffer) streams, "length" is somewhat
9139// arbitrary, and perhaps not very meaningful.
9140Readable.prototype._read = function (n) {
9141  this.emit('error', new Error('_read() is not implemented'));
9142};
9143
9144Readable.prototype.pipe = function (dest, pipeOpts) {
9145  var src = this;
9146  var state = this._readableState;
9147
9148  switch (state.pipesCount) {
9149    case 0:
9150      state.pipes = dest;
9151      break;
9152    case 1:
9153      state.pipes = [state.pipes, dest];
9154      break;
9155    default:
9156      state.pipes.push(dest);
9157      break;
9158  }
9159  state.pipesCount += 1;
9160  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
9161
9162  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
9163
9164  var endFn = doEnd ? onend : unpipe;
9165  if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
9166
9167  dest.on('unpipe', onunpipe);
9168  function onunpipe(readable, unpipeInfo) {
9169    debug('onunpipe');
9170    if (readable === src) {
9171      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
9172        unpipeInfo.hasUnpiped = true;
9173        cleanup();
9174      }
9175    }
9176  }
9177
9178  function onend() {
9179    debug('onend');
9180    dest.end();
9181  }
9182
9183  // when the dest drains, it reduces the awaitDrain counter
9184  // on the source.  This would be more elegant with a .once()
9185  // handler in flow(), but adding and removing repeatedly is
9186  // too slow.
9187  var ondrain = pipeOnDrain(src);
9188  dest.on('drain', ondrain);
9189
9190  var cleanedUp = false;
9191  function cleanup() {
9192    debug('cleanup');
9193    // cleanup event handlers once the pipe is broken
9194    dest.removeListener('close', onclose);
9195    dest.removeListener('finish', onfinish);
9196    dest.removeListener('drain', ondrain);
9197    dest.removeListener('error', onerror);
9198    dest.removeListener('unpipe', onunpipe);
9199    src.removeListener('end', onend);
9200    src.removeListener('end', unpipe);
9201    src.removeListener('data', ondata);
9202
9203    cleanedUp = true;
9204
9205    // if the reader is waiting for a drain event from this
9206    // specific writer, then it would cause it to never start
9207    // flowing again.
9208    // So, if this is awaiting a drain, then we just call it now.
9209    // If we don't know, then assume that we are waiting for one.
9210    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
9211  }
9212
9213  // If the user pushes more data while we're writing to dest then we'll end up
9214  // in ondata again. However, we only want to increase awaitDrain once because
9215  // dest will only emit one 'drain' event for the multiple writes.
9216  // => Introduce a guard on increasing awaitDrain.
9217  var increasedAwaitDrain = false;
9218  src.on('data', ondata);
9219  function ondata(chunk) {
9220    debug('ondata');
9221    increasedAwaitDrain = false;
9222    var ret = dest.write(chunk);
9223    if (false === ret && !increasedAwaitDrain) {
9224      // If the user unpiped during `dest.write()`, it is possible
9225      // to get stuck in a permanently paused state if that write
9226      // also returned false.
9227      // => Check whether `dest` is still a piping destination.
9228      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
9229        debug('false write response, pause', src._readableState.awaitDrain);
9230        src._readableState.awaitDrain++;
9231        increasedAwaitDrain = true;
9232      }
9233      src.pause();
9234    }
9235  }
9236
9237  // if the dest has an error, then stop piping into it.
9238  // however, don't suppress the throwing behavior for this.
9239  function onerror(er) {
9240    debug('onerror', er);
9241    unpipe();
9242    dest.removeListener('error', onerror);
9243    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
9244  }
9245
9246  // Make sure our error handler is attached before userland ones.
9247  prependListener(dest, 'error', onerror);
9248
9249  // Both close and finish should trigger unpipe, but only once.
9250  function onclose() {
9251    dest.removeListener('finish', onfinish);
9252    unpipe();
9253  }
9254  dest.once('close', onclose);
9255  function onfinish() {
9256    debug('onfinish');
9257    dest.removeListener('close', onclose);
9258    unpipe();
9259  }
9260  dest.once('finish', onfinish);
9261
9262  function unpipe() {
9263    debug('unpipe');
9264    src.unpipe(dest);
9265  }
9266
9267  // tell the dest that it's being piped to
9268  dest.emit('pipe', src);
9269
9270  // start the flow if it hasn't been started already.
9271  if (!state.flowing) {
9272    debug('pipe resume');
9273    src.resume();
9274  }
9275
9276  return dest;
9277};
9278
9279function pipeOnDrain(src) {
9280  return function () {
9281    var state = src._readableState;
9282    debug('pipeOnDrain', state.awaitDrain);
9283    if (state.awaitDrain) state.awaitDrain--;
9284    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
9285      state.flowing = true;
9286      flow(src);
9287    }
9288  };
9289}
9290
9291Readable.prototype.unpipe = function (dest) {
9292  var state = this._readableState;
9293  var unpipeInfo = { hasUnpiped: false };
9294
9295  // if we're not piping anywhere, then do nothing.
9296  if (state.pipesCount === 0) return this;
9297
9298  // just one destination.  most common case.
9299  if (state.pipesCount === 1) {
9300    // passed in one, but it's not the right one.
9301    if (dest && dest !== state.pipes) return this;
9302
9303    if (!dest) dest = state.pipes;
9304
9305    // got a match.
9306    state.pipes = null;
9307    state.pipesCount = 0;
9308    state.flowing = false;
9309    if (dest) dest.emit('unpipe', this, unpipeInfo);
9310    return this;
9311  }
9312
9313  // slow case. multiple pipe destinations.
9314
9315  if (!dest) {
9316    // remove all.
9317    var dests = state.pipes;
9318    var len = state.pipesCount;
9319    state.pipes = null;
9320    state.pipesCount = 0;
9321    state.flowing = false;
9322
9323    for (var i = 0; i < len; i++) {
9324      dests[i].emit('unpipe', this, unpipeInfo);
9325    }return this;
9326  }
9327
9328  // try to find the right one.
9329  var index = indexOf(state.pipes, dest);
9330  if (index === -1) return this;
9331
9332  state.pipes.splice(index, 1);
9333  state.pipesCount -= 1;
9334  if (state.pipesCount === 1) state.pipes = state.pipes[0];
9335
9336  dest.emit('unpipe', this, unpipeInfo);
9337
9338  return this;
9339};
9340
9341// set up data events if they are asked for
9342// Ensure readable listeners eventually get something
9343Readable.prototype.on = function (ev, fn) {
9344  var res = Stream.prototype.on.call(this, ev, fn);
9345
9346  if (ev === 'data') {
9347    // Start flowing on next tick if stream isn't explicitly paused
9348    if (this._readableState.flowing !== false) this.resume();
9349  } else if (ev === 'readable') {
9350    var state = this._readableState;
9351    if (!state.endEmitted && !state.readableListening) {
9352      state.readableListening = state.needReadable = true;
9353      state.emittedReadable = false;
9354      if (!state.reading) {
9355        processNextTick(nReadingNextTick, this);
9356      } else if (state.length) {
9357        emitReadable(this);
9358      }
9359    }
9360  }
9361
9362  return res;
9363};
9364Readable.prototype.addListener = Readable.prototype.on;
9365
9366function nReadingNextTick(self) {
9367  debug('readable nexttick read 0');
9368  self.read(0);
9369}
9370
9371// pause() and resume() are remnants of the legacy readable stream API
9372// If the user uses them, then switch into old mode.
9373Readable.prototype.resume = function () {
9374  var state = this._readableState;
9375  if (!state.flowing) {
9376    debug('resume');
9377    state.flowing = true;
9378    resume(this, state);
9379  }
9380  return this;
9381};
9382
9383function resume(stream, state) {
9384  if (!state.resumeScheduled) {
9385    state.resumeScheduled = true;
9386    processNextTick(resume_, stream, state);
9387  }
9388}
9389
9390function resume_(stream, state) {
9391  if (!state.reading) {
9392    debug('resume read 0');
9393    stream.read(0);
9394  }
9395
9396  state.resumeScheduled = false;
9397  state.awaitDrain = 0;
9398  stream.emit('resume');
9399  flow(stream);
9400  if (state.flowing && !state.reading) stream.read(0);
9401}
9402
9403Readable.prototype.pause = function () {
9404  debug('call pause flowing=%j', this._readableState.flowing);
9405  if (false !== this._readableState.flowing) {
9406    debug('pause');
9407    this._readableState.flowing = false;
9408    this.emit('pause');
9409  }
9410  return this;
9411};
9412
9413function flow(stream) {
9414  var state = stream._readableState;
9415  debug('flow', state.flowing);
9416  while (state.flowing && stream.read() !== null) {}
9417}
9418
9419// wrap an old-style stream as the async data source.
9420// This is *not* part of the readable stream interface.
9421// It is an ugly unfortunate mess of history.
9422Readable.prototype.wrap = function (stream) {
9423  var 
vendor: 5,057 bytes, lines 9423-9602
9423_this = this;
9424
9425  var state = this._readableState;
9426  var paused = false;
9427
9428  stream.on('end', function () {
9429    debug('wrapped end');
9430    if (state.decoder && !state.ended) {
9431      var chunk = state.decoder.end();
9432      if (chunk && chunk.length) _this.push(chunk);
9433    }
9434
9435    _this.push(null);
9436  });
9437
9438  stream.on('data', function (chunk) {
9439    debug('wrapped data');
9440    if (state.decoder) chunk = state.decoder.write(chunk);
9441
9442    // don't skip over falsy values in objectMode
9443    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
9444
9445    var ret = _this.push(chunk);
9446    if (!ret) {
9447      paused = true;
9448      stream.pause();
9449    }
9450  });
9451
9452  // proxy all the other methods.
9453  // important when wrapping filters and duplexes.
9454  for (var i in stream) {
9455    if (this[i] === undefined && typeof stream[i] === 'function') {
9456      this[i] = function (method) {
9457        return function () {
9458          return stream[method].apply(stream, arguments);
9459        };
9460      }(i);
9461    }
9462  }
9463
9464  // proxy certain important events.
9465  for (var n = 0; n < kProxyEvents.length; n++) {
9466    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
9467  }
9468
9469  // when we try to consume some more bytes, simply unpause the
9470  // underlying stream.
9471  this._read = function (n) {
9472    debug('wrapped _read', n);
9473    if (paused) {
9474      paused = false;
9475      stream.resume();
9476    }
9477  };
9478
9479  return this;
9480};
9481
9482// exposed for testing purposes only.
9483Readable._fromList = fromList;
9484
9485// Pluck off n bytes from an array of buffers.
9486// Length is the combined lengths of all the buffers in the list.
9487// This function is designed to be inlinable, so please take care when making
9488// changes to the function body.
9489function fromList(n, state) {
9490  // nothing buffered
9491  if (state.length === 0) return null;
9492
9493  var ret;
9494  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
9495    // read it all, truncate the list
9496    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
9497    state.buffer.clear();
9498  } else {
9499    // read part of list
9500    ret = fromListPartial(n, state.buffer, state.decoder);
9501  }
9502
9503  return ret;
9504}
9505
9506// Extracts only enough buffered data to satisfy the amount requested.
9507// This function is designed to be inlinable, so please take care when making
9508// changes to the function body.
9509function fromListPartial(n, list, hasStrings) {
9510  var ret;
9511  if (n < list.head.data.length) {
9512    // slice is the same for buffers and strings
9513    ret = list.head.data.slice(0, n);
9514    list.head.data = list.head.data.slice(n);
9515  } else if (n === list.head.data.length) {
9516    // first chunk is a perfect match
9517    ret = list.shift();
9518  } else {
9519    // result spans more than one buffer
9520    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
9521  }
9522  return ret;
9523}
9524
9525// Copies a specified amount of characters from the list of buffered data
9526// chunks.
9527// This function is designed to be inlinable, so please take care when making
9528// changes to the function body.
9529function copyFromBufferString(n, list) {
9530  var p = list.head;
9531  var c = 1;
9532  var ret = p.data;
9533  n -= ret.length;
9534  while (p = p.next) {
9535    var str = p.data;
9536    var nb = n > str.length ? str.length : n;
9537    if (nb === str.length) ret += str;else ret += str.slice(0, n);
9538    n -= nb;
9539    if (n === 0) {
9540      if (nb === str.length) {
9541        ++c;
9542        if (p.next) list.head = p.next;else list.head = list.tail = null;
9543      } else {
9544        list.head = p;
9545        p.data = str.slice(nb);
9546      }
9547      break;
9548    }
9549    ++c;
9550  }
9551  list.length -= c;
9552  return ret;
9553}
9554
9555// Copies a specified amount of bytes from the list of buffered data chunks.
9556// This function is designed to be inlinable, so please take care when making
9557// changes to the function body.
9558function copyFromBuffer(n, list) {
9559  var ret = Buffer.allocUnsafe(n);
9560  var p = list.head;
9561  var c = 1;
9562  p.data.copy(ret);
9563  n -= p.data.length;
9564  while (p = p.next) {
9565    var buf = p.data;
9566    var nb = n > buf.length ? buf.length : n;
9567    buf.copy(ret, ret.length - n, 0, nb);
9568    n -= nb;
9569    if (n === 0) {
9570      if (nb === buf.length) {
9571        ++c;
9572        if (p.next) list.head = p.next;else list.head = list.tail = null;
9573      } else {
9574        list.head = p;
9575        p.data = buf.slice(nb);
9576      }
9577      break;
9578    }
9579    ++c;
9580  }
9581  list.length -= c;
9582  return ret;
9583}
9584
9585function endReadable(stream) {
9586  var state = stream._readableState;
9587
9588  // If we get here before consuming all the bytes, then that is a
9589  // bug in node.  Should never happen.
9590  if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
9591
9592  if (!state.endEmitted) {
9593    state.ended = true;
9594    processNextTick(endReadableNT, state, stream);
9595  }
9596}
9597
9598function endReadableNT(state, stream) {
9599  // Check that we didn't get one last unshift.
9600  if (!state.endEmitted && state.length === 0) {
9601    state.endEmitted = true;
9602    stream.readable = false;
vendor: 2,515 bytes, lines 9603-9712
9603    stream.emit('end');
9604  }
9605}
9606
9607function forEach(xs, f) {
9608  for (var i = 0, l = xs.length; i < l; i++) {
9609    f(xs[i], i);
9610  }
9611}
9612
9613function indexOf(xs, x) {
9614  for (var i = 0, l = xs.length; i < l; i++) {
9615    if (xs[i] === x) return i;
9616  }
9617  return -1;
9618}
9619/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7), __webpack_require__(11)))
9620
9621/***/ }),
9622/* 84 */
9623/***/ (function(module, exports, __webpack_require__) {
9624
9625module.exports = __webpack_require__(31).EventEmitter;
9626
9627
9628/***/ }),
9629/* 85 */
9630/***/ (function(module, exports, __webpack_require__) {
9631
9632"use strict";
9633
9634
9635/*<replacement>*/
9636
9637var processNextTick = __webpack_require__(32).nextTick;
9638/*</replacement>*/
9639
9640// undocumented cb() API, needed for core, not for public API
9641function destroy(err, cb) {
9642  var _this = this;
9643
9644  var readableDestroyed = this._readableState && this._readableState.destroyed;
9645  var writableDestroyed = this._writableState && this._writableState.destroyed;
9646
9647  if (readableDestroyed || writableDestroyed) {
9648    if (cb) {
9649      cb(err);
9650    } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
9651      processNextTick(emitErrorNT, this, err);
9652    }
9653    return this;
9654  }
9655
9656  // we set destroyed to true before firing error callbacks in order
9657  // to make it re-entrance safe in case destroy() is called within callbacks
9658
9659  if (this._readableState) {
9660    this._readableState.destroyed = true;
9661  }
9662
9663  // if this is a duplex stream mark the writable part as destroyed as well
9664  if (this._writableState) {
9665    this._writableState.destroyed = true;
9666  }
9667
9668  this._destroy(err || null, function (err) {
9669    if (!cb && err) {
9670      processNextTick(emitErrorNT, _this, err);
9671      if (_this._writableState) {
9672        _this._writableState.errorEmitted = true;
9673      }
9674    } else if (cb) {
9675      cb(err);
9676    }
9677  });
9678
9679  return this;
9680}
9681
9682function undestroy() {
9683  if (this._readableState) {
9684    this._readableState.destroyed = false;
9685    this._readableState.reading = false;
9686    this._readableState.ended = false;
9687    this._readableState.endEmitted = false;
9688  }
9689
9690  if (this._writableState) {
9691    this._writableState.destroyed = false;
9692    this._writableState.ended = false;
9693    this._writableState.ending = false;
9694    this._writableState.finished = false;
9695    this._writableState.errorEmitted = false;
9696  }
9697}
9698
9699function emitErrorNT(self, err) {
9700  self.emit('error', err);
9701}
9702
9703module.exports = {
9704  destroy: destroy,
9705  undestroy: undestroy
9706};
9707
9708/***/ }),
9709/* 86 */
9710/***/ (function(module, exports, __webpack_require__) {
9711
9712"use strict";
9713// Copyright Joyent, Inc. and other Node contributors.
9714//
9715// Permission is hereby granted, free of charge, to any person obtaining a
9716// copy of this software and associated documentation files (the
9717// "Software"), to deal in the Software without restriction, including
9718// without limitation the rights to use, copy, modify, merge, publish,
9719// distribute, sublicense, and/or sell copies of the Software, and to permit
9720// persons to whom the Software is furnished to do so, subject to the
9721// following conditions:
9722//
9723// The above copyright notice and this permission notice shall be included
9724// in all copies or substantial portions of the Software.
9725//
9726// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9727// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9728// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9729// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9730// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9731// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9732// USE OR OTHER DEALINGS IN THE SOFTWARE.
9733
9734// a transform stream is a readable/writable stream where you do
9735// something with the data.  Sometimes it's called a "filter",
9736// but that's not a great name for it, since that implies a thing where
9737// some bits pass through, and others are simply ignored.  (That would
9738// be a valid example of a transform, of course.)
9739//
9740// While the output is causally related to the input, it's not a
9741// necessarily symmetric or synchronous transformation.  For example,
9742// a zlib stream might take multiple plain-text writes(), and then
9743// emit a single compressed chunk some time in the future.
9744//
9745// Here's how this works:
9746//
9747// The Transform stream has all the aspects of the readable and writable
9748// stream classes.  When you write(chunk), that calls _write(chunk,cb)
9749// internally, and returns false if there's a lot of pending writes
9750// buffered up.  When you call read(), that calls _read(n) until
9751// there's enough pending readable data buffered up.
9752//
9753// In a transform stream, the written data is placed in a buffer.  When
9754// _read(n) is called, it transforms the queued up data, calling the
9755// buffered _write cb's as it consumes chunks.  If consuming a single
9756// written chunk would result in multiple output chunks, then the first
9757// outputted bit calls the readcb, and subsequent chunks just go into
9758// the read buffer, and will cause it to emit 'readable' if necessary.
9759//
9760// This way, back-pressure is actually determined by the reading side,
9761// since _read has to be called to start processing a new chunk.  However,
9762// a pathological inflate type of transform can cause excessive buffering
9763// here.  For example, imagine a stream where every byte of input is
9764// interpreted as an integer from 0-255, and then results in that many
9765// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
9766// 1kb of data being output.  In this case, you could write a very small
9767// amount of input, and end up with a very large amount of output.  In
9768// such a pathological inflating mechanism, there'd be no way to tell
9769// the system to stop doing the transform.  A single 4MB write could
9770// cause the system to run out of memory.
9771//
9772// However, even in such a pathological case, only a single written chunk
9773// would be consumed, and then the rest would wait (un-transformed) until
9774// the results of the previous transformed chunk were consumed.
9775
9776
9777
9778module.exports = Transform;
9779
9780var Duplex = __webpack_require__(16);
9781
9782/*<replacement>*/
9783var util = __webpack_require__(25);
9784util.inherits = __webpack_require__(21);
9785/*</replacement>*/
9786
9787util.inherits(Transform, Duplex);
9788
9789function afterTransform(er, data) {
9790  var ts = this._transformState;
9791  ts.transforming = false;
9792
9793  var cb = ts.writecb;
9794
9795  if (!cb) {
9796    return this.emit('error', new Error('write callback called multiple times'));
9797  }
9798
9799  ts.writechunk = null;
9800  ts.writecb = null;
9801
9802  if (data != null) // single equals check for both `null` and `undefined`
9803    this.push(data);
9804
9805  cb(er);
9806
9807  var rs = this._readableState;
9808  rs.reading = false;
9809  if (rs.needReadable || rs.length < rs.highWaterMark) {
9810    this._read(rs.highWaterMark);
9811  }
9812}
9813
9814function Transform(options) {
9815  if (!(this instanceof Transform)) return new Transform(options);
9816
9817  Duplex.call(this, options);
9818
9819  this._transformState = {
9820    afterTransform: afterTransform.bind(this),
9821    needTransform: false,
9822    transforming: false,
9823    writecb: null,
9824    writechunk: null,
9825    writeencoding: null
9826  };
9827
9828  // start out asking for a readable event once data is transformed.
9829  this._readableState.needReadable = true;
9830
9831  // we have implemented the _read method, and done the other things
9832  // that Readable wants before the first _read call, so unset the
9833  // sync guard flag.
9834  this._readableState.sync = false;
9835
9836  if (options) {
9837    if (typeof options.transform === 'function') this._transform = options.transform;
9838
9839    if (typeof options.flush === 'function') this._flush = options.flush;
9840  }
9841
9842  // When the writable side finishes, then flush out anything remaining.
9843  this.on('prefinish', prefinish);
9844}
9845
9846function prefinish() {
9847  var _this = this;
9848
9849  if (typeof this._flush === 'function') {
9850    this._flush(function (er, data) {
9851      done(_this, er, data);
9852    });
9853  } else {
9854    done(this, null, null);
9855  }
9856}
9857
9858Transform.prototype.push = function (chunk, encoding) {
9859  this._transformState.needTransform = false;
9860  return Duplex.prototype.push.call(this, chunk, encoding);
9861};
9862
9863// This is the part where you do stuff!
9864// override this function in implementation classes.
9865// 'chunk' is an input chunk.
9866//
9867// Call `push(newChunk)` to pass along transformed output
9868// to the readable side.  You may call 'push' zero or more times.
9869//
9870// Call `cb(err)` when you are done with this chunk.  If you pass
9871// an error, then that'll put the hurt on the whole operation.  If you
9872// never call cb(), then you'll never get another chunk.
9873Transform.prototype._transform = function (chunk, encoding, cb) {
9874  throw new Error('_transform() is not implemented');
9875};
9876
9877Transform.prototype._write = function (chunk, encoding, cb) {
9878  var ts = this._transformState;
9879  ts.writecb = cb;
9880  ts.writechunk = chunk;
9881  ts.writeencoding = encoding;
9882  if (!ts.transforming) {
9883    var rs = this._readableState;
9884    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
9885  }
9886};
9887
9888// Doesn't matter what the args are here.
9889// _transform does all the work.
9890// That we got here means that the readable side wants more data.
9891Transform.prototype._read = function (n) {
9892  var ts = this._transformState;
9893
9894  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
9895    ts.transforming = true;
9896    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
9897  } else {
9898    // mark that we need a transform, so that any data that comes in
9899    // will get processed, now that we've asked for it.
9900    ts.needTransform = true;
9901  }
9902};
9903
9904Transform.prototype._destroy = function (err, cb) {
9905  var _this2 = this;
9906
9907  Duplex.prototype._destroy.call(this, err, function (err2) {
9908    cb(err2);
9909    _this2.emit('close');
9910  });
9911};
9912
9913function done(stream, er, data) {
9914  if (er) return stream.emit('error', er);
9915
9916  if (data != null) // single equals check for both `null` and `undefined`
9917    stream.push(data);
9918
9919  // if there's nothing in the write buffer, then that means
9920  // that nothing more will ever be provided
9921  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');
9922
9923  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');
9924
9925  return stream.push(null);
9926}
9927
9928/***/ }),
9929/* 87 */
9930/***/ (function(module, exports, __webpack_require__) {
9931
9932/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.12.6
9933
9934/*
9935PDFReference - represents a reference to another object in the PDF object heirarchy
9936By Devon Govett
9937 */
9938
9939(function() {
9940  var PDFObject, PDFReference, stream, zlib,
9941    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
9942    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
9943    hasProp = {}.hasOwnProperty;
9944
9945  zlib = __webpack_require__(48);
9946
9947  stream = __webpack_require__(15);
9948
9949  PDFReference = (function(superClass) {
9950    extend(PDFReference, superClass);
9951
9952    function PDFReference(document, id, data) {
9953      this.document = document;
9954      this.id = id;
9955      this.data = data != null ? data : {};
9956      this.finalize = bind(this.finalize, this);
9957      PDFReference.__super__.constructor.call(this, {
9958        decodeStrings: false
9959      });
9960      this.gen = 0;
9961      this.deflate = null;
9962      this.compress = this.document.compress && !this.data.Filter;
9963      this.uncompressedLength = 0;
9964      this.chunks = [];
9965    }
9966
9967    PDFReference.prototype.initDeflate = function() {
9968      this.data.Filter = 'FlateDecode';
9969      this.deflate = zlib.createDeflate();
9970      this.deflate.on('data', (function(_this) {
9971        return function(chunk) {
9972          _this.chunks.push(chunk);
9973          return _this.data.Length += chunk.length;
9974        };
9975      })(this));
9976      return this.deflate.on('end', this.finalize);
9977    };
9978
9979    PDFReference.prototype._write = function(chunk, encoding, callback) {
9980      var base;
9981      if (!Buffer.isBuffer(chunk)) {
9982        chunk = new Buffer(chunk + '\n', 'binary');
9983      }
9984      this.uncompressedLength += chunk.length;
9985      if ((base = this.data).Length == null) {
9986        base.Length = 0;
9987      }
9988      if (this.compress) {
9989        if (!this.deflate) {
9990          this.initDeflate();
9991        }
9992        this.deflate.write(chunk);
9993      } else {
9994        this.chunks.push(chunk);
9995        this.data.Length += chunk.length;
9996      }
9997      return callback();
9998    };
9999
10000    PDFReference.prototype.end = function(chunk) {
10001      PDFReference.__super__.end.apply(this, arguments);
10002      if (this.deflate) {
10003        return this.deflate.end();
10004      } else {
10005        return this.finalize();
10006      }
10007    };
10008
10009    PDFReference.prototype.finalize = function() {
10010      var chunk, i, len, ref;
10011      this.offset = this.document._offset;
10012      this.document._write(this.id + " " + this.gen + " obj");
10013      this.document._write(PDFObject.convert(this.data));
10014      if (this.chunks.length) {
10015        this.document._write('stream');
10016        ref = this.chunks;
10017        for (i = 0, len = ref.length; i < len; i++) {
10018          chunk = ref[i];
10019          this.document._write(chunk);
10020        }
10021        this.chunks.length = 0;
10022        this.document._write('\nendstream');
10023      }
10024      this.document._write('endobj');
10025      return this.document._refEnd(this);
10026    };
10027
10028    PDFReference.prototype.toString = function() {
10029      return this.id + " " + this.gen + " R";
10030    };
10031
10032    return PDFReference;
10033
10034  })(stream.Writable);
10035
10036  module.exports = PDFReference;
10037
10038  PDFObject = __webpack_require__(26);
10039
10040}).call(this);
10041
10042/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
10043
vendor: 4,424 bytes, lines 10044-10191
10044/***/ }),
10045/* 88 */
10046/***/ (function(module, exports, __webpack_require__) {
10047
10048"use strict";
10049/* WEBPACK VAR INJECTION */(function(global) {
10050
10051// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
10052// original notice:
10053
10054/*!
10055 * The buffer module from node.js, for the browser.
10056 *
10057 * @author   Feross Aboukhadijeh <[email protected]> <http://feross.org>
10058 * @license  MIT
10059 */
10060function compare(a, b) {
10061  if (a === b) {
10062    return 0;
10063  }
10064
10065  var x = a.length;
10066  var y = b.length;
10067
10068  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
10069    if (a[i] !== b[i]) {
10070      x = a[i];
10071      y = b[i];
10072      break;
10073    }
10074  }
10075
10076  if (x < y) {
10077    return -1;
10078  }
10079  if (y < x) {
10080    return 1;
10081  }
10082  return 0;
10083}
10084function isBuffer(b) {
10085  if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
10086    return global.Buffer.isBuffer(b);
10087  }
10088  return !!(b != null && b._isBuffer);
10089}
10090
10091// based on node assert, original notice:
10092
10093// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
10094//
10095// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
10096//
10097// Originally from narwhal.js (http://narwhaljs.org)
10098// Copyright (c) 2009 Thomas Robinson <280north.com>
10099//
10100// Permission is hereby granted, free of charge, to any person obtaining a copy
10101// of this software and associated documentation files (the 'Software'), to
10102// deal in the Software without restriction, including without limitation the
10103// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10104// sell copies of the Software, and to permit persons to whom the Software is
10105// furnished to do so, subject to the following conditions:
10106//
10107// The above copyright notice and this permission notice shall be included in
10108// all copies or substantial portions of the Software.
10109//
10110// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
10111// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10112// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
10113// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
10114// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
10115// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10116
10117var util = __webpack_require__(49);
10118var hasOwn = Object.prototype.hasOwnProperty;
10119var pSlice = Array.prototype.slice;
10120var functionsHaveNames = (function () {
10121  return function foo() {}.name === 'foo';
10122}());
10123function pToString (obj) {
10124  return Object.prototype.toString.call(obj);
10125}
10126function isView(arrbuf) {
10127  if (isBuffer(arrbuf)) {
10128    return false;
10129  }
10130  if (typeof global.ArrayBuffer !== 'function') {
10131    return false;
10132  }
10133  if (typeof ArrayBuffer.isView === 'function') {
10134    return ArrayBuffer.isView(arrbuf);
10135  }
10136  if (!arrbuf) {
10137    return false;
10138  }
10139  if (arrbuf instanceof DataView) {
10140    return true;
10141  }
10142  if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
10143    return true;
10144  }
10145  return false;
10146}
10147// 1. The assert module provides functions that throw
10148// AssertionError's when particular conditions are not met. The
10149// assert module must conform to the following interface.
10150
10151var assert = module.exports = ok;
10152
10153// 2. The AssertionError is defined in assert.
10154// new assert.AssertionError({ message: message,
10155//                             actual: actual,
10156//                             expected: expected })
10157
10158var regex = /\s*function\s+([^\(\s]*)\s*/;
10159// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
10160function getName(func) {
10161  if (!util.isFunction(func)) {
10162    return;
10163  }
10164  if (functionsHaveNames) {
10165    return func.name;
10166  }
10167  var str = func.toString();
10168  var match = str.match(regex);
10169  return match && match[1];
10170}
10171assert.AssertionError = function AssertionError(options) {
10172  this.name = 'AssertionError';
10173  this.actual = options.actual;
10174  this.expected = options.expected;
10175  this.operator = options.operator;
10176  if (options.message) {
10177    this.message = options.message;
10178    this.generatedMessage = false;
10179  } else {
10180    this.message = getMessage(this);
10181    this.generatedMessage = true;
10182  }
10183  var stackStartFunction = options.stackStartFunction || fail;
10184  if (Error.captureStackTrace) {
10185    Error.captureStackTrace(this, stackStartFunction);
10186  } else {
10187    // non v8 browsers so we can have a stacktrace
10188    var err = new Error();
10189    if (err.stack) {
10190      var out = err.stack;
10191
vendor: 5,869 bytes, lines 10192-10346
10192      // try to strip useless frames
10193      var fn_name = getName(stackStartFunction);
10194      var idx = out.indexOf('\n' + fn_name);
10195      if (idx >= 0) {
10196        // once we have located the function frame
10197        // we need to strip out everything before it (and its line)
10198        var next_line = out.indexOf('\n', idx + 1);
10199        out = out.substring(next_line + 1);
10200      }
10201
10202      this.stack = out;
10203    }
10204  }
10205};
10206
10207// assert.AssertionError instanceof Error
10208util.inherits(assert.AssertionError, Error);
10209
10210function truncate(s, n) {
10211  if (typeof s === 'string') {
10212    return s.length < n ? s : s.slice(0, n);
10213  } else {
10214    return s;
10215  }
10216}
10217function inspect(something) {
10218  if (functionsHaveNames || !util.isFunction(something)) {
10219    return util.inspect(something);
10220  }
10221  var rawname = getName(something);
10222  var name = rawname ? ': ' + rawname : '';
10223  return '[Function' +  name + ']';
10224}
10225function getMessage(self) {
10226  return truncate(inspect(self.actual), 128) + ' ' +
10227         self.operator + ' ' +
10228         truncate(inspect(self.expected), 128);
10229}
10230
10231// At present only the three keys mentioned above are used and
10232// understood by the spec. Implementations or sub modules can pass
10233// other keys to the AssertionError's constructor - they will be
10234// ignored.
10235
10236// 3. All of the following functions must throw an AssertionError
10237// when a corresponding condition is not met, with a message that
10238// may be undefined if not provided.  All assertion methods provide
10239// both the actual and expected values to the assertion error for
10240// display purposes.
10241
10242function fail(actual, expected, message, operator, stackStartFunction) {
10243  throw new assert.AssertionError({
10244    message: message,
10245    actual: actual,
10246    expected: expected,
10247    operator: operator,
10248    stackStartFunction: stackStartFunction
10249  });
10250}
10251
10252// EXTENSION! allows for well behaved errors defined elsewhere.
10253assert.fail = fail;
10254
10255// 4. Pure assertion tests whether a value is truthy, as determined
10256// by !!guard.
10257// assert.ok(guard, message_opt);
10258// This statement is equivalent to assert.equal(true, !!guard,
10259// message_opt);. To test strictly for the value true, use
10260// assert.strictEqual(true, guard, message_opt);.
10261
10262function ok(value, message) {
10263  if (!value) fail(value, true, message, '==', assert.ok);
10264}
10265assert.ok = ok;
10266
10267// 5. The equality assertion tests shallow, coercive equality with
10268// ==.
10269// assert.equal(actual, expected, message_opt);
10270
10271assert.equal = function equal(actual, expected, message) {
10272  if (actual != expected) fail(actual, expected, message, '==', assert.equal);
10273};
10274
10275// 6. The non-equality assertion tests for whether two objects are not equal
10276// with != assert.notEqual(actual, expected, message_opt);
10277
10278assert.notEqual = function notEqual(actual, expected, message) {
10279  if (actual == expected) {
10280    fail(actual, expected, message, '!=', assert.notEqual);
10281  }
10282};
10283
10284// 7. The equivalence assertion tests a deep equality relation.
10285// assert.deepEqual(actual, expected, message_opt);
10286
10287assert.deepEqual = function deepEqual(actual, expected, message) {
10288  if (!_deepEqual(actual, expected, false)) {
10289    fail(actual, expected, message, 'deepEqual', assert.deepEqual);
10290  }
10291};
10292
10293assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
10294  if (!_deepEqual(actual, expected, true)) {
10295    fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
10296  }
10297};
10298
10299function _deepEqual(actual, expected, strict, memos) {
10300  // 7.1. All identical values are equivalent, as determined by ===.
10301  if (actual === expected) {
10302    return true;
10303  } else if (isBuffer(actual) && isBuffer(expected)) {
10304    return compare(actual, expected) === 0;
10305
10306  // 7.2. If the expected value is a Date object, the actual value is
10307  // equivalent if it is also a Date object that refers to the same time.
10308  } else if (util.isDate(actual) && util.isDate(expected)) {
10309    return actual.getTime() === expected.getTime();
10310
10311  // 7.3 If the expected value is a RegExp object, the actual value is
10312  // equivalent if it is also a RegExp object with the same source and
10313  // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
10314  } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
10315    return actual.source === expected.source &&
10316           actual.global === expected.global &&
10317           actual.multiline === expected.multiline &&
10318           actual.lastIndex === expected.lastIndex &&
10319           actual.ignoreCase === expected.ignoreCase;
10320
10321  // 7.4. Other pairs that do not both pass typeof value == 'object',
10322  // equivalence is determined by ==.
10323  } else if ((actual === null || typeof actual !== 'object') &&
10324             (expected === null || typeof expected !== 'object')) {
10325    return strict ? actual === expected : actual == expected;
10326
10327  // If both values are instances of typed arrays, wrap their underlying
10328  // ArrayBuffers in a Buffer each to increase performance
10329  // This optimization requires the arrays to have the same type as checked by
10330  // Object.prototype.toString (aka pToString). Never perform binary
10331  // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
10332  // bit patterns are not identical.
10333  } else if (isView(actual) && isView(expected) &&
10334             pToString(actual) === pToString(expected) &&
10335             !(actual instanceof Float32Array ||
10336               actual instanceof Float64Array)) {
10337    return compare(new Uint8Array(actual.buffer),
10338                   new Uint8Array(expected.buffer)) === 0;
10339
10340  // 7.5 For all other Object pairs, including Array objects, equivalence is
10341  // determined by having the same number of owned properties (as verified
10342  // with Object.prototype.hasOwnProperty.call), the same set of keys
10343  // (although not necessarily the same order), equivalent values for every
10344  // corresponding key, and an identical 'prototype' property. Note: this
10345  // accounts for both named and indexed properties on Arrays.
10346  }
vendor: 7,288 bytes, lines 10346-10608
10346 else if (isBuffer(actual) !== isBuffer(expected)) {
10347    return false;
10348  } else {
10349    memos = memos || {actual: [], expected: []};
10350
10351    var actualIndex = memos.actual.indexOf(actual);
10352    if (actualIndex !== -1) {
10353      if (actualIndex === memos.expected.indexOf(expected)) {
10354        return true;
10355      }
10356    }
10357
10358    memos.actual.push(actual);
10359    memos.expected.push(expected);
10360
10361    return objEquiv(actual, expected, strict, memos);
10362  }
10363}
10364
10365function isArguments(object) {
10366  return Object.prototype.toString.call(object) == '[object Arguments]';
10367}
10368
10369function objEquiv(a, b, strict, actualVisitedObjects) {
10370  if (a === null || a === undefined || b === null || b === undefined)
10371    return false;
10372  // if one is a primitive, the other must be same
10373  if (util.isPrimitive(a) || util.isPrimitive(b))
10374    return a === b;
10375  if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
10376    return false;
10377  var aIsArgs = isArguments(a);
10378  var bIsArgs = isArguments(b);
10379  if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
10380    return false;
10381  if (aIsArgs) {
10382    a = pSlice.call(a);
10383    b = pSlice.call(b);
10384    return _deepEqual(a, b, strict);
10385  }
10386  var ka = objectKeys(a);
10387  var kb = objectKeys(b);
10388  var key, i;
10389  // having the same number of owned properties (keys incorporates
10390  // hasOwnProperty)
10391  if (ka.length !== kb.length)
10392    return false;
10393  //the same set of keys (although not necessarily the same order),
10394  ka.sort();
10395  kb.sort();
10396  //~~~cheap key test
10397  for (i = ka.length - 1; i >= 0; i--) {
10398    if (ka[i] !== kb[i])
10399      return false;
10400  }
10401  //equivalent values for every corresponding key, and
10402  //~~~possibly expensive deep test
10403  for (i = ka.length - 1; i >= 0; i--) {
10404    key = ka[i];
10405    if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
10406      return false;
10407  }
10408  return true;
10409}
10410
10411// 8. The non-equivalence assertion tests for any deep inequality.
10412// assert.notDeepEqual(actual, expected, message_opt);
10413
10414assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
10415  if (_deepEqual(actual, expected, false)) {
10416    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
10417  }
10418};
10419
10420assert.notDeepStrictEqual = notDeepStrictEqual;
10421function notDeepStrictEqual(actual, expected, message) {
10422  if (_deepEqual(actual, expected, true)) {
10423    fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
10424  }
10425}
10426
10427
10428// 9. The strict equality assertion tests strict equality, as determined by ===.
10429// assert.strictEqual(actual, expected, message_opt);
10430
10431assert.strictEqual = function strictEqual(actual, expected, message) {
10432  if (actual !== expected) {
10433    fail(actual, expected, message, '===', assert.strictEqual);
10434  }
10435};
10436
10437// 10. The strict non-equality assertion tests for strict inequality, as
10438// determined by !==.  assert.notStrictEqual(actual, expected, message_opt);
10439
10440assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
10441  if (actual === expected) {
10442    fail(actual, expected, message, '!==', assert.notStrictEqual);
10443  }
10444};
10445
10446function expectedException(actual, expected) {
10447  if (!actual || !expected) {
10448    return false;
10449  }
10450
10451  if (Object.prototype.toString.call(expected) == '[object RegExp]') {
10452    return expected.test(actual);
10453  }
10454
10455  try {
10456    if (actual instanceof expected) {
10457      return true;
10458    }
10459  } catch (e) {
10460    // Ignore.  The instanceof check doesn't work for arrow functions.
10461  }
10462
10463  if (Error.isPrototypeOf(expected)) {
10464    return false;
10465  }
10466
10467  return expected.call({}, actual) === true;
10468}
10469
10470function _tryBlock(block) {
10471  var error;
10472  try {
10473    block();
10474  } catch (e) {
10475    error = e;
10476  }
10477  return error;
10478}
10479
10480function _throws(shouldThrow, block, expected, message) {
10481  var actual;
10482
10483  if (typeof block !== 'function') {
10484    throw new TypeError('"block" argument must be a function');
10485  }
10486
10487  if (typeof expected === 'string') {
10488    message = expected;
10489    expected = null;
10490  }
10491
10492  actual = _tryBlock(block);
10493
10494  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
10495            (message ? ' ' + message : '.');
10496
10497  if (shouldThrow && !actual) {
10498    fail(actual, expected, 'Missing expected exception' + message);
10499  }
10500
10501  var userProvidedMessage = typeof message === 'string';
10502  var isUnwantedException = !shouldThrow && util.isError(actual);
10503  var isUnexpectedException = !shouldThrow && actual && !expected;
10504
10505  if ((isUnwantedException &&
10506      userProvidedMessage &&
10507      expectedException(actual, expected)) ||
10508      isUnexpectedException) {
10509    fail(actual, expected, 'Got unwanted exception' + message);
10510  }
10511
10512  if ((shouldThrow && actual && expected &&
10513      !expectedException(actual, expected)) || (!shouldThrow && actual)) {
10514    throw actual;
10515  }
10516}
10517
10518// 11. Expected to throw an error:
10519// assert.throws(block, Error_opt, message_opt);
10520
10521assert.throws = function(block, /*optional*/error, /*optional*/message) {
10522  _throws(true, block, error, message);
10523};
10524
10525// EXTENSION! This is annoying to write outside this module.
10526assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
10527  _throws(false, block, error, message);
10528};
10529
10530assert.ifError = function(err) { if (err) throw err; };
10531
10532var objectKeys = Object.keys || function (obj) {
10533  var keys = [];
10534  for (var key in obj) {
10535    if (hasOwn.call(obj, key)) keys.push(key);
10536  }
10537  return keys;
10538};
10539
10540/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)))
10541
10542/***/ }),
10543/* 89 */
10544/***/ (function(module, exports, __webpack_require__) {
10545
10546"use strict";
10547
10548
10549// Note: adler32 takes 12% for level 0 and 2% for level 6.
10550// It isn't worth it to make additional optimizations as in original.
10551// Small size is preferable.
10552
10553// (C) 1995-2013 Jean-loup Gailly and Mark Adler
10554// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
10555//
10556// This software is provided 'as-is', without any express or implied
10557// warranty. In no event will the authors be held liable for any damages
10558// arising from the use of this software.
10559//
10560// Permission is granted to anyone to use this software for any purpose,
10561// including commercial applications, and to alter it and redistribute it
10562// freely, subject to the following restrictions:
10563//
10564// 1. The origin of this software must not be misrepresented; you must not
10565//   claim that you wrote the original software. If you use this software
10566//   in a product, an acknowledgment in the product documentation would be
10567//   appreciated but is not required.
10568// 2. Altered source versions must be plainly marked as such, and must not be
10569//   misrepresented as being the original software.
10570// 3. This notice may not be removed or altered from any source distribution.
10571
10572function adler32(adler, buf, len, pos) {
10573  var s1 = (adler & 0xffff) |0,
10574      s2 = ((adler >>> 16) & 0xffff) |0,
10575      n = 0;
10576
10577  while (len !== 0) {
10578    // Set limit ~ twice less than 5552, to keep
10579    // s2 in 31-bits, because we force signed ints.
10580    // in other case %= will fail.
10581    n = len > 2000 ? 2000 : len;
10582    len -= n;
10583
10584    do {
10585      s1 = (s1 + buf[pos++]) |0;
10586      s2 = (s2 + s1) |0;
10587    } while (--n);
10588
10589    s1 %= 65521;
10590    s2 %= 65521;
10591  }
10592
10593  return (s1 | (s2 << 16)) |0;
10594}
10595
10596
10597module.exports = adler32;
10598
10599
10600/***/ }),
10601/* 90 */
10602/***/ (function(module, exports, __webpack_require__) {
10603
10604"use strict";
10605
10606
10607// Note: we can't get significant speed boost here.
10608// So write code to minimize size - no pregenerated tables
10609// and array tools dependencies.
10610
10611// (C) 1995-2013 Jean-loup Gailly and Mark Adler
10612// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
10613//
10614// This software is provided 'as-is', without any express or implied
10615// warranty. In no event will the authors be held liable for any damages
10616// arising from the use of this software.
10617//
10618// Permission is granted to anyone to use this software for any purpose,
10619// including commercial applications, and to alter it and redistribute it
10620// freely, subject to the following restrictions:
10621//
10622// 1. The origin of this software must not be misrepresented; you must not
10623//   claim that you wrote the original software. If you use this software
10624//   in a product, an acknowledgment in the product documentation would be
10625//   appreciated but is not required.
10626// 2. Altered source versions must be plainly marked as such, and must not be
10627//   misrepresented as being the original software.
10628// 3. This notice may not be removed or altered from any source distribution.
10629
10630// Use ordinary array, since untyped makes no boost here
10631function makeTable() {
10632  var c, table = [];
10633
10634  for (var n = 0; n < 256; n++) {
10635    c = n;
10636    for (var k = 0; k < 8; k++) {
10637      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
10638    }
10639    table[n] = c;
10640  }
10641
10642  return table;
10643}
10644
10645// Create table on load. Just 255 signed longs. Not a problem.
10646var crcTable = makeTable();
10647
10648
10649function crc32(crc, buf, len, pos) {
10650  var t = crcTable,
10651      end = pos + len;
10652
10653  crc ^= -1;
10654
10655  for (var i = pos; i < end; i++) {
10656    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
10657  }
10658
10659  return (crc ^ (-1)); // >>> 0;
10660}
10661
10662
10663module.exports = crc32;
10664
10665
10666/***/ }),
10667/* 91 */
10668/***/ (function(module, exports) {
10669
10670module.exports = [["a140","",62],["a180","",32],["a240","",62],["a280","",32],["a2ab","",5],["a2e3","€"],["a2ef",""],["a2fd",""],["a340","",62],["a380","",31," "],["a440","",62],["a480","",32],["a4f4","",10],["a540","",62],["a580","",32],["a5f7","",7],["a640","",62],["a680","",32],["a6b9","",7],["a6d9","",6],["a6ec",""],["a6f3",""],["a6f6","",8],["a740","",62],["a780","",32],["a7c2","",14],["a7f2","",12],["a896","",10],["a8bc",""],["a8bf","ǹ"],["a8c1",""],["a8ea","",20],["a958",""],["a95b",""],["a95d",""],["a989","〾⿰",11],["a997","",12],["a9f0","",14],["aaa1","",93],["aba1","",93],["aca1","",93],["ada1","",93],["aea1","",93],["afa1","",93],["d7fa","",4],["f8a1","",93],["f9a1","",93],["faa1","",93],["fba1","",93],["fca1","",93],["fda1","",93],["fe50","⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌"],["fe80","䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓",6,"䶮",93]]
10671
10672/***/ }),
10673/* 92 */
10674/***/ (function(module, exports) {
10675
10676module.exports = [["0","\u000
vendor: 42,167 bytes, line 10676
106760",127],["a140"," ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚"],["a1a1","﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢",4,"~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/"],["a240","\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁",7,"▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭"],["a2a1","╮╰╯═╞╪╡◢◣◥◤╱╲╳0",9,"Ⅰ",9,"〡",8,"十卄卅A",25,"a",21],["a340","wxyzΑ",16,"Σ",6,"α",16,"σ",6,"ㄅ",10],["a3a1","ㄐ",25,"˙ˉˊˇˋ"],["a3e1","€"],["a440","一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才"],["a4a1","丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙"],["a540","世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外"],["a5a1","央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全"],["a640","共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年"],["a6a1","式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣"],["a740","作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍"],["a7a1","均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠"],["a840","杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒"],["a8a1","芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵"],["a940","咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居"],["a9a1","屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊"],["aa40","昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠"],["aaa1","炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附"],["ab40","陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品"],["aba1","哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷"],["ac40","拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗"],["aca1","活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄"],["ad40","耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥"],["ada1","迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪"],["ae40","哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙"],["aea1","恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓"],["af40","浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷"],["afa1","砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃"],["b040","虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡"],["b0a1","陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀"],["b140","娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽"],["b1a1","情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺"],["b240","毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶"],["b2a1","瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼"],["b340","莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途"],["b3a1","部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠"],["b440","婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍"],["b4a1","插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋"],["b540","溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘"],["b5a1","窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁"],["b640","詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑"],["b6a1","間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼"],["b740","媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業"],["b7a1","楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督"],["b840","睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫"],["b8a1","腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊"],["b940","辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴"],["b9a1","飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇"],["ba40","愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢"],["baa1","滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬"],["bb40","罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤"],["bba1","說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜"],["bc40","劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂"],["bca1","慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃"],["bd40","瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯"],["bda1","翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞"],["be40","輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉"],["bea1","鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡"],["bf40","濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊"],["bfa1","縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚"],["c040","錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇"],["c0a1","嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬"],["c140","瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪"],["c1a1","薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁"],["c240","駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘"],["c2a1","癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦"],["c340","鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸"],["c3a1","獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類"],["c440","願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼"],["c4a1","纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴"],["c540","護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬"],["c5a1","禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒"],["c640","讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲"],["c940","乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕"],["c9a1","氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋"],["ca40","汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘"],["caa1","吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇"],["cb40","杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓"],["cba1","芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢"],["cc40","坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋"],["cca1","怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲"],["cd40","泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺"],["cda1","矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏"],["ce40","哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛"],["cea1","峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺"],["cf40","柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂"],["cfa1","洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀"],["d040","穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪"],["d0a1","苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱"],["d140","唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧"],["d1a1","恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤"],["d240","毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸"],["d2a1","牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐"],["d340","笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢"],["d3a1","荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐"],["d440","酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅"],["d4a1","唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏"],["d540","崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟"],["d5a1","捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉"],["d640","淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏"],["d6a1","痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟"],["d740","耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷"],["d7a1","蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪"],["d840","釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷"],["d8a1","堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔"],["d940","惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒"],["d9a1","晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞"],["da40","湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖"],["daa1","琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥"],["db40","罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳"],["dba1","菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺"],["dc40","軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈"],["dca1","隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆"],["dd40","媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤"],["dda1","搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼"],["de40","毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓"],["dea1","煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓"],["df40","稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯"],["dfa1","腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤"],["e040","觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿"],["e0a1","遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠"],["e140","凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠"],["e1a1","寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉"],["e240","榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊"],["e2a1","漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓"],["e340","禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞"],["e3a1","耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻"],["e440","裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍"],["e4a1","銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘"],["e540","噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉"],["e5a1","憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒"],["e640","澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙"],["e6a1","獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟"],["e740","膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢"],["e7a1","蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧"],["e840","踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓"],["e8a1","銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮"],["e940","噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺"],["e9a1","憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸"],["ea40","澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙"],["eaa1","瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘"],["eb40","蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠"],["eba1","諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌"],["ec40","錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕"],["eca1","魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎"],["ed40","檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶"],["eda1","瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞"],["ee40","蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞"],["eea1","謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜"],["ef40","鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰"],["efa1","鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶"],["f040","璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒"],["f0a1","臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧"],["f140","蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪"],["f1a1","鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰"],["f240","徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛"],["f2a1","礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕"],["f340","譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦"],["f3a1","鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲"],["f440","嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩"],["f4a1","禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿"],["f540","鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛"],["f5a1","鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥"],["f640","蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺"],["f6a1","騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚"],["f740","糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊"],["f7a1","驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾"],["f840","讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏"],["f8a1","齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚"],["f940","纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊"],["f9a1","龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓"]]
10676
10677
10678/***/ }),
10679/* 93 */
10680/***/ (function(module, exports, __webpack_require__) {
10681
10682// Generated by CoffeeScript 1.7.1
10683(function() {
10684  var ArrayT, NumberT, utils;
10685
10686  NumberT = __webpack_require__(22).Number;
10687
10688  utils = __webpack_require__(12);
10689
10690  ArrayT = (function() {
10691    function ArrayT(type, length, lengthType) {
10692      this.type = type;
10693      this.length = length;
10694      this.lengthType = lengthType != null ? lengthType : 'count';
10695    }
10696
10697    ArrayT.prototype.decode = function(stream, parent) {
10698      var ctx, i, length, pos, res, target, _i;
10699      pos = stream.pos;
10700      res = [];
10701      ctx = parent;
10702      if (this.length != null) {
10703        length = utils.resolveLength(this.length, stream, parent);
10704      }
10705      if (this.length instanceof NumberT) {
10706        Object.defineProperties(res, {
10707          parent: {
10708            value: parent
10709          },
10710          _startOffset: {
10711            value: pos
10712          },
10713          _currentOffset: {
10714            value: 0,
10715            writable: true
10716          },
10717          _length: {
10718            value: length
10719          }
10720        });
10721        ctx = res;
10722      }
10723      if ((length == null) || this.lengthType === 'bytes') {
10724        target = length != null ? stream.pos + length : (parent != null ? parent._length : void 0) ? parent._startOffset + parent._length : stream.length;
10725        while (stream.pos < target) {
10726          res.push(this.type.decode(stream, ctx));
10727        }
10728      } else {
10729        for (i = _i = 0; _i < length; i = _i += 1) {
10730          res.push(this.type.decode(stream, ctx));
10731        }
10732      }
10733      return res;
10734    };
10735
10736    ArrayT.prototype.size = function(array, ctx) {
10737      var item, size, _i, _len;
10738      if (!array) {
10739        return this.type.size(null, ctx) * utils.resolveLength(this.length, null, ctx);
10740      }
10741      size = 0;
10742      if (this.length instanceof NumberT) {
10743        size += this.length.size();
10744        ctx = {
10745          parent: ctx
10746        };
10747      }
10748      for (_i = 0, _len = array.length; _i < _len; _i++) {
10749        item = array[_i];
10750        size += this.type.size(item, ctx);
10751      }
10752      return size;
10753    };
10754
10755    ArrayT.prototype.encode = function(stream, array, parent) {
10756      var ctx, i, item, ptr, _i, _len;
10757      ctx = parent;
10758      if (this.length instanceof NumberT) {
10759        ctx = {
10760          pointers: [],
10761          startOffset: stream.pos,
10762          parent: parent
10763        };
10764        ctx.pointerOffset = stream.pos + this.size(array, ctx);
10765        this.length.encode(stream, array.length);
10766      }
10767      for (_i = 0, _len = array.length; _i < _len; _i++) {
10768        item = array[_i];
10769        this.type.encode(stream, item, ctx);
10770      }
10771      if (this.length instanceof NumberT) {
10772        i = 0;
10773        while (i < ctx.pointers.length) {
10774          ptr = ctx.pointers[i++];
10775          ptr.type.encode(stream, ptr.val);
10776        }
10777      }
10778    };
10779
10780    return ArrayT;
10781
10782  })();
10783
10784  module.exports = ArrayT;
10785
10786}).call(this);
10787
10788
10789/***/ }),
10790/* 94 */
10791/***/ (function(module, exports, __webpack_require__) {
10792
10793// Generated by CoffeeScript 1.7.1
10794(function() {
10795  var Struct, utils;
10796
10797  utils = __webpack_require__(12);
10798
10799  Struct = (function() {
10800    function Struct(fields) {
10801      this.fields = fields != null ? fields : {};
10802    }
10803
10804    Struct.prototype.decode = function(stream, parent, length) {
10805      var res, _ref;
10806      if (length == null) {
10807        length = 0;
10808      }
10809      res = this._setup(stream, parent, length);
10810      this._parseFields(stream, res, this.fields);
10811      if ((_ref = this.process) != null) {
10812        _ref.call(res, stream);
10813      }
10814      return res;
10815    };
10816
10817    Struct.prototype._setup = function(stream, parent, length) {
10818      var res;
10819      res = {};
10820      Object.defineProperties(res, {
10821        parent: {
10822          value: parent
10823        },
10824        _startOffset: {
10825          value: stream.pos
10826        },
10827        _currentOffset: {
10828          value: 0,
10829          writable: true
10830        },
10831        _length: {
10832          value: length
10833        }
10834      });
10835      return res;
10836    };
10837
10838    Struct.prototype._parseFields = function(stream, res, fields) {
10839      var key, type, val;
10840      for (key in fields) {
10841        type = fields[key];
10842        if (typeof type === 'function') {
10843          val = type.call(res, res);
10844        } else {
10845          val = type.decode(stream, res);
10846        }
10847        if (val !== void 0) {
10848          if (val instanceof utils.PropertyDescriptor) {
10849            Object.defineProperty(res, key, val);
10850          } else {
10851            res[key] = val;
10852          }
10853        }
10854        res._currentOffset = stream.pos - res._startOffset;
10855      }
10856    };
10857
10858    Struct.prototype.size = function(val, parent, includePointers) {
10859      var ctx, key, size, type, _ref;
10860      if (val == null) {
10861        val = {};
10862      }
10863      if (includePointers == null) {
10864        includePointers = true;
10865      }
10866      ctx = {
10867        parent: parent,
10868        val: val,
10869        pointerSize: 0
10870      };
10871      size = 0;
10872      _ref = this.fields;
10873      for (key in _ref) {
10874        type = _ref[key];
10875        if (type.size != null) {
10876          size += type.size(val[key], ctx);
10877        }
10878      }
10879      if (includePointers) {
10880        size += ctx.pointerSize;
10881      }
10882      return size;
10883    };
10884
10885    Struct.prototype.encode = function(stream, val, parent) {
10886      var ctx, i, key, ptr, type, _ref, _ref1;
10887      if ((_ref = this.preEncode) != null) {
10888        _ref.call(val, stream);
10889      }
10890      ctx = {
10891        pointers: [],
10892        startOffset: stream.pos,
10893        parent: parent,
10894        val: val,
10895        pointerSize: 0
10896      };
10897      ctx.pointerOffset = stream.pos + this.size(val, ctx, false);
10898      _ref1 = this.fields;
10899      for (key in _ref1) {
10900        type = _ref1[key];
10901        if (type.encode != null) {
10902          type.encode(stream, val[key], ctx);
10903        }
10904      }
10905      i = 0;
10906      while (i < ctx.pointers.length) {
10907        ptr = ctx.pointers[i++];
10908        ptr.type.encode(stream, ptr.val, ptr.parent);
10909      }
10910    };
10911
10912    return Struct;
10913
10914  })();
10915
10916  module.exports = Struct;
10917
10918}).call(this);
10919
10920
10921/***/ }),
10922/* 95 */
10923/***/ (function(module, exports, __webpack_require__) {
10924
10925module.exports = !__webpack_require__(5) && !__webpack_require__(19)(function () {
10926  return Object.defineProperty(__webpack_require__(96)('div'), 'a', { get: function () { return 7; } }).a != 7;
10927});
10928
10929
10930/***/ }),
10931/* 96 */
10932/***/ (function(module, exports, __webpack_require__) {
10933
10934var isObject = __webpack_require__(9);
10935var document = __webpack_require__(10).document;
10936// typeof document.createElement is 'object' in old IE
10937var is = isObject(document) && isObject(document.createElement);
10938module.exports = function (it) {
10939  return is ? document.createElement(it) : {};
10940};
10941
10942
10943/***/ }),
10944/* 97 */
vendor: 5,027 bytes, lines 10945-11140
10945/***/ (function(module, exports) {
10946
10947module.exports = function (it) {
10948  if (typeof it != 'function') throw TypeError(it + ' is not a function!');
10949  return it;
10950};
10951
10952
10953/***/ }),
10954/* 98 */
10955/***/ (function(module, exports) {
10956
10957module.exports = function (done, value) {
10958  return { value: value, done: !!done };
10959};
10960
10961
10962/***/ }),
10963/* 99 */
10964/***/ (function(module, exports, __webpack_require__) {
10965
10966module.exports = __webpack_require__(13);
10967
10968
10969/***/ }),
10970/* 100 */
10971/***/ (function(module, exports, __webpack_require__) {
10972
10973var dP = __webpack_require__(6);
10974var anObject = __webpack_require__(14);
10975var getKeys = __webpack_require__(29);
10976
10977module.exports = __webpack_require__(5) ? Object.defineProperties : function defineProperties(O, Properties) {
10978  anObject(O);
10979  var keys = getKeys(Properties);
10980  var length = keys.length;
10981  var i = 0;
10982  var P;
10983  while (length > i) dP.f(O, P = keys[i++], Properties[P]);
10984  return O;
10985};
10986
10987
10988/***/ }),
10989/* 101 */
10990/***/ (function(module, exports, __webpack_require__) {
10991
10992var has = __webpack_require__(18);
10993var toIObject = __webpack_require__(17);
10994var arrayIndexOf = __webpack_require__(204)(false);
10995var IE_PROTO = __webpack_require__(64)('IE_PROTO');
10996
10997module.exports = function (object, names) {
10998  var O = toIObject(object);
10999  var i = 0;
11000  var result = [];
11001  var key;
11002  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
11003  // Don't enum bug & hidden keys
11004  while (names.length > i) if (has(O, key = names[i++])) {
11005    ~arrayIndexOf(result, key) || result.push(key);
11006  }
11007  return result;
11008};
11009
11010
11011/***/ }),
11012/* 102 */
11013/***/ (function(module, exports, __webpack_require__) {
11014
11015var toInteger = __webpack_require__(63);
11016var max = Math.max;
11017var min = Math.min;
11018module.exports = function (index, length) {
11019  index = toInteger(index);
11020  return index < 0 ? max(index + length, 0) : min(index, length);
11021};
11022
11023
11024/***/ }),
11025/* 103 */
11026/***/ (function(module, exports, __webpack_require__) {
11027
11028module.exports = { "default": __webpack_require__(215), __esModule: true };
11029
11030/***/ }),
11031/* 104 */
11032/***/ (function(module, exports, __webpack_require__) {
11033
11034// 7.2.2 IsArray(argument)
11035var cof = __webpack_require__(55);
11036module.exports = Array.isArray || function isArray(arg) {
11037  return cof(arg) == 'Array';
11038};
11039
11040
11041/***/ }),
11042/* 105 */
11043/***/ (function(module, exports, __webpack_require__) {
11044
11045// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
11046var $keys = __webpack_require__(101);
11047var hiddenKeys = __webpack_require__(66).concat('length', 'prototype');
11048
11049exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
11050  return $keys(O, hiddenKeys);
11051};
11052
11053
11054/***/ }),
11055/* 106 */
11056/***/ (function(module, exports, __webpack_require__) {
11057
11058"use strict";
11059
11060
11061exports.__esModule = true;
11062
11063exports.default = function (instance, Constructor) {
11064  if (!(instance instanceof Constructor)) {
11065    throw new TypeError("Cannot call a class as a function");
11066  }
11067};
11068
11069/***/ }),
11070/* 107 */
11071/***/ (function(module, exports, __webpack_require__) {
11072
11073"use strict";
11074
11075
11076exports.__esModule = true;
11077
11078var _defineProperty = __webpack_require__(74);
11079
11080var _defineProperty2 = _interopRequireDefault(_defineProperty);
11081
11082function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11083
11084exports.default = function () {
11085  function defineProperties(target, props) {
11086    for (var i = 0; i < props.length; i++) {
11087      var descriptor = props[i];
11088      descriptor.enumerable = descriptor.enumerable || false;
11089      descriptor.configurable = true;
11090      if ("value" in descriptor) descriptor.writable = true;
11091      (0, _defineProperty2.default)(target, descriptor.key, descriptor);
11092    }
11093  }
11094
11095  return function (Constructor, protoProps, staticProps) {
11096    if (protoProps) defineProperties(Constructor.prototype, protoProps);
11097    if (staticProps) defineProperties(Constructor, staticProps);
11098    return Constructor;
11099  };
11100}();
11101
11102/***/ }),
11103/* 108 */
11104/***/ (function(module, exports, __webpack_require__) {
11105
11106"use strict";
11107
11108var dP = __webpack_require__(6).f;
11109var create = __webpack_require__(36);
11110var redefineAll = __webpack_require__(109);
11111var ctx = __webpack_require__(20);
11112var anInstance = __webpack_require__(110);
11113var forOf = __webpack_require__(41);
11114var $iterDefine = __webpack_require__(61);
11115var step = __webpack_require__(98);
11116var setSpecies = __webpack_require__(228);
11117var DESCRIPTORS = __webpack_require__(5);
11118var fastKey = __webpack_require__(40).fastKey;
11119var validate = __webpack_require__(75);
11120var SIZE = DESCRIPTORS ? '_s' : 'size';
11121
11122var getEntry = function (that, key) {
11123  // fast case
11124  var index = fastKey(key);
11125  var entry;
11126  if (index !== 'F') return that._i[index];
11127  // frozen object case
11128  for (entry = that._f; entry; entry = entry.n) {
11129    if (entry.k == key) return entry;
11130  }
11131};
11132
11133module.exports = {
11134  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {
11135    var C = wrapper(function (that, iterable) {
11136      anInstance(that, C, NAME, '_i');
11137      that._t = NAME;         // collection type
11138      that._i = create(null); // index
11139      that._f = undefined;    // first entry
11140      that._l = undefined;    // last entry
vendor: 4,193 bytes, lines 11141-11267
11141      that[SIZE] = 0;         // size
11142      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
11143    });
11144    redefineAll(C.prototype, {
11145      // 23.1.3.1 Map.prototype.clear()
11146      // 23.2.3.2 Set.prototype.clear()
11147      clear: function clear() {
11148        for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {
11149          entry.r = true;
11150          if (entry.p) entry.p = entry.p.n = undefined;
11151          delete data[entry.i];
11152        }
11153        that._f = that._l = undefined;
11154        that[SIZE] = 0;
11155      },
11156      // 23.1.3.3 Map.prototype.delete(key)
11157      // 23.2.3.4 Set.prototype.delete(value)
11158      'delete': function (key) {
11159        var that = validate(this, NAME);
11160        var entry = getEntry(that, key);
11161        if (entry) {
11162          var next = entry.n;
11163          var prev = entry.p;
11164          delete that._i[entry.i];
11165          entry.r = true;
11166          if (prev) prev.n = next;
11167          if (next) next.p = prev;
11168          if (that._f == entry) that._f = next;
11169          if (that._l == entry) that._l = prev;
11170          that[SIZE]--;
11171        } return !!entry;
11172      },
11173      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
11174      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
11175      forEach: function forEach(callbackfn /* , that = undefined */) {
11176        validate(this, NAME);
11177        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
11178        var entry;
11179        while (entry = entry ? entry.n : this._f) {
11180          f(entry.v, entry.k, this);
11181          // revert to the last existing entry
11182          while (entry && entry.r) entry = entry.p;
11183        }
11184      },
11185      // 23.1.3.7 Map.prototype.has(key)
11186      // 23.2.3.7 Set.prototype.has(value)
11187      has: function has(key) {
11188        return !!getEntry(validate(this, NAME), key);
11189      }
11190    });
11191    if (DESCRIPTORS) dP(C.prototype, 'size', {
11192      get: function () {
11193        return validate(this, NAME)[SIZE];
11194      }
11195    });
11196    return C;
11197  },
11198  def: function (that, key, value) {
11199    var entry = getEntry(that, key);
11200    var prev, index;
11201    // change existing entry
11202    if (entry) {
11203      entry.v = value;
11204    // create new entry
11205    } else {
11206      that._l = entry = {
11207        i: index = fastKey(key, true), // <- index
11208        k: key,                        // <- key
11209        v: value,                      // <- value
11210        p: prev = that._l,             // <- previous entry
11211        n: undefined,                  // <- next entry
11212        r: false                       // <- removed
11213      };
11214      if (!that._f) that._f = entry;
11215      if (prev) prev.n = entry;
11216      that[SIZE]++;
11217      // add to index
11218      if (index !== 'F') that._i[index] = entry;
11219    } return that;
11220  },
11221  getEntry: getEntry,
11222  setStrong: function (C, NAME, IS_MAP) {
11223    // add .keys, .values, .entries, [@@iterator]
11224    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
11225    $iterDefine(C, NAME, function (iterated, kind) {
11226      this._t = validate(iterated, NAME); // target
11227      this._k = kind;                     // kind
11228      this._l = undefined;                // previous
11229    }, function () {
11230      var that = this;
11231      var kind = that._k;
11232      var entry = that._l;
11233      // revert to the last existing entry
11234      while (entry && entry.r) entry = entry.p;
11235      // get next entry
11236      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {
11237        // or finish the iteration
11238        that._t = undefined;
11239        return step(1);
11240      }
11241      // return step by kind
11242      if (kind == 'keys') return step(0, entry.k);
11243      if (kind == 'values') return step(0, entry.v);
11244      return step(0, [entry.k, entry.v]);
11245    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
11246
11247    // add [@@species], 23.1.2.2, 23.2.2.2
11248    setSpecies(NAME);
11249  }
11250};
11251
11252
11253/***/ }),
11254/* 109 */
11255/***/ (function(module, exports, __webpack_require__) {
11256
11257var hide = __webpack_require__(13);
11258module.exports = function (target, src, safe) {
11259  for (var key in src) {
11260    if (safe && target[key]) target[key] = src[key];
11261    else hide(target, key, src[key]);
11262  } return target;
11263};
11264
11265
11266/***/ }),
11267/* 110 */
vendor: 4,182 bytes, lines 11268-11415
11268/***/ (function(module, exports) {
11269
11270module.exports = function (it, Constructor, name, forbiddenField) {
11271  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {
11272    throw TypeError(name + ': incorrect invocation!');
11273  } return it;
11274};
11275
11276
11277/***/ }),
11278/* 111 */
11279/***/ (function(module, exports, __webpack_require__) {
11280
11281// call something on iterator step with safe closing on error
11282var anObject = __webpack_require__(14);
11283module.exports = function (iterator, fn, value, entries) {
11284  try {
11285    return entries ? fn(anObject(value)[0], value[1]) : fn(value);
11286  // 7.4.6 IteratorClose(iterator, completion)
11287  } catch (e) {
11288    var ret = iterator['return'];
11289    if (ret !== undefined) anObject(ret.call(iterator));
11290    throw e;
11291  }
11292};
11293
11294
11295/***/ }),
11296/* 112 */
11297/***/ (function(module, exports, __webpack_require__) {
11298
11299// check on default Array iterator
11300var Iterators = __webpack_require__(23);
11301var ITERATOR = __webpack_require__(4)('iterator');
11302var ArrayProto = Array.prototype;
11303
11304module.exports = function (it) {
11305  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
11306};
11307
11308
11309/***/ }),
11310/* 113 */
11311/***/ (function(module, exports, __webpack_require__) {
11312
11313"use strict";
11314
11315var global = __webpack_require__(10);
11316var $export = __webpack_require__(3);
11317var meta = __webpack_require__(40);
11318var fails = __webpack_require__(19);
11319var hide = __webpack_require__(13);
11320var redefineAll = __webpack_require__(109);
11321var forOf = __webpack_require__(41);
11322var anInstance = __webpack_require__(110);
11323var isObject = __webpack_require__(9);
11324var setToStringTag = __webpack_require__(39);
11325var dP = __webpack_require__(6).f;
11326var each = __webpack_require__(229)(0);
11327var DESCRIPTORS = __webpack_require__(5);
11328
11329module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
11330  var Base = global[NAME];
11331  var C = Base;
11332  var ADDER = IS_MAP ? 'set' : 'add';
11333  var proto = C && C.prototype;
11334  var O = {};
11335  if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {
11336    new C().entries().next();
11337  }))) {
11338    // create collection constructor
11339    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
11340    redefineAll(C.prototype, methods);
11341    meta.NEED = true;
11342  } else {
11343    C = wrapper(function (target, iterable) {
11344      anInstance(target, C, NAME, '_c');
11345      target._c = new Base();
11346      if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target);
11347    });
11348    each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {
11349      var IS_ADDER = KEY == 'add' || KEY == 'set';
11350      if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) {
11351        anInstance(this, C, KEY);
11352        if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;
11353        var result = this._c[KEY](a === 0 ? 0 : a, b);
11354        return IS_ADDER ? this : result;
11355      });
11356    });
11357    IS_WEAK || dP(C.prototype, 'size', {
11358      get: function () {
11359        return this._c.size;
11360      }
11361    });
11362  }
11363
11364  setToStringTag(C, NAME);
11365
11366  O[NAME] = C;
11367  $export($export.G + $export.W + $export.F, O);
11368
11369  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
11370
11371  return C;
11372};
11373
11374
11375/***/ }),
11376/* 114 */
11377/***/ (function(module, exports, __webpack_require__) {
11378
11379// https://github.com/DavidBruant/Map-Set.prototype.toJSON
11380var classof = __webpack_require__(68);
11381var from = __webpack_require__(233);
11382module.exports = function (NAME) {
11383  return function toJSON() {
11384    if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn't generic");
11385    return from(this);
11386  };
11387};
11388
11389
11390/***/ }),
11391/* 115 */
11392/***/ (function(module, exports, __webpack_require__) {
11393
11394"use strict";
11395
11396// https://tc39.github.io/proposal-setmap-offrom/
11397var $export = __webpack_require__(3);
11398
11399module.exports = function (COLLECTION) {
11400  $export($export.S, COLLECTION, { of: function of() {
11401    var length = arguments.length;
11402    var A = new Array(length);
11403    while (length--) A[length] = arguments[length];
11404    return new this(A);
11405  } });
11406};
11407
11408
11409/***/ }),
11410/* 116 */
11411/***/ (function(module, exports, __webpack_require__) {
11412
11413"use strict";
11414
11415// https://tc39.github.io/proposal-setmap-offrom/
11416var $export = __webpack_require__(3);
11417var aFunction = __webpack_require__(97);
11418var ctx = __webpack_require__(20);
11419var forOf = __webpack_require__(41);
11420
11421module.exports = function (COLLECTION) {
11422  $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {
11423    var mapFn = arguments[1];
11424    var mapping, A, n, cb;
11425    aFunction(this);
11426    mapping = mapFn !== undefined;
11427    if (mapping) aFunction(mapFn);
11428    if (source == undefined) return new this();
11429    A = [];
11430    if (mapping) {
11431      n = 0;
11432      cb = ctx(mapFn, arguments[2], 2);
11433      forOf(source, false, function (nextItem) {
11434        A.push(cb(nextItem, n++));
11435      });
11436    } else {
11437      forOf(source, false, A.push, A);
11438    }
11439    return new this(A);
11440  } });
11441};
11442
11443
11444/***/ }),
11445/* 117 */
11446/***/ (function(module, exports, __webpack_require__) {
11447
11448/* Copyright 2013 Google Inc. All Rights Reserved.
11449
11450   Licensed under the Apache License, Version 2.0 (the "License");
11451   you may not use this file except in compliance with the License.
11452   You may obtain a copy of the License at
11453
11454   http://www.apache.org/licenses/LICENSE-2.0
11455
11456   Unless required by applicable law or agreed to in writing, software
11457   distributed under the License is distributed on an "AS IS" BASIS,
11458   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11459   See the License for the specific language governing permissions and
11460   limitations under the License.
11461*/
11462
11463var BrotliInput = __webpack_require__(118).BrotliInput;
11464var BrotliOutput = __webpack_require__(118).BrotliOutput;
11465var BrotliBitReader = __webpack_require__(285);
11466var BrotliDictionary = __webpack_require__(119);
11467var HuffmanCode = __webpack_require__(120).HuffmanCode;
11468var BrotliBuildHuffmanTable = __webpack_require__(120).BrotliBuildHuffmanTable;
11469var Context = __webpack_require__(289);
11470var Prefix = __webpack_require__(290);
11471var Transform = __webpack_require__(291);
11472
11473var kDefaultCodeLength = 8;
11474var kCodeLengthRepeatCode = 16;
11475var kNumLiteralCodes = 256;
11476var kNumInsertAndCopyCodes = 704;
11477var kNumBlockLengthCodes = 26;
11478var kLiteralContextBits = 6;
11479var kDistanceContextBits = 2;
11480
11481var HUFFMAN_TABLE_BITS = 8;
11482var HUFFMAN_TABLE_MASK = 0xff;
11483/* Maximum possible Huffman table size for an alphabet size of 704, max code
11484 * length 15 and root table bits 8. */
11485var HUFFMAN_MAX_TABLE_SIZE = 1080;
11486
11487var CODE_LENGTH_CODES = 18;
11488var kCodeLengthCodeOrder = new Uint8Array([
11489  1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,
11490]);
11491
11492var NUM_DISTANCE_SHORT_CODES = 16;
11493var kDistanceShortCodeIndexOffset = new Uint8Array([
11494  3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2
11495]);
11496
11497var kDistanceShortCodeValueOffset = new Int8Array([
11498  0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3
11499]);
11500
11501var kMaxHuffmanTableSize = new Uint16Array([
11502  256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,
11503  854, 886, 920, 952, 984, 1016, 1048, 1080
11504]);
11505
11506function DecodeWindowBits(br) {
11507  var n;
11508  if (br.readBits(1) === 0) {
11509    return 16;
11510  }
11511
11512  n = br.readBits(3);
11513  if (n > 0) {
11514    return 17 + n;
11515  }
11516
11517  n = br.readBits(3);
11518  if (n > 0) {
11519    return 8 + n;
11520  }
11521
11522  return 17;
11523}
11524
11525/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */
11526function DecodeVarLenUint8(br) {
11527  if (br.readBits(1)) {
11528    var nbits = br.readBits(3);
11529    if (nbits === 0) {
11530      return 1;
11531    } else {
11532      return br.readBits(nbits) + (1 << nbits);
11533    }
11534  }
11535  return 0;
11536}
11537
11538function MetaBlockLength() {
11539  this.meta_block_length = 0;
11540  this.input_end = 0;
11541  this.is_uncompressed = 0;
11542  this.is_metadata = false;
11543}
11544
11545function DecodeMetaBlockLength(br) {
11546  var out = new MetaBlockLength;
11547  var size_nibbles;
11548  var size_bytes;
11549  var i;
11550
11551  out.input_end = br.readBits(1);
11552  if (out.input_end && br.readBits(1)) {
11553    return out;
11554  }
11555
11556  size_nibbles = br.readBits(2) + 4;
11557  if (size_nibbles === 7) {
11558    out.is_metadata = true;
11559
11560    if (br.readBits(1) !== 0)
11561      throw new Error('Invalid reserved bit');
11562
11563    size_bytes = br.readBits(2);
11564    if (size_bytes === 0)
11565      return out;
11566
11567    for (i = 0; i < size_bytes; i++) {
11568      var next_byte = br.readBits(8);
11569      if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0)
11570        throw new Error('Invalid size byte');
11571
vendor: 28,212 bytes, lines 11572-12459
11572      out.meta_block_length |= next_byte << (i * 8);
11573    }
11574  } else {
11575    for (i = 0; i < size_nibbles; ++i) {
11576      var next_nibble = br.readBits(4);
11577      if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0)
11578        throw new Error('Invalid size nibble');
11579
11580      out.meta_block_length |= next_nibble << (i * 4);
11581    }
11582  }
11583
11584  ++out.meta_block_length;
11585
11586  if (!out.input_end && !out.is_metadata) {
11587    out.is_uncompressed = br.readBits(1);
11588  }
11589
11590  return out;
11591}
11592
11593/* Decodes the next Huffman code from bit-stream. */
11594function ReadSymbol(table, index, br) {
11595  var start_index = index;
11596
11597  var nbits;
11598  br.fillBitWindow();
11599  index += (br.val_ >>> br.bit_pos_) & HUFFMAN_TABLE_MASK;
11600  nbits = table[index].bits - HUFFMAN_TABLE_BITS;
11601  if (nbits > 0) {
11602    br.bit_pos_ += HUFFMAN_TABLE_BITS;
11603    index += table[index].value;
11604    index += (br.val_ >>> br.bit_pos_) & ((1 << nbits) - 1);
11605  }
11606  br.bit_pos_ += table[index].bits;
11607  return table[index].value;
11608}
11609
11610function ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) {
11611  var symbol = 0;
11612  var prev_code_len = kDefaultCodeLength;
11613  var repeat = 0;
11614  var repeat_code_len = 0;
11615  var space = 32768;
11616
11617  var table = [];
11618  for (var i = 0; i < 32; i++)
11619    table.push(new HuffmanCode(0, 0));
11620
11621  BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES);
11622
11623  while (symbol < num_symbols && space > 0) {
11624    var p = 0;
11625    var code_len;
11626
11627    br.readMoreInput();
11628    br.fillBitWindow();
11629    p += (br.val_ >>> br.bit_pos_) & 31;
11630    br.bit_pos_ += table[p].bits;
11631    code_len = table[p].value & 0xff;
11632    if (code_len < kCodeLengthRepeatCode) {
11633      repeat = 0;
11634      code_lengths[symbol++] = code_len;
11635      if (code_len !== 0) {
11636        prev_code_len = code_len;
11637        space -= 32768 >> code_len;
11638      }
11639    } else {
11640      var extra_bits = code_len - 14;
11641      var old_repeat;
11642      var repeat_delta;
11643      var new_len = 0;
11644      if (code_len === kCodeLengthRepeatCode) {
11645        new_len = prev_code_len;
11646      }
11647      if (repeat_code_len !== new_len) {
11648        repeat = 0;
11649        repeat_code_len = new_len;
11650      }
11651      old_repeat = repeat;
11652      if (repeat > 0) {
11653        repeat -= 2;
11654        repeat <<= extra_bits;
11655      }
11656      repeat += br.readBits(extra_bits) + 3;
11657      repeat_delta = repeat - old_repeat;
11658      if (symbol + repeat_delta > num_symbols) {
11659        throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols');
11660      }
11661
11662      for (var x = 0; x < repeat_delta; x++)
11663        code_lengths[symbol + x] = repeat_code_len;
11664
11665      symbol += repeat_delta;
11666
11667      if (repeat_code_len !== 0) {
11668        space -= repeat_delta << (15 - repeat_code_len);
11669      }
11670    }
11671  }
11672  if (space !== 0) {
11673    throw new Error("[ReadHuffmanCodeLengths] space = " + space);
11674  }
11675
11676  for (; symbol < num_symbols; symbol++)
11677    code_lengths[symbol] = 0;
11678}
11679
11680function ReadHuffmanCode(alphabet_size, tables, table, br) {
11681  var table_size = 0;
11682  var simple_code_or_skip;
11683  var code_lengths = new Uint8Array(alphabet_size);
11684
11685  br.readMoreInput();
11686
11687  /* simple_code_or_skip is used as follows:
11688     1 for simple code;
11689     0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */
11690  simple_code_or_skip = br.readBits(2);
11691  if (simple_code_or_skip === 1) {
11692    /* Read symbols, codes & code lengths directly. */
11693    var i;
11694    var max_bits_counter = alphabet_size - 1;
11695    var max_bits = 0;
11696    var symbols = new Int32Array(4);
11697    var num_symbols = br.readBits(2) + 1;
11698    while (max_bits_counter) {
11699      max_bits_counter >>= 1;
11700      ++max_bits;
11701    }
11702
11703    for (i = 0; i < num_symbols; ++i) {
11704      symbols[i] = br.readBits(max_bits) % alphabet_size;
11705      code_lengths[symbols[i]] = 2;
11706    }
11707    code_lengths[symbols[0]] = 1;
11708    switch (num_symbols) {
11709      case 1:
11710        break;
11711      case 3:
11712        if ((symbols[0] === symbols[1]) ||
11713            (symbols[0] === symbols[2]) ||
11714            (symbols[1] === symbols[2])) {
11715          throw new Error('[ReadHuffmanCode] invalid symbols');
11716        }
11717        break;
11718      case 2:
11719        if (symbols[0] === symbols[1]) {
11720          throw new Error('[ReadHuffmanCode] invalid symbols');
11721        }
11722
11723        code_lengths[symbols[1]] = 1;
11724        break;
11725      case 4:
11726        if ((symbols[0] === symbols[1]) ||
11727            (symbols[0] === symbols[2]) ||
11728            (symbols[0] === symbols[3]) ||
11729            (symbols[1] === symbols[2]) ||
11730            (symbols[1] === symbols[3]) ||
11731            (symbols[2] === symbols[3])) {
11732          throw new Error('[ReadHuffmanCode] invalid symbols');
11733        }
11734
11735        if (br.readBits(1)) {
11736          code_lengths[symbols[2]] = 3;
11737          code_lengths[symbols[3]] = 3;
11738        } else {
11739          code_lengths[symbols[0]] = 2;
11740        }
11741        break;
11742    }
11743  } else {  /* Decode Huffman-coded code lengths. */
11744    var i;
11745    var code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES);
11746    var space = 32;
11747    var num_codes = 0;
11748    /* Static Huffman code for the code length code lengths */
11749    var huff = [
11750      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2),
11751      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1),
11752      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2),
11753      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5)
11754    ];
11755    for (i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; ++i) {
11756      var code_len_idx = kCodeLengthCodeOrder[i];
11757      var p = 0;
11758      var v;
11759      br.fillBitWindow();
11760      p += (br.val_ >>> br.bit_pos_) & 15;
11761      br.bit_pos_ += huff[p].bits;
11762      v = huff[p].value;
11763      code_length_code_lengths[code_len_idx] = v;
11764      if (v !== 0) {
11765        space -= (32 >> v);
11766        ++num_codes;
11767      }
11768    }
11769
11770    if (!(num_codes === 1 || space === 0))
11771      throw new Error('[ReadHuffmanCode] invalid num_codes or space');
11772
11773    ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br);
11774  }
11775
11776  table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size);
11777
11778  if (table_size === 0) {
11779    throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: ");
11780  }
11781
11782  return table_size;
11783}
11784
11785function ReadBlockLength(table, index, br) {
11786  var code;
11787  var nbits;
11788  code = ReadSymbol(table, index, br);
11789  nbits = Prefix.kBlockLengthPrefixCode[code].nbits;
11790  return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits);
11791}
11792
11793function TranslateShortCodes(code, ringbuffer, index) {
11794  var val;
11795  if (code < NUM_DISTANCE_SHORT_CODES) {
11796    index += kDistanceShortCodeIndexOffset[code];
11797    index &= 3;
11798    val = ringbuffer[index] + kDistanceShortCodeValueOffset[code];
11799  } else {
11800    val = code - NUM_DISTANCE_SHORT_CODES + 1;
11801  }
11802  return val;
11803}
11804
11805function MoveToFront(v, index) {
11806  var value = v[index];
11807  var i = index;
11808  for (; i; --i) v[i] = v[i - 1];
11809  v[0] = value;
11810}
11811
11812function InverseMoveToFrontTransform(v, v_len) {
11813  var mtf = new Uint8Array(256);
11814  var i;
11815  for (i = 0; i < 256; ++i) {
11816    mtf[i] = i;
11817  }
11818  for (i = 0; i < v_len; ++i) {
11819    var index = v[i];
11820    v[i] = mtf[index];
11821    if (index) MoveToFront(mtf, index);
11822  }
11823}
11824
11825/* Contains a collection of huffman trees with the same alphabet size. */
11826function HuffmanTreeGroup(alphabet_size, num_htrees) {
11827  this.alphabet_size = alphabet_size;
11828  this.num_htrees = num_htrees;
11829  this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]);
11830  this.htrees = new Uint32Array(num_htrees);
11831}
11832
11833HuffmanTreeGroup.prototype.decode = function(br) {
11834  var i;
11835  var table_size;
11836  var next = 0;
11837  for (i = 0; i < this.num_htrees; ++i) {
11838    this.htrees[i] = next;
11839    table_size = ReadHuffmanCode(this.alphabet_size, this.codes, next, br);
11840    next += table_size;
11841  }
11842};
11843
11844function DecodeContextMap(context_map_size, br) {
11845  var out = { num_htrees: null, context_map: null };
11846  var use_rle_for_zeros;
11847  var max_run_length_prefix = 0;
11848  var table;
11849  var i;
11850
11851  br.readMoreInput();
11852  var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1;
11853
11854  var context_map = out.context_map = new Uint8Array(context_map_size);
11855  if (num_htrees <= 1) {
11856    return out;
11857  }
11858
11859  use_rle_for_zeros = br.readBits(1);
11860  if (use_rle_for_zeros) {
11861    max_run_length_prefix = br.readBits(4) + 1;
11862  }
11863
11864  table = [];
11865  for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) {
11866    table[i] = new HuffmanCode(0, 0);
11867  }
11868
11869  ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br);
11870
11871  for (i = 0; i < context_map_size;) {
11872    var code;
11873
11874    br.readMoreInput();
11875    code = ReadSymbol(table, 0, br);
11876    if (code === 0) {
11877      context_map[i] = 0;
11878      ++i;
11879    } else if (code <= max_run_length_prefix) {
11880      var reps = 1 + (1 << code) + br.readBits(code);
11881      while (--reps) {
11882        if (i >= context_map_size) {
11883          throw new Error("[DecodeContextMap] i >= context_map_size");
11884        }
11885        context_map[i] = 0;
11886        ++i;
11887      }
11888    } else {
11889      context_map[i] = code - max_run_length_prefix;
11890      ++i;
11891    }
11892  }
11893  if (br.readBits(1)) {
11894    InverseMoveToFrontTransform(context_map, context_map_size);
11895  }
11896
11897  return out;
11898}
11899
11900function DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) {
11901  var ringbuffer = tree_type * 2;
11902  var index = tree_type;
11903  var type_code = ReadSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br);
11904  var block_type;
11905  if (type_code === 0) {
11906    block_type = ringbuffers[ringbuffer + (indexes[index] & 1)];
11907  } else if (type_code === 1) {
11908    block_type = ringbuffers[ringbuffer + ((indexes[index] - 1) & 1)] + 1;
11909  } else {
11910    block_type = type_code - 2;
11911  }
11912  if (block_type >= max_block_type) {
11913    block_type -= max_block_type;
11914  }
11915  block_types[tree_type] = block_type;
11916  ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type;
11917  ++indexes[index];
11918}
11919
11920function CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) {
11921  var rb_size = ringbuffer_mask + 1;
11922  var rb_pos = pos & ringbuffer_mask;
11923  var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK;
11924  var nbytes;
11925
11926  /* For short lengths copy byte-by-byte */
11927  if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) {
11928    while (len-- > 0) {
11929      br.readMoreInput();
11930      ringbuffer[rb_pos++] = br.readBits(8);
11931      if (rb_pos === rb_size) {
11932        output.write(ringbuffer, rb_size);
11933        rb_pos = 0;
11934      }
11935    }
11936    return;
11937  }
11938
11939  if (br.bit_end_pos_ < 32) {
11940    throw new Error('[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32');
11941  }
11942
11943  /* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */
11944  while (br.bit_pos_ < 32) {
11945    ringbuffer[rb_pos] = (br.val_ >>> br.bit_pos_);
11946    br.bit_pos_ += 8;
11947    ++rb_pos;
11948    --len;
11949  }
11950
11951  /* Copy remaining bytes from br.buf_ to ringbuffer. */
11952  nbytes = (br.bit_end_pos_ - br.bit_pos_) >> 3;
11953  if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) {
11954    var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos;
11955    for (var x = 0; x < tail; x++)
11956      ringbuffer[rb_pos + x] = br.buf_[br_pos + x];
11957
11958    nbytes -= tail;
11959    rb_pos += tail;
11960    len -= tail;
11961    br_pos = 0;
11962  }
11963
11964  for (var x = 0; x < nbytes; x++)
11965    ringbuffer[rb_pos + x] = br.buf_[br_pos + x];
11966
11967  rb_pos += nbytes;
11968  len -= nbytes;
11969
11970  /* If we wrote past the logical end of the ringbuffer, copy the tail of the
11971     ringbuffer to its beginning and flush the ringbuffer to the output. */
11972  if (rb_pos >= rb_size) {
11973    output.write(ringbuffer, rb_size);
11974    rb_pos -= rb_size;
11975    for (var x = 0; x < rb_pos; x++)
11976      ringbuffer[x] = ringbuffer[rb_size + x];
11977  }
11978
11979  /* If we have more to copy than the remaining size of the ringbuffer, then we
11980     first fill the ringbuffer from the input and then flush the ringbuffer to
11981     the output */
11982  while (rb_pos + len >= rb_size) {
11983    nbytes = rb_size - rb_pos;
11984    if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) {
11985      throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');
11986    }
11987    output.write(ringbuffer, rb_size);
11988    len -= nbytes;
11989    rb_pos = 0;
11990  }
11991
11992  /* Copy straight from the input onto the ringbuffer. The ringbuffer will be
11993     flushed to the output at a later time. */
11994  if (br.input_.read(ringbuffer, rb_pos, len) < len) {
11995    throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');
11996  }
11997
11998  /* Restore the state of the bit reader. */
11999  br.reset();
12000}
12001
12002/* Advances the bit reader position to the next byte boundary and verifies
12003   that any skipped bits are set to zero. */
12004function JumpToByteBoundary(br) {
12005  var new_bit_pos = (br.bit_pos_ + 7) & ~7;
12006  var pad_bits = br.readBits(new_bit_pos - br.bit_pos_);
12007  return pad_bits == 0;
12008}
12009
12010function BrotliDecompressedSize(buffer) {
12011  var input = new BrotliInput(buffer);
12012  var br = new BrotliBitReader(input);
12013  DecodeWindowBits(br);
12014  var out = DecodeMetaBlockLength(br);
12015  return out.meta_block_length;
12016}
12017
12018exports.BrotliDecompressedSize = BrotliDecompressedSize;
12019
12020function BrotliDecompressBuffer(buffer, output_size) {
12021  var input = new BrotliInput(buffer);
12022
12023  if (output_size == null) {
12024    output_size = BrotliDecompressedSize(buffer);
12025  }
12026
12027  var output_buffer = new Uint8Array(output_size);
12028  var output = new BrotliOutput(output_buffer);
12029
12030  BrotliDecompress(input, output);
12031
12032  if (output.pos < output.buffer.length) {
12033    output.buffer = output.buffer.subarray(0, output.pos);
12034  }
12035
12036  return output.buffer;
12037}
12038
12039exports.BrotliDecompressBuffer = BrotliDecompressBuffer;
12040
12041function BrotliDecompress(input, output) {
12042  var i;
12043  var pos = 0;
12044  var input_end = 0;
12045  var window_bits = 0;
12046  var max_backward_distance;
12047  var max_distance = 0;
12048  var ringbuffer_size;
12049  var ringbuffer_mask;
12050  var ringbuffer;
12051  var ringbuffer_end;
12052  /* This ring buffer holds a few past copy distances that will be used by */
12053  /* some special distance codes. */
12054  var dist_rb = [ 16, 15, 11, 4 ];
12055  var dist_rb_idx = 0;
12056  /* The previous 2 bytes used for context. */
12057  var prev_byte1 = 0;
12058  var prev_byte2 = 0;
12059  var hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)];
12060  var block_type_trees;
12061  var block_len_trees;
12062  var br;
12063
12064  /* We need the slack region for the following reasons:
12065       - always doing two 8-byte copies for fast backward copying
12066       - transforms
12067       - flushing the input ringbuffer when decoding uncompressed blocks */
12068  var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE;
12069
12070  br = new BrotliBitReader(input);
12071
12072  /* Decode window size. */
12073  window_bits = DecodeWindowBits(br);
12074  max_backward_distance = (1 << window_bits) - 16;
12075
12076  ringbuffer_size = 1 << window_bits;
12077  ringbuffer_mask = ringbuffer_size - 1;
12078  ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength);
12079  ringbuffer_end = ringbuffer_size;
12080
12081  block_type_trees = [];
12082  block_len_trees = [];
12083  for (var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) {
12084    block_type_trees[x] = new HuffmanCode(0, 0);
12085    block_len_trees[x] = new HuffmanCode(0, 0);
12086  }
12087
12088  while (!input_end) {
12089    var meta_block_remaining_len = 0;
12090    var is_uncompressed;
12091    var block_length = [ 1 << 28, 1 << 28, 1 << 28 ];
12092    var block_type = [ 0 ];
12093    var num_block_types = [ 1, 1, 1 ];
12094    var block_type_rb = [ 0, 1, 0, 1, 0, 1 ];
12095    var block_type_rb_index = [ 0 ];
12096    var distance_postfix_bits;
12097    var num_direct_distance_codes;
12098    var distance_postfix_mask;
12099    var num_distance_codes;
12100    var context_map = null;
12101    var context_modes = null;
12102    var num_literal_htrees;
12103    var dist_context_map = null;
12104    var num_dist_htrees;
12105    var context_offset = 0;
12106    var context_map_slice = null;
12107    var literal_htree_index = 0;
12108    var dist_context_offset = 0;
12109    var dist_context_map_slice = null;
12110    var dist_htree_index = 0;
12111    var context_lookup_offset1 = 0;
12112    var context_lookup_offset2 = 0;
12113    var context_mode;
12114    var htree_command;
12115
12116    for (i = 0; i < 3; ++i) {
12117      hgroup[i].codes = null;
12118      hgroup[i].htrees = null;
12119    }
12120
12121    br.readMoreInput();
12122
12123    var _out = DecodeMetaBlockLength(br);
12124    meta_block_remaining_len = _out.meta_block_length;
12125    if (pos + meta_block_remaining_len > output.buffer.length) {
12126      /* We need to grow the output buffer to fit the additional data. */
12127      var tmp = new Uint8Array( pos + meta_block_remaining_len );
12128      tmp.set( output.buffer );
12129      output.buffer = tmp;
12130    }
12131    input_end = _out.input_end;
12132    is_uncompressed = _out.is_uncompressed;
12133
12134    if (_out.is_metadata) {
12135      JumpToByteBoundary(br);
12136
12137      for (; meta_block_remaining_len > 0; --meta_block_remaining_len) {
12138        br.readMoreInput();
12139        /* Read one byte and ignore it. */
12140        br.readBits(8);
12141      }
12142
12143      continue;
12144    }
12145
12146    if (meta_block_remaining_len === 0) {
12147      continue;
12148    }
12149
12150    if (is_uncompressed) {
12151      br.bit_pos_ = (br.bit_pos_ + 7) & ~7;
12152      CopyUncompressedBlockToOutput(output, meta_block_remaining_len, pos,
12153                                    ringbuffer, ringbuffer_mask, br);
12154      pos += meta_block_remaining_len;
12155      continue;
12156    }
12157
12158    for (i = 0; i < 3; ++i) {
12159      num_block_types[i] = DecodeVarLenUint8(br) + 1;
12160      if (num_block_types[i] >= 2) {
12161        ReadHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);
12162        ReadHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);
12163        block_length[i] = ReadBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);
12164        block_type_rb_index[i] = 1;
12165      }
12166    }
12167
12168    br.readMoreInput();
12169
12170    distance_postfix_bits = br.readBits(2);
12171    num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits);
12172    distance_postfix_mask = (1 << distance_postfix_bits) - 1;
12173    num_distance_codes = (num_direct_distance_codes + (48 << distance_postfix_bits));
12174    context_modes = new Uint8Array(num_block_types[0]);
12175
12176    for (i = 0; i < num_block_types[0]; ++i) {
12177       br.readMoreInput();
12178       context_modes[i] = (br.readBits(2) << 1);
12179    }
12180
12181    var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br);
12182    num_literal_htrees = _o1.num_htrees;
12183    context_map = _o1.context_map;
12184
12185    var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br);
12186    num_dist_htrees = _o2.num_htrees;
12187    dist_context_map = _o2.context_map;
12188
12189    hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees);
12190    hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]);
12191    hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees);
12192
12193    for (i = 0; i < 3; ++i) {
12194      hgroup[i].decode(br);
12195    }
12196
12197    context_map_slice = 0;
12198    dist_context_map_slice = 0;
12199    context_mode = context_modes[block_type[0]];
12200    context_lookup_offset1 = Context.lookupOffsets[context_mode];
12201    context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];
12202    htree_command = hgroup[1].htrees[0];
12203
12204    while (meta_block_remaining_len > 0) {
12205      var cmd_code;
12206      var range_idx;
12207      var insert_code;
12208      var copy_code;
12209      var insert_length;
12210      var copy_length;
12211      var distance_code;
12212      var distance;
12213      var context;
12214      var j;
12215      var copy_dst;
12216
12217      br.readMoreInput();
12218
12219      if (block_length[1] === 0) {
12220        DecodeBlockType(num_block_types[1],
12221                        block_type_trees, 1, block_type, block_type_rb,
12222                        block_type_rb_index, br);
12223        block_length[1] = ReadBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br);
12224        htree_command = hgroup[1].htrees[block_type[1]];
12225      }
12226      --block_length[1];
12227      cmd_code = ReadSymbol(hgroup[1].codes, htree_command, br);
12228      range_idx = cmd_code >> 6;
12229      if (range_idx >= 2) {
12230        range_idx -= 2;
12231        distance_code = -1;
12232      } else {
12233        distance_code = 0;
12234      }
12235      insert_code = Prefix.kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7);
12236      copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7);
12237      insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset +
12238          br.readBits(Prefix.kInsertLengthPrefixCode[insert_code].nbits);
12239      copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset +
12240          br.readBits(Prefix.kCopyLengthPrefixCode[copy_code].nbits);
12241      prev_byte1 = ringbuffer[pos-1 & ringbuffer_mask];
12242      prev_byte2 = ringbuffer[pos-2 & ringbuffer_mask];
12243      for (j = 0; j < insert_length; ++j) {
12244        br.readMoreInput();
12245
12246        if (block_length[0] === 0) {
12247          DecodeBlockType(num_block_types[0],
12248                          block_type_trees, 0, block_type, block_type_rb,
12249                          block_type_rb_index, br);
12250          block_length[0] = ReadBlockLength(block_len_trees, 0, br);
12251          context_offset = block_type[0] << kLiteralContextBits;
12252          context_map_slice = context_offset;
12253          context_mode = context_modes[block_type[0]];
12254          context_lookup_offset1 = Context.lookupOffsets[context_mode];
12255          context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];
12256        }
12257        context = (Context.lookup[context_lookup_offset1 + prev_byte1] |
12258                   Context.lookup[context_lookup_offset2 + prev_byte2]);
12259        literal_htree_index = context_map[context_map_slice + context];
12260        --block_length[0];
12261        prev_byte2 = prev_byte1;
12262        prev_byte1 = ReadSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br);
12263        ringbuffer[pos & ringbuffer_mask] = prev_byte1;
12264        if ((pos & ringbuffer_mask) === ringbuffer_mask) {
12265          output.write(ringbuffer, ringbuffer_size);
12266        }
12267        ++pos;
12268      }
12269      meta_block_remaining_len -= insert_length;
12270      if (meta_block_remaining_len <= 0) break;
12271
12272      if (distance_code < 0) {
12273        var context;
12274
12275        br.readMoreInput();
12276        if (block_length[2] === 0) {
12277          DecodeBlockType(num_block_types[2],
12278                          block_type_trees, 2, block_type, block_type_rb,
12279                          block_type_rb_index, br);
12280          block_length[2] = ReadBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br);
12281          dist_context_offset = block_type[2] << kDistanceContextBits;
12282          dist_context_map_slice = dist_context_offset;
12283        }
12284        --block_length[2];
12285        context = (copy_length > 4 ? 3 : copy_length - 2) & 0xff;
12286        dist_htree_index = dist_context_map[dist_context_map_slice + context];
12287        distance_code = ReadSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br);
12288        if (distance_code >= num_direct_distance_codes) {
12289          var nbits;
12290          var postfix;
12291          var offset;
12292          distance_code -= num_direct_distance_codes;
12293          postfix = distance_code & distance_postfix_mask;
12294          distance_code >>= distance_postfix_bits;
12295          nbits = (distance_code >> 1) + 1;
12296          offset = ((2 + (distance_code & 1)) << nbits) - 4;
12297          distance_code = num_direct_distance_codes +
12298              ((offset + br.readBits(nbits)) <<
12299               distance_postfix_bits) + postfix;
12300        }
12301      }
12302
12303      /* Convert the distance code to the actual distance by possibly looking */
12304      /* up past distnaces from the ringbuffer. */
12305      distance = TranslateShortCodes(distance_code, dist_rb, dist_rb_idx);
12306      if (distance < 0) {
12307        throw new Error('[BrotliDecompress] invalid distance');
12308      }
12309
12310      if (pos < max_backward_distance &&
12311          max_distance !== max_backward_distance) {
12312        max_distance = pos;
12313      } else {
12314        max_distance = max_backward_distance;
12315      }
12316
12317      copy_dst = pos & ringbuffer_mask;
12318
12319      if (distance > max_distance) {
12320        if (copy_length >= BrotliDictionary.minDictionaryWordLength &&
12321            copy_length <= BrotliDictionary.maxDictionaryWordLength) {
12322          var offset = BrotliDictionary.offsetsByLength[copy_length];
12323          var word_id = distance - max_distance - 1;
12324          var shift = BrotliDictionary.sizeBitsByLength[copy_length];
12325          var mask = (1 << shift) - 1;
12326          var word_idx = word_id & mask;
12327          var transform_idx = word_id >> shift;
12328          offset += word_idx * copy_length;
12329          if (transform_idx < Transform.kNumTransforms) {
12330            var len = Transform.transformDictionaryWord(ringbuffer, copy_dst, offset, copy_length, transform_idx);
12331            copy_dst += len;
12332            pos += len;
12333            meta_block_remaining_len -= len;
12334            if (copy_dst >= ringbuffer_end) {
12335              output.write(ringbuffer, ringbuffer_size);
12336
12337              for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++)
12338                ringbuffer[_x] = ringbuffer[ringbuffer_end + _x];
12339            }
12340          } else {
12341            throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance +
12342              " len: " + copy_length + " bytes left: " + meta_block_remaining_len);
12343          }
12344        } else {
12345          throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance +
12346            " len: " + copy_length + " bytes left: " + meta_block_remaining_len);
12347        }
12348      } else {
12349        if (distance_code > 0) {
12350          dist_rb[dist_rb_idx & 3] = distance;
12351          ++dist_rb_idx;
12352        }
12353
12354        if (copy_length > meta_block_remaining_len) {
12355          throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance +
12356            " len: " + copy_length + " bytes left: " + meta_block_remaining_len);
12357        }
12358
12359        for (j = 0; j < copy_length; ++j) {
12360          ringbuffer[pos & ringbuffer_mask] = ringbuffer[(pos - distance) & ringbuffer_mask];
12361          if ((pos & ringbuffer_mask) === ringbuffer_mask) {
12362            output.write(ringbuffer, ringbuffer_size);
12363          }
12364          ++pos;
12365          --meta_block_remaining_len;
12366        }
12367      }
12368
12369      /* When we get here, we must have inserted at least one literal and */
12370      /* made a copy of at least length two, therefore accessing the last 2 */
12371      /* bytes is valid. */
12372      prev_byte1 = ringbuffer[(pos - 1) & ringbuffer_mask];
12373      prev_byte2 = ringbuffer[(pos - 2) & ringbuffer_mask];
12374    }
12375
12376    /* Protect pos from overflow, wrap it around at every GB of input data */
12377    pos &= 0x3fffffff;
12378  }
12379
12380  output.write(ringbuffer, pos & ringbuffer_mask);
12381}
12382
12383exports.BrotliDecompress = BrotliDecompress;
12384
12385BrotliDictionary.init();
12386
12387
12388/***/ }),
12389/* 118 */
12390/***/ (function(module, exports) {
12391
12392function BrotliInput(buffer) {
12393  this.buffer = buffer;
12394  this.pos = 0;
12395}
12396
12397BrotliInput.prototype.read = function(buf, i, count) {
12398  if (this.pos + count > this.buffer.length) {
12399    count = this.buffer.length - this.pos;
12400  }
12401
12402  for (var p = 0; p < count; p++)
12403    buf[i + p] = this.buffer[this.pos + p];
12404
12405  this.pos += count;
12406  return count;
12407}
12408
12409exports.BrotliInput = BrotliInput;
12410
12411function BrotliOutput(buf) {
12412  this.buffer = buf;
12413  this.pos = 0;
12414}
12415
12416BrotliOutput.prototype.write = function(buf, count) {
12417  if (this.pos + count > this.buffer.length)
12418    throw new Error('Output buffer is not large enough');
12419
12420  this.buffer.set(buf.subarray(0, count), this.pos);
12421  this.pos += count;
12422  return count;
12423};
12424
12425exports.BrotliOutput = BrotliOutput;
12426
12427
12428/***/ }),
12429/* 119 */
12430/***/ (function(module, exports, __webpack_require__) {
12431
12432/* Copyright 2013 Google Inc. All Rights Reserved.
12433
12434   Licensed under the Apache License, Version 2.0 (the "License");
12435   you may not use this file except in compliance with the License.
12436   You may obtain a copy of the License at
12437
12438   http://www.apache.org/licenses/LICENSE-2.0
12439
12440   Unless required by applicable law or agreed to in writing, software
12441   distributed under the License is distributed on an "AS IS" BASIS,
12442   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12443   See the License for the specific language governing permissions and
12444   limitations under the License.
12445
12446   Collection of static dictionary words.
12447*/
12448
12449var data = __webpack_require__(286);
12450exports.init = function() {
12451  exports.dictionary = data.init();
12452};
12453
12454exports.offsetsByLength = new Uint32Array([
12455     0,     0,     0,     0,     0,  4096,  9216, 21504, 35840, 44032,
12456 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536,
12457 115968, 118528, 119872, 121280, 122016,
12458]);
12459
vendor: 5,906 bytes, lines 12460-12658
12460exports.sizeBitsByLength = new Uint8Array([
12461  0,  0,  0,  0, 10, 10, 11, 11, 10, 10,
12462 10, 10, 10,  9,  9,  8,  7,  7,  8,  7,
12463  7,  6,  6,  5,  5,
12464]);
12465
12466exports.minDictionaryWordLength = 4;
12467exports.maxDictionaryWordLength = 24;
12468
12469
12470/***/ }),
12471/* 120 */
12472/***/ (function(module, exports) {
12473
12474function HuffmanCode(bits, value) {
12475  this.bits = bits;   /* number of bits used for this symbol */
12476  this.value = value; /* symbol value or table offset */
12477}
12478
12479exports.HuffmanCode = HuffmanCode;
12480
12481var MAX_LENGTH = 15;
12482
12483/* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the
12484   bit-wise reversal of the len least significant bits of key. */
12485function GetNextKey(key, len) {
12486  var step = 1 << (len - 1);
12487  while (key & step) {
12488    step >>= 1;
12489  }
12490  return (key & (step - 1)) + step;
12491}
12492
12493/* Stores code in table[0], table[step], table[2*step], ..., table[end] */
12494/* Assumes that end is an integer multiple of step */
12495function ReplicateValue(table, i, step, end, code) {
12496  do {
12497    end -= step;
12498    table[i + end] = new HuffmanCode(code.bits, code.value);
12499  } while (end > 0);
12500}
12501
12502/* Returns the table width of the next 2nd level table. count is the histogram
12503   of bit lengths for the remaining symbols, len is the code length of the next
12504   processed symbol */
12505function NextTableBitSize(count, len, root_bits) {
12506  var left = 1 << (len - root_bits);
12507  while (len < MAX_LENGTH) {
12508    left -= count[len];
12509    if (left <= 0) break;
12510    ++len;
12511    left <<= 1;
12512  }
12513  return len - root_bits;
12514}
12515
12516exports.BrotliBuildHuffmanTable = function(root_table, table, root_bits, code_lengths, code_lengths_size) {
12517  var start_table = table;
12518  var code;            /* current table entry */
12519  var len;             /* current code length */
12520  var symbol;          /* symbol index in original or sorted table */
12521  var key;             /* reversed prefix code */
12522  var step;            /* step size to replicate values in current table */
12523  var low;             /* low bits for current root entry */
12524  var mask;            /* mask for low bits */
12525  var table_bits;      /* key length of current table */
12526  var table_size;      /* size of current table */
12527  var total_size;      /* sum of root table size and 2nd level table sizes */
12528  var sorted;          /* symbols sorted by code length */
12529  var count = new Int32Array(MAX_LENGTH + 1);  /* number of codes of each length */
12530  var offset = new Int32Array(MAX_LENGTH + 1);  /* offsets in sorted table for each length */
12531
12532  sorted = new Int32Array(code_lengths_size);
12533
12534  /* build histogram of code lengths */
12535  for (symbol = 0; symbol < code_lengths_size; symbol++) {
12536    count[code_lengths[symbol]]++;
12537  }
12538
12539  /* generate offsets into sorted symbol table by code length */
12540  offset[1] = 0;
12541  for (len = 1; len < MAX_LENGTH; len++) {
12542    offset[len + 1] = offset[len] + count[len];
12543  }
12544
12545  /* sort symbols by length, by symbol order within each length */
12546  for (symbol = 0; symbol < code_lengths_size; symbol++) {
12547    if (code_lengths[symbol] !== 0) {
12548      sorted[offset[code_lengths[symbol]]++] = symbol;
12549    }
12550  }
12551
12552  table_bits = root_bits;
12553  table_size = 1 << table_bits;
12554  total_size = table_size;
12555
12556  /* special case code with only one value */
12557  if (offset[MAX_LENGTH] === 1) {
12558    for (key = 0; key < total_size; ++key) {
12559      root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff);
12560    }
12561
12562    return total_size;
12563  }
12564
12565  /* fill in root table */
12566  key = 0;
12567  symbol = 0;
12568  for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) {
12569    for (; count[len] > 0; --count[len]) {
12570      code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff);
12571      ReplicateValue(root_table, table + key, step, table_size, code);
12572      key = GetNextKey(key, len);
12573    }
12574  }
12575
12576  /* fill in 2nd level tables and add pointers to root table */
12577  mask = total_size - 1;
12578  low = -1;
12579  for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) {
12580    for (; count[len] > 0; --count[len]) {
12581      if ((key & mask) !== low) {
12582        table += table_size;
12583        table_bits = NextTableBitSize(count, len, root_bits);
12584        table_size = 1 << table_bits;
12585        total_size += table_size;
12586        low = key & mask;
12587        root_table[start_table + low] = new HuffmanCode((table_bits + root_bits) & 0xff, ((table - start_table) - low) & 0xffff);
12588      }
12589      code = new HuffmanCode((len - root_bits) & 0xff, sorted[symbol++] & 0xffff);
12590      ReplicateValue(root_table, table + (key >> root_bits), step, table_size, code);
12591      key = GetNextKey(key, len);
12592    }
12593  }
12594
12595  return total_size;
12596}
12597
12598
12599/***/ }),
12600/* 121 */
12601/***/ (function(module, exports, __webpack_require__) {
12602
12603/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.12.6
12604
12605/*
12606PDFImage - embeds images in PDF documents
12607By Devon Govett
12608 */
12609
12610(function() {
12611  var Data, JPEG, PDFImage, PNG, fs;
12612
12613  fs = __webpack_require__(8);
12614
12615  Data = __webpack_require__(298);
12616
12617  JPEG = __webpack_require__(299);
12618
12619  PNG = __webpack_require__(300);
12620
12621  PDFImage = (function() {
12622    function PDFImage() {}
12623
12624    PDFImage.open = function(src, label) {
12625      var data, match;
12626      if (Buffer.isBuffer(src)) {
12627        data = src;
12628      } else if (src instanceof ArrayBuffer) {
12629        data = new Buffer(new Uint8Array(src));
12630      } else {
12631        if (match = /^data:.+;base64,(.*)$/.exec(src)) {
12632          data = new Buffer(match[1], 'base64');
12633        } else {
12634          data = fs.readFileSync(src);
12635          if (!data) {
12636            return;
12637          }
12638        }
12639      }
12640      if (data[0] === 0xff && data[1] === 0xd8) {
12641        return new JPEG(data, label);
12642      } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {
12643        return new PNG(data, label);
12644      } else {
12645        throw new Error('Unknown image format.');
12646      }
12647    };
12648
12649    return PDFImage;
12650
12651  })();
12652
12653  module.exports = PDFImage;
12654
12655}).call(this);
12656
12657/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
12658
12659/***/ }),
12660/* 122 */
12661/***/ (function(module, exports, __webpack_require__) {
12662
12663/* WEBPACK VAR INJECTION */(function(global) {module.exports = global["pdfMake"] = __webpack_require__(123);
12664/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)))
12665
12666/***/ }),
12667/* 123 */
12668/***/ (function(module, exports, __webpack_require__) {
12669
12670"use strict";
12671/* WEBPACK VAR INJECTION */(function(Buffer, global) {
12672
12673var PdfPrinter = __webpack_require__(126);
12674var isFunction = __webpack_require__(0).isFunction;
12675var FileSaver = __webpack_require__(306);
12676var saveAs = FileSaver.saveAs;
12677
12678var defaultClientFonts = {
12679	Roboto: {
12680		normal: 'Roboto-Regular.ttf',
12681		bold: 'Roboto-Medium.ttf',
12682		italics: 'Roboto-Italic.ttf',
12683		bolditalics: 'Roboto-MediumItalic.ttf'
12684	}
12685};
12686
12687function Document(docDefinition, tableLayouts, fonts, vfs) {
12688	this.docDefinition = docDefinition;
12689	this.tableLayouts = tableLayouts || null;
12690	this.fonts = fonts || defaultClientFonts;
12691	this.vfs = vfs;
12692}
12693
12694function canCreatePdf() {
12695	// Ensure the browser provides the level of support needed
12696	if (!Object.keys) {
12697		return false;
12698	}
12699	return true;
12700}
12701
12702Document.prototype._createDoc = function (options, callback) {
12703	options = options || {};
12704	if (this.tableLayouts) {
12705		options.tableLayouts = this.tableLayouts;
12706	}
12707
12708	var printer = new PdfPrinter(this.fonts);
12709	__webpack_require__(8).bindFS(this.vfs); // bind virtual file system to file system
12710
12711	var doc = printer.createPdfKitDocument(this.docDefinition, options);
12712	var chunks = [];
12713	var result;
12714
12715	doc.on('readable', function () {
12716		var chunk;
12717		while ((chunk = doc.read(9007199254740991)) !== null) {
12718			chunks.push(chunk);
12719		}
12720	});
12721	doc.on('end', function () {
12722		result = Buffer.concat(chunks);
12723		callback(result, doc._pdfMakePages);
12724	});
12725	doc.end();
12726};
12727
12728Document.prototype._getPages = function (options, cb) {
12729	if (!cb) {
12730		throw '_getPages is an async method and needs a callback argument';
12731	}
12732	this._createDoc(options, function (ignoreBuffer, pages) {
12733		cb(pages);
12734	});
12735};
12736
12737Document.prototype._bufferToBlob = function (buffer) {
12738	var blob;
12739	try {
12740		blob = new Blob([buffer], {type: 'application/pdf'});
12741	} catch (e) {
12742		// Old browser which can't handle it without making it an byte array (ie10)
12743		if (e.name === 'InvalidStateError') {
12744			var byteArray = new Uint8Array(buffer);
12745			blob = new Blob([byteArray.buffer], {type: 'application/pdf'});
12746		}
12747	}
12748
12749	if (!blob) {
12750		throw 'Could not generate blob';
12751	}
12752
12753	return blob;
12754};
12755
12756Document.prototype._openWindow = function () {
12757	// we have to open the window immediately and store the reference
12758	// otherwise popup blockers will stop us
12759	var win = window.open('', '_blank');
12760	if (win === null) {
12761		throw 'Open PDF in new window blocked by browser';
12762	}
12763
12764	return win;
12765};
12766
12767Document.prototype._openPdf = function (options, win) {
12768	if (!win) {
12769		win = this._openWindow();
12770	}
12771	try {
12772		this.getBlob(function (result) {
12773			var urlCreator = window.URL || window.webkitURL;
12774			var pdfUrl = urlCreator.createObjectURL(result);
12775			win.location.href = pdfUrl;
12776		}, options);
12777	} catch (e) {
12778		win.close();
12779		throw e;
12780	}
12781};
12782
12783Document.prototype.open = function (options, win) {
12784	options = options || {};
12785	options.autoPrint = false;
12786	win = win || null;
12787
12788	this._openPdf(options, win);
12789};
12790
12791
12792Document.prototype.print = function (options, win) {
12793	options = options || {};
12794	options.autoPrint = true;
12795	win = win || null;
12796
12797	this._openPdf(options, win);
12798};
12799
12800Document.prototype.download = function (defaultFileName, cb, options) {
12801	if (isFunction(defaultFileName)) {
12802		cb = defaultFileName;
12803		defaultFileName = null;
12804	}
12805
12806	defaultFileName = defaultFileName || 'file.pdf';
12807	this.getBlob(function (result) {
12808		saveAs(result, defaultFileName);
12809
12810		if (isFunction(cb)) {
12811			cb();
12812		}
12813	}, options);
12814};
12815
12816Document.prototype.getBase64 = function (cb, options) {
12817	if (!cb) {
12818		throw 'getBase64 is an async method and needs a callback argument';
12819	}
12820	this.getBuffer(function (buffer) {
12821		cb(buffer.toString('base64'));
12822	}, options);
12823};
12824
12825Document.prototype.getDataUrl = function (cb, options) {
12826	if (!cb) {
12827		throw 'getDataUrl is an async method and needs a callback argument';
12828	}
12829	this.getBuffer(function (buffer) {
12830		cb('data:application/pdf;base64,' + buffer.toString('base64'));
12831	}, options);
12832};
12833
12834Document.prototype.getBlob = function (cb, options) {
12835	if (!cb) {
12836		throw 'getBlob is an async method and needs a callback argument';
12837	}
12838	var that = this;
12839	this.getBuffer(function (result) {
12840		var blob = that._bufferToBlob(result);
vendor: 9,205 bytes, lines 12841-13158
12841		cb(blob);
12842	}, options);
12843};
12844
12845Document.prototype.getBuffer = function (cb, options) {
12846	if (!cb) {
12847		throw 'getBuffer is an async method and needs a callback argument';
12848	}
12849	this._createDoc(options, function (buffer) {
12850		cb(buffer);
12851	});
12852};
12853
12854module.exports = {
12855	createPdf: function (docDefinition) {
12856		if (!canCreatePdf()) {
12857			throw 'Your browser does not provide the level of support needed';
12858		}
12859		return new Document(docDefinition, global.pdfMake.tableLayouts, global.pdfMake.fonts, global.pdfMake.vfs);
12860	}
12861};
12862
12863/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer, __webpack_require__(7)))
12864
12865/***/ }),
12866/* 124 */
12867/***/ (function(module, exports, __webpack_require__) {
12868
12869"use strict";
12870
12871
12872exports.byteLength = byteLength
12873exports.toByteArray = toByteArray
12874exports.fromByteArray = fromByteArray
12875
12876var lookup = []
12877var revLookup = []
12878var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
12879
12880var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
12881for (var i = 0, len = code.length; i < len; ++i) {
12882  lookup[i] = code[i]
12883  revLookup[code.charCodeAt(i)] = i
12884}
12885
12886// Support decoding URL-safe base64 strings, as Node.js does.
12887// See: https://en.wikipedia.org/wiki/Base64#URL_applications
12888revLookup['-'.charCodeAt(0)] = 62
12889revLookup['_'.charCodeAt(0)] = 63
12890
12891function placeHoldersCount (b64) {
12892  var len = b64.length
12893  if (len % 4 > 0) {
12894    throw new Error('Invalid string. Length must be a multiple of 4')
12895  }
12896
12897  // the number of equal signs (place holders)
12898  // if there are two placeholders, than the two characters before it
12899  // represent one byte
12900  // if there is only one, then the three characters before it represent 2 bytes
12901  // this is just a cheap hack to not do indexOf twice
12902  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
12903}
12904
12905function byteLength (b64) {
12906  // base64 is 4/3 + up to two characters of the original data
12907  return (b64.length * 3 / 4) - placeHoldersCount(b64)
12908}
12909
12910function toByteArray (b64) {
12911  var i, l, tmp, placeHolders, arr
12912  var len = b64.length
12913  placeHolders = placeHoldersCount(b64)
12914
12915  arr = new Arr((len * 3 / 4) - placeHolders)
12916
12917  // if there are placeholders, only get up to the last complete 4 chars
12918  l = placeHolders > 0 ? len - 4 : len
12919
12920  var L = 0
12921
12922  for (i = 0; i < l; i += 4) {
12923    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
12924    arr[L++] = (tmp >> 16) & 0xFF
12925    arr[L++] = (tmp >> 8) & 0xFF
12926    arr[L++] = tmp & 0xFF
12927  }
12928
12929  if (placeHolders === 2) {
12930    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
12931    arr[L++] = tmp & 0xFF
12932  } else if (placeHolders === 1) {
12933    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
12934    arr[L++] = (tmp >> 8) & 0xFF
12935    arr[L++] = tmp & 0xFF
12936  }
12937
12938  return arr
12939}
12940
12941function tripletToBase64 (num) {
12942  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
12943}
12944
12945function encodeChunk (uint8, start, end) {
12946  var tmp
12947  var output = []
12948  for (var i = start; i < end; i += 3) {
12949    tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF)
12950    output.push(tripletToBase64(tmp))
12951  }
12952  return output.join('')
12953}
12954
12955function fromByteArray (uint8) {
12956  var tmp
12957  var len = uint8.length
12958  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
12959  var output = ''
12960  var parts = []
12961  var maxChunkLength = 16383 // must be multiple of 3
12962
12963  // go through the array every three bytes, we'll deal with trailing stuff later
12964  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
12965    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
12966  }
12967
12968  // pad the end with zeros, but make sure to not forget the extra bytes
12969  if (extraBytes === 1) {
12970    tmp = uint8[len - 1]
12971    output += lookup[tmp >> 2]
12972    output += lookup[(tmp << 4) & 0x3F]
12973    output += '=='
12974  } else if (extraBytes === 2) {
12975    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
12976    output += lookup[tmp >> 10]
12977    output += lookup[(tmp >> 4) & 0x3F]
12978    output += lookup[(tmp << 2) & 0x3F]
12979    output += '='
12980  }
12981
12982  parts.push(output)
12983
12984  return parts.join('')
12985}
12986
12987
12988/***/ }),
12989/* 125 */
12990/***/ (function(module, exports) {
12991
12992exports.read = function (buffer, offset, isLE, mLen, nBytes) {
12993  var e, m
12994  var eLen = nBytes * 8 - mLen - 1
12995  var eMax = (1 << eLen) - 1
12996  var eBias = eMax >> 1
12997  var nBits = -7
12998  var i = isLE ? (nBytes - 1) : 0
12999  var d = isLE ? -1 : 1
13000  var s = buffer[offset + i]
13001
13002  i += d
13003
13004  e = s & ((1 << (-nBits)) - 1)
13005  s >>= (-nBits)
13006  nBits += eLen
13007  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13008
13009  m = e & ((1 << (-nBits)) - 1)
13010  e >>= (-nBits)
13011  nBits += mLen
13012  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13013
13014  if (e === 0) {
13015    e = 1 - eBias
13016  } else if (e === eMax) {
13017    return m ? NaN : ((s ? -1 : 1) * Infinity)
13018  } else {
13019    m = m + Math.pow(2, mLen)
13020    e = e - eBias
13021  }
13022  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
13023}
13024
13025exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
13026  var e, m, c
13027  var eLen = nBytes * 8 - mLen - 1
13028  var eMax = (1 << eLen) - 1
13029  var eBias = eMax >> 1
13030  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
13031  var i = isLE ? 0 : (nBytes - 1)
13032  var d = isLE ? 1 : -1
13033  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
13034
13035  value = Math.abs(value)
13036
13037  if (isNaN(value) || value === Infinity) {
13038    m = isNaN(value) ? 1 : 0
13039    e = eMax
13040  } else {
13041    e = Math.floor(Math.log(value) / Math.LN2)
13042    if (value * (c = Math.pow(2, -e)) < 1) {
13043      e--
13044      c *= 2
13045    }
13046    if (e + eBias >= 1) {
13047      value += rt / c
13048    } else {
13049      value += rt * Math.pow(2, 1 - eBias)
13050    }
13051    if (value * c >= 2) {
13052      e++
13053      c /= 2
13054    }
13055
13056    if (e + eBias >= eMax) {
13057      m = 0
13058      e = eMax
13059    } else if (e + eBias >= 1) {
13060      m = (value * c - 1) * Math.pow(2, mLen)
13061      e = e + eBias
13062    } else {
13063      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
13064      e = 0
13065    }
13066  }
13067
13068  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
13069
13070  e = (e << mLen) | m
13071  eLen += mLen
13072  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
13073
13074  buffer[offset + i - d] |= s * 128
13075}
13076
13077
13078/***/ }),
13079/* 126 */
13080/***/ (function(module, exports, __webpack_require__) {
13081
13082"use strict";
13083/*eslint no-unused-vars: ["error", {"args": "none"}]*/
13084
13085
13086var FontProvider = __webpack_require__(127);
13087var LayoutBuilder = __webpack_require__(128);
13088var PdfKit = __webpack_require__(138);
13089var sizes = __webpack_require__(303);
13090var ImageMeasure = __webpack_require__(304);
13091var textDecorator = __webpack_require__(305);
13092var TextTools = __webpack_require__(42);
13093var isFunction = __webpack_require__(0).isFunction;
13094var isString = __webpack_require__(0).isString;
13095var isNumber = __webpack_require__(0).isNumber;
13096var isBoolean = __webpack_require__(0).isBoolean;
13097var isArray = __webpack_require__(0).isArray;
13098
13099////////////////////////////////////////
13100// PdfPrinter
13101
13102/**
13103 * @class Creates an instance of a PdfPrinter which turns document definition into a pdf
13104 *
13105 * @param {Object} fontDescriptors font definition dictionary
13106 *
13107 * @example
13108 * var fontDescriptors = {
13109 *	Roboto: {
13110 *		normal: 'fonts/Roboto-Regular.ttf',
13111 *		bold: 'fonts/Roboto-Medium.ttf',
13112 *		italics: 'fonts/Roboto-Italic.ttf',
13113 *		bolditalics: 'fonts/Roboto-MediumItalic.ttf'
13114 *	}
13115 * };
13116 *
13117 * var printer = new PdfPrinter(fontDescriptors);
13118 */
13119function PdfPrinter(fontDescriptors) {
13120	this.fontDescriptors = fontDescriptors;
13121}
13122
13123/**
13124 * Executes layout engine for the specified document and renders it into a pdfkit document
13125 * ready to be saved.
13126 *
13127 * @param {Object} docDefinition document definition
13128 * @param {Object} docDefinition.content an array describing the pdf structure (for more information take a look at the examples in the /examples folder)
13129 * @param {Object} [docDefinition.defaultStyle] default (implicit) style definition
13130 * @param {Object} [docDefinition.styles] dictionary defining all styles which can be used in the document
13131 * @param {Object} [docDefinition.pageSize] page size (pdfkit units, A4 dimensions by default)
13132 * @param {Number} docDefinition.pageSize.width width
13133 * @param {Number} docDefinition.pageSize.height height
13134 * @param {Object} [docDefinition.pageMargins] page margins (pdfkit units)
13135 * @param {Number} docDefinition.maxPagesNumber maximum number of pages to render
13136 *
13137 * @example
13138 *
13139 * var docDefinition = {
13140 * 	info: {
13141 *		title: 'awesome Document',
13142 *		author: 'john doe',
13143 *		subject: 'subject of document',
13144 *		keywords: 'keywords for document',
13145 * 	},
13146 *	content: [
13147 *		'First paragraph',
13148 *		'Second paragraph, this time a little bit longer',
13149 *		{ text: 'Third paragraph, slightly bigger font size', fontSize: 20 },
13150 *		{ text: 'Another paragraph using a named style', style: 'header' },
13151 *		{ text: ['playing with ', 'inlines' ] },
13152 *		{ text: ['and ', { text: 'restyling ', bold: true }, 'them'] },
13153 *	],
13154 *	styles: {
13155 *		header: { fontSize: 30, bold: true }
13156 *	}
13157 * }
13158 *
13159 * var pdfKitDoc = printer.createPdfKitDocument(docDefinition);
13160 *
13161 * pdfKitDoc.pipe(fs.createWriteStream('sample.pdf'));
13162 * pdfKitDoc.end();
13163 *
13164 * @return {Object} a pdfKit document object which can be saved or encode to data-url
13165 */
13166PdfPrinter.prototype.createPdfKitDocument = function (docDefinition, options) {
13167	options = options || {};
13168
13169	var pageSize = fixPageSize(docDefinition.pageSize, docDefinition.pageOrientation);
13170	var compressPdf = isBoolean(docDefinition.compress) ? docDefinition.compress : true;
13171
13172	this.pdfKitDoc = new PdfKit({size: [pageSize.width, pageSize.height], autoFirstPage: false, compress: compressPdf});
13173	setMetadata(docDefinition, this.pdfKitDoc);
13174
13175	this.fontProvider = new FontProvider(this.fontDescriptors, this.pdfKitDoc);
13176
13177	docDefinition.images = docDefinition.images || {};
13178
13179	var builder = new LayoutBuilder(pageSize, fixPageMargins(docDefinition.pageMargins || 40), new ImageMeasure(this.pdfKitDoc, docDefinition.images));
13180
13181	registerDefaultTableLayouts(builder);
13182	if (options.tableLayouts) {
13183		builder.registerTableLayouts(options.tableLayouts);
13184	}
13185
13186	var pages = builder.layoutDocument(docDefinition.content, this.fontProvider, docDefinition.styles || {}, docDefinition.defaultStyle || {fontSize: 12, font: 'Roboto'}, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.images, docDefinition.watermark, docDefinition.pageBreakBefore);
13187	var maxNumberPages = docDefinition.maxPagesNumber || -1;
13188	if (isNumber(maxNumberPages) && maxNumberPages > -1) {
13189		pages = pages.slice(0, maxNumberPages);
13190	}
13191
13192	// if pageSize.height is set to Infinity, calculate the actual height of the page that
13193	// was laid out using the height of each of the items in the page.
13194	if (pageSize.height === Infinity) {
13195		var pageHeight = calculatePageHeight(pages, docDefinition.pageMargins);
13196		this.pdfKitDoc.options.size = [pageSize.width, pageHeight];
13197	}
13198
13199	renderPages(pages, this.fontProvider, this.pdfKitDoc, options.progressCallback);
13200
13201	if (options.autoPrint) {
13202		var printActionRef = this.pdfKitDoc.ref({
13203			Type: 'Action',
13204			S: 'Named',
13205			N: 'Print'
13206		});
13207		this.pdfKitDoc._root.data.OpenAction = printActionRef;
13208		printActionRef.end();
13209	}
13210	return this.pdfKitDoc;
13211};
13212
13213function setMetadata(docDefinition, pdfKitDoc) {
13214	// PDF standard has these properties reserved: Title, Author, Subject, Keywords,
13215	// Creator, Producer, CreationDate, ModDate, Trapped.
13216	// To keep the pdfmake api consistent, the info field are defined lowercase.
13217	// Custom properties don't contain a space.
13218	function standardizePropertyKey(key) {
13219		var standardProperties = ['Title', 'Author', 'Subject', 'Keywords',
13220			'Creator', 'Producer', 'CreationDate', 'ModDate', 'Trapped'];
13221		var standardizedKey = key.charAt(0).toUpperCase() + key.slice(1);
13222		if (standardProperties.indexOf(standardizedKey) !== -1) {
13223			return standardizedKey;
13224		}
13225
13226		return key.replace(/\s+/g, '');
13227	}
13228
13229	pdfKitDoc.info.Producer = 'pdfmake';
13230	pdfKitDoc.info.Creator = 'pdfmake';
13231
13232	if (docDefinition.info) {
13233		for (var key in docDefinition.info) {
13234			var value = docDefinition.info[key];
13235			if (value) {
13236				key = standardizePropertyKey(key);
13237				pdfKitDoc.info[key] = value;
13238			}
13239		}
13240	}
13241}
13242
13243function calculatePageHeight(pages, margins) {
13244	function getItemHeight(item) {
13245		if (isFunction(item.item.getHeight)) {
13246			return item.item.getHeight();
13247		} else if (item.item._height) {
13248			return item.item._height;
13249		} else {
13250			// TODO: add support for next item types
13251			return 0;
13252		}
13253	}
13254
13255	var fixedMargins = fixPageMargins(margins || 40);
13256	var height = fixedMargins.top + fixedMargins.bottom;
13257	pages.forEach(function (page) {
13258		page.items.forEach(function (item) {
13259			height += getItemHeight(item);
13260		});
13261	});
13262	return height;
13263}
13264
13265function fixPageSize(pageSize, pageOrientation) {
13266	function isNeedSwapPageSizes(pageOrientation) {
13267		if (isString(pageOrientation)) {
13268			pageOrientation = pageOrientation.toLowerCase();
13269			return ((pageOrientation === 'portrait') && (size.width > size.height)) ||
13270				((pageOrientation === 'landscape') && (size.width < size.height));
13271		}
13272		return false;
13273	}
13274
13275	// if pageSize.height is set to auto, set the height to infinity so there are no page breaks.
13276	if (pageSize && pageSize.height === 'auto') {
13277		pageSize.height = Infinity;
13278	}
13279
13280	var size = pageSize2widthAndHeight(pageSize || 'A4');
13281	if (isNeedSwapPageSizes(pageOrientation)) { // swap page sizes
13282		size = {width: size.height, height: size.width};
13283	}
13284	size.orientation = size.width > size.height ? 'landscape' : 'portrait';
13285	return size;
13286}
13287
13288function fixPageMargins(margin) {
13289	if (!margin) {
13290		return null;
13291	}
13292
13293	if (isNumber(margin)) {
13294		margin = {left: margin, right: margin, top: margin, bottom: margin};
13295	} else if (isArray(margin)) {
13296		if (margin.length === 2) {
13297			margin = {left: margin[0], top: margin[1], right: margin[0], bottom: margin[1]};
13298		} else if (margin.length === 4) {
13299			margin = {left: margin[0], top: margin[1], right: margin[2], bottom: margin[3]};
13300		} else {
13301			throw 'Invalid pageMargins definition';
13302		}
13303	}
13304
13305	return margin;
13306}
13307
13308function registerDefaultTableLayouts(layoutBuilder) {
13309	layoutBuilder.registerTableLayouts({
13310		noBorders: {
13311			hLineWidth: function (i) {
13312				return 0;
13313			},
13314			vLineWidth: function (i) {
13315				return 0;
13316			},
13317			paddingLeft: function (i) {
13318				return i && 4 || 0;
13319			},
13320			paddingRight: function (i, node) {
13321				return (i < node.table.widths.length - 1) ? 4 : 0;
13322			}
13323		},
13324		headerLineOnly: {
13325			hLineWidth: function (i, node) {
13326				if (i === 0 || i === node.table.body.length) {
13327					return 0;
13328				}
13329				return (i === node.table.headerRows) ? 2 : 0;
13330			},
13331			vLineWidth: function (i) {
13332				return 0;
13333			},
13334			paddingLeft: function (i) {
13335				return i === 0 ? 0 : 8;
13336			},
13337			paddingRight: function (i, node) {
13338				return (i === node.table.widths.length - 1) ? 0 : 8;
13339			}
13340		},
13341		lightHorizontalLines: {
13342			hLineWidth: function (i, node) {
13343				if (i === 0 || i === node.table.body.length) {
13344					return 0;
13345				}
13346				return (i === node.table.headerRows) ? 2 : 1;
13347			},
13348			vLineWidth: function (i) {
13349				return 0;
13350			},
13351			hLineColor: function (i) {
13352				return i === 1 ? 'black' : '#aaa';
13353			},
13354			paddingLeft: function (i) {
13355				return i === 0 ? 0 : 8;
13356			},
13357			paddingRight: function (i, node) {
13358				return (i === node.table.widths.length - 1) ? 0 : 8;
13359			}
13360		}
13361	});
13362}
13363
13364function pageSize2widthAndHeight(pageSize) {
13365	if (isString(pageSize)) {
13366		var size = sizes[pageSize.toUpperCase()];
13367		if (!size) {
13368			throw 'Page size ' + pageSize + ' not recognized';
13369		}
13370		return {width: size[0], height: size[1]};
13371	}
13372
13373	return pageSize;
13374}
13375
13376function updatePageOrientationInOptions(currentPage, pdfKitDoc) {
13377	var previousPageOrientation = pdfKitDoc.options.size[0] > pdfKitDoc.options.size[1] ? 'landscape' : 'portrait';
13378
13379	if (currentPage.pageSize.orientation !== previousPageOrientation) {
13380		var width = pdfKitDoc.options.size[0];
13381		var height = pdfKitDoc.options.size[1];
13382		pdfKitDoc.options.size = [height, width];
13383	}
13384}
13385
13386function renderPages(pages, fontProvider, pdfKitDoc, progressCallback) {
13387	pdfKitDoc._pdfMakePages = pages;
13388	pdfKitDoc.addPage();
13389
13390	var totalItems = 0;
13391	if (progressCallback) {
13392		pages.forEach(function (page) {
13393			totalItems += page.items.length;
13394		});
13395	}
13396
13397	var renderedItems = 0;
13398	progressCallback = progressCallback || function () {};
13399
13400	for (var i = 0; i < pages.length; i++) {
13401		if (i > 0) {
13402			updatePageOrientationInOptions(pages[i], pdfKitDoc);
13403			pdfKitDoc.addPage(pdfKitDoc.options);
13404		}
13405
13406		var page = pages[i];
13407		for (var ii = 0, il = page.items.length; ii < il; ii++) {
13408			var item = page.items[ii];
13409			switch (item.type) {
13410				case 'vector':
13411					renderVector(item.item, pdfKitDoc);
13412					break;
13413				case 'line':
13414					renderLine(item.item, item.item.x, item.item.y, pdfKitDoc);
13415					break;
13416				case 'image':
13417					renderImage(item.item, item.item.x, item.item.y, pdfKitDoc);
13418					break;
13419				case 'beginClip':
13420					beginClip(item.item, pdfKitDoc);
13421					break;
13422				case 'endClip':
13423					endClip(pdfKitDoc);
13424					break;
13425			}
13426			renderedItems++;
13427			progressCallback(renderedItems / totalItems);
13428		}
13429		if (page.watermark) {
13430			renderWatermark(page, pdfKitDoc);
13431		}
13432	}
13433}
13434
13435function renderLine(line, x, y, pdfKitDoc) {
13436	if (line._pageNodeRef) {
13437		var newWidth;
13438		var diffWidth;
13439		var textTools = new TextTools(null);
13440		var pageNumber = line._pageNodeRef.positions[0].pageNumber.toString();
13441
13442		line.inlines[0].text = pageNumber;
13443		line.inlines[0].linkToPage = pageNumber;
13444		newWidth = textTools.widthOfString(line.inlines[0].text, line.inlines[0].font, line.inlines[0].fontSize, line.inlines[0].characterSpacing, line.inlines[0].fontFeatures);
13445		diffWidth = line.inlines[0].width - newWidth;
13446		line.inlines[0].width = newWidth;
13447
13448		switch (line.inlines[0].alignment) {
13449			case 'right':
13450				line.inlines[0].x += diffWidth;
13451				break;
13452			case 'center':
13453				line.inlines[0].x += diffWidth / 2;
13454				break;
13455		}
13456	}
13457
13458	x = x || 0;
13459	y = y || 0;
13460
13461	var lineHeight = line.getHeight();
13462	var ascenderHeight = line.getAscenderHeight();
13463	var descent = lineHeight - ascenderHeight;
13464
13465	textDecorator.drawBackground(line, x, y, pdfKitDoc);
13466
13467	//TODO: line.optimizeInlines();
13468	for (var i = 0, l = line.inlines.length; i < l; i++) {
13469		var inline = line.inlines[i];
13470		var shiftToBaseline = lineHeight - ((inline.font.ascender / 1000) * inline.fontSize) - descent;
13471		var options = {
13472			lineBreak: false,
13473			textWidth: inline.width,
13474			characterSpacing: inline.characterSpacing,
13475			wordCount: 1,
13476			link: inline.link
13477		};
13478
13479		if (inline.fontFeatures) {
13480			options.features = inline.fontFeatures;
13481		}
13482
13483		pdfKitDoc.fill(inline.color || 'black');
13484
13485		pdfKitDoc._font = inline.font;
13486		pdfKitDoc.fontSize(inline.fontSize);
13487		pdfKitDoc.text(inline.text, x + inline.x, y + shiftToBaseline, options);
13488
13489		if (inline.linkToPage) {
13490			var _ref = pdfKitDoc.ref({Type: 'Action', S: 'GoTo', D: [inline.linkToPage, 0, 0]}).end();
13491			pdfKitDoc.annotate(x + inline.x, y + shiftToBaseline, inline.width, inline.height, {Subtype: 'Link', Dest: [inline.linkToPage - 1, 'XYZ', null, null, null]});
13492		}
13493
13494	}
13495
13496	textDecorator.drawDecorations(line, x, y, pdfKitDoc);
13497}
13498
13499function renderWatermark(page, pdfKitDoc) {
13500	var watermark = page.watermark;
13501
13502	pdfKitDoc.fill(watermark.color);
13503	pdfKitDoc.opacity(watermark.opacity);
13504
13505	pdfKitDoc.save();
13506
13507	var angle = Math.atan2(pdfKitDoc.page.height, pdfKitDoc.page.width) * -180 / Math.PI;
13508	pdfKitDoc.rotate(angle, {origin: [pdfKitDoc.page.width / 2, pdfKitDoc.page.height / 2]});
13509
13510	var x = pdfKitDoc.page.width / 2 - watermark.size.size.width / 2;
13511	var y = pdfKitDoc.page.height / 2 - watermark.size.size.height / 4;
13512
13513	pdfKitDoc._font = watermark.font;
13514	pdfKitDoc.fontSize(watermark.size.fontSize);
13515	pdfKitDoc.text(watermark.text, x, y, {lineBreak: false});
13516
13517	pdfKitDoc.restore();
13518}
13519
13520function renderVector(vector, pdfKitDoc) {
13521	//TODO: pdf optimization (there's no need to write all properties everytime)
13522	pdfKitDoc.lineWidth(vector.lineWidth || 1);
13523	if (vector.dash) {
13524		pdfKitDoc.dash(vector.dash.length, {space: vector.dash.space || vector.dash.length, phase: vector.dash.phase || 0});
13525	} else {
13526		pdfKitDoc.undash();
13527	}
13528	pdfKitDoc.lineJoin(vector.lineJoin || 'miter');
13529	pdfKitDoc.lineCap(vector.lineCap || 'butt');
13530
13531	//TODO: clipping
13532
13533	switch (vector.type) {
13534		case 'ellipse':
13535			pdfKitDoc.ellipse(vector.x, vector.y, vector.r1, vector.r2);
13536			break;
13537		case 'rect':
13538			if (vector.r) {
13539				pdfKitDoc.roundedRect(vector.x, vector.y, vector.w, vector.h, vector.r);
13540			} else {
13541				pdfKitDoc.rect(vector.x, vector.y, vector.w, vector.h);
13542			}
13543
13544			if (vector.linearGradient) {
13545				var gradient = pdfKitDoc.linearGradient(vector.x, vector.y, vector.x + vector.w, vector.y);
13546				var step = 1 / (vector.linearGradient.length - 1);
13547
13548				for (var i = 0; i < vector.linearGradient.length; i++) {
13549					gradient.stop(i * step, vector.linearGradient[i]);
13550				}
13551
13552				vector.color = gradient;
13553			}
13554			break;
13555		case 'line':
13556			pdfKitDoc.moveTo(vector.x1, vector.y1);
13557			pdfKitDoc.lineTo(vector.x2, vector.y2);
13558			break;
13559		case 'polyline':
13560			if (vector.points.length === 0) {
13561				break;
13562			}
13563
13564			pdfKitDoc.moveTo(vector.points[0].x, vector.points[0].y);
13565			for (var i = 1, l = vector.points.length; i < l; i++) {
13566				pdfKitDoc.lineTo(vector.points[i].x, vector.points[i].y);
13567			}
13568
13569			if (vector.points.length > 1) {
13570				var p1 = vector.points[0];
13571				var pn = vector.points[vector.points.length - 1];
13572
13573				if (vector.closePath || p1.x === pn.x && p1.y === pn.y) {
13574					pdfKitDoc.closePath();
13575				}
13576			}
13577			break;
13578		case 'path':
13579			pdfKitDoc.path(vector.d);
13580			break;
13581	}
13582
13583	if (vector.color && vector.lineColor) {
13584		pdfKitDoc.fillColor(vector.color, vector.fillOpacity || 1);
13585		pdfKitDoc.strokeColor(vector.lineColor, vector.strokeOpacity || 1);
13586		pdfKitDoc.fillAndStroke();
13587	} else if (vector.color) {
13588		pdfKitDoc.fillColor(vector.color, vector.fillOpacity || 1);
13589		pdfKitDoc.fill();
13590	} else {
13591		pdfKitDoc.strokeColor(vector.lineColor || 'black', vector.strokeOpacity || 1);
13592		pdfKitDoc.stroke();
13593	}
13594}
13595
13596function renderImage(image, x, y, pdfKitDoc) {
13597	pdfKitDoc.image(image.image, image.x, image.y, {width: image._width, height: image._height});
13598	if (image.link) {
13599		pdfKitDoc.link(image.x, image.y, image._width, image._height, image.link);
13600	}
13601}
13602
13603function beginClip(rect, pdfKitDoc) {
13604	pdfKitDoc.save();
13605	pdfKitDoc.addContent('' + rect.x + ' ' + rect.y + ' ' + rect.width + ' ' + rect.height + ' re');
13606	pdfKitDoc.clip();
13607}
13608
13609function endClip(pdfKitDoc) {
13610	pdfKitDoc.restore();
13611}
13612
13613module.exports = PdfPrinter;
13614
13615
13616/***/ }),
13617/* 127 */
13618/***/ (function(module, exports, __webpack_require__) {
13619
13620"use strict";
13621
13622
13623var isArray = __webpack_require__(0).isArray;
13624
13625function typeName(bold, italics) {
13626	var type = 'normal';
13627	if (bold && italics) {
13628		type = 'bolditalics';
13629	} else if (bold) {
13630		type = 'bold';
13631	} else if (italics) {
13632		type = 'italics';
13633	}
13634	return type;
13635}
13636
13637function FontProvider(fontDescriptors, pdfKitDoc) {
13638	this.fonts = {};
13639	this.pdfKitDoc = pdfKitDoc;
13640	this.fontCache = {};
13641
13642	for (var font in fontDescriptors) {
13643		if (fontDescriptors.hasOwnProperty(font)) {
13644			var fontDef = fontDescriptors[font];
13645
13646			this.fonts[font] = {
13647				normal: fontDef.normal,
13648				bold: fontDef.bold,
13649				italics: fontDef.italics,
13650				bolditalics: fontDef.bolditalics
13651			};
13652		}
13653	}
13654}
13655
13656FontProvider.prototype.provideFont = function (familyName, bold, italics) {
13657	var type = typeName(bold, italics);
13658	if (!this.fonts[familyName] || !this.fonts[familyName][type]) {
13659		throw new Error('Font \'' + familyName + '\' in style \'' + type + '\' is not defined in the font section of the document definition.');
13660	}
13661
13662	this.fontCache[familyName] = this.fontCache[familyName] || {};
13663
13664	if (!this.fontCache[familyName][type]) {
13665		var def = this.fonts[familyName][type];
13666		if (!isArray(def)) {
13667			def = [def];
13668		}
13669		this.fontCache[familyName][type] = this.pdfKitDoc.font.apply(this.pdfKitDoc, def)._font;
13670	}
13671
13672	return this.fontCache[familyName][type];
13673};
13674
13675module.exports = FontProvider;
13676
13677
13678/***/ }),
13679/* 128 */
13680/***/ (function(module, exports, __webpack_require__) {
13681
13682"use strict";
13683
13684
13685var TraversalTracker = __webpack_require__(77);
13686var DocPreprocessor = __webpack_require__(129);
13687var DocMeasure = __webpack_require__(130);
13688var DocumentContext = __webpack_require__(81);
13689var PageElementWriter = __webpack_require__(135);
13690var ColumnCalculator = __webpack_require__(44);
13691var TableProcessor = __webpack_require__(137);
13692var Line = __webpack_require__(82);
13693var isString = __webpack_require__(0).isString;
13694var isArray = __webpack_require__(0).isArray;
13695var pack = __webpack_require__(0).pack;
13696var offsetVector = __webpack_require__(0).offsetVector;
13697var fontStringify = __webpack_require__(0).fontStringify;
13698var isFunction = __webpack_require__(0).isFunction;
13699var TextTools = __webpack_require__(42);
13700var StyleContextStack = __webpack_require__(80);
13701
13702function addAll(target, otherArray) {
13703	otherArray.forEach(function (item) {
13704		target.push(item);
13705	});
13706}
13707
13708/**
13709 * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object
13710 * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF
13711 *
13712 * @param {Object} pageSize - an object defining page width and height
13713 * @param {Object} pageMargins - an object defining top, left, right and bottom margins
13714 */
13715function LayoutBuilder(pageSize, pageMargins, imageMeasure) {
13716	this.pageSize = pageSize;
13717	this.pageMargins = pageMargins;
13718	this.tracker = new TraversalTracker();
13719	this.imageMeasure = imageMeasure;
13720	this.tableLayouts = {};
13721}
13722
13723LayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) {
13724	this.tableLayouts = pack(this.tableLayouts, tableLayouts);
13725};
13726
13727/**
13728 * Executes layout engine on document-definition-object and creates an array of pages
13729 * containing positioned Blocks, Lines and inlines
13730 *
13731 * @param {Object} docStructure document-definition-object
13732 * @param {Object} fontProvider font provider
13733 * @param {Object} styleDictionary dictionary with style definitions
13734 * @param {Object} defaultStyle default style definition
13735 * @return {Array} an array of pages
13736 */
13737LayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {
13738
13739	function addPageBreaksIfNecessary(linearNodeList, pages) {
13740
13741		if (!isFunction(pageBreakBeforeFct)) {
13742			return false;
13743		}
13744
13745		linearNodeList = linearNodeList.filter(function (node) {
13746			return node.positions.length > 0;
13747		});
13748
13749		linearNodeList.forEach(function (node) {
13750			var nodeInfo = {};
13751			[
13752				'id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'columns',
13753				'headlineLevel', 'style', 'pageBreak', 'pageOrientation',
13754				'width', 'height'
13755			].forEach(function (key) {
13756				if (node[key] !== undefined) {
13757					nodeInfo[key] = node[key];
13758				}
13759			});
13760			nodeInfo.startPosition = node.positions[0];
13761			nodeInfo.pageNumbers = node.positions.map(function (node) {
13762				return node.pageNumber;
13763			}).filter(function (element, position, array) {
13764				return array.indexOf(element) === position;
13765			});
13766			nodeInfo.pages = pages.length;
13767			nodeInfo.stack = isArray(node.stack);
13768
13769			node.nodeInfo = nodeInfo;
13770		});
13771
13772		return linearNodeList.some(function (node, index, followingNodeList) {
13773			if (node.pageBreak !== 'before' && !node.pageBreakCalculated) {
13774				node.pageBreakCalculated = true;
13775				var pageNumber = node.nodeInfo.pageNumbers[0];
13776
13777				var followingNodesOnPage = followingNodeList.slice(index + 1).filter(function (node0) {
13778					return node0.nodeInfo.pageNumbers.indexOf(pageNumber) > -1;
13779				});
13780
13781				var nodesOnNextPage = followingNodeList.slice(index + 1).filter(function (node0) {
13782					return node0.nodeInfo.pageNumbers.indexOf(pageNumber + 1) > -1;
13783				});
13784
13785				var previousNodesOnPage = followingNodeList.slice(0, index).filter(function (node0) {
13786					return node0.nodeInfo.pageNumbers.indexOf(pageNumber) > -1;
13787				});
13788
13789				if (
13790					pageBreakBeforeFct(
13791						node.nodeInfo,
13792						followingNodesOnPage.map(function (node) {
13793							return node.nodeInfo;
13794						}),
13795						nodesOnNextPage.map(function (node) {
13796							return node.nodeInfo;
13797						}),
13798						previousNodesOnPage.map(function (node) {
13799							return node.nodeInfo;
13800						}))) {
13801					node.pageBreak = 'before';
13802					return true;
13803				}
13804			}
13805		});
13806	}
13807
13808	this.docPreprocessor = new DocPreprocessor();
13809	this.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.tableLayouts, images);
13810
13811
13812	function resetXYs(result) {
13813		result.linearNodeList.forEach(function (node) {
13814			node.resetXY();
13815		});
13816	}
13817
13818	var result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);
13819	while (addPageBreaksIfNecessary(result.linearNodeList, result.pages)) {
13820		resetXYs(result);
13821		result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);
13822	}
13823
13824	return result.pages;
13825};
13826
13827LayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {
13828
13829	this.linearNodeList = [];
13830	docStructure = this.docPreprocessor.preprocessDocument(docStructure);
13831	docStructure = this.docMeasure.measureDocument(docStructure);
13832
13833	this.writer = new PageElementWriter(
13834		new DocumentContext(this.pageSize, this.pageMargins), this.tracker);
13835
13836	var _this = this;
13837	this.writer.context().tracker.startTracking('pageAdded', function () {
13838		_this.addBackground(background);
13839	});
13840
13841	this.addBackground(background);
13842	this.processNode(docStructure);
13843	this.addHeadersAndFooters(header, footer);
13844	if (watermark != null) {
13845		this.addWatermark(watermark, fontProvider, defaultStyle);
13846	}
13847
13848	return {pages: this.writer.context().pages, linearNodeList: this.linearNodeList};
13849};
13850
13851
13852LayoutBuilder.prototype.addBackground = function (background) {
13853	var backgroundGetter = isFunction(background) ? background : function () {
13854		return background;
13855	};
13856
13857	var pageBackground = backgroundGetter(this.writer.context().page + 1);
13858
13859	if (pageBackground) {
13860		var pageSize = this.writer.context().getCurrentPage().pageSize;
13861		this.writer.beginUnbreakableBlock(pageSize.width, pageSize.height);
13862		pageBackground = this.docPreprocessor.preprocessDocument(pageBackground);
13863		this.processNode(this.docMeasure.measureDocument(pageBackground));
13864		this.writer.commitUnbreakableBlock(0, 0);
13865		this.writer.context().hasBackground = true;
13866	}
13867};
13868
13869LayoutBuilder.prototype.addStaticRepeatable = function (headerOrFooter, sizeFunction) {
13870	this.addDynamicRepeatable(function () {
13871		return JSON.parse(JSON.stringify(headerOrFooter)); // copy to new object
13872	}, sizeFunction);
13873};
13874
13875LayoutBuilder.prototype.addDynamicRepeatable = function (nodeGetter, sizeFunction) {
13876	var pages = this.writer.context().pages;
13877
13878	for (var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) {
13879		this.writer.context().page = pageIndex;
13880
13881		var node = nodeGetter(pageIndex + 1, l, this.writer.context().pages[pageIndex].pageSize);
13882
13883		if (node) {
13884			var sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins);
13885			this.writer.beginUnbreakableBlock(sizes.width, sizes.height);
13886			node = this.docPreprocessor.preprocessDocument(node);
13887			this.processNode(this.docMeasure.measureDocument(node));
13888			this.writer.commitUnbreakableBlock(sizes.x, sizes.y);
13889		}
13890	}
13891};
13892
13893LayoutBuilder.prototype.addHeadersAndFooters = function (header, footer) {
13894	var headerSizeFct = function (pageSize, pageMargins) {
13895		return {
13896			x: 0,
13897			y: 0,
13898			width: pageSize.width,
13899			height: pageMargins.top
13900		};
13901	};
13902
13903	var footerSizeFct = function (pageSize, pageMargins) {
13904		return {
13905			x: 0,
13906			y: pageSize.height - pageMargins.bottom,
13907			width: pageSize.width,
13908			height: pageMargins.bottom
13909		};
13910	};
13911
13912	if (isFunction(header)) {
13913		this.addDynamicRepeatable(header, headerSizeFct);
13914	} else if (header) {
13915		this.addStaticRepeatable(header, headerSizeFct);
13916	}
13917
13918	if (isFunction(footer)) {
13919		this.addDynamicRepeatable(footer, footerSizeFct);
13920	} else if (footer) {
13921		this.addStaticRepeatable(footer, footerSizeFct);
13922	}
13923};
13924
13925LayoutBuilder.prototype.addWatermark = function (watermark, fontProvider, defaultStyle) {
13926	if (isString(watermark)) {
13927		watermark = {'text': watermark};
13928	}
13929
13930	if (!watermark.text) { // empty watermark text
13931		return;
13932	}
13933
13934	watermark.font = watermark.font || defaultStyle.font || 'Roboto';
13935	watermark.color = watermark.color || 'black';
13936	watermark.opacity = watermark.opacity || 0.6;
13937	watermark.bold = watermark.bold || false;
13938	watermark.italics = watermark.italics || false;
13939
13940	var watermarkObject = {
13941		text: watermark.text,
13942		font: fontProvider.provideFont(watermark.font, watermark.bold, watermark.italics),
13943		size: getSize(this.pageSize, watermark, fontProvider),
13944		color: watermark.color,
13945		opacity: watermark.opacity
13946	};
13947
13948	var pages = this.writer.context().pages;
13949	for (var i = 0, l = pages.length; i < l; i++) {
13950		pages[i].watermark = watermarkObject;
13951	}
13952
13953	function getSize(pageSize, watermark, fontProvider) {
13954		var width = pageSize.width;
13955		var height = pageSize.height;
13956		var targetWidth = Math.sqrt(width * width + height * height) * 0.8; /* page diagonal * sample factor */
13957		var textTools = new TextTools(fontProvider);
13958		var styleContextStack = new StyleContextStack(null, {font: watermark.font, bold: watermark.bold, italics: watermark.italics});
13959		var size;
13960
13961		/**
13962		 * Binary search the best font size.
13963		 * Initial bounds [0, 1000]
13964		 * Break when range < 1
13965		 */
13966		var a = 0;
13967		var b = 1000;
13968		var c = (a + b) / 2;
13969		while (Math.abs(a - b) > 1) {
13970			styleContextStack.push({
13971				fontSize: c
13972			});
13973			size = textTools.sizeOfString(watermark.text, styleContextStack);
13974			if (size.width > targetWidth) {
13975				b = c;
13976				c = (a + b) / 2;
13977			} else if (size.width < targetWidth) {
13978				a = c;
13979				c = (a + b) / 2;
13980			}
13981			styleContextStack.pop();
13982		}
13983		/*
13984		 End binary search
13985		 */
13986		return {size: size, fontSize: c};
13987	}
13988};
13989
13990function decorateNode(node) {
13991	var x = node.x, y = node.y;
13992	node.positions = [];
13993
13994	if (isArray(node.canvas)) {
13995		node.canvas.forEach(function (vector) {
13996			var x = vector.x, y = vector.y, x1 = vector.x1, y1 = vector.y1, x2 = vector.x2, y2 = vector.y2;
13997			vector.resetXY = function () {
13998				vector.x = x;
13999				vector.y = y;
14000				vector.x1 = x1;
14001				vector.y1 = y1;
14002				vector.x2 = x2;
14003				vector.y2 = y2;
14004			};
14005		});
14006	}
14007
14008	node.resetXY = function () {
14009		node.x = x;
14010		node.y = y;
14011		if (isArray(node.canvas)) {
14012			node.canvas.forEach(function (vector) {
14013				vector.resetXY();
14014			});
14015		}
14016	};
14017}
14018
14019LayoutBuilder.prototype.processNode = function (node) {
14020	var self = this;
14021
14022	this.linearNodeList.push(node);
14023	decorateNode(node);
14024
14025	applyMargins(function () {
14026		var unbreakable = node.unbreakable;
14027		if (unbreakable) {
14028			self.writer.beginUnbreakableBlock();
14029		}
14030
14031		var absPosition = node.absolutePosition;
14032		if (absPosition) {
14033			self.writer.context().beginDetachedBlock();
14034			self.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0);
14035		}
14036
14037		var relPosition = node.relativePosition;
14038		if (relPosition) {
14039			self.writer.context().beginDetachedBlock();
14040			self.writer.context().moveTo((relPosition.x || 0) + self.writer.context().x, (relPosition.y || 0) + self.writer.context().y);
14041		}
14042
14043		if (node.stack) {
14044			self.processVerticalContainer(node);
14045		} else if (node.columns) {
14046			self.processColumns(node);
14047		} else if (node.ul) {
14048			self.processList(false, node);
14049		} else if (node.ol) {
14050			self.processList(true, node);
14051		} else if (node.table) {
14052			self.processTable(node);
14053		} else if (node.text !== undefined) {
14054			self.processLeaf(node);
14055		} else if (node.toc) {
14056			self.processToc(node);
14057		} else if (node.image) {
14058			self.processImage(node);
14059		} else if (node.canvas) {
14060			self.processCanvas(node);
14061		} else if (node.qr) {
14062			self.processQr(node);
14063		} else if (!node._span) {
14064			throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);
14065		}
14066
14067		if (absPosition || relPosition) {
14068			self.writer.context().endDetachedBlock();
14069		}
14070
14071		if (unbreakable) {
14072			self.writer.commitUnbreakableBlock();
14073		}
14074	});
14075
14076	function applyMargins(callback) {
14077		var margin = node._margin;
14078
14079		if (node.pageBreak === 'before') {
14080			self.writer.moveToNextPage(node.pageOrientation);
14081		}
14082
14083		if (margin) {
14084			self.writer.context().moveDown(margin[1]);
14085			self.writer.context().addMargin(margin[0], margin[2]);
14086		}
14087
14088		callback();
14089
14090		if (margin) {
14091			self.writer.context().addMargin(-margin[0], -margin[2]);
14092			self.writer.context().moveDown(margin[3]);
14093		}
14094
14095		if (node.pageBreak === 'after') {
14096			self.writer.moveToNextPage(node.pageOrientation);
14097		}
14098	}
14099};
14100
14101// vertical container
14102LayoutBuilder.prototype.processVerticalContainer = function (node) {
14103	var self = this;
14104	node.stack.forEach(function (item) {
14105		self.processNode(item);
14106		addAll(node.positions, item.positions);
14107
14108		//TODO: paragraph gap
14109	});
14110};
14111
14112// columns
14113LayoutBuilder.prototype.processColumns = function (columnNode) {
14114	var columns = columnNode.columns;
14115	var availableWidth = this.writer.context().availableWidth;
14116	var gaps = gapArray(columnNode._gap);
14117
14118	if (gaps) {
14119		availableWidth -= (gaps.length - 1) * columnNode._gap;
14120	}
14121
14122	ColumnCalculator.buildColumnWidths(columns, availableWidth);
14123	var result = this.processRow(columns, columns, gaps);
14124	addAll(columnNode.positions, result.positions);
14125
14126
14127	function gapArray(gap) {
14128		if (!gap) {
14129			return null;
14130		}
14131
14132		var gaps = [];
14133		gaps.push(0);
14134
14135		for (var i = columns.length - 1; i > 0; i--) {
14136			gaps.push(gap);
14137		}
14138
14139		return gaps;
14140	}
14141};
14142
14143LayoutBuilder.prototype.processRow = function (columns, widths, gaps, tableBody, tableRow, height) {
14144	var self = this;
14145	var pageBreaks = [], positions = [];
14146
14147	this.tracker.auto('pageChanged', storePageBreakData, function () {
14148		widths = widths || columns;
14149
14150		self.writer.context().beginColumnGroup();
14151
14152		for (var i = 0, l = columns.length; i < l; i++) {
14153			var column = columns[i];
14154			var width = widths[i]._calcWidth;
14155			var leftOffset = colLeftOffset(i);
14156
14157			if (column.colSpan && column.colSpan > 1) {
14158				for (var j = 1; j < column.colSpan; j++) {
14159					width += widths[++i]._calcWidth + gaps[i];
14160				}
14161			}
14162
14163			self.writer.context().beginColumn(width, leftOffset, getEndingCell(column, i));
14164			if (!column._span) {
14165				self.processNode(column);
14166				addAll(positions, column.positions);
14167			} else if (column._columnEndingContext) {
14168				// row-span ending
14169				self.writer.context().markEnding(column);
14170			}
14171		}
14172
14173		self.writer.context().completeColumnGroup(height);
14174	});
14175
14176	return {pageBreaks: pageBreaks, positions: positions};
14177
14178	function storePageBreakData(data) {
14179		var pageDesc;
14180
14181		for (var i = 0, l = pageBreaks.length; i < l; i++) {
14182			var desc = pageBreaks[i];
14183			if (desc.prevPage === data.prevPage) {
14184				pageDesc = desc;
14185				break;
14186			}
14187		}
14188
14189		if (!pageDesc) {
14190			pageDesc = data;
14191			pageBreaks.push(pageDesc);
14192		}
14193		pageDesc.prevY = Math.max(pageDesc.prevY, data.prevY);
14194		pageDesc.y = Math.min(pageDesc.y, data.y);
14195	}
14196
14197	function colLeftOffset(i) {
14198		if (gaps && gaps.length > i) {
14199			return gaps[i];
14200		}
14201		return 0;
14202	}
14203
14204	function getEndingCell(column, columnIndex) {
14205		if (column.rowSpan && column.rowSpan > 1) {
14206			var endingRow = tableRow + column.rowSpan - 1;
14207			if (endingRow >= tableBody.length) {
14208				throw 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count';
14209			}
14210			return tableBody[endingRow][columnIndex];
14211		}
14212
14213		return null;
14214	}
14215};
14216
14217// lists
14218LayoutBuilder.prototype.processList = function (orderedList, node) {
14219	var self = this,
14220		items = orderedList ? node.ol : node.ul,
14221		gapSize = node._gapSize;
14222
14223	this.writer.context().addMargin(gapSize.width);
14224
14225	var nextMarker;
14226	this.tracker.auto('lineAdded', addMarkerToFirstLeaf, function () {
14227		items.forEach(function (item) {
14228			nextMarker = item.listMarker;
14229			self.processNode(item);
14230			addAll(node.positions, item.positions);
14231		});
14232	});
14233
14234	this.writer.context().addMargin(-gapSize.width);
14235
14236	function addMarkerToFirstLeaf(line) {
14237		// I'm not very happy with the way list processing is implemented
14238		// (both code and algorithm should be rethinked)
14239		if (nextMarker) {
14240			var marker = nextMarker;
14241			nextMarker = null;
14242
14243			if (marker.canvas) {
14244				var vector = marker.canvas[0];
14245
14246				offsetVector(vector, -marker._minWidth, 0);
14247				self.writer.addVector(vector);
14248			} else if (marker._inlines) {
14249				var markerLine = new Line(self.pageSize.width);
14250				markerLine.addInline(marker._inlines[0]);
14251				markerLine.x = -marker._minWidth;
14252				markerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight();
14253				self.writer.addLine(markerLine, true);
14254			}
14255		}
14256	}
14257};
14258
14259// tables
14260LayoutBuilder.prototype.processTable = function (tableNode) {
14261	var processor = new TableProcessor(tableNode);
14262
14263	processor.beginTable(this.writer);
14264
14265	var rowHeights = tableNode.table.heights;
14266	for (var i = 0, l = tableNode.table.body.length; i < l; i++) {
14267		processor.beginRow(i, this.writer);
14268
14269		var height;
14270		if (isFunction(rowHeights)) {
14271			height = rowHeights(i);
14272		} else if (isArray(rowHeights)) {
14273			height = rowHeights[i];
14274		} else {
14275			height = rowHeights;
14276		}
14277
14278		if (height === 'auto') {
14279			height = undefined;
14280		}
14281
14282		var result = this.processRow(tableNode.table.body[i], tableNode.table.widths, tableNode._offsets.offsets, tableNode.table.body, i, height);
14283		addAll(tableNode.positions, result.positions);
14284
14285		processor.endRow(i, this.writer, result.pageBreaks);
14286	}
14287
14288	processor.endTable(this.writer);
14289};
14290
14291// leafs (texts)
14292LayoutBuilder.prototype.processLeaf = function (node) {
14293	var line = this.buildNextLine(node);
14294	var currentHeight = (line) ? line.getHeight() : 0;
14295	var maxHeight = node.maxHeight || -1;
14296
14297	if (node._tocItemRef) {
14298		line._pageNodeRef = node._tocItemRef;
14299	}
14300
14301	if (node._pageRef) {
14302		line._pageNodeRef = node._pageRef._nodeRef;
14303	}
14304
14305	while (line && (maxHeight === -1 || currentHeight < maxHeight)) {
14306		var positions = this.writer.addLine(line);
14307		node.positions.push(positions);
14308		line = this.buildNextLine(node);
14309		if (line) {
14310			currentHeight += line.getHeight();
14311		}
14312	}
14313};
14314
14315LayoutBuilder.prototype.processToc = function (node) {
14316	if (node.toc.title) {
14317		this.processNode(node.toc.title);
14318	}
14319	this.processNode(node.toc._table);
14320};
14321
14322LayoutBuilder.prototype.buildNextLine = function (textNode) {
14323
14324	function cloneInline(inline) {
14325		var newInline = inline.constructor();
14326		for (var key in inline) {
14327			newInline[key] = inline[key];
14328		}
14329		return newInline;
14330	}
14331
14332	if (!textNode._inlines || textNode._inlines.length === 0) {
14333		return null;
14334	}
14335
14336	var line = new Line(this.writer.context().availableWidth);
14337	var textTools = new TextTools(null);
14338
14339	while (textNode._inlines && textNode._inlines.length > 0 && line.hasEnoughSpaceForInline(textNode._inlines[0])) {
14340		var inline = textNode._inlines.shift();
14341
14342		if (!inline.noWrap && inline.text.length > 1 && inline.width > line.maxWidth) {
14343			var widthPerChar = inline.width / inline.text.length;
14344			var maxChars = Math.floor(line.maxWidth / widthPerChar);
14345			if (maxChars < 1) {
14346				maxChars = 1;
14347			}
14348			if (maxChars < inline.text.length) {
14349				var newInline = cloneInline(inline);
14350
14351				newInline.text = inline.text.substr(maxChars);
14352				inline.text = inline.text.substr(0, maxChars);
14353
14354				newInline.width = textTools.widthOfString(newInline.text, newInline.font, newInline.fontSize, newInline.characterSpacing, newInline.fontFeatures);
14355				inline.width = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);
14356
14357				textNode._inlines.unshift(newInline);
14358			}
14359		}
14360
14361		line.addInline(inline);
14362	}
14363
14364	line.lastLineInParagraph = textNode._inlines.length === 0;
14365
14366	return line;
14367};
14368
14369// images
14370LayoutBuilder.prototype.processImage = function (node) {
14371	var position = this.writer.addImage(node);
14372	node.positions.push(position);
14373};
14374
14375LayoutBuilder.prototype.processCanvas = function (node) {
14376	var height = node._minHeight;
14377
14378	if (node.absolutePosition === undefined && this.writer.context().availableHeight < height) {
14379		// TODO: support for canvas larger than a page
14380		// TODO: support for other overflow methods
14381
14382		this.writer.moveToNextPage();
14383	}
14384
14385	this.writer.alignCanvas(node);
14386
14387	node.canvas.forEach(function (vector) {
14388		var position = this.writer.addVector(vector);
14389		node.positions.push(position);
14390	}, this);
14391
14392	this.writer.context().moveDown(height);
14393};
14394
14395LayoutBuilder.prototype.processQr = function (node) {
14396	var position = this.writer.addQr(node);
14397	node.positions.push(position);
14398};
14399
14400module.exports = LayoutBuilder;
14401
14402
14403/***/ }),
14404/* 129 */
14405/***/ (function(module, exports, __webpack_require__) {
14406
14407"use strict";
14408/* WEBPACK VAR INJECTION */(function(Buffer) {
14409
14410var isString = __webpack_require__(0).isString;
14411var isNumber = __webpack_require__(0).isNumber;
14412var isBoolean = __webpack_require__(0).isBoolean;
14413var isArray = __webpack_require__(0).isArray;
14414var isUndefined = __webpack_require__(0).isUndefined;
14415var fontStringify = __webpack_require__(0).fontStringify;
14416
14417function DocPreprocessor() {
14418
14419}
14420
14421DocPreprocessor.prototype.preprocessDocument = function (docStructure) {
14422	this.tocs = [];
14423	this.nodeReferences = [];
14424	return this.preprocessNode(docStructure);
14425};
14426
14427DocPreprocessor.prototype.preprocessNode = function (node) {
14428	// expand shortcuts and casting values
14429	if (isArray(node)) {
14430		node = {stack: node};
14431	} else if (isString(node)) {
14432		node = {text: node};
14433	} else if (isNumber(node) || isBoolean(node)) {
14434		node = {text: node.toString()};
14435	} else if (node === null) {
14436		node = {text: ''};
14437	} else if (Object.keys(node).length === 0) { // empty object
14438		node = {text: ''};
14439	}
14440
14441	if (node.columns) {
14442		return this.preprocessColumns(node);
14443	} else if (node.stack) {
14444		return this.preprocessVerticalContainer(node);
14445	} else if (node.ul) {
14446		return this.preprocessList(node);
14447	} else if (node.ol) {
14448		return this.preprocessList(node);
14449	} else if (node.table) {
14450		return this.preprocessTable(node);
14451	} else if (node.text !== undefined) {
14452		return this.preprocessText(node);
14453	} else if (node.toc) {
14454		return this.preprocessToc(node);
14455	} else if (node.image) {
14456		return this.preprocessImage(node);
14457	} else if (node.canvas) {
14458		return this.preprocessCanvas(node);
14459	} else if (node.qr) {
14460		return this.preprocessQr(node);
14461	} else if (node.pageReference || node.textReference) {
14462		return this.preprocessText(node);
14463	} else {
14464		throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);
14465	}
14466};
14467
14468DocPreprocessor.prototype.preprocessColumns = function (node) {
14469	var columns = node.columns;
14470
14471	for (var i = 0, l = columns.length; i < l; i++) {
14472		columns[i] = this.preprocessNode(columns[i]);
14473	}
14474
14475	return node;
14476};
14477
14478DocPreprocessor.prototype.preprocessVerticalContainer = function (node) {
14479	var items = node.stack;
14480
14481	for (var i = 0, l = items.length; i < l; i++) {
14482		items[i] = this.preprocessNode(items[i]);
14483	}
14484
14485	return node;
14486};
14487
14488DocPreprocessor.prototype.preprocessList = function (node) {
14489	var items = node.ul || node.ol;
14490
14491	for (var i = 0, l = items.length; i < l; i++) {
14492		items[i] = this.preprocessNode(items[i]);
14493	}
14494
14495	return node;
14496};
14497
14498DocPreprocessor.prototype.preprocessTable = function (node) {
14499	var col, row, cols, rows;
14500
14501	for (col = 0, cols = node.table.body[0].length; col < cols; col++) {
14502		for (row = 0, rows = node.table.body.length; row < rows; row++) {
14503			var rowData = node.table.body[row];
14504			var data = rowData[col];
14505			if (data !== undefined) {
14506				if (data === null) { // transform to object
14507					data = '';
14508				}
14509				if (!data._span) {
14510					rowData[col] = this.preprocessNode(data);
14511				}
14512			}
14513		}
14514	}
14515
14516	return node;
14517};
14518
14519DocPreprocessor.prototype.preprocessText = function (node) {
14520	if (node.tocItem) {
14521		if (!isArray(node.tocItem)) {
14522			node.tocItem = [node.tocItem];
14523		}
14524
14525		for (var i = 0, l = node.tocItem.length; i < l; i++) {
14526			if (!isString(node.tocItem[i])) {
14527				node.tocItem[i] = '_default_';
14528			}
14529
14530			var tocItemId = node.tocItem[i];
14531
14532			if (!this.tocs[tocItemId]) {
14533				this.tocs[tocItemId] = {toc: {_items: [], _pseudo: true}};
14534			}
14535
14536			this.tocs[tocItemId].toc._items.push(node);
14537		}
14538	}
14539
14540	if (node.id) {
14541		if (this.nodeReferences[node.id]) {
14542			if (!this.nodeReferences[node.id]._pseudo) {
14543				throw "Node id '" + node.id + "' already exists";
14544			}
14545
14546			this.nodeReferences[node.id]._nodeRef = node;
14547			this.nodeReferences[node.id]._pseudo = false;
14548		} else {
14549			this.nodeReferences[node.id] = {_nodeRef: node};
14550		}
14551	}
14552
14553	if (node.pageReference) {
14554		if (!this.nodeReferences[node.pageReference]) {
14555			this.nodeReferences[node.pageReference] = {_nodeRef: {}, _pseudo: true};
14556		}
14557		node.text = '00000';
14558		node._pageRef = this.nodeReferences[node.pageReference];
14559	}
14560
14561	if (node.textReference) {
14562		if (!this.nodeReferences[node.textReference]) {
14563			this.nodeReferences[node.textReference] = {_nodeRef: {}, _pseudo: true};
14564		}
14565
14566		node.text = '';
14567		node._textRef = this.nodeReferences[node.textReference];
14568	}
14569
14570	if (node.text && node.text.text) {
14571		node.text = [this.preprocessNode(node.text)];
14572	}
14573
14574	return node;
14575};
14576
14577DocPreprocessor.prototype.preprocessToc = function (node) {
14578	if (!node.toc.id) {
14579		node.toc.id = '_default_';
14580	}
14581
14582	node.toc.title = node.toc.title ? this.preprocessNode(node.toc.title) : null;
14583	node.toc._items = [];
14584
14585	if (this.tocs[node.toc.id]) {
14586		if (!this.tocs[node.toc.id].toc._pseudo) {
14587			throw "TOC '" + node.toc.id + "' already exists";
14588		}
14589
14590		node.toc._items = this.tocs[node.toc.id].toc._items;
14591	}
14592
14593	this.tocs[node.toc.id] = node;
14594
14595	return node;
14596};
14597
14598DocPreprocessor.prototype.preprocessImage = function (node) {
14599	if (!isUndefined(node.image.type) && !isUndefined(node.image.data) && (node.image.type === 'Buffer') && isArray(node.image.data)) {
14600		node.image = Buffer.from(node.image.data);
14601	}
14602	return node;
14603};
14604
14605DocPreprocessor.prototype.preprocessCanvas = function (node) {
14606	return node;
14607};
14608
14609DocPreprocessor.prototype.preprocessQr = function (node) {
14610	return node;
14611};
14612
14613module.exports = DocPreprocessor;
14614/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
14615
14616/***/ }),
14617/* 130 */
14618/***/ (function(module, exports, __webpack_require__) {
14619
14620"use strict";
14621/*eslint no-unused-vars: ["error", {"args": "none"}]*/
14622
14623
14624
14625var TextTools = __webpack_require__(42);
14626var StyleContextStack = __webpack_require__(80);
14627var ColumnCalculator = __webpack_require__(44);
14628var isString = __webpack_require__(0).isString;
14629var isNumber = __webpack_require__(0).isNumber;
14630var isObject = __webpack_require__(0).isObject;
14631var isArray = __webpack_require__(0).isArray;
14632var fontStringify = __webpack_require__(0).fontStringify;
14633var pack = __webpack_require__(0).pack;
14634var qrEncoder = __webpack_require__(134);
14635
14636/**
14637 * @private
14638 */
14639function DocMeasure(fontProvider, styleDictionary, defaultStyle, imageMeasure, tableLayouts, images) {
14640	this.textTools = new TextTools(fontProvider);
14641	this.styleStack = new StyleContextStack(styleDictionary, defaultStyle);
14642	this.imageMeasure = imageMeasure;
14643	this.tableLayouts = tableLayouts;
14644	this.images = images;
14645	this.autoImageIndex = 1;
14646}
14647
14648/**
14649 * Measures all nodes and sets min/max-width properties required for the second
14650 * layout-pass.
14651 * @param  {Object} docStructure document-definition-object
14652 * @return {Object}              document-measurement-object
14653 */
14654DocMeasure.prototype.measureDocument = function (docStructure) {
14655	return this.measureNode(docStructure);
14656};
14657
14658DocMeasure.prototype.measureNode = function (node) {
14659
14660	var self = this;
14661
14662	return this.styleStack.auto(node, function () {
14663		// TODO: refactor + rethink whether this is the proper way to handle margins
14664		node._margin = getNodeMargin(node);
14665
14666		if (node.columns) {
14667			return extendMargins(self.measureColumns(node));
14668		} else if (node.stack) {
14669			return extendMargins(self.measureVerticalContainer(node));
14670		} else if (node.ul) {
14671			return extendMargins(self.measureUnorderedList(node));
14672		} else if (node.ol) {
14673			return extendMargins(self.measureOrderedList(node));
14674		} else if (node.table) {
14675			return extendMargins(self.measureTable(node));
14676		} else if (node.text !== undefined) {
14677			return extendMargins(self.measureLeaf(node));
14678		} else if (node.toc) {
14679			return extendMargins(self.measureToc(node));
14680		} else if (node.image) {
14681			return extendMargins(self.measureImage(node));
14682		} else if (node.canvas) {
14683			return extendMargins(self.measureCanvas(node));
14684		} else if (node.qr) {
14685			return extendMargins(self.measureQr(node));
14686		} else {
14687			throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);
14688		}
14689	});
14690
14691	function extendMargins(node) {
14692		var margin = node._margin;
14693
14694		if (margin) {
14695			node._minWidth += margin[0] + margin[2];
14696			node._maxWidth += margin[0] + margin[2];
14697		}
14698
14699		return node;
14700	}
14701
14702	function getNodeMargin() {
14703
14704		function processSingleMargins(node, currentMargin) {
14705			if (node.marginLeft || node.marginTop || node.marginRight || node.marginBottom) {
14706				return [
14707					node.marginLeft || currentMargin[0] || 0,
14708					node.marginTop || currentMargin[1] || 0,
14709					node.marginRight || currentMargin[2] || 0,
14710					node.marginBottom || currentMargin[3] || 0
14711				];
14712			}
14713			return currentMargin;
14714		}
14715
14716		function flattenStyleArray(styleArray) {
14717			var flattenedStyles = {};
14718			for (var i = styleArray.length - 1; i >= 0; i--) {
14719				var styleName = styleArray[i];
14720				var style = self.styleStack.styleDictionary[styleName];
14721				for (var key in style) {
14722					if (style.hasOwnProperty(key)) {
14723						flattenedStyles[key] = style[key];
14724					}
14725				}
14726			}
14727			return flattenedStyles;
14728		}
14729
14730		function convertMargin(margin) {
14731			if (isNumber(margin)) {
14732				margin = [margin, margin, margin, margin];
14733			} else if (isArray(margin)) {
14734				if (margin.length === 2) {
14735					margin = [margin[0], margin[1], margin[0], margin[1]];
14736				}
14737			}
14738			return margin;
14739		}
14740
14741		var margin = [undefined, undefined, undefined, undefined];
14742
14743		if (node.style) {
14744			var styleArray = isArray(node.style) ? node.style : [node.style];
14745			var flattenedStyleArray = flattenStyleArray(styleArray);
14746
14747			if (flattenedStyleArray) {
14748				margin = processSingleMargins(flattenedStyleArray, margin);
14749			}
14750
14751			if (flattenedStyleArray.margin) {
14752				margin = convertMargin(flattenedStyleArray.margin);
14753			}
14754		}
14755
14756		margin = processSingleMargins(node, margin);
14757
14758		if (node.margin) {
14759			margin = convertMargin(node.margin);
14760		}
14761
14762		if (margin[0] === undefined && margin[1] === undefined && margin[2] === undefined && margin[3] === undefined) {
14763			return null;
14764		} else {
14765			return margin;
14766		}
14767	}
14768};
14769
14770DocMeasure.prototype.convertIfBase64Image = function (node) {
14771	if (/^data:image\/(jpeg|jpg|png);base64,/.test(node.image)) {
14772		var label = '$$pdfmake$$' + this.autoImageIndex++;
14773		this.images[label] = node.image;
14774		node.image = label;
14775	}
14776};
14777
14778DocMeasure.prototype.measureImage = function (node) {
14779	if (this.images) {
14780		this.convertIfBase64Image(node);
14781	}
14782
14783	var imageSize = this.imageMeasure.measureImage(node.image);
14784
14785	if (node.fit) {
14786		var factor = (imageSize.width / imageSize.height > node.fit[0] / node.fit[1]) ? node.fit[0] / imageSize.width : node.fit[1] / imageSize.height;
14787		node._width = node._minWidth = node._maxWidth = imageSize.width * factor;
14788		node._height = imageSize.height * factor;
14789	} else {
14790		node._width = node._minWidth = node._maxWidth = node.width || imageSize.width;
14791		node._height = node.height || (imageSize.height * node._width / imageSize.width);
14792
14793		if (isNumber(node.maxWidth) && node.maxWidth < node._width) {
14794			node._width = node._minWidth = node._maxWidth = node.maxWidth;
14795			node._height = node._width * imageSize.height / imageSize.width;
14796		}
14797
14798		if (isNumber(node.maxHeight) && node.maxHeight < node._height) {
14799			node._height = node.maxHeight;
14800			node._width = node._minWidth = node._maxWidth = node._height * imageSize.width / imageSize.height;
14801		}
14802
14803		if (isNumber(node.minWidth) && node.minWidth > node._width) {
14804			node._width = node._minWidth = node._maxWidth = node.minWidth;
14805			node._height = node._width * imageSize.height / imageSize.width;
14806		}
14807
14808		if (isNumber(node.minHeight) && node.minHeight > node._height) {
14809			node._height = node.minHeight;
14810			node._width = node._minWidth = node._maxWidth = node._height * imageSize.width / imageSize.height;
14811		}
14812	}
14813
14814	node._alignment = this.styleStack.getProperty('alignment');
14815	return node;
14816};
14817
14818DocMeasure.prototype.measureLeaf = function (node) {
14819
14820	if (node._textRef && node._textRef._nodeRef.text) {
14821		node.text = node._textRef._nodeRef.text;
14822	}
14823
14824	// Make sure style properties of the node itself are considered when building inlines.
14825	// We could also just pass [node] to buildInlines, but that fails for bullet points.
14826	var styleStack = this.styleStack.clone();
14827	styleStack.push(node);
14828
14829	var data = this.textTools.buildInlines(node.text, styleStack);
14830
14831	node._inlines = data.items;
14832	node._minWidth = data.minWidth;
14833	node._maxWidth = data.maxWidth;
14834
14835	return node;
14836};
14837
14838DocMeasure.prototype.measureToc = function (node) {
14839	if (node.toc.title) {
14840		node.toc.title = this.measureNode(node.toc.title);
14841	}
14842
14843	var body = [];
14844	var textStyle = node.toc.textStyle || {};
14845	var numberStyle = node.toc.numberStyle || textStyle;
14846	var textMargin = node.toc.textMargin || [0, 0, 0, 0];
14847	for (var i = 0, l = node.toc._items.length; i < l; i++) {
14848		var item = node.toc._items[i];
14849		var lineStyle = node.toc._items[i].tocStyle || textStyle;
14850		var lineMargin = node.toc._items[i].tocMargin || textMargin;
14851		body.push([
14852			{text: item.text, alignment: 'left', style: lineStyle, margin: lineMargin},
14853			{text: '00000', alignment: 'right', _tocItemRef: item, style: numberStyle, margin: [0, lineMargin[1], 0, lineMargin[3]]}
14854		]);
14855	}
14856
14857
14858	node.toc._table = {
14859		table: {
14860			dontBreakRows: true,
14861			widths: ['*', 'auto'],
14862			body: body
14863		},
14864		layout: 'noBorders'
14865	};
14866
14867	node.toc._table = this.measureNode(node.toc._table);
14868
14869	return node;
14870};
14871
14872DocMeasure.prototype.measureVerticalContainer = function (node) {
14873	var items = node.stack;
14874
14875	node._minWidth = 0;
14876	node._maxWidth = 0;
14877
14878	for (var i = 0, l = items.length; i < l; i++) {
14879		items[i] = this.measureNode(items[i]);
14880
14881		node._minWidth = Math.max(node._minWidth, items[i]._minWidth);
14882		node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);
14883	}
14884
14885	return node;
14886};
14887
14888DocMeasure.prototype.gapSizeForList = function () {
14889	return this.textTools.sizeOfString('9. ', this.styleStack);
14890};
14891
14892DocMeasure.prototype.buildUnorderedMarker = function (styleStack, gapSize, type) {
14893	function buildDisc(gapSize, color) {
14894		// TODO: ascender-based calculations
14895		var radius = gapSize.fontSize / 6;
14896		return {
14897			canvas: [{
14898					x: radius,
14899					y: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3,
14900					r1: radius,
14901					r2: radius,
14902					type: 'ellipse',
14903					color: color
14904				}]
14905		};
14906	}
14907
14908	function buildSquare(gapSize, color) {
14909		// TODO: ascender-based calculations
14910		var size = gapSize.fontSize / 3;
14911		return {
14912			canvas: [{
14913					x: 0,
14914					y: (gapSize.height / gapSize.lineHeight) + gapSize.descender - (gapSize.fontSize / 3) - (size / 2),
14915					h: size,
14916					w: size,
14917					type: 'rect',
14918					color: color
14919				}]
14920		};
14921	}
14922
14923	function buildCircle(gapSize, color) {
14924		// TODO: ascender-based calculations
14925		var radius = gapSize.fontSize / 6;
14926		return {
14927			canvas: [{
14928					x: radius,
14929					y: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3,
14930					r1: radius,
14931					r2: radius,
14932					type: 'ellipse',
14933					lineColor: color
14934				}]
14935		};
14936	}
14937
14938	var marker;
14939	var color = styleStack.getProperty('markerColor') || styleStack.getProperty('color') || 'black';
14940
14941	switch (type) {
14942		case 'circle':
14943			marker = buildCircle(gapSize, color);
14944			break;
14945
14946		case 'square':
14947			marker = buildSquare(gapSize, color);
14948			break;
14949
14950		case 'none':
14951			marker = {};
14952			break;
14953
14954		case 'disc':
14955		default:
14956			marker = buildDisc(gapSize, color);
14957			break;
14958	}
14959
14960	marker._minWidth = marker._maxWidth = gapSize.width;
14961	marker._minHeight = marker._maxHeight = gapSize.height;
14962
14963	return marker;
14964};
14965
14966DocMeasure.prototype.buildOrderedMarker = function (counter, styleStack, type, separator) {
14967	function prepareAlpha(counter) {
14968		function toAlpha(num) {
14969			return (num >= 26 ? toAlpha((num / 26 >> 0) - 1) : '') + 'abcdefghijklmnopqrstuvwxyz'[num % 26 >> 0];
14970		}
14971
14972		if (counter < 1) {
14973			return counter.toString();
14974		}
14975
14976		return toAlpha(counter - 1);
14977	}
14978
14979	function prepareRoman(counter) {
14980		if (counter < 1 || counter > 4999) {
14981			return counter.toString();
14982		}
14983		var num = counter;
14984		var lookup = {M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1}, roman = '', i;
14985		for (i in lookup) {
14986			while (num >= lookup[i]) {
14987				roman += i;
14988				num -= lookup[i];
14989			}
14990		}
14991		return roman;
14992	}
14993
14994	function prepareDecimal(counter) {
14995		return counter.toString();
14996	}
14997
14998	var counterText;
14999	switch (type) {
15000		case 'none':
15001			counterText = null;
15002			break;
15003
15004		case 'upper-alpha':
15005			counterText = prepareAlpha(counter).toUpperCase();
15006			break;
15007
15008		case 'lower-alpha':
15009			counterText = prepareAlpha(counter);
15010			break;
15011
15012		case 'upper-roman':
15013			counterText = prepareRoman(counter);
15014			break;
15015
15016		case 'lower-roman':
15017			counterText = prepareRoman(counter).toLowerCase();
15018			break;
15019
15020		case 'decimal':
15021		default:
15022			counterText = prepareDecimal(counter);
15023			break;
15024	}
15025
15026	if (counterText === null) {
15027		return {};
15028	}
15029
15030	if (separator) {
15031		if (isArray(separator)) {
15032			if (separator[0]) {
15033				counterText = separator[0] + counterText;
15034			}
15035
15036			if (separator[1]) {
15037				counterText += separator[1];
15038			}
15039			counterText += ' ';
15040		} else {
15041			counterText += separator + ' ';
15042		}
15043	}
15044
15045	var textArray = {text: counterText};
15046	var markerColor = styleStack.getProperty('markerColor');
15047	if (markerColor) {
15048		textArray.color = markerColor;
15049	}
15050
15051	return {_inlines: this.textTools.buildInlines(textArray, styleStack).items};
15052};
15053
15054DocMeasure.prototype.measureUnorderedList = function (node) {
15055	var style = this.styleStack.clone();
15056	var items = node.ul;
15057	node.type = node.type || 'disc';
15058	node._gapSize = this.gapSizeForList();
15059	node._minWidth = 0;
15060	node._maxWidth = 0;
15061
15062	for (var i = 0, l = items.length; i < l; i++) {
15063		var item = items[i] = this.measureNode(items[i]);
15064
15065		if (!item.ol && !item.ul) {
15066			item.listMarker = this.buildUnorderedMarker(style, node._gapSize, item.listType || node.type);
15067		}
15068
15069		node._minWidth = Math.max(node._minWidth, items[i]._minWidth + node._gapSize.width);
15070		node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth + node._gapSize.width);
15071	}
15072
15073	return node;
15074};
15075
15076DocMeasure.prototype.measureOrderedList = function (node) {
15077	var style = this.styleStack.clone();
15078	var items = node.ol;
15079	node.type = node.type || 'decimal';
15080	node.separator = node.separator || '.';
15081	node.reversed = node.reversed || false;
15082	if (!node.start) {
15083		node.start = node.reversed ? items.length : 1;
15084	}
vendor: 7,195 bytes, lines 15085-15372
15085	node._gapSize = this.gapSizeForList();
15086	node._minWidth = 0;
15087	node._maxWidth = 0;
15088
15089	var counter = node.start;
15090	for (var i = 0, l = items.length; i < l; i++) {
15091		var item = items[i] = this.measureNode(items[i]);
15092
15093		if (!item.ol && !item.ul) {
15094			item.listMarker = this.buildOrderedMarker(item.counter || counter, style, item.listType || node.type, node.separator);
15095			if (item.listMarker._inlines) {
15096				node._gapSize.width = Math.max(node._gapSize.width, item.listMarker._inlines[0].width);
15097			}
15098		}  // TODO: else - nested lists numbering
15099
15100		node._minWidth = Math.max(node._minWidth, items[i]._minWidth);
15101		node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);
15102
15103		if (node.reversed) {
15104			counter--;
15105		} else {
15106			counter++;
15107		}
15108	}
15109
15110	node._minWidth += node._gapSize.width;
15111	node._maxWidth += node._gapSize.width;
15112
15113	for (var i = 0, l = items.length; i < l; i++) {
15114		var item = items[i];
15115		if (!item.ol && !item.ul) {
15116			item.listMarker._minWidth = item.listMarker._maxWidth = node._gapSize.width;
15117		}
15118	}
15119
15120	return node;
15121};
15122
15123DocMeasure.prototype.measureColumns = function (node) {
15124	var columns = node.columns;
15125	node._gap = this.styleStack.getProperty('columnGap') || 0;
15126
15127	for (var i = 0, l = columns.length; i < l; i++) {
15128		columns[i] = this.measureNode(columns[i]);
15129	}
15130
15131	var measures = ColumnCalculator.measureMinMax(columns);
15132
15133	var numGaps = (columns.length > 0) ? (columns.length - 1) : 0;
15134	node._minWidth = measures.min + node._gap * numGaps;
15135	node._maxWidth = measures.max + node._gap * numGaps;
15136
15137	return node;
15138};
15139
15140DocMeasure.prototype.measureTable = function (node) {
15141	extendTableWidths(node);
15142	node._layout = getLayout(this.tableLayouts);
15143	node._offsets = getOffsets(node._layout);
15144
15145	var colSpans = [];
15146	var col, row, cols, rows;
15147
15148	for (col = 0, cols = node.table.body[0].length; col < cols; col++) {
15149		var c = node.table.widths[col];
15150		c._minWidth = 0;
15151		c._maxWidth = 0;
15152
15153		for (row = 0, rows = node.table.body.length; row < rows; row++) {
15154			var rowData = node.table.body[row];
15155			var data = rowData[col];
15156			if (data === undefined) {
15157				console.error('Malformed table row ', rowData, 'in node ', node);
15158				throw 'Malformed table row, a cell is undefined.';
15159			}
15160			if (data === null) { // transform to object
15161				data = '';
15162			}
15163
15164			if (!data._span) {
15165				data = rowData[col] = this.styleStack.auto(data, measureCb(this, data));
15166
15167				if (data.colSpan && data.colSpan > 1) {
15168					markSpans(rowData, col, data.colSpan);
15169					colSpans.push({col: col, span: data.colSpan, minWidth: data._minWidth, maxWidth: data._maxWidth});
15170				} else {
15171					c._minWidth = Math.max(c._minWidth, data._minWidth);
15172					c._maxWidth = Math.max(c._maxWidth, data._maxWidth);
15173				}
15174			}
15175
15176			if (data.rowSpan && data.rowSpan > 1) {
15177				markVSpans(node.table, row, col, data.rowSpan);
15178			}
15179		}
15180	}
15181
15182	extendWidthsForColSpans();
15183
15184	var measures = ColumnCalculator.measureMinMax(node.table.widths);
15185
15186	node._minWidth = measures.min + node._offsets.total;
15187	node._maxWidth = measures.max + node._offsets.total;
15188
15189	return node;
15190
15191	function measureCb(_this, data) {
15192		return function () {
15193			if (isObject(data)) {
15194				data.fillColor = _this.styleStack.getProperty('fillColor');
15195			}
15196			return _this.measureNode(data);
15197		};
15198	}
15199
15200	function getLayout(tableLayouts) {
15201		var layout = node.layout;
15202
15203		if (isString(layout)) {
15204			layout = tableLayouts[layout];
15205		}
15206
15207		var defaultLayout = {
15208			hLineWidth: function (i, node) {
15209				return 1;
15210			},
15211			vLineWidth: function (i, node) {
15212				return 1;
15213			},
15214			hLineColor: function (i, node) {
15215				return 'black';
15216			},
15217			vLineColor: function (i, node) {
15218				return 'black';
15219			},
15220			paddingLeft: function (i, node) {
15221				return 4;
15222			},
15223			paddingRight: function (i, node) {
15224				return 4;
15225			},
15226			paddingTop: function (i, node) {
15227				return 2;
15228			},
15229			paddingBottom: function (i, node) {
15230				return 2;
15231			},
15232			fillColor: function (i, node) {
15233				return null;
15234			},
15235			defaultBorder: true
15236		};
15237
15238		return pack(defaultLayout, layout);
15239	}
15240
15241	function getOffsets(layout) {
15242		var offsets = [];
15243		var totalOffset = 0;
15244		var prevRightPadding = 0;
15245
15246		for (var i = 0, l = node.table.widths.length; i < l; i++) {
15247			var lOffset = prevRightPadding + layout.vLineWidth(i, node) + layout.paddingLeft(i, node);
15248			offsets.push(lOffset);
15249			totalOffset += lOffset;
15250			prevRightPadding = layout.paddingRight(i, node);
15251		}
15252
15253		totalOffset += prevRightPadding + layout.vLineWidth(node.table.widths.length, node);
15254
15255		return {
15256			total: totalOffset,
15257			offsets: offsets
15258		};
15259	}
15260
15261	function extendWidthsForColSpans() {
15262		var q, j;
15263
15264		for (var i = 0, l = colSpans.length; i < l; i++) {
15265			var span = colSpans[i];
15266
15267			var currentMinMax = getMinMax(span.col, span.span, node._offsets);
15268			var minDifference = span.minWidth - currentMinMax.minWidth;
15269			var maxDifference = span.maxWidth - currentMinMax.maxWidth;
15270
15271			if (minDifference > 0) {
15272				q = minDifference / span.span;
15273
15274				for (j = 0; j < span.span; j++) {
15275					node.table.widths[span.col + j]._minWidth += q;
15276				}
15277			}
15278
15279			if (maxDifference > 0) {
15280				q = maxDifference / span.span;
15281
15282				for (j = 0; j < span.span; j++) {
15283					node.table.widths[span.col + j]._maxWidth += q;
15284				}
15285			}
15286		}
15287	}
15288
15289	function getMinMax(col, span, offsets) {
15290		var result = {minWidth: 0, maxWidth: 0};
15291
15292		for (var i = 0; i < span; i++) {
15293			result.minWidth += node.table.widths[col + i]._minWidth + (i ? offsets.offsets[col + i] : 0);
15294			result.maxWidth += node.table.widths[col + i]._maxWidth + (i ? offsets.offsets[col + i] : 0);
15295		}
15296
15297		return result;
15298	}
15299
15300	function markSpans(rowData, col, span) {
15301		for (var i = 1; i < span; i++) {
15302			rowData[col + i] = {
15303				_span: true,
15304				_minWidth: 0,
15305				_maxWidth: 0,
15306				rowSpan: rowData[col].rowSpan
15307			};
15308		}
15309	}
15310
15311	function markVSpans(table, row, col, span) {
15312		for (var i = 1; i < span; i++) {
15313			table.body[row + i][col] = {
15314				_span: true,
15315				_minWidth: 0,
15316				_maxWidth: 0,
15317				fillColor: table.body[row][col].fillColor
15318			};
15319		}
15320	}
15321
15322	function extendTableWidths(node) {
15323		if (!node.table.widths) {
15324			node.table.widths = '*';
15325		}
15326
15327		if (isString(node.table.widths)) {
15328			node.table.widths = [node.table.widths];
15329
15330			while (node.table.widths.length < node.table.body[0].length) {
15331				node.table.widths.push(node.table.widths[node.table.widths.length - 1]);
15332			}
15333		}
15334
15335		for (var i = 0, l = node.table.widths.length; i < l; i++) {
15336			var w = node.table.widths[i];
15337			if (isNumber(w) || isString(w)) {
15338				node.table.widths[i] = {width: w};
15339			}
15340		}
15341	}
15342};
15343
15344DocMeasure.prototype.measureCanvas = function (node) {
15345	var w = 0, h = 0;
15346
15347	for (var i = 0, l = node.canvas.length; i < l; i++) {
15348		var vector = node.canvas[i];
15349
15350		switch (vector.type) {
15351			case 'ellipse':
15352				w = Math.max(w, vector.x + vector.r1);
15353				h = Math.max(h, vector.y + vector.r2);
15354				break;
15355			case 'rect':
15356				w = Math.max(w, vector.x + vector.w);
15357				h = Math.max(h, vector.y + vector.h);
15358				break;
15359			case 'line':
15360				w = Math.max(w, vector.x1, vector.x2);
15361				h = Math.max(h, vector.y1, vector.y2);
15362				break;
15363			case 'polyline':
15364				for (var i2 = 0, l2 = vector.points.length; i2 < l2; i2++) {
15365					w = Math.max(w, vector.points[i2].x);
15366					h = Math.max(h, vector.points[i2].y);
15367				}
15368				break;
15369		}
15370	}
15371
15372	node._minWidth = node._maxWidth = w;
vendor: 5,242 bytes, lines 15373-15610
15373	node._minHeight = node._maxHeight = h;
15374	node._alignment = this.styleStack.getProperty('alignment');
15375
15376	return node;
15377};
15378
15379DocMeasure.prototype.measureQr = function (node) {
15380	node = qrEncoder.measure(node);
15381	node._alignment = this.styleStack.getProperty('alignment');
15382	return node;
15383};
15384
15385module.exports = DocMeasure;
15386
15387
15388/***/ }),
15389/* 131 */
15390/***/ (function(module, exports, __webpack_require__) {
15391
15392var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
15393
15394;(function (exports) {
15395	'use strict';
15396
15397  var Arr = (typeof Uint8Array !== 'undefined')
15398    ? Uint8Array
15399    : Array
15400
15401	var PLUS   = '+'.charCodeAt(0)
15402	var SLASH  = '/'.charCodeAt(0)
15403	var NUMBER = '0'.charCodeAt(0)
15404	var LOWER  = 'a'.charCodeAt(0)
15405	var UPPER  = 'A'.charCodeAt(0)
15406	var PLUS_URL_SAFE = '-'.charCodeAt(0)
15407	var SLASH_URL_SAFE = '_'.charCodeAt(0)
15408
15409	function decode (elt) {
15410		var code = elt.charCodeAt(0)
15411		if (code === PLUS ||
15412		    code === PLUS_URL_SAFE)
15413			return 62 // '+'
15414		if (code === SLASH ||
15415		    code === SLASH_URL_SAFE)
15416			return 63 // '/'
15417		if (code < NUMBER)
15418			return -1 //no match
15419		if (code < NUMBER + 10)
15420			return code - NUMBER + 26 + 26
15421		if (code < UPPER + 26)
15422			return code - UPPER
15423		if (code < LOWER + 26)
15424			return code - LOWER + 26
15425	}
15426
15427	function b64ToByteArray (b64) {
15428		var i, j, l, tmp, placeHolders, arr
15429
15430		if (b64.length % 4 > 0) {
15431			throw new Error('Invalid string. Length must be a multiple of 4')
15432		}
15433
15434		// the number of equal signs (place holders)
15435		// if there are two placeholders, than the two characters before it
15436		// represent one byte
15437		// if there is only one, then the three characters before it represent 2 bytes
15438		// this is just a cheap hack to not do indexOf twice
15439		var len = b64.length
15440		placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
15441
15442		// base64 is 4/3 + up to two characters of the original data
15443		arr = new Arr(b64.length * 3 / 4 - placeHolders)
15444
15445		// if there are placeholders, only get up to the last complete 4 chars
15446		l = placeHolders > 0 ? b64.length - 4 : b64.length
15447
15448		var L = 0
15449
15450		function push (v) {
15451			arr[L++] = v
15452		}
15453
15454		for (i = 0, j = 0; i < l; i += 4, j += 3) {
15455			tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
15456			push((tmp & 0xFF0000) >> 16)
15457			push((tmp & 0xFF00) >> 8)
15458			push(tmp & 0xFF)
15459		}
15460
15461		if (placeHolders === 2) {
15462			tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
15463			push(tmp & 0xFF)
15464		} else if (placeHolders === 1) {
15465			tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
15466			push((tmp >> 8) & 0xFF)
15467			push(tmp & 0xFF)
15468		}
15469
15470		return arr
15471	}
15472
15473	function uint8ToBase64 (uint8) {
15474		var i,
15475			extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
15476			output = "",
15477			temp, length
15478
15479		function encode (num) {
15480			return lookup.charAt(num)
15481		}
15482
15483		function tripletToBase64 (num) {
15484			return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
15485		}
15486
15487		// go through the array every three bytes, we'll deal with trailing stuff later
15488		for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
15489			temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
15490			output += tripletToBase64(temp)
15491		}
15492
15493		// pad the end with zeros, but make sure to not forget the extra bytes
15494		switch (extraBytes) {
15495			case 1:
15496				temp = uint8[uint8.length - 1]
15497				output += encode(temp >> 2)
15498				output += encode((temp << 4) & 0x3F)
15499				output += '=='
15500				break
15501			case 2:
15502				temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
15503				output += encode(temp >> 10)
15504				output += encode((temp >> 4) & 0x3F)
15505				output += encode((temp << 2) & 0x3F)
15506				output += '='
15507				break
15508		}
15509
15510		return output
15511	}
15512
15513	exports.toByteArray = b64ToByteArray
15514	exports.fromByteArray = uint8ToBase64
15515}( false ? (this.base64js = {}) : exports))
15516
15517
15518/***/ }),
15519/* 132 */
15520/***/ (function(module, exports) {
15521
15522// Generated by CoffeeScript 1.7.1
15523(function() {
15524  var AI, AL, B2, BA, BB, BK, CB, CJ, CL, CM, CP, CR, EX, GL, H2, H3, HL, HY, ID, IN, IS, JL, JT, JV, LF, NL, NS, NU, OP, PO, PR, QU, RI, SA, SG, SP, SY, WJ, XX, ZW;
15525
15526  exports.OP = OP = 0;
15527
15528  exports.CL = CL = 1;
15529
15530  exports.CP = CP = 2;
15531
15532  exports.QU = QU = 3;
15533
15534  exports.GL = GL = 4;
15535
15536  exports.NS = NS = 5;
15537
15538  exports.EX = EX = 6;
15539
15540  exports.SY = SY = 7;
15541
15542  exports.IS = IS = 8;
15543
15544  exports.PR = PR = 9;
15545
15546  exports.PO = PO = 10;
15547
15548  exports.NU = NU = 11;
15549
15550  exports.AL = AL = 12;
15551
15552  exports.HL = HL = 13;
15553
15554  exports.ID = ID = 14;
15555
15556  exports.IN = IN = 15;
15557
15558  exports.HY = HY = 16;
15559
15560  exports.BA = BA = 17;
15561
15562  exports.BB = BB = 18;
15563
15564  exports.B2 = B2 = 19;
15565
15566  exports.ZW = ZW = 20;
15567
15568  exports.CM = CM = 21;
15569
15570  exports.WJ = WJ = 22;
15571
15572  exports.H2 = H2 = 23;
15573
15574  exports.H3 = H3 = 24;
15575
15576  exports.JL = JL = 25;
15577
15578  exports.JV = JV = 26;
15579
15580  exports.JT = JT = 27;
15581
15582  exports.RI = RI = 28;
15583
15584  exports.AI = AI = 29;
15585
15586  exports.BK = BK = 30;
15587
15588  exports.CB = CB = 31;
15589
15590  exports.CJ = CJ = 32;
15591
15592  exports.CR = CR = 33;
15593
15594  exports.LF = LF = 34;
15595
15596  exports.NL = NL = 35;
15597
15598  exports.SA = SA = 36;
15599
15600  exports.SG = SG = 37;
15601
15602  exports.SP = SP = 38;
15603
15604  exports.XX = XX = 39;
15605
15606}).call(this);
15607
15608
15609/***/ }),
15610/* 133 */
15611/***/ (function(module, exports) {
15612
15613// Generated by CoffeeScript 1.7.1
15614(function() {
15615  var CI_BRK, CP_BRK, DI_BRK, IN_BRK, PR_BRK;
15616
15617  exports.DI_BRK = DI_BRK = 0;
15618
15619  exports.IN_BRK = IN_BRK = 1;
15620
15621  exports.CI_BRK = CI_BRK = 2;
15622
15623  exports.CP_BRK = CP_BRK = 3;
15624
15625  exports.PR_BRK = PR_BRK = 4;
15626
15627  exports.pairTable = [[PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK]];
15628
15629}).call(this);
15630
15631
15632/***/ }),
15633/* 134 */
15634/***/ (function(module, exports, __webpack_require__) {
15635
15636"use strict";
15637/*eslint no-unused-vars: ["error", {"args": "none"}]*/
15638/*eslint no-redeclare: "off"*/
15639
15640
15641/* qr.js -- QR code generator in Javascript (revision 2011-01-19)
15642 * Written by Kang Seonghoon <[email protected]>.
15643 *
15644 * This source code is in the public domain; if your jurisdiction does not
vendor: 28,189 bytes, lines 15645-16506
15645 * recognize the public domain the terms of Creative Commons CC0 license
15646 * apply. In the other words, you can always do what you want.
15647 */
15648
15649
15650// per-version information (cf. JIS X 0510:2004 pp. 30--36, 71)
15651//
15652// [0]: the degree of generator polynomial by ECC levels
15653// [1]: # of code blocks by ECC levels
15654// [2]: left-top positions of alignment patterns
15655//
15656// the number in this table (in particular, [0]) does not exactly match with
15657// the numbers in the specficiation. see augumenteccs below for the reason.
15658var VERSIONS = [
15659	null,
15660	[[10, 7, 17, 13], [1, 1, 1, 1], []],
15661	[[16, 10, 28, 22], [1, 1, 1, 1], [4, 16]],
15662	[[26, 15, 22, 18], [1, 1, 2, 2], [4, 20]],
15663	[[18, 20, 16, 26], [2, 1, 4, 2], [4, 24]],
15664	[[24, 26, 22, 18], [2, 1, 4, 4], [4, 28]],
15665	[[16, 18, 28, 24], [4, 2, 4, 4], [4, 32]],
15666	[[18, 20, 26, 18], [4, 2, 5, 6], [4, 20, 36]],
15667	[[22, 24, 26, 22], [4, 2, 6, 6], [4, 22, 40]],
15668	[[22, 30, 24, 20], [5, 2, 8, 8], [4, 24, 44]],
15669	[[26, 18, 28, 24], [5, 4, 8, 8], [4, 26, 48]],
15670	[[30, 20, 24, 28], [5, 4, 11, 8], [4, 28, 52]],
15671	[[22, 24, 28, 26], [8, 4, 11, 10], [4, 30, 56]],
15672	[[22, 26, 22, 24], [9, 4, 16, 12], [4, 32, 60]],
15673	[[24, 30, 24, 20], [9, 4, 16, 16], [4, 24, 44, 64]],
15674	[[24, 22, 24, 30], [10, 6, 18, 12], [4, 24, 46, 68]],
15675	[[28, 24, 30, 24], [10, 6, 16, 17], [4, 24, 48, 72]],
15676	[[28, 28, 28, 28], [11, 6, 19, 16], [4, 28, 52, 76]],
15677	[[26, 30, 28, 28], [13, 6, 21, 18], [4, 28, 54, 80]],
15678	[[26, 28, 26, 26], [14, 7, 25, 21], [4, 28, 56, 84]],
15679	[[26, 28, 28, 30], [16, 8, 25, 20], [4, 32, 60, 88]],
15680	[[26, 28, 30, 28], [17, 8, 25, 23], [4, 26, 48, 70, 92]],
15681	[[28, 28, 24, 30], [17, 9, 34, 23], [4, 24, 48, 72, 96]],
15682	[[28, 30, 30, 30], [18, 9, 30, 25], [4, 28, 52, 76, 100]],
15683	[[28, 30, 30, 30], [20, 10, 32, 27], [4, 26, 52, 78, 104]],
15684	[[28, 26, 30, 30], [21, 12, 35, 29], [4, 30, 56, 82, 108]],
15685	[[28, 28, 30, 28], [23, 12, 37, 34], [4, 28, 56, 84, 112]],
15686	[[28, 30, 30, 30], [25, 12, 40, 34], [4, 32, 60, 88, 116]],
15687	[[28, 30, 30, 30], [26, 13, 42, 35], [4, 24, 48, 72, 96, 120]],
15688	[[28, 30, 30, 30], [28, 14, 45, 38], [4, 28, 52, 76, 100, 124]],
15689	[[28, 30, 30, 30], [29, 15, 48, 40], [4, 24, 50, 76, 102, 128]],
15690	[[28, 30, 30, 30], [31, 16, 51, 43], [4, 28, 54, 80, 106, 132]],
15691	[[28, 30, 30, 30], [33, 17, 54, 45], [4, 32, 58, 84, 110, 136]],
15692	[[28, 30, 30, 30], [35, 18, 57, 48], [4, 28, 56, 84, 112, 140]],
15693	[[28, 30, 30, 30], [37, 19, 60, 51], [4, 32, 60, 88, 116, 144]],
15694	[[28, 30, 30, 30], [38, 19, 63, 53], [4, 28, 52, 76, 100, 124, 148]],
15695	[[28, 30, 30, 30], [40, 20, 66, 56], [4, 22, 48, 74, 100, 126, 152]],
15696	[[28, 30, 30, 30], [43, 21, 70, 59], [4, 26, 52, 78, 104, 130, 156]],
15697	[[28, 30, 30, 30], [45, 22, 74, 62], [4, 30, 56, 82, 108, 134, 160]],
15698	[[28, 30, 30, 30], [47, 24, 77, 65], [4, 24, 52, 80, 108, 136, 164]],
15699	[[28, 30, 30, 30], [49, 25, 81, 68], [4, 28, 56, 84, 112, 140, 168]]];
15700
15701// mode constants (cf. Table 2 in JIS X 0510:2004 p. 16)
15702var MODE_TERMINATOR = 0;
15703var MODE_NUMERIC = 1, MODE_ALPHANUMERIC = 2, MODE_OCTET = 4, MODE_KANJI = 8;
15704
15705// validation regexps
15706var NUMERIC_REGEXP = /^\d*$/;
15707var ALPHANUMERIC_REGEXP = /^[A-Za-z0-9 $%*+\-./:]*$/;
15708var ALPHANUMERIC_OUT_REGEXP = /^[A-Z0-9 $%*+\-./:]*$/;
15709
15710// ECC levels (cf. Table 22 in JIS X 0510:2004 p. 45)
15711var ECCLEVEL_L = 1, ECCLEVEL_M = 0, ECCLEVEL_Q = 3, ECCLEVEL_H = 2;
15712
15713// GF(2^8)-to-integer mapping with a reducing polynomial x^8+x^4+x^3+x^2+1
15714// invariant: GF256_MAP[GF256_INVMAP[i]] == i for all i in [1,256)
15715var GF256_MAP = [], GF256_INVMAP = [-1];
15716for (var i = 0, v = 1; i < 255; ++i) {
15717	GF256_MAP.push(v);
15718	GF256_INVMAP[v] = i;
15719	v = (v * 2) ^ (v >= 128 ? 0x11d : 0);
15720}
15721
15722// generator polynomials up to degree 30
15723// (should match with polynomials in JIS X 0510:2004 Appendix A)
15724//
15725// generator polynomial of degree K is product of (x-\alpha^0), (x-\alpha^1),
15726// ..., (x-\alpha^(K-1)). by convention, we omit the K-th coefficient (always 1)
15727// from the result; also other coefficients are written in terms of the exponent
15728// to \alpha to avoid the redundant calculation. (see also calculateecc below.)
15729var GF256_GENPOLY = [[]];
15730for (var i = 0; i < 30; ++i) {
15731	var prevpoly = GF256_GENPOLY[i], poly = [];
15732	for (var j = 0; j <= i; ++j) {
15733		var a = (j < i ? GF256_MAP[prevpoly[j]] : 0);
15734		var b = GF256_MAP[(i + (prevpoly[j - 1] || 0)) % 255];
15735		poly.push(GF256_INVMAP[a ^ b]);
15736	}
15737	GF256_GENPOLY.push(poly);
15738}
15739
15740// alphanumeric character mapping (cf. Table 5 in JIS X 0510:2004 p. 19)
15741var ALPHANUMERIC_MAP = {};
15742for (var i = 0; i < 45; ++i) {
15743	ALPHANUMERIC_MAP['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'.charAt(i)] = i;
15744}
15745
15746// mask functions in terms of row # and column #
15747// (cf. Table 20 in JIS X 0510:2004 p. 42)
15748/*jshint unused: false */
15749var MASKFUNCS = [
15750	function (i, j) {
15751		return (i + j) % 2 === 0;
15752	},
15753	function (i, j) {
15754		return i % 2 === 0;
15755	},
15756	function (i, j) {
15757		return j % 3 === 0;
15758	},
15759	function (i, j) {
15760		return (i + j) % 3 === 0;
15761	},
15762	function (i, j) {
15763		return (((i / 2) | 0) + ((j / 3) | 0)) % 2 === 0;
15764	},
15765	function (i, j) {
15766		return (i * j) % 2 + (i * j) % 3 === 0;
15767	},
15768	function (i, j) {
15769		return ((i * j) % 2 + (i * j) % 3) % 2 === 0;
15770	},
15771	function (i, j) {
15772		return ((i + j) % 2 + (i * j) % 3) % 2 === 0;
15773	}];
15774
15775// returns true when the version information has to be embeded.
15776var needsverinfo = function (ver) {
15777	return ver > 6;
15778};
15779
15780// returns the size of entire QR code for given version.
15781var getsizebyver = function (ver) {
15782	return 4 * ver + 17;
15783};
15784
15785// returns the number of bits available for code words in this version.
15786var nfullbits = function (ver) {
15787	/*
15788	 * |<--------------- n --------------->|
15789	 * |        |<----- n-17 ---->|        |
15790	 * +-------+                ///+-------+ ----
15791	 * |       |                ///|       |    ^
15792	 * |  9x9  |       @@@@@    ///|  9x8  |    |
15793	 * |       | # # # @5x5@ # # # |       |    |
15794	 * +-------+       @@@@@       +-------+    |
15795	 *       #                               ---|
15796	 *                                        ^ |
15797	 *       #                                |
15798	 *     @@@@@       @@@@@       @@@@@      | n
15799	 *     @5x5@       @5x5@       @5x5@   n-17
15800	 *     @@@@@       @@@@@       @@@@@      | |
15801	 *       #                                | |
15802	 * //////                                 v |
15803	 * //////#                               ---|
15804	 * +-------+       @@@@@       @@@@@        |
15805	 * |       |       @5x5@       @5x5@        |
15806	 * |  8x9  |       @@@@@       @@@@@        |
15807	 * |       |                                v
15808	 * +-------+                             ----
15809	 *
15810	 * when the entire code has n^2 modules and there are m^2-3 alignment
15811	 * patterns, we have:
15812	 * - 225 (= 9x9 + 9x8 + 8x9) modules for finder patterns and
15813	 *   format information;
15814	 * - 2n-34 (= 2(n-17)) modules for timing patterns;
15815	 * - 36 (= 3x6 + 6x3) modules for version information, if any;
15816	 * - 25m^2-75 (= (m^2-3)(5x5)) modules for alignment patterns
15817	 *   if any, but 10m-20 (= 2(m-2)x5) of them overlaps with
15818	 *   timing patterns.
15819	 */
15820	var v = VERSIONS[ver];
15821	var nbits = 16 * ver * ver + 128 * ver + 64; // finder, timing and format info.
15822	if (needsverinfo(ver))
15823		nbits -= 36; // version information
15824	if (v[2].length) { // alignment patterns
15825		nbits -= 25 * v[2].length * v[2].length - 10 * v[2].length - 55;
15826	}
15827	return nbits;
15828};
15829
15830// returns the number of bits available for data portions (i.e. excludes ECC
15831// bits but includes mode and length bits) in this version and ECC level.
15832var ndatabits = function (ver, ecclevel) {
15833	var nbits = nfullbits(ver) & ~7; // no sub-octet code words
15834	var v = VERSIONS[ver];
15835	nbits -= 8 * v[0][ecclevel] * v[1][ecclevel]; // ecc bits
15836	return nbits;
15837};
15838
15839// returns the number of bits required for the length of data.
15840// (cf. Table 3 in JIS X 0510:2004 p. 16)
15841var ndatalenbits = function (ver, mode) {
15842	switch (mode) {
15843		case MODE_NUMERIC:
15844			return (ver < 10 ? 10 : ver < 27 ? 12 : 14);
15845		case MODE_ALPHANUMERIC:
15846			return (ver < 10 ? 9 : ver < 27 ? 11 : 13);
15847		case MODE_OCTET:
15848			return (ver < 10 ? 8 : 16);
15849		case MODE_KANJI:
15850			return (ver < 10 ? 8 : ver < 27 ? 10 : 12);
15851	}
15852};
15853
15854// returns the maximum length of data possible in given configuration.
15855var getmaxdatalen = function (ver, mode, ecclevel) {
15856	var nbits = ndatabits(ver, ecclevel) - 4 - ndatalenbits(ver, mode); // 4 for mode bits
15857	switch (mode) {
15858		case MODE_NUMERIC:
15859			return ((nbits / 10) | 0) * 3 + (nbits % 10 < 4 ? 0 : nbits % 10 < 7 ? 1 : 2);
15860		case MODE_ALPHANUMERIC:
15861			return ((nbits / 11) | 0) * 2 + (nbits % 11 < 6 ? 0 : 1);
15862		case MODE_OCTET:
15863			return (nbits / 8) | 0;
15864		case MODE_KANJI:
15865			return (nbits / 13) | 0;
15866	}
15867};
15868
15869// checks if the given data can be encoded in given mode, and returns
15870// the converted data for the further processing if possible. otherwise
15871// returns null.
15872//
15873// this function does not check the length of data; it is a duty of
15874// encode function below (as it depends on the version and ECC level too).
15875var validatedata = function (mode, data) {
15876	switch (mode) {
15877		case MODE_NUMERIC:
15878			if (!data.match(NUMERIC_REGEXP))
15879				return null;
15880			return data;
15881
15882		case MODE_ALPHANUMERIC:
15883			if (!data.match(ALPHANUMERIC_REGEXP))
15884				return null;
15885			return data.toUpperCase();
15886
15887		case MODE_OCTET:
15888			if (typeof data === 'string') { // encode as utf-8 string
15889				var newdata = [];
15890				for (var i = 0; i < data.length; ++i) {
15891					var ch = data.charCodeAt(i);
15892					if (ch < 0x80) {
15893						newdata.push(ch);
15894					} else if (ch < 0x800) {
15895						newdata.push(0xc0 | (ch >> 6),
15896							0x80 | (ch & 0x3f));
15897					} else if (ch < 0x10000) {
15898						newdata.push(0xe0 | (ch >> 12),
15899							0x80 | ((ch >> 6) & 0x3f),
15900							0x80 | (ch & 0x3f));
15901					} else {
15902						newdata.push(0xf0 | (ch >> 18),
15903							0x80 | ((ch >> 12) & 0x3f),
15904							0x80 | ((ch >> 6) & 0x3f),
15905							0x80 | (ch & 0x3f));
15906					}
15907				}
15908				return newdata;
15909			} else {
15910				return data;
15911			}
15912	}
15913};
15914
15915// returns the code words (sans ECC bits) for given data and configurations.
15916// requires data to be preprocessed by validatedata. no length check is
15917// performed, and everything has to be checked before calling this function.
15918var encode = function (ver, mode, data, maxbuflen) {
15919	var buf = [];
15920	var bits = 0, remaining = 8;
15921	var datalen = data.length;
15922
15923	// this function is intentionally no-op when n=0.
15924	var pack = function (x, n) {
15925		if (n >= remaining) {
15926			buf.push(bits | (x >> (n -= remaining)));
15927			while (n >= 8)
15928				buf.push((x >> (n -= 8)) & 255);
15929			bits = 0;
15930			remaining = 8;
15931		}
15932		if (n > 0)
15933			bits |= (x & ((1 << n) - 1)) << (remaining -= n);
15934	};
15935
15936	var nlenbits = ndatalenbits(ver, mode);
15937	pack(mode, 4);
15938	pack(datalen, nlenbits);
15939
15940	switch (mode) {
15941		case MODE_NUMERIC:
15942			for (var i = 2; i < datalen; i += 3) {
15943				pack(parseInt(data.substring(i - 2, i + 1), 10), 10);
15944			}
15945			pack(parseInt(data.substring(i - 2), 10), [0, 4, 7][datalen % 3]);
15946			break;
15947
15948		case MODE_ALPHANUMERIC:
15949			for (var i = 1; i < datalen; i += 2) {
15950				pack(ALPHANUMERIC_MAP[data.charAt(i - 1)] * 45 +
15951					ALPHANUMERIC_MAP[data.charAt(i)], 11);
15952			}
15953			if (datalen % 2 == 1) {
15954				pack(ALPHANUMERIC_MAP[data.charAt(i - 1)], 6);
15955			}
15956			break;
15957
15958		case MODE_OCTET:
15959			for (var i = 0; i < datalen; ++i) {
15960				pack(data[i], 8);
15961			}
15962			break;
15963	}
15964
15965	// final bits. it is possible that adding terminator causes the buffer
15966	// to overflow, but then the buffer truncated to the maximum size will
15967	// be valid as the truncated terminator mode bits and padding is
15968	// identical in appearance (cf. JIS X 0510:2004 sec 8.4.8).
15969	pack(MODE_TERMINATOR, 4);
15970	if (remaining < 8)
15971		buf.push(bits);
15972
15973	// the padding to fill up the remaining space. we should not add any
15974	// words when the overflow already occurred.
15975	while (buf.length + 1 < maxbuflen)
15976		buf.push(0xec, 0x11);
15977	if (buf.length < maxbuflen)
15978		buf.push(0xec);
15979	return buf;
15980};
15981
15982// calculates ECC code words for given code words and generator polynomial.
15983//
15984// this is quite similar to CRC calculation as both Reed-Solomon and CRC use
15985// the certain kind of cyclic codes, which is effectively the division of
15986// zero-augumented polynomial by the generator polynomial. the only difference
15987// is that Reed-Solomon uses GF(2^8), instead of CRC's GF(2), and Reed-Solomon
15988// uses the different generator polynomial than CRC's.
15989var calculateecc = function (poly, genpoly) {
15990	var modulus = poly.slice(0);
15991	var polylen = poly.length, genpolylen = genpoly.length;
15992	for (var i = 0; i < genpolylen; ++i)
15993		modulus.push(0);
15994	for (var i = 0; i < polylen; ) {
15995		var quotient = GF256_INVMAP[modulus[i++]];
15996		if (quotient >= 0) {
15997			for (var j = 0; j < genpolylen; ++j) {
15998				modulus[i + j] ^= GF256_MAP[(quotient + genpoly[j]) % 255];
15999			}
16000		}
16001	}
16002	return modulus.slice(polylen);
16003};
16004
16005// auguments ECC code words to given code words. the resulting words are
16006// ready to be encoded in the matrix.
16007//
16008// the much of actual augumenting procedure follows JIS X 0510:2004 sec 8.7.
16009// the code is simplified using the fact that the size of each code & ECC
16010// blocks is almost same; for example, when we have 4 blocks and 46 data words
16011// the number of code words in those blocks are 11, 11, 12, 12 respectively.
16012var augumenteccs = function (poly, nblocks, genpoly) {
16013	var subsizes = [];
16014	var subsize = (poly.length / nblocks) | 0, subsize0 = 0;
16015	var pivot = nblocks - poly.length % nblocks;
16016	for (var i = 0; i < pivot; ++i) {
16017		subsizes.push(subsize0);
16018		subsize0 += subsize;
16019	}
16020	for (var i = pivot; i < nblocks; ++i) {
16021		subsizes.push(subsize0);
16022		subsize0 += subsize + 1;
16023	}
16024	subsizes.push(subsize0);
16025
16026	var eccs = [];
16027	for (var i = 0; i < nblocks; ++i) {
16028		eccs.push(calculateecc(poly.slice(subsizes[i], subsizes[i + 1]), genpoly));
16029	}
16030
16031	var result = [];
16032	var nitemsperblock = (poly.length / nblocks) | 0;
16033	for (var i = 0; i < nitemsperblock; ++i) {
16034		for (var j = 0; j < nblocks; ++j) {
16035			result.push(poly[subsizes[j] + i]);
16036		}
16037	}
16038	for (var j = pivot; j < nblocks; ++j) {
16039		result.push(poly[subsizes[j + 1] - 1]);
16040	}
16041	for (var i = 0; i < genpoly.length; ++i) {
16042		for (var j = 0; j < nblocks; ++j) {
16043			result.push(eccs[j][i]);
16044		}
16045	}
16046	return result;
16047};
16048
16049// auguments BCH(p+q,q) code to the polynomial over GF(2), given the proper
16050// genpoly. the both input and output are in binary numbers, and unlike
16051// calculateecc genpoly should include the 1 bit for the highest degree.
16052//
16053// actual polynomials used for this procedure are as follows:
16054// - p=10, q=5, genpoly=x^10+x^8+x^5+x^4+x^2+x+1 (JIS X 0510:2004 Appendix C)
16055// - p=18, q=6, genpoly=x^12+x^11+x^10+x^9+x^8+x^5+x^2+1 (ibid. Appendix D)
16056var augumentbch = function (poly, p, genpoly, q) {
16057	var modulus = poly << q;
16058	for (var i = p - 1; i >= 0; --i) {
16059		if ((modulus >> (q + i)) & 1)
16060			modulus ^= genpoly << i;
16061	}
16062	return (poly << q) | modulus;
16063};
16064
16065// creates the base matrix for given version. it returns two matrices, one of
16066// them is the actual one and the another represents the "reserved" portion
16067// (e.g. finder and timing patterns) of the matrix.
16068//
16069// some entries in the matrix may be undefined, rather than 0 or 1. this is
16070// intentional (no initialization needed!), and putdata below will fill
16071// the remaining ones.
16072var makebasematrix = function (ver) {
16073	var v = VERSIONS[ver], n = getsizebyver(ver);
16074	var matrix = [], reserved = [];
16075	for (var i = 0; i < n; ++i) {
16076		matrix.push([]);
16077		reserved.push([]);
16078	}
16079
16080	var blit = function (y, x, h, w, bits) {
16081		for (var i = 0; i < h; ++i) {
16082			for (var j = 0; j < w; ++j) {
16083				matrix[y + i][x + j] = (bits[i] >> j) & 1;
16084				reserved[y + i][x + j] = 1;
16085			}
16086		}
16087	};
16088
16089	// finder patterns and a part of timing patterns
16090	// will also mark the format information area (not yet written) as reserved.
16091	blit(0, 0, 9, 9, [0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x17f, 0x00, 0x40]);
16092	blit(n - 8, 0, 8, 9, [0x100, 0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x7f]);
16093	blit(0, n - 8, 9, 8, [0xfe, 0x82, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00]);
16094
16095	// the rest of timing patterns
16096	for (var i = 9; i < n - 8; ++i) {
16097		matrix[6][i] = matrix[i][6] = ~i & 1;
16098		reserved[6][i] = reserved[i][6] = 1;
16099	}
16100
16101	// alignment patterns
16102	var aligns = v[2], m = aligns.length;
16103	for (var i = 0; i < m; ++i) {
16104		var minj = (i === 0 || i === m - 1 ? 1 : 0), maxj = (i === 0 ? m - 1 : m);
16105		for (var j = minj; j < maxj; ++j) {
16106			blit(aligns[i], aligns[j], 5, 5, [0x1f, 0x11, 0x15, 0x11, 0x1f]);
16107		}
16108	}
16109
16110	// version information
16111	if (needsverinfo(ver)) {
16112		var code = augumentbch(ver, 6, 0x1f25, 12);
16113		var k = 0;
16114		for (var i = 0; i < 6; ++i) {
16115			for (var j = 0; j < 3; ++j) {
16116				matrix[i][(n - 11) + j] = matrix[(n - 11) + j][i] = (code >> k++) & 1;
16117				reserved[i][(n - 11) + j] = reserved[(n - 11) + j][i] = 1;
16118			}
16119		}
16120	}
16121
16122	return {matrix: matrix, reserved: reserved};
16123};
16124
16125// fills the data portion (i.e. unmarked in reserved) of the matrix with given
16126// code words. the size of code words should be no more than available bits,
16127// and remaining bits are padded to 0 (cf. JIS X 0510:2004 sec 8.7.3).
16128var putdata = function (matrix, reserved, buf) {
16129	var n = matrix.length;
16130	var k = 0, dir = -1;
16131	for (var i = n - 1; i >= 0; i -= 2) {
16132		if (i == 6)
16133			--i; // skip the entire timing pattern column
16134		var jj = (dir < 0 ? n - 1 : 0);
16135		for (var j = 0; j < n; ++j) {
16136			for (var ii = i; ii > i - 2; --ii) {
16137				if (!reserved[jj][ii]) {
16138					// may overflow, but (undefined >> x)
16139					// is 0 so it will auto-pad to zero.
16140					matrix[jj][ii] = (buf[k >> 3] >> (~k & 7)) & 1;
16141					++k;
16142				}
16143			}
16144			jj += dir;
16145		}
16146		dir = -dir;
16147	}
16148	return matrix;
16149};
16150
16151// XOR-masks the data portion of the matrix. repeating the call with the same
16152// arguments will revert the prior call (convenient in the matrix evaluation).
16153var maskdata = function (matrix, reserved, mask) {
16154	var maskf = MASKFUNCS[mask];
16155	var n = matrix.length;
16156	for (var i = 0; i < n; ++i) {
16157		for (var j = 0; j < n; ++j) {
16158			if (!reserved[i][j])
16159				matrix[i][j] ^= maskf(i, j);
16160		}
16161	}
16162	return matrix;
16163};
16164
16165// puts the format information.
16166var putformatinfo = function (matrix, reserved, ecclevel, mask) {
16167	var n = matrix.length;
16168	var code = augumentbch((ecclevel << 3) | mask, 5, 0x537, 10) ^ 0x5412;
16169	for (var i = 0; i < 15; ++i) {
16170		var r = [0, 1, 2, 3, 4, 5, 7, 8, n - 7, n - 6, n - 5, n - 4, n - 3, n - 2, n - 1][i];
16171		var c = [n - 1, n - 2, n - 3, n - 4, n - 5, n - 6, n - 7, n - 8, 7, 5, 4, 3, 2, 1, 0][i];
16172		matrix[r][8] = matrix[8][c] = (code >> i) & 1;
16173		// we don't have to mark those bits reserved; always done
16174		// in makebasematrix above.
16175	}
16176	return matrix;
16177};
16178
16179// evaluates the resulting matrix and returns the score (lower is better).
16180// (cf. JIS X 0510:2004 sec 8.8.2)
16181//
16182// the evaluation procedure tries to avoid the problematic patterns naturally
16183// occuring from the original matrix. for example, it penaltizes the patterns
16184// which just look like the finder pattern which will confuse the decoder.
16185// we choose the mask which results in the lowest score among 8 possible ones.
16186//
16187// note: zxing seems to use the same procedure and in many cases its choice
16188// agrees to ours, but sometimes it does not. practically it doesn't matter.
16189var evaluatematrix = function (matrix) {
16190	// N1+(k-5) points for each consecutive row of k same-colored modules,
16191	// where k >= 5. no overlapping row counts.
16192	var PENALTY_CONSECUTIVE = 3;
16193	// N2 points for each 2x2 block of same-colored modules.
16194	// overlapping block does count.
16195	var PENALTY_TWOBYTWO = 3;
16196	// N3 points for each pattern with >4W:1B:1W:3B:1W:1B or
16197	// 1B:1W:3B:1W:1B:>4W, or their multiples (e.g. highly unlikely,
16198	// but 13W:3B:3W:9B:3W:3B counts).
16199	var PENALTY_FINDERLIKE = 40;
16200	// N4*k points for every (5*k)% deviation from 50% black density.
16201	// i.e. k=1 for 55~60% and 40~45%, k=2 for 60~65% and 35~40%, etc.
16202	var PENALTY_DENSITY = 10;
16203
16204	var evaluategroup = function (groups) { // assumes [W,B,W,B,W,...,B,W]
16205		var score = 0;
16206		for (var i = 0; i < groups.length; ++i) {
16207			if (groups[i] >= 5)
16208				score += PENALTY_CONSECUTIVE + (groups[i] - 5);
16209		}
16210		for (var i = 5; i < groups.length; i += 2) {
16211			var p = groups[i];
16212			if (groups[i - 1] == p && groups[i - 2] == 3 * p && groups[i - 3] == p &&
16213				groups[i - 4] == p && (groups[i - 5] >= 4 * p || groups[i + 1] >= 4 * p)) {
16214				// this part differs from zxing...
16215				score += PENALTY_FINDERLIKE;
16216			}
16217		}
16218		return score;
16219	};
16220
16221	var n = matrix.length;
16222	var score = 0, nblacks = 0;
16223	for (var i = 0; i < n; ++i) {
16224		var row = matrix[i];
16225		var groups;
16226
16227		// evaluate the current row
16228		groups = [0]; // the first empty group of white
16229		for (var j = 0; j < n; ) {
16230			var k;
16231			for (k = 0; j < n && row[j]; ++k)
16232				++j;
16233			groups.push(k);
16234			for (k = 0; j < n && !row[j]; ++k)
16235				++j;
16236			groups.push(k);
16237		}
16238		score += evaluategroup(groups);
16239
16240		// evaluate the current column
16241		groups = [0];
16242		for (var j = 0; j < n; ) {
16243			var k;
16244			for (k = 0; j < n && matrix[j][i]; ++k)
16245				++j;
16246			groups.push(k);
16247			for (k = 0; j < n && !matrix[j][i]; ++k)
16248				++j;
16249			groups.push(k);
16250		}
16251		score += evaluategroup(groups);
16252
16253		// check the 2x2 box and calculate the density
16254		var nextrow = matrix[i + 1] || [];
16255		nblacks += row[0];
16256		for (var j = 1; j < n; ++j) {
16257			var p = row[j];
16258			nblacks += p;
16259			// at least comparison with next row should be strict...
16260			if (row[j - 1] == p && nextrow[j] === p && nextrow[j - 1] === p) {
16261				score += PENALTY_TWOBYTWO;
16262			}
16263		}
16264	}
16265
16266	score += PENALTY_DENSITY * ((Math.abs(nblacks / n / n - 0.5) / 0.05) | 0);
16267	return score;
16268};
16269
16270// returns the fully encoded QR code matrix which contains given data.
16271// it also chooses the best mask automatically when mask is -1.
16272var generate = function (data, ver, mode, ecclevel, mask) {
16273	var v = VERSIONS[ver];
16274	var buf = encode(ver, mode, data, ndatabits(ver, ecclevel) >> 3);
16275	buf = augumenteccs(buf, v[1][ecclevel], GF256_GENPOLY[v[0][ecclevel]]);
16276
16277	var result = makebasematrix(ver);
16278	var matrix = result.matrix, reserved = result.reserved;
16279	putdata(matrix, reserved, buf);
16280
16281	if (mask < 0) {
16282		// find the best mask
16283		maskdata(matrix, reserved, 0);
16284		putformatinfo(matrix, reserved, ecclevel, 0);
16285		var bestmask = 0, bestscore = evaluatematrix(matrix);
16286		maskdata(matrix, reserved, 0);
16287		for (mask = 1; mask < 8; ++mask) {
16288			maskdata(matrix, reserved, mask);
16289			putformatinfo(matrix, reserved, ecclevel, mask);
16290			var score = evaluatematrix(matrix);
16291			if (bestscore > score) {
16292				bestscore = score;
16293				bestmask = mask;
16294			}
16295			maskdata(matrix, reserved, mask);
16296		}
16297		mask = bestmask;
16298	}
16299
16300	maskdata(matrix, reserved, mask);
16301	putformatinfo(matrix, reserved, ecclevel, mask);
16302	return matrix;
16303};
16304
16305// the public interface is trivial; the options available are as follows:
16306//
16307// - version: an integer in [1,40]. when omitted (or -1) the smallest possible
16308//   version is chosen.
16309// - mode: one of 'numeric', 'alphanumeric', 'octet'. when omitted the smallest
16310//   possible mode is chosen.
16311// - eccLevel: one of 'L', 'M', 'Q', 'H'. defaults to 'L'.
16312// - mask: an integer in [0,7]. when omitted (or -1) the best mask is chosen.
16313//
16314
16315function generateFrame(data, options) {
16316	var MODES = {'numeric': MODE_NUMERIC, 'alphanumeric': MODE_ALPHANUMERIC,
16317		'octet': MODE_OCTET};
16318	var ECCLEVELS = {'L': ECCLEVEL_L, 'M': ECCLEVEL_M, 'Q': ECCLEVEL_Q,
16319		'H': ECCLEVEL_H};
16320
16321	options = options || {};
16322	var ver = options.version || -1;
16323	var ecclevel = ECCLEVELS[(options.eccLevel || 'L').toUpperCase()];
16324	var mode = options.mode ? MODES[options.mode.toLowerCase()] : -1;
16325	var mask = 'mask' in options ? options.mask : -1;
16326
16327	if (mode < 0) {
16328		if (typeof data === 'string') {
16329			if (data.match(NUMERIC_REGEXP)) {
16330				mode = MODE_NUMERIC;
16331			} else if (data.match(ALPHANUMERIC_OUT_REGEXP)) {
16332				// while encode supports case-insensitive encoding, we restrict the data to be uppercased when auto-selecting the mode.
16333				mode = MODE_ALPHANUMERIC;
16334			} else {
16335				mode = MODE_OCTET;
16336			}
16337		} else {
16338			mode = MODE_OCTET;
16339		}
16340	} else if (!(mode == MODE_NUMERIC || mode == MODE_ALPHANUMERIC ||
16341		mode == MODE_OCTET)) {
16342		throw 'invalid or unsupported mode';
16343	}
16344
16345	data = validatedata(mode, data);
16346	if (data === null)
16347		throw 'invalid data format';
16348
16349	if (ecclevel < 0 || ecclevel > 3)
16350		throw 'invalid ECC level';
16351
16352	if (ver < 0) {
16353		for (ver = 1; ver <= 40; ++ver) {
16354			if (data.length <= getmaxdatalen(ver, mode, ecclevel))
16355				break;
16356		}
16357		if (ver > 40)
16358			throw 'too large data for the Qr format';
16359	} else if (ver < 1 || ver > 40) {
16360		throw 'invalid Qr version! should be between 1 and 40';
16361	}
16362
16363	if (mask != -1 && (mask < 0 || mask > 8))
16364		throw 'invalid mask';
16365	//console.log('version:', ver, 'mode:', mode, 'ECC:', ecclevel, 'mask:', mask )
16366	return generate(data, ver, mode, ecclevel, mask);
16367}
16368
16369
16370// options
16371// - modulesize: a number. this is a size of each modules in pixels, and
16372//   defaults to 5px.
16373// - margin: a number. this is a size of margin in *modules*, and defaults to
16374//   4 (white modules). the specficiation mandates the margin no less than 4
16375//   modules, so it is better not to alter this value unless you know what
16376//   you're doing.
16377function buildCanvas(data, options) {
16378
16379	var canvas = [];
16380	var background = options.background || '#fff';
16381	var foreground = options.foreground || '#000';
16382	//var margin = options.margin || 4;
16383	var matrix = generateFrame(data, options);
16384	var n = matrix.length;
16385	var modSize = Math.floor(options.fit ? options.fit / n : 5);
16386	var size = n * modSize;
16387
16388	canvas.push({
16389		type: 'rect',
16390		x: 0, y: 0, w: size, h: size, lineWidth: 0, color: background
16391	});
16392
16393	for (var i = 0; i < n; ++i) {
16394		for (var j = 0; j < n; ++j) {
16395			if (matrix[i][j]) {
16396				canvas.push({
16397					type: 'rect',
16398					x: modSize * j,
16399					y: modSize * i,
16400					w: modSize,
16401					h: modSize,
16402					lineWidth: 0,
16403					color: foreground
16404				});
16405			}
16406		}
16407	}
16408
16409	return {
16410		canvas: canvas,
16411		size: size
16412	};
16413
16414}
16415
16416function measure(node) {
16417	var cd = buildCanvas(node.qr, node);
16418	node._canvas = cd.canvas;
16419	node._width = node._height = node._minWidth = node._maxWidth = node._minHeight = node._maxHeight = cd.size;
16420	return node;
16421}
16422
16423module.exports = {
16424	measure: measure
16425};
16426
16427/***/ }),
16428/* 135 */
16429/***/ (function(module, exports, __webpack_require__) {
16430
16431"use strict";
16432
16433
16434var ElementWriter = __webpack_require__(136);
16435
16436/**
16437 * Creates an instance of PageElementWriter - an extended ElementWriter
16438 * which can handle:
16439 * - page-breaks (it adds new pages when there's not enough space left),
16440 * - repeatable fragments (like table-headers, which are repeated everytime
16441 *                         a page-break occurs)
16442 * - transactions (used for unbreakable-blocks when we want to make sure
16443 *                 whole block will be rendered on the same page)
16444 */
16445function PageElementWriter(context, tracker) {
16446	this.transactionLevel = 0;
16447	this.repeatables = [];
16448	this.tracker = tracker;
16449	this.writer = new ElementWriter(context, tracker);
16450}
16451
16452function fitOnPage(self, addFct) {
16453	var position = addFct(self);
16454	if (!position) {
16455		self.moveToNextPage();
16456		position = addFct(self);
16457	}
16458	return position;
16459}
16460
16461PageElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) {
16462	return fitOnPage(this, function (self) {
16463		return self.writer.addLine(line, dontUpdateContextPosition, index);
16464	});
16465};
16466
16467PageElementWriter.prototype.addImage = function (image, index) {
16468	return fitOnPage(this, function (self) {
16469		return self.writer.addImage(image, index);
16470	});
16471};
16472
16473PageElementWriter.prototype.addQr = function (qr, index) {
16474	return fitOnPage(this, function (self) {
16475		return self.writer.addQr(qr, index);
16476	});
16477};
16478
16479PageElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {
16480	return this.writer.addVector(vector, ignoreContextX, ignoreContextY, index);
16481};
16482
16483PageElementWriter.prototype.beginClip = function (width, height) {
16484	return this.writer.beginClip(width, height);
16485};
16486
16487PageElementWriter.prototype.endClip = function () {
16488	return this.writer.endClip();
16489};
16490
16491PageElementWriter.prototype.alignCanvas = function (node) {
16492	this.writer.alignCanvas(node);
16493};
16494
16495PageElementWriter.prototype.addFragment = function (fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {
16496	if (!this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition)) {
16497		this.moveToNextPage();
16498		this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition);
16499	}
16500};
16501
16502PageElementWriter.prototype.moveToNextPage = function (pageOrientation) {
16503
16504	var nextPage = this.writer.context.moveToNextPage(pageOrientation);
16505
16506	if (nextPage.newPageCreated) {
16507		this.repeatables.forEach(function (rep) {
16508			this.writer.addFragment(rep, true);
16509		}, this);
16510	} else {
16511		this.repeatables.forEach(function (rep) {
16512			this.writer.context.moveDown(rep.height);
16513		}, this);
16514	}
16515
16516	this.writer.tracker.emit('pageChanged', {
16517		prevPage: nextPage.prevPage,
16518		prevY: nextPage.prevY,
16519		y: nextPage.y
16520	});
16521};
16522
16523PageElementWriter.prototype.beginUnbreakableBlock = function (width, height) {
16524	if (this.transactionLevel++ === 0) {
16525		this.originalX = this.writer.context.x;
16526		this.writer.pushContext(width, height);
16527	}
16528};
16529
16530PageElementWriter.prototype.commitUnbreakableBlock = function (forcedX, forcedY) {
16531	if (--this.transactionLevel === 0) {
16532		var unbreakableContext = this.writer.context;
16533		this.writer.popContext();
16534
16535		var nbPages = unbreakableContext.pages.length;
16536		if (nbPages > 0) {
16537			// no support for multi-page unbreakableBlocks
16538			var fragment = unbreakableContext.pages[0];
16539			fragment.xOffset = forcedX;
16540			fragment.yOffset = forcedY;
16541
16542			//TODO: vectors can influence height in some situations
16543			if (nbPages > 1) {
16544				// on out-of-context blocs (headers, footers, background) height should be the whole DocumentContext height
16545				if (forcedX !== undefined || forcedY !== undefined) {
16546					fragment.height = unbreakableContext.getCurrentPage().pageSize.height - unbreakableContext.pageMargins.top - unbreakableContext.pageMargins.bottom;
16547				} else {
16548					fragment.height = this.writer.context.getCurrentPage().pageSize.height - this.writer.context.pageMargins.top - this.writer.context.pageMargins.bottom;
16549					for (var i = 0, l = this.repeatables.length; i < l; i++) {
16550						fragment.height -= this.repeatables[i].height;
16551					}
16552				}
16553			} else {
16554				fragment.height = unbreakableContext.y;
16555			}
16556
16557			if (forcedX !== undefined || forcedY !== undefined) {
16558				this.writer.addFragment(fragment, true, true, true);
16559			} else {
16560				this.addFragment(fragment);
16561			}
16562		}
16563	}
16564};
16565
16566PageElementWriter.prototype.currentBlockToRepeatable = function () {
16567	var unbreakableContext = this.writer.context;
16568	var rep = {items: []};
16569
16570	unbreakableContext.pages[0].items.forEach(function (item) {
16571		rep.items.push(item);
16572	});
16573
16574	rep.xOffset = this.originalX;
16575
16576	//TODO: vectors can influence height in some situations
16577	rep.height = unbreakableContext.y;
16578
16579	return rep;
16580};
16581
16582PageElementWriter.prototype.pushToRepeatables = function (rep) {
16583	this.repeatables.push(rep);
16584};
16585
16586PageElementWriter.prototype.popFromRepeatables = function () {
16587	this.repeatables.pop();
16588};
16589
16590PageElementWriter.prototype.context = function () {
16591	return this.writer.context;
16592};
16593
16594module.exports = PageElementWriter;
16595
16596
16597/***/ }),
16598/* 136 */
16599/***/ (function(module, exports, __webpack_require__) {
16600
16601"use strict";
16602
16603
16604var Line = __webpack_require__(82);
16605var isNumber = __webpack_require__(0).isNumber;
16606var pack = __webpack_require__(0).pack;
16607var offsetVector = __webpack_require__(0).offsetVector;
16608var DocumentContext = __webpack_require__(81);
16609
16610/**
16611 * Creates an instance of ElementWriter - a line/vector writer, which adds
16612 * elements to current page and sets their positions based on the context
16613 */
16614function ElementWriter(context, tracker) {
16615	this.context = context;
16616	this.contextStack = [];
16617	this.tracker = tracker;
16618}
16619
16620function addPageItem(page, item, index) {
16621	if (index === null || index === undefined || index < 0 || index > page.items.length) {
16622		page.items.push(item);
16623	} else {
16624		page.items.splice(index, 0, item);
16625	}
16626}
16627
16628ElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) {
16629	var height = line.getHeight();
16630	var context = this.context;
16631	var page = context.getCurrentPage(),
16632		position = this.getCurrentPositionOnPage();
16633
16634	if (context.availableHeight < height || !page) {
16635		return false;
16636	}
16637
16638	line.x = context.x + (line.x || 0);
16639	line.y = context.y + (line.y || 0);
16640
16641	this.alignLine(line);
16642
16643	addPageItem(page, {
16644		type: 'line',
16645		item: line
16646	}, index);
16647	this.tracker.emit('lineAdded', line);
16648
16649	if (!dontUpdateContextPosition) {
16650		context.moveDown(height);
16651	}
16652
16653	return position;
16654};
16655
16656ElementWriter.prototype.alignLine = function (line) {
16657	var width = this.context.availableWidth;
16658	var lineWidth = line.getWidth();
16659
16660	var alignment = line.inlines && line.inlines.length > 0 && line.inlines[0].alignment;
16661
16662	var offset = 0;
16663	switch (alignment) {
16664		case 'right':
16665			offset = width - lineWidth;
16666			break;
16667		case 'center':
16668			offset = (width - lineWidth) / 2;
16669			break;
16670	}
16671
16672	if (offset) {
16673		line.x = (line.x || 0) + offset;
16674	}
16675
16676	if (alignment === 'justify' &&
16677		!line.newLineForced &&
16678		!line.lastLineInParagraph &&
16679		line.inlines.length > 1) {
16680		var additionalSpacing = (width - lineWidth) / (line.inlines.length - 1);
16681
16682		for (var i = 1, l = line.inlines.length; i < l; i++) {
16683			offset = i * additionalSpacing;
16684
16685			line.inlines[i].x += offset;
16686			line.inlines[i].justifyShift = additionalSpacing;
16687		}
16688	}
16689};
16690
16691ElementWriter.prototype.addImage = function (image, index) {
16692	var context = this.context;
16693	var page = context.getCurrentPage(),
16694		position = this.getCurrentPositionOnPage();
16695
16696	if (!page || (image.absolutePosition === undefined && context.availableHeight < image._height && page.items.length > 0)) {
16697		return false;
16698	}
16699
16700	if (image._x === undefined) {
16701		image._x = image.x || 0;
16702	}
16703
16704	image.x = context.x + image._x;
16705	image.y = context.y;
16706
16707	this.alignImage(image);
16708
16709	addPageItem(page, {
16710		type: 'image',
16711		item: image
16712	}, index);
16713
16714	context.moveDown(image._height);
16715
16716	return position;
16717};
16718
16719ElementWriter.prototype.addQr = function (qr, index) {
16720	var context = this.context;
16721	var page = context.getCurrentPage(),
16722		position = this.getCurrentPositionOnPage();
16723
16724	if (!page || (qr.absolutePosition === undefined && context.availableHeight < qr._height)) {
16725		return false;
16726	}
16727
16728	if (qr._x === undefined) {
16729		qr._x = qr.x || 0;
16730	}
16731
16732	qr.x = context.x + qr._x;
16733	qr.y = context.y;
16734
16735	this.alignImage(qr);
16736
16737	for (var i = 0, l = qr._canvas.length; i < l; i++) {
16738		var vector = qr._canvas[i];
16739		vector.x += qr.x;
16740		vector.y += qr.y;
16741		this.addVector(vector, true, true, index);
16742	}
16743
16744	context.moveDown(qr._height);
16745
16746	return position;
16747};
16748
16749ElementWriter.prototype.alignImage = function (image) {
16750	var width = this.context.availableWidth;
16751	var imageWidth = image._minWidth;
16752	var offset = 0;
16753	switch (image._alignment) {
16754		case 'right':
16755			offset = width - imageWidth;
16756			break;
16757		case 'center':
16758			offset = (width - imageWidth) / 2;
16759			break;
16760	}
16761
16762	if (offset) {
16763		image.x = (image.x || 0) + offset;
16764	}
16765};
16766
16767ElementWriter.prototype.alignCanvas = function (node) {
16768	var width = this.context.availableWidth;
16769	var canvasWidth = node._minWidth;
16770	var offset = 0;
16771	switch (node._alignment) {
16772		case 'right':
16773			offset = width - canvasWidth;
16774			break;
16775		case 'center':
16776			offset = (width - canvasWidth) / 2;
16777			break;
16778	}
16779	if (offset) {
16780		node.canvas.forEach(function (vector) {
16781			offsetVector(vector, offset, 0);
16782		});
16783	}
16784};
16785
16786ElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {
16787	var context = this.context;
16788	var page = context.getCurrentPage(),
16789		position = this.getCurrentPositionOnPage();
16790
16791	if (page) {
16792		offsetVector(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y);
16793		addPageItem(page, {
16794			type: 'vector',
16795			item: vector
16796		}, index);
16797		return position;
16798	}
16799};
16800
16801ElementWriter.prototype.beginClip = function (width, height) {
16802	var ctx = this.context;
16803	var page = ctx.getCurrentPage();
16804	page.items.push({
16805		type: 'beginClip',
16806		item: {x: ctx.x, y: ctx.y, width: width, height: height}
16807	});
16808	return true;
16809};
16810
16811ElementWriter.prototype.endClip = function () {
16812	var ctx = this.context;
16813	var page = ctx.getCurrentPage();
16814	page.items.push({
16815		type: 'endClip'
16816	});
16817	return true;
16818};
16819
16820function cloneLine(line) {
16821	var result = new Line(line.maxWidth);
16822
16823	for (var key in line) {
16824		if (line.hasOwnProperty(key)) {
16825			result[key] = line[key];
16826		}
16827	}
16828
16829	return result;
16830}
16831
16832ElementWriter.prototype.addFragment = function (block, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {
16833	var ctx = this.context;
16834	var page = ctx.getCurrentPage();
16835
16836	if (!useBlockXOffset && block.height > ctx.availableHeight) {
16837		return false;
16838	}
16839
16840	block.items.forEach(function (item) {
16841		switch (item.type) {
16842			case 'line':
16843				var l = cloneLine(item.item);
16844
16845				l.x = (l.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);
16846				l.y = (l.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);
16847
16848				page.items.push({
16849					type: 'line',
16850					item: l
16851				});
16852				break;
16853
16854			case 'vector':
16855				var v = pack(item.item);
16856
16857				offsetVector(v, useBlockXOffset ? (block.xOffset || 0) : ctx.x, useBlockYOffset ? (block.yOffset || 0) : ctx.y);
16858				page.items.push({
16859					type: 'vector',
16860					item: v
16861				});
16862				break;
16863
16864			case 'image':
16865				var img = pack(item.item);
16866
16867				img.x = (img.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);
16868				img.y = (img.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);
16869
16870				page.items.push({
16871					type: 'image',
16872					item: img
16873				});
16874				break;
16875		}
16876	});
16877
16878	if (!dontUpdateContextPosition) {
16879		ctx.moveDown(block.height);
16880	}
16881
16882	return true;
16883};
16884
16885/**
16886 * Pushes the provided context onto the stack or creates a new one
16887 *
16888 * pushContext(context) - pushes the provided context and makes it current
16889 * pushContext(width, height) - creates and pushes a new context with the specified width and height
16890 * pushContext() - creates a new context for unbreakable blocks (with current availableWidth and full-page-height)
16891 */
16892ElementWriter.prototype.pushContext = function (contextOrWidth, height) {
16893	if (contextOrWidth === undefined) {
16894		height = this.context.getCurrentPage().height - this.context.pageMargins.top - this.context.pageMargins.bottom;
16895		contextOrWidth = this.context.availableWidth;
16896	}
16897
16898	if (isNumber(contextOrWidth)) {
16899		contextOrWidth = new DocumentContext({width: contextOrWidth, height: height}, {left: 0, right: 0, top: 0, bottom: 0});
16900	}
16901
16902	this.contextStack.push(this.context);
16903	this.context = contextOrWidth;
16904};
16905
16906ElementWriter.prototype.popContext = function () {
16907	this.context = this.contextStack.pop();
16908};
16909
16910ElementWriter.prototype.getCurrentPositionOnPage = function () {
16911	return (this.contextStack[0] || this.context).getCurrentPosition();
16912};
16913
16914
16915module.exports = ElementWriter;
16916
16917
16918/***/ }),
16919/* 137 */
16920/***/ (function(module, exports, __webpack_require__) {
16921
16922"use strict";
16923
16924
16925var ColumnCalculator = __webpack_require__(44);
16926var isFunction = __webpack_require__(0).isFunction;
16927
16928function TableProcessor(tableNode) {
16929	this.tableNode = tableNode;
16930}
16931
16932TableProcessor.prototype.beginTable = function (writer) {
16933	var tableNode;
16934	var availableWidth;
16935	var self = this;
16936
16937	tableNode = this.tableNode;
16938	this.offsets = tableNode._offsets;
16939	this.layout = tableNode._layout;
16940
16941	availableWidth = writer.context().availableWidth - this.offsets.total;
16942	ColumnCalculator.buildColumnWidths(tableNode.table.widths, availableWidth);
16943
16944	this.tableWidth = tableNode._offsets.total + getTableInnerContentWidth();
16945	this.rowSpanData = prepareRowSpanData();
16946	this.cleanUpRepeatables = false;
16947
16948	this.headerRows = tableNode.table.headerRows || 0;
16949	this.rowsWithoutPageBreak = this.headerRows + (tableNode.table.keepWithHeaderRows || 0);
16950	this.dontBreakRows = tableNode.table.dontBreakRows || false;
16951
16952	if (this.rowsWithoutPageBreak) {
16953		writer.beginUnbreakableBlock();
16954	}
16955
16956	// update the border properties of all cells before drawing any lines
16957	prepareCellBorders(this.tableNode.table.body);
16958
16959	this.drawHorizontalLine(0, writer);
16960
16961	function getTableInnerContentWidth() {
16962		var width = 0;
16963
16964		tableNode.table.widths.forEach(function (w) {
16965			width += w._calcWidth;
16966		});
16967
16968		return width;
16969	}
16970
16971	function prepareRowSpanData() {
16972		var rsd = [];
16973		var x = 0;
16974		var lastWidth = 0;
16975
16976		rsd.push({left: 0, rowSpan: 0});
16977
16978		for (var i = 0, l = self.tableNode.table.body[0].length; i < l; i++) {
16979			var paddings = self.layout.paddingLeft(i, self.tableNode) + self.layout.paddingRight(i, self.tableNode);
16980			var lBorder = self.layout.vLineWidth(i, self.tableNode);
16981			lastWidth = paddings + lBorder + self.tableNode.table.widths[i]._calcWidth;
16982			rsd[rsd.length - 1].width = lastWidth;
16983			x += lastWidth;
16984			rsd.push({left: x, rowSpan: 0, width: 0});
16985		}
16986
16987		return rsd;
16988	}
16989
16990	// Iterate through all cells. If the current cell is the start of a
16991	// rowSpan/colSpan, update the border property of the cells on its
16992	// bottom/right accordingly. This is needed since each iteration of the
16993	// line-drawing loops draws lines for a single cell, not for an entire
16994	// rowSpan/colSpan.
16995	function prepareCellBorders(body) {
16996		for (var rowIndex = 0; rowIndex < body.length; rowIndex++) {
16997			var row = body[rowIndex];
16998
16999			for (var colIndex = 0; colIndex < row.length; colIndex++) {
17000				var cell = row[colIndex];
17001
17002				if (cell.border) {
17003					var rowSpan = cell.rowSpan || 1;
17004					var colSpan = cell.colSpan || 1;
17005
17006					for (var rowOffset = 0; rowOffset < rowSpan; rowOffset++) {
17007						// set left border
17008						if (cell.border[0] !== undefined && rowOffset > 0) {
17009							setBorder(rowIndex + rowOffset, colIndex, 0, cell.border[0]);
17010						}
17011
17012						// set right border
17013						if (cell.border[2] !== undefined) {
17014							setBorder(rowIndex + rowOffset, colIndex + colSpan - 1, 2, cell.border[2]);
17015						}
17016					}
17017
17018					for (var colOffset = 0; colOffset < colSpan; colOffset++) {
17019						// set top border
17020						if (cell.border[1] !== undefined && colOffset > 0) {
17021							setBorder(rowIndex, colIndex + colOffset, 1, cell.border[1]);
17022						}
17023
17024						// set bottom border
17025						if (cell.border[3] !== undefined) {
17026							setBorder(rowIndex + rowSpan - 1, colIndex + colOffset, 3, cell.border[3]);
17027						}
17028					}
17029				}
17030			}
17031		}
17032
17033		// helper function to set the border for a given cell
17034		function setBorder(rowIndex, colIndex, borderIndex, borderValue) {
17035			var cell = body[rowIndex][colIndex];
17036			cell.border = cell.border || {};
17037			cell.border[borderIndex] = borderValue;
17038		}
17039	}
17040};
17041
17042TableProcessor.prototype.onRowBreak = function (rowIndex, writer) {
17043	var self = this;
17044	return function () {
17045		var offset = self.rowPaddingTop + (!self.headerRows ? self.topLineWidth : 0);
17046		writer.context().availableHeight -= self.reservedAtBottom;
17047		writer.context().moveDown(offset);
17048	};
17049};
17050
17051TableProcessor.prototype.beginRow = function (rowIndex, writer) {
17052	this.topLineWidth = this.layout.hLineWidth(rowIndex, this.tableNode);
17053	this.rowPaddingTop = this.layout.paddingTop(rowIndex, this.tableNode);
17054	this.bottomLineWidth = this.layout.hLineWidth(rowIndex + 1, this.tableNode);
17055	this.rowPaddingBottom = this.layout.paddingBottom(rowIndex, this.tableNode);
17056
17057	this.rowCallback = this.onRowBreak(rowIndex, writer);
17058	writer.tracker.startTracking('pageChanged', this.rowCallback);
17059	if (this.dontBreakRows) {
17060		writer.beginUnbreakableBlock();
17061	}
17062	this.rowTopY = writer.context().y;
17063	this.reservedAtBottom = this.bottomLineWidth + this.rowPaddingBottom;
17064
17065	writer.context().availableHeight -= this.reservedAtBottom;
17066
17067	writer.context().moveDown(this.rowPaddingTop);
17068};
17069
17070TableProcessor.prototype.drawHorizontalLine = function (lineIndex, writer, overrideY) {
17071	var lineWidth = this.layout.hLineWidth(lineIndex, this.tableNode);
17072	if (lineWidth) {
17073		var offset = lineWidth / 2;
17074		var currentLine = null;
17075		var body = this.tableNode.table.body;
17076
17077		for (var i = 0, l = this.rowSpanData.length; i < l; i++) {
17078			var data = this.rowSpanData[i];
17079			var shouldDrawLine = !data.rowSpan;
17080
17081			// draw only if the current cell requires a top border or the cell in the
17082			// row above requires a bottom border
17083			if (shouldDrawLine && i < l - 1) {
17084				var topBorder = false, bottomBorder = false;
17085
17086				// the current cell
17087				if (lineIndex < body.length) {
17088					var cell = body[lineIndex][i];
17089					topBorder = cell.border ? cell.border[1] : this.layout.defaultBorder;
17090				}
17091
17092				// the cell in the row above
17093				if (lineIndex > 0) {
17094					var cellAbove = body[lineIndex - 1][i];
17095					bottomBorder = cellAbove.border ? cellAbove.border[3] : this.layout.defaultBorder;
17096				}
17097
17098				shouldDrawLine = topBorder || bottomBorder;
17099			}
17100
17101			if (!currentLine && shouldDrawLine) {
17102				currentLine = {left: data.left, width: 0};
17103			}
17104
17105			if (shouldDrawLine) {
17106				currentLine.width += (data.width || 0);
17107			}
17108
17109			var y = (overrideY || 0) + offset;
17110
17111			if (!shouldDrawLine || i === l - 1) {
17112				if (currentLine && currentLine.width) {
17113					writer.addVector({
17114						type: 'line',
17115						x1: currentLine.left,
17116						x2: currentLine.left + currentLine.width,
17117						y1: y,
17118						y2: y,
17119						lineWidth: lineWidth,
17120						lineColor: isFunction(this.layout.hLineColor) ? this.layout.hLineColor(lineIndex, this.tableNode) : this.layout.hLineColor
17121					}, false, overrideY);
17122					currentLine = null;
17123				}
17124			}
17125		}
17126
17127		writer.context().moveDown(lineWidth);
17128	}
17129};
17130
17131TableProcessor.prototype.drawVerticalLine = function (x, y0, y1, vLineIndex, writer) {
17132	var width = this.layout.vLineWidth(vLineIndex, this.tableNode);
17133	if (width === 0) {
17134		return;
17135	}
17136	writer.addVector({
17137		type: 'line',
17138		x1: x + width / 2,
17139		x2: x + width / 2,
17140		y1: y0,
17141		y2: y1,
17142		lineWidth: width,
17143		lineColor: isFunction(this.layout.vLineColor) ? this.layout.vLineColor(vLineIndex, this.tableNode) : this.layout.vLineColor
17144	}, false, true);
17145};
17146
17147TableProcessor.prototype.endTable = function (writer) {
17148	if (this.cleanUpRepeatables) {
17149		writer.popFromRepeatables();
17150		this.headerRepeatableHeight = null;
17151	}
17152};
17153
17154TableProcessor.prototype.endRow = function (rowIndex, writer, pageBreaks) {
17155	var l, i;
17156	var self = this;
17157	writer.tracker.stopTracking('pageChanged', this.rowCallback);
17158	writer.context().moveDown(this.layout.paddingBottom(rowIndex, this.tableNode));
17159	writer.context().availableHeight += this.reservedAtBottom;
17160
17161	var endingPage = writer.context().page;
17162	var endingY = writer.context().y;
17163
17164	var xs = getLineXs();
17165
17166	var ys = [];
17167
17168	var hasBreaks = pageBreaks && pageBreaks.length > 0;
17169	var body = this.tableNode.table.body;
17170
17171	ys.push({
17172		y0: this.rowTopY,
17173		page: hasBreaks ? pageBreaks[0].prevPage : endingPage
17174	});
17175
17176	if (hasBreaks) {
17177		for (i = 0, l = pageBreaks.length; i < l; i++) {
17178			var pageBreak = pageBreaks[i];
17179			ys[ys.length - 1].y1 = pageBreak.prevY;
17180
17181			ys.push({y0: pageBreak.y, page: pageBreak.prevPage + 1});
17182
17183			if (this.headerRepeatableHeight) {
17184				ys[ys.length - 1].y0 += this.headerRepeatableHeight;
17185			}
17186		}
17187	}
17188
17189	ys[ys.length - 1].y1 = endingY;
17190
17191	var skipOrphanePadding = (ys[0].y1 - ys[0].y0 === this.rowPaddingTop);
17192	for (var yi = (skipOrphanePadding ? 1 : 0), yl = ys.length; yi < yl; yi++) {
17193		var willBreak = yi < ys.length - 1;
17194		var rowBreakWithoutHeader = (yi > 0 && !this.headerRows);
17195		var hzLineOffset = rowBreakWithoutHeader ? 0 : this.topLineWidth;
17196		var y1 = ys[yi].y0;
17197		var y2 = ys[yi].y1;
17198
17199		if (willBreak) {
17200			y2 = y2 + this.rowPaddingBottom;
17201		}
17202
17203		if (writer.context().page != ys[yi].page) {
17204			writer.context().page = ys[yi].page;
17205
17206			//TODO: buggy, availableHeight should be updated on every pageChanged event
17207			// TableProcessor should be pageChanged listener, instead of processRow
17208			this.reservedAtBottom = 0;
17209		}
17210
17211		for (i = 0, l = xs.length; i < l; i++) {
17212			var leftBorder = false, rightBorder = false;
17213			var colIndex = xs[i].index;
17214
17215			// the current cell
17216			if (colIndex < body[rowIndex].length) {
17217				var cell = body[rowIndex][colIndex];
17218				leftBorder = cell.border ? cell.border[0] : this.layout.defaultBorder;
17219			}
17220
17221			// the cell from before column
17222			if (colIndex > 0) {
17223				var cell = body[rowIndex][colIndex - 1];
17224				rightBorder = cell.border ? cell.border[2] : this.layout.defaultBorder;
17225			}
17226
17227			if (leftBorder || rightBorder) {
17228				this.drawVerticalLine(xs[i].x, y1 - hzLineOffset, y2 + this.bottomLineWidth, xs[i].index, writer);
17229			}
17230
17231			if (i < l - 1) {
17232				var fillColor = body[rowIndex][colIndex].fillColor;
17233				if (!fillColor) {
17234					fillColor = isFunction(this.layout.fillColor) ? this.layout.fillColor(rowIndex, this.tableNode, colIndex) : this.layout.fillColor;
17235				}
17236				if (fillColor) {
17237					var wBorder = (leftBorder || rightBorder) ? this.layout.vLineWidth(colIndex, this.tableNode) : 0;
17238					var xf = xs[i].x + wBorder;
17239					var yf = this.dontBreakRows ? y1 : y1 - hzLineOffset;
17240					writer.addVector({
17241						type: 'rect',
17242						x: xf,
17243						y: yf,
17244						w: xs[i + 1].x - xf,
17245						h: y2 + this.bottomLineWidth - yf,
17246						lineWidth: 0,
17247						color: fillColor
17248					}
17248, false, true, writer.context().hasBackground ? 1 : 0);
17249				}
17250			}
17251		}
17252
17253		if (willBreak && this.layout.hLineWhenBroken !== false) {
17254			this.drawHorizontalLine(rowIndex + 1, writer, y2);
17255		}
17256		if (rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {
17257			this.drawHorizontalLine(rowIndex, writer, y1);
17258		}
17259	}
17260
17261	writer.context().page = endingPage;
17262	writer.context().y = endingY;
17263
17264	var row = this.tableNode.table.body[rowIndex];
17265	for (i = 0, l = row.length; i < l; i++) {
17266		if (row[i].rowSpan) {
17267			this.rowSpanData[i].rowSpan = row[i].rowSpan;
17268
17269			// fix colSpans
17270			if (row[i].colSpan && row[i].colSpan > 1) {
17271				for (var j = 1; j < row[i].rowSpan; j++) {
17272					this.tableNode.table.body[rowIndex + j][i]._colSpan = row[i].colSpan;
17273				}
17274			}
17275		}
17276
17277		if (this.rowSpanData[i].rowSpan > 0) {
17278			this.rowSpanData[i].rowSpan--;
17279		}
17280	}
17281
17282	this.drawHorizontalLine(rowIndex + 1, writer);
17283
17284	if (this.headerRows && rowIndex === this.headerRows - 1) {
17285		this.headerRepeatable = writer.currentBlockToRepeatable();
17286	}
17287
17288	if (this.dontBreakRows) {
17289		writer.tracker.auto('pageChanged',
17290			function () {
17291				if (!self.headerRows && self.layout.hLineWhenBroken !== false) {
17292					self.drawHorizontalLine(rowIndex, writer);
17293				}
17294			},
17295			function () {
17296				writer.commitUnbreakableBlock();
17297			}
17298		);
17299	}
17300
17301	if (this.headerRepeatable && (rowIndex === (this.rowsWithoutPageBreak - 1) || rowIndex === this.tableNode.table.body.length - 1)) {
17302		this.headerRepeatableHeight = this.headerRepeatable.height;
17303		writer.commitUnbreakableBlock();
17304		writer.pushToRepeatables(this.headerRepeatable);
17305		this.cleanUpRepeatables = true;
17306		this.headerRepeatable = null;
17307	}
17308
17309	function getLineXs() {
17310		var result = [];
17311		var cols = 0;
17312
17313		for (var i = 0, l = self.tableNode.table.body[rowIndex].length; i < l; i++) {
17314			if (!cols) {
17315				result.push({x: self.rowSpanData[i].left, index: i});
17316
17317				var item = self.tableNode.table.body[rowIndex][i];
17318				cols = (item._colSpan || item.colSpan || 0);
17319			}
17320			if (cols > 0) {
17321				cols--;
17322			}
17323		}
17324
17325		result.push({x: self.rowSpanData[self.rowSpanData.length - 1].left, index: self.rowSpanData.length - 1});
17326
17327		return result;
17328	}
17329};
17330
17331module.exports = TableProcessor;
17332
17333
17334/***/ }),
17335/* 138 */
17336/***/ (function(module, exports, __webpack_require__) {
17337
17338/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.12.6
17339
17340/*
17341PDFDocument - represents an entire PDF document
17342By Devon Govett
17343 */
17344
17345(function() {
17346  var PDFDocument, PDFObject, PDFPage, PDFReference, fs, stream,
17347    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
17348    hasProp = {}.hasOwnProperty;
17349
17350  stream = __webpack_require__(15);
17351
17352  fs = __webpack_require__(8);
17353
17354  PDFObject = __webpack_require__(26);
17355
17356  PDFReference = __webpack_require__(87);
17357
17358  PDFPage = __webpack_require__(161);
17359
17360  PDFDocument = (function(superClass) {
17361    var mixin;
17362
17363    extend(PDFDocument, superClass);
17364
17365    function PDFDocument(options1) {
17366      var key, ref1, ref2, val;
17367      this.options = options1 != null ? options1 : {};
17368      PDFDocument.__super__.constructor.apply(this, arguments);
17369      this.version = 1.3;
17370      this.compress = (ref1 = this.options.compress) != null ? ref1 : true;
17371      this._pageBuffer = [];
17372      this._pageBufferStart = 0;
17373      this._offsets = [];
17374      this._waiting = 0;
17375      this._ended = false;
17376      this._offset = 0;
17377      this._root = this.ref({
17378        Type: 'Catalog',
17379        Pages: this.ref({
17380          Type: 'Pages',
17381          Count: 0,
17382          Kids: []
17383        })
17384      });
17385      this.page = null;
17386      this.initColor();
17387      this.initVector();
17388      this.initFonts();
17389      this.initText();
17390      this.initImages();
17391      this.info = {
17392        Producer: 'PDFKit',
17393        Creator: 'PDFKit',
17394        CreationDate: new Date()
17395      };
17396      if (this.options.info) {
17397        ref2 = this.options.info;
17398        for (key in ref2) {
17399          val = ref2[key];
17400          this.info[key] = val;
17401        }
17402      }
17403      this._write("%PDF-" + this.version);
17404      this._write("%\xFF\xFF\xFF\xFF");
17405      if (this.options.autoFirstPage !== false) {
17406        this.addPage();
17407      }
17408    }
17409
17410    mixin = function(methods) {
17411      var method, name, results;
17412      results = [];
17413      for (name in methods) {
17414        method = methods[name];
17415        results.push(PDFDocument.prototype[name] = method);
17416      }
17417      return results;
17418    };
17419
17420    mixin(__webpack_require__(162));
17421
17422    mixin(__webpack_require__(164));
17423
17424    mixin(__webpack_require__(166));
17425
17426    mixin(__webpack_require__(295));
17427
17428    mixin(__webpack_require__(297));
17429
17430    mixin(__webpack_require__(302));
17431
17432    PDFDocument.prototype.addPage = function(options) {
17433      var pages;
17434      if (options == null) {
17435        options = this.options;
17436      }
17437      if (!this.options.bufferPages) {
17438        this.flushPages();
17439      }
17440      this.page = new PDFPage(this, options);
17441      this._pageBuffer.push(this.page);
17442      pages = this._root.data.Pages.data;
17443      pages.Kids.push(this.page.dictionary);
17444      pages.Count++;
17445      this.x = this.page.margins.left;
17446      this.y = this.page.margins.top;
17447      this._ctm = [1, 0, 0, 1, 0, 0];
17448      this.transform(1, 0, 0, -1, 0, this.page.height);
17449      this.emit('pageAdded');
17450      return this;
17451    };
17452
17453    PDFDocument.prototype.bufferedPageRange = function() {
17454      return {
17455        start: this._pageBufferStart,
17456        count: this._pageBuffer.length
17457      };
17458    };
17459
17460    PDFDocument.prototype.switchToPage = function(n) {
17461      var page;
17462      if (!(page = this._pageBuffer[n - this._pageBufferStart])) {
17463        throw new Error("switchToPage(" + n + ") out of bounds, current buffer covers pages " + this._pageBufferStart + " to " + (this._pageBufferStart + this._pageBuffer.length - 1));
17464      }
17465      return this.page = page;
17466    };
17467
17468    PDFDocument.prototype.flushPages = function() {
17469      var i, len, page, pages;
17470      pages = this._pageBuffer;
17471      this._pageBuffer = [];
17472      this._pageBufferStart += pages.length;
17473      for (i = 0, len = pages.length; i < len; i++) {
17474        page = pages[i];
17475        page.end();
17476      }
17477    };
17478
17479    PDFDocument.prototype.ref = function(data) {
17480      var ref;
17481      ref = new PDFReference(this, this._offsets.length + 1, data);
17482      this._offsets.push(null);
17483      this._waiting++;
17484      return ref;
17485    };
17486
17487    PDFDocument.prototype._read = function() {};
17488
17489    PDFDocument.prototype._write = function(data) {
17490      if (!Buffer.isBuffer(data)) {
17491        data = new Buffer(data + '\n', 'binary');
17492      }
17493      this.push(data);
17494      return this._offset += data.length;
17495    };
17496
17497    PDFDocument.prototype.addContent = function(data) {
17498      this.page.write(data);
17499      return this;
17500    };
17501
17502    PDFDocument.prototype._refEnd = function(ref) {
17503      this._offsets[ref.id - 1] = ref.offset;
17504      if (--this._waiting === 0 && this._ended) {
17505        this._finalize();
17506        return this._ended = false;
17507      }
17508    };
17509
17510    PDFDocument.prototype.write = function(filename, fn) {
17511      var err;
17512      err = new Error('PDFDocument#write is deprecated, and will be removed in a future version of PDFKit. Please pipe the document into a Node stream.');
17513      console.warn(err.stack);
17514      this.pipe(fs.createWriteStream(filename));
17515      this.end();
17516      return this.once('end', fn);
17517    };
17518
17519    PDFDocument.prototype.output = function(fn) {
17520      throw new Error('PDFDocument#output is deprecated, and has been removed from PDFKit. Please pipe the document into a Node stream.');
17521    };
17522
17523    PDFDocument.prototype.end = function() {
17524      var font, key, name, ref1, ref2, val;
17525      this.flushPages();
17526      this._info = this.ref();
17527      ref1 = this.info;
17528      for (key in ref1) {
17529        val = ref1[key];
17530        if (typeof val === 'string') {
17531          val = new String(val);
17532        }
17533        this._info.data[key] = val;
17534      }
17535      this._info.end();
17536      ref2 = this._fontFamilies;
17537      for (name in ref2) {
17538        font = ref2[name];
17539        font.finalize();
17540      }
17541      this._root.end();
17542      this._root.data.Pages.end();
17543      if (this._waiting === 0) {
17544        return this._finalize();
17545      } else {
17546        return this._ended = true;
17547      }
17548    };
17549
17550    PDFDocument.prototype._finalize = function(fn) {
17551      var i, len, offset, ref1, xRefOffset;
17552      xRefOffset = this._offset;
17553      this._write("xref");
17554      this._write("0 " + (this._offsets.length + 1));
17555      this._write("0000000000 65535 f ");
17556      ref1 = this._offsets;
17557      for (i = 0, len = ref1.length; i < len; i++) {
17558        offset = ref1[i];
17559        offset = ('0000000000' + offset).slice(-10);
17560        this._write(offset + ' 00000 n ');
17561      }
17562      this._write('trailer');
17563      this._write(PDFObject.convert({
17564        Size: this._offsets.length + 1,
17565        Root: this._root,
17566        Info: this._info
17567      }));
17568      this._write('startxref');
17569      this._write("" + xRefOffset);
17570      this._write('%%EOF');
17571      return this.push(null);
17572    };
17573
17574    PDFDocument.prototype.toString = function() {
17575      return "[object PDFDocument]";
17576    };
17577
17578    return PDFDocument;
17579
17580  })(stream.Readable);
17581
17582  module.exports = PDFDocument;
17583
17584}).call(this);
17585
17586/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
17587
vendor: 4,743 bytes, lines 17588-17765
17588/***/ }),
17589/* 139 */
17590/***/ (function(module, exports) {
17591
17592/* (ignored) */
17593
17594/***/ }),
17595/* 140 */
17596/***/ (function(module, exports, __webpack_require__) {
17597
17598"use strict";
17599
17600
17601function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
17602
17603var Buffer = __webpack_require__(33).Buffer;
17604var util = __webpack_require__(141);
17605
17606function copyBuffer(src, target, offset) {
17607  src.copy(target, offset);
17608}
17609
17610module.exports = function () {
17611  function BufferList() {
17612    _classCallCheck(this, BufferList);
17613
17614    this.head = null;
17615    this.tail = null;
17616    this.length = 0;
17617  }
17618
17619  BufferList.prototype.push = function push(v) {
17620    var entry = { data: v, next: null };
17621    if (this.length > 0) this.tail.next = entry;else this.head = entry;
17622    this.tail = entry;
17623    ++this.length;
17624  };
17625
17626  BufferList.prototype.unshift = function unshift(v) {
17627    var entry = { data: v, next: this.head };
17628    if (this.length === 0) this.tail = entry;
17629    this.head = entry;
17630    ++this.length;
17631  };
17632
17633  BufferList.prototype.shift = function shift() {
17634    if (this.length === 0) return;
17635    var ret = this.head.data;
17636    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
17637    --this.length;
17638    return ret;
17639  };
17640
17641  BufferList.prototype.clear = function clear() {
17642    this.head = this.tail = null;
17643    this.length = 0;
17644  };
17645
17646  BufferList.prototype.join = function join(s) {
17647    if (this.length === 0) return '';
17648    var p = this.head;
17649    var ret = '' + p.data;
17650    while (p = p.next) {
17651      ret += s + p.data;
17652    }return ret;
17653  };
17654
17655  BufferList.prototype.concat = function concat(n) {
17656    if (this.length === 0) return Buffer.alloc(0);
17657    if (this.length === 1) return this.head.data;
17658    var ret = Buffer.allocUnsafe(n >>> 0);
17659    var p = this.head;
17660    var i = 0;
17661    while (p) {
17662      copyBuffer(p.data, ret, i);
17663      i += p.data.length;
17664      p = p.next;
17665    }
17666    return ret;
17667  };
17668
17669  return BufferList;
17670}();
17671
17672if (util && util.inspect && util.inspect.custom) {
17673  module.exports.prototype[util.inspect.custom] = function () {
17674    var obj = util.inspect({ length: this.length });
17675    return this.constructor.name + ' ' + obj;
17676  };
17677}
17678
17679/***/ }),
17680/* 141 */
17681/***/ (function(module, exports) {
17682
17683/* (ignored) */
17684
17685/***/ }),
17686/* 142 */
17687/***/ (function(module, exports, __webpack_require__) {
17688
17689/* WEBPACK VAR INJECTION */(function(global) {var apply = Function.prototype.apply;
17690
17691// DOM APIs, for completeness
17692
17693exports.setTimeout = function() {
17694  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);
17695};
17696exports.setInterval = function() {
17697  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);
17698};
17699exports.clearTimeout =
17700exports.clearInterval = function(timeout) {
17701  if (timeout) {
17702    timeout.close();
17703  }
17704};
17705
17706function Timeout(id, clearFn) {
17707  this._id = id;
17708  this._clearFn = clearFn;
17709}
17710Timeout.prototype.unref = Timeout.prototype.ref = function() {};
17711Timeout.prototype.close = function() {
17712  this._clearFn.call(window, this._id);
17713};
17714
17715// Does not start the time, just sets up the members needed.
17716exports.enroll = function(item, msecs) {
17717  clearTimeout(item._idleTimeoutId);
17718  item._idleTimeout = msecs;
17719};
17720
17721exports.unenroll = function(item) {
17722  clearTimeout(item._idleTimeoutId);
17723  item._idleTimeout = -1;
17724};
17725
17726exports._unrefActive = exports.active = function(item) {
17727  clearTimeout(item._idleTimeoutId);
17728
17729  var msecs = item._idleTimeout;
17730  if (msecs >= 0) {
17731    item._idleTimeoutId = setTimeout(function onTimeout() {
17732      if (item._onTimeout)
17733        item._onTimeout();
17734    }, msecs);
17735  }
17736};
17737
17738// setimmediate attaches itself to the global object
17739__webpack_require__(143);
17740// On some exotic environments, it's not clear which object `setimmeidate` was
17741// able to install onto.  Search each possibility in the same order as the
17742// `setimmediate` library.
17743exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) ||
17744                       (typeof global !== "undefined" && global.setImmediate) ||
17745                       (this && this.setImmediate);
17746exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) ||
17747                         (typeof global !== "undefined" && global.clearImmediate) ||
17748                         (this && this.clearImmediate);
17749
17750/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)))
17751
17752/***/ }),
17753/* 143 */
17754/***/ (function(module, exports, __webpack_require__) {
17755
17756/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {
17757    "use strict";
17758
17759    if (global.setImmediate) {
17760        return;
17761    }
17762
17763    var nextHandle = 1; // Spec says greater than zero
17764    var tasksByHandle = {};
17765    var currentlyRunningATask = false;
vendor: 5,701 bytes, lines 17766-17926
17766    var doc = global.document;
17767    var registerImmediate;
17768
17769    function setImmediate(callback) {
17770      // Callback can either be a function or a string
17771      if (typeof callback !== "function") {
17772        callback = new Function("" + callback);
17773      }
17774      // Copy function arguments
17775      var args = new Array(arguments.length - 1);
17776      for (var i = 0; i < args.length; i++) {
17777          args[i] = arguments[i + 1];
17778      }
17779      // Store and register the task
17780      var task = { callback: callback, args: args };
17781      tasksByHandle[nextHandle] = task;
17782      registerImmediate(nextHandle);
17783      return nextHandle++;
17784    }
17785
17786    function clearImmediate(handle) {
17787        delete tasksByHandle[handle];
17788    }
17789
17790    function run(task) {
17791        var callback = task.callback;
17792        var args = task.args;
17793        switch (args.length) {
17794        case 0:
17795            callback();
17796            break;
17797        case 1:
17798            callback(args[0]);
17799            break;
17800        case 2:
17801            callback(args[0], args[1]);
17802            break;
17803        case 3:
17804            callback(args[0], args[1], args[2]);
17805            break;
17806        default:
17807            callback.apply(undefined, args);
17808            break;
17809        }
17810    }
17811
17812    function runIfPresent(handle) {
17813        // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
17814        // So if we're currently running a task, we'll need to delay this invocation.
17815        if (currentlyRunningATask) {
17816            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
17817            // "too much recursion" error.
17818            setTimeout(runIfPresent, 0, handle);
17819        } else {
17820            var task = tasksByHandle[handle];
17821            if (task) {
17822                currentlyRunningATask = true;
17823                try {
17824                    run(task);
17825                } finally {
17826                    clearImmediate(handle);
17827                    currentlyRunningATask = false;
17828                }
17829            }
17830        }
17831    }
17832
17833    function installNextTickImplementation() {
17834        registerImmediate = function(handle) {
17835            process.nextTick(function () { runIfPresent(handle); });
17836        };
17837    }
17838
17839    function canUsePostMessage() {
17840        // The test against `importScripts` prevents this implementation from being installed inside a web worker,
17841        // where `global.postMessage` means something completely different and can't be used for this purpose.
17842        if (global.postMessage && !global.importScripts) {
17843            var postMessageIsAsynchronous = true;
17844            var oldOnMessage = global.onmessage;
17845            global.onmessage = function() {
17846                postMessageIsAsynchronous = false;
17847            };
17848            global.postMessage("", "*");
17849            global.onmessage = oldOnMessage;
17850            return postMessageIsAsynchronous;
17851        }
17852    }
17853
17854    function installPostMessageImplementation() {
17855        // Installs an event handler on `global` for the `message` event: see
17856        // * https://developer.mozilla.org/en/DOM/window.postMessage
17857        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
17858
17859        var messagePrefix = "setImmediate$" + Math.random() + "$";
17860        var onGlobalMessage = function(event) {
17861            if (event.source === global &&
17862                typeof event.data === "string" &&
17863                event.data.indexOf(messagePrefix) === 0) {
17864                runIfPresent(+event.data.slice(messagePrefix.length));
17865            }
17866        };
17867
17868        if (global.addEventListener) {
17869            global.addEventListener("message", onGlobalMessage, false);
17870        } else {
17871            global.attachEvent("onmessage", onGlobalMessage);
17872        }
17873
17874        registerImmediate = function(handle) {
17875            global.postMessage(messagePrefix + handle, "*");
17876        };
17877    }
17878
17879    function installMessageChannelImplementation() {
17880        var channel = new MessageChannel();
17881        channel.port1.onmessage = function(event) {
17882            var handle = event.data;
17883            runIfPresent(handle);
17884        };
17885
17886        registerImmediate = function(handle) {
17887            channel.port2.postMessage(handle);
17888        };
17889    }
17890
17891    function installReadyStateChangeImplementation() {
17892        var html = doc.documentElement;
17893        registerImmediate = function(handle) {
17894            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
17895            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
17896            var script = doc.createElement("script");
17897            script.onreadystatechange = function () {
17898                runIfPresent(handle);
17899                script.onreadystatechange = null;
17900                html.removeChild(script);
17901                script = null;
17902            };
17903            html.appendChild(script);
17904        };
17905    }
17906
17907    function installSetTimeoutImplementation() {
17908        registerImmediate = function(handle) {
17909            setTimeout(runIfPresent, 0, handle);
17910        };
17911    }
17912
17913    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
17914    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
17915    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;
17916
17917    // Don't get fooled by e.g. browserify environments.
17918    if ({}.toString.call(global.process) === "[object process]") {
17919        // For Node.js before 0.9
17920        installNextTickImplementation();
17921
17922    } else if (canUsePostMessage()) {
17923        // For non-IE10 modern browsers
17924        installPostMessageImplementation();
17925
17926    }
vendor: 2,540 bytes, lines 17926-18023
17926 else if (global.MessageChannel) {
17927        // For web workers, where supported
17928        installMessageChannelImplementation();
17929
17930    } else if (doc && "onreadystatechange" in doc.createElement("script")) {
17931        // For IE 6–8
17932        installReadyStateChangeImplementation();
17933
17934    } else {
17935        // For older browsers
17936        installSetTimeoutImplementation();
17937    }
17938
17939    attachTo.setImmediate = setImmediate;
17940    attachTo.clearImmediate = clearImmediate;
17941}(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self));
17942
17943/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7), __webpack_require__(11)))
17944
17945/***/ }),
17946/* 144 */
17947/***/ (function(module, exports, __webpack_require__) {
17948
17949/* WEBPACK VAR INJECTION */(function(global) {
17950/**
17951 * Module exports.
17952 */
17953
17954module.exports = deprecate;
17955
17956/**
17957 * Mark that a method should not be used.
17958 * Returns a modified function which warns once by default.
17959 *
17960 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
17961 *
17962 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
17963 * will throw an Error when invoked.
17964 *
17965 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
17966 * will invoke `console.trace()` instead of `console.error()`.
17967 *
17968 * @param {Function} fn - the function to deprecate
17969 * @param {String} msg - the string to print to the console when `fn` is invoked
17970 * @returns {Function} a new "deprecated" version of `fn`
17971 * @api public
17972 */
17973
17974function deprecate (fn, msg) {
17975  if (config('noDeprecation')) {
17976    return fn;
17977  }
17978
17979  var warned = false;
17980  function deprecated() {
17981    if (!warned) {
17982      if (config('throwDeprecation')) {
17983        throw new Error(msg);
17984      } else if (config('traceDeprecation')) {
17985        console.trace(msg);
17986      } else {
17987        console.warn(msg);
17988      }
17989      warned = true;
17990    }
17991    return fn.apply(this, arguments);
17992  }
17993
17994  return deprecated;
17995}
17996
17997/**
17998 * Checks `localStorage` for boolean values for the given `name`.
17999 *
18000 * @param {String} name
18001 * @returns {Boolean}
18002 * @api private
18003 */
18004
18005function config (name) {
18006  // accessing global.localStorage can trigger a DOMException in sandboxed iframes
18007  try {
18008    if (!global.localStorage) return false;
18009  } catch (_) {
18010    return false;
18011  }
18012  var val = global.localStorage[name];
18013  if (null == val) return false;
18014  return String(val).toLowerCase() === 'true';
18015}
18016
18017/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)))
18018
18019/***/ }),
18020/* 145 */
18021/***/ (function(module, exports, __webpack_require__) {
18022
18023"use strict";
vendor: 17,603 bytes, lines 18024-18640
18024// Copyright Joyent, Inc. and other Node contributors.
18025//
18026// Permission is hereby granted, free of charge, to any person obtaining a
18027// copy of this software and associated documentation files (the
18028// "Software"), to deal in the Software without restriction, including
18029// without limitation the rights to use, copy, modify, merge, publish,
18030// distribute, sublicense, and/or sell copies of the Software, and to permit
18031// persons to whom the Software is furnished to do so, subject to the
18032// following conditions:
18033//
18034// The above copyright notice and this permission notice shall be included
18035// in all copies or substantial portions of the Software.
18036//
18037// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18038// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18039// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
18040// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18041// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
18042// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
18043// USE OR OTHER DEALINGS IN THE SOFTWARE.
18044
18045// a passthrough stream.
18046// basically just the most minimal sort of Transform stream.
18047// Every written chunk gets output as-is.
18048
18049
18050
18051module.exports = PassThrough;
18052
18053var Transform = __webpack_require__(86);
18054
18055/*<replacement>*/
18056var util = __webpack_require__(25);
18057util.inherits = __webpack_require__(21);
18058/*</replacement>*/
18059
18060util.inherits(PassThrough, Transform);
18061
18062function PassThrough(options) {
18063  if (!(this instanceof PassThrough)) return new PassThrough(options);
18064
18065  Transform.call(this, options);
18066}
18067
18068PassThrough.prototype._transform = function (chunk, encoding, cb) {
18069  cb(null, chunk);
18070};
18071
18072/***/ }),
18073/* 146 */
18074/***/ (function(module, exports, __webpack_require__) {
18075
18076module.exports = __webpack_require__(46);
18077
18078
18079/***/ }),
18080/* 147 */
18081/***/ (function(module, exports, __webpack_require__) {
18082
18083module.exports = __webpack_require__(16);
18084
18085
18086/***/ }),
18087/* 148 */
18088/***/ (function(module, exports, __webpack_require__) {
18089
18090module.exports = __webpack_require__(45).Transform
18091
18092
18093/***/ }),
18094/* 149 */
18095/***/ (function(module, exports, __webpack_require__) {
18096
18097module.exports = __webpack_require__(45).PassThrough
18098
18099
18100/***/ }),
18101/* 150 */
18102/***/ (function(module, exports, __webpack_require__) {
18103
18104"use strict";
18105/* WEBPACK VAR INJECTION */(function(Buffer, process) {
18106/* eslint camelcase: "off" */
18107
18108var assert = __webpack_require__(88);
18109
18110var Zstream = __webpack_require__(153);
18111var zlib_deflate = __webpack_require__(154);
18112var zlib_inflate = __webpack_require__(157);
18113var constants = __webpack_require__(160);
18114
18115for (var key in constants) {
18116  exports[key] = constants[key];
18117}
18118
18119// zlib modes
18120exports.NONE = 0;
18121exports.DEFLATE = 1;
18122exports.INFLATE = 2;
18123exports.GZIP = 3;
18124exports.GUNZIP = 4;
18125exports.DEFLATERAW = 5;
18126exports.INFLATERAW = 6;
18127exports.UNZIP = 7;
18128
18129var GZIP_HEADER_ID1 = 0x1f;
18130var GZIP_HEADER_ID2 = 0x8b;
18131
18132/**
18133 * Emulate Node's zlib C++ layer for use by the JS layer in index.js
18134 */
18135function Zlib(mode) {
18136  if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) {
18137    throw new TypeError('Bad argument');
18138  }
18139
18140  this.dictionary = null;
18141  this.err = 0;
18142  this.flush = 0;
18143  this.init_done = false;
18144  this.level = 0;
18145  this.memLevel = 0;
18146  this.mode = mode;
18147  this.strategy = 0;
18148  this.windowBits = 0;
18149  this.write_in_progress = false;
18150  this.pending_close = false;
18151  this.gzip_id_bytes_read = 0;
18152}
18153
18154Zlib.prototype.close = function () {
18155  if (this.write_in_progress) {
18156    this.pending_close = true;
18157    return;
18158  }
18159
18160  this.pending_close = false;
18161
18162  assert(this.init_done, 'close before init');
18163  assert(this.mode <= exports.UNZIP);
18164
18165  if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {
18166    zlib_deflate.deflateEnd(this.strm);
18167  } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) {
18168    zlib_inflate.inflateEnd(this.strm);
18169  }
18170
18171  this.mode = exports.NONE;
18172
18173  this.dictionary = null;
18174};
18175
18176Zlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) {
18177  return this._write(true, flush, input, in_off, in_len, out, out_off, out_len);
18178};
18179
18180Zlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) {
18181  return this._write(false, flush, input, in_off, in_len, out, out_off, out_len);
18182};
18183
18184Zlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) {
18185  assert.equal(arguments.length, 8);
18186
18187  assert(this.init_done, 'write before init');
18188  assert(this.mode !== exports.NONE, 'already finalized');
18189  assert.equal(false, this.write_in_progress, 'write already in progress');
18190  assert.equal(false, this.pending_close, 'close is pending');
18191
18192  this.write_in_progress = true;
18193
18194  assert.equal(false, flush === undefined, 'must provide flush value');
18195
18196  this.write_in_progress = true;
18197
18198  if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) {
18199    throw new Error('Invalid flush value');
18200  }
18201
18202  if (input == null) {
18203    input = Buffer.alloc(0);
18204    in_len = 0;
18205    in_off = 0;
18206  }
18207
18208  this.strm.avail_in = in_len;
18209  this.strm.input = input;
18210  this.strm.next_in = in_off;
18211  this.strm.avail_out = out_len;
18212  this.strm.output = out;
18213  this.strm.next_out = out_off;
18214  this.flush = flush;
18215
18216  if (!async) {
18217    // sync version
18218    this._process();
18219
18220    if (this._checkError()) {
18221      return this._afterSync();
18222    }
18223    return;
18224  }
18225
18226  // async version
18227  var self = this;
18228  process.nextTick(function () {
18229    self._process();
18230    self._after();
18231  });
18232
18233  return this;
18234};
18235
18236Zlib.prototype._afterSync = function () {
18237  var avail_out = this.strm.avail_out;
18238  var avail_in = this.strm.avail_in;
18239
18240  this.write_in_progress = false;
18241
18242  return [avail_in, avail_out];
18243};
18244
18245Zlib.prototype._process = function () {
18246  var next_expected_header_byte = null;
18247
18248  // If the avail_out is left at 0, then it means that it ran out
18249  // of room.  If there was avail_out left over, then it means
18250  // that all of the input was consumed.
18251  switch (this.mode) {
18252    case exports.DEFLATE:
18253    case exports.GZIP:
18254    case exports.DEFLATERAW:
18255      this.err = zlib_deflate.deflate(this.strm, this.flush);
18256      break;
18257    case exports.UNZIP:
18258      if (this.strm.avail_in > 0) {
18259        next_expected_header_byte = this.strm.next_in;
18260      }
18261
18262      switch (this.gzip_id_bytes_read) {
18263        case 0:
18264          if (next_expected_header_byte === null) {
18265            break;
18266          }
18267
18268          if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) {
18269            this.gzip_id_bytes_read = 1;
18270            next_expected_header_byte++;
18271
18272            if (this.strm.avail_in === 1) {
18273              // The only available byte was already read.
18274              break;
18275            }
18276          } else {
18277            this.mode = exports.INFLATE;
18278            break;
18279          }
18280
18281        // fallthrough
18282        case 1:
18283          if (next_expected_header_byte === null) {
18284            break;
18285          }
18286
18287          if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) {
18288            this.gzip_id_bytes_read = 2;
18289            this.mode = exports.GUNZIP;
18290          } else {
18291            // There is no actual difference between INFLATE and INFLATERAW
18292            // (after initialization).
18293            this.mode = exports.INFLATE;
18294          }
18295
18296          break;
18297        default:
18298          throw new Error('invalid number of gzip magic number bytes read');
18299      }
18300
18301    // fallthrough
18302    case exports.INFLATE:
18303    case exports.GUNZIP:
18304    case exports.INFLATERAW:
18305      this.err = zlib_inflate.inflate(this.strm, this.flush
18306
18307      // If data was encoded with dictionary
18308      );if (this.err === exports.Z_NEED_DICT && this.dictionary) {
18309        // Load it
18310        this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary);
18311        if (this.err === exports.Z_OK) {
18312          // And try to decode again
18313          this.err = zlib_inflate.inflate(this.strm, this.flush);
18314        } else if (this.err === exports.Z_DATA_ERROR) {
18315          // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR.
18316          // Make it possible for After() to tell a bad dictionary from bad
18317          // input.
18318          this.err = exports.Z_NEED_DICT;
18319        }
18320      }
18321      while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) {
18322        // Bytes remain in input buffer. Perhaps this is another compressed
18323        // member in the same archive, or just trailing garbage.
18324        // Trailing zero bytes are okay, though, since they are frequently
18325        // used for padding.
18326
18327        this.reset();
18328        this.err = zlib_inflate.inflate(this.strm, this.flush);
18329      }
18330      break;
18331    default:
18332      throw new Error('Unknown mode ' + this.mode);
18333  }
18334};
18335
18336Zlib.prototype._checkError = function () {
18337  // Acceptable error states depend on the type of zlib stream.
18338  switch (this.err) {
18339    case exports.Z_OK:
18340    case exports.Z_BUF_ERROR:
18341      if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) {
18342        this._error('unexpected end of file');
18343        return false;
18344      }
18345      break;
18346    case exports.Z_STREAM_END:
18347      // normal statuses, not fatal
18348      break;
18349    case exports.Z_NEED_DICT:
18350      if (this.dictionary == null) {
18351        this._error('Missing dictionary');
18352      } else {
18353        this._error('Bad dictionary');
18354      }
18355      return false;
18356    default:
18357      // something else.
18358      this._error('Zlib error');
18359      return false;
18360  }
18361
18362  return true;
18363};
18364
18365Zlib.prototype._after = function () {
18366  if (!this._checkError()) {
18367    return;
18368  }
18369
18370  var avail_out = this.strm.avail_out;
18371  var avail_in = this.strm.avail_in;
18372
18373  this.write_in_progress = false;
18374
18375  // call the write() cb
18376  this.callback(avail_in, avail_out);
18377
18378  if (this.pending_close) {
18379    this.close();
18380  }
18381};
18382
18383Zlib.prototype._error = function (message) {
18384  if (this.strm.msg) {
18385    message = this.strm.msg;
18386  }
18387  this.onerror(message, this.err
18388
18389  // no hope of rescue.
18390  );this.write_in_progress = false;
18391  if (this.pending_close) {
18392    this.close();
18393  }
18394};
18395
18396Zlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) {
18397  assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])');
18398
18399  assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits');
18400  assert(level >= -1 && level <= 9, 'invalid compression level');
18401
18402  assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel');
18403
18404  assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy');
18405
18406  this._init(level, windowBits, memLevel, strategy, dictionary);
18407  this._setDictionary();
18408};
18409
18410Zlib.prototype.params = function () {
18411  throw new Error('deflateParams Not supported');
18412};
18413
18414Zlib.prototype.reset = function () {
18415  this._reset();
18416  this._setDictionary();
18417};
18418
18419Zlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) {
18420  this.level = level;
18421  this.windowBits = windowBits;
18422  this.memLevel = memLevel;
18423  this.strategy = strategy;
18424
18425  this.flush = exports.Z_NO_FLUSH;
18426
18427  this.err = exports.Z_OK;
18428
18429  if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) {
18430    this.windowBits += 16;
18431  }
18432
18433  if (this.mode === exports.UNZIP) {
18434    this.windowBits += 32;
18435  }
18436
18437  if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) {
18438    this.windowBits = -1 * this.windowBits;
18439  }
18440
18441  this.strm = new Zstream();
18442
18443  switch (this.mode) {
18444    case exports.DEFLATE:
18445    case exports.GZIP:
18446    case exports.DEFLATERAW:
18447      this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy);
18448      break;
18449    case exports.INFLATE:
18450    case exports.GUNZIP:
18451    case exports.INFLATERAW:
18452    case exports.UNZIP:
18453      this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits);
18454      break;
18455    default:
18456      throw new Error('Unknown mode ' + this.mode);
18457  }
18458
18459  if (this.err !== exports.Z_OK) {
18460    this._error('Init error');
18461  }
18462
18463  this.dictionary = dictionary;
18464
18465  this.write_in_progress = false;
18466  this.init_done = true;
18467};
18468
18469Zlib.prototype._setDictionary = function () {
18470  if (this.dictionary == null) {
18471    return;
18472  }
18473
18474  this.err = exports.Z_OK;
18475
18476  switch (this.mode) {
18477    case exports.DEFLATE:
18478    case exports.DEFLATERAW:
18479      this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary);
18480      break;
18481    default:
18482      break;
18483  }
18484
18485  if (this.err !== exports.Z_OK) {
18486    this._error('Failed to set dictionary');
18487  }
18488};
18489
18490Zlib.prototype._reset = function () {
18491  this.err = exports.Z_OK;
18492
18493  switch (this.mode) {
18494    case exports.DEFLATE:
18495    case exports.DEFLATERAW:
18496    case exports.GZIP:
18497      this.err = zlib_deflate.deflateReset(this.strm);
18498      break;
18499    case exports.INFLATE:
18500    case exports.INFLATERAW:
18501    case exports.GUNZIP:
18502      this.err = zlib_inflate.inflateReset(this.strm);
18503      break;
18504    default:
18505      break;
18506  }
18507
18508  if (this.err !== exports.Z_OK) {
18509    this._error('Failed to reset stream');
18510  }
18511};
18512
18513exports.Zlib = Zlib;
18514/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer, __webpack_require__(11)))
18515
18516/***/ }),
18517/* 151 */
18518/***/ (function(module, exports) {
18519
18520module.exports = function isBuffer(arg) {
18521  return arg && typeof arg === 'object'
18522    && typeof arg.copy === 'function'
18523    && typeof arg.fill === 'function'
18524    && typeof arg.readUInt8 === 'function';
18525}
18526
18527/***/ }),
18528/* 152 */
18529/***/ (function(module, exports) {
18530
18531if (typeof Object.create === 'function') {
18532  // implementation from standard node.js 'util' module
18533  module.exports = function inherits(ctor, superCtor) {
18534    ctor.super_ = superCtor
18535    ctor.prototype = Object.create(superCtor.prototype, {
18536      constructor: {
18537        value: ctor,
18538        enumerable: false,
18539        writable: true,
18540        configurable: true
18541      }
18542    });
18543  };
18544} else {
18545  // old school shim for old browsers
18546  module.exports = function inherits(ctor, superCtor) {
18547    ctor.super_ = superCtor
18548    var TempCtor = function () {}
18549    TempCtor.prototype = superCtor.prototype
18550    ctor.prototype = new TempCtor()
18551    ctor.prototype.constructor = ctor
18552  }
18553}
18554
18555
18556/***/ }),
18557/* 153 */
18558/***/ (function(module, exports, __webpack_require__) {
18559
18560"use strict";
18561
18562
18563// (C) 1995-2013 Jean-loup Gailly and Mark Adler
18564// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
18565//
18566// This software is provided 'as-is', without any express or implied
18567// warranty. In no event will the authors be held liable for any damages
18568// arising from the use of this software.
18569//
18570// Permission is granted to anyone to use this software for any purpose,
18571// including commercial applications, and to alter it and redistribute it
18572// freely, subject to the following restrictions:
18573//
18574// 1. The origin of this software must not be misrepresented; you must not
18575//   claim that you wrote the original software. If you use this software
18576//   in a product, an acknowledgment in the product documentation would be
18577//   appreciated but is not required.
18578// 2. Altered source versions must be plainly marked as such, and must not be
18579//   misrepresented as being the original software.
18580// 3. This notice may not be removed or altered from any source distribution.
18581
18582function ZStream() {
18583  /* next input byte */
18584  this.input = null; // JS specific, because we have no pointers
18585  this.next_in = 0;
18586  /* number of bytes available at input */
18587  this.avail_in = 0;
18588  /* total number of input bytes read so far */
18589  this.total_in = 0;
18590  /* next output byte should be put there */
18591  this.output = null; // JS specific, because we have no pointers
18592  this.next_out = 0;
18593  /* remaining free space at output */
18594  this.avail_out = 0;
18595  /* total number of bytes output so far */
18596  this.total_out = 0;
18597  /* last error message, NULL if no error */
18598  this.msg = ''/*Z_NULL*/;
18599  /* not visible by applications */
18600  this.state = null;
18601  /* best guess about the data type: binary or text */
18602  this.data_type = 2/*Z_UNKNOWN*/;
18603  /* adler32 value of the uncompressed data */
18604  this.adler = 0;
18605}
18606
18607module.exports = ZStream;
18608
18609
18610/***/ }),
18611/* 154 */
18612/***/ (function(module, exports, __webpack_require__) {
18613
18614"use strict";
18615
18616
18617// (C) 1995-2013 Jean-loup Gailly and Mark Adler
18618// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
18619//
18620// This software is provided 'as-is', without any express or implied
18621// warranty. In no event will the authors be held liable for any damages
18622// arising from the use of this software.
18623//
18624// Permission is granted to anyone to use this software for any purpose,
18625// including commercial applications, and to alter it and redistribute it
18626// freely, subject to the following restrictions:
18627//
18628// 1. The origin of this software must not be misrepresented; you must not
18629//   claim that you wrote the original software. If you use this software
18630//   in a product, an acknowledgment in the product documentation would be
18631//   appreciated but is not required.
18632// 2. Altered source versions must be plainly marked as such, and must not be
18633//   misrepresented as being the original software.
18634// 3. This notice may not be removed or altered from any source distribution.
18635
18636var utils   = __webpack_require__(34);
18637var trees   = __webpack_require__(155);
18638var adler32 = __webpack_require__(89);
18639var crc32   = __webpack_require__(90);
18640var msg     = __webpack_require__(156
vendor: 45,423 bytes, lines 18640-19995
18640);
18641
18642/* Public constants ==========================================================*/
18643/* ===========================================================================*/
18644
18645
18646/* Allowed flush values; see deflate() and inflate() below for details */
18647var Z_NO_FLUSH      = 0;
18648var Z_PARTIAL_FLUSH = 1;
18649//var Z_SYNC_FLUSH    = 2;
18650var Z_FULL_FLUSH    = 3;
18651var Z_FINISH        = 4;
18652var Z_BLOCK         = 5;
18653//var Z_TREES         = 6;
18654
18655
18656/* Return codes for the compression/decompression functions. Negative values
18657 * are errors, positive values are used for special but normal events.
18658 */
18659var Z_OK            = 0;
18660var Z_STREAM_END    = 1;
18661//var Z_NEED_DICT     = 2;
18662//var Z_ERRNO         = -1;
18663var Z_STREAM_ERROR  = -2;
18664var Z_DATA_ERROR    = -3;
18665//var Z_MEM_ERROR     = -4;
18666var Z_BUF_ERROR     = -5;
18667//var Z_VERSION_ERROR = -6;
18668
18669
18670/* compression levels */
18671//var Z_NO_COMPRESSION      = 0;
18672//var Z_BEST_SPEED          = 1;
18673//var Z_BEST_COMPRESSION    = 9;
18674var Z_DEFAULT_COMPRESSION = -1;
18675
18676
18677var Z_FILTERED            = 1;
18678var Z_HUFFMAN_ONLY        = 2;
18679var Z_RLE                 = 3;
18680var Z_FIXED               = 4;
18681var Z_DEFAULT_STRATEGY    = 0;
18682
18683/* Possible values of the data_type field (though see inflate()) */
18684//var Z_BINARY              = 0;
18685//var Z_TEXT                = 1;
18686//var Z_ASCII               = 1; // = Z_TEXT
18687var Z_UNKNOWN             = 2;
18688
18689
18690/* The deflate compression method */
18691var Z_DEFLATED  = 8;
18692
18693/*============================================================================*/
18694
18695
18696var MAX_MEM_LEVEL = 9;
18697/* Maximum value for memLevel in deflateInit2 */
18698var MAX_WBITS = 15;
18699/* 32K LZ77 window */
18700var DEF_MEM_LEVEL = 8;
18701
18702
18703var LENGTH_CODES  = 29;
18704/* number of length codes, not counting the special END_BLOCK code */
18705var LITERALS      = 256;
18706/* number of literal bytes 0..255 */
18707var L_CODES       = LITERALS + 1 + LENGTH_CODES;
18708/* number of Literal or Length codes, including the END_BLOCK code */
18709var D_CODES       = 30;
18710/* number of distance codes */
18711var BL_CODES      = 19;
18712/* number of codes used to transfer the bit lengths */
18713var HEAP_SIZE     = 2 * L_CODES + 1;
18714/* maximum heap size */
18715var MAX_BITS  = 15;
18716/* All codes must not exceed MAX_BITS bits */
18717
18718var MIN_MATCH = 3;
18719var MAX_MATCH = 258;
18720var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
18721
18722var PRESET_DICT = 0x20;
18723
18724var INIT_STATE = 42;
18725var EXTRA_STATE = 69;
18726var NAME_STATE = 73;
18727var COMMENT_STATE = 91;
18728var HCRC_STATE = 103;
18729var BUSY_STATE = 113;
18730var FINISH_STATE = 666;
18731
18732var BS_NEED_MORE      = 1; /* block not completed, need more input or more output */
18733var BS_BLOCK_DONE     = 2; /* block flush performed */
18734var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
18735var BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */
18736
18737var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
18738
18739function err(strm, errorCode) {
18740  strm.msg = msg[errorCode];
18741  return errorCode;
18742}
18743
18744function rank(f) {
18745  return ((f) << 1) - ((f) > 4 ? 9 : 0);
18746}
18747
18748function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
18749
18750
18751/* =========================================================================
18752 * Flush as much pending output as possible. All deflate() output goes
18753 * through this function so some applications may wish to modify it
18754 * to avoid allocating a large strm->output buffer and copying into it.
18755 * (See also read_buf()).
18756 */
18757function flush_pending(strm) {
18758  var s = strm.state;
18759
18760  //_tr_flush_bits(s);
18761  var len = s.pending;
18762  if (len > strm.avail_out) {
18763    len = strm.avail_out;
18764  }
18765  if (len === 0) { return; }
18766
18767  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
18768  strm.next_out += len;
18769  s.pending_out += len;
18770  strm.total_out += len;
18771  strm.avail_out -= len;
18772  s.pending -= len;
18773  if (s.pending === 0) {
18774    s.pending_out = 0;
18775  }
18776}
18777
18778
18779function flush_block_only(s, last) {
18780  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
18781  s.block_start = s.strstart;
18782  flush_pending(s.strm);
18783}
18784
18785
18786function put_byte(s, b) {
18787  s.pending_buf[s.pending++] = b;
18788}
18789
18790
18791/* =========================================================================
18792 * Put a short in the pending buffer. The 16-bit value is put in MSB order.
18793 * IN assertion: the stream state is correct and there is enough room in
18794 * pending_buf.
18795 */
18796function putShortMSB(s, b) {
18797//  put_byte(s, (Byte)(b >> 8));
18798//  put_byte(s, (Byte)(b & 0xff));
18799  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
18800  s.pending_buf[s.pending++] = b & 0xff;
18801}
18802
18803
18804/* ===========================================================================
18805 * Read a new buffer from the current input stream, update the adler32
18806 * and total number of bytes read.  All deflate() input goes through
18807 * this function so some applications may wish to modify it to avoid
18808 * allocating a large strm->input buffer and copying from it.
18809 * (See also flush_pending()).
18810 */
18811function read_buf(strm, buf, start, size) {
18812  var len = strm.avail_in;
18813
18814  if (len > size) { len = size; }
18815  if (len === 0) { return 0; }
18816
18817  strm.avail_in -= len;
18818
18819  // zmemcpy(buf, strm->next_in, len);
18820  utils.arraySet(buf, strm.input, strm.next_in, len, start);
18821  if (strm.state.wrap === 1) {
18822    strm.adler = adler32(strm.adler, buf, len, start);
18823  }
18824
18825  else if (strm.state.wrap === 2) {
18826    strm.adler = crc32(strm.adler, buf, len, start);
18827  }
18828
18829  strm.next_in += len;
18830  strm.total_in += len;
18831
18832  return len;
18833}
18834
18835
18836/* ===========================================================================
18837 * Set match_start to the longest match starting at the given string and
18838 * return its length. Matches shorter or equal to prev_length are discarded,
18839 * in which case the result is equal to prev_length and match_start is
18840 * garbage.
18841 * IN assertions: cur_match is the head of the hash chain for the current
18842 *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
18843 * OUT assertion: the match length is not greater than s->lookahead.
18844 */
18845function longest_match(s, cur_match) {
18846  var chain_length = s.max_chain_length;      /* max hash chain length */
18847  var scan = s.strstart; /* current string */
18848  var match;                       /* matched string */
18849  var len;                           /* length of current match */
18850  var best_len = s.prev_length;              /* best match length so far */
18851  var nice_match = s.nice_match;             /* stop if match long enough */
18852  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
18853      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;
18854
18855  var _win = s.window; // shortcut
18856
18857  var wmask = s.w_mask;
18858  var prev  = s.prev;
18859
18860  /* Stop when cur_match becomes <= limit. To simplify the code,
18861   * we prevent matches with the string of window index 0.
18862   */
18863
18864  var strend = s.strstart + MAX_MATCH;
18865  var scan_end1  = _win[scan + best_len - 1];
18866  var scan_end   = _win[scan + best_len];
18867
18868  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
18869   * It is easy to get rid of this optimization if necessary.
18870   */
18871  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
18872
18873  /* Do not waste too much time if we already have a good match: */
18874  if (s.prev_length >= s.good_match) {
18875    chain_length >>= 2;
18876  }
18877  /* Do not look for matches beyond the end of the input. This is necessary
18878   * to make deflate deterministic.
18879   */
18880  if (nice_match > s.lookahead) { nice_match = s.lookahead; }
18881
18882  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
18883
18884  do {
18885    // Assert(cur_match < s->strstart, "no future");
18886    match = cur_match;
18887
18888    /* Skip to next match if the match length cannot increase
18889     * or if the match length is less than 2.  Note that the checks below
18890     * for insufficient lookahead only occur occasionally for performance
18891     * reasons.  Therefore uninitialized memory will be accessed, and
18892     * conditional jumps will be made that depend on those values.
18893     * However the length of the match is limited to the lookahead, so
18894     * the output of deflate is not affected by the uninitialized values.
18895     */
18896
18897    if (_win[match + best_len]     !== scan_end  ||
18898        _win[match + best_len - 1] !== scan_end1 ||
18899        _win[match]                !== _win[scan] ||
18900        _win[++match]              !== _win[scan + 1]) {
18901      continue;
18902    }
18903
18904    /* The check at best_len-1 can be removed because it will be made
18905     * again later. (This heuristic is not always a win.)
18906     * It is not necessary to compare scan[2] and match[2] since they
18907     * are always equal when the other bytes match, given that
18908     * the hash keys are equal and that HASH_BITS >= 8.
18909     */
18910    scan += 2;
18911    match++;
18912    // Assert(*scan == *match, "match[2]?");
18913
18914    /* We check for insufficient lookahead only every 8th comparison;
18915     * the 256th check will be made at strstart+258.
18916     */
18917    do {
18918      /*jshint noempty:false*/
18919    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
18920             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
18921             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
18922             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
18923             scan < strend);
18924
18925    // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
18926
18927    len = MAX_MATCH - (strend - scan);
18928    scan = strend - MAX_MATCH;
18929
18930    if (len > best_len) {
18931      s.match_start = cur_match;
18932      best_len = len;
18933      if (len >= nice_match) {
18934        break;
18935      }
18936      scan_end1  = _win[scan + best_len - 1];
18937      scan_end   = _win[scan + best_len];
18938    }
18939  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
18940
18941  if (best_len <= s.lookahead) {
18942    return best_len;
18943  }
18944  return s.lookahead;
18945}
18946
18947
18948/* ===========================================================================
18949 * Fill the window when the lookahead becomes insufficient.
18950 * Updates strstart and lookahead.
18951 *
18952 * IN assertion: lookahead < MIN_LOOKAHEAD
18953 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
18954 *    At least one byte has been read, or avail_in == 0; reads are
18955 *    performed for at least two bytes (required for the zip translate_eol
18956 *    option -- not supported here).
18957 */
18958function fill_window(s) {
18959  var _w_size = s.w_size;
18960  var p, n, m, more, str;
18961
18962  //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
18963
18964  do {
18965    more = s.window_size - s.lookahead - s.strstart;
18966
18967    // JS ints have 32 bit, block below not needed
18968    /* Deal with !@#$% 64K limit: */
18969    //if (sizeof(int) <= 2) {
18970    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
18971    //        more = wsize;
18972    //
18973    //  } else if (more == (unsigned)(-1)) {
18974    //        /* Very unlikely, but possible on 16 bit machine if
18975    //         * strstart == 0 && lookahead == 1 (input done a byte at time)
18976    //         */
18977    //        more--;
18978    //    }
18979    //}
18980
18981
18982    /* If the window is almost full and there is insufficient lookahead,
18983     * move the upper half to the lower one to make room in the upper half.
18984     */
18985    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
18986
18987      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
18988      s.match_start -= _w_size;
18989      s.strstart -= _w_size;
18990      /* we now have strstart >= MAX_DIST */
18991      s.block_start -= _w_size;
18992
18993      /* Slide the hash table (could be avoided with 32 bit values
18994       at the expense of memory usage). We slide even when level == 0
18995       to keep the hash table consistent if we switch back to level > 0
18996       later. (Using level 0 permanently is not an optimal usage of
18997       zlib, so we don't care about this pathological case.)
18998       */
18999
19000      n = s.hash_size;
19001      p = n;
19002      do {
19003        m = s.head[--p];
19004        s.head[p] = (m >= _w_size ? m - _w_size : 0);
19005      } while (--n);
19006
19007      n = _w_size;
19008      p = n;
19009      do {
19010        m = s.prev[--p];
19011        s.prev[p] = (m >= _w_size ? m - _w_size : 0);
19012        /* If n is not on any hash chain, prev[n] is garbage but
19013         * its value will never be used.
19014         */
19015      } while (--n);
19016
19017      more += _w_size;
19018    }
19019    if (s.strm.avail_in === 0) {
19020      break;
19021    }
19022
19023    /* If there was no sliding:
19024     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
19025     *    more == window_size - lookahead - strstart
19026     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
19027     * => more >= window_size - 2*WSIZE + 2
19028     * In the BIG_MEM or MMAP case (not yet supported),
19029     *   window_size == input_size + MIN_LOOKAHEAD  &&
19030     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
19031     * Otherwise, window_size == 2*WSIZE so more >= 2.
19032     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
19033     */
19034    //Assert(more >= 2, "more < 2");
19035    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
19036    s.lookahead += n;
19037
19038    /* Initialize the hash value now that we have some input: */
19039    if (s.lookahead + s.insert >= MIN_MATCH) {
19040      str = s.strstart - s.insert;
19041      s.ins_h = s.window[str];
19042
19043      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
19044      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;
19045//#if MIN_MATCH != 3
19046//        Call update_hash() MIN_MATCH-3 more times
19047//#endif
19048      while (s.insert) {
19049        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
19050        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
19051
19052        s.prev[str & s.w_mask] = s.head[s.ins_h];
19053        s.head[s.ins_h] = str;
19054        str++;
19055        s.insert--;
19056        if (s.lookahead + s.insert < MIN_MATCH) {
19057          break;
19058        }
19059      }
19060    }
19061    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
19062     * but this is not important since only literal bytes will be emitted.
19063     */
19064
19065  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
19066
19067  /* If the WIN_INIT bytes after the end of the current data have never been
19068   * written, then zero those bytes in order to avoid memory check reports of
19069   * the use of uninitialized (or uninitialised as Julian writes) bytes by
19070   * the longest match routines.  Update the high water mark for the next
19071   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
19072   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
19073   */
19074//  if (s.high_water < s.window_size) {
19075//    var curr = s.strstart + s.lookahead;
19076//    var init = 0;
19077//
19078//    if (s.high_water < curr) {
19079//      /* Previous high water mark below current data -- zero WIN_INIT
19080//       * bytes or up to end of window, whichever is less.
19081//       */
19082//      init = s.window_size - curr;
19083//      if (init > WIN_INIT)
19084//        init = WIN_INIT;
19085//      zmemzero(s->window + curr, (unsigned)init);
19086//      s->high_water = curr + init;
19087//    }
19088//    else if (s->high_water < (ulg)curr + WIN_INIT) {
19089//      /* High water mark at or above current data, but below current data
19090//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
19091//       * to end of window, whichever is less.
19092//       */
19093//      init = (ulg)curr + WIN_INIT - s->high_water;
19094//      if (init > s->window_size - s->high_water)
19095//        init = s->window_size - s->high_water;
19096//      zmemzero(s->window + s->high_water, (unsigned)init);
19097//      s->high_water += init;
19098//    }
19099//  }
19100//
19101//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
19102//    "not enough room for search");
19103}
19104
19105/* ===========================================================================
19106 * Copy without compression as much as possible from the input stream, return
19107 * the current block state.
19108 * This function does not insert new strings in the dictionary since
19109 * uncompressible data is probably not useful. This function is used
19110 * only for the level=0 compression option.
19111 * NOTE: this function should be optimized to avoid extra copying from
19112 * window to pending_buf.
19113 */
19114function deflate_stored(s, flush) {
19115  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
19116   * to pending_buf_size, and each stored block has a 5 byte header:
19117   */
19118  var max_block_size = 0xffff;
19119
19120  if (max_block_size > s.pending_buf_size - 5) {
19121    max_block_size = s.pending_buf_size - 5;
19122  }
19123
19124  /* Copy as much as possible from input to output: */
19125  for (;;) {
19126    /* Fill the window as much as possible: */
19127    if (s.lookahead <= 1) {
19128
19129      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
19130      //  s->block_start >= (long)s->w_size, "slide too late");
19131//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
19132//        s.block_start >= s.w_size)) {
19133//        throw  new Error("slide too late");
19134//      }
19135
19136      fill_window(s);
19137      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
19138        return BS_NEED_MORE;
19139      }
19140
19141      if (s.lookahead === 0) {
19142        break;
19143      }
19144      /* flush the current block */
19145    }
19146    //Assert(s->block_start >= 0L, "block gone");
19147//    if (s.block_start < 0) throw new Error("block gone");
19148
19149    s.strstart += s.lookahead;
19150    s.lookahead = 0;
19151
19152    /* Emit a stored block if pending_buf will be full: */
19153    var max_start = s.block_start + max_block_size;
19154
19155    if (s.strstart === 0 || s.strstart >= max_start) {
19156      /* strstart == 0 is possible when wraparound on 16-bit machine */
19157      s.lookahead = s.strstart - max_start;
19158      s.strstart = max_start;
19159      /*** FLUSH_BLOCK(s, 0); ***/
19160      flush_block_only(s, false);
19161      if (s.strm.avail_out === 0) {
19162        return BS_NEED_MORE;
19163      }
19164      /***/
19165
19166
19167    }
19168    /* Flush if we may have to slide, otherwise block_start may become
19169     * negative and the data will be gone:
19170     */
19171    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
19172      /*** FLUSH_BLOCK(s, 0); ***/
19173      flush_block_only(s, false);
19174      if (s.strm.avail_out === 0) {
19175        return BS_NEED_MORE;
19176      }
19177      /***/
19178    }
19179  }
19180
19181  s.insert = 0;
19182
19183  if (flush === Z_FINISH) {
19184    /*** FLUSH_BLOCK(s, 1); ***/
19185    flush_block_only(s, true);
19186    if (s.strm.avail_out === 0) {
19187      return BS_FINISH_STARTED;
19188    }
19189    /***/
19190    return BS_FINISH_DONE;
19191  }
19192
19193  if (s.strstart > s.block_start) {
19194    /*** FLUSH_BLOCK(s, 0); ***/
19195    flush_block_only(s, false);
19196    if (s.strm.avail_out === 0) {
19197      return BS_NEED_MORE;
19198    }
19199    /***/
19200  }
19201
19202  return BS_NEED_MORE;
19203}
19204
19205/* ===========================================================================
19206 * Compress as much as possible from the input stream, return the current
19207 * block state.
19208 * This function does not perform lazy evaluation of matches and inserts
19209 * new strings in the dictionary only for unmatched strings or for short
19210 * matches. It is used only for the fast compression options.
19211 */
19212function deflate_fast(s, flush) {
19213  var hash_head;        /* head of the hash chain */
19214  var bflush;           /* set if current block must be flushed */
19215
19216  for (;;) {
19217    /* Make sure that we always have enough lookahead, except
19218     * at the end of the input file. We need MAX_MATCH bytes
19219     * for the next match, plus MIN_MATCH bytes to insert the
19220     * string following the next match.
19221     */
19222    if (s.lookahead < MIN_LOOKAHEAD) {
19223      fill_window(s);
19224      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
19225        return BS_NEED_MORE;
19226      }
19227      if (s.lookahead === 0) {
19228        break; /* flush the current block */
19229      }
19230    }
19231
19232    /* Insert the string window[strstart .. strstart+2] in the
19233     * dictionary, and set hash_head to the head of the hash chain:
19234     */
19235    hash_head = 0/*NIL*/;
19236    if (s.lookahead >= MIN_MATCH) {
19237      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
19238      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
19239      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
19240      s.head[s.ins_h] = s.strstart;
19241      /***/
19242    }
19243
19244    /* Find the longest match, discarding those <= prev_length.
19245     * At this point we have always match_length < MIN_MATCH
19246     */
19247    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
19248      /* To simplify the code, we prevent matches with the string
19249       * of window index 0 (in particular we have to avoid a match
19250       * of the string with itself at the start of the input file).
19251       */
19252      s.match_length = longest_match(s, hash_head);
19253      /* longest_match() sets match_start */
19254    }
19255    if (s.match_length >= MIN_MATCH) {
19256      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
19257
19258      /*** _tr_tally_dist(s, s.strstart - s.match_start,
19259                     s.match_length - MIN_MATCH, bflush); ***/
19260      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
19261
19262      s.lookahead -= s.match_length;
19263
19264      /* Insert new strings in the hash table only if the match length
19265       * is not too large. This saves time but degrades compression.
19266       */
19267      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
19268        s.match_length--; /* string at strstart already in table */
19269        do {
19270          s.strstart++;
19271          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
19272          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
19273          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
19274          s.head[s.ins_h] = s.strstart;
19275          /***/
19276          /* strstart never exceeds WSIZE-MAX_MATCH, so there are
19277           * always MIN_MATCH bytes ahead.
19278           */
19279        } while (--s.match_length !== 0);
19280        s.strstart++;
19281      } else
19282      {
19283        s.strstart += s.match_length;
19284        s.match_length = 0;
19285        s.ins_h = s.window[s.strstart];
19286        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
19287        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;
19288
19289//#if MIN_MATCH != 3
19290//                Call UPDATE_HASH() MIN_MATCH-3 more times
19291//#endif
19292        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
19293         * matter since it will be recomputed at next deflate call.
19294         */
19295      }
19296    } else {
19297      /* No match, output a literal byte */
19298      //Tracevv((stderr,"%c", s.window[s.strstart]));
19299      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
19300      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
19301
19302      s.lookahead--;
19303      s.strstart++;
19304    }
19305    if (bflush) {
19306      /*** FLUSH_BLOCK(s, 0); ***/
19307      flush_block_only(s, false);
19308      if (s.strm.avail_out === 0) {
19309        return BS_NEED_MORE;
19310      }
19311      /***/
19312    }
19313  }
19314  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);
19315  if (flush === Z_FINISH) {
19316    /*** FLUSH_BLOCK(s, 1); ***/
19317    flush_block_only(s, true);
19318    if (s.strm.avail_out === 0) {
19319      return BS_FINISH_STARTED;
19320    }
19321    /***/
19322    return BS_FINISH_DONE;
19323  }
19324  if (s.last_lit) {
19325    /*** FLUSH_BLOCK(s, 0); ***/
19326    flush_block_only(s, false);
19327    if (s.strm.avail_out === 0) {
19328      return BS_NEED_MORE;
19329    }
19330    /***/
19331  }
19332  return BS_BLOCK_DONE;
19333}
19334
19335/* ===========================================================================
19336 * Same as above, but achieves better compression. We use a lazy
19337 * evaluation for matches: a match is finally adopted only if there is
19338 * no better match at the next window position.
19339 */
19340function deflate_slow(s, flush) {
19341  var hash_head;          /* head of hash chain */
19342  var bflush;              /* set if current block must be flushed */
19343
19344  var max_insert;
19345
19346  /* Process the input block. */
19347  for (;;) {
19348    /* Make sure that we always have enough lookahead, except
19349     * at the end of the input file. We need MAX_MATCH bytes
19350     * for the next match, plus MIN_MATCH bytes to insert the
19351     * string following the next match.
19352     */
19353    if (s.lookahead < MIN_LOOKAHEAD) {
19354      fill_window(s);
19355      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
19356        return BS_NEED_MORE;
19357      }
19358      if (s.lookahead === 0) { break; } /* flush the current block */
19359    }
19360
19361    /* Insert the string window[strstart .. strstart+2] in the
19362     * dictionary, and set hash_head to the head of the hash chain:
19363     */
19364    hash_head = 0/*NIL*/;
19365    if (s.lookahead >= MIN_MATCH) {
19366      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
19367      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
19368      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
19369      s.head[s.ins_h] = s.strstart;
19370      /***/
19371    }
19372
19373    /* Find the longest match, discarding those <= prev_length.
19374     */
19375    s.prev_length = s.match_length;
19376    s.prev_match = s.match_start;
19377    s.match_length = MIN_MATCH - 1;
19378
19379    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
19380        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
19381      /* To simplify the code, we prevent matches with the string
19382       * of window index 0 (in particular we have to avoid a match
19383       * of the string with itself at the start of the input file).
19384       */
19385      s.match_length = longest_match(s, hash_head);
19386      /* longest_match() sets match_start */
19387
19388      if (s.match_length <= 5 &&
19389         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {
19390
19391        /* If prev_match is also MIN_MATCH, match_start is garbage
19392         * but we will ignore the current match anyway.
19393         */
19394        s.match_length = MIN_MATCH - 1;
19395      }
19396    }
19397    /* If there was a match at the previous step and the current
19398     * match is not better, output the previous match:
19399     */
19400    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
19401      max_insert = s.strstart + s.lookahead - MIN_MATCH;
19402      /* Do not insert strings in hash table beyond this. */
19403
19404      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);
19405
19406      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
19407                     s.prev_length - MIN_MATCH, bflush);***/
19408      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);
19409      /* Insert in hash table all strings up to the end of the match.
19410       * strstart-1 and strstart are already inserted. If there is not
19411       * enough lookahead, the last two strings are not inserted in
19412       * the hash table.
19413       */
19414      s.lookahead -= s.prev_length - 1;
19415      s.prev_length -= 2;
19416      do {
19417        if (++s.strstart <= max_insert) {
19418          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
19419          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
19420          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
19421          s.head[s.ins_h] = s.strstart;
19422          /***/
19423        }
19424      } while (--s.prev_length !== 0);
19425      s.match_available = 0;
19426      s.match_length = MIN_MATCH - 1;
19427      s.strstart++;
19428
19429      if (bflush) {
19430        /*** FLUSH_BLOCK(s, 0); ***/
19431        flush_block_only(s, false);
19432        if (s.strm.avail_out === 0) {
19433          return BS_NEED_MORE;
19434        }
19435        /***/
19436      }
19437
19438    } else if (s.match_available) {
19439      /* If there was no match at the previous position, output a
19440       * single literal. If there was a match but the current match
19441       * is longer, truncate the previous match to a single literal.
19442       */
19443      //Tracevv((stderr,"%c", s->window[s->strstart-1]));
19444      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
19445      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
19446
19447      if (bflush) {
19448        /*** FLUSH_BLOCK_ONLY(s, 0) ***/
19449        flush_block_only(s, false);
19450        /***/
19451      }
19452      s.strstart++;
19453      s.lookahead--;
19454      if (s.strm.avail_out === 0) {
19455        return BS_NEED_MORE;
19456      }
19457    } else {
19458      /* There is no previous match to compare with, wait for
19459       * the next step to decide.
19460       */
19461      s.match_available = 1;
19462      s.strstart++;
19463      s.lookahead--;
19464    }
19465  }
19466  //Assert (flush != Z_NO_FLUSH, "no flush?");
19467  if (s.match_available) {
19468    //Tracevv((stderr,"%c", s->window[s->strstart-1]));
19469    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
19470    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
19471
19472    s.match_available = 0;
19473  }
19474  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
19475  if (flush === Z_FINISH) {
19476    /*** FLUSH_BLOCK(s, 1); ***/
19477    flush_block_only(s, true);
19478    if (s.strm.avail_out === 0) {
19479      return BS_FINISH_STARTED;
19480    }
19481    /***/
19482    return BS_FINISH_DONE;
19483  }
19484  if (s.last_lit) {
19485    /*** FLUSH_BLOCK(s, 0); ***/
19486    flush_block_only(s, false);
19487    if (s.strm.avail_out === 0) {
19488      return BS_NEED_MORE;
19489    }
19490    /***/
19491  }
19492
19493  return BS_BLOCK_DONE;
19494}
19495
19496
19497/* ===========================================================================
19498 * For Z_RLE, simply look for runs of bytes, generate matches only of distance
19499 * one.  Do not maintain a hash table.  (It will be regenerated if this run of
19500 * deflate switches away from Z_RLE.)
19501 */
19502function deflate_rle(s, flush) {
19503  var bflush;            /* set if current block must be flushed */
19504  var prev;              /* byte at distance one to match */
19505  var scan, strend;      /* scan goes up to strend for length of run */
19506
19507  var _win = s.window;
19508
19509  for (;;) {
19510    /* Make sure that we always have enough lookahead, except
19511     * at the end of the input file. We need MAX_MATCH bytes
19512     * for the longest run, plus one for the unrolled loop.
19513     */
19514    if (s.lookahead <= MAX_MATCH) {
19515      fill_window(s);
19516      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
19517        return BS_NEED_MORE;
19518      }
19519      if (s.lookahead === 0) { break; } /* flush the current block */
19520    }
19521
19522    /* See how many times the previous byte repeats */
19523    s.match_length = 0;
19524    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
19525      scan = s.strstart - 1;
19526      prev = _win[scan];
19527      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
19528        strend = s.strstart + MAX_MATCH;
19529        do {
19530          /*jshint noempty:false*/
19531        } while (prev === _win[++scan] && prev === _win[++scan] &&
19532                 prev === _win[++scan] && prev === _win[++scan] &&
19533                 prev === _win[++scan] && prev === _win[++scan] &&
19534                 prev === _win[++scan] && prev === _win[++scan] &&
19535                 scan < strend);
19536        s.match_length = MAX_MATCH - (strend - scan);
19537        if (s.match_length > s.lookahead) {
19538          s.match_length = s.lookahead;
19539        }
19540      }
19541      //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
19542    }
19543
19544    /* Emit match if have run of MIN_MATCH or longer, else emit literal */
19545    if (s.match_length >= MIN_MATCH) {
19546      //check_match(s, s.strstart, s.strstart - 1, s.match_length);
19547
19548      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
19549      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
19550
19551      s.lookahead -= s.match_length;
19552      s.strstart += s.match_length;
19553      s.match_length = 0;
19554    } else {
19555      /* No match, output a literal byte */
19556      //Tracevv((stderr,"%c", s->window[s->strstart]));
19557      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
19558      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
19559
19560      s.lookahead--;
19561      s.strstart++;
19562    }
19563    if (bflush) {
19564      /*** FLUSH_BLOCK(s, 0); ***/
19565      flush_block_only(s, false);
19566      if (s.strm.avail_out === 0) {
19567        return BS_NEED_MORE;
19568      }
19569      /***/
19570    }
19571  }
19572  s.insert = 0;
19573  if (flush === Z_FINISH) {
19574    /*** FLUSH_BLOCK(s, 1); ***/
19575    flush_block_only(s, true);
19576    if (s.strm.avail_out === 0) {
19577      return BS_FINISH_STARTED;
19578    }
19579    /***/
19580    return BS_FINISH_DONE;
19581  }
19582  if (s.last_lit) {
19583    /*** FLUSH_BLOCK(s, 0); ***/
19584    flush_block_only(s, false);
19585    if (s.strm.avail_out === 0) {
19586      return BS_NEED_MORE;
19587    }
19588    /***/
19589  }
19590  return BS_BLOCK_DONE;
19591}
19592
19593/* ===========================================================================
19594 * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
19595 * (It will be regenerated if this run of deflate switches away from Huffman.)
19596 */
19597function deflate_huff(s, flush) {
19598  var bflush;             /* set if current block must be flushed */
19599
19600  for (;;) {
19601    /* Make sure that we have a literal to write. */
19602    if (s.lookahead === 0) {
19603      fill_window(s);
19604      if (s.lookahead === 0) {
19605        if (flush === Z_NO_FLUSH) {
19606          return BS_NEED_MORE;
19607        }
19608        break;      /* flush the current block */
19609      }
19610    }
19611
19612    /* Output a literal byte */
19613    s.match_length = 0;
19614    //Tracevv((stderr,"%c", s->window[s->strstart]));
19615    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
19616    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
19617    s.lookahead--;
19618    s.strstart++;
19619    if (bflush) {
19620      /*** FLUSH_BLOCK(s, 0); ***/
19621      flush_block_only(s, false);
19622      if (s.strm.avail_out === 0) {
19623        return BS_NEED_MORE;
19624      }
19625      /***/
19626    }
19627  }
19628  s.insert = 0;
19629  if (flush === Z_FINISH) {
19630    /*** FLUSH_BLOCK(s, 1); ***/
19631    flush_block_only(s, true);
19632    if (s.strm.avail_out === 0) {
19633      return BS_FINISH_STARTED;
19634    }
19635    /***/
19636    return BS_FINISH_DONE;
19637  }
19638  if (s.last_lit) {
19639    /*** FLUSH_BLOCK(s, 0); ***/
19640    flush_block_only(s, false);
19641    if (s.strm.avail_out === 0) {
19642      return BS_NEED_MORE;
19643    }
19644    /***/
19645  }
19646  return BS_BLOCK_DONE;
19647}
19648
19649/* Values for max_lazy_match, good_match and max_chain_length, depending on
19650 * the desired pack level (0..9). The values given below have been tuned to
19651 * exclude worst case performance for pathological files. Better values may be
19652 * found for specific files.
19653 */
19654function Config(good_length, max_lazy, nice_length, max_chain, func) {
19655  this.good_length = good_length;
19656  this.max_lazy = max_lazy;
19657  this.nice_length = nice_length;
19658  this.max_chain = max_chain;
19659  this.func = func;
19660}
19661
19662var configuration_table;
19663
19664configuration_table = [
19665  /*      good lazy nice chain */
19666  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */
19667  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */
19668  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */
19669  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */
19670
19671  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */
19672  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */
19673  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */
19674  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */
19675  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */
19676  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */
19677];
19678
19679
19680/* ===========================================================================
19681 * Initialize the "longest match" routines for a new zlib stream
19682 */
19683function lm_init(s) {
19684  s.window_size = 2 * s.w_size;
19685
19686  /*** CLEAR_HASH(s); ***/
19687  zero(s.head); // Fill with NIL (= 0);
19688
19689  /* Set the default configuration parameters:
19690   */
19691  s.max_lazy_match = configuration_table[s.level].max_lazy;
19692  s.good_match = configuration_table[s.level].good_length;
19693  s.nice_match = configuration_table[s.level].nice_length;
19694  s.max_chain_length = configuration_table[s.level].max_chain;
19695
19696  s.strstart = 0;
19697  s.block_start = 0;
19698  s.lookahead = 0;
19699  s.insert = 0;
19700  s.match_length = s.prev_length = MIN_MATCH - 1;
19701  s.match_available = 0;
19702  s.ins_h = 0;
19703}
19704
19705
19706function DeflateState() {
19707  this.strm = null;            /* pointer back to this zlib stream */
19708  this.status = 0;            /* as the name implies */
19709  this.pending_buf = null;      /* output still pending */
19710  this.pending_buf_size = 0;  /* size of pending_buf */
19711  this.pending_out = 0;       /* next pending byte to output to the stream */
19712  this.pending = 0;           /* nb of bytes in the pending buffer */
19713  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
19714  this.gzhead = null;         /* gzip header information to write */
19715  this.gzindex = 0;           /* where in extra, name, or comment */
19716  this.method = Z_DEFLATED; /* can only be DEFLATED */
19717  this.last_flush = -1;   /* value of flush param for previous deflate call */
19718
19719  this.w_size = 0;  /* LZ77 window size (32K by default) */
19720  this.w_bits = 0;  /* log2(w_size)  (8..16) */
19721  this.w_mask = 0;  /* w_size - 1 */
19722
19723  this.window = null;
19724  /* Sliding window. Input bytes are read into the second half of the window,
19725   * and move to the first half later to keep a dictionary of at least wSize
19726   * bytes. With this organization, matches are limited to a distance of
19727   * wSize-MAX_MATCH bytes, but this ensures that IO is always
19728   * performed with a length multiple of the block size.
19729   */
19730
19731  this.window_size = 0;
19732  /* Actual size of window: 2*wSize, except when the user input buffer
19733   * is directly used as sliding window.
19734   */
19735
19736  this.prev = null;
19737  /* Link to older string with same hash index. To limit the size of this
19738   * array to 64K, this link is maintained only for the last 32K strings.
19739   * An index in this array is thus a window index modulo 32K.
19740   */
19741
19742  this.head = null;   /* Heads of the hash chains or NIL. */
19743
19744  this.ins_h = 0;       /* hash index of string to be inserted */
19745  this.hash_size = 0;   /* number of elements in hash table */
19746  this.hash_bits = 0;   /* log2(hash_size) */
19747  this.hash_mask = 0;   /* hash_size-1 */
19748
19749  this.hash_shift = 0;
19750  /* Number of bits by which ins_h must be shifted at each input
19751   * step. It must be such that after MIN_MATCH steps, the oldest
19752   * byte no longer takes part in the hash key, that is:
19753   *   hash_shift * MIN_MATCH >= hash_bits
19754   */
19755
19756  this.block_start = 0;
19757  /* Window position at the beginning of the current output block. Gets
19758   * negative when the window is moved backwards.
19759   */
19760
19761  this.match_length = 0;      /* length of best match */
19762  this.prev_match = 0;        /* previous match */
19763  this.match_available = 0;   /* set if previous match exists */
19764  this.strstart = 0;          /* start of string to insert */
19765  this.match_start = 0;       /* start of matching string */
19766  this.lookahead = 0;         /* number of valid bytes ahead in window */
19767
19768  this.prev_length = 0;
19769  /* Length of the best match at previous step. Matches not greater than this
19770   * are discarded. This is used in the lazy match evaluation.
19771   */
19772
19773  this.max_chain_length = 0;
19774  /* To speed up deflation, hash chains are never searched beyond this
19775   * length.  A higher limit improves compression ratio but degrades the
19776   * speed.
19777   */
19778
19779  this.max_lazy_match = 0;
19780  /* Attempt to find a better match only when the current match is strictly
19781   * smaller than this value. This mechanism is used only for compression
19782   * levels >= 4.
19783   */
19784  // That's alias to max_lazy_match, don't use directly
19785  //this.max_insert_length = 0;
19786  /* Insert new strings in the hash table only if the match length is not
19787   * greater than this length. This saves time but degrades compression.
19788   * max_insert_length is used only for compression levels <= 3.
19789   */
19790
19791  this.level = 0;     /* compression level (1..9) */
19792  this.strategy = 0;  /* favor or force Huffman coding*/
19793
19794  this.good_match = 0;
19795  /* Use a faster search when the previous match is longer than this */
19796
19797  this.nice_match = 0; /* Stop searching when current match exceeds this */
19798
19799              /* used by trees.c: */
19800
19801  /* Didn't use ct_data typedef below to suppress compiler warning */
19802
19803  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
19804  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
19805  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
19806
19807  // Use flat array of DOUBLE size, with interleaved fata,
19808  // because JS does not support effective
19809  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);
19810  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);
19811  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);
19812  zero(this.dyn_ltree);
19813  zero(this.dyn_dtree);
19814  zero(this.bl_tree);
19815
19816  this.l_desc   = null;         /* desc. for literal tree */
19817  this.d_desc   = null;         /* desc. for distance tree */
19818  this.bl_desc  = null;         /* desc. for bit length tree */
19819
19820  //ush bl_count[MAX_BITS+1];
19821  this.bl_count = new utils.Buf16(MAX_BITS + 1);
19822  /* number of codes at each bit length for an optimal tree */
19823
19824  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
19825  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */
19826  zero(this.heap);
19827
19828  this.heap_len = 0;               /* number of elements in the heap */
19829  this.heap_max = 0;               /* element of largest frequency */
19830  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
19831   * The same heap array is used to build all trees.
19832   */
19833
19834  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];
19835  zero(this.depth);
19836  /* Depth of each subtree used as tie breaker for trees of equal frequency
19837   */
19838
19839  this.l_buf = 0;          /* buffer index for literals or lengths */
19840
19841  this.lit_bufsize = 0;
19842  /* Size of match buffer for literals/lengths.  There are 4 reasons for
19843   * limiting lit_bufsize to 64K:
19844   *   - frequencies can be kept in 16 bit counters
19845   *   - if compression is not successful for the first block, all input
19846   *     data is still in the window so we can still emit a stored block even
19847   *     when input comes from standard input.  (This can also be done for
19848   *     all blocks if lit_bufsize is not greater than 32K.)
19849   *   - if compression is not successful for a file smaller than 64K, we can
19850   *     even emit a stored file instead of a stored block (saving 5 bytes).
19851   *     This is applicable only for zip (not gzip or zlib).
19852   *   - creating new Huffman trees less frequently may not provide fast
19853   *     adaptation to changes in the input data statistics. (Take for
19854   *     example a binary file with poorly compressible code followed by
19855   *     a highly compressible string table.) Smaller buffer sizes give
19856   *     fast adaptation but have of course the overhead of transmitting
19857   *     trees more frequently.
19858   *   - I can't count above 4
19859   */
19860
19861  this.last_lit = 0;      /* running index in l_buf */
19862
19863  this.d_buf = 0;
19864  /* Buffer index for distances. To simplify the code, d_buf and l_buf have
19865   * the same number of elements. To use different lengths, an extra flag
19866   * array would be necessary.
19867   */
19868
19869  this.opt_len = 0;       /* bit length of current block with optimal trees */
19870  this.static_len = 0;    /* bit length of current block with static trees */
19871  this.matches = 0;       /* number of string matches in current block */
19872  this.insert = 0;        /* bytes at end of window left to insert */
19873
19874
19875  this.bi_buf = 0;
19876  /* Output buffer. bits are inserted starting at the bottom (least
19877   * significant bits).
19878   */
19879  this.bi_valid = 0;
19880  /* Number of valid bits in bi_buf.  All bits above the last valid bit
19881   * are always zero.
19882   */
19883
19884  // Used for window memory init. We safely ignore it for JS. That makes
19885  // sense only for pointers and memory check tools.
19886  //this.high_water = 0;
19887  /* High water mark offset in window for initialized bytes -- bytes above
19888   * this are set to zero in order to avoid memory check warnings when
19889   * longest match routines access bytes past the input.  This is then
19890   * updated to the new high water mark.
19891   */
19892}
19893
19894
19895function deflateResetKeep(strm) {
19896  var s;
19897
19898  if (!strm || !strm.state) {
19899    return err(strm, Z_STREAM_ERROR);
19900  }
19901
19902  strm.total_in = strm.total_out = 0;
19903  strm.data_type = Z_UNKNOWN;
19904
19905  s = strm.state;
19906  s.pending = 0;
19907  s.pending_out = 0;
19908
19909  if (s.wrap < 0) {
19910    s.wrap = -s.wrap;
19911    /* was made negative by deflate(..., Z_FINISH); */
19912  }
19913  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
19914  strm.adler = (s.wrap === 2) ?
19915    0  // crc32(0, Z_NULL, 0)
19916  :
19917    1; // adler32(0, Z_NULL, 0)
19918  s.last_flush = Z_NO_FLUSH;
19919  trees._tr_init(s);
19920  return Z_OK;
19921}
19922
19923
19924function deflateReset(strm) {
19925  var ret = deflateResetKeep(strm);
19926  if (ret === Z_OK) {
19927    lm_init(strm.state);
19928  }
19929  return ret;
19930}
19931
19932
19933function deflateSetHeader(strm, head) {
19934  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
19935  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }
19936  strm.state.gzhead = head;
19937  return Z_OK;
19938}
19939
19940
19941function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
19942  if (!strm) { // === Z_NULL
19943    return Z_STREAM_ERROR;
19944  }
19945  var wrap = 1;
19946
19947  if (level === Z_DEFAULT_COMPRESSION) {
19948    level = 6;
19949  }
19950
19951  if (windowBits < 0) { /* suppress zlib wrapper */
19952    wrap = 0;
19953    windowBits = -windowBits;
19954  }
19955
19956  else if (windowBits > 15) {
19957    wrap = 2;           /* write gzip wrapper instead */
19958    windowBits -= 16;
19959  }
19960
19961
19962  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||
19963    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
19964    strategy < 0 || strategy > Z_FIXED) {
19965    return err(strm, Z_STREAM_ERROR);
19966  }
19967
19968
19969  if (windowBits === 8) {
19970    windowBits = 9;
19971  }
19972  /* until 256-byte window bug fixed */
19973
19974  var s = new DeflateState();
19975
19976  strm.state = s;
19977  s.strm = strm;
19978
19979  s.wrap = wrap;
19980  s.gzhead = null;
19981  s.w_bits = windowBits;
19982  s.w_size = 1 << s.w_bits;
19983  s.w_mask = s.w_size - 1;
19984
19985  s.hash_bits = memLevel + 7;
19986  s.hash_size = 1 << s.hash_bits;
19987  s.hash_mask = s.hash_size - 1;
19988  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
19989
19990  s.window = new utils.Buf8(s.w_size * 2);
19991  s.head = new utils.Buf16(s.hash_size);
19992  s.prev = new utils.Buf16(s.w_size);
19993
19994  // Don't need mem init magic for JS.
19995  //s.high_water = 0;
vendor: 14,614 bytes, lines 19995-20489
19995  /* nothing written to s->window yet */
19996
19997  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
19998
19999  s.pending_buf_size = s.lit_bufsize * 4;
20000
20001  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
20002  //s->pending_buf = (uchf *) overlay;
20003  s.pending_buf = new utils.Buf8(s.pending_buf_size);
20004
20005  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)
20006  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
20007  s.d_buf = 1 * s.lit_bufsize;
20008
20009  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
20010  s.l_buf = (1 + 2) * s.lit_bufsize;
20011
20012  s.level = level;
20013  s.strategy = strategy;
20014  s.method = method;
20015
20016  return deflateReset(strm);
20017}
20018
20019function deflateInit(strm, level) {
20020  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
20021}
20022
20023
20024function deflate(strm, flush) {
20025  var old_flush, s;
20026  var beg, val; // for gzip header write only
20027
20028  if (!strm || !strm.state ||
20029    flush > Z_BLOCK || flush < 0) {
20030    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
20031  }
20032
20033  s = strm.state;
20034
20035  if (!strm.output ||
20036      (!strm.input && strm.avail_in !== 0) ||
20037      (s.status === FINISH_STATE && flush !== Z_FINISH)) {
20038    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);
20039  }
20040
20041  s.strm = strm; /* just in case */
20042  old_flush = s.last_flush;
20043  s.last_flush = flush;
20044
20045  /* Write the header */
20046  if (s.status === INIT_STATE) {
20047
20048    if (s.wrap === 2) { // GZIP header
20049      strm.adler = 0;  //crc32(0L, Z_NULL, 0);
20050      put_byte(s, 31);
20051      put_byte(s, 139);
20052      put_byte(s, 8);
20053      if (!s.gzhead) { // s->gzhead == Z_NULL
20054        put_byte(s, 0);
20055        put_byte(s, 0);
20056        put_byte(s, 0);
20057        put_byte(s, 0);
20058        put_byte(s, 0);
20059        put_byte(s, s.level === 9 ? 2 :
20060                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
20061                     4 : 0));
20062        put_byte(s, OS_CODE);
20063        s.status = BUSY_STATE;
20064      }
20065      else {
20066        put_byte(s, (s.gzhead.text ? 1 : 0) +
20067                    (s.gzhead.hcrc ? 2 : 0) +
20068                    (!s.gzhead.extra ? 0 : 4) +
20069                    (!s.gzhead.name ? 0 : 8) +
20070                    (!s.gzhead.comment ? 0 : 16)
20071                );
20072        put_byte(s, s.gzhead.time & 0xff);
20073        put_byte(s, (s.gzhead.time >> 8) & 0xff);
20074        put_byte(s, (s.gzhead.time >> 16) & 0xff);
20075        put_byte(s, (s.gzhead.time >> 24) & 0xff);
20076        put_byte(s, s.level === 9 ? 2 :
20077                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
20078                     4 : 0));
20079        put_byte(s, s.gzhead.os & 0xff);
20080        if (s.gzhead.extra && s.gzhead.extra.length) {
20081          put_byte(s, s.gzhead.extra.length & 0xff);
20082          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
20083        }
20084        if (s.gzhead.hcrc) {
20085          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
20086        }
20087        s.gzindex = 0;
20088        s.status = EXTRA_STATE;
20089      }
20090    }
20091    else // DEFLATE header
20092    {
20093      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;
20094      var level_flags = -1;
20095
20096      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
20097        level_flags = 0;
20098      } else if (s.level < 6) {
20099        level_flags = 1;
20100      } else if (s.level === 6) {
20101        level_flags = 2;
20102      } else {
20103        level_flags = 3;
20104      }
20105      header |= (level_flags << 6);
20106      if (s.strstart !== 0) { header |= PRESET_DICT; }
20107      header += 31 - (header % 31);
20108
20109      s.status = BUSY_STATE;
20110      putShortMSB(s, header);
20111
20112      /* Save the adler32 of the preset dictionary: */
20113      if (s.strstart !== 0) {
20114        putShortMSB(s, strm.adler >>> 16);
20115        putShortMSB(s, strm.adler & 0xffff);
20116      }
20117      strm.adler = 1; // adler32(0L, Z_NULL, 0);
20118    }
20119  }
20120
20121//#ifdef GZIP
20122  if (s.status === EXTRA_STATE) {
20123    if (s.gzhead.extra/* != Z_NULL*/) {
20124      beg = s.pending;  /* start of bytes to update crc */
20125
20126      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
20127        if (s.pending === s.pending_buf_size) {
20128          if (s.gzhead.hcrc && s.pending > beg) {
20129            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
20130          }
20131          flush_pending(strm);
20132          beg = s.pending;
20133          if (s.pending === s.pending_buf_size) {
20134            break;
20135          }
20136        }
20137        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
20138        s.gzindex++;
20139      }
20140      if (s.gzhead.hcrc && s.pending > beg) {
20141        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
20142      }
20143      if (s.gzindex === s.gzhead.extra.length) {
20144        s.gzindex = 0;
20145        s.status = NAME_STATE;
20146      }
20147    }
20148    else {
20149      s.status = NAME_STATE;
20150    }
20151  }
20152  if (s.status === NAME_STATE) {
20153    if (s.gzhead.name/* != Z_NULL*/) {
20154      beg = s.pending;  /* start of bytes to update crc */
20155      //int val;
20156
20157      do {
20158        if (s.pending === s.pending_buf_size) {
20159          if (s.gzhead.hcrc && s.pending > beg) {
20160            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
20161          }
20162          flush_pending(strm);
20163          beg = s.pending;
20164          if (s.pending === s.pending_buf_size) {
20165            val = 1;
20166            break;
20167          }
20168        }
20169        // JS specific: little magic to add zero terminator to end of string
20170        if (s.gzindex < s.gzhead.name.length) {
20171          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
20172        } else {
20173          val = 0;
20174        }
20175        put_byte(s, val);
20176      } while (val !== 0);
20177
20178      if (s.gzhead.hcrc && s.pending > beg) {
20179        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
20180      }
20181      if (val === 0) {
20182        s.gzindex = 0;
20183        s.status = COMMENT_STATE;
20184      }
20185    }
20186    else {
20187      s.status = COMMENT_STATE;
20188    }
20189  }
20190  if (s.status === COMMENT_STATE) {
20191    if (s.gzhead.comment/* != Z_NULL*/) {
20192      beg = s.pending;  /* start of bytes to update crc */
20193      //int val;
20194
20195      do {
20196        if (s.pending === s.pending_buf_size) {
20197          if (s.gzhead.hcrc && s.pending > beg) {
20198            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
20199          }
20200          flush_pending(strm);
20201          beg = s.pending;
20202          if (s.pending === s.pending_buf_size) {
20203            val = 1;
20204            break;
20205          }
20206        }
20207        // JS specific: little magic to add zero terminator to end of string
20208        if (s.gzindex < s.gzhead.comment.length) {
20209          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
20210        } else {
20211          val = 0;
20212        }
20213        put_byte(s, val);
20214      } while (val !== 0);
20215
20216      if (s.gzhead.hcrc && s.pending > beg) {
20217        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
20218      }
20219      if (val === 0) {
20220        s.status = HCRC_STATE;
20221      }
20222    }
20223    else {
20224      s.status = HCRC_STATE;
20225    }
20226  }
20227  if (s.status === HCRC_STATE) {
20228    if (s.gzhead.hcrc) {
20229      if (s.pending + 2 > s.pending_buf_size) {
20230        flush_pending(strm);
20231      }
20232      if (s.pending + 2 <= s.pending_buf_size) {
20233        put_byte(s, strm.adler & 0xff);
20234        put_byte(s, (strm.adler >> 8) & 0xff);
20235        strm.adler = 0; //crc32(0L, Z_NULL, 0);
20236        s.status = BUSY_STATE;
20237      }
20238    }
20239    else {
20240      s.status = BUSY_STATE;
20241    }
20242  }
20243//#endif
20244
20245  /* Flush as much pending output as possible */
20246  if (s.pending !== 0) {
20247    flush_pending(strm);
20248    if (strm.avail_out === 0) {
20249      /* Since avail_out is 0, deflate will be called again with
20250       * more output space, but possibly with both pending and
20251       * avail_in equal to zero. There won't be anything to do,
20252       * but this is not an error situation so make sure we
20253       * return OK instead of BUF_ERROR at next call of deflate:
20254       */
20255      s.last_flush = -1;
20256      return Z_OK;
20257    }
20258
20259    /* Make sure there is something to do and avoid duplicate consecutive
20260     * flushes. For repeated and useless calls with Z_FINISH, we keep
20261     * returning Z_STREAM_END instead of Z_BUF_ERROR.
20262     */
20263  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
20264    flush !== Z_FINISH) {
20265    return err(strm, Z_BUF_ERROR);
20266  }
20267
20268  /* User must not provide more input after the first FINISH: */
20269  if (s.status === FINISH_STATE && strm.avail_in !== 0) {
20270    return err(strm, Z_BUF_ERROR);
20271  }
20272
20273  /* Start a new block or continue the current one.
20274   */
20275  if (strm.avail_in !== 0 || s.lookahead !== 0 ||
20276    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {
20277    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
20278      (s.strategy === Z_RLE ? deflate_rle(s, flush) :
20279        configuration_table[s.level].func(s, flush));
20280
20281    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
20282      s.status = FINISH_STATE;
20283    }
20284    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
20285      if (strm.avail_out === 0) {
20286        s.last_flush = -1;
20287        /* avoid BUF_ERROR next call, see above */
20288      }
20289      return Z_OK;
20290      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
20291       * of deflate should use the same flush parameter to make sure
20292       * that the flush is complete. So we don't have to output an
20293       * empty block here, this will be done at next call. This also
20294       * ensures that for a very small output buffer, we emit at most
20295       * one empty block.
20296       */
20297    }
20298    if (bstate === BS_BLOCK_DONE) {
20299      if (flush === Z_PARTIAL_FLUSH) {
20300        trees._tr_align(s);
20301      }
20302      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
20303
20304        trees._tr_stored_block(s, 0, 0, false);
20305        /* For a full flush, this empty block will be recognized
20306         * as a special marker by inflate_sync().
20307         */
20308        if (flush === Z_FULL_FLUSH) {
20309          /*** CLEAR_HASH(s); ***/             /* forget history */
20310          zero(s.head); // Fill with NIL (= 0);
20311
20312          if (s.lookahead === 0) {
20313            s.strstart = 0;
20314            s.block_start = 0;
20315            s.insert = 0;
20316          }
20317        }
20318      }
20319      flush_pending(strm);
20320      if (strm.avail_out === 0) {
20321        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
20322        return Z_OK;
20323      }
20324    }
20325  }
20326  //Assert(strm->avail_out > 0, "bug2");
20327  //if (strm.avail_out <= 0) { throw new Error("bug2");}
20328
20329  if (flush !== Z_FINISH) { return Z_OK; }
20330  if (s.wrap <= 0) { return Z_STREAM_END; }
20331
20332  /* Write the trailer */
20333  if (s.wrap === 2) {
20334    put_byte(s, strm.adler & 0xff);
20335    put_byte(s, (strm.adler >> 8) & 0xff);
20336    put_byte(s, (strm.adler >> 16) & 0xff);
20337    put_byte(s, (strm.adler >> 24) & 0xff);
20338    put_byte(s, strm.total_in & 0xff);
20339    put_byte(s, (strm.total_in >> 8) & 0xff);
20340    put_byte(s, (strm.total_in >> 16) & 0xff);
20341    put_byte(s, (strm.total_in >> 24) & 0xff);
20342  }
20343  else
20344  {
20345    putShortMSB(s, strm.adler >>> 16);
20346    putShortMSB(s, strm.adler & 0xffff);
20347  }
20348
20349  flush_pending(strm);
20350  /* If avail_out is zero, the application will call deflate again
20351   * to flush the rest.
20352   */
20353  if (s.wrap > 0) { s.wrap = -s.wrap; }
20354  /* write the trailer only once! */
20355  return s.pending !== 0 ? Z_OK : Z_STREAM_END;
20356}
20357
20358function deflateEnd(strm) {
20359  var status;
20360
20361  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
20362    return Z_STREAM_ERROR;
20363  }
20364
20365  status = strm.state.status;
20366  if (status !== INIT_STATE &&
20367    status !== EXTRA_STATE &&
20368    status !== NAME_STATE &&
20369    status !== COMMENT_STATE &&
20370    status !== HCRC_STATE &&
20371    status !== BUSY_STATE &&
20372    status !== FINISH_STATE
20373  ) {
20374    return err(strm, Z_STREAM_ERROR);
20375  }
20376
20377  strm.state = null;
20378
20379  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
20380}
20381
20382
20383/* =========================================================================
20384 * Initializes the compression dictionary from the given byte
20385 * sequence without producing any compressed output.
20386 */
20387function deflateSetDictionary(strm, dictionary) {
20388  var dictLength = dictionary.length;
20389
20390  var s;
20391  var str, n;
20392  var wrap;
20393  var avail;
20394  var next;
20395  var input;
20396  var tmpDict;
20397
20398  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
20399    return Z_STREAM_ERROR;
20400  }
20401
20402  s = strm.state;
20403  wrap = s.wrap;
20404
20405  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {
20406    return Z_STREAM_ERROR;
20407  }
20408
20409  /* when using zlib wrappers, compute Adler-32 for provided dictionary */
20410  if (wrap === 1) {
20411    /* adler32(strm->adler, dictionary, dictLength); */
20412    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);
20413  }
20414
20415  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */
20416
20417  /* if dictionary would fill window, just replace the history */
20418  if (dictLength >= s.w_size) {
20419    if (wrap === 0) {            /* already empty otherwise */
20420      /*** CLEAR_HASH(s); ***/
20421      zero(s.head); // Fill with NIL (= 0);
20422      s.strstart = 0;
20423      s.block_start = 0;
20424      s.insert = 0;
20425    }
20426    /* use the tail */
20427    // dictionary = dictionary.slice(dictLength - s.w_size);
20428    tmpDict = new utils.Buf8(s.w_size);
20429    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);
20430    dictionary = tmpDict;
20431    dictLength = s.w_size;
20432  }
20433  /* insert dictionary into window and hash */
20434  avail = strm.avail_in;
20435  next = strm.next_in;
20436  input = strm.input;
20437  strm.avail_in = dictLength;
20438  strm.next_in = 0;
20439  strm.input = dictionary;
20440  fill_window(s);
20441  while (s.lookahead >= MIN_MATCH) {
20442    str = s.strstart;
20443    n = s.lookahead - (MIN_MATCH - 1);
20444    do {
20445      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
20446      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
20447
20448      s.prev[str & s.w_mask] = s.head[s.ins_h];
20449
20450      s.head[s.ins_h] = str;
20451      str++;
20452    } while (--n);
20453    s.strstart = str;
20454    s.lookahead = MIN_MATCH - 1;
20455    fill_window(s);
20456  }
20457  s.strstart += s.lookahead;
20458  s.block_start = s.strstart;
20459  s.insert = s.lookahead;
20460  s.lookahead = 0;
20461  s.match_length = s.prev_length = MIN_MATCH - 1;
20462  s.match_available = 0;
20463  strm.next_in = next;
20464  strm.input = input;
20465  strm.avail_in = avail;
20466  s.wrap = wrap;
20467  return Z_OK;
20468}
20469
20470
20471exports.deflateInit = deflateInit;
20472exports.deflateInit2 = deflateInit2;
20473exports.deflateReset = deflateReset;
20474exports.deflateResetKeep = deflateResetKeep;
20475exports.deflateSetHeader = deflateSetHeader;
20476exports.deflate = deflate;
20477exports.deflateEnd = deflateEnd;
20478exports.deflateSetDictionary = deflateSetDictionary;
20479exports.deflateInfo = 'pako deflate (from Nodeca project)';
20480
20481/* Not implemented
20482exports.deflateBound = deflateBound;
20483exports.deflateCopy = deflateCopy;
20484exports.deflateParams = deflateParams;
20485exports.deflatePending = deflatePending;
20486exports.deflatePrime = deflatePrime;
20487exports.deflateTune = deflateTune;
20488*/
20489
20490
20491/***/ }),
20492/* 155 */
20493/***/ (function(module, exports, __webpack_require__) {
20494
20495"use strict";
20496
20497
20498// (C) 1995-2013 Jean-loup Gailly and Mark Adler
20499// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
20500//
20501// This software is provided 'as-is', without any express or implied
20502// warranty. In no event will the authors be held liable for any damages
20503// arising from the use of this software.
20504//
20505// Permission is granted to anyone to use this software for any purpose,
20506// including commercial applications, and to alter it and redistribute it
20507// freely, subject to the following restrictions:
20508//
20509// 1. The origin of this software must not be misrepresented; you must not
20510//   claim that you wrote the original software. If you use this software
20511//   in a product, an acknowledgment in the product documentation would be
20512//   appreciated but is not required.
20513// 2. Altered source versions must be plainly marked as such, and must not be
20514//   misrepresented as being the original software.
20515// 3. This notice may not be removed or altered from any source distribution.
20516
20517var utils = __webpack_require__(34);
vendor: 5,572 bytes, lines 20517-20699
20517
20518
20519/* Public constants ==========================================================*/
20520/* ===========================================================================*/
20521
20522
20523//var Z_FILTERED          = 1;
20524//var Z_HUFFMAN_ONLY      = 2;
20525//var Z_RLE               = 3;
20526var Z_FIXED               = 4;
20527//var Z_DEFAULT_STRATEGY  = 0;
20528
20529/* Possible values of the data_type field (though see inflate()) */
20530var Z_BINARY              = 0;
20531var Z_TEXT                = 1;
20532//var Z_ASCII             = 1; // = Z_TEXT
20533var Z_UNKNOWN             = 2;
20534
20535/*============================================================================*/
20536
20537
20538function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
20539
20540// From zutil.h
20541
20542var STORED_BLOCK = 0;
20543var STATIC_TREES = 1;
20544var DYN_TREES    = 2;
20545/* The three kinds of block type */
20546
20547var MIN_MATCH    = 3;
20548var MAX_MATCH    = 258;
20549/* The minimum and maximum match lengths */
20550
20551// From deflate.h
20552/* ===========================================================================
20553 * Internal compression state.
20554 */
20555
20556var LENGTH_CODES  = 29;
20557/* number of length codes, not counting the special END_BLOCK code */
20558
20559var LITERALS      = 256;
20560/* number of literal bytes 0..255 */
20561
20562var L_CODES       = LITERALS + 1 + LENGTH_CODES;
20563/* number of Literal or Length codes, including the END_BLOCK code */
20564
20565var D_CODES       = 30;
20566/* number of distance codes */
20567
20568var BL_CODES      = 19;
20569/* number of codes used to transfer the bit lengths */
20570
20571var HEAP_SIZE     = 2 * L_CODES + 1;
20572/* maximum heap size */
20573
20574var MAX_BITS      = 15;
20575/* All codes must not exceed MAX_BITS bits */
20576
20577var Buf_size      = 16;
20578/* size of bit buffer in bi_buf */
20579
20580
20581/* ===========================================================================
20582 * Constants
20583 */
20584
20585var MAX_BL_BITS = 7;
20586/* Bit length codes must not exceed MAX_BL_BITS bits */
20587
20588var END_BLOCK   = 256;
20589/* end of block literal code */
20590
20591var REP_3_6     = 16;
20592/* repeat previous bit length 3-6 times (2 bits of repeat count) */
20593
20594var REPZ_3_10   = 17;
20595/* repeat a zero length 3-10 times  (3 bits of repeat count) */
20596
20597var REPZ_11_138 = 18;
20598/* repeat a zero length 11-138 times  (7 bits of repeat count) */
20599
20600/* eslint-disable comma-spacing,array-bracket-spacing */
20601var extra_lbits =   /* extra bits for each length code */
20602  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];
20603
20604var extra_dbits =   /* extra bits for each distance code */
20605  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];
20606
20607var extra_blbits =  /* extra bits for each bit length code */
20608  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];
20609
20610var bl_order =
20611  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];
20612/* eslint-enable comma-spacing,array-bracket-spacing */
20613
20614/* The lengths of the bit length codes are sent in order of decreasing
20615 * probability, to avoid transmitting the lengths for unused bit length codes.
20616 */
20617
20618/* ===========================================================================
20619 * Local data. These are initialized only once.
20620 */
20621
20622// We pre-fill arrays with 0 to avoid uninitialized gaps
20623
20624var DIST_CODE_LEN = 512; /* see definition of array dist_code below */
20625
20626// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1
20627var static_ltree  = new Array((L_CODES + 2) * 2);
20628zero(static_ltree);
20629/* The static literal tree. Since the bit lengths are imposed, there is no
20630 * need for the L_CODES extra codes used during heap construction. However
20631 * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
20632 * below).
20633 */
20634
20635var static_dtree  = new Array(D_CODES * 2);
20636zero(static_dtree);
20637/* The static distance tree. (Actually a trivial tree since all codes use
20638 * 5 bits.)
20639 */
20640
20641var _dist_code    = new Array(DIST_CODE_LEN);
20642zero(_dist_code);
20643/* Distance codes. The first 256 values correspond to the distances
20644 * 3 .. 258, the last 256 values correspond to the top 8 bits of
20645 * the 15 bit distances.
20646 */
20647
20648var _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);
20649zero(_length_code);
20650/* length code for each normalized match length (0 == MIN_MATCH) */
20651
20652var base_length   = new Array(LENGTH_CODES);
20653zero(base_length);
20654/* First normalized length for each code (0 = MIN_MATCH) */
20655
20656var base_dist     = new Array(D_CODES);
20657zero(base_dist);
20658/* First normalized distance for each code (0 = distance of 1) */
20659
20660
20661function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
20662
20663  this.static_tree  = static_tree;  /* static tree or NULL */
20664  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */
20665  this.extra_base   = extra_base;   /* base index for extra_bits */
20666  this.elems        = elems;        /* max number of elements in the tree */
20667  this.max_length   = max_length;   /* max bit length for the codes */
20668
20669  // show if `static_tree` has data or dummy - needed for monomorphic objects
20670  this.has_stree    = static_tree && static_tree.length;
20671}
20672
20673
20674var static_l_desc;
20675var static_d_desc;
20676var static_bl_desc;
20677
20678
20679function TreeDesc(dyn_tree, stat_desc) {
20680  this.dyn_tree = dyn_tree;     /* the dynamic tree */
20681  this.max_code = 0;            /* largest code with non zero frequency */
20682  this.stat_desc = stat_desc;   /* the corresponding static tree */
20683}
20684
20685
20686
20687function d_code(dist) {
20688  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
20689}
20690
20691
20692/* ===========================================================================
20693 * Output a short LSB first on the stream.
20694 * IN assertion: there is enough room in pendingBuf.
20695 */
20696function put_short(s, w) {
20697//    put_byte(s, (uch)((w) & 0xff));
20698//    put_byte(s, (uch)((ush)(w) >> 8));
20699  s.pending_buf[s.pending++] = (w) & 0xff;
vendor: 4,312 bytes, lines 20700-20837
20700  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
20701}
20702
20703
20704/* ===========================================================================
20705 * Send a value on a given number of bits.
20706 * IN assertion: length <= 16 and value fits in length bits.
20707 */
20708function send_bits(s, value, length) {
20709  if (s.bi_valid > (Buf_size - length)) {
20710    s.bi_buf |= (value << s.bi_valid) & 0xffff;
20711    put_short(s, s.bi_buf);
20712    s.bi_buf = value >> (Buf_size - s.bi_valid);
20713    s.bi_valid += length - Buf_size;
20714  } else {
20715    s.bi_buf |= (value << s.bi_valid) & 0xffff;
20716    s.bi_valid += length;
20717  }
20718}
20719
20720
20721function send_code(s, c, tree) {
20722  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);
20723}
20724
20725
20726/* ===========================================================================
20727 * Reverse the first len bits of a code, using straightforward code (a faster
20728 * method would use a table)
20729 * IN assertion: 1 <= len <= 15
20730 */
20731function bi_reverse(code, len) {
20732  var res = 0;
20733  do {
20734    res |= code & 1;
20735    code >>>= 1;
20736    res <<= 1;
20737  } while (--len > 0);
20738  return res >>> 1;
20739}
20740
20741
20742/* ===========================================================================
20743 * Flush the bit buffer, keeping at most 7 bits in it.
20744 */
20745function bi_flush(s) {
20746  if (s.bi_valid === 16) {
20747    put_short(s, s.bi_buf);
20748    s.bi_buf = 0;
20749    s.bi_valid = 0;
20750
20751  } else if (s.bi_valid >= 8) {
20752    s.pending_buf[s.pending++] = s.bi_buf & 0xff;
20753    s.bi_buf >>= 8;
20754    s.bi_valid -= 8;
20755  }
20756}
20757
20758
20759/* ===========================================================================
20760 * Compute the optimal bit lengths for a tree and update the total bit length
20761 * for the current block.
20762 * IN assertion: the fields freq and dad are set, heap[heap_max] and
20763 *    above are the tree nodes sorted by increasing frequency.
20764 * OUT assertions: the field len is set to the optimal bit length, the
20765 *     array bl_count contains the frequencies for each bit length.
20766 *     The length opt_len is updated; static_len is also updated if stree is
20767 *     not null.
20768 */
20769function gen_bitlen(s, desc)
20770//    deflate_state *s;
20771//    tree_desc *desc;    /* the tree descriptor */
20772{
20773  var tree            = desc.dyn_tree;
20774  var max_code        = desc.max_code;
20775  var stree           = desc.stat_desc.static_tree;
20776  var has_stree       = desc.stat_desc.has_stree;
20777  var extra           = desc.stat_desc.extra_bits;
20778  var base            = desc.stat_desc.extra_base;
20779  var max_length      = desc.stat_desc.max_length;
20780  var h;              /* heap index */
20781  var n, m;           /* iterate over the tree elements */
20782  var bits;           /* bit length */
20783  var xbits;          /* extra bits */
20784  var f;              /* frequency */
20785  var overflow = 0;   /* number of elements with bit length too large */
20786
20787  for (bits = 0; bits <= MAX_BITS; bits++) {
20788    s.bl_count[bits] = 0;
20789  }
20790
20791  /* In a first pass, compute the optimal bit lengths (which may
20792   * overflow in the case of the bit length tree).
20793   */
20794  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */
20795
20796  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
20797    n = s.heap[h];
20798    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
20799    if (bits > max_length) {
20800      bits = max_length;
20801      overflow++;
20802    }
20803    tree[n * 2 + 1]/*.Len*/ = bits;
20804    /* We overwrite tree[n].Dad which is no longer needed */
20805
20806    if (n > max_code) { continue; } /* not a leaf node */
20807
20808    s.bl_count[bits]++;
20809    xbits = 0;
20810    if (n >= base) {
20811      xbits = extra[n - base];
20812    }
20813    f = tree[n * 2]/*.Freq*/;
20814    s.opt_len += f * (bits + xbits);
20815    if (has_stree) {
20816      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);
20817    }
20818  }
20819  if (overflow === 0) { return; }
20820
20821  // Trace((stderr,"\nbit length overflow\n"));
20822  /* This happens for example on obj2 and pic of the Calgary corpus */
20823
20824  /* Find the first bit length which could increase: */
20825  do {
20826    bits = max_length - 1;
20827    while (s.bl_count[bits] === 0) { bits--; }
20828    s.bl_count[bits]--;      /* move one leaf down the tree */
20829    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */
20830    s.bl_count[max_length]--;
20831    /* The brother of the overflow item also moves one step up,
20832     * but this does not affect bl_count[max_length]
20833     */
20834    overflow -= 2;
20835  } while (overflow > 0);
20836
20837  /* Now recompute all bit lengths, scanning in increasing frequency.
vendor: 28,951 bytes, lines 20838-21718
20838   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
20839   * lengths instead of fixing only the wrong ones. This idea is taken
20840   * from 'ar' written by Haruhiko Okumura.)
20841   */
20842  for (bits = max_length; bits !== 0; bits--) {
20843    n = s.bl_count[bits];
20844    while (n !== 0) {
20845      m = s.heap[--h];
20846      if (m > max_code) { continue; }
20847      if (tree[m * 2 + 1]/*.Len*/ !== bits) {
20848        // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
20849        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;
20850        tree[m * 2 + 1]/*.Len*/ = bits;
20851      }
20852      n--;
20853    }
20854  }
20855}
20856
20857
20858/* ===========================================================================
20859 * Generate the codes for a given tree and bit counts (which need not be
20860 * optimal).
20861 * IN assertion: the array bl_count contains the bit length statistics for
20862 * the given tree and the field len is set for all tree elements.
20863 * OUT assertion: the field code is set for all tree elements of non
20864 *     zero code length.
20865 */
20866function gen_codes(tree, max_code, bl_count)
20867//    ct_data *tree;             /* the tree to decorate */
20868//    int max_code;              /* largest code with non zero frequency */
20869//    ushf *bl_count;            /* number of codes at each bit length */
20870{
20871  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */
20872  var code = 0;              /* running code value */
20873  var bits;                  /* bit index */
20874  var n;                     /* code index */
20875
20876  /* The distribution counts are first used to generate the code values
20877   * without bit reversal.
20878   */
20879  for (bits = 1; bits <= MAX_BITS; bits++) {
20880    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;
20881  }
20882  /* Check that the bit counts in bl_count are consistent. The last code
20883   * must be all ones.
20884   */
20885  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
20886  //        "inconsistent bit counts");
20887  //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
20888
20889  for (n = 0;  n <= max_code; n++) {
20890    var len = tree[n * 2 + 1]/*.Len*/;
20891    if (len === 0) { continue; }
20892    /* Now reverse the bits */
20893    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);
20894
20895    //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
20896    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
20897  }
20898}
20899
20900
20901/* ===========================================================================
20902 * Initialize the various 'constant' tables.
20903 */
20904function tr_static_init() {
20905  var n;        /* iterates over tree elements */
20906  var bits;     /* bit counter */
20907  var length;   /* length value */
20908  var code;     /* code value */
20909  var dist;     /* distance index */
20910  var bl_count = new Array(MAX_BITS + 1);
20911  /* number of codes at each bit length for an optimal tree */
20912
20913  // do check in _tr_init()
20914  //if (static_init_done) return;
20915
20916  /* For some embedded targets, global variables are not initialized: */
20917/*#ifdef NO_INIT_GLOBAL_POINTERS
20918  static_l_desc.static_tree = static_ltree;
20919  static_l_desc.extra_bits = extra_lbits;
20920  static_d_desc.static_tree = static_dtree;
20921  static_d_desc.extra_bits = extra_dbits;
20922  static_bl_desc.extra_bits = extra_blbits;
20923#endif*/
20924
20925  /* Initialize the mapping length (0..255) -> length code (0..28) */
20926  length = 0;
20927  for (code = 0; code < LENGTH_CODES - 1; code++) {
20928    base_length[code] = length;
20929    for (n = 0; n < (1 << extra_lbits[code]); n++) {
20930      _length_code[length++] = code;
20931    }
20932  }
20933  //Assert (length == 256, "tr_static_init: length != 256");
20934  /* Note that the length 255 (match length 258) can be represented
20935   * in two different ways: code 284 + 5 bits or code 285, so we
20936   * overwrite length_code[255] to use the best encoding:
20937   */
20938  _length_code[length - 1] = code;
20939
20940  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
20941  dist = 0;
20942  for (code = 0; code < 16; code++) {
20943    base_dist[code] = dist;
20944    for (n = 0; n < (1 << extra_dbits[code]); n++) {
20945      _dist_code[dist++] = code;
20946    }
20947  }
20948  //Assert (dist == 256, "tr_static_init: dist != 256");
20949  dist >>= 7; /* from now on, all distances are divided by 128 */
20950  for (; code < D_CODES; code++) {
20951    base_dist[code] = dist << 7;
20952    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {
20953      _dist_code[256 + dist++] = code;
20954    }
20955  }
20956  //Assert (dist == 256, "tr_static_init: 256+dist != 512");
20957
20958  /* Construct the codes of the static literal tree */
20959  for (bits = 0; bits <= MAX_BITS; bits++) {
20960    bl_count[bits] = 0;
20961  }
20962
20963  n = 0;
20964  while (n <= 143) {
20965    static_ltree[n * 2 + 1]/*.Len*/ = 8;
20966    n++;
20967    bl_count[8]++;
20968  }
20969  while (n <= 255) {
20970    static_ltree[n * 2 + 1]/*.Len*/ = 9;
20971    n++;
20972    bl_count[9]++;
20973  }
20974  while (n <= 279) {
20975    static_ltree[n * 2 + 1]/*.Len*/ = 7;
20976    n++;
20977    bl_count[7]++;
20978  }
20979  while (n <= 287) {
20980    static_ltree[n * 2 + 1]/*.Len*/ = 8;
20981    n++;
20982    bl_count[8]++;
20983  }
20984  /* Codes 286 and 287 do not exist, but we must include them in the
20985   * tree construction to get a canonical Huffman tree (longest code
20986   * all ones)
20987   */
20988  gen_codes(static_ltree, L_CODES + 1, bl_count);
20989
20990  /* The static distance tree is trivial: */
20991  for (n = 0; n < D_CODES; n++) {
20992    static_dtree[n * 2 + 1]/*.Len*/ = 5;
20993    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);
20994  }
20995
20996  // Now data ready and we can init static trees
20997  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);
20998  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);
20999  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);
21000
21001  //static_init_done = true;
21002}
21003
21004
21005/* ===========================================================================
21006 * Initialize a new block.
21007 */
21008function init_block(s) {
21009  var n; /* iterates over tree elements */
21010
21011  /* Initialize the trees. */
21012  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }
21013  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }
21014  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }
21015
21016  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;
21017  s.opt_len = s.static_len = 0;
21018  s.last_lit = s.matches = 0;
21019}
21020
21021
21022/* ===========================================================================
21023 * Flush the bit buffer and align the output on a byte boundary
21024 */
21025function bi_windup(s)
21026{
21027  if (s.bi_valid > 8) {
21028    put_short(s, s.bi_buf);
21029  } else if (s.bi_valid > 0) {
21030    //put_byte(s, (Byte)s->bi_buf);
21031    s.pending_buf[s.pending++] = s.bi_buf;
21032  }
21033  s.bi_buf = 0;
21034  s.bi_valid = 0;
21035}
21036
21037/* ===========================================================================
21038 * Copy a stored block, storing first the length and its
21039 * one's complement if requested.
21040 */
21041function copy_block(s, buf, len, header)
21042//DeflateState *s;
21043//charf    *buf;    /* the input data */
21044//unsigned len;     /* its length */
21045//int      header;  /* true if block header must be written */
21046{
21047  bi_windup(s);        /* align on byte boundary */
21048
21049  if (header) {
21050    put_short(s, len);
21051    put_short(s, ~len);
21052  }
21053//  while (len--) {
21054//    put_byte(s, *buf++);
21055//  }
21056  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
21057  s.pending += len;
21058}
21059
21060/* ===========================================================================
21061 * Compares to subtrees, using the tree depth as tie breaker when
21062 * the subtrees have equal frequency. This minimizes the worst case length.
21063 */
21064function smaller(tree, n, m, depth) {
21065  var _n2 = n * 2;
21066  var _m2 = m * 2;
21067  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
21068         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
21069}
21070
21071/* ===========================================================================
21072 * Restore the heap property by moving down the tree starting at node k,
21073 * exchanging a node with the smallest of its two sons if necessary, stopping
21074 * when the heap property is re-established (each father smaller than its
21075 * two sons).
21076 */
21077function pqdownheap(s, tree, k)
21078//    deflate_state *s;
21079//    ct_data *tree;  /* the tree to restore */
21080//    int k;               /* node to move down */
21081{
21082  var v = s.heap[k];
21083  var j = k << 1;  /* left son of k */
21084  while (j <= s.heap_len) {
21085    /* Set j to the smallest of the two sons: */
21086    if (j < s.heap_len &&
21087      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {
21088      j++;
21089    }
21090    /* Exit if v is smaller than both sons */
21091    if (smaller(tree, v, s.heap[j], s.depth)) { break; }
21092
21093    /* Exchange v with the smallest son */
21094    s.heap[k] = s.heap[j];
21095    k = j;
21096
21097    /* And continue down the tree, setting j to the left son of k */
21098    j <<= 1;
21099  }
21100  s.heap[k] = v;
21101}
21102
21103
21104// inlined manually
21105// var SMALLEST = 1;
21106
21107/* ===========================================================================
21108 * Send the block data compressed using the given Huffman trees
21109 */
21110function compress_block(s, ltree, dtree)
21111//    deflate_state *s;
21112//    const ct_data *ltree; /* literal tree */
21113//    const ct_data *dtree; /* distance tree */
21114{
21115  var dist;           /* distance of matched string */
21116  var lc;             /* match length or unmatched char (if dist == 0) */
21117  var lx = 0;         /* running index in l_buf */
21118  var code;           /* the code to send */
21119  var extra;          /* number of extra bits to send */
21120
21121  if (s.last_lit !== 0) {
21122    do {
21123      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);
21124      lc = s.pending_buf[s.l_buf + lx];
21125      lx++;
21126
21127      if (dist === 0) {
21128        send_code(s, lc, ltree); /* send a literal byte */
21129        //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
21130      } else {
21131        /* Here, lc is the match length - MIN_MATCH */
21132        code = _length_code[lc];
21133        send_code(s, code + LITERALS + 1, ltree); /* send the length code */
21134        extra = extra_lbits[code];
21135        if (extra !== 0) {
21136          lc -= base_length[code];
21137          send_bits(s, lc, extra);       /* send the extra length bits */
21138        }
21139        dist--; /* dist is now the match distance - 1 */
21140        code = d_code(dist);
21141        //Assert (code < D_CODES, "bad d_code");
21142
21143        send_code(s, code, dtree);       /* send the distance code */
21144        extra = extra_dbits[code];
21145        if (extra !== 0) {
21146          dist -= base_dist[code];
21147          send_bits(s, dist, extra);   /* send the extra distance bits */
21148        }
21149      } /* literal or match pair ? */
21150
21151      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
21152      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
21153      //       "pendingBuf overflow");
21154
21155    } while (lx < s.last_lit);
21156  }
21157
21158  send_code(s, END_BLOCK, ltree);
21159}
21160
21161
21162/* ===========================================================================
21163 * Construct one Huffman tree and assigns the code bit strings and lengths.
21164 * Update the total bit length for the current block.
21165 * IN assertion: the field freq is set for all tree elements.
21166 * OUT assertions: the fields len and code are set to the optimal bit length
21167 *     and corresponding code. The length opt_len is updated; static_len is
21168 *     also updated if stree is not null. The field max_code is set.
21169 */
21170function build_tree(s, desc)
21171//    deflate_state *s;
21172//    tree_desc *desc; /* the tree descriptor */
21173{
21174  var tree     = desc.dyn_tree;
21175  var stree    = desc.stat_desc.static_tree;
21176  var has_stree = desc.stat_desc.has_stree;
21177  var elems    = desc.stat_desc.elems;
21178  var n, m;          /* iterate over heap elements */
21179  var max_code = -1; /* largest code with non zero frequency */
21180  var node;          /* new node being created */
21181
21182  /* Construct the initial heap, with least frequent element in
21183   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
21184   * heap[0] is not used.
21185   */
21186  s.heap_len = 0;
21187  s.heap_max = HEAP_SIZE;
21188
21189  for (n = 0; n < elems; n++) {
21190    if (tree[n * 2]/*.Freq*/ !== 0) {
21191      s.heap[++s.heap_len] = max_code = n;
21192      s.depth[n] = 0;
21193
21194    } else {
21195      tree[n * 2 + 1]/*.Len*/ = 0;
21196    }
21197  }
21198
21199  /* The pkzip format requires that at least one distance code exists,
21200   * and that at least one bit should be sent even if there is only one
21201   * possible code. So to avoid special checks later on we force at least
21202   * two codes of non zero frequency.
21203   */
21204  while (s.heap_len < 2) {
21205    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
21206    tree[node * 2]/*.Freq*/ = 1;
21207    s.depth[node] = 0;
21208    s.opt_len--;
21209
21210    if (has_stree) {
21211      s.static_len -= stree[node * 2 + 1]/*.Len*/;
21212    }
21213    /* node is 0 or 1 so it does not have extra bits */
21214  }
21215  desc.max_code = max_code;
21216
21217  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
21218   * establish sub-heaps of increasing lengths:
21219   */
21220  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }
21221
21222  /* Construct the Huffman tree by repeatedly combining the least two
21223   * frequent nodes.
21224   */
21225  node = elems;              /* next internal node of the tree */
21226  do {
21227    //pqremove(s, tree, n);  /* n = node of least frequency */
21228    /*** pqremove ***/
21229    n = s.heap[1/*SMALLEST*/];
21230    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
21231    pqdownheap(s, tree, 1/*SMALLEST*/);
21232    /***/
21233
21234    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */
21235
21236    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
21237    s.heap[--s.heap_max] = m;
21238
21239    /* Create a new node father of n and m */
21240    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
21241    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
21242    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;
21243
21244    /* and insert the new node in the heap */
21245    s.heap[1/*SMALLEST*/] = node++;
21246    pqdownheap(s, tree, 1/*SMALLEST*/);
21247
21248  } while (s.heap_len >= 2);
21249
21250  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];
21251
21252  /* At this point, the fields freq and dad are set. We can now
21253   * generate the bit lengths.
21254   */
21255  gen_bitlen(s, desc);
21256
21257  /* The field len is now set, we can generate the bit codes */
21258  gen_codes(tree, max_code, s.bl_count);
21259}
21260
21261
21262/* ===========================================================================
21263 * Scan a literal or distance tree to determine the frequencies of the codes
21264 * in the bit length tree.
21265 */
21266function scan_tree(s, tree, max_code)
21267//    deflate_state *s;
21268//    ct_data *tree;   /* the tree to be scanned */
21269//    int max_code;    /* and its largest code of non zero frequency */
21270{
21271  var n;                     /* iterates over all tree elements */
21272  var prevlen = -1;          /* last emitted length */
21273  var curlen;                /* length of current code */
21274
21275  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */
21276
21277  var count = 0;             /* repeat count of the current code */
21278  var max_count = 7;         /* max repeat count */
21279  var min_count = 4;         /* min repeat count */
21280
21281  if (nextlen === 0) {
21282    max_count = 138;
21283    min_count = 3;
21284  }
21285  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */
21286
21287  for (n = 0; n <= max_code; n++) {
21288    curlen = nextlen;
21289    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;
21290
21291    if (++count < max_count && curlen === nextlen) {
21292      continue;
21293
21294    } else if (count < min_count) {
21295      s.bl_tree[curlen * 2]/*.Freq*/ += count;
21296
21297    } else if (curlen !== 0) {
21298
21299      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
21300      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;
21301
21302    } else if (count <= 10) {
21303      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;
21304
21305    } else {
21306      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;
21307    }
21308
21309    count = 0;
21310    prevlen = curlen;
21311
21312    if (nextlen === 0) {
21313      max_count = 138;
21314      min_count = 3;
21315
21316    } else if (curlen === nextlen) {
21317      max_count = 6;
21318      min_count = 3;
21319
21320    } else {
21321      max_count = 7;
21322      min_count = 4;
21323    }
21324  }
21325}
21326
21327
21328/* ===========================================================================
21329 * Send a literal or distance tree in compressed form, using the codes in
21330 * bl_tree.
21331 */
21332function send_tree(s, tree, max_code)
21333//    deflate_state *s;
21334//    ct_data *tree; /* the tree to be scanned */
21335//    int max_code;       /* and its largest code of non zero frequency */
21336{
21337  var n;                     /* iterates over all tree elements */
21338  var prevlen = -1;          /* last emitted length */
21339  var curlen;                /* length of current code */
21340
21341  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */
21342
21343  var count = 0;             /* repeat count of the current code */
21344  var max_count = 7;         /* max repeat count */
21345  var min_count = 4;         /* min repeat count */
21346
21347  /* tree[max_code+1].Len = -1; */  /* guard already set */
21348  if (nextlen === 0) {
21349    max_count = 138;
21350    min_count = 3;
21351  }
21352
21353  for (n = 0; n <= max_code; n++) {
21354    curlen = nextlen;
21355    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;
21356
21357    if (++count < max_count && curlen === nextlen) {
21358      continue;
21359
21360    } else if (count < min_count) {
21361      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);
21362
21363    } else if (curlen !== 0) {
21364      if (curlen !== prevlen) {
21365        send_code(s, curlen, s.bl_tree);
21366        count--;
21367      }
21368      //Assert(count >= 3 && count <= 6, " 3_6?");
21369      send_code(s, REP_3_6, s.bl_tree);
21370      send_bits(s, count - 3, 2);
21371
21372    } else if (count <= 10) {
21373      send_code(s, REPZ_3_10, s.bl_tree);
21374      send_bits(s, count - 3, 3);
21375
21376    } else {
21377      send_code(s, REPZ_11_138, s.bl_tree);
21378      send_bits(s, count - 11, 7);
21379    }
21380
21381    count = 0;
21382    prevlen = curlen;
21383    if (nextlen === 0) {
21384      max_count = 138;
21385      min_count = 3;
21386
21387    } else if (curlen === nextlen) {
21388      max_count = 6;
21389      min_count = 3;
21390
21391    } else {
21392      max_count = 7;
21393      min_count = 4;
21394    }
21395  }
21396}
21397
21398
21399/* ===========================================================================
21400 * Construct the Huffman tree for the bit lengths and return the index in
21401 * bl_order of the last bit length code to send.
21402 */
21403function build_bl_tree(s) {
21404  var max_blindex;  /* index of last bit length code of non zero freq */
21405
21406  /* Determine the bit length frequencies for literal and distance trees */
21407  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
21408  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
21409
21410  /* Build the bit length tree: */
21411  build_tree(s, s.bl_desc);
21412  /* opt_len now includes the length of the tree representations, except
21413   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
21414   */
21415
21416  /* Determine the number of bit length codes to send. The pkzip format
21417   * requires that at least 4 bit length codes be sent. (appnote.txt says
21418   * 3 but the actual value used is 4.)
21419   */
21420  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
21421    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {
21422      break;
21423    }
21424  }
21425  /* Update opt_len to include the bit length tree and counts */
21426  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
21427  //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
21428  //        s->opt_len, s->static_len));
21429
21430  return max_blindex;
21431}
21432
21433
21434/* ===========================================================================
21435 * Send the header for a block using dynamic Huffman trees: the counts, the
21436 * lengths of the bit length codes, the literal tree and the distance tree.
21437 * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
21438 */
21439function send_all_trees(s, lcodes, dcodes, blcodes)
21440//    deflate_state *s;
21441//    int lcodes, dcodes, blcodes; /* number of codes for each tree */
21442{
21443  var rank;                    /* index in bl_order */
21444
21445  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
21446  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
21447  //        "too many codes");
21448  //Tracev((stderr, "\nbl counts: "));
21449  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */
21450  send_bits(s, dcodes - 1,   5);
21451  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */
21452  for (rank = 0; rank < blcodes; rank++) {
21453    //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
21454    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);
21455  }
21456  //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
21457
21458  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */
21459  //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
21460
21461  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */
21462  //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
21463}
21464
21465
21466/* ===========================================================================
21467 * Check if the data type is TEXT or BINARY, using the following algorithm:
21468 * - TEXT if the two conditions below are satisfied:
21469 *    a) There are no non-portable control characters belonging to the
21470 *       "black list" (0..6, 14..25, 28..31).
21471 *    b) There is at least one printable character belonging to the
21472 *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
21473 * - BINARY otherwise.
21474 * - The following partially-portable control characters form a
21475 *   "gray list" that is ignored in this detection algorithm:
21476 *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
21477 * IN assertion: the fields Freq of dyn_ltree are set.
21478 */
21479function detect_data_type(s) {
21480  /* black_mask is the bit mask of black-listed bytes
21481   * set bits 0..6, 14..25, and 28..31
21482   * 0xf3ffc07f = binary 11110011111111111100000001111111
21483   */
21484  var black_mask = 0xf3ffc07f;
21485  var n;
21486
21487  /* Check for non-textual ("black-listed") bytes. */
21488  for (n = 0; n <= 31; n++, black_mask >>>= 1) {
21489    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {
21490      return Z_BINARY;
21491    }
21492  }
21493
21494  /* Check for textual ("white-listed") bytes. */
21495  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
21496      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
21497    return Z_TEXT;
21498  }
21499  for (n = 32; n < LITERALS; n++) {
21500    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
21501      return Z_TEXT;
21502    }
21503  }
21504
21505  /* There are no "black-listed" or "white-listed" bytes:
21506   * this stream either is empty or has tolerated ("gray-listed") bytes only.
21507   */
21508  return Z_BINARY;
21509}
21510
21511
21512var static_init_done = false;
21513
21514/* ===========================================================================
21515 * Initialize the tree data structures for a new zlib stream.
21516 */
21517function _tr_init(s)
21518{
21519
21520  if (!static_init_done) {
21521    tr_static_init();
21522    static_init_done = true;
21523  }
21524
21525  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);
21526  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);
21527  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
21528
21529  s.bi_buf = 0;
21530  s.bi_valid = 0;
21531
21532  /* Initialize the first block of the first file: */
21533  init_block(s);
21534}
21535
21536
21537/* ===========================================================================
21538 * Send a stored block
21539 */
21540function _tr_stored_block(s, buf, stored_len, last)
21541//DeflateState *s;
21542//charf *buf;       /* input block */
21543//ulg stored_len;   /* length of input block */
21544//int last;         /* one if this is the last block for a file */
21545{
21546  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */
21547  copy_block(s, buf, stored_len, true); /* with header */
21548}
21549
21550
21551/* ===========================================================================
21552 * Send one empty static block to give enough lookahead for inflate.
21553 * This takes 10 bits, of which 7 may remain in the bit buffer.
21554 */
21555function _tr_align(s) {
21556  send_bits(s, STATIC_TREES << 1, 3);
21557  send_code(s, END_BLOCK, static_ltree);
21558  bi_flush(s);
21559}
21560
21561
21562/* ===========================================================================
21563 * Determine the best encoding for the current block: dynamic trees, static
21564 * trees or store, and output the encoded block to the zip file.
21565 */
21566function _tr_flush_block(s, buf, stored_len, last)
21567//DeflateState *s;
21568//charf *buf;       /* input block, or NULL if too old */
21569//ulg stored_len;   /* length of input block */
21570//int last;         /* one if this is the last block for a file */
21571{
21572  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */
21573  var max_blindex = 0;        /* index of last bit length code of non zero freq */
21574
21575  /* Build the Huffman trees unless a stored block is forced */
21576  if (s.level > 0) {
21577
21578    /* Check if the file is binary or text */
21579    if (s.strm.data_type === Z_UNKNOWN) {
21580      s.strm.data_type = detect_data_type(s);
21581    }
21582
21583    /* Construct the literal and distance trees */
21584    build_tree(s, s.l_desc);
21585    // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
21586    //        s->static_len));
21587
21588    build_tree(s, s.d_desc);
21589    // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
21590    //        s->static_len));
21591    /* At this point, opt_len and static_len are the total bit lengths of
21592     * the compressed block data, excluding the tree representations.
21593     */
21594
21595    /* Build the bit length tree for the above two trees, and get the index
21596     * in bl_order of the last bit length code to send.
21597     */
21598    max_blindex = build_bl_tree(s);
21599
21600    /* Determine the best encoding. Compute the block lengths in bytes. */
21601    opt_lenb = (s.opt_len + 3 + 7) >>> 3;
21602    static_lenb = (s.static_len + 3 + 7) >>> 3;
21603
21604    // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
21605    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
21606    //        s->last_lit));
21607
21608    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }
21609
21610  } else {
21611    // Assert(buf != (char*)0, "lost buf");
21612    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
21613  }
21614
21615  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {
21616    /* 4: two words for the lengths */
21617
21618    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
21619     * Otherwise we can't have processed more than WSIZE input bytes since
21620     * the last block flush, because compression would have been
21621     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
21622     * transform a block into a stored block.
21623     */
21624    _tr_stored_block(s, buf, stored_len, last);
21625
21626  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
21627
21628    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
21629    compress_block(s, static_ltree, static_dtree);
21630
21631  } else {
21632    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
21633    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
21634    compress_block(s, s.dyn_ltree, s.dyn_dtree);
21635  }
21636  // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
21637  /* The above check is made mod 2^32, for files larger than 512 MB
21638   * and uLong implemented on 32 bits.
21639   */
21640  init_block(s);
21641
21642  if (last) {
21643    bi_windup(s);
21644  }
21645  // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
21646  //       s->compressed_len-7*last));
21647}
21648
21649/* ===========================================================================
21650 * Save the match info and tally the frequency counts. Return true if
21651 * the current block must be flushed.
21652 */
21653function _tr_tally(s, dist, lc)
21654//    deflate_state *s;
21655//    unsigned dist;  /* distance of matched string */
21656//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
21657{
21658  //var out_length, in_length, dcode;
21659
21660  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;
21661  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
21662
21663  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
21664  s.last_lit++;
21665
21666  if (dist === 0) {
21667    /* lc is the unmatched char */
21668    s.dyn_ltree[lc * 2]/*.Freq*/++;
21669  } else {
21670    s.matches++;
21671    /* Here, lc is the match length - MIN_MATCH */
21672    dist--;             /* dist = match distance - 1 */
21673    //Assert((ush)dist < (ush)MAX_DIST(s) &&
21674    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
21675    //       (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");
21676
21677    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;
21678    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
21679  }
21680
21681// (!) This block is disabled in zlib defaults,
21682// don't enable it for binary compatibility
21683
21684//#ifdef TRUNCATE_BLOCK
21685//  /* Try to guess if it is profitable to stop the current block here */
21686//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
21687//    /* Compute an upper bound for the compressed length */
21688//    out_length = s.last_lit*8;
21689//    in_length = s.strstart - s.block_start;
21690//
21691//    for (dcode = 0; dcode < D_CODES; dcode++) {
21692//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
21693//    }
21694//    out_length >>>= 3;
21695//    //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
21696//    //       s->last_lit, in_length, out_length,
21697//    //       100L - out_length*100L/in_length));
21698//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
21699//      return true;
21700//    }
21701//  }
21702//#endif
21703
21704  return (s.last_lit === s.lit_bufsize - 1);
21705  /* We avoid equality with lit_bufsize because of wraparound at 64K
21706   * on 16 bit machines and because stored blocks are restricted to
21707   * 64K-1 bytes.
21708   */
21709}
21710
21711exports._tr_init  = _tr_init;
21712exports._tr_stored_block = _tr_stored_block;
21713exports._tr_flush_block  = _tr_flush_block;
21714exports._tr_tally = _tr_tally;
21715exports._tr_align = _tr_align;
21716
21717
21718/***/ }
21718),
21719/* 156 */
21720/***/ (function(module, exports, __webpack_require__) {
21721
21722"use strict";
21723
21724
21725// (C) 1995-2013 Jean-loup Gailly and Mark Adler
21726// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
21727//
21728// This software is provided 'as-is', without any express or implied
21729// warranty. In no event will the authors be held liable for any damages
21730// arising from the use of this software.
21731//
21732// Permission is granted to anyone to use this software for any purpose,
21733// including commercial applications, and to alter it and redistribute it
21734// freely, subject to the following restrictions:
21735//
21736// 1. The origin of this software must not be misrepresented; you must not
21737//   claim that you wrote the original software. If you use this software
21738//   in a product, an acknowledgment in the product documentation would be
21739//   appreciated but is not required.
21740// 2. Altered source versions must be plainly marked as such, and must not be
21741//   misrepresented as being the original software.
21742// 3. This notice may not be removed or altered from any source distribution.
21743
21744module.exports = {
21745  2:      'need dictionary',     /* Z_NEED_DICT       2  */
21746  1:      'stream end',          /* Z_STREAM_END      1  */
21747  0:      '',                    /* Z_OK              0  */
21748  '-1':   'file error',          /* Z_ERRNO         (-1) */
21749  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */
21750  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */
21751  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */
21752  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */
21753  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */
21754};
21755
21756
21757/***/ }),
21758/* 157 */
21759/***/ (function(module, exports, __webpack_require__) {
21760
21761"use strict";
21762
21763
21764// (C) 1995-2013 Jean-loup Gailly and Mark Adler
21765// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
21766//
21767// This software is provided 'as-is', without any express or implied
21768// warranty. In no event will the authors be held liable for any damages
21769// arising from the use of this software.
21770//
21771// Permission is granted to anyone to use this software for any purpose,
21772// including commercial applications, and to alter it and redistribute it
21773// freely, subject to the following restrictions:
21774//
21775// 1. The origin of this software must not be misrepresented; you must not
21776//   claim that you wrote the original software. If you use this software
21777//   in a product, an acknowledgment in the product documentation would be
21778//   appreciated but is not required.
21779// 2. Altered source versions must be plainly marked as such, and must not be
21780//   misrepresented as being the original software.
21781// 3. This notice may not be removed or altered from any source distribution.
21782
21783var utils         = __webpack_require__(34);
21784var adler32       = __webpack_require__(89);
21785var crc32         = __webpack_require__(90);
21786var inflate_fast  = __webpack_require__(158);
21787var inflate_table = __webpack_require__(159
vendor: 34,763 bytes, lines 21787-22852
21787);
21788
21789var CODES = 0;
21790var LENS = 1;
21791var DISTS = 2;
21792
21793/* Public constants ==========================================================*/
21794/* ===========================================================================*/
21795
21796
21797/* Allowed flush values; see deflate() and inflate() below for details */
21798//var Z_NO_FLUSH      = 0;
21799//var Z_PARTIAL_FLUSH = 1;
21800//var Z_SYNC_FLUSH    = 2;
21801//var Z_FULL_FLUSH    = 3;
21802var Z_FINISH        = 4;
21803var Z_BLOCK         = 5;
21804var Z_TREES         = 6;
21805
21806
21807/* Return codes for the compression/decompression functions. Negative values
21808 * are errors, positive values are used for special but normal events.
21809 */
21810var Z_OK            = 0;
21811var Z_STREAM_END    = 1;
21812var Z_NEED_DICT     = 2;
21813//var Z_ERRNO         = -1;
21814var Z_STREAM_ERROR  = -2;
21815var Z_DATA_ERROR    = -3;
21816var Z_MEM_ERROR     = -4;
21817var Z_BUF_ERROR     = -5;
21818//var Z_VERSION_ERROR = -6;
21819
21820/* The deflate compression method */
21821var Z_DEFLATED  = 8;
21822
21823
21824/* STATES ====================================================================*/
21825/* ===========================================================================*/
21826
21827
21828var    HEAD = 1;       /* i: waiting for magic header */
21829var    FLAGS = 2;      /* i: waiting for method and flags (gzip) */
21830var    TIME = 3;       /* i: waiting for modification time (gzip) */
21831var    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */
21832var    EXLEN = 5;      /* i: waiting for extra length (gzip) */
21833var    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */
21834var    NAME = 7;       /* i: waiting for end of file name (gzip) */
21835var    COMMENT = 8;    /* i: waiting for end of comment (gzip) */
21836var    HCRC = 9;       /* i: waiting for header crc (gzip) */
21837var    DICTID = 10;    /* i: waiting for dictionary check value */
21838var    DICT = 11;      /* waiting for inflateSetDictionary() call */
21839var        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
21840var        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */
21841var        STORED = 14;    /* i: waiting for stored size (length and complement) */
21842var        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */
21843var        COPY = 16;      /* i/o: waiting for input or output to copy stored block */
21844var        TABLE = 17;     /* i: waiting for dynamic block table lengths */
21845var        LENLENS = 18;   /* i: waiting for code length code lengths */
21846var        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */
21847var            LEN_ = 20;      /* i: same as LEN below, but only first time in */
21848var            LEN = 21;       /* i: waiting for length/lit/eob code */
21849var            LENEXT = 22;    /* i: waiting for length extra bits */
21850var            DIST = 23;      /* i: waiting for distance code */
21851var            DISTEXT = 24;   /* i: waiting for distance extra bits */
21852var            MATCH = 25;     /* o: waiting for output space to copy string */
21853var            LIT = 26;       /* o: waiting for output space to write literal */
21854var    CHECK = 27;     /* i: waiting for 32-bit check value */
21855var    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */
21856var    DONE = 29;      /* finished check, done -- remain here until reset */
21857var    BAD = 30;       /* got a data error -- remain here until reset */
21858var    MEM = 31;       /* got an inflate() memory error -- remain here until reset */
21859var    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */
21860
21861/* ===========================================================================*/
21862
21863
21864
21865var ENOUGH_LENS = 852;
21866var ENOUGH_DISTS = 592;
21867//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);
21868
21869var MAX_WBITS = 15;
21870/* 32K LZ77 window */
21871var DEF_WBITS = MAX_WBITS;
21872
21873
21874function zswap32(q) {
21875  return  (((q >>> 24) & 0xff) +
21876          ((q >>> 8) & 0xff00) +
21877          ((q & 0xff00) << 8) +
21878          ((q & 0xff) << 24));
21879}
21880
21881
21882function InflateState() {
21883  this.mode = 0;             /* current inflate mode */
21884  this.last = false;          /* true if processing last block */
21885  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
21886  this.havedict = false;      /* true if dictionary provided */
21887  this.flags = 0;             /* gzip header method and flags (0 if zlib) */
21888  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */
21889  this.check = 0;             /* protected copy of check value */
21890  this.total = 0;             /* protected copy of output count */
21891  // TODO: may be {}
21892  this.head = null;           /* where to save gzip header information */
21893
21894  /* sliding window */
21895  this.wbits = 0;             /* log base 2 of requested window size */
21896  this.wsize = 0;             /* window size or zero if not using window */
21897  this.whave = 0;             /* valid bytes in the window */
21898  this.wnext = 0;             /* window write index */
21899  this.window = null;         /* allocated sliding window, if needed */
21900
21901  /* bit accumulator */
21902  this.hold = 0;              /* input bit accumulator */
21903  this.bits = 0;              /* number of bits in "in" */
21904
21905  /* for string and stored block copying */
21906  this.length = 0;            /* literal or length of data to copy */
21907  this.offset = 0;            /* distance back to copy string from */
21908
21909  /* for table and code decoding */
21910  this.extra = 0;             /* extra bits needed */
21911
21912  /* fixed and dynamic code tables */
21913  this.lencode = null;          /* starting table for length/literal codes */
21914  this.distcode = null;         /* starting table for distance codes */
21915  this.lenbits = 0;           /* index bits for lencode */
21916  this.distbits = 0;          /* index bits for distcode */
21917
21918  /* dynamic table building */
21919  this.ncode = 0;             /* number of code length code lengths */
21920  this.nlen = 0;              /* number of length code lengths */
21921  this.ndist = 0;             /* number of distance code lengths */
21922  this.have = 0;              /* number of code lengths in lens[] */
21923  this.next = null;              /* next available space in codes[] */
21924
21925  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
21926  this.work = new utils.Buf16(288); /* work area for code table building */
21927
21928  /*
21929   because we don't have pointers in js, we use lencode and distcode directly
21930   as buffers so we don't need codes
21931  */
21932  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */
21933  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */
21934  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */
21935  this.sane = 0;                   /* if false, allow invalid distance too far */
21936  this.back = 0;                   /* bits back of last unprocessed length/lit */
21937  this.was = 0;                    /* initial length of match */
21938}
21939
21940function inflateResetKeep(strm) {
21941  var state;
21942
21943  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
21944  state = strm.state;
21945  strm.total_in = strm.total_out = state.total = 0;
21946  strm.msg = ''; /*Z_NULL*/
21947  if (state.wrap) {       /* to support ill-conceived Java test suite */
21948    strm.adler = state.wrap & 1;
21949  }
21950  state.mode = HEAD;
21951  state.last = 0;
21952  state.havedict = 0;
21953  state.dmax = 32768;
21954  state.head = null/*Z_NULL*/;
21955  state.hold = 0;
21956  state.bits = 0;
21957  //state.lencode = state.distcode = state.next = state.codes;
21958  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
21959  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
21960
21961  state.sane = 1;
21962  state.back = -1;
21963  //Tracev((stderr, "inflate: reset\n"));
21964  return Z_OK;
21965}
21966
21967function inflateReset(strm) {
21968  var state;
21969
21970  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
21971  state = strm.state;
21972  state.wsize = 0;
21973  state.whave = 0;
21974  state.wnext = 0;
21975  return inflateResetKeep(strm);
21976
21977}
21978
21979function inflateReset2(strm, windowBits) {
21980  var wrap;
21981  var state;
21982
21983  /* get the state */
21984  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
21985  state = strm.state;
21986
21987  /* extract wrap request from windowBits parameter */
21988  if (windowBits < 0) {
21989    wrap = 0;
21990    windowBits = -windowBits;
21991  }
21992  else {
21993    wrap = (windowBits >> 4) + 1;
21994    if (windowBits < 48) {
21995      windowBits &= 15;
21996    }
21997  }
21998
21999  /* set number of window bits, free window if different */
22000  if (windowBits && (windowBits < 8 || windowBits > 15)) {
22001    return Z_STREAM_ERROR;
22002  }
22003  if (state.window !== null && state.wbits !== windowBits) {
22004    state.window = null;
22005  }
22006
22007  /* update state and reset the rest of it */
22008  state.wrap = wrap;
22009  state.wbits = windowBits;
22010  return inflateReset(strm);
22011}
22012
22013function inflateInit2(strm, windowBits) {
22014  var ret;
22015  var state;
22016
22017  if (!strm) { return Z_STREAM_ERROR; }
22018  //strm.msg = Z_NULL;                 /* in case we return an error */
22019
22020  state = new InflateState();
22021
22022  //if (state === Z_NULL) return Z_MEM_ERROR;
22023  //Tracev((stderr, "inflate: allocated\n"));
22024  strm.state = state;
22025  state.window = null/*Z_NULL*/;
22026  ret = inflateReset2(strm, windowBits);
22027  if (ret !== Z_OK) {
22028    strm.state = null/*Z_NULL*/;
22029  }
22030  return ret;
22031}
22032
22033function inflateInit(strm) {
22034  return inflateInit2(strm, DEF_WBITS);
22035}
22036
22037
22038/*
22039 Return state with length and distance decoding tables and index sizes set to
22040 fixed code decoding.  Normally this returns fixed tables from inffixed.h.
22041 If BUILDFIXED is defined, then instead this routine builds the tables the
22042 first time it's called, and returns those tables the first time and
22043 thereafter.  This reduces the size of the code by about 2K bytes, in
22044 exchange for a little execution time.  However, BUILDFIXED should not be
22045 used for threaded applications, since the rewriting of the tables and virgin
22046 may not be thread-safe.
22047 */
22048var virgin = true;
22049
22050var lenfix, distfix; // We have no pointers in JS, so keep tables separate
22051
22052function fixedtables(state) {
22053  /* build fixed huffman tables if first call (may not be thread safe) */
22054  if (virgin) {
22055    var sym;
22056
22057    lenfix = new utils.Buf32(512);
22058    distfix = new utils.Buf32(32);
22059
22060    /* literal/length table */
22061    sym = 0;
22062    while (sym < 144) { state.lens[sym++] = 8; }
22063    while (sym < 256) { state.lens[sym++] = 9; }
22064    while (sym < 280) { state.lens[sym++] = 7; }
22065    while (sym < 288) { state.lens[sym++] = 8; }
22066
22067    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });
22068
22069    /* distance table */
22070    sym = 0;
22071    while (sym < 32) { state.lens[sym++] = 5; }
22072
22073    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });
22074
22075    /* do this just once */
22076    virgin = false;
22077  }
22078
22079  state.lencode = lenfix;
22080  state.lenbits = 9;
22081  state.distcode = distfix;
22082  state.distbits = 5;
22083}
22084
22085
22086/*
22087 Update the window with the last wsize (normally 32K) bytes written before
22088 returning.  If window does not exist yet, create it.  This is only called
22089 when a window is already in use, or when output has been written during this
22090 inflate call, but the end of the deflate stream has not been reached yet.
22091 It is also called to create a window for dictionary data when a dictionary
22092 is loaded.
22093
22094 Providing output buffers larger than 32K to inflate() should provide a speed
22095 advantage, since only the last 32K of output is copied to the sliding window
22096 upon return from inflate(), and since all distances after the first 32K of
22097 output will fall in the output data, making match copies simpler and faster.
22098 The advantage may be dependent on the size of the processor's data caches.
22099 */
22100function updatewindow(strm, src, end, copy) {
22101  var dist;
22102  var state = strm.state;
22103
22104  /* if it hasn't been done already, allocate space for the window */
22105  if (state.window === null) {
22106    state.wsize = 1 << state.wbits;
22107    state.wnext = 0;
22108    state.whave = 0;
22109
22110    state.window = new utils.Buf8(state.wsize);
22111  }
22112
22113  /* copy state->wsize or less output bytes into the circular window */
22114  if (copy >= state.wsize) {
22115    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);
22116    state.wnext = 0;
22117    state.whave = state.wsize;
22118  }
22119  else {
22120    dist = state.wsize - state.wnext;
22121    if (dist > copy) {
22122      dist = copy;
22123    }
22124    //zmemcpy(state->window + state->wnext, end - copy, dist);
22125    utils.arraySet(state.window, src, end - copy, dist, state.wnext);
22126    copy -= dist;
22127    if (copy) {
22128      //zmemcpy(state->window, end - copy, copy);
22129      utils.arraySet(state.window, src, end - copy, copy, 0);
22130      state.wnext = copy;
22131      state.whave = state.wsize;
22132    }
22133    else {
22134      state.wnext += dist;
22135      if (state.wnext === state.wsize) { state.wnext = 0; }
22136      if (state.whave < state.wsize) { state.whave += dist; }
22137    }
22138  }
22139  return 0;
22140}
22141
22142function inflate(strm, flush) {
22143  var state;
22144  var input, output;          // input/output buffers
22145  var next;                   /* next input INDEX */
22146  var put;                    /* next output INDEX */
22147  var have, left;             /* available input and output */
22148  var hold;                   /* bit buffer */
22149  var bits;                   /* bits in bit buffer */
22150  var _in, _out;              /* save starting available input and output */
22151  var copy;                   /* number of stored or match bytes to copy */
22152  var from;                   /* where to copy match bytes from */
22153  var from_source;
22154  var here = 0;               /* current decoding table entry */
22155  var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
22156  //var last;                   /* parent table entry */
22157  var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
22158  var len;                    /* length to copy for repeats, bits to drop */
22159  var ret;                    /* return code */
22160  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */
22161  var opts;
22162
22163  var n; // temporary var for NEED_BITS
22164
22165  var order = /* permutation of code lengths */
22166    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];
22167
22168
22169  if (!strm || !strm.state || !strm.output ||
22170      (!strm.input && strm.avail_in !== 0)) {
22171    return Z_STREAM_ERROR;
22172  }
22173
22174  state = strm.state;
22175  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */
22176
22177
22178  //--- LOAD() ---
22179  put = strm.next_out;
22180  output = strm.output;
22181  left = strm.avail_out;
22182  next = strm.next_in;
22183  input = strm.input;
22184  have = strm.avail_in;
22185  hold = state.hold;
22186  bits = state.bits;
22187  //---
22188
22189  _in = have;
22190  _out = left;
22191  ret = Z_OK;
22192
22193  inf_leave: // goto emulation
22194  for (;;) {
22195    switch (state.mode) {
22196      case HEAD:
22197        if (state.wrap === 0) {
22198          state.mode = TYPEDO;
22199          break;
22200        }
22201        //=== NEEDBITS(16);
22202        while (bits < 16) {
22203          if (have === 0) { break inf_leave; }
22204          have--;
22205          hold += input[next++] << bits;
22206          bits += 8;
22207        }
22208        //===//
22209        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */
22210          state.check = 0/*crc32(0L, Z_NULL, 0)*/;
22211          //=== CRC2(state.check, hold);
22212          hbuf[0] = hold & 0xff;
22213          hbuf[1] = (hold >>> 8) & 0xff;
22214          state.check = crc32(state.check, hbuf, 2, 0);
22215          //===//
22216
22217          //=== INITBITS();
22218          hold = 0;
22219          bits = 0;
22220          //===//
22221          state.mode = FLAGS;
22222          break;
22223        }
22224        state.flags = 0;           /* expect zlib header */
22225        if (state.head) {
22226          state.head.done = false;
22227        }
22228        if (!(state.wrap & 1) ||   /* check if zlib header allowed */
22229          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
22230          strm.msg = 'incorrect header check';
22231          state.mode = BAD;
22232          break;
22233        }
22234        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
22235          strm.msg = 'unknown compression method';
22236          state.mode = BAD;
22237          break;
22238        }
22239        //--- DROPBITS(4) ---//
22240        hold >>>= 4;
22241        bits -= 4;
22242        //---//
22243        len = (hold & 0x0f)/*BITS(4)*/ + 8;
22244        if (state.wbits === 0) {
22245          state.wbits = len;
22246        }
22247        else if (len > state.wbits) {
22248          strm.msg = 'invalid window size';
22249          state.mode = BAD;
22250          break;
22251        }
22252        state.dmax = 1 << len;
22253        //Tracev((stderr, "inflate:   zlib header ok\n"));
22254        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
22255        state.mode = hold & 0x200 ? DICTID : TYPE;
22256        //=== INITBITS();
22257        hold = 0;
22258        bits = 0;
22259        //===//
22260        break;
22261      case FLAGS:
22262        //=== NEEDBITS(16); */
22263        while (bits < 16) {
22264          if (have === 0) { break inf_leave; }
22265          have--;
22266          hold += input[next++] << bits;
22267          bits += 8;
22268        }
22269        //===//
22270        state.flags = hold;
22271        if ((state.flags & 0xff) !== Z_DEFLATED) {
22272          strm.msg = 'unknown compression method';
22273          state.mode = BAD;
22274          break;
22275        }
22276        if (state.flags & 0xe000) {
22277          strm.msg = 'unknown header flags set';
22278          state.mode = BAD;
22279          break;
22280        }
22281        if (state.head) {
22282          state.head.text = ((hold >> 8) & 1);
22283        }
22284        if (state.flags & 0x0200) {
22285          //=== CRC2(state.check, hold);
22286          hbuf[0] = hold & 0xff;
22287          hbuf[1] = (hold >>> 8) & 0xff;
22288          state.check = crc32(state.check, hbuf, 2, 0);
22289          //===//
22290        }
22291        //=== INITBITS();
22292        hold = 0;
22293        bits = 0;
22294        //===//
22295        state.mode = TIME;
22296        /* falls through */
22297      case TIME:
22298        //=== NEEDBITS(32); */
22299        while (bits < 32) {
22300          if (have === 0) { break inf_leave; }
22301          have--;
22302          hold += input[next++] << bits;
22303          bits += 8;
22304        }
22305        //===//
22306        if (state.head) {
22307          state.head.time = hold;
22308        }
22309        if (state.flags & 0x0200) {
22310          //=== CRC4(state.check, hold)
22311          hbuf[0] = hold & 0xff;
22312          hbuf[1] = (hold >>> 8) & 0xff;
22313          hbuf[2] = (hold >>> 16) & 0xff;
22314          hbuf[3] = (hold >>> 24) & 0xff;
22315          state.check = crc32(state.check, hbuf, 4, 0);
22316          //===
22317        }
22318        //=== INITBITS();
22319        hold = 0;
22320        bits = 0;
22321        //===//
22322        state.mode = OS;
22323        /* falls through */
22324      case OS:
22325        //=== NEEDBITS(16); */
22326        while (bits < 16) {
22327          if (have === 0) { break inf_leave; }
22328          have--;
22329          hold += input[next++] << bits;
22330          bits += 8;
22331        }
22332        //===//
22333        if (state.head) {
22334          state.head.xflags = (hold & 0xff);
22335          state.head.os = (hold >> 8);
22336        }
22337        if (state.flags & 0x0200) {
22338          //=== CRC2(state.check, hold);
22339          hbuf[0] = hold & 0xff;
22340          hbuf[1] = (hold >>> 8) & 0xff;
22341          state.check = crc32(state.check, hbuf, 2, 0);
22342          //===//
22343        }
22344        //=== INITBITS();
22345        hold = 0;
22346        bits = 0;
22347        //===//
22348        state.mode = EXLEN;
22349        /* falls through */
22350      case EXLEN:
22351        if (state.flags & 0x0400) {
22352          //=== NEEDBITS(16); */
22353          while (bits < 16) {
22354            if (have === 0) { break inf_leave; }
22355            have--;
22356            hold += input[next++] << bits;
22357            bits += 8;
22358          }
22359          //===//
22360          state.length = hold;
22361          if (state.head) {
22362            state.head.extra_len = hold;
22363          }
22364          if (state.flags & 0x0200) {
22365            //=== CRC2(state.check, hold);
22366            hbuf[0] = hold & 0xff;
22367            hbuf[1] = (hold >>> 8) & 0xff;
22368            state.check = crc32(state.check, hbuf, 2, 0);
22369            //===//
22370          }
22371          //=== INITBITS();
22372          hold = 0;
22373          bits = 0;
22374          //===//
22375        }
22376        else if (state.head) {
22377          state.head.extra = null/*Z_NULL*/;
22378        }
22379        state.mode = EXTRA;
22380        /* falls through */
22381      case EXTRA:
22382        if (state.flags & 0x0400) {
22383          copy = state.length;
22384          if (copy > have) { copy = have; }
22385          if (copy) {
22386            if (state.head) {
22387              len = state.head.extra_len - state.length;
22388              if (!state.head.extra) {
22389                // Use untyped array for more convenient processing later
22390                state.head.extra = new Array(state.head.extra_len);
22391              }
22392              utils.arraySet(
22393                state.head.extra,
22394                input,
22395                next,
22396                // extra field is limited to 65536 bytes
22397                // - no need for additional size check
22398                copy,
22399                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
22400                len
22401              );
22402              //zmemcpy(state.head.extra + len, next,
22403              //        len + copy > state.head.extra_max ?
22404              //        state.head.extra_max - len : copy);
22405            }
22406            if (state.flags & 0x0200) {
22407              state.check = crc32(state.check, input, copy, next);
22408            }
22409            have -= copy;
22410            next += copy;
22411            state.length -= copy;
22412          }
22413          if (state.length) { break inf_leave; }
22414        }
22415        state.length = 0;
22416        state.mode = NAME;
22417        /* falls through */
22418      case NAME:
22419        if (state.flags & 0x0800) {
22420          if (have === 0) { break inf_leave; }
22421          copy = 0;
22422          do {
22423            // TODO: 2 or 1 bytes?
22424            len = input[next + copy++];
22425            /* use constant limit because in js we should not preallocate memory */
22426            if (state.head && len &&
22427                (state.length < 65536 /*state.head.name_max*/)) {
22428              state.head.name += String.fromCharCode(len);
22429            }
22430          } while (len && copy < have);
22431
22432          if (state.flags & 0x0200) {
22433            state.check = crc32(state.check, input, copy, next);
22434          }
22435          have -= copy;
22436          next += copy;
22437          if (len) { break inf_leave; }
22438        }
22439        else if (state.head) {
22440          state.head.name = null;
22441        }
22442        state.length = 0;
22443        state.mode = COMMENT;
22444        /* falls through */
22445      case COMMENT:
22446        if (state.flags & 0x1000) {
22447          if (have === 0) { break inf_leave; }
22448          copy = 0;
22449          do {
22450            len = input[next + copy++];
22451            /* use constant limit because in js we should not preallocate memory */
22452            if (state.head && len &&
22453                (state.length < 65536 /*state.head.comm_max*/)) {
22454              state.head.comment += String.fromCharCode(len);
22455            }
22456          } while (len && copy < have);
22457          if (state.flags & 0x0200) {
22458            state.check = crc32(state.check, input, copy, next);
22459          }
22460          have -= copy;
22461          next += copy;
22462          if (len) { break inf_leave; }
22463        }
22464        else if (state.head) {
22465          state.head.comment = null;
22466        }
22467        state.mode = HCRC;
22468        /* falls through */
22469      case HCRC:
22470        if (state.flags & 0x0200) {
22471          //=== NEEDBITS(16); */
22472          while (bits < 16) {
22473            if (have === 0) { break inf_leave; }
22474            have--;
22475            hold += input[next++] << bits;
22476            bits += 8;
22477          }
22478          //===//
22479          if (hold !== (state.check & 0xffff)) {
22480            strm.msg = 'header crc mismatch';
22481            state.mode = BAD;
22482            break;
22483          }
22484          //=== INITBITS();
22485          hold = 0;
22486          bits = 0;
22487          //===//
22488        }
22489        if (state.head) {
22490          state.head.hcrc = ((state.flags >> 9) & 1);
22491          state.head.done = true;
22492        }
22493        strm.adler = state.check = 0;
22494        state.mode = TYPE;
22495        break;
22496      case DICTID:
22497        //=== NEEDBITS(32); */
22498        while (bits < 32) {
22499          if (have === 0) { break inf_leave; }
22500          have--;
22501          hold += input[next++] << bits;
22502          bits += 8;
22503        }
22504        //===//
22505        strm.adler = state.check = zswap32(hold);
22506        //=== INITBITS();
22507        hold = 0;
22508        bits = 0;
22509        //===//
22510        state.mode = DICT;
22511        /* falls through */
22512      case DICT:
22513        if (state.havedict === 0) {
22514          //--- RESTORE() ---
22515          strm.next_out = put;
22516          strm.avail_out = left;
22517          strm.next_in = next;
22518          strm.avail_in = have;
22519          state.hold = hold;
22520          state.bits = bits;
22521          //---
22522          return Z_NEED_DICT;
22523        }
22524        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
22525        state.mode = TYPE;
22526        /* falls through */
22527      case TYPE:
22528        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
22529        /* falls through */
22530      case TYPEDO:
22531        if (state.last) {
22532          //--- BYTEBITS() ---//
22533          hold >>>= bits & 7;
22534          bits -= bits & 7;
22535          //---//
22536          state.mode = CHECK;
22537          break;
22538        }
22539        //=== NEEDBITS(3); */
22540        while (bits < 3) {
22541          if (have === 0) { break inf_leave; }
22542          have--;
22543          hold += input[next++] << bits;
22544          bits += 8;
22545        }
22546        //===//
22547        state.last = (hold & 0x01)/*BITS(1)*/;
22548        //--- DROPBITS(1) ---//
22549        hold >>>= 1;
22550        bits -= 1;
22551        //---//
22552
22553        switch ((hold & 0x03)/*BITS(2)*/) {
22554          case 0:                             /* stored block */
22555            //Tracev((stderr, "inflate:     stored block%s\n",
22556            //        state.last ? " (last)" : ""));
22557            state.mode = STORED;
22558            break;
22559          case 1:                             /* fixed block */
22560            fixedtables(state);
22561            //Tracev((stderr, "inflate:     fixed codes block%s\n",
22562            //        state.last ? " (last)" : ""));
22563            state.mode = LEN_;             /* decode codes */
22564            if (flush === Z_TREES) {
22565              //--- DROPBITS(2) ---//
22566              hold >>>= 2;
22567              bits -= 2;
22568              //---//
22569              break inf_leave;
22570            }
22571            break;
22572          case 2:                             /* dynamic block */
22573            //Tracev((stderr, "inflate:     dynamic codes block%s\n",
22574            //        state.last ? " (last)" : ""));
22575            state.mode = TABLE;
22576            break;
22577          case 3:
22578            strm.msg = 'invalid block type';
22579            state.mode = BAD;
22580        }
22581        //--- DROPBITS(2) ---//
22582        hold >>>= 2;
22583        bits -= 2;
22584        //---//
22585        break;
22586      case STORED:
22587        //--- BYTEBITS() ---// /* go to byte boundary */
22588        hold >>>= bits & 7;
22589        bits -= bits & 7;
22590        //---//
22591        //=== NEEDBITS(32); */
22592        while (bits < 32) {
22593          if (have === 0) { break inf_leave; }
22594          have--;
22595          hold += input[next++] << bits;
22596          bits += 8;
22597        }
22598        //===//
22599        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
22600          strm.msg = 'invalid stored block lengths';
22601          state.mode = BAD;
22602          break;
22603        }
22604        state.length = hold & 0xffff;
22605        //Tracev((stderr, "inflate:       stored length %u\n",
22606        //        state.length));
22607        //=== INITBITS();
22608        hold = 0;
22609        bits = 0;
22610        //===//
22611        state.mode = COPY_;
22612        if (flush === Z_TREES) { break inf_leave; }
22613        /* falls through */
22614      case COPY_:
22615        state.mode = COPY;
22616        /* falls through */
22617      case COPY:
22618        copy = state.length;
22619        if (copy) {
22620          if (copy > have) { copy = have; }
22621          if (copy > left) { copy = left; }
22622          if (copy === 0) { break inf_leave; }
22623          //--- zmemcpy(put, next, copy); ---
22624          utils.arraySet(output, input, next, copy, put);
22625          //---//
22626          have -= copy;
22627          next += copy;
22628          left -= copy;
22629          put += copy;
22630          state.length -= copy;
22631          break;
22632        }
22633        //Tracev((stderr, "inflate:       stored end\n"));
22634        state.mode = TYPE;
22635        break;
22636      case TABLE:
22637        //=== NEEDBITS(14); */
22638        while (bits < 14) {
22639          if (have === 0) { break inf_leave; }
22640          have--;
22641          hold += input[next++] << bits;
22642          bits += 8;
22643        }
22644        //===//
22645        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
22646        //--- DROPBITS(5) ---//
22647        hold >>>= 5;
22648        bits -= 5;
22649        //---//
22650        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
22651        //--- DROPBITS(5) ---//
22652        hold >>>= 5;
22653        bits -= 5;
22654        //---//
22655        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
22656        //--- DROPBITS(4) ---//
22657        hold >>>= 4;
22658        bits -= 4;
22659        //---//
22660//#ifndef PKZIP_BUG_WORKAROUND
22661        if (state.nlen > 286 || state.ndist > 30) {
22662          strm.msg = 'too many length or distance symbols';
22663          state.mode = BAD;
22664          break;
22665        }
22666//#endif
22667        //Tracev((stderr, "inflate:       table sizes ok\n"));
22668        state.have = 0;
22669        state.mode = LENLENS;
22670        /* falls through */
22671      case LENLENS:
22672        while (state.have < state.ncode) {
22673          //=== NEEDBITS(3);
22674          while (bits < 3) {
22675            if (have === 0) { break inf_leave; }
22676            have--;
22677            hold += input[next++] << bits;
22678            bits += 8;
22679          }
22680          //===//
22681          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
22682          //--- DROPBITS(3) ---//
22683          hold >>>= 3;
22684          bits -= 3;
22685          //---//
22686        }
22687        while (state.have < 19) {
22688          state.lens[order[state.have++]] = 0;
22689        }
22690        // We have separate tables & no pointers. 2 commented lines below not needed.
22691        //state.next = state.codes;
22692        //state.lencode = state.next;
22693        // Switch to use dynamic table
22694        state.lencode = state.lendyn;
22695        state.lenbits = 7;
22696
22697        opts = { bits: state.lenbits };
22698        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
22699        state.lenbits = opts.bits;
22700
22701        if (ret) {
22702          strm.msg = 'invalid code lengths set';
22703          state.mode = BAD;
22704          break;
22705        }
22706        //Tracev((stderr, "inflate:       code lengths ok\n"));
22707        state.have = 0;
22708        state.mode = CODELENS;
22709        /* falls through */
22710      case CODELENS:
22711        while (state.have < state.nlen + state.ndist) {
22712          for (;;) {
22713            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
22714            here_bits = here >>> 24;
22715            here_op = (here >>> 16) & 0xff;
22716            here_val = here & 0xffff;
22717
22718            if ((here_bits) <= bits) { break; }
22719            //--- PULLBYTE() ---//
22720            if (have === 0) { break inf_leave; }
22721            have--;
22722            hold += input[next++] << bits;
22723            bits += 8;
22724            //---//
22725          }
22726          if (here_val < 16) {
22727            //--- DROPBITS(here.bits) ---//
22728            hold >>>= here_bits;
22729            bits -= here_bits;
22730            //---//
22731            state.lens[state.have++] = here_val;
22732          }
22733          else {
22734            if (here_val === 16) {
22735              //=== NEEDBITS(here.bits + 2);
22736              n = here_bits + 2;
22737              while (bits < n) {
22738                if (have === 0) { break inf_leave; }
22739                have--;
22740                hold += input[next++] << bits;
22741                bits += 8;
22742              }
22743              //===//
22744              //--- DROPBITS(here.bits) ---//
22745              hold >>>= here_bits;
22746              bits -= here_bits;
22747              //---//
22748              if (state.have === 0) {
22749                strm.msg = 'invalid bit length repeat';
22750                state.mode = BAD;
22751                break;
22752              }
22753              len = state.lens[state.have - 1];
22754              copy = 3 + (hold & 0x03);//BITS(2);
22755              //--- DROPBITS(2) ---//
22756              hold >>>= 2;
22757              bits -= 2;
22758              //---//
22759            }
22760            else if (here_val === 17) {
22761              //=== NEEDBITS(here.bits + 3);
22762              n = here_bits + 3;
22763              while (bits < n) {
22764                if (have === 0) { break inf_leave; }
22765                have--;
22766                hold += input[next++] << bits;
22767                bits += 8;
22768              }
22769              //===//
22770              //--- DROPBITS(here.bits) ---//
22771              hold >>>= here_bits;
22772              bits -= here_bits;
22773              //---//
22774              len = 0;
22775              copy = 3 + (hold & 0x07);//BITS(3);
22776              //--- DROPBITS(3) ---//
22777              hold >>>= 3;
22778              bits -= 3;
22779              //---//
22780            }
22781            else {
22782              //=== NEEDBITS(here.bits + 7);
22783              n = here_bits + 7;
22784              while (bits < n) {
22785                if (have === 0) { break inf_leave; }
22786                have--;
22787                hold += input[next++] << bits;
22788                bits += 8;
22789              }
22790              //===//
22791              //--- DROPBITS(here.bits) ---//
22792              hold >>>= here_bits;
22793              bits -= here_bits;
22794              //---//
22795              len = 0;
22796              copy = 11 + (hold & 0x7f);//BITS(7);
22797              //--- DROPBITS(7) ---//
22798              hold >>>= 7;
22799              bits -= 7;
22800              //---//
22801            }
22802            if (state.have + copy > state.nlen + state.ndist) {
22803              strm.msg = 'invalid bit length repeat';
22804              state.mode = BAD;
22805              break;
22806            }
22807            while (copy--) {
22808              state.lens[state.have++] = len;
22809            }
22810          }
22811        }
22812
22813        /* handle error breaks in while */
22814        if (state.mode === BAD) { break; }
22815
22816        /* check for end-of-block code (better have one) */
22817        if (state.lens[256] === 0) {
22818          strm.msg = 'invalid code -- missing end-of-block';
22819          state.mode = BAD;
22820          break;
22821        }
22822
22823        /* build code tables -- note: do not change the lenbits or distbits
22824           values here (9 and 6) without reading the comments in inftrees.h
22825           concerning the ENOUGH constants, which depend on those values */
22826        state.lenbits = 9;
22827
22828        opts = { bits: state.lenbits };
22829        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
22830        // We have separate tables & no pointers. 2 commented lines below not needed.
22831        // state.next_index = opts.table_index;
22832        state.lenbits = opts.bits;
22833        // state.lencode = state.next;
22834
22835        if (ret) {
22836          strm.msg = 'invalid literal/lengths set';
22837          state.mode = BAD;
22838          break;
22839        }
22840
22841        state.distbits = 6;
22842        //state.distcode.copy(state.codes);
22843        // Switch to use dynamic table
22844        state.distcode = state.distdyn;
22845        opts = { bits: state.distbits };
22846        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
22847        // We have separate tables & no pointers. 2 commented lines below not needed.
22848        // state.next_index = opts.table_index;
22849        state.distbits = opts.bits;
22850        // state.distcode = state.next;
22851
22852        if (ret) {
vendor: 4,188 bytes, lines 22853-22984
22853          strm.msg = 'invalid distances set';
22854          state.mode = BAD;
22855          break;
22856        }
22857        //Tracev((stderr, 'inflate:       codes ok\n'));
22858        state.mode = LEN_;
22859        if (flush === Z_TREES) { break inf_leave; }
22860        /* falls through */
22861      case LEN_:
22862        state.mode = LEN;
22863        /* falls through */
22864      case LEN:
22865        if (have >= 6 && left >= 258) {
22866          //--- RESTORE() ---
22867          strm.next_out = put;
22868          strm.avail_out = left;
22869          strm.next_in = next;
22870          strm.avail_in = have;
22871          state.hold = hold;
22872          state.bits = bits;
22873          //---
22874          inflate_fast(strm, _out);
22875          //--- LOAD() ---
22876          put = strm.next_out;
22877          output = strm.output;
22878          left = strm.avail_out;
22879          next = strm.next_in;
22880          input = strm.input;
22881          have = strm.avail_in;
22882          hold = state.hold;
22883          bits = state.bits;
22884          //---
22885
22886          if (state.mode === TYPE) {
22887            state.back = -1;
22888          }
22889          break;
22890        }
22891        state.back = 0;
22892        for (;;) {
22893          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/
22894          here_bits = here >>> 24;
22895          here_op = (here >>> 16) & 0xff;
22896          here_val = here & 0xffff;
22897
22898          if (here_bits <= bits) { break; }
22899          //--- PULLBYTE() ---//
22900          if (have === 0) { break inf_leave; }
22901          have--;
22902          hold += input[next++] << bits;
22903          bits += 8;
22904          //---//
22905        }
22906        if (here_op && (here_op & 0xf0) === 0) {
22907          last_bits = here_bits;
22908          last_op = here_op;
22909          last_val = here_val;
22910          for (;;) {
22911            here = state.lencode[last_val +
22912                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
22913            here_bits = here >>> 24;
22914            here_op = (here >>> 16) & 0xff;
22915            here_val = here & 0xffff;
22916
22917            if ((last_bits + here_bits) <= bits) { break; }
22918            //--- PULLBYTE() ---//
22919            if (have === 0) { break inf_leave; }
22920            have--;
22921            hold += input[next++] << bits;
22922            bits += 8;
22923            //---//
22924          }
22925          //--- DROPBITS(last.bits) ---//
22926          hold >>>= last_bits;
22927          bits -= last_bits;
22928          //---//
22929          state.back += last_bits;
22930        }
22931        //--- DROPBITS(here.bits) ---//
22932        hold >>>= here_bits;
22933        bits -= here_bits;
22934        //---//
22935        state.back += here_bits;
22936        state.length = here_val;
22937        if (here_op === 0) {
22938          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
22939          //        "inflate:         literal '%c'\n" :
22940          //        "inflate:         literal 0x%02x\n", here.val));
22941          state.mode = LIT;
22942          break;
22943        }
22944        if (here_op & 32) {
22945          //Tracevv((stderr, "inflate:         end of block\n"));
22946          state.back = -1;
22947          state.mode = TYPE;
22948          break;
22949        }
22950        if (here_op & 64) {
22951          strm.msg = 'invalid literal/length code';
22952          state.mode = BAD;
22953          break;
22954        }
22955        state.extra = here_op & 15;
22956        state.mode = LENEXT;
22957        /* falls through */
22958      case LENEXT:
22959        if (state.extra) {
22960          //=== NEEDBITS(state.extra);
22961          n = state.extra;
22962          while (bits < n) {
22963            if (have === 0) { break inf_leave; }
22964            have--;
22965            hold += input[next++] << bits;
22966            bits += 8;
22967          }
22968          //===//
22969          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
22970          //--- DROPBITS(state.extra) ---//
22971          hold >>>= state.extra;
22972          bits -= state.extra;
22973          //---//
22974          state.back += state.extra;
22975        }
22976        //Tracevv((stderr, "inflate:         length %u\n", state.length));
22977        state.was = state.length;
22978        state.mode = DIST;
22979        /* falls through */
22980      case DIST:
22981        for (;;) {
22982          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/
22983          here_bits = here >>> 24;
22984          here_op = (here >>> 16) & 0xff;
vendor: 10,154 bytes, lines 22985-23320
22985          here_val = here & 0xffff;
22986
22987          if ((here_bits) <= bits) { break; }
22988          //--- PULLBYTE() ---//
22989          if (have === 0) { break inf_leave; }
22990          have--;
22991          hold += input[next++] << bits;
22992          bits += 8;
22993          //---//
22994        }
22995        if ((here_op & 0xf0) === 0) {
22996          last_bits = here_bits;
22997          last_op = here_op;
22998          last_val = here_val;
22999          for (;;) {
23000            here = state.distcode[last_val +
23001                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
23002            here_bits = here >>> 24;
23003            here_op = (here >>> 16) & 0xff;
23004            here_val = here & 0xffff;
23005
23006            if ((last_bits + here_bits) <= bits) { break; }
23007            //--- PULLBYTE() ---//
23008            if (have === 0) { break inf_leave; }
23009            have--;
23010            hold += input[next++] << bits;
23011            bits += 8;
23012            //---//
23013          }
23014          //--- DROPBITS(last.bits) ---//
23015          hold >>>= last_bits;
23016          bits -= last_bits;
23017          //---//
23018          state.back += last_bits;
23019        }
23020        //--- DROPBITS(here.bits) ---//
23021        hold >>>= here_bits;
23022        bits -= here_bits;
23023        //---//
23024        state.back += here_bits;
23025        if (here_op & 64) {
23026          strm.msg = 'invalid distance code';
23027          state.mode = BAD;
23028          break;
23029        }
23030        state.offset = here_val;
23031        state.extra = (here_op) & 15;
23032        state.mode = DISTEXT;
23033        /* falls through */
23034      case DISTEXT:
23035        if (state.extra) {
23036          //=== NEEDBITS(state.extra);
23037          n = state.extra;
23038          while (bits < n) {
23039            if (have === 0) { break inf_leave; }
23040            have--;
23041            hold += input[next++] << bits;
23042            bits += 8;
23043          }
23044          //===//
23045          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
23046          //--- DROPBITS(state.extra) ---//
23047          hold >>>= state.extra;
23048          bits -= state.extra;
23049          //---//
23050          state.back += state.extra;
23051        }
23052//#ifdef INFLATE_STRICT
23053        if (state.offset > state.dmax) {
23054          strm.msg = 'invalid distance too far back';
23055          state.mode = BAD;
23056          break;
23057        }
23058//#endif
23059        //Tracevv((stderr, "inflate:         distance %u\n", state.offset));
23060        state.mode = MATCH;
23061        /* falls through */
23062      case MATCH:
23063        if (left === 0) { break inf_leave; }
23064        copy = _out - left;
23065        if (state.offset > copy) {         /* copy from window */
23066          copy = state.offset - copy;
23067          if (copy > state.whave) {
23068            if (state.sane) {
23069              strm.msg = 'invalid distance too far back';
23070              state.mode = BAD;
23071              break;
23072            }
23073// (!) This block is disabled in zlib defaults,
23074// don't enable it for binary compatibility
23075//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
23076//          Trace((stderr, "inflate.c too far\n"));
23077//          copy -= state.whave;
23078//          if (copy > state.length) { copy = state.length; }
23079//          if (copy > left) { copy = left; }
23080//          left -= copy;
23081//          state.length -= copy;
23082//          do {
23083//            output[put++] = 0;
23084//          } while (--copy);
23085//          if (state.length === 0) { state.mode = LEN; }
23086//          break;
23087//#endif
23088          }
23089          if (copy > state.wnext) {
23090            copy -= state.wnext;
23091            from = state.wsize - copy;
23092          }
23093          else {
23094            from = state.wnext - copy;
23095          }
23096          if (copy > state.length) { copy = state.length; }
23097          from_source = state.window;
23098        }
23099        else {                              /* copy from output */
23100          from_source = output;
23101          from = put - state.offset;
23102          copy = state.length;
23103        }
23104        if (copy > left) { copy = left; }
23105        left -= copy;
23106        state.length -= copy;
23107        do {
23108          output[put++] = from_source[from++];
23109        } while (--copy);
23110        if (state.length === 0) { state.mode = LEN; }
23111        break;
23112      case LIT:
23113        if (left === 0) { break inf_leave; }
23114        output[put++] = state.length;
23115        left--;
23116        state.mode = LEN;
23117        break;
23118      case CHECK:
23119        if (state.wrap) {
23120          //=== NEEDBITS(32);
23121          while (bits < 32) {
23122            if (have === 0) { break inf_leave; }
23123            have--;
23124            // Use '|' instead of '+' to make sure that result is signed
23125            hold |= input[next++] << bits;
23126            bits += 8;
23127          }
23128          //===//
23129          _out -= left;
23130          strm.total_out += _out;
23131          state.total += _out;
23132          if (_out) {
23133            strm.adler = state.check =
23134                /*UPDATE(state.check, put - _out, _out);*/
23135                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));
23136
23137          }
23138          _out = left;
23139          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
23140          if ((state.flags ? hold : zswap32(hold)) !== state.check) {
23141            strm.msg = 'incorrect data check';
23142            state.mode = BAD;
23143            break;
23144          }
23145          //=== INITBITS();
23146          hold = 0;
23147          bits = 0;
23148          //===//
23149          //Tracev((stderr, "inflate:   check matches trailer\n"));
23150        }
23151        state.mode = LENGTH;
23152        /* falls through */
23153      case LENGTH:
23154        if (state.wrap && state.flags) {
23155          //=== NEEDBITS(32);
23156          while (bits < 32) {
23157            if (have === 0) { break inf_leave; }
23158            have--;
23159            hold += input[next++] << bits;
23160            bits += 8;
23161          }
23162          //===//
23163          if (hold !== (state.total & 0xffffffff)) {
23164            strm.msg = 'incorrect length check';
23165            state.mode = BAD;
23166            break;
23167          }
23168          //=== INITBITS();
23169          hold = 0;
23170          bits = 0;
23171          //===//
23172          //Tracev((stderr, "inflate:   length matches trailer\n"));
23173        }
23174        state.mode = DONE;
23175        /* falls through */
23176      case DONE:
23177        ret = Z_STREAM_END;
23178        break inf_leave;
23179      case BAD:
23180        ret = Z_DATA_ERROR;
23181        break inf_leave;
23182      case MEM:
23183        return Z_MEM_ERROR;
23184      case SYNC:
23185        /* falls through */
23186      default:
23187        return Z_STREAM_ERROR;
23188    }
23189  }
23190
23191  // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
23192
23193  /*
23194     Return from inflate(), updating the total counts and the check value.
23195     If there was no progress during the inflate() call, return a buffer
23196     error.  Call updatewindow() to create and/or update the window state.
23197     Note: a memory error from inflate() is non-recoverable.
23198   */
23199
23200  //--- RESTORE() ---
23201  strm.next_out = put;
23202  strm.avail_out = left;
23203  strm.next_in = next;
23204  strm.avail_in = have;
23205  state.hold = hold;
23206  state.bits = bits;
23207  //---
23208
23209  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
23210                      (state.mode < CHECK || flush !== Z_FINISH))) {
23211    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
23212      state.mode = MEM;
23213      return Z_MEM_ERROR;
23214    }
23215  }
23216  _in -= strm.avail_in;
23217  _out -= strm.avail_out;
23218  strm.total_in += _in;
23219  strm.total_out += _out;
23220  state.total += _out;
23221  if (state.wrap && _out) {
23222    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
23223      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
23224  }
23225  strm.data_type = state.bits + (state.last ? 64 : 0) +
23226                    (state.mode === TYPE ? 128 : 0) +
23227                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
23228  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
23229    ret = Z_BUF_ERROR;
23230  }
23231  return ret;
23232}
23233
23234function inflateEnd(strm) {
23235
23236  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
23237    return Z_STREAM_ERROR;
23238  }
23239
23240  var state = strm.state;
23241  if (state.window) {
23242    state.window = null;
23243  }
23244  strm.state = null;
23245  return Z_OK;
23246}
23247
23248function inflateGetHeader(strm, head) {
23249  var state;
23250
23251  /* check state */
23252  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
23253  state = strm.state;
23254  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }
23255
23256  /* save header structure */
23257  state.head = head;
23258  head.done = false;
23259  return Z_OK;
23260}
23261
23262function inflateSetDictionary(strm, dictionary) {
23263  var dictLength = dictionary.length;
23264
23265  var state;
23266  var dictid;
23267  var ret;
23268
23269  /* check state */
23270  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }
23271  state = strm.state;
23272
23273  if (state.wrap !== 0 && state.mode !== DICT) {
23274    return Z_STREAM_ERROR;
23275  }
23276
23277  /* check for correct dictionary identifier */
23278  if (state.mode === DICT) {
23279    dictid = 1; /* adler32(0, null, 0)*/
23280    /* dictid = adler32(dictid, dictionary, dictLength); */
23281    dictid = adler32(dictid, dictionary, dictLength, 0);
23282    if (dictid !== state.check) {
23283      return Z_DATA_ERROR;
23284    }
23285  }
23286  /* copy dictionary to window using updatewindow(), which will amend the
23287   existing dictionary if appropriate */
23288  ret = updatewindow(strm, dictionary, dictLength, dictLength);
23289  if (ret) {
23290    state.mode = MEM;
23291    return Z_MEM_ERROR;
23292  }
23293  state.havedict = 1;
23294  // Tracev((stderr, "inflate:   dictionary set\n"));
23295  return Z_OK;
23296}
23297
23298exports.inflateReset = inflateReset;
23299exports.inflateReset2 = inflateReset2;
23300exports.inflateResetKeep = inflateResetKeep;
23301exports.inflateInit = inflateInit;
23302exports.inflateInit2 = inflateInit2;
23303exports.inflate = inflate;
23304exports.inflateEnd = inflateEnd;
23305exports.inflateGetHeader = inflateGetHeader;
23306exports.inflateSetDictionary = inflateSetDictionary;
23307exports.inflateInfo = 'pako inflate (from Nodeca project)';
23308
23309/* Not implemented
23310exports.inflateCopy = inflateCopy;
23311exports.inflateGetDictionary = inflateGetDictionary;
23312exports.inflateMark = inflateMark;
23313exports.inflatePrime = inflatePrime;
23314exports.inflateSync = inflateSync;
23315exports.inflateSyncPoint = inflateSyncPoint;
23316exports.inflateUndermine = inflateUndermine;
23317*/
23318
23319
23320/***/ }
23320),
23321/* 158 */
23322/***/ (function(module, exports, __webpack_require__
vendor: 12,683 bytes, lines 23322-23672
23322) {
23323
23324"use strict";
23325
23326
23327// (C) 1995-2013 Jean-loup Gailly and Mark Adler
23328// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
23329//
23330// This software is provided 'as-is', without any express or implied
23331// warranty. In no event will the authors be held liable for any damages
23332// arising from the use of this software.
23333//
23334// Permission is granted to anyone to use this software for any purpose,
23335// including commercial applications, and to alter it and redistribute it
23336// freely, subject to the following restrictions:
23337//
23338// 1. The origin of this software must not be misrepresented; you must not
23339//   claim that you wrote the original software. If you use this software
23340//   in a product, an acknowledgment in the product documentation would be
23341//   appreciated but is not required.
23342// 2. Altered source versions must be plainly marked as such, and must not be
23343//   misrepresented as being the original software.
23344// 3. This notice may not be removed or altered from any source distribution.
23345
23346// See state defs from inflate.js
23347var BAD = 30;       /* got a data error -- remain here until reset */
23348var TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
23349
23350/*
23351   Decode literal, length, and distance codes and write out the resulting
23352   literal and match bytes until either not enough input or output is
23353   available, an end-of-block is encountered, or a data error is encountered.
23354   When large enough input and output buffers are supplied to inflate(), for
23355   example, a 16K input buffer and a 64K output buffer, more than 95% of the
23356   inflate execution time is spent in this routine.
23357
23358   Entry assumptions:
23359
23360        state.mode === LEN
23361        strm.avail_in >= 6
23362        strm.avail_out >= 258
23363        start >= strm.avail_out
23364        state.bits < 8
23365
23366   On return, state.mode is one of:
23367
23368        LEN -- ran out of enough output space or enough available input
23369        TYPE -- reached end of block code, inflate() to interpret next block
23370        BAD -- error in block data
23371
23372   Notes:
23373
23374    - The maximum input bits used by a length/distance pair is 15 bits for the
23375      length code, 5 bits for the length extra, 15 bits for the distance code,
23376      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
23377      Therefore if strm.avail_in >= 6, then there is enough input to avoid
23378      checking for available input while decoding.
23379
23380    - The maximum bytes that a single length/distance pair can output is 258
23381      bytes, which is the maximum length that can be coded.  inflate_fast()
23382      requires strm.avail_out >= 258 for each loop to avoid checking for
23383      output space.
23384 */
23385module.exports = function inflate_fast(strm, start) {
23386  var state;
23387  var _in;                    /* local strm.input */
23388  var last;                   /* have enough input while in < last */
23389  var _out;                   /* local strm.output */
23390  var beg;                    /* inflate()'s initial strm.output */
23391  var end;                    /* while out < end, enough space available */
23392//#ifdef INFLATE_STRICT
23393  var dmax;                   /* maximum distance from zlib header */
23394//#endif
23395  var wsize;                  /* window size or zero if not using window */
23396  var whave;                  /* valid bytes in the window */
23397  var wnext;                  /* window write index */
23398  // Use `s_window` instead `window`, avoid conflict with instrumentation tools
23399  var s_window;               /* allocated sliding window, if wsize != 0 */
23400  var hold;                   /* local strm.hold */
23401  var bits;                   /* local strm.bits */
23402  var lcode;                  /* local strm.lencode */
23403  var dcode;                  /* local strm.distcode */
23404  var lmask;                  /* mask for first level of length codes */
23405  var dmask;                  /* mask for first level of distance codes */
23406  var here;                   /* retrieved table entry */
23407  var op;                     /* code bits, operation, extra bits, or */
23408                              /*  window position, window bytes to copy */
23409  var len;                    /* match length, unused bytes */
23410  var dist;                   /* match distance */
23411  var from;                   /* where to copy match from */
23412  var from_source;
23413
23414
23415  var input, output; // JS specific, because we have no pointers
23416
23417  /* copy state to local variables */
23418  state = strm.state;
23419  //here = state.here;
23420  _in = strm.next_in;
23421  input = strm.input;
23422  last = _in + (strm.avail_in - 5);
23423  _out = strm.next_out;
23424  output = strm.output;
23425  beg = _out - (start - strm.avail_out);
23426  end = _out + (strm.avail_out - 257);
23427//#ifdef INFLATE_STRICT
23428  dmax = state.dmax;
23429//#endif
23430  wsize = state.wsize;
23431  whave = state.whave;
23432  wnext = state.wnext;
23433  s_window = state.window;
23434  hold = state.hold;
23435  bits = state.bits;
23436  lcode = state.lencode;
23437  dcode = state.distcode;
23438  lmask = (1 << state.lenbits) - 1;
23439  dmask = (1 << state.distbits) - 1;
23440
23441
23442  /* decode literals and length/distances until end-of-block or not enough
23443     input data or output space */
23444
23445  top:
23446  do {
23447    if (bits < 15) {
23448      hold += input[_in++] << bits;
23449      bits += 8;
23450      hold += input[_in++] << bits;
23451      bits += 8;
23452    }
23453
23454    here = lcode[hold & lmask];
23455
23456    dolen:
23457    for (;;) { // Goto emulation
23458      op = here >>> 24/*here.bits*/;
23459      hold >>>= op;
23460      bits -= op;
23461      op = (here >>> 16) & 0xff/*here.op*/;
23462      if (op === 0) {                          /* literal */
23463        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
23464        //        "inflate:         literal '%c'\n" :
23465        //        "inflate:         literal 0x%02x\n", here.val));
23466        output[_out++] = here & 0xffff/*here.val*/;
23467      }
23468      else if (op & 16) {                     /* length base */
23469        len = here & 0xffff/*here.val*/;
23470        op &= 15;                           /* number of extra bits */
23471        if (op) {
23472          if (bits < op) {
23473            hold += input[_in++] << bits;
23474            bits += 8;
23475          }
23476          len += hold & ((1 << op) - 1);
23477          hold >>>= op;
23478          bits -= op;
23479        }
23480        //Tracevv((stderr, "inflate:         length %u\n", len));
23481        if (bits < 15) {
23482          hold += input[_in++] << bits;
23483          bits += 8;
23484          hold += input[_in++] << bits;
23485          bits += 8;
23486        }
23487        here = dcode[hold & dmask];
23488
23489        dodist:
23490        for (;;) { // goto emulation
23491          op = here >>> 24/*here.bits*/;
23492          hold >>>= op;
23493          bits -= op;
23494          op = (here >>> 16) & 0xff/*here.op*/;
23495
23496          if (op & 16) {                      /* distance base */
23497            dist = here & 0xffff/*here.val*/;
23498            op &= 15;                       /* number of extra bits */
23499            if (bits < op) {
23500              hold += input[_in++] << bits;
23501              bits += 8;
23502              if (bits < op) {
23503                hold += input[_in++] << bits;
23504                bits += 8;
23505              }
23506            }
23507            dist += hold & ((1 << op) - 1);
23508//#ifdef INFLATE_STRICT
23509            if (dist > dmax) {
23510              strm.msg = 'invalid distance too far back';
23511              state.mode = BAD;
23512              break top;
23513            }
23514//#endif
23515            hold >>>= op;
23516            bits -= op;
23517            //Tracevv((stderr, "inflate:         distance %u\n", dist));
23518            op = _out - beg;                /* max distance in output */
23519            if (dist > op) {                /* see if copy from window */
23520              op = dist - op;               /* distance back in window */
23521              if (op > whave) {
23522                if (state.sane) {
23523                  strm.msg = 'invalid distance too far back';
23524                  state.mode = BAD;
23525                  break top;
23526                }
23527
23528// (!) This block is disabled in zlib defaults,
23529// don't enable it for binary compatibility
23530//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
23531//                if (len <= op - whave) {
23532//                  do {
23533//                    output[_out++] = 0;
23534//                  } while (--len);
23535//                  continue top;
23536//                }
23537//                len -= op - whave;
23538//                do {
23539//                  output[_out++] = 0;
23540//                } while (--op > whave);
23541//                if (op === 0) {
23542//                  from = _out - dist;
23543//                  do {
23544//                    output[_out++] = output[from++];
23545//                  } while (--len);
23546//                  continue top;
23547//                }
23548//#endif
23549              }
23550              from = 0; // window index
23551              from_source = s_window;
23552              if (wnext === 0) {           /* very common case */
23553                from += wsize - op;
23554                if (op < len) {         /* some from window */
23555                  len -= op;
23556                  do {
23557                    output[_out++] = s_window[from++];
23558                  } while (--op);
23559                  from = _out - dist;  /* rest from output */
23560                  from_source = output;
23561                }
23562              }
23563              else if (wnext < op) {      /* wrap around window */
23564                from += wsize + wnext - op;
23565                op -= wnext;
23566                if (op < len) {         /* some from end of window */
23567                  len -= op;
23568                  do {
23569                    output[_out++] = s_window[from++];
23570                  } while (--op);
23571                  from = 0;
23572                  if (wnext < len) {  /* some from start of window */
23573                    op = wnext;
23574                    len -= op;
23575                    do {
23576                      output[_out++] = s_window[from++];
23577                    } while (--op);
23578                    from = _out - dist;      /* rest from output */
23579                    from_source = output;
23580                  }
23581                }
23582              }
23583              else {                      /* contiguous in window */
23584                from += wnext - op;
23585                if (op < len) {         /* some from window */
23586                  len -= op;
23587                  do {
23588                    output[_out++] = s_window[from++];
23589                  } while (--op);
23590                  from = _out - dist;  /* rest from output */
23591                  from_source = output;
23592                }
23593              }
23594              while (len > 2) {
23595                output[_out++] = from_source[from++];
23596                output[_out++] = from_source[from++];
23597                output[_out++] = from_source[from++];
23598                len -= 3;
23599              }
23600              if (len) {
23601                output[_out++] = from_source[from++];
23602                if (len > 1) {
23603                  output[_out++] = from_source[from++];
23604                }
23605              }
23606            }
23607            else {
23608              from = _out - dist;          /* copy direct from output */
23609              do {                        /* minimum length is three */
23610                output[_out++] = output[from++];
23611                output[_out++] = output[from++];
23612                output[_out++] = output[from++];
23613                len -= 3;
23614              } while (len > 2);
23615              if (len) {
23616                output[_out++] = output[from++];
23617                if (len > 1) {
23618                  output[_out++] = output[from++];
23619                }
23620              }
23621            }
23622          }
23623          else if ((op & 64) === 0) {          /* 2nd level distance code */
23624            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
23625            continue dodist;
23626          }
23627          else {
23628            strm.msg = 'invalid distance code';
23629            state.mode = BAD;
23630            break top;
23631          }
23632
23633          break; // need to emulate goto via "continue"
23634        }
23635      }
23636      else if ((op & 64) === 0) {              /* 2nd level length code */
23637        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
23638        continue dolen;
23639      }
23640      else if (op & 32) {                     /* end-of-block */
23641        //Tracevv((stderr, "inflate:         end of block\n"));
23642        state.mode = TYPE;
23643        break top;
23644      }
23645      else {
23646        strm.msg = 'invalid literal/length code';
23647        state.mode = BAD;
23648        break top;
23649      }
23650
23651      break; // need to emulate goto via "continue"
23652    }
23653  } while (_in < last && _out < end);
23654
23655  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
23656  len = bits >> 3;
23657  _in -= len;
23658  bits -= len << 3;
23659  hold &= (1 << bits) - 1;
23660
23661  /* update state and return */
23662  strm.next_in = _in;
23663  strm.next_out = _out;
23664  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
23665  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
23666  state.hold = hold;
23667  state.bits = bits;
23668  return;
23669};
23670
23671
23672/***/ }
23672),
23673/* 159 */
23674/***/ (function(module, exports, __webpack_require__) {
23675
23676"use strict";
23677
23678
23679// (C) 1995-2013 Jean-loup Gailly and Mark Adler
23680// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
23681//
23682// This software is provided 'as-is', without any express or implied
23683// warranty. In no event will the authors be held liable for any damages
23684// arising from the use of this software.
23685//
23686// Permission is granted to anyone to use this software for any purpose,
23687// including commercial applications, and to alter it and redistribute it
23688// freely, subject to the following restrictions:
23689//
23690// 1. The origin of this software must not be misrepresented; you must not
23691//   claim that you wrote the original software. If you use this software
23692//   in a product, an acknowledgment in the product documentation would be
23693//   appreciated but is not required.
23694// 2. Altered source versions must be plainly marked as such, and must not be
23695//   misrepresented as being the original software.
23696// 3. This notice may not be removed or altered from any source distribution.
23697
23698var utils = __webpack_require__(34
vendor: 11,496 bytes, lines 23698-24022
23698);
23699
23700var MAXBITS = 15;
23701var ENOUGH_LENS = 852;
23702var ENOUGH_DISTS = 592;
23703//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
23704
23705var CODES = 0;
23706var LENS = 1;
23707var DISTS = 2;
23708
23709var lbase = [ /* Length codes 257..285 base */
23710  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
23711  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
23712];
23713
23714var lext = [ /* Length codes 257..285 extra */
23715  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
23716  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
23717];
23718
23719var dbase = [ /* Distance codes 0..29 base */
23720  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
23721  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
23722  8193, 12289, 16385, 24577, 0, 0
23723];
23724
23725var dext = [ /* Distance codes 0..29 extra */
23726  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
23727  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
23728  28, 28, 29, 29, 64, 64
23729];
23730
23731module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
23732{
23733  var bits = opts.bits;
23734      //here = opts.here; /* table entry for duplication */
23735
23736  var len = 0;               /* a code's length in bits */
23737  var sym = 0;               /* index of code symbols */
23738  var min = 0, max = 0;          /* minimum and maximum code lengths */
23739  var root = 0;              /* number of index bits for root table */
23740  var curr = 0;              /* number of index bits for current table */
23741  var drop = 0;              /* code bits to drop for sub-table */
23742  var left = 0;                   /* number of prefix codes available */
23743  var used = 0;              /* code entries in table used */
23744  var huff = 0;              /* Huffman code */
23745  var incr;              /* for incrementing code, index */
23746  var fill;              /* index for replicating entries */
23747  var low;               /* low bits for current root entry */
23748  var mask;              /* mask for low root bits */
23749  var next;             /* next available space in table */
23750  var base = null;     /* base value table to use */
23751  var base_index = 0;
23752//  var shoextra;    /* extra bits table to use */
23753  var end;                    /* use base and extra for symbol > end */
23754  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */
23755  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */
23756  var extra = null;
23757  var extra_index = 0;
23758
23759  var here_bits, here_op, here_val;
23760
23761  /*
23762   Process a set of code lengths to create a canonical Huffman code.  The
23763   code lengths are lens[0..codes-1].  Each length corresponds to the
23764   symbols 0..codes-1.  The Huffman code is generated by first sorting the
23765   symbols by length from short to long, and retaining the symbol order
23766   for codes with equal lengths.  Then the code starts with all zero bits
23767   for the first code of the shortest length, and the codes are integer
23768   increments for the same length, and zeros are appended as the length
23769   increases.  For the deflate format, these bits are stored backwards
23770   from their more natural integer increment ordering, and so when the
23771   decoding tables are built in the large loop below, the integer codes
23772   are incremented backwards.
23773
23774   This routine assumes, but does not check, that all of the entries in
23775   lens[] are in the range 0..MAXBITS.  The caller must assure this.
23776   1..MAXBITS is interpreted as that code length.  zero means that that
23777   symbol does not occur in this code.
23778
23779   The codes are sorted by computing a count of codes for each length,
23780   creating from that a table of starting indices for each length in the
23781   sorted table, and then entering the symbols in order in the sorted
23782   table.  The sorted table is work[], with that space being provided by
23783   the caller.
23784
23785   The length counts are used for other purposes as well, i.e. finding
23786   the minimum and maximum length codes, determining if there are any
23787   codes at all, checking for a valid set of lengths, and looking ahead
23788   at length counts to determine sub-table sizes when building the
23789   decoding tables.
23790   */
23791
23792  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
23793  for (len = 0; len <= MAXBITS; len++) {
23794    count[len] = 0;
23795  }
23796  for (sym = 0; sym < codes; sym++) {
23797    count[lens[lens_index + sym]]++;
23798  }
23799
23800  /* bound code lengths, force root to be within code lengths */
23801  root = bits;
23802  for (max = MAXBITS; max >= 1; max--) {
23803    if (count[max] !== 0) { break; }
23804  }
23805  if (root > max) {
23806    root = max;
23807  }
23808  if (max === 0) {                     /* no symbols to code at all */
23809    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
23810    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
23811    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
23812    table[table_index++] = (1 << 24) | (64 << 16) | 0;
23813
23814
23815    //table.op[opts.table_index] = 64;
23816    //table.bits[opts.table_index] = 1;
23817    //table.val[opts.table_index++] = 0;
23818    table[table_index++] = (1 << 24) | (64 << 16) | 0;
23819
23820    opts.bits = 1;
23821    return 0;     /* no symbols, but wait for decoding to report error */
23822  }
23823  for (min = 1; min < max; min++) {
23824    if (count[min] !== 0) { break; }
23825  }
23826  if (root < min) {
23827    root = min;
23828  }
23829
23830  /* check for an over-subscribed or incomplete set of lengths */
23831  left = 1;
23832  for (len = 1; len <= MAXBITS; len++) {
23833    left <<= 1;
23834    left -= count[len];
23835    if (left < 0) {
23836      return -1;
23837    }        /* over-subscribed */
23838  }
23839  if (left > 0 && (type === CODES || max !== 1)) {
23840    return -1;                      /* incomplete set */
23841  }
23842
23843  /* generate offsets into symbol table for each length for sorting */
23844  offs[1] = 0;
23845  for (len = 1; len < MAXBITS; len++) {
23846    offs[len + 1] = offs[len] + count[len];
23847  }
23848
23849  /* sort symbols by length, by symbol order within each length */
23850  for (sym = 0; sym < codes; sym++) {
23851    if (lens[lens_index + sym] !== 0) {
23852      work[offs[lens[lens_index + sym]]++] = sym;
23853    }
23854  }
23855
23856  /*
23857   Create and fill in decoding tables.  In this loop, the table being
23858   filled is at next and has curr index bits.  The code being used is huff
23859   with length len.  That code is converted to an index by dropping drop
23860   bits off of the bottom.  For codes where len is less than drop + curr,
23861   those top drop + curr - len bits are incremented through all values to
23862   fill the table with replicated entries.
23863
23864   root is the number of index bits for the root table.  When len exceeds
23865   root, sub-tables are created pointed to by the root entry with an index
23866   of the low root bits of huff.  This is saved in low to check for when a
23867   new sub-table should be started.  drop is zero when the root table is
23868   being filled, and drop is root when sub-tables are being filled.
23869
23870   When a new sub-table is needed, it is necessary to look ahead in the
23871   code lengths to determine what size sub-table is needed.  The length
23872   counts are used for this, and so count[] is decremented as codes are
23873   entered in the tables.
23874
23875   used keeps track of how many table entries have been allocated from the
23876   provided *table space.  It is checked for LENS and DIST tables against
23877   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
23878   the initial root table size constants.  See the comments in inftrees.h
23879   for more information.
23880
23881   sym increments through all symbols, and the loop terminates when
23882   all codes of length max, i.e. all codes, have been processed.  This
23883   routine permits incomplete codes, so another loop after this one fills
23884   in the rest of the decoding tables with invalid code markers.
23885   */
23886
23887  /* set up for code type */
23888  // poor man optimization - use if-else instead of switch,
23889  // to avoid deopts in old v8
23890  if (type === CODES) {
23891    base = extra = work;    /* dummy value--not used */
23892    end = 19;
23893
23894  } else if (type === LENS) {
23895    base = lbase;
23896    base_index -= 257;
23897    extra = lext;
23898    extra_index -= 257;
23899    end = 256;
23900
23901  } else {                    /* DISTS */
23902    base = dbase;
23903    extra = dext;
23904    end = -1;
23905  }
23906
23907  /* initialize opts for loop */
23908  huff = 0;                   /* starting code */
23909  sym = 0;                    /* starting code symbol */
23910  len = min;                  /* starting code length */
23911  next = table_index;              /* current table to fill in */
23912  curr = root;                /* current table index bits */
23913  drop = 0;                   /* current bits to drop from code for index */
23914  low = -1;                   /* trigger new sub-table when len > root */
23915  used = 1 << root;          /* use root table entries */
23916  mask = used - 1;            /* mask for comparing low */
23917
23918  /* check available table space */
23919  if ((type === LENS && used > ENOUGH_LENS) ||
23920    (type === DISTS && used > ENOUGH_DISTS)) {
23921    return 1;
23922  }
23923
23924  /* process all codes and make table entries */
23925  for (;;) {
23926    /* create table entry */
23927    here_bits = len - drop;
23928    if (work[sym] < end) {
23929      here_op = 0;
23930      here_val = work[sym];
23931    }
23932    else if (work[sym] > end) {
23933      here_op = extra[extra_index + work[sym]];
23934      here_val = base[base_index + work[sym]];
23935    }
23936    else {
23937      here_op = 32 + 64;         /* end of block */
23938      here_val = 0;
23939    }
23940
23941    /* replicate for those indices with low len bits equal to huff */
23942    incr = 1 << (len - drop);
23943    fill = 1 << curr;
23944    min = fill;                 /* save offset to next table */
23945    do {
23946      fill -= incr;
23947      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
23948    } while (fill !== 0);
23949
23950    /* backwards increment the len-bit code huff */
23951    incr = 1 << (len - 1);
23952    while (huff & incr) {
23953      incr >>= 1;
23954    }
23955    if (incr !== 0) {
23956      huff &= incr - 1;
23957      huff += incr;
23958    } else {
23959      huff = 0;
23960    }
23961
23962    /* go to next symbol, update count, len */
23963    sym++;
23964    if (--count[len] === 0) {
23965      if (len === max) { break; }
23966      len = lens[lens_index + work[sym]];
23967    }
23968
23969    /* create new sub-table if needed */
23970    if (len > root && (huff & mask) !== low) {
23971      /* if first time, transition to sub-tables */
23972      if (drop === 0) {
23973        drop = root;
23974      }
23975
23976      /* increment past last table */
23977      next += min;            /* here min is 1 << curr */
23978
23979      /* determine length of next table */
23980      curr = len - drop;
23981      left = 1 << curr;
23982      while (curr + drop < max) {
23983        left -= count[curr + drop];
23984        if (left <= 0) { break; }
23985        curr++;
23986        left <<= 1;
23987      }
23988
23989      /* check for enough space */
23990      used += 1 << curr;
23991      if ((type === LENS && used > ENOUGH_LENS) ||
23992        (type === DISTS && used > ENOUGH_DISTS)) {
23993        return 1;
23994      }
23995
23996      /* point entry in root table to sub-table */
23997      low = huff & mask;
23998      /*table.op[low] = curr;
23999      table.bits[low] = root;
24000      table.val[low] = next - opts.table_index;*/
24001      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
24002    }
24003  }
24004
24005  /* fill in remaining table entry if code is incomplete (guaranteed to have
24006   at most one remaining entry, since if the code is incomplete, the
24007   maximum code length that was allowed to get this far is one bit) */
24008  if (huff !== 0) {
24009    //table.op[next + huff] = 64;            /* invalid code marker */
24010    //table.bits[next + huff] = len - drop;
24011    //table.val[next + huff] = 0;
24012    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
24013  }
24014
24015  /* set return parameters */
24016  //opts.table_index += used;
24017  opts.bits = root;
24018  return 0;
24019};
24020
24021
24022/***/ }
24022),
24023/* 160 */
24024/***/ (function(module, exports, __webpack_require__) {
24025
24026"use strict";
24027
24028
24029// (C) 1995-2013 Jean-loup Gailly and Mark Adler
24030// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
24031//
24032// This software is provided 'as-is', without any express or implied
24033// warranty. In no event will the authors be held liable for any damages
24034// arising from the use of this software.
24035//
24036// Permission is granted to anyone to use this software for any purpose,
24037// including commercial applications, and to alter it and redistribute it
24038// freely, subject to the following restrictions:
24039//
24040// 1. The origin of this software must not be misrepresented; you must not
24041//   claim that you wrote the original software. If you use this software
24042//   in a product, an acknowledgment in the product documentation would be
24043//   appreciated but is not required.
24044// 2. Altered source versions must be plainly marked as such, and must not be
24045//   misrepresented as being the original software.
24046// 3. This notice may not be removed or altered from any source distribution.
24047
24048module.exports = {
24049
24050  /* Allowed flush values; see deflate() and inflate() below for details */
24051  Z_NO_FLUSH:         0,
24052  Z_PARTIAL_FLUSH:    1,
24053  Z_SYNC_FLUSH:       2,
24054  Z_FULL_FLUSH:       3,
24055  Z_FINISH:           4,
24056  Z_BLOCK:            5,
24057  Z_TREES:            6,
24058
24059  /* Return codes for the compression/decompression functions. Negative values
24060  * are errors, positive values are used for special but normal events.
24061  */
24062  Z_OK:               0,
24063  Z_STREAM_END:       1,
24064  Z_NEED_DICT:        2,
24065  Z_ERRNO:           -1,
24066  Z_STREAM_ERROR:    -2,
24067  Z_DATA_ERROR:      -3,
24068  //Z_MEM_ERROR:     -4,
24069  Z_BUF_ERROR:       -5,
24070  //Z_VERSION_ERROR: -6,
24071
24072  /* compression levels */
24073  Z_NO_COMPRESSION:         0,
24074  Z_BEST_SPEED:             1,
24075  Z_BEST_COMPRESSION:       9,
24076  Z_DEFAULT_COMPRESSION:   -1,
24077
24078
24079  Z_FILTERED:               1,
24080  Z_HUFFMAN_ONLY:           2,
24081  Z_RLE:                    3,
24082  Z_FIXED:                  4,
24083  Z_DEFAULT_STRATEGY:       0,
24084
24085  /* Possible values of the data_type field (though see inflate()) */
24086  Z_BINARY:                 0,
24087  Z_TEXT:                   1,
24088  //Z_ASCII:                1, // = Z_TEXT (deprecated)
24089  Z_UNKNOWN:                2,
24090
24091  /* The deflate compression method */
24092  Z_DEFLATED:               8
24093  //Z_NULL:                 null // Use -1 or null inline, depending on var type
24094};
24095
24096
24097/***/ }),
24098/* 161 */
24099/***/ (function(module, exports) {
24100
24101// Generated by CoffeeScript 1.12.6
24102
24103/*
24104PDFPage - represents a single page in the PDF document
24105By Devon Govett
24106 */
24107
24108(function() {
24109  var PDFPage;
24110
24111  PDFPage = (function() {
24112    var DEFAULT_MARGINS, SIZES;
24113
24114    function PDFPage(document, options) {
24115      var dimensions;
24116      this.document = document;
24117      if (options == null) {
24118        options = {};
24119      }
24120      this.size = options.size || 'letter';
24121      this.layout = options.layout || 'portrait';
24122      if (typeof options.margin === 'number') {
24123        this.margins = {
24124          top: options.margin,
24125          left: options.margin,
24126          bottom: options.margin,
24127          right: options.margin
24128        };
24129      } else {
24130        this.margins = options.margins || DEFAULT_MARGINS;
24131      }
24132      dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()];
24133      this.width = dimensions[this.layout === 'portrait' ? 0 : 1];
24134      this.height = dimensions[this.layout === 'portrait' ? 1 : 0];
24135      this.content = this.document.ref();
24136      this.resources = this.document.ref({
24137        ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']
24138      });
24139      Object.defineProperties(this, {
24140        fonts: {
24141          get: (function(_this) {
24142            return function() {
24143              var base;
24144              return (base = _this.resources.data).Font != null ? base.Font : base.Font = {};
24145            };
24146          })(this)
24147        },
24148        xobjects: {
24149          get: (function(_this) {
24150            return function() {
24151              var base;
24152              return (base = _this.resources.data).XObject != null ? base.XObject : base.XObject = {};
24153            };
24154          })(this)
24155        },
24156        ext_gstates: {
24157          get: (function(_this) {
24158            return function() {
24159              var base;
24160              return (base = _this.resources.data).ExtGState != null ? base.ExtGState : base.ExtGState = {};
24161            };
24162          })(this)
24163        },
24164        patterns: {
24165          get: (function(_this) {
24166            return function() {
24167              var base;
24168              return (base = _this.resources.data).Pattern != null ? base.Pattern : base.Pattern = {};
24169            };
24170          })(this)
24171        },
24172        annotations: {
24173          get: (function(_this) {
24174            return function() {
24175              var base;
24176              return (base = _this.dictionary.data).Annots != null ? base.Annots : base.Annots = [];
24177            };
24178          })(this)
24179        }
24180      });
24181      this.dictionary = this.document.ref({
24182        Type: 'Page',
24183        Parent: this.document._root.data.Pages,
24184        MediaBox: [0, 0, this.width, this.height],
24185        Contents: this.content,
24186        Resources: this.resources
24187      });
24188    }
24189
24190    PDFPage.prototype.maxY = function() {
24191      return this.height - this.margins.bottom;
24192    };
24193
24194    PDFPage.prototype.write = function(chunk) {
24195      return this.content.write(chunk);
24196    };
24197
24198    PDFPage.prototype.end = function() {
24199      this.dictionary.end();
24200      this.resources.end();
24201      return this.content.end();
24202    };
24203
24204    DEFAULT_MARGINS = {
24205      top: 72,
24206      left: 72,
24207      bottom: 72,
24208      right: 72
24209    };
24210
24211    SIZES = {
24212      '4A0': [4767.87, 6740.79],
24213      '2A0': [3370.39, 4767.87],
24214      A0: [2383.94, 3370.39],
24215      A1: [1683.78, 2383.94],
24216      A2: [1190.55, 1683.78],
24217      A3: [841.89, 1190.55],
24218      A4: [595.28, 841.89],
24219      A5: [419.53, 595.28],
24220      A6: [297.64, 419.53],
24221      A7: [209.76, 297.64],
24222      A8: [147.40, 209.76],
24223      A9: [104.88, 147.40],
24224      A10: [73.70, 104.88],
24225      B0: [2834.65, 4008.19],
24226      B1: [2004.09, 2834.65],
24227      B2: [1417.32, 2004.09],
24228      B3: [1000.63, 1417.32],
24229      B4: [708.66, 1000.63],
24230      B5: [498.90, 708.66],
24231      B6: [354.33, 498.90],
24232      B7: [249.45, 354.33],
24233      B8: [175.75, 249.45],
24234      B9: [124.72, 175.75],
24235      B10: [87.87, 124.72],
24236      C0: [2599.37, 3676.54],
24237      C1: [1836.85, 2599.37],
24238      C2: [1298.27, 1836.85],
24239      C3: [918.43, 1298.27],
24240      C4: [649.13, 918.43],
24241      C5: [459.21, 649.13],
24242      C6: [323.15, 459.21],
24243      C7: [229.61, 323.15],
24244      C8: [161.57, 229.61],
24245      C9: [113.39, 161.57],
24246      C10: [79.37, 113.39],
24247      RA0: [2437.80, 3458.27],
24248      RA1: [1729.13, 2437.80],
24249      RA2: [1218.90, 1729.13],
24250      RA3: [864.57, 1218.90],
24251      RA4: [609.45, 864.57],
24252      SRA0: [2551.18, 3628.35],
24253      SRA1: [1814.17, 2551.18],
24254      SRA2: [1275.59, 1814.17],
24255      SRA3: [907.09, 1275.59],
24256      SRA4: [637.80, 907.09],
24257      EXECUTIVE: [521.86, 756.00],
24258      FOLIO: [612.00, 936.00],
24259      LEGAL: [612.00, 1008.00],
24260      LETTER: [612.00, 792.00],
24261      TABLOID: [792.00, 1224.00]
24262    };
24263
24264    return PDFPage;
24265
24266  })();
24267
24268  module.exports = PDFPage;
24269
24270}).call(this);
24271
24272
24273/***/ }),
24274/* 162 */
24275/***/ (function(module, exports, __webpack_require__) {
24276
24277// Generated by CoffeeScript 1.12.6
24278(function() {
24279  var PDFGradient, PDFLinearGradient, PDFRadialGradient, namedColors, ref;
24280
24281  ref = __webpack_require__(163), PDFGradient = ref.PDFGradient, PDFLinearGradient = ref.PDFLinearGradient, PDFRadialGradient = ref.PDFRadialGradient;
24282
24283  module.exports = {
24284    initColor: function() {
24285      this._opacityRegistry = {};
24286      this._opacityCount = 0;
24287      return this._gradCount = 0;
24288    },
24289    _normalizeColor: function(color) {
24290      var hex, part;
24291      if (color instanceof PDFGradient) {
24292        return color;
24293      }
24294      if (typeof color === 'string') {
24295        if (color.charAt(0) === '#') {
24296          if (color.length === 4) {
24297            color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, "#$1$1$2$2$3$3");
24298          }
24299          hex = parseInt(color.slice(1), 16);
24300          color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff];
24301        } else if (namedColors[color]) {
24302          color = namedColors[color];
24303        }
24304      }
24305      if (Array.isArray(color)) {
24306        if (color.length === 3) {
24307          color = (function() {
24308            var i, len, results;
24309            results = [];
24310            for (i = 0, len = color.length; i < len; i++) {
24311              part = color[i];
24312              results.push(part / 255);
24313            }
24314            return results;
24315          })();
24316        } else if (color.length === 4) {
24317          color = (function() {
24318            var i, len, results;
24319            results = [];
24320            for (i = 0, len = color.length; i < len; i++) {
24321              part = color[i];
24322              results.push(part / 100);
24323            }
24324            return results;
24325          })();
24326        }
24327        return color;
24328      }
24329      return null;
24330    },
24331    _setColor: function(color, stroke) {
24332      var op, space;
24333      color = this._normalizeColor(color);
24334      if (!color) {
24335        return false;
24336      }
24337      op = stroke ? 'SCN' : 'scn';
24338      if (color instanceof PDFGradient) {
24339        this._setColorSpace('Pattern', stroke);
24340        color.apply(op);
24341      } else {
24342        space = color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';
24343        this._setColorSpace(space, stroke);
24344        color = color.join(' ');
24345        this.addContent(color + " " + op);
24346      }
24347      return true;
24348    },
24349    _setColorSpace: function(space, stroke) {
24350      var op;
24351      op = stroke ? 'CS' : 'cs';
24352      return this.addContent("/" + space + " " + op);
24353    },
24354    fillColor: function(color, opacity) {
24355      var set;
24356      set = this._setColor(color, false);
24357      if (set) {
24358        this.fillOpacity(opacity);
24359      }
24360      this._fillColor = [color, opacity];
24361      return this;
24362    },
24363    strokeColor: function(color, opacity) {
24364      var set;
24365      set = this._setColor(color, true);
24366      if (set) {
24367        this.strokeOpacity(opacity);
24368      }
24369      return this;
24370    },
24371    opacity: function(opacity) {
24372      this._doOpacity(opacity, opacity);
24373      return this;
24374    },
24375    fillOpacity: function(opacity) {
24376      this._doOpacity(opacity, null);
24377      return this;
24378    },
24379    strokeOpacity: function(opacity) {
24380      this._doOpacity(null, opacity);
24381      return this;
24382    },
24383    _doOpacity: function(fillOpacity, strokeOpacity) {
24384      var dictionary, id, key, name, ref1;
24385      if (!((fillOpacity != null) || (strokeOpacity != null))) {
24386        return;
24387      }
24388      if (fillOpacity != null) {
24389        fillOpacity = Math.max(0, Math.min(1, fillOpacity));
24390      }
24391      if (strokeOpacity != null) {
24392        strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));
24393      }
24394      key = fillOpacity + "_" + strokeOpacity;
24395      if (this._opacityRegistry[key]) {
24396        ref1 = this._opacityRegistry[key], dictionary = ref1[0], name = ref1[1];
24397      } else {
24398        dictionary = {
24399          Type: 'ExtGState'
24400        };
24401        if (fillOpacity != null) {
24402          dictionary.ca = fillOpacity;
24403        }
24404        if (strokeOpacity != null) {
24405          dictionary.CA = strokeOpacity;
24406        }
24407        dictionary = this.ref(dictionary);
24408        dictionary.end();
24409        id = ++this._opacityCount;
24410        name = "Gs" + id;
24411        this._opacityRegistry[key] = [dictionary, name];
24412      }
24413      this.page.ext_gstates[name] = dictionary;
24414      return this.addContent("/" + name + " gs");
24415    },
24416    linearGradient: function(x1, y1, x2, y2) {
24417      return new PDFLinearGradient(this, x1, y1, x2, y2);
24418    },
24419    radialGradient: function(x1, y1, r1, x2, y2, r2) {
24420      return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2);
24421    }
24422  };
24423
24424  namedColors = {
24425    aliceblue: [240, 248, 255],
24426    antiquewhite: [250, 235, 215],
24427    aqua: [0, 255, 255],
24428    aquamarine: [127, 255, 212],
24429    azure: [240, 255, 255],
24430    beige: [245, 245, 220],
24431    bisque: [255, 228, 196],
24432    black: [0, 0, 0],
24433    blanchedalmond: [255, 235, 205],
24434    blue: [0, 0, 255],
24435    blueviolet: [138, 43, 226],
24436    brown: [165, 42, 42],
24437    burlywood: [222, 184, 135],
24438    cadetblue: [95, 158, 160],
24439    chartreuse: [127, 255, 0],
24440    chocolate: [210, 105, 30],
24441    coral: [255, 127, 80],
24442    cornflowerblue: [100, 149, 237],
24443    cornsilk: [255, 248, 220],
24444    crimson: [220, 20, 60],
24445    cyan: [0, 255, 255],
24446    darkblue: [0, 0, 139],
24447    darkcyan: [0, 139, 139],
24448    darkgoldenrod: [184, 134, 11],
24449    darkgray: [169, 169, 169],
24450    darkgreen: [0, 100, 0],
24451    darkgrey: [169, 169, 169],
24452    darkkhaki: [189, 183, 107],
24453    darkmagenta: [139, 0, 139],
24454    darkolivegreen: [85, 107, 47],
24455    darkorange: [255, 140, 0],
24456    darkorchid: [153, 50, 204],
24457    darkred: [139, 0, 0],
24458    darksalmon: [233, 150, 122],
24459    darkseagreen: [143, 188, 143],
24460    darkslateblue: [72, 61, 139],
24461    darkslategray: [47, 79, 79],
24462    darkslategrey: [47, 79, 79],
24463    darkturquoise: [0, 206, 209],
24464    darkviolet: [148, 0, 211],
24465    deeppink: [255, 20, 147],
24466    deepskyblue: [0, 191, 255],
24467    dimgray: [105, 105, 105],
24468    dimgrey: [105, 105, 105],
24469    dodgerblue: [30, 144, 255],
24470    firebrick: [178, 34, 34],
24471    floralwhite: [255, 250, 240],
24472    forestgreen: [34, 139, 34],
24473    fuchsia: [255, 0, 255],
24474    gainsboro: [220, 220, 220],
24475    ghostwhite: [248, 248, 255],
24476    gold: [255, 215, 0],
24477    goldenrod: [218, 165, 32],
24478    gray: [128, 128, 128],
24479    grey: [128, 128, 128],
24480    green: [0, 128, 0],
24481    greenyellow: [173, 255, 47],
24482    honeydew: [240, 255, 240],
24483    hotpink: [255, 105, 180],
24484    indianred: [205, 92, 92],
24485    indigo: [75, 0, 130],
24486    ivory: [255, 255, 240],
24487    khaki: [240, 230, 140],
24488    lavender: [230, 230, 250],
24489    lavenderblush: [255, 240, 245],
24490    lawngreen: [124, 252, 0],
24491    lemonchiffon: [255, 250, 205],
24492    lightblue: [173, 216, 230],
24493    lightcoral: [240, 128, 128],
24494    lightcyan: [224, 255, 255],
24495    lightgoldenrodyellow: [250, 250, 210],
24496    lightgray: [211, 211, 211],
24497    lightgreen: [144, 238, 144],
24498    lightgrey: [211, 211, 211],
24499    lightpink: [255, 182, 193],
24500    lightsalmon: [255, 160, 122],
24501    lightseagreen: [32, 178, 170],
24502    lightskyblue: [135, 206, 250],
24503    lightslategray: [119, 136, 153],
24504    lightslategrey: [119, 136, 153],
24505    lightsteelblue: [176, 196, 222],
24506    lightyellow: [255, 255, 224],
24507    lime: [0, 255, 0],
24508    limegreen: [50, 205, 50],
24509    linen: [250, 240, 230],
24510    magenta: [255, 0, 255],
24511    maroon: [128, 0, 0],
24512    mediumaquamarine: [102, 205, 170],
24513    mediumblue: [0, 0, 205],
24514    mediumorchid: [186, 85, 211],
24515    mediumpurple: [147, 112, 219],
24516    mediumseagreen: [60, 179, 113],
24517    mediumslateblue: [123, 104, 238],
24518    mediumspringgreen: [0, 250, 154],
24519    mediumturquoise: [72, 209, 204],
24520    mediumvioletred: [199, 21, 133],
24521    midnightblue: [25, 25, 112],
24522    mintcream: [245, 255, 250],
24523    mistyrose: [255, 228, 225],
24524    moccasin: [255, 228, 181],
24525    navajowhite: [255, 222, 173],
24526    navy: [0, 0, 128],
24527    oldlace: [253, 245, 230],
24528    olive: [128, 128, 0],
24529    olivedrab: [107, 142, 35],
24530    orange: [255, 165, 0],
24531    orangered: [255, 69, 0],
24532    orchid: [218, 112, 214],
24533    palegoldenrod: [238, 232, 170],
24534    palegreen: [152, 251, 152],
24535    paleturquoise: [175, 238, 238],
24536    palevioletred: [219, 112, 147],
24537    papayawhip: [255, 239, 213],
24538    peachpuff: [255, 218, 185],
24539    peru: [205, 133, 63],
24540    pink: [255, 192, 203],
24541    plum: [221, 160, 221],
24542    powderblue: [176, 224, 230],
24543    purple: [128, 0, 128],
24544    red: [255, 0, 0],
24545    rosybrown: [188, 143, 143],
24546    royalblue: [65, 105, 225],
24547    saddlebrown: [139, 69, 19],
24548    salmon: [250, 128, 114],
24549    sandybrown: [244, 164, 96],
24550    seagreen: [46, 139, 87],
24551    seashell: [255, 245, 238],
24552    sienna: [160, 82, 45],
24553    silver: [192, 192, 192],
24554    skyblue: [135, 206, 235],
24555    slateblue: [106, 90, 205],
24556    slategray: [112, 128, 144],
24557    slategrey: [112, 128, 144],
24558    snow: [255, 250, 250],
24559    springgreen: [0, 255, 127],
24560    steelblue: [70, 130, 180],
24561    tan: [210, 180, 140],
24562    teal: [0, 128, 128],
24563    thistle: [216, 191, 216],
24564    tomato: [255, 99, 71],
24565    turquoise: [64, 224, 208],
24566    violet: [238, 130, 238],
24567    wheat: [245, 222, 179],
24568    white: [255, 255, 255],
24569    whitesmoke: [245, 245, 245],
24570    yellow: [255, 255, 0],
24571    yellowgreen: [154, 205, 50]
24572  };
24573
24574}).call(this);
24575
24576
24577/***/ }),
24578/* 163 */
24579/***/ (function(module, exports) {
24580
24581// Generated by CoffeeScript 1.12.6
24582(function() {
24583  var PDFGradient, PDFLinearGradient, PDFRadialGradient,
24584    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
24585    hasProp = {}.hasOwnProperty;
24586
24587  PDFGradient = (function() {
24588    function PDFGradient(doc) {
24589      this.doc = doc;
24590      this.stops = [];
24591      this.embedded = false;
24592      this.transform = [1, 0, 0, 1, 0, 0];
24593      this._colorSpace = 'DeviceRGB';
24594    }
24595
24596    PDFGradient.prototype.stop = function(pos, color, opacity) {
24597      if (opacity == null) {
24598        opacity = 1;
24599      }
24600      opacity = Math.max(0, Math.min(1, opacity));
24601      this.stops.push([pos, this.doc._normalizeColor(color), opacity]);
24602      return this;
24603    };
24604
24605    PDFGradient.prototype.setTransform = function(m11, m12, m21, m22, dx, dy) {
24606      this.transform = [m11, m12, m21, m22, dx, dy];
24607      return this;
24608    };
24609
24610    PDFGradient.prototype.embed = function(m) {
24611      var bounds, encode, fn, form, grad, gstate, i, j, k, last, len, opacityPattern, pageBBox, pattern, ref, ref1, shader, stop, stops, v;
24612      if (this.stops.length === 0) {
24613        return;
24614      }
24615      this.embedded = true;
24616      this.matrix = m;
24617      last = this.stops[this.stops.length - 1];
24618      if (last[0] < 1) {
24619        this.stops.push([1, last[1], last[2]]);
24620      }
24621      bounds = [];
24622      encode = [];
24623      stops = [];
24624      for (i = j = 0, ref = this.stops.length - 1; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
24625        encode.push(0, 1);
24626        if (i + 2 !== this.stops.length) {
24627          bounds.push(this.stops[i + 1][0]);
24628        }
24629        fn = this.doc.ref({
24630          FunctionType: 2,
24631          Domain: [0, 1],
24632          C0: this.stops[i + 0][1],
24633          C1: this.stops[i + 1][1],
24634          N: 1
24635        });
24636        stops.push(fn);
24637        fn.end();
24638      }
24639      if (stops.length === 1) {
24640        fn = stops[0];
24641      } else {
24642        fn = this.doc.ref({
24643          FunctionType: 3,
24644          Domain: [0, 1],
24645          Functions: stops,
24646          Bounds: bounds,
24647          Encode: encode
24648        });
24649        fn.end();
24650      }
24651      this.id = 'Sh' + (++this.doc._gradCount);
24652      shader = this.shader(fn);
24653      shader.end();
24654      pattern = this.doc.ref({
24655        Type: 'Pattern',
24656        PatternType: 2,
24657        Shading: shader,
24658        Matrix: (function() {
24659          var k, len, ref1, results;
24660          ref1 = this.matrix;
24661          results = [];
24662          for (k = 0, len = ref1.length; k < len; k++) {
24663            v = ref1[k];
24664            results.push(+v.toFixed(5));
24665          }
24666          return results;
24667        }).call(this)
24668      });
24669      pattern.end();
24670      if (this.stops.some(function(stop) {
24671        return stop[2] < 1;
24672      })) {
24673        grad = this.opacityGradient();
24674        grad._colorSpace = 'DeviceGray';
24675        ref1 = this.stops;
24676        for (k = 0, len = ref1.length; k < len; k++) {
24677          stop = ref1[k];
24678          grad.stop(stop[0], [stop[2]]);
24679        }
24680        grad = grad.embed(this.matrix);
24681        pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];
24682        form = this.doc.ref({
24683          Type: 'XObject',
24684          Subtype: 'Form',
24685          FormType: 1,
24686          BBox: pageBBox,
24687          Group: {
24688            Type: 'Group',
24689            S: 'Transparency',
24690            CS: 'DeviceGray'
24691          },
24692          Resources: {
24693            ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],
24694            Pattern: {
24695              Sh1: grad
24696            }
24697          }
24698        });
24699        form.write("/Pattern cs /Sh1 scn");
24700        form.end((pageBBox.join(" ")) + " re f");
24701        gstate = this.doc.ref({
24702          Type: 'ExtGState',
24703          SMask: {
24704            Type: 'Mask',
24705            S: 'Luminosity',
24706            G: form
24707          }
24708        });
24709        gstate.end();
24710        opacityPattern = this.doc.ref({
24711          Type: 'Pattern',
24712          PatternType: 1,
24713          PaintType: 1,
24714          TilingType: 2,
24715          BBox: pageBBox,
24716          XStep: pageBBox[2],
24717          YStep: pageBBox[3],
24718          Resources: {
24719            ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],
24720            Pattern: {
24721              Sh1: pattern
24722            },
24723            ExtGState: {
24724              Gs1: gstate
24725            }
24726          }
24727        });
24728        opacityPattern.write("/Gs1 gs /Pattern cs /Sh1 scn");
24729        opacityPattern.end((pageBBox.join(" ")) + " re f");
24730        this.doc.page.patterns[this.id] = opacityPattern;
24731      } else {
24732        this.doc.page.patterns[this.id] = pattern;
24733      }
24734      return pattern;
24735    };
24736
24737    PDFGradient.prototype.apply = function(op) {
24738      var dx, dy, m, m0, m1, m11, m12, m2, m21, m22, m3, m4, m5, ref, ref1;
24739      ref = this.doc._ctm.slice(), m0 = ref[0], m1 = ref[1], m2 = ref[2], m3 = ref[3], m4 = ref[4], m5 = ref[5];
24740      ref1 = this.transform, m11 = ref1[0], m12 = ref1[1], m21 = ref1[2], m22 = ref1[3], dx = ref1[4], dy = ref1[5];
24741      m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5];
24742      if (!(this.embedded && m.join(" ") === this.matrix.join(" "))) {
24743        this.embed(m);
24744      }
24745      return this.doc.addContent("/" + this.id + " " + op);
24746    };
24747
24748    return PDFGradient;
24749
24750  })();
24751
24752  PDFLinearGradient = (function(superClass) {
24753    extend(PDFLinearGradient, superClass);
24754
24755    function PDFLinearGradient(doc, x1, y1, x2, y2) {
24756      this.doc = doc;
24757      this.x1 = x1;
24758      this.y1 = y1;
24759      this.x2 = x2;
24760      this.y2 = y2;
24761      PDFLinearGradient.__super__.constructor.apply(this, arguments);
24762    }
24763
24764    PDFLinearGradient.prototype.shader = function(fn) {
24765      return this.doc.ref({
24766        ShadingType: 2,
24767        ColorSpace: this._colorSpace,
24768        Coords: [this.x1, this.y1, this.x2, this.y2],
24769        Function: fn,
24770        Extend: [true, true]
24771      });
24772    };
24773
24774    PDFLinearGradient.prototype.opacityGradient = function() {
24775      return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);
24776    };
24777
24778    return PDFLinearGradient;
24779
24780  })(PDFGradient);
24781
24782  PDFRadialGradient = (function(superClass) {
24783    extend(PDFRadialGradient, superClass);
24784
24785    function PDFRadialGradient(doc, x1, y1, r1, x2, y2, r2) {
24786      this.doc = doc;
24787      this.x1 = x1;
24788      this.y1 = y1;
24789      this.r1 = r1;
24790      this.x2 = x2;
24791      this.y2 = y2;
24792      this.r2 = r2;
24793      PDFRadialGradient.__super__.constructor.apply(this, arguments);
24794    }
24795
24796    PDFRadialGradient.prototype.shader = function(fn) {
24797      return this.doc.ref({
24798        ShadingType: 3,
24799        ColorSpace: this._colorSpace,
24800        Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],
24801        Function: fn,
24802        Extend: [true, true]
24803      });
24804    };
24805
24806    PDFRadialGradient.prototype.opacityGradient = function() {
24807      return new PDFRadialGradient(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2);
24808    };
24809
24810    return PDFRadialGradient;
24811
24812  })(PDFGradient);
24813
24814  module.exports = {
24815    PDFGradient: PDFGradient,
24816    PDFLinearGradient: PDFLinearGradient,
24817    PDFRadialGradient: PDFRadialGradient
24818  };
24819
24820}).call(this);
24821
24822
24823/***/ }),
24824/* 164 */
24825/***/ (function(module, exports, __webpack_require__) {
24826
24827// Generated by CoffeeScript 1.12.6
24828(function() {
24829  var KAPPA, SVGPath, number,
24830    slice = [].slice;
24831
24832  SVGPath = __webpack_require__(165);
24833
24834  number = __webpack_require__(26).number;
24835
24836  KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);
24837
24838  module.exports = {
24839    initVector: function() {
24840      this._ctm = [1, 0, 0, 1, 0, 0];
24841      return this._ctmStack = [];
24842    },
24843    save: function() {
24844      this._ctmStack.push(this._ctm.slice());
24845      return this.addContent('q');
24846    },
24847    restore: function() {
24848      this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];
24849      return this.addContent('Q');
24850    },
24851    closePath: function() {
24852      return this.addContent('h');
24853    },
24854    lineWidth: function(w) {
24855      return this.addContent((number(w)) + " w");
24856    },
24857    _CAP_STYLES: {
24858      BUTT: 0,
24859      ROUND: 1,
24860      SQUARE: 2
24861    },
24862    lineCap: function(c) {
24863      if (typeof c === 'string') {
24864        c = this._CAP_STYLES[c.toUpperCase()];
24865      }
24866      return this.addContent(c + " J");
24867    },
24868    _JOIN_STYLES: {
24869      MITER: 0,
24870      ROUND: 1,
24871      BEVEL: 2
24872    },
24873    lineJoin: function(j) {
24874      if (typeof j === 'string') {
24875        j = this._JOIN_STYLES[j.toUpperCase()];
24876      }
24877      return this.addContent(j + " j");
24878    },
24879    miterLimit: function(m) {
24880      return this.addContent((number(m)) + " M");
24881    },
24882    dash: function(length, options) {
24883      var phase, ref, space, v;
24884      if (options == null) {
24885        options = {};
24886      }
24887      if (length == null) {
24888        return this;
24889      }
24890      if (Array.isArray(length)) {
24891        length = ((function() {
24892          var i, len, results;
24893          results = [];
24894          for (i = 0, len = length.length; i < len; i++) {
24895            v = length[i];
24896            results.push(number(v));
24897          }
24898          return results;
24899        })()).join(' ');
24900        phase = options.phase || 0;
24901        return this.addContent("[" + length + "] " + (number(phase)) + " d");
24902      } else {
24903        space = (ref = options.space) != null ? ref : length;
24904        phase = options.phase || 0;
24905        return this.addContent("[" + (number(length)) + " " + (number(space)) + "] " + (number(phase)) + " d");
24906      }
24907    },
24908    undash: function() {
24909      return this.addContent("[] 0 d");
24910    },
24911    moveTo: function(x, y) {
24912      return this.addContent((number(x)) + " " + (number(y)) + " m");
24913    },
24914    lineTo: function(x, y) {
24915      return this.addContent((number(x)) + " " + (number(y)) + " l");
24916    },
24917    bezierCurveTo: function(cp1x, cp1y, cp2x, cp2y, x, y) {
24918      return this.addContent((number(cp1x)) + " " + (number(cp1y)) + " " + (number(cp2x)) + " " + (number(cp2y)) + " " + (number(x)) + " " + (number(y)) + " c");
24919    },
24920    quadraticCurveTo: function(cpx, cpy, x, y) {
24921      return this.addContent((number(cpx)) + " " + (number(cpy)) + " " + (number(x)) + " " + (number(y)) + " v");
24922    },
24923    rect: function(x, y, w, h) {
24924      return this.addContent((number(x)) + " " + (number(y)) + " " + (number(w)) + " " + (number(h)) + " re");
24925    },
24926    roundedRect: function(x, y, w, h, r) {
24927      var c;
24928      if (r == null) {
24929        r = 0;
24930      }
24931      r = Math.min(r, 0.5 * w, 0.5 * h);
24932      c = r * (1.0 - KAPPA);
24933      this.moveTo(x + r, y);
24934      this.lineTo(x + w - r, y);
24935      this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);
24936      this.lineTo(x + w, y + h - r);
24937      this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);
24938      this.lineTo(x + r, y + h);
24939      this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);
24940      this.lineTo(x, y + r);
24941      this.bezierCurveTo(x, y + c, x + c, y, x + r, y);
24942      return this.closePath();
24943    },
24944    ellipse: function(x, y, r1, r2) {
24945      var ox, oy, xe, xm, ye, ym;
24946      if (r2 == null) {
24947        r2 = r1;
24948      }
24949      x -= r1;
24950      y -= r2;
24951      ox = r1 * KAPPA;
24952      oy = r2 * KAPPA;
24953      xe = x + r1 * 2;
24954      ye = y + r2 * 2;
24955      xm = x + r1;
24956      ym = y + r2;
24957      this.moveTo(x, ym);
24958      this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
24959      this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
24960      this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
24961      this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
24962      return this.closePath();
24963    },
24964    circle: function(x, y, radius) {
24965      return this.ellipse(x, y, radius);
24966    },
24967    arc: function(x, y, radius, startAngle, endAngle, anticlockwise) {
24968      var HALF_PI, TWO_PI, ax, ay, cp1x, cp1y, cp2x, cp2y, curAng, deltaAng, deltaCx, deltaCy, dir, handleLen, i, numSegs, ref, segAng, segIdx;
24969      if (anticlockwise == null) {
24970        anticlockwise = false;
24971      }
24972      TWO_PI = 2.0 * Math.PI;
24973      HALF_PI = 0.5 * Math.PI;
24974      deltaAng = endAngle - startAngle;
24975      if (Math.abs(deltaAng) > TWO_PI) {
24976        deltaAng = TWO_PI;
24977      } else if (deltaAng !== 0 && anticlockwise !== (deltaAng < 0)) {
24978        dir = anticlockwise ? -1 : 1;
24979        deltaAng = dir * TWO_PI + deltaAng;
24980      }
24981      numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);
24982      segAng = deltaAng / numSegs;
24983      handleLen = (segAng / HALF_PI) * KAPPA * radius;
24984      curAng = startAngle;
24985      deltaCx = -Math.sin(curAng) * handleLen;
24986      deltaCy = Math.cos(curAng) * handleLen;
24987      ax = x + Math.cos(curAng) * radius;
24988      ay = y + Math.sin(curAng) * radius;
24989      this.moveTo(ax, ay);
24990      for (segIdx = i = 0, ref = numSegs; 0 <= ref ? i < ref : i > ref; segIdx = 0 <= ref ? ++i : --i) {
24991        cp1x = ax + deltaCx;
24992        cp1y = ay + deltaCy;
24993        curAng += segAng;
24994        ax = x + Math.cos(curAng) * radius;
24995        ay = y + Math.sin(curAng) * radius;
24996        deltaCx = -Math.sin(curAng) * handleLen;
24997        deltaCy = Math.cos(curAng) * handleLen;
24998        cp2x = ax - deltaCx;
24999        cp2y = ay - deltaCy;
25000        this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);
25001      }
25002      return this;
25003    },
25004    polygon: function() {
25005      var i, len, point, points;
25006      points = 1 <= arguments.length ? slice.call(arguments, 0) : [];
25007      this.moveTo.apply(this, points.shift());
25008      for (i = 0, len = points.length; i < len; i++) {
25009        point = points[i];
25010        this.lineTo.apply(this, point);
25011      }
25012      return this.closePath();
25013    },
25014    path: function(path) {
25015      SVGPath.apply(this, path);
25016      return this;
25017    },
25018    _windingRule: function(rule) {
25019      if (/even-?odd/.test(rule)) {
25020        return '*';
25021      }
25022      return '';
25023    },
25024    fill: function(color, rule) {
25025      if (/(even-?odd)|(non-?zero)/.test(color)) {
25026        rule = color;
25027        color = null;
25028      }
25029      if (color) {
25030        this.fillColor(color);
25031      }
25032      return this.addContent('f' + this._windingRule(rule));
25033    },
25034    stroke: function(color) {
25035      if (color) {
25036        this.strokeColor(color);
25037      }
25038      return this.addContent('S');
25039    },
25040    fillAndStroke: function(fillColor, strokeColor, rule) {
25041      var isFillRule;
25042      if (strokeColor == null) {
25043        strokeColor = fillColor;
25044      }
25045      isFillRule = /(even-?odd)|(non-?zero)/;
25046      if (isFillRule.test(fillColor)) {
25047        rule = fillColor;
25048        fillColor = null;
25049      }
25050      if (isFillRule.test(strokeColor)) {
25051        rule = strokeColor;
25052        strokeColor = fillColor;
25053      }
25054      if (fillColor) {
25055        this.fillColor(fillColor);
25056        this.strokeColor(strokeColor);
25057      }
25058      return this.addContent('B' + this._windingRule(rule));
25059    },
25060    clip: function(rule) {
25061      return this.addContent('W' + this._windingRule(rule) + ' n');
25062    },
25063    transform: function(m11, m12, m21, m22, dx, dy) {
25064      var m, m0, m1, m2, m3, m4, m5, v, values;
25065      m = this._ctm;
25066      m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5];
25067      m[0] = m0 * m11 + m2 * m12;
25068      m[1] = m1 * m11 + m3 * m12;
25069      m[2] = m0 * m21 + m2 * m22;
25070      m[3] = m1 * m21 + m3 * m22;
25071      m[4] = m0 * dx + m2 * dy + m4;
25072      m[5] = m1 * dx + m3 * dy + m5;
25073      values = ((function() {
25074        var i, len, ref, results;
25075        ref = [m11, m12, m21, m22, dx, dy];
25076        results = [];
25077        for (i = 0, len = ref.length; i < len; i++) {
25078          v = ref[i];
25079          results.push(number(v));
25080        }
25081        return results;
25082      })()).join(' ');
25083      return this.addContent(values + " cm");
25084    },
25085    translate: function(x, y) {
25086      return this.transform(1, 0, 0, 1, x, y);
25087    },
25088    rotate: function(angle, options) {
25089      var cos, rad, ref, sin, x, x1, y, y1;
25090      if (options == null) {
25091        options = {};
25092      }
25093      rad = angle * Math.PI / 180;
25094      cos = Math.cos(rad);
25095      sin = Math.sin(rad);
25096      x = y = 0;
25097      if (options.origin != null) {
25098        ref = options.origin, x = ref[0], y = ref[1];
25099        x1 = x * cos - y * sin;
25100        y1 = x * sin + y * cos;
25101        x -= x1;
25102        y -= y1;
25103      }
25104      return this.transform(cos, sin, -sin, cos, x, y);
25105    },
25106    scale: function(xFactor, yFactor, options) {
25107      var ref, x, y;
25108      if (yFactor == null) {
25109        yFactor = xFactor;
25110      }
25111      if (options == null) {
25112        options = {};
25113      }
25114      if (typeof yFactor === "object") {
25115        options = yFactor;
25116        yFactor = xFactor;
25117      }
25118      x = y = 0;
25119      if (options.origin != null) {
25120        ref = options.origin, x = ref[0], y = ref[1];
25121        x -= xFactor * x;
25122        y -= yFactor * y;
25123      }
25124      return this.transform(xFactor, 0, 0, yFactor, x, y);
25125    }
25126  };
25127
25128}).call(this);
25129
25130
25131/***/ }),
25132/* 165 */
25133/***/ (function(module, exports) {
25134
25135// Generated by CoffeeScript 1.12.6
25136(function() {
25137  var SVGPath;
25138
25139  SVGPath = (function() {
25140    var apply, arcToSegments, cx, cy, parameters, parse, px, py, runners, segmentToBezier, solveArc, sx, sy;
25141
25142    function SVGPath() {}
25143
25144    SVGPath.apply = function(doc, path) {
25145      var commands;
25146      commands = parse(path);
25147      return apply(commands, doc);
25148    };
25149
25150    parameters = {
25151      A: 7,
25152      a: 7,
25153      C: 6,
25154      c: 6,
25155      H: 1,
25156      h: 1,
25157      L: 2,
25158      l: 2,
25159      M: 2,
25160      m: 2,
25161      Q: 4,
25162      q: 4,
25163      S: 4,
25164      s: 4,
25165      T: 2,
25166      t: 2,
25167      V: 1,
25168      v: 1,
25169      Z: 0,
25170      z: 0
25171    };
25172
25173    parse = function(path) {
25174      var args, c, cmd, curArg, foundDecimal, j, len, params, ret;
25175      ret = [];
25176      args = [];
25177      curArg = "";
25178      foundDecimal = false;
25179      params = 0;
25180      for (j = 0, len = path.length; j < len; j++) {
25181        c = path[j];
25182        if (parameters[c] != null) {
25183          params = parameters[c];
25184          if (cmd) {
25185            if (curArg.length > 0) {
25186              args[args.length] = +curArg;
25187            }
25188            ret[ret.length] = {
25189              cmd: cmd,
25190              args: args
25191            };
25192            args = [];
25193            curArg = "";
25194            foundDecimal = false;
25195          }
25196          cmd = c;
25197        } else if ((c === " " || c === ",") || (c === "-" && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') || (c === "." && foundDecimal)) {
25198          if (curArg.length === 0) {
25199            continue;
25200          }
25201          if (args.length === params) {
25202            ret[ret.length] = {
25203              cmd: cmd,
25204              args: args
25205            };
25206            args = [+curArg];
25207            if (cmd === "M") {
25208              cmd = "L";
25209            }
25210            if (cmd === "m") {
25211              cmd = "l";
25212            }
25213          } else {
25214            args[args.length] = +curArg;
25215          }
25216          foundDecimal = c === ".";
25217          curArg = c === '-' || c === '.' ? c : '';
25218        } else {
25219          curArg += c;
25220          if (c === '.') {
25221            foundDecimal = true;
25222          }
25223        }
25224      }
25225      if (curArg.length > 0) {
25226        if (args.length === params) {
25227          ret[ret.length] = {
25228            cmd: cmd,
25229            args: args
25230          };
25231          args = [+curArg];
25232          if (cmd === "M") {
25233            cmd = "L";
25234          }
25235          if (cmd === "m") {
25236            cmd = "l";
25237          }
25238        } else {
25239          args[args.length] = +curArg;
25240        }
25241      }
25242      ret[ret.length] = {
25243        cmd: cmd,
25244        args: args
25245      };
25246      return ret;
25247    };
25248
25249    cx = cy = px = py = sx = sy = 0;
25250
25251    apply = function(commands, doc) {
25252      var c, i, j, len, name;
25253      cx = cy = px = py = sx = sy = 0;
25254      for (i = j = 0, len = commands.length; j < len; i = ++j) {
25255        c = commands[i];
25256        if (typeof runners[name = c.cmd] === "function") {
25257          runners[name](doc, c.args);
25258        }
25259      }
25260      return cx = cy = px = py = 0;
25261    };
25262
25263    runners = {
25264      M: function(doc, a) {
25265        cx = a[0];
25266        cy = a[1];
25267        px = py = null;
25268        sx = cx;
25269        sy = cy;
25270        return doc.moveTo(cx, cy);
25271      },
25272      m: function(doc, a) {
25273        cx += a[0];
25274        cy += a[1];
25275        px = py = null;
25276        sx = cx;
25277        sy = cy;
25278        return doc.moveTo(cx, cy);
25279      },
25280      C: function(doc, a) {
25281        cx = a[4];
25282        cy = a[5];
25283        px = a[2];
25284        py = a[3];
25285        return doc.bezierCurveTo.apply(doc, a);
25286      },
25287      c: function(doc, a) {
25288        doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy);
25289        px = cx + a[2];
25290        py = cy + a[3];
25291        cx += a[4];
25292        return cy += a[5];
25293      },
25294      S: function(doc, a) {
25295        if (px === null) {
25296          px = cx;
25297          py = cy;
25298        }
25299        doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);
25300        px = a[0];
25301        py = a[1];
25302        cx = a[2];
25303        return cy = a[3];
25304      },
25305      s: function(doc, a) {
25306        if (px === null) {
25307          px = cx;
25308          py = cy;
25309        }
25310        doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]);
25311        px = cx + a[0];
25312        py = cy + a[1];
25313        cx += a[2];
25314        return cy += a[3];
25315      },
25316      Q: function(doc, a) {
25317        px = a[0];
25318        py = a[1];
25319        cx = a[2];
25320        cy = a[3];
25321        return doc.quadraticCurveTo(a[0], a[1], cx, cy);
25322      },
25323      q: function(doc, a) {
25324        doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);
25325        px = cx + a[0];
25326        py = cy + a[1];
25327        cx += a[2];
25328        return cy += a[3];
25329      },
25330      T: function(doc, a) {
25331        if (px === null) {
25332          px = cx;
25333          py = cy;
25334        } else {
25335          px = cx - (px - cx);
25336          py = cy - (py - cy);
25337        }
25338        doc.quadraticCurveTo(px, py, a[0], a[1]);
25339        px = cx - (px - cx);
25340        py = cy - (py - cy);
25341        cx = a[0];
25342        return cy = a[1];
25343      },
25344      t: function(doc, a) {
25345        if (px === null) {
25346          px = cx;
25347          py = cy;
25348        } else {
25349          px = cx - (px - cx);
25350          py = cy - (py - cy);
25351        }
25352        doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);
25353        cx += a[0];
25354        return cy += a[1];
25355      },
25356      A: function(doc, a) {
25357        solveArc(doc, cx, cy, a);
25358        cx = a[5];
25359        return cy = a[6];
25360      },
25361      a: function(doc, a) {
25362        a[5] += cx;
25363        a[6] += cy;
25364        solveArc(doc, cx, cy, a);
25365        cx = a[5];
25366        return cy = a[6];
25367      },
25368      L: function(doc, a) {
25369        cx = a[0];
25370        cy = a[1];
25371        px = py = null;
25372        return doc.lineTo(cx, cy);
25373      },
25374      l: function(doc, a) {
25375        cx += a[0];
25376        cy += a[1];
25377        px = py = null;
25378        return doc.lineTo(cx, cy);
25379      },
25380      H: function(doc, a) {
25381        cx = a[0];
25382        px = py = null;
25383        return doc.lineTo(cx, cy);
25384      },
25385      h: function(doc, a) {
25386        cx += a[0];
25387        px = py = null;
25388        return doc.lineTo(cx, cy);
25389      },
25390      V: function(doc, a) {
25391        cy = a[0];
25392        px = py = null;
25393        return doc.lineTo(cx, cy);
25394      },
25395      v: function(doc, a) {
25396        cy += a[0];
25397        px = py = null;
25398        return doc.lineTo(cx, cy);
25399      },
25400      Z: function(doc) {
25401        doc.closePath();
25402        cx = sx;
25403        return cy = sy;
25404      },
25405      z: function(doc) {
25406        doc.closePath();
25407        cx = sx;
25408        return cy = sy;
25409      }
25410    };
25411
25412    solveArc = function(doc, x, y, coords) {
25413      var bez, ex, ey, j, large, len, results, rot, rx, ry, seg, segs, sweep;
25414      rx = coords[0], ry = coords[1], rot = coords[2], large = coords[3], sweep = coords[4], ex = coords[5], ey = coords[6];
25415      segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);
25416      results = [];
25417      for (j = 0, len = segs.length; j < len; j++) {
25418        seg = segs[j];
25419        bez = segmentToBezier.apply(null, seg);
25420        results.push(doc.bezierCurveTo.apply(doc, bez));
25421      }
25422      return results;
25423    };
25424
25425    arcToSegments = function(x, y, rx, ry, large, sweep, rotateX, ox, oy) {
25426      var a00, a01, a10, a11, cos_th, d, i, j, pl, ref, result, segments, sfactor, sfactor_sq, sin_th, th, th0, th1, th2, th3, th_arc, x0, x1, xc, y0, y1, yc;
25427      th = rotateX * (Math.PI / 180);
25428      sin_th = Math.sin(th);
25429      cos_th = Math.cos(th);
25430      rx = Math.abs(rx);
25431      ry = Math.abs(ry);
25432      px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;
25433      py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;
25434      pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);
25435      if (pl > 1) {
25436        pl = Math.sqrt(pl);
25437        rx *= pl;
25438        ry *= pl;
25439      }
25440      a00 = cos_th / rx;
25441      a01 = sin_th / rx;
25442      a10 = (-sin_th) / ry;
25443      a11 = cos_th / ry;
25444      x0 = a00 * ox + a01 * oy;
25445      y0 = a10 * ox + a11 * oy;
25446      x1 = a00 * x + a01 * y;
25447      y1 = a10 * x + a11 * y;
25448      d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);
25449      sfactor_sq = 1 / d - 0.25;
25450      if (sfactor_sq < 0) {
25451        sfactor_sq = 0;
25452      }
25453      sfactor = Math.sqrt(sfactor_sq);
25454      if (sweep === large) {
25455        sfactor = -sfactor;
25456      }
25457      xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);
25458      yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);
25459      th0 = Math.atan2(y0 - yc, x0 - xc);
25460      th1 = Math.atan2(y1 - yc, x1 - xc);
25461      th_arc = th1 - th0;
25462      if (th_arc < 0 && sweep === 1) {
25463        th_arc += 2 * Math.PI;
25464      } else if (th_arc > 0 && sweep === 0) {
25465        th_arc -= 2 * Math.PI;
25466      }
25467      segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));
25468      result = [];
25469      for (i = j = 0, ref = segments; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
25470        th2 = th0 + i * th_arc / segments;
25471        th3 = th0 + (i + 1) * th_arc / segments;
25472        result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];
25473      }
25474      return result;
25475    };
25476
25477    segmentToBezier = function(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {
25478      var a00, a01, a10, a11, t, th_half, x1, x2, x3, y1, y2, y3;
25479      a00 = cos_th * rx;
25480      a01 = -sin_th * ry;
25481      a10 = sin_th * rx;
25482      a11 = cos_th * ry;
25483      th_half = 0.5 * (th1 - th0);
25484      t = (8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half);
25485      x1 = cx + Math.cos(th0) - t * Math.sin(th0);
25486      y1 = cy + Math.sin(th0) + t * Math.cos(th0);
25487      x3 = cx + Math.cos(th1);
25488      y3 = cy + Math.sin(th1);
25489      x2 = x3 + t * Math.sin(th1);
25490      y2 = y3 - t * Math.cos(th1);
25491      return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];
25492    };
25493
25494    return SVGPath;
25495
25496  })();
25497
25498  module.exports = SVGPath;
25499
25500}).call(this);
25501
25502
25503/***/ }),
25504/* 166 */
25505/***/ (function(module, exports, __webpack_require__) {
25506
25507// Generated by CoffeeScript 1.12.6
25508(function() {
25509  var PDFFont;
25510
25511  PDFFont = __webpack_require__(50);
25512
25513  module.exports = {
25514    initFonts: function() {
25515      this._fontFamilies = {};
25516      this._fontCount = 0;
25517      this._fontSize = 12;
25518      this._font = null;
25519      this._registeredFonts = {};
25520
25521    },
25522    font: function(src, family, size) {
25523      var cacheKey, font, id, ref;
25524      if (typeof family === 'number') {
25525        size = family;
25526        family = null;
25527      }
25528      if (typeof src === 'string' && this._registeredFonts[src]) {
25529        cacheKey = src;
25530        ref = this._registeredFonts[src], src = ref.src, family = ref.family;
25531      } else {
25532        cacheKey = family || src;
25533        if (typeof cacheKey !== 'string') {
25534          cacheKey = null;
25535        }
25536      }
25537      if (size != null) {
25538        this.fontSize(size);
25539      }
25540      if (font = this._fontFamilies[cacheKey]) {
25541        this._font = font;
25542        return this;
25543      }
25544      id = 'F' + (++this._fontCount);
25545      this._font = PDFFont.open(this, src, family, id);
25546      if (font = this._fontFamilies[this._font.name]) {
25547        this._font = font;
25548        return this;
25549      }
25550      if (cacheKey) {
25551        this._fontFamilies[cacheKey] = this._font;
25552      }
25553      if (this._font.name) {
25554        this._fontFamilies[this._font.name] = this._font;
25555      }
25556      return this;
25557    },
25558    fontSize: function(_fontSize) {
25559      this._fontSize = _fontSize;
25560      return this;
25561    },
25562    currentLineHeight: function(includeGap) {
25563      if (includeGap == null) {
25564        includeGap = false;
25565      }
25566      return this._font.lineHeight(this._fontSize, includeGap);
25567    },
25568    registerFont: function(name, src, family) {
25569      this._registeredFonts[name] = {
25570        src: src,
25571        family: family
25572      };
25573      return this;
25574    }
25575  };
25576
25577}).call(this);
25578
25579
25580/***/ }),
25581/* 167 */
25582/***/ (function(module, exports, __webpack_require__) {
25583
25584"use strict";
25585/* WEBPACK VAR INJECTION */(function(Buffer, process) {
25586
25587function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
25588
25589var r = _interopDefault(__webpack_require__(168));
25590var _Object$getOwnPropertyDescriptor = _interopDefault(__webpack_require__(197));
25591var _getIterator = _interopDefault(__webpack_require__(60));
25592var _Object$freeze = _interopDefault(__webpack_require__(209));
25593var _Object$keys = _interopDefault(__webpack_require__(212));
25594var _typeof = _interopDefault(__webpack_require__(69));
25595var _Object$defineProperty = _interopDefault(__webpack_require__(74));
25596var _classCallCheck = _interopDefault(__webpack_require__(106));
25597var _createClass = _interopDefault(__webpack_require__(107));
25598var _Map = _interopDefault(__webpack_require__(225));
25599var _possibleConstructorReturn = _interopDefault(__webpack_require__(236));
25600var _inherits = _interopDefault(__webpack_require__(237));
25601var restructure_src_utils = __webpack_require__(12);
25602var _Object$defineProperties = _interopDefault(__webpack_require__(245));
25603var isEqual = _interopDefault(__webpack_require__(248));
25604var _Object$assign = _interopDefault(__webpack_require__(251));
25605var _String$fromCodePoint = _interopDefault(__webpack_require__(255));
25606var _Array$from = _interopDefault(__webpack_require__(258));
25607var _Set = _interopDefault(__webpack_require__(263));
25608var unicode = _interopDefault(__webpack_require__(269));
25609var UnicodeTrie = _interopDefault(__webpack_require__(43));
25610var StateMachine = _interopDefault(__webpack_require__(271));
25611var _Number$EPSILON = _interopDefault(__webpack_require__(280));
25612var cloneDeep = _interopDefault(__webpack_require__(283));
25613var inflate = _interopDefault(__webpack_require__(79));
25614var brotli = _interopDefault(__webpack_require__(284));
25615
25616
25617
25618var fontkit = {};
25619fontkit.logErrors = false;
25620
25621var formats = [];
25622fontkit.registerFormat = function (format) {
25623  formats.push(format);
25624};
25625
25626fontkit.openSync = function (filename, postscriptName) {
25627  var buffer = __webpack_require__(8).readFileSync(filename);
25628  return fontkit.create(buffer, postscriptName);
25629};
25630
25631fontkit.open = function (filename, postscriptName, callback) {
25632  if (typeof postscriptName === 'function') {
25633    callback = postscriptName;
25634    postscriptName = null;
25635  }
25636
25637  __webpack_require__(8).readFile(filename, function (err, buffer) {
25638    if (err) {
25639      return callback(err);
25640    }
25641
25642    try {
25643      var font = fontkit.create(buffer, postscriptName);
25644    } catch (e) {
25645      return callback(e);
25646    }
25647
25648    return callback(null, font);
25649  });
25650
25651  return;
25652};
25653
25654fontkit.create = function (buffer, postscriptName) {
25655  for (var i = 0; i < formats.length; i++) {
25656    var format = formats[i];
25657    if (format.probe(buffer)) {
25658      var font = new format(new r.DecodeStream(buffer));
25659      if (postscriptName) {
25660        return font.getFont(postscriptName);
25661      }
25662
25663      return font;
25664    }
25665  }
25666
25667  throw new Error('Unknown font format');
25668};
25669
25670/**
25671 * This decorator caches the results of a getter or method such that
25672 * the results are lazily computed once, and then cached.
25673 * @private
25674 */
25675function cache(target, key, descriptor) {
25676  if (descriptor.get) {
25677    var get = descriptor.get;
25678    descriptor.get = function () {
25679      var value = get.call(this);
25680      _Object$defineProperty(this, key, { value: value });
25681      return value;
25682    };
25683  } else if (typeof descriptor.value === 'function') {
25684    var fn = descriptor.value;
25685
25686    return {
25687      get: function get() {
25688        var cache = new _Map();
25689        function memoized() {
25690          for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
25691            args[_key] = arguments[_key];
25692          }
25693
25694          var key = args.length > 0 ? args[0] : 'value';
25695          if (cache.has(key)) {
25696            return cache.get(key);
25697          }
25698
25699          var result = fn.apply(this, args);
25700          cache.set(key, result);
25701          return result;
25702        };
25703
25704        _Object$defineProperty(this, key, { value: memoized });
25705        return memoized;
25706      }
25707    };
25708  }
25709}
25710
25711var SubHeader = new r.Struct({
25712  firstCode: r.uint16,
25713  entryCount: r.uint16,
25714  idDelta: r.int16,
25715  idRangeOffset: r.uint16
25716});
25717
25718var CmapGroup = new r.Struct({
25719  startCharCode: r.uint32,
25720  endCharCode: r.uint32,
25721  glyphID: r.uint32
25722});
25723
25724var UnicodeValueRange = new r.Struct({
25725  startUnicodeValue: r.uint24,
25726  additionalCount: r.uint8
25727});
25728
25729var UVSMapping = new r.Struct({
25730  unicodeValue: r.uint24,
25731  glyphID: r.uint16
25732});
25733
25734var DefaultUVS = new r.Array(UnicodeValueRange, r.uint32);
25735var NonDefaultUVS = new r.Array(UVSMapping, r.uint32);
25736
25737var VarSelectorRecord = new r.Struct({
25738  varSelector: r.uint24,
25739  defaultUVS: new r.Pointer(r.uint32, DefaultUVS, { type: 'parent' }),
25740  nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, { type: 'parent' })
25741});
25742
25743var CmapSubtable = new r.VersionedStruct(r.uint16, {
25744  0: { // Byte encoding
25745    length: r.uint16, // Total table length in bytes (set to 262 for format 0)
25746    language: r.uint16, // Language code for this encoding subtable, or zero if language-independent
25747    codeMap: new r.LazyArray(r.uint8, 256)
25748  },
25749
25750  2: { // High-byte mapping (CJK)
25751    length: r.uint16,
25752    language: r.uint16,
25753    subHeaderKeys: new r.Array(r.uint16, 256),
25754    subHeaderCount: function subHeaderCount(t) {
25755      return Math.max.apply(Math, t.subHeaderKeys);
25756    },
25757    subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'),
25758    glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount')
25759  },
25760
25761  4: { // Segment mapping to delta values
25762    length: r.uint16, // Total table length in bytes
25763    language: r.uint16, // Language code
25764    segCountX2: r.uint16,
25765    segCount: function segCount(t) {
25766      return t.segCountX2 >> 1;
25767    },
25768    searchRange: r.uint16,
25769    entrySelector: r.uint16,
25770    rangeShift: r.uint16,
25771    endCode: new r.LazyArray(r.uint16, 'segCount'),
25772    reservedPad: new r.Reserved(r.uint16), // This value should be zero
25773    startCode: new r.LazyArray(r.uint16, 'segCount'),
25774    idDelta: new r.LazyArray(r.int16, 'segCount'),
25775    idRangeOffset: new r.LazyArray(r.uint16, 'segCount'),
25776    glyphIndexArray: new r.LazyArray(r.uint16, function (t) {
25777      return (t.length - t._currentOffset) / 2;
25778    })
25779  },
25780
25781  6: { // Trimmed table
25782    length: r.uint16,
25783    language: r.uint16,
25784    firstCode: r.uint16,
25785    entryCount: r.uint16,
25786    glyphIndices: new r.LazyArray(r.uint16, 'entryCount')
25787  },
25788
25789  8: { // mixed 16-bit and 32-bit coverage
25790    reserved: new r.Reserved(r.uint16),
25791    length: r.uint32,
25792    language: r.uint16,
25793    is32: new r.LazyArray(r.uint8, 8192),
25794    nGroups: r.uint32,
25795    groups: new r.LazyArray(CmapGroup, 'nGroups')
25796  },
25797
25798  10: { // Trimmed Array
25799    reserved: new r.Reserved(r.uint16),
25800    length: r.uint32,
25801    language: r.uint32,
25802    firstCode: r.uint32,
25803    entryCount: r.uint32,
25804    glyphIndices: new r.LazyArray(r.uint16, 'numChars')
25805  },
25806
25807  12: { // Segmented coverage
25808    reserved: new r.Reserved(r.uint16),
25809    length: r.uint32,
25810    language: r.uint32,
25811    nGroups: r.uint32,
25812    groups: new r.LazyArray(CmapGroup, 'nGroups')
25813  },
25814
25815  13: { // Many-to-one range mappings (same as 12 except for group.startGlyphID)
25816    reserved: new r.Reserved(r.uint16),
25817    length: r.uint32,
25818    language: r.uint32,
25819    nGroups: r.uint32,
25820    groups: new r.LazyArray(CmapGroup, 'nGroups')
25821  },
25822
25823  14: { // Unicode Variation Sequences
25824    length: r.uint32,
25825    numRecords: r.uint32,
25826    varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords')
25827  }
25828});
25829
25830var CmapEntry = new r.Struct({
25831  platformID: r.uint16, // Platform identifier
25832  encodingID: r.uint16, // Platform-specific encoding identifier
25833  table: new r.Pointer(r.uint32, CmapSubtable, { type: 'parent', lazy: true })
25834});
25835
25836// character to glyph mapping
25837var cmap = new r.Struct({
25838  version: r.uint16,
25839  numSubtables: r.uint16,
25840  tables: new r.Array(CmapEntry, 'numSubtables')
25841});
25842
25843// font header
25844var head = new r.Struct({
25845  version: r.int32, // 0x00010000 (version 1.0)
25846  revision: r.int32, // set by font manufacturer
25847  checkSumAdjustment: r.uint32,
25848  magicNumber: r.uint32, // set to 0x5F0F3CF5
25849  flags: r.uint16,
25850  unitsPerEm: r.uint16, // range from 64 to 16384
25851  created: new r.Array(r.int32, 2),
25852  modified: new r.Array(r.int32, 2),
25853  xMin: r.int16, // for all glyph bounding boxes
25854  yMin: r.int16, // for all glyph bounding boxes
25855  xMax: r.int16, // for all glyph bounding boxes
25856  yMax: r.int16, // for all glyph bounding boxes
25857  macStyle: new r.Bitfield(r.uint16, ['bold', 'italic', 'underline', 'outline', 'shadow', 'condensed', 'extended']),
25858  lowestRecPPEM: r.uint16, // smallest readable size in pixels
25859  fontDirectionHint: r.int16,
25860  indexToLocFormat: r.int16, // 0 for short offsets, 1 for long
25861  glyphDataFormat: r.int16 // 0 for current format
25862});
25863
25864// horizontal header
25865var hhea = new r.Struct({
25866  version: r.int32,
25867  ascent: r.int16, // Distance from baseline of highest ascender
25868  descent: r.int16, // Distance from baseline of lowest descender
25869  lineGap: r.int16, // Typographic line gap
25870  advanceWidthMax: r.uint16, // Maximum advance width value in 'hmtx' table
25871  minLeftSideBearing: r.int16, // Maximum advance width value in 'hmtx' table
25872  minRightSideBearing: r.int16, // Minimum right sidebearing value
25873  xMaxExtent: r.int16,
25874  caretSlopeRise: r.int16, // Used to calculate the slope of the cursor (rise/run); 1 for vertical
25875  caretSlopeRun: r.int16, // 0 for vertical
25876  caretOffset: r.int16, // Set to 0 for non-slanted fonts
25877  reserved: new r.Reserved(r.int16, 4),
25878  metricDataFormat: r.int16, // 0 for current format
25879  numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table
25880});
25881
25882var HmtxEntry = new r.Struct({
25883  advance: r.uint16,
25884  bearing: r.int16
25885});
25886
25887var hmtx = new r.Struct({
25888  metrics: new r.LazyArray(HmtxEntry, function (t) {
25889    return t.parent.hhea.numberOfMetrics;
25890  }),
25891  bearings: new r.LazyArray(r.int16, function (t) {
25892    return t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics;
25893  })
25894});
25895
25896// maxiumum profile
25897var maxp = new r.Struct({
25898  version: r.int32,
25899  numGlyphs: r.uint16, // The number of glyphs in the font
25900  maxPoints: r.uint16, // Maximum points in a non-composite glyph
25901  maxContours: r.uint16, // Maximum contours in a non-composite glyph
25902  maxComponentPoints: r.uint16, // Maximum points in a composite glyph
25903  maxComponentContours: r.uint16, // Maximum contours in a composite glyph
25904  maxZones: r.uint16, // 1 if instructions do not use the twilight zone, 2 otherwise
25905  maxTwilightPoints: r.uint16, // Maximum points used in Z0
25906  maxStorage: r.uint16, // Number of Storage Area locations
25907  maxFunctionDefs: r.uint16, // Number of FDEFs
25908  maxInstructionDefs: r.uint16, // Number of IDEFs
25909  maxStackElements: r.uint16, // Maximum stack depth
25910  maxSizeOfInstructions: r.uint16, // Maximum byte count for glyph instructions
25911  maxComponentElements: r.uint16, // Maximum number of components referenced at “top level” for any composite glyph
25912  maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components
25913});
25914
25915/**
25916 * Gets an encoding name from platform, encoding, and language ids.
25917 * Returned encoding names can be used in iconv-lite to decode text.
25918 */
25919function getEncoding(platformID, encodingID) {
25920  var languageID = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
25921
25922  if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {
25923    return MAC_LANGUAGE_ENCODINGS[languageID];
25924  }
25925
25926  return ENCODINGS[platformID][encodingID];
25927}
25928
25929// Map of platform ids to encoding ids.
25930var ENCODINGS = [
25931// unicode
25932['utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be'],
25933
25934// macintosh
25935// Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/
25936// 0	Roman                 17	Malayalam
25937// 1	Japanese	            18	Sinhalese
25938// 2	Traditional Chinese	  19	Burmese
25939// 3	Korean	              20	Khmer
25940// 4	Arabic	              21	Thai
25941// 5	Hebrew	              22	Laotian
25942// 6	Greek	                23	Georgian
25943// 7	Russian	              24	Armenian
25944// 8	RSymbol	              25	Simplified Chinese
25945// 9	Devanagari	          26	Tibetan
25946// 10	Gurmukhi	            27	Mongolian
25947// 11	Gujarati	            28	Geez
25948// 12	Oriya	                29	Slavic
25949// 13	Bengali	              30	Vietnamese
25950// 14	Tamil	                31	Sindhi
25951// 15	Telugu	              32	(Uninterpreted)
25952// 16	Kannada
25953['macroman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8', 'macgreek', 'maccyrillic', 'symbol', 'Devanagari', 'Gurmukhi', 'Gujarati', 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese', 'Burmese', 'Khmer', 'macthai', 'Laotian', 'Georgian', 'Armenian', 'gb-2312-80', 'Tibetan', 'Mongolian', 'Geez', 'maccenteuro', 'Vietnamese', 'Sindhi'],
25954
25955// ISO (deprecated)
25956['ascii'],
25957
25958// windows
25959// Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx
25960['symbol', 'utf16be', 'shift-jis', 'gb18030', 'big5', 'wansung', 'johab', null, null, null, 'utf16be']];
25961
25962// Overrides for Mac scripts by language id.
25963// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt
25964var MAC_LANGUAGE_ENCODINGS = {
25965  15: 'maciceland',
25966  17: 'macturkish',
25967  18: 'maccroatian',
25968  24: 'maccenteuro',
25969  25: 'maccenteuro',
25970  26: 'maccenteuro',
25971  27: 'maccenteuro',
25972  28: 'maccenteuro',
25973  30: 'maciceland',
25974  37: 'macromania',
25975  38: 'maccenteuro',
25976  39: 'maccenteuro',
25977  40: 'maccenteuro',
25978  143: 'macinuit', // Unsupported by iconv-lite
25979  146: 'macgaelic' // Unsupported by iconv-lite
25980};
25981
25982// Map of platform ids to BCP-47 language codes.
25983var LANGUAGES = [
25984// unicode
25985[], { // macintosh
25986  0: 'en', 30: 'fo', 60: 'ks', 90: 'rw',
25987  1: 'fr', 31: 'fa', 61: 'ku', 91: 'rn',
25988  2: 'de', 32: 'ru', 62: 'sd', 92: 'ny',
25989  3: 'it', 33: 'zh', 63: 'bo', 93: 'mg',
25990  4: 'nl', 34: 'nl-BE', 64: 'ne', 94: 'eo',
25991  5: 'sv', 35: 'ga', 65: 'sa', 128: 'cy',
25992  6: 'es', 36: 'sq', 66: 'mr', 129: 'eu',
25993  7: 'da', 37: 'ro', 67: 'bn', 130: 'ca',
25994  8: 'pt', 38: 'cz', 68: 'as', 131: 'la',
25995  9: 'no', 39: 'sk', 69: 'gu', 132: 'qu',
25996  10: 'he', 40: 'si', 70: 'pa', 133: 'gn',
25997  11: 'ja', 41: 'yi', 71: 'or', 134: 'ay',
25998  12: 'ar', 42: 'sr', 72: 'ml', 135: 'tt',
25999  13: 'fi', 43: 'mk', 73: 'kn', 136: 'ug',
26000  14: 'el', 44: 'bg', 74: 'ta', 137: 'dz',
26001  15: 'is', 45: 'uk', 75: 'te', 138: 'jv',
26002  16: 'mt', 46: 'be', 76: 'si', 139: 'su',
26003  17: 'tr', 47: 'uz', 77: 'my', 140: 'gl',
26004  18: 'hr', 48: 'kk', 78: 'km', 141: 'af',
26005  19: 'zh-Hant', 49: 'az-Cyrl', 79: 'lo', 142: 'br',
26006  20: 'ur', 50: 'az-Arab', 80: 'vi', 143: 'iu',
26007  21: 'hi', 51: 'hy', 81: 'id', 144: 'gd',
26008  22: 'th', 52: 'ka', 82: 'tl', 145: 'gv',
26009  23: 'ko', 53: 'mo', 83: 'ms', 146: 'ga',
26010  24: 'lt', 54: 'ky', 84: 'ms-Arab', 147: 'to',
26011  25: 'pl', 55: 'tg', 85: 'am', 148: 'el-polyton',
26012  26: 'hu', 56: 'tk', 86: 'ti', 149: 'kl',
26013  27: 'es', 57: 'mn-CN', 87: 'om', 150: 'az',
26014  28: 'lv', 58: 'mn', 88: 'so', 151: 'nn',
26015  29: 'se', 59: 'ps', 89: 'sw'
26016},
26017
26018// ISO (deprecated)
26019[], { // windows
26020  0x0436: 'af', 0x4009: 'en-IN', 0x0487: 'rw', 0x0432: 'tn',
26021  0x041C: 'sq', 0x1809: 'en-IE', 0x0441: 'sw', 0x045B: 'si',
26022  0x0484: 'gsw', 0x2009: 'en-JM', 0x0457: 'kok', 0x041B: 'sk',
26023  0x045E: 'am', 0x4409: 'en-MY', 0x0412: 'ko', 0x0424: 'sl',
26024  0x1401: 'ar-DZ', 0x1409: 'en-NZ', 0x0440: 'ky', 0x2C0A: 'es-AR',
26025  0x3C01: 'ar-BH', 0x3409: 'en-PH', 0x0454: 'lo', 0x400A: 'es-BO',
26026  0x0C01: 'ar', 0x4809: 'en-SG', 0x0426: 'lv', 0x340A: 'es-CL',
26027  0x0801: 'ar-IQ', 0x1C09: 'en-ZA', 0x0427: 'lt', 0x240A: 'es-CO',
26028  0x2C01: 'ar-JO', 0x2C09: 'en-TT', 0x082E: 'dsb', 0x140A: 'es-CR',
26029  0x3401: 'ar-KW', 0x0809: 'en-GB', 0x046E: 'lb', 0x1C0A: 'es-DO',
26030  0x3001: 'ar-LB', 0x0409: 'en', 0x042F: 'mk', 0x300A: 'es-EC',
26031  0x1001: 'ar-LY', 0x3009: 'en-ZW', 0x083E: 'ms-BN', 0x440A: 'es-SV',
26032  0x1801: 'ary', 0x0425: 'et', 0x043E: 'ms', 0x100A: 'es-GT',
26033  0x2001: 'ar-OM', 0x0438: 'fo', 0x044C: 'ml', 0x480A: 'es-HN',
26034  0x4001: 'ar-QA', 0x0464: 'fil', 0x043A: 'mt', 0x080A: 'es-MX',
26035  0x0401: 'ar-SA', 0x040B: 'fi', 0x0481: 'mi', 0x4C0A: 'es-NI',
26036  0x2801: 'ar-SY', 0x080C: 'fr-BE', 0x047A: 'arn', 0x180A: 'es-PA',
26037  0x1C01: 'aeb', 0x0C0C: 'fr-CA', 0x044E: 'mr', 0x3C0A: 'es-PY',
26038  0x3801: 'ar-AE', 0x040C: 'fr', 0x047C: 'moh', 0x280A: 'es-PE',
26039  0x2401: 'ar-YE', 0x140C: 'fr-LU', 0x0450: 'mn', 0x500A: 'es-PR',
26040  0x042B: 'hy', 0x180C: 'fr-MC', 0x0850: 'mn-CN', 0x0C0A: 'es',
26041  0x044D: 'as', 0x100C: 'fr-CH', 0x0461: 'ne', 0x040A: 'es',
26042  0x082C: 'az-Cyrl', 0x0462: 'fy', 0x0414: 'nb', 0x540A: 'es-US',
26043  0x042C: 'az', 0x0456: 'gl', 0x0814: 'nn', 0x380A: 'es-UY',
26044  0x046D: 'ba', 0x0437: 'ka', 0x0482: 'oc', 0x200A: 'es-VE',
26045  0x042D: 'eu', 0x0C07: 'de-AT', 0x0448: 'or', 0x081D: 'sv-FI',
26046  0x0423: 'be', 0x0407: 'de', 0x0463: 'ps', 0x041D: 'sv',
26047  0x0845: 'bn', 0x1407: 'de-LI', 0x0415: 'pl', 0x045A: 'syr',
26048  0x0445: 'bn-IN', 0x1007: 'de-LU', 0x0416: 'pt', 0x0428: 'tg',
26049  0x201A: 'bs-Cyrl', 0x0807: 'de-CH', 0x0816: 'pt-PT', 0x085F: 'tzm',
26050  0x141A: 'bs', 0x0408: 'el', 0x0446: 'pa', 0x0449: 'ta',
26051  0x047E: 'br', 0x046F: 'kl', 0x046B: 'qu-BO', 0x0444: 'tt',
26052  0x0402: 'bg', 0x0447: 'gu', 0x086B: 'qu-EC', 0x044A: 'te',
26053  0x0403: 'ca', 0x0468: 'ha', 0x0C6B: 'qu', 0x041E: 'th',
26054  0x0C04: 'zh-HK', 0x040D: 'he', 0x0418: 'ro', 0x0451: 'bo',
26055  0x1404: 'zh-MO', 0x0439: 'hi', 0x0417: 'rm', 0x041F: 'tr',
26056  0x0804: 'zh', 0x040E: 'hu', 0x0419: 'ru', 0x0442: 'tk',
26057  0x1004: 'zh-SG', 0x040F: 'is', 0x243B: 'smn', 0x0480: 'ug',
26058  0x0404: 'zh-TW', 0x0470: 'ig', 0x103B: 'smj-NO', 0x0422: 'uk',
26059  0x0483: 'co', 0x0421: 'id', 0x143B: 'smj', 0x042E: 'hsb',
26060  0x041A: 'hr', 0x045D: 'iu', 0x0C3B: 'se-FI', 0x0420: 'ur',
26061  0x101A: 'hr-BA', 0x085D: 'iu-Latn', 0x043B: 'se', 0x0843: 'uz-Cyrl',
26062  0x0405: 'cs', 0x083C: 'ga', 0x083B: 'se-SE', 0x0443: 'uz',
26063  0x0406: 'da', 0x0434: 'xh', 0x203B: 'sms', 0x042A: 'vi',
26064  0x048C: 'prs', 0x0435: 'zu', 0x183B: 'sma-NO', 0x0452: 'cy',
26065  0x0465: 'dv', 0x0410: 'it', 0x1C3B: 'sms', 0x0488: 'wo',
26066  0x0813: 'nl-BE', 0x0810: 'it-CH', 0x044F: 'sa', 0x0485: 'sah',
26067  0x0413: 'nl', 0x0411: 'ja', 0x1C1A: 'sr-Cyrl-BA', 0x0478: 'ii',
26068  0x0C09: 'en-AU', 0x044B: 'kn', 0x0C1A: 'sr', 0x046A: 'yo',
26069  0x2809: 'en-BZ', 0x043F: 'kk', 0x181A: 'sr-Latn-BA',
26070  0x1009: 'en-CA', 0x0453: 'km', 0x081A: 'sr-Latn',
26071  0x2409: 'en-029', 0x0486: 'quc', 0x046C: 'nso'
26072}];
26073
26074var NameRecord = new r.Struct({
26075  platformID: r.uint16,
26076  encodingID: r.uint16,
26077  languageID: r.uint16,
26078  nameID: r.uint16,
26079  length: r.uint16,
26080  string: new r.Pointer(r.uint16, new r.String('length', function (t) {
26081    return getEncoding(t.platformID, t.encodingID, t.languageID);
26082  }), { type: 'parent', relativeTo: 'parent.stringOffset', allowNull: false })
26083});
26084
26085var LangTagRecord = new r.Struct({
26086  length: r.uint16,
26087  tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), { type: 'parent', relativeTo: 'stringOffset' })
26088});
26089
26090var NameTable = new r.VersionedStruct(r.uint16, {
26091  0: {
26092    count: r.uint16,
26093    stringOffset: r.uint16,
26094    records: new r.Array(NameRecord, 'count')
26095  },
26096  1: {
26097    count: r.uint16,
26098    stringOffset: r.uint16,
26099    records: new r.Array(NameRecord, 'count'),
26100    langTagCount: r.uint16,
26101    langTags: new r.Array(LangTagRecord, 'langTagCount')
26102  }
26103});
26104
26105var NAMES = ['copyright', 'fontFamily', 'fontSubfamily', 'uniqueSubfamily', 'fullName', 'version', 'postscriptName', // Note: A font may have only one PostScript name and that name must be ASCII.
26106'trademark', 'manufacturer', 'designer', 'description', 'vendorURL', 'designerURL', 'license', 'licenseURL', null, // reserved
26107'preferredFamily', 'preferredSubfamily', 'compatibleFull', 'sampleText', 'postscriptCIDFontName', 'wwsFamilyName', 'wwsSubfamilyName'];
26108
26109NameTable.process = function (stream) {
26110  var records = {};
26111  for (var _iterator = this.records, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
26112    var _ref;
26113
26114    if (_isArray) {
26115      if (_i >= _iterator.length) break;
26116      _ref = _iterator[_i++];
26117    } else {
26118      _i = _iterator.next();
26119      if (_i.done) break;
26120      _ref = _i.value;
26121    }
26122
26123    var record = _ref;
26124
26125    // find out what language this is for
26126    var language = LANGUAGES[record.platformID][record.languageID];
26127
26128    if (language == null && this.langTags != null && record.languageID >= 0x8000) {
26129      language = this.langTags[record.languageID - 0x8000].tag;
26130    }
26131
26132    if (language == null) {
26133      language = record.platformID + '-' + record.languageID;
26134    }
26135
26136    // if the nameID is >= 256, it is a font feature record (AAT)
26137    var key = record.nameID >= 256 ? 'fontFeatures' : NAMES[record.nameID] || record.nameID;
26138    if (records[key] == null) {
26139      records[key] = {};
26140    }
26141
26142    var obj = records[key];
26143    if (record.nameID >= 256) {
26144      obj = obj[record.nameID] || (obj[record.nameID] = {});
26145    }
26146
26147    if (typeof record.string === 'string' || typeof obj[language] !== 'string') {
26148      obj[language] = record.string;
26149    }
26150  }
26151
26152  this.records = records;
26153};
26154
26155NameTable.preEncode = function () {
26156  if (Array.isArray(this.records)) return;
26157  this.version = 0;
26158
26159  var records = [];
26160  for (var key in this.records) {
26161    var val = this.records[key];
26162    if (key === 'fontFeatures') continue;
26163
26164    records.push({
26165      platformID: 3,
26166      encodingID: 1,
26167      languageID: 0x409,
26168      nameID: NAMES.indexOf(key),
26169      length: Buffer.byteLength(val.en, 'utf16le'),
26170      string: val.en
26171    });
26172
26173    if (key === 'postscriptName') {
26174      records.push({
26175        platformID: 1,
26176        encodingID: 0,
26177        languageID: 0,
26178        nameID: NAMES.indexOf(key),
26179        length: val.en.length,
26180        string: val.en
26181      });
26182    }
26183  }
26184
26185  this.records = records;
26186  this.count = records.length;
26187  this.stringOffset = NameTable.size(this, null, false);
26188};
26189
26190var OS2 = new r.VersionedStruct(r.uint16, {
26191  header: {
26192    xAvgCharWidth: r.int16, // average weighted advance width of lower case letters and space
26193    usWeightClass: r.uint16, // visual weight of stroke in glyphs
26194    usWidthClass: r.uint16, // relative change from the normal aspect ratio (width to height ratio)
26195    fsType: new r.Bitfield(r.uint16, [// Indicates font embedding licensing rights
26196    null, 'noEmbedding', 'viewOnly', 'editable', null, null, null, null, 'noSubsetting', 'bitmapOnly']),
26197    ySubscriptXSize: r.int16, // recommended horizontal size in pixels for subscripts
26198    ySubscriptYSize: r.int16, // recommended vertical size in pixels for subscripts
26199    ySubscriptXOffset: r.int16, // recommended horizontal offset for subscripts
26200    ySubscriptYOffset: r.int16, // recommended vertical offset form the baseline for subscripts
26201    ySuperscriptXSize: r.int16, // recommended horizontal size in pixels for superscripts
26202    ySuperscriptYSize: r.int16, // recommended vertical size in pixels for superscripts
26203    ySuperscriptXOffset: r.int16, // recommended horizontal offset for superscripts
26204    ySuperscriptYOffset: r.int16, // recommended vertical offset from the baseline for superscripts
26205    yStrikeoutSize: r.int16, // width of the strikeout stroke
26206    yStrikeoutPosition: r.int16, // position of the strikeout stroke relative to the baseline
26207    sFamilyClass: r.int16, // classification of font-family design
26208    panose: new r.Array(r.uint8, 10), // describe the visual characteristics of a given typeface
26209    ulCharRange: new r.Array(r.uint32, 4),
vendor: 1,525 bytes, lines 26210-26264
26210    vendorID: new r.String(4), // four character identifier for the font vendor
26211    fsSelection: new r.Bitfield(r.uint16, [// bit field containing information about the font
26212    'italic', 'underscore', 'negative', 'outlined', 'strikeout', 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique']),
26213    usFirstCharIndex: r.uint16, // The minimum Unicode index in this font
26214    usLastCharIndex: r.uint16 // The maximum Unicode index in this font
26215  },
26216
26217  // The Apple version of this table ends here, but the Microsoft one continues on...
26218  0: {},
26219
26220  1: {
26221    typoAscender: r.int16,
26222    typoDescender: r.int16,
26223    typoLineGap: r.int16,
26224    winAscent: r.uint16,
26225    winDescent: r.uint16,
26226    codePageRange: new r.Array(r.uint32, 2)
26227  },
26228
26229  2: {
26230    // these should be common with version 1 somehow
26231    typoAscender: r.int16,
26232    typoDescender: r.int16,
26233    typoLineGap: r.int16,
26234    winAscent: r.uint16,
26235    winDescent: r.uint16,
26236    codePageRange: new r.Array(r.uint32, 2),
26237
26238    xHeight: r.int16,
26239    capHeight: r.int16,
26240    defaultChar: r.uint16,
26241    breakChar: r.uint16,
26242    maxContent: r.uint16
26243  },
26244
26245  5: {
26246    typoAscender: r.int16,
26247    typoDescender: r.int16,
26248    typoLineGap: r.int16,
26249    winAscent: r.uint16,
26250    winDescent: r.uint16,
26251    codePageRange: new r.Array(r.uint32, 2),
26252
26253    xHeight: r.int16,
26254    capHeight: r.int16,
26255    defaultChar: r.uint16,
26256    breakChar: r.uint16,
26257    maxContent: r.uint16,
26258
26259    usLowerOpticalPointSize: r.uint16,
26260    usUpperOpticalPointSize: r.uint16
26261  }
26262});
26263
26264var versions = OS2.versions;
26265versions[3] = versions[4] = versions[2];
26266
26267// PostScript information
26268var post = new r.VersionedStruct(r.fixed32, {
26269  header: { // these fields exist at the top of all versions
26270    italicAngle: r.fixed32, // Italic angle in counter-clockwise degrees from the vertical.
26271    underlinePosition: r.int16, // Suggested distance of the top of the underline from the baseline
26272    underlineThickness: r.int16, // Suggested values for the underline thickness
26273    isFixedPitch: r.uint32, // Whether the font is monospaced
26274    minMemType42: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 42 font
26275    maxMemType42: r.uint32, // Maximum memory usage when a TrueType font is downloaded as a Type 42 font
26276    minMemType1: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 1 font
26277    maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font
26278  },
26279
26280  1: {}, // version 1 has no additional fields
26281
26282  2: {
26283    numberOfGlyphs: r.uint16,
26284    glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),
26285    names: new r.Array(new r.String(r.uint8))
26286  },
26287
26288  2.5: {
26289    numberOfGlyphs: r.uint16,
26290    offsets: new r.Array(r.uint8, 'numberOfGlyphs')
26291  },
26292
26293  3: {}, // version 3 has no additional fields
26294
26295  4: {
26296    map: new r.Array(r.uint32, function (t) {
26297      return t.parent.maxp.numGlyphs;
26298    })
26299  }
26300});
26301
26302// An array of predefined values accessible by instructions
26303var cvt = new r.Struct({
26304  controlValues: new r.Array(r.int16)
26305});
26306
26307// A list of instructions that are executed once when a font is first used.
26308// These instructions are known as the font program. The main use of this table
26309// is for the definition of functions that are used in many different glyph programs.
26310var fpgm = new r.Struct({
26311  instructions: new r.Array(r.uint8)
26312});
26313
26314var loca = new r.VersionedStruct('head.indexToLocFormat', {
26315  0: {
26316    offsets: new r.Array(r.uint16)
26317  },
26318  1: {
26319    offsets: new r.Array(r.uint32)
26320  }
26321});
26322
26323loca.process = function () {
26324  if (this.version === 0) {
26325    for (var i = 0; i < this.offsets.length; i++) {
26326      this.offsets[i] <<= 1;
26327    }
26328  }
26329};
26330
26331loca.preEncode = function () {
26332  if (this.version != null) return;
26333
26334  // assume this.offsets is a sorted array
26335  this.version = this.offsets[this.offsets.length - 1] > 0xffff ? 1 : 0;
26336
26337  if (this.version === 0) {
26338    for (var i = 0; i < this.offsets.length; i++) {
26339      this.offsets[i] >>>= 1;
26340    }
26341  }
26342};
26343
26344// Set of instructions executed whenever the point size or font transformation change
26345var prep = new r.Struct({
26346  controlValueProgram: new r.Array(r.uint8)
26347});
26348
26349// only used for encoding
26350var glyf = new r.Array(new r.Buffer());
26351
26352var CFFIndex = function () {
26353  function CFFIndex(type) {
26354    _classCallCheck(this, CFFIndex);
26355
26356    this.type = type;
26357  }
26358
26359  CFFIndex.prototype.getCFFVersion = function getCFFVersion(ctx) {
26360    while (ctx && !ctx.hdrSize) {
26361      ctx = ctx.parent;
26362    }
26363
26364    return ctx ? ctx.version : -1;
26365  };
26366
26367  CFFIndex.prototype.decode = function decode(stream, parent) {
26368    var version = this.getCFFVersion(parent);
26369    var count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE();
26370
26371    if (count === 0) {
26372      return [];
26373    }
26374
26375    var offSize = stream.readUInt8();
26376    var offsetType = void 0;
26377    if (offSize === 1) {
26378      offsetType = r.uint8;
26379    } else if (offSize === 2) {
26380      offsetType = r.uint16;
26381    } else if (offSize === 3) {
26382      offsetType = r.uint24;
26383    } else if (offSize === 4) {
26384      offsetType = r.uint32;
26385    } else {
26386      throw new Error("Bad offset size in CFFIndex: " + offSize + " " + stream.pos);
26387    }
26388
26389    var ret = [];
26390    var startPos = stream.pos + (count + 1) * offSize - 1;
26391
26392    var start = offsetType.decode(stream);
26393    for (var i = 0; i < count; i++) {
26394      var end = offsetType.decode(stream);
26395
26396      if (this.type != null) {
26397        var pos = stream.pos;
26398        stream.pos = startPos + start;
26399
26400        parent.length = end - start;
26401        ret.push(this.type.decode(stream, parent));
26402        stream.pos = pos;
26403      } else {
26404        ret.push({
26405          offset: startPos + start,
26406          length: end - start
26407        });
26408      }
26409
26410      start = end;
26411    }
26412
26413    stream.pos = startPos + start;
26414    return ret;
26415  };
26416
26417  CFFIndex.prototype.size = function size(arr, parent) {
26418    var size = 2;
26419    if (arr.length === 0) {
26420      return size;
26421    }
26422
26423    var type = this.type || new r.Buffer();
26424
26425    // find maximum offset to detminine offset type
26426    var offset = 1;
26427    for (var i = 0; i < arr.length; i++) {
26428      var item = arr[i];
26429      offset += type.size(item, parent);
26430    }
26431
26432    var offsetType = void 0;
26433    if (offset <= 0xff) {
26434      offsetType = r.uint8;
26435    } else if (offset <= 0xffff) {
26436      offsetType = r.uint16;
26437    } else if (offset <= 0xffffff) {
26438      offsetType = r.uint24;
26439    } else if (offset <= 0xffffffff) {
26440      offsetType = r.uint32;
26441    } else {
26442      throw new Error("Bad offset in CFFIndex");
26443    }
26444
26445    size += 1 + offsetType.size() * (arr.length + 1);
26446    size += offset - 1;
26447
26448    return size;
26449  };
26450
26451  CFFIndex.prototype.encode = function encode(stream, arr, parent) {
26452    stream.writeUInt16BE(arr.length);
26453    if (arr.length === 0) {
26454      return;
26455    }
26456
26457    var type = this.type || new r.Buffer();
26458
26459    // find maximum offset to detminine offset type
26460    var sizes = [];
26461    var offset = 1;
26462    for (var _iterator = arr, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
26463      var _ref;
26464
26465      if (_isArray) {
26466        if (_i >= _iterator.length) break;
26467        _ref = _iterator[_i++];
26468      } else {
26469        _i = _iterator.next();
26470        if (_i.done) break;
26471        _ref = _i.value;
26472      }
26473
26474      var item = _ref;
26475
26476      var s = type.size(item, parent);
26477      sizes.push(s);
26478      offset += s;
26479    }
26480
26481    var offsetType = void 0;
26482    if (offset <= 0xff) {
26483      offsetType = r.uint8;
26484    } else if (offset <= 0xffff) {
26485      offsetType = r.uint16;
26486    } else if (offset <= 0xffffff) {
26487      offsetType = r.uint24;
26488    } else if (offset <= 0xffffffff) {
26489      offsetType = r.uint32;
26490    } else {
26491      throw new Error("Bad offset in CFFIndex");
26492    }
26493
26494    // write offset size
26495    stream.writeUInt8(offsetType.size());
26496
26497    // write elements
26498    offset = 1;
26499    offsetType.encode(stream, offset);
26500
26501    for (var _iterator2 = sizes, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
26502      var _ref2;
26503
26504      if (_isArray2) {
26505        if (_i2 >= _iterator2.length) break;
26506        _ref2 = _iterator2[_i2++];
26507      } else {
26508        _i2 = _iterator2.next();
26509        if (_i2.done) break;
26510        _ref2 = _i2.value;
26511      }
26512
26513      var size = _ref2;
26514
26515      offset += size;
26516      offsetType.encode(stream, offset);
26517    }
26518
26519    for (var _iterator3 = arr, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
26520      var _ref3;
26521
26522      if (_isArray3) {
26523        if (_i3 >= _iterator3.length) break;
26524        _ref3 = _iterator3[_i3++];
26525      } else {
26526        _i3 = _iterator3.next();
26527        if (_i3.done) break;
26528        _ref3 = _i3.value;
26529      }
26530
26531      var _item = _ref3;
26532
26533      type.encode(stream, _item, parent);
26534    }
26535
26536    return;
26537  };
26538
26539  return CFFIndex;
26540}();
26541
26542var FLOAT_EOF = 0xf;
26543var FLOAT_LOOKUP = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-'];
26544
26545var FLOAT_ENCODE_LOOKUP = {
26546  '.': 10,
26547  'E': 11,
26548  'E-': 12,
26549  '-': 14
26550};
26551
26552var CFFOperand = function () {
26553  function CFFOperand() {
26554    _classCallCheck(this, CFFOperand);
26555  }
26556
26557  CFFOperand.decode = function decode(stream, value) {
26558    if (32 <= value && value <= 246) {
26559      return value - 139;
26560    }
26561
26562    if (247 <= value && value <= 250) {
26563      return (value - 247) * 256 + stream.readUInt8() + 108;
26564    }
26565
26566    if (251 <= value && value <= 254) {
26567      return -(value - 251) * 256 - stream.readUInt8() - 108;
26568    }
26569
26570    if (value === 28) {
26571      return stream.readInt16BE();
26572    }
26573
26574    if (value === 29) {
26575      return stream.readInt32BE();
26576    }
26577
26578    if (value === 30) {
26579      var str = '';
26580      while (true) {
26581        var b = stream.readUInt8();
26582
26583        var n1 = b >> 4;
26584        if (n1 === FLOAT_EOF) {
26585          break;
26586        }
26587        str += FLOAT_LOOKUP[n1];
26588
26589        var n2 = b & 15;
26590        if (n2 === FLOAT_EOF) {
26591          break;
26592        }
26593        str += FLOAT_LOOKUP[n2];
26594      }
26595
26596      return parseFloat(str);
26597    }
26598
26599    return null;
26600  };
26601
26602  CFFOperand.size = function size(value) {
26603    // if the value needs to be forced to the largest size (32 bit)
26604    // e.g. for unknown pointers, set to 32768
26605    if (value.forceLarge) {
26606      value = 32768;
26607    }
26608
26609    if ((value | 0) !== value) {
26610      // floating point
26611      var str = '' + value;
26612      return 1 + Math.ceil((str.length + 1) / 2);
26613    } else if (-107 <= value && value <= 107) {
26614      return 1;
26615    } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {
26616      return 2;
26617    } else if (-32768 <= value && value <= 32767) {
26618      return 3;
26619    } else {
26620      return 5;
26621    }
26622  };
26623
26624  CFFOperand.encode = function encode(stream, value) {
26625    // if the value needs to be forced to the largest size (32 bit)
26626    // e.g. for unknown pointers, save the old value and set to 32768
26627    var val = Number(value);
26628
26629    if (value.forceLarge) {
26630      stream.writeUInt8(29);
26631      return stream.writeInt32BE(val);
26632    } else if ((val | 0) !== val) {
26633      // floating point
26634      stream.writeUInt8(30);
26635
26636      var str = '' + val;
26637      for (var i = 0; i < str.length; i += 2) {
26638        var c1 = str[i];
26639        var n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;
26640
26641        if (i === str.length - 1) {
26642          var n2 = FLOAT_EOF;
26643        } else {
26644          var c2 = str[i + 1];
26645          var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;
26646        }
26647
26648        stream.writeUInt8(n1 << 4 | n2 & 15);
26649      }
26650
26651      if (n2 !== FLOAT_EOF) {
26652        return stream.writeUInt8(FLOAT_EOF << 4);
26653      }
26654    } else if (-107 <= val && val <= 107) {
26655      return stream.writeUInt8(val + 139);
26656    } else if (108 <= val && val <= 1131) {
26657      val -= 108;
26658      stream.writeUInt8((val >> 8) + 247);
26659      return stream.writeUInt8(val & 0xff);
26660    } else if (-1131 <= val && val <= -108) {
26661      val = -val - 108;
26662      stream.writeUInt8((val >> 8) + 251);
26663      return stream.writeUInt8(val & 0xff);
26664    } else if (-32768 <= val && val <= 32767) {
26665      stream.writeUInt8(28);
26666      return stream.writeInt16BE(val);
26667    } else {
26668      stream.writeUInt8(29);
26669      return stream.writeInt32BE(val);
26670    }
26671  };
26672
26673  return CFFOperand;
26674}();
26675
26676var CFFDict = function () {
26677  function CFFDict() {
26678    var ops = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
26679
26680    _classCallCheck(this, CFFDict);
26681
26682    this.ops = ops;
26683    this.fields = {};
26684    for (var _iterator = ops, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
26685      var _ref;
26686
26687      if (_isArray) {
26688        if (_i >= _iterator.length) break;
26689        _ref = _iterator[_i++];
26690      } else {
26691        _i = _iterator.next();
26692        if (_i.done) break;
26693        _ref = _i.value;
26694      }
26695
26696      var field = _ref;
26697
26698      var key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];
26699      this.fields[key] = field;
26700    }
26701  }
26702
26703  CFFDict.prototype.decodeOperands = function decodeOperands(type, stream, ret, operands) {
26704    var _this = this;
26705
26706    if (Array.isArray(type)) {
26707      return operands.map(function (op, i) {
26708        return _this.decodeOperands(type[i], stream, ret, [op]);
26709      });
26710    } else if (type.decode != null) {
26711      return type.decode(stream, ret, operands);
26712    } else {
26713      switch (type) {
26714        case 'number':
26715        case 'offset':
26716        case 'sid':
26717          return operands[0];
26718        case 'boolean':
26719          return !!operands[0];
26720        default:
26721          return operands;
26722      }
26723    }
26724  };
26725
26726  CFFDict.prototype.encodeOperands = function encodeOperands(type, stream, ctx, operands) {
26727    var _this2 = this;
26728
26729    if (Array.isArray(type)) {
26730      return operands.map(function (op, i) {
26731        return _this2.encodeOperands(type[i], stream, ctx, op)[0];
26732      });
26733    } else if (type.encode != null) {
26734      return type.encode(stream, operands, ctx);
26735    } else if (typeof operands === 'number') {
26736      return [operands];
26737    } else if (typeof operands === 'boolean') {
26738      return [+operands];
26739    } else if (Array.isArray(operands)) {
26740      return operands;
26741    } else {
26742      return [operands];
26743    }
26744  };
26745
26746  CFFDict.prototype.decode = function decode(stream, parent) {
26747    var end = stream.pos + parent.length;
26748    var ret = {};
26749    var operands = [];
26750
26751    // define hidden properties
26752    _Object$defineProperties(ret, {
26753      parent: { value: parent },
26754      _startOffset: { value: stream.pos }
26755    });
26756
26757    // fill in defaults
26758    for (var key in this.fields) {
26759      var field = this.fields[key];
26760      ret[field[1]] = field[3];
26761    }
26762
26763    while (stream.pos < end) {
26764      var b = stream.readUInt8();
26765      if (b < 28) {
26766        if (b === 12) {
26767          b = b << 8 | stream.readUInt8();
26768        }
26769
26770        var _field = this.fields[b];
26771        if (!_field) {
26772          throw new Error('Unknown operator ' + b);
26773        }
26774
26775        var val = this.decodeOperands(_field[2], stream, ret, operands);
26776        if (val != null) {
26777          if (val instanceof restructure_src_utils.PropertyDescriptor) {
26778            _Object$defineProperty(ret, _field[1], val);
26779          } else {
26780            ret[_field[1]] = val;
26781          }
26782        }
26783
26784        operands = [];
26785      } else {
26786        operands.push(CFFOperand.decode(stream, b));
26787      }
26788    }
26789
26790    return ret;
26791  };
26792
26793  CFFDict.prototype.size = function size(dict, parent) {
26794    var includePointers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
26795
26796    var ctx = {
26797      parent: parent,
26798      val: dict,
26799      pointerSize: 0,
26800      startOffset: parent.startOffset || 0
26801    };
26802
26803    var len = 0;
26804
26805    for (var k in this.fields) {
26806      var field = this.fields[k];
26807      var val = dict[field[1]];
26808      if (val == null || isEqual(val, field[3])) {
26809        continue;
26810      }
26811
26812      var operands = this.encodeOperands(field[2], null, ctx, val);
26813      for (var _iterator2 = operands, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
26814        var _ref2;
26815
26816        if (_isArray2) {
26817          if (_i2 >= _iterator2.length) break;
26818          _ref2 = _iterator2[_i2++];
26819        } else {
26820          _i2 = _iterator2.next();
26821          if (_i2.done) break;
26822          _ref2 = _i2.value;
26823        }
26824
26825        var op = _ref2;
26826
26827        len += CFFOperand.size(op);
26828      }
26829
26830      var key = Array.isArray(field[0]) ? field[0] : [field[0]];
26831      len += key.length;
26832    }
26833
26834    if (includePointers) {
26835      len += ctx.pointerSize;
26836    }
26837
26838    return len;
26839  };
26840
26841  CFFDict.prototype.encode = function encode(stream, dict, parent) {
26842    var ctx = {
26843      pointers: [],
26844      startOffset: stream.pos,
26845      parent: parent,
26846      val: dict,
26847      pointerSize: 0
26848    };
26849
26850    ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);
26851
26852    for (var _iterator3 = this.ops, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
26853      var _ref3;
26854
26855      if (_isArray3) {
26856        if (_i3 >= _iterator3.length) break;
26857        _ref3 = _iterator3[_i3++];
26858      } else {
26859        _i3 = _iterator3.next();
26860        if (_i3.done) break;
26861        _ref3 = _i3.value;
26862      }
26863
26864      var field = _ref3;
26865
26866      var val = dict[field[1]];
26867      if (val == null || isEqual(val, field[3])) {
26868        continue;
26869      }
26870
26871      var operands = this.encodeOperands(field[2], stream, ctx, val);
26872      for (var _iterator4 = operands, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _getIterator(_iterator4);;) {
26873        var _ref4;
26874
26875        if (_isArray4) {
26876          if (_i4 >= _iterator4.length) break;
26877          _ref4 = _iterator4[_i4++];
26878        } else {
26879          _i4 = _iterator4.next();
26880          if (_i4.done) break;
26881          _ref4 = _i4.value;
26882        }
26883
26884        var op = _ref4;
26885
26886        CFFOperand.encode(stream, op);
26887      }
26888
26889      var key = Array.isArray(field[0]) ? field[0] : [field[0]];
26890      for (var _iterator5 = key, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _getIterator(_iterator5);;) {
26891        var _ref5;
26892
26893        if (_isArray5) {
26894          if (_i5 >= _iterator5.length) break;
26895          _ref5 = _iterator5[_i5++];
26896        } else {
26897          _i5 = _iterator5.next();
26898          if (_i5.done) break;
26899          _ref5 = _i5.value;
26900        }
26901
26902        var _op = _ref5;
26903
26904        stream.writeUInt8(_op);
26905      }
26906    }
26907
26908    var i = 0;
26909    while (i < ctx.pointers.length) {
26910      var ptr = ctx.pointers[i++];
26911      ptr.type.encode(stream, ptr.val, ptr.parent);
26912    }
26913
26914    return;
26915  };
26916
26917  return CFFDict;
26918}();
26919
26920var CFFPointer = function (_r$Pointer) {
26921  _inherits(CFFPointer, _r$Pointer);
26922
26923  function CFFPointer(type) {
26924    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
26925
26926    _classCallCheck(this, CFFPointer);
26927
26928    if (options.type == null) {
26929      options.type = 'global';
26930    }
26931
26932    return _possibleConstructorReturn(this, _r$Pointer.call(this, null, type, options));
26933  }
26934
26935  CFFPointer.prototype.decode = function decode(stream, parent, operands) {
26936    this.offsetType = {
26937      decode: function decode() {
26938        return operands[0];
26939      }
26940    };
26941
26942    return _r$Pointer.prototype.decode.call(this, stream, parent, operands);
26943  };
26944
26945  CFFPointer.prototype.encode = function encode(stream, value, ctx) {
26946    if (!stream) {
26947      // compute the size (so ctx.pointerSize is correct)
26948      this.offsetType = {
26949        size: function size() {
26950          return 0;
26951        }
26952      };
26953
26954      this.size(value, ctx);
26955      return [new Ptr(0)];
26956    }
26957
26958    var ptr = null;
26959    this.offsetType = {
26960      encode: function encode(stream, val) {
26961        return ptr = val;
26962      }
26963    };
26964
26965    _r$Pointer.prototype.encode.call(this, stream, value, ctx);
26966    return [new Ptr(ptr)];
26967  };
26968
26969  return CFFPointer;
26970}(r.Pointer);
26971
26972var Ptr = function () {
26973  function Ptr(val) {
26974    _classCallCheck(this, Ptr);
26975
26976    this.val = val;
26977    this.forceLarge = true;
26978  }
26979
26980  Ptr.prototype.valueOf = function valueOf() {
26981    return this.val;
26982  };
26983
26984  return Ptr;
26985}();
26986
26987var CFFBlendOp = function () {
26988  function CFFBlendOp() {
26989    _classCallCheck(this, CFFBlendOp);
26990  }
26991
26992  CFFBlendOp.decode = function decode(stream, parent, operands) {
26993    var numBlends = operands.pop();
26994
26995    // TODO: actually blend. For now just consume the deltas
26996    // since we don't use any of the values anyway.
26997    while (operands.length > numBlends) {
26998      operands.pop();
26999    }
27000  };
27001
27002  return CFFBlendOp;
27003}();
27004
27005var CFFPrivateDict = new CFFDict([
27006// key       name                    type                                          default
27007[6, 'BlueValues', 'delta', null], [7, 'OtherBlues', 'delta', null], [8, 'FamilyBlues', 'delta', null], [9, 'FamilyOtherBlues', 'delta', null], [[12, 9], 'BlueScale', 'number', 0.039625], [[12, 10], 'BlueShift', 'number', 7], [[12, 11], 'BlueFuzz', 'number', 1], [10, 'StdHW', 'number', null], [11, 'StdVW', 'number', null], [[12, 12], 'StemSnapH', 'delta', null], [[12, 13], 'StemSnapV', 'delta', null], [[12, 14], 'ForceBold', 'boolean', false], [[12, 17], 'LanguageGroup', 'number', 0], [[12, 18], 'ExpansionFactor', 'number', 0.06], [[12, 19], 'initialRandomSeed', 'number', 0], [20, 'defaultWidthX', 'number', 0], [21, 'nominalWidthX', 'number', 0], [22, 'vsindex', 'number', 0], [23, 'blend', CFFBlendOp, null], [19, 'Subrs', new CFFPointer(new CFFIndex(), { type: 'local' }), null]]);
27008
27009// Automatically generated from Appendix A of the CFF specification; do
27010// not edit. Length should be 391.
27011var standardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodce
27011ntered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"];
27012
27013var StandardEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl', 'periodce
27013ntered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls'];
27014
27015var ExpertEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];
27016
27017var ISOAdobeCharset = ['.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodce
27017ntered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron'];
27018
27019var ExpertCharset = ['.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];
27020
27021var ExpertSubsetCharset = ['.notdef', 'space', 'dollaroldstyle', 'dollarsuperior', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted', 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter', 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior'];
27022
27023//########################
27024// Scripts and Languages #
27025//########################
27026
27027var LangSysTable = new r.Struct({
27028  reserved: new r.Reserved(r.uint16),
27029  reqFeatureIndex: r.uint16,
27030  featureCount: r.uint16,
27031  featureIndexes: new r.Array(r.uint16, 'featureCount')
27032});
27033
27034var LangSysRecord = new r.Struct({
27035  tag: new r.String(4),
27036  langSys: new r.Pointer(r.uint16, LangSysTable, { type: 'parent' })
27037});
27038
27039var Script = new r.Struct({
27040  defaultLangSys: new r.Pointer(r.uint16, LangSysTable),
27041  count: r.uint16,
27042  langSysRecords: new r.Array(LangSysRecord, 'count')
27043});
27044
27045var ScriptRecord = new r.Struct({
27046  tag: new r.String(4),
27047  script: new r.Pointer(r.uint16, Script, { type: 'parent' })
27048});
27049
27050var ScriptList = new r.Array(ScriptRecord, r.uint16);
27051
27052//#######################
27053// Features and Lookups #
27054//#######################
27055
27056var Feature = new r.Struct({
27057  featureParams: r.uint16, // pointer
27058  lookupCount: r.uint16,
27059  lookupListIndexes: new r.Array(r.uint16, 'lookupCount')
27060});
27061
27062var FeatureRecord = new r.Struct({
27063  tag: new r.String(4),
27064  feature: new r.Pointer(r.uint16, Feature, { type: 'parent' })
27065});
27066
27067var FeatureList = new r.Array(FeatureRecord, r.uint16);
27068
27069var LookupFlags = new r.Struct({
27070  markAttachmentType: r.uint8,
27071  flags: new r.Bitfield(r.uint8, ['rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures', 'ignoreMarks', 'useMarkFilteringSet'])
27072});
27073
27074function LookupList(SubTable) {
27075  var Lookup = new r.Struct({
27076    lookupType: r.uint16,
27077    flags: LookupFlags,
27078    subTableCount: r.uint16,
27079    subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'),
27080    markFilteringSet: new r.Optional(r.uint16, function (t) {
27081      return t.flags.flags.useMarkFilteringSet;
27082    })
27083  });
27084
27085  return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16);
27086}
27087
27088//#################
27089// Coverage Table #
27090//#################
27091
27092var RangeRecord = new r.Struct({
27093  start: r.uint16,
27094  end: r.uint16,
27095  startCoverageIndex: r.uint16
27096});
27097
27098var Coverage = new r.VersionedStruct(r.uint16, {
27099  1: {
27100    glyphCount: r.uint16,
27101    glyphs: new r.Array(r.uint16, 'glyphCount')
27102  },
27103  2: {
27104    rangeCount: r.uint16,
27105    rangeRecords: new r.Array(RangeRecord, 'rangeCount')
27106  }
27107});
27108
27109//#########################
27110// Class Definition Table #
27111//#########################
27112
27113var ClassRangeRecord = new r.Struct({
27114  start: r.uint16,
27115  end: r.uint16,
27116  class: r.uint16
27117});
27118
27119var ClassDef = new r.VersionedStruct(r.uint16, {
27120  1: { // Class array
27121    startGlyph: r.uint16,
27122    glyphCount: r.uint16,
27123    classValueArray: new r.Array(r.uint16, 'glyphCount')
27124  },
27125  2: { // Class ranges
27126    classRangeCount: r.uint16,
27127    classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount')
27128  }
27129});
27130
27131//###############
27132// Device Table #
27133//###############
27134
27135var Device = new r.Struct({
27136  a: r.uint16, // startSize for hinting Device, outerIndex for VariationIndex
27137  b: r.uint16, // endSize for Device, innerIndex for VariationIndex
27138  deltaFormat: r.uint16
27139});
27140
27141//#############################################
27142// Contextual Substitution/Positioning Tables #
27143//#############################################
27144
27145var LookupRecord = new r.Struct({
27146  sequenceIndex: r.uint16,
27147  lookupListIndex: r.uint16
27148});
27149
27150var Rule = new r.Struct({
27151  glyphCount: r.uint16,
27152  lookupCount: r.uint16,
27153  input: new r.Array(r.uint16, function (t) {
27154    return t.glyphCount - 1;
27155  }),
27156  lookupRecords: new r.Array(LookupRecord, 'lookupCount')
27157});
27158
27159var RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16);
27160
27161var ClassRule = new r.Struct({
27162  glyphCount: r.uint16,
27163  lookupCount: r.uint16,
27164  classes: new r.Array(r.uint16, function (t) {
27165    return t.glyphCount - 1;
27166  }),
27167  lookupRecords: new r.Array(LookupRecord, 'lookupCount')
27168});
27169
27170var ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16);
27171
27172var Context = new r.VersionedStruct(r.uint16, {
27173  1: { // Simple context
27174    coverage: new r.Pointer(r.uint16, Coverage),
27175    ruleSetCount: r.uint16,
27176    ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount')
27177  },
27178  2: { // Class-based context
27179    coverage: new r.Pointer(r.uint16, Coverage),
27180    classDef: new r.Pointer(r.uint16, ClassDef),
27181    classSetCnt: r.uint16,
27182    classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt')
27183  },
27184  3: {
27185    glyphCount: r.uint16,
27186    lookupCount: r.uint16,
27187    coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'),
27188    lookupRecords: new r.Array(LookupRecord, 'lookupCount')
27189  }
27190});
27191
27192//######################################################
27193// Chaining Contextual Substitution/Positioning Tables #
27194//######################################################
27195
27196var ChainRule = new r.Struct({
27197  backtrackGlyphCount: r.uint16,
27198  backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'),
27199  inputGlyphCount: r.uint16,
27200  input: new r.Array(r.uint16, function (t) {
27201    return t.inputGlyphCount - 1;
27202  }),
27203  lookaheadGlyphCount: r.uint16,
27204  lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'),
27205  lookupCount: r.uint16,
27206  lookupRecords: new r.Array(LookupRecord, 'lookupCount')
27207});
27208
27209var ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16);
27210
27211var ChainingContext = new r.VersionedStruct(r.uint16, {
27212  1: { // Simple context glyph substitution
27213    coverage: new r.Pointer(r.uint16, Coverage),
27214    chainCount: r.uint16,
27215    chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')
27216  },
27217
27218  2: { // Class-based chaining context
27219    coverage: new r.Pointer(r.uint16, Coverage),
27220    backtrackClassDef: new r.Pointer(r.uint16, ClassDef),
27221    inputClassDef: new r.Pointer(r.uint16, ClassDef),
27222    lookaheadClassDef: new r.Pointer(r.uint16, ClassDef),
27223    chainCount: r.uint16,
27224    chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')
27225  },
27226
27227  3: { // Coverage-based chaining context
27228    backtrackGlyphCount: r.uint16,
27229    backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),
27230    inputGlyphCount: r.uint16,
27231    inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'),
27232    lookaheadGlyphCount: r.uint16,
27233    lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),
27234    lookupCount: r.uint16,
27235    lookupRecords: new r.Array(LookupRecord, 'lookupCount')
27236  }
27237});
27238
27239var _;
27240
27241/*******************
27242 * Variation Store *
27243 *******************/
27244
27245var F2DOT14 = new r.Fixed(16, 'BE', 14);
27246var RegionAxisCoordinates = new r.Struct({
27247  startCoord: F2DOT14,
27248  peakCoord: F2DOT14,
27249  endCoord: F2DOT14
27250});
27251
27252var VariationRegionList = new r.Struct({
27253  axisCount: r.uint16,
27254  regionCount: r.uint16,
27255  variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')
27256});
27257
27258var DeltaSet = new r.Struct({
27259  shortDeltas: new r.Array(r.int16, function (t) {
27260    return t.parent.shortDeltaCount;
27261  }),
27262  regionDeltas: new r.Array(r.int8, function (t) {
27263    return t.parent.regionIndexCount - t.parent.shortDeltaCount;
27264  }),
27265  deltas: function deltas(t) {
27266    return t.shortDeltas.concat(t.regionDeltas);
27267  }
27268});
27269
27270var ItemVariationData = new r.Struct({
27271  itemCount: r.uint16,
27272  shortDeltaCount: r.uint16,
27273  regionIndexCount: r.uint16,
27274  regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),
27275  deltaSets: new r.Array(DeltaSet, 'itemCount')
27276});
27277
27278var ItemVariationStore = new r.Struct({
27279  format: r.uint16,
27280  variationRegionList: new r.Pointer(r.uint32, VariationRegionList),
27281  variationDataCount: r.uint16,
27282  itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')
27283});
27284
27285/**********************
27286 * Feature Variations *
27287 **********************/
27288
27289var ConditionTable = new r.VersionedStruct(r.uint16, {
27290  1: (_ = {
27291    axisIndex: r.uint16
27292  }, _['axisIndex'] = r.uint16, _.filterRangeMinValue = F2DOT14, _.filterRangeMaxValue = F2DOT14, _)
27293});
27294
27295var ConditionSet = new r.Struct({
27296  conditionCount: r.uint16,
27297  conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')
27298});
27299
27300var FeatureTableSubstitutionRecord = new r.Struct({
27301  featureIndex: r.uint16,
27302  alternateFeatureTable: new r.Pointer(r.uint32, Feature, { type: 'parent' })
27303});
27304
27305var FeatureTableSubstitution = new r.Struct({
27306  version: r.fixed32,
27307  substitutionCount: r.uint16,
27308  substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')
27309});
27310
27311var FeatureVariationRecord = new r.Struct({
27312  conditionSet: new r.Pointer(r.uint32, ConditionSet, { type: 'parent' }),
27313  featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, { type: 'parent' })
27314});
27315
27316var FeatureVariations = new r.Struct({
27317  majorVersion: r.uint16,
27318  minorVersion: r.uint16,
27319  featureVariationRecordCount: r.uint32,
27320  featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')
27321});
27322
27323// Checks if an operand is an index of a predefined value,
27324// otherwise delegates to the provided type.
27325
27326var PredefinedOp = function () {
27327  function PredefinedOp(predefinedOps, type) {
27328    _classCallCheck(this, PredefinedOp);
27329
27330    this.predefinedOps = predefinedOps;
27331    this.type = type;
27332  }
27333
27334  PredefinedOp.prototype.decode = function decode(stream, parent, operands) {
27335    if (this.predefinedOps[operands[0]]) {
27336      return this.predefinedOps[operands[0]];
27337    }
27338
27339    return this.type.decode(stream, parent, operands);
27340  };
27341
27342  PredefinedOp.prototype.size = function size(value, ctx) {
27343    return this.type.size(value, ctx);
27344  };
27345
27346  PredefinedOp.prototype.encode = function encode(stream, value, ctx) {
27347    var index = this.predefinedOps.indexOf(value);
27348    if (index !== -1) {
27349      return index;
27350    }
27351
27352    return this.type.encode(stream, value, ctx);
27353  };
27354
27355  return PredefinedOp;
27356}();
27357
27358var CFFEncodingVersion = function (_r$Number) {
27359  _inherits(CFFEncodingVersion, _r$Number);
27360
27361  function CFFEncodingVersion() {
27362    _classCallCheck(this, CFFEncodingVersion);
27363
27364    return _possibleConstructorReturn(this, _r$Number.call(this, '
27364UInt8'));
27365  }
27366
27367  CFFEncodingVersion.prototype.decode = function decode(stream) {
27368    return r.uint8.decode(stream) & 0x7f;
27369  };
27370
27371  return CFFEncodingVersion;
27372}(r.Number);
27373
27374var Range1 = new r.Struct({
27375  first: r.uint16,
27376  nLeft: r.uint8
27377});
27378
27379var Range2 = new r.Struct({
27380  first: r.uint16,
27381  nLeft: r.uint16
27382});
27383
27384var CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {
27385  0: {
27386    nCodes: r.uint8,
27387    codes: new r.Array(r.uint8, 'nCodes')
27388  },
27389
27390  1: {
27391    nRanges: r.uint8,
27392    ranges: new r.Array(Range1, 'nRanges')
27393  }
27394
27395  // TODO: supplement?
27396});
27397
27398var CFFEncoding = new PredefinedOp([StandardEncoding, ExpertEncoding], new CFFPointer(CFFCustomEncoding, { lazy: true }));
27399
27400// Decodes an array of ranges until the total
27401// length is equal to the provided length.
27402
27403var RangeArray = function (_r$Array) {
27404  _inherits(RangeArray, _r$Array);
27405
27406  function RangeArray() {
27407    _classCallCheck(this, RangeArray);
27408
27409    return _possibleConstructorReturn(this, _r$Array.apply(this, arguments));
27410  }
27411
27412  RangeArray.prototype.decode = function decode(stream, parent) {
27413    var length = restructure_src_utils.resolveLength(this.length, stream, parent);
27414    var count = 0;
27415    var res = [];
27416    while (count < length) {
27417      var range = this.type.decode(stream, parent);
27418      range.offset = count;
27419      count += range.nLeft + 1;
27420      res.push(range);
27421    }
27422
27423    return res;
27424  };
27425
27426  return RangeArray;
27427}(r.Array);
27428
27429var CFFCustomCharset = new r.VersionedStruct(r.uint8, {
27430  0: {
27431    glyphs: new r.Array(r.uint16, function (t) {
27432      return t.parent.CharStrings.length - 1;
27433    })
27434  },
27435
27436  1: {
27437    ranges: new RangeArray(Range1, function (t) {
27438      return t.parent.CharStrings.length - 1;
27439    })
27440  },
27441
27442  2: {
27443    ranges: new RangeArray(Range2, function (t) {
27444      return t.parent.CharStrings.length - 1;
27445    })
27446  }
27447});
27448
27449var CFFCharset = new PredefinedOp([ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset], new CFFPointer(CFFCustomCharset, { lazy: true }));
27450
27451var FDRange3 = new r.Struct({
27452  first: r.uint16,
27453  fd: r.uint8
27454});
27455
27456var FDRange4 = new r.Struct({
27457  first: r.uint32,
27458  fd: r.uint16
27459});
27460
27461var FDSelect = new r.VersionedStruct(r.uint8, {
27462  0: {
27463    fds: new r.Array(r.uint8, function (t) {
27464      return t.parent.CharStrings.length;
27465    })
27466  },
27467
27468  3: {
27469    nRanges: r.uint16,
27470    ranges: new r.Array(FDRange3, 'nRanges'),
27471    sentinel: r.uint16
27472  },
27473
27474  4: {
27475    nRanges: r.uint32,
27476    ranges: new r.Array(FDRange4, 'nRanges'),
27477    sentinel: r.uint32
27478  }
27479});
27480
27481var ptr = new CFFPointer(CFFPrivateDict);
27482
27483var CFFPrivateOp = function () {
27484  function CFFPrivateOp() {
27485    _classCallCheck(this, CFFPrivateOp);
27486  }
27487
27488  CFFPrivateOp.prototype.decode = function decode(stream, parent, operands) {
27489    parent.length = operands[0];
27490    return ptr.decode(stream, parent, [operands[1]]);
27491  };
27492
27493  CFFPrivateOp.prototype.size = function size(dict, ctx) {
27494    return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]];
27495  };
27496
27497  CFFPrivateOp.prototype.encode = function encode(stream, dict, ctx) {
27498    return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]];
27499  };
27500
27501  return CFFPrivateOp;
27502}();
27503
27504var FontDict = new CFFDict([
27505// key       name                   type(s)                                 default
27506[18, 'Private', new CFFPrivateOp(), null], [[12, 38], 'FontName', 'sid', null]]);
27507
27508var CFFTopDict = new CFFDict([
27509// key       name                   type(s)                                 default
27510[[12, 30], 'ROS', ['sid', 'sid', 'number'], null], [0, 'version', 'sid', null], [1, 'Notice', 'sid', null], [[12, 0], 'Copyright', 'sid', null], [2, 'FullName', 'sid', null], [3, 'FamilyName', 'sid', null], [4, 'Weight', 'sid', null], [[12, 1], 'isFixedPitch', 'boolean', false], [[12, 2], 'ItalicAngle', 'number', 0], [[12, 3], 'UnderlinePosition', 'number', -100], [[12, 4], 'UnderlineThickness', 'number', 50], [[12, 5], 'PaintType', 'number', 0], [[12, 6], 'CharstringType', 'number', 2], [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [13, 'UniqueID', 'number', null], [5, 'FontBBox', 'array', [0, 0, 0, 0]], [[12, 8], 'StrokeWidth', 'number', 0], [14, 'XUID', 'array', null], [15, 'charset', CFFCharset, ISOAdobeCharset], [16, 'Encoding', CFFEncoding, StandardEncoding], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [18, 'Private', new CFFPrivateOp(), null], [[12, 20], 'SyntheticBase', 'number', null], [[12, 21], 'PostScript', 'sid', null], [[12, 22], 'BaseFontName', 'sid', null], [[12, 23], 'BaseFontBlend', 'delta', null],
27511
27512// CID font specific
27513[[12, 31], 'CIDFontVersion', 'number', 0], [[12, 32], 'CIDFontRevision', 'number', 0], [[12, 33], 'CIDFontType', 'number', 0], [[12, 34], 'CIDCount', 'number', 8720], [[12, 35], 'UIDBase', 'number', null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [[12, 38], 'FontName', 'sid', null]]);
27514
27515var VariationStore = new r.Struct({
27516  length: r.uint16,
27517  itemVariationStore: ItemVariationStore
27518});
27519
27520var CFF2TopDict = new CFFDict([[[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [24, 'vstore', new CFFPointer(VariationStore), null], [25, 'maxstack', 'number', 193]]);
27521
27522var CFFTop = new r.VersionedStruct(r.fixed16, {
27523  1: {
27524    hdrSize: r.uint8,
27525    offSize: r.uint8,
27526    nameIndex: new CFFIndex(new r.String('length')),
27527    topDictIndex: new CFFIndex(CFFTopDict),
27528    stringIndex: new CFFIndex(new r.String('length')),
27529    globalSubrIndex: new CFFIndex()
27530  },
27531
27532  2: {
27533    hdrSize: r.uint8,
27534    length: r.uint16,
27535    topDict: CFF2TopDict,
27536    globalSubrIndex: new CFFIndex()
27537  }
27538});
27539
27540var CFFFont = function () {
27541  function CFFFont(stream) {
27542    _classCallCheck(this, CFFFont);
27543
27544    this.stream = stream;
27545    this.decode();
27546  }
27547
27548  CFFFont.decode = function decode(stream) {
27549    return new CFFFont(stream);
27550  };
27551
27552  CFFFont.prototype.decode = function decode() {
27553    var start = this.stream.pos;
27554    var top = CFFTop.decode(this.stream);
27555    for (var key in top) {
27556      var val = top[key];
27557      this[key] = val;
27558    }
27559
27560    if (this.version < 2) {
27561      if (this.topDictIndex.length !== 1) {
27562        throw new Error("Only a single font is allowed in CFF");
27563      }
27564
27565      this.topDict = this.topDictIndex[0];
27566    }
27567
27568    this.isCIDFont = this.topDict.ROS != null;
27569    return this;
27570  };
27571
27572  CFFFont.prototype.string = function string(sid) {
27573    if (this.version >= 2) {
27574      return null;
27575    }
27576
27577    if (sid < standardStrings.length) {
27578      return standardStrings[sid];
27579    }
27580
27581    return this.stringIndex[sid - standardStrings.length];
27582  };
27583
27584  CFFFont.prototype.getCharString = function getCharString(glyph) {
27585    this.stream.pos = this.topDict.CharStrings[glyph].offset;
27586    return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);
27587  };
27588
27589  CFFFont.prototype.getGlyphName = function getGlyphName(gid) {
27590    // CFF2 glyph names are in the post table.
27591    if (this.version >= 2) {
27592      return null;
27593    }
27594
27595    // CID-keyed fonts don't have glyph names
27596    if (this.isCIDFont) {
27597      return null;
27598    }
27599
27600    var charset = this.topDict.charset;
27601
27602    if (Array.isArray(charset)) {
27603      return charset[gid];
27604    }
27605
27606    if (gid === 0) {
27607      return '.notdef';
27608    }
27609
27610    gid -= 1;
27611
27612    switch (charset.version) {
27613      case 0:
27614        return this.string(charset.glyphs[gid]);
27615
27616      case 1:
27617      case 2:
27618        for (var i = 0; i < charset.ranges.length; i++) {
27619          var range = charset.ranges[i];
27620          if (range.offset <= gid && gid <= range.offset + range.nLeft) {
27621            return this.string(range.first + (gid - range.offset));
27622          }
27623        }
27624        break;
27625    }
27626
27627    return null;
27628  };
27629
27630  CFFFont.prototype.fdForGlyph = function fdForGlyph(gid) {
27631    if (!this.topDict.FDSelect) {
27632      return null;
27633    }
27634
27635    switch (this.topDict.FDSelect.version) {
27636      case 0:
27637        return this.topDict.FDSelect.fds[gid];
27638
27639      case 3:
27640      case 4:
27641        var ranges = this.topDict.FDSelect.ranges;
27642
27643        var low = 0;
27644        var high = ranges.length - 1;
27645
27646        while (low <= high) {
27647          var mid = low + high >> 1;
27648
27649          if (gid < ranges[mid].first) {
27650            high = mid - 1;
27651          } else if (mid < high && gid > ranges[mid + 1].first) {
27652            low = mid + 1;
27653          } else {
27654            return ranges[mid].fd;
27655          }
27656        }
27657      default:
27658        throw new Error('Unknown FDSelect version: ' + this.topDict.FDSelect.version);
27659    }
27660  };
27661
27662  CFFFont.prototype.privateDictForGlyph = function privateDictForGlyph(gid) {
27663    if (this.topDict.FDSelect) {
27664      var fd = this.fdForGlyph(gid);
27665      if (this.topDict.FDArray[fd]) {
27666        return this.topDict.FDArray[fd].Private;
27667      }
27668
27669      return null;
27670    }
27671
27672    if (this.version < 2) {
27673      return this.topDict.Private;
27674    }
27675
27676    return this.topDict.FDArray[0].Private;
27677  };
27678
27679  _createClass(CFFFont, [{
27680    key: 'postscriptName',
27681    get: function get() {
27682      if (this.version < 2) {
27683        return this.nameIndex[0];
27684      }
27685
27686      return null;
27687    }
27688  }, {
27689    key: 'fullName',
27690    get: function get() {
27691      return this.string(this.topDict.FullName);
27692    }
27693  }, {
27694    key: 'familyName',
27695    get: function get() {
27696      return this.string(this.topDict.FamilyName);
27697    }
27698  }]);
27699
27700  return CFFFont;
27701}();
27702
27703var VerticalOrigin = new r.Struct({
27704  glyphIndex: r.uint16,
27705  vertOriginY: r.int16
27706});
27707
27708var VORG = new r.Struct({
27709  majorVersion: r.uint16,
27710  minorVersion: r.uint16,
27711  defaultVertOriginY: r.int16,
27712  numVertOriginYMetrics: r.uint16,
27713  metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics')
27714});
27715
27716var BigMetrics = new r.Struct({
27717  height: r.uint8,
27718  width: r.uint8,
27719  horiBearingX: r.int8,
27720  horiBearingY: r.int8,
27721  horiAdvance: r.uint8,
27722  vertBearingX: r.int8,
27723  vertBearingY: r.int8,
27724  vertAdvance: r.uint8
27725});
27726
27727var SmallMetrics = new r.Struct({
27728  height: r.uint8,
27729  width: r.uint8,
27730  bearingX: r.int8,
27731  bearingY: r.int8,
27732  advance: r.uint8
27733});
27734
27735var EBDTComponent = new r.Struct({
27736  glyph: r.uint16,
27737  xOffset: r.int8,
27738  yOffset: r.int8
27739});
27740
27741var ByteAligned = function ByteAligned() {
27742  _classCallCheck(this, ByteAligned);
27743};
27744
27745var BitAligned = function BitAligned() {
27746  _classCallCheck(this, BitAligned);
27747};
27748
27749var glyph = new r.VersionedStruct('version', {
27750  1: {
27751    metrics: SmallMetrics,
27752    data: ByteAligned
27753  },
27754
27755  2: {
27756    metrics: SmallMetrics,
27757    data: BitAligned
27758  },
27759
27760  // format 3 is deprecated
27761  // format 4 is not supported by Microsoft
27762
27763  5: {
27764    data: BitAligned
27765  },
27766
27767  6: {
27768    metrics: BigMetrics,
27769    data: ByteAligned
27770  },
27771
27772  7: {
27773    metrics: BigMetrics,
27774    data: BitAligned
27775  },
27776
27777  8: {
27778    metrics: SmallMetrics,
27779    pad: new r.Reserved(r.uint8),
27780    numComponents: r.uint16,
27781    components: new r.Array(EBDTComponent, 'numComponents')
27782  },
27783
27784  9: {
27785    metrics: BigMetrics,
27786    pad: new r.Reserved(r.uint8),
27787    numComponents: r.uint16,
27788    components: new r.Array(EBDTComponent, 'numComponents')
27789  },
27790
27791  17: {
27792    metrics: SmallMetrics,
27793    dataLen: r.uint32,
27794    data: new r.Buffer('dataLen')
27795  },
27796
27797  18: {
27798    metrics: BigMetrics,
27799    dataLen: r.uint32,
27800    data: new r.Buffer('dataLen')
27801  },
27802
27803  19: {
27804    dataLen: r.uint32,
27805    data: new r.Buffer('dataLen')
27806  }
27807});
27808
27809var SBitLineMetrics = new r.Struct({
27810  ascender: r.int8,
27811  descender: r.int8,
27812  widthMax: r.uint8,
27813  caretSlopeNumerator: r.int8,
27814  caretSlopeDenominator: r.int8,
27815  caretOffset: r.int8,
27816  minOriginSB: r.int8,
27817  minAdvanceSB: r.int8,
27818  maxBeforeBL: r.int8,
27819  minAfterBL: r.int8,
27820  pad: new r.Reserved(r.int8, 2)
27821});
27822
27823var CodeOffsetPair = new r.Struct({
27824  glyphCode: r.uint16,
27825  offset: r.uint16
27826});
27827
27828var IndexSubtable = new r.VersionedStruct(r.uint16, {
27829  header: {
27830    imageFormat: r.uint16,
27831    imageDataOffset: r.uint32
27832  },
27833
27834  1: {
27835    offsetArray: new r.Array(r.uint32, function (t) {
27836      return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1;
27837    })
27838  },
27839
27840  2: {
27841    imageSize: r.uint32,
27842    bigMetrics: BigMetrics
27843  },
27844
27845  3: {
27846    offsetArray: new r.Array(r.uint16, function (t) {
27847      return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1;
27848    })
27849  },
27850
27851  4: {
27852    numGlyphs: r.uint32,
27853    glyphArray: new r.Array(CodeOffsetPair, function (t) {
27854      return t.numGlyphs + 1;
27855    })
27856  },
27857
27858  5: {
27859    imageSize: r.uint32,
27860    bigMetrics: BigMetrics,
27861    numGlyphs: r.uint32,
27862    glyphCodeArray: new r.Array(r.uint16, 'numGlyphs')
27863  }
27864});
27865
27866var IndexSubtableArray = new r.Struct({
27867  firstGlyphIndex: r.uint16,
27868  lastGlyphIndex: r.uint16,
27869  subtable: new r.Pointer(r.uint32, IndexSubtable)
27870});
27871
27872var BitmapSizeTable = new r.Struct({
27873  indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), { type: 'parent' }),
27874  indexTablesSize: r.uint32,
27875  numberOfIndexSubTables: r.uint32,
27876  colorRef: r.uint32,
27877  hori: SBitLineMetrics,
27878  vert: SBitLineMetrics,
27879  startGlyphIndex: r.uint16,
27880  endGlyphIndex: r.uint16,
27881  ppemX: r.uint8,
27882  ppemY: r.uint8,
27883  bitDepth: r.uint8,
27884  flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical'])
27885});
27886
27887var EBLC = new r.Struct({
27888  version: r.uint32, // 0x00020000
27889  numSizes: r.uint32,
27890  sizes: new r.Array(BitmapSizeTable, 'numSizes')
27891});
27892
27893var ImageTable = new r.Struct({
27894  ppem: r.uint16,
27895  resolution: r.uint16,
27896  imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), function (t) {
27897    return t.parent.parent.maxp.numGlyphs + 1;
27898  })
27899});
27900
27901// This is the Apple sbix table, used by the "Apple Color Emoji" font.
27902// It includes several image tables with images for each bitmap glyph
27903// of several different sizes.
27904var sbix = new r.Struct({
27905  version: r.uint16,
27906  flags: new r.Bitfield(r.uint16, ['renderOutlines']),
27907  numImgTables: r.uint32,
27908  imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables')
27909});
27910
27911var LayerRecord = new r.Struct({
27912  gid: r.uint16, // Glyph ID of layer glyph (must be in z-order from bottom to top).
27913  paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must
27914}); // be less than numPaletteEntries in the CPAL table, except for
27915// the special case noted below. Each palette entry is 16 bits.
27916// A palette index of 0xFFFF is a special case indicating that
27917// the text foreground color should be used.
27918
27919var BaseGlyphRecord = new r.Struct({
27920  gid: r.uint16, // Glyph ID of reference glyph. This glyph is for reference only
27921  // and is not rendered for color.
27922  firstLayerIndex: r.uint16, // Index (from beginning of the Layer Records) to the layer record.
27923  // There will be numLayers consecutive entries for this base glyph.
27924  numLayers: r.uint16
27925});
27926
27927var COLR = new r.Struct({
27928  version: r.uint16,
27929  numBaseGlyphRecords: r.uint16,
27930  baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')),
27931  layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), { lazy: true }),
27932  numLayerRecords: r.uint16
27933});
27934
27935var ColorRecord = new r.Struct({
27936  blue: r.uint8,
27937  green: r.uint8,
27938  red: r.uint8,
27939  alpha: r.uint8
27940});
27941
27942var CPAL = new r.VersionedStruct(r.uint16, {
27943  header: {
27944    numPaletteEntries: r.uint16,
27945    numPalettes: r.uint16,
27946    numColorRecords: r.uint16,
27947    colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')),
27948    colorRecordIndices: new r.Array(r.uint16, 'numPalettes')
27949  },
27950  0: {},
27951  1: {
27952    offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')),
27953    offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')),
27954    offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries'))
27955  }
27956});
27957
27958var BaseCoord = new r.VersionedStruct(r.uint16, {
27959  1: { // Design units only
27960    coordinate: r.int16 // X or Y value, in design units
27961  },
27962
27963  2: { // Design units plus contour point
27964    coordinate: r.int16, // X or Y value, in design units
27965    referenceGlyph: r.uint16, // GlyphID of control glyph
27966    baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph
27967  },
27968
27969  3: { // Design units plus Device table
27970    coordinate: r.int16, // X or Y value, in design units
27971    deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value
27972  }
27973});
27974
27975var BaseValues = new r.Struct({
27976  defaultIndex: r.uint16, // Index of default baseline for this script-same index in the BaseTagList
27977  baseCoordCount: r.uint16,
27978  baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCo
27978ordCount')
27979});
27980
27981var FeatMinMaxRecord = new r.Struct({
27982  tag: new r.String(4), // 4-byte feature identification tag-must match FeatureTag in FeatureList
27983  minCoord: new r.Pointer(r.uint16, BaseCoord, { type: 'parent' }), // May be NULL
27984  maxCoord: new r.Pointer(r.uint16, BaseCoord, { type: 'parent' }) // May be NULL
27985});
27986
27987var MinMax = new r.Struct({
27988  minCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL
27989  maxCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL
27990  featMinMaxCount: r.uint16, // May be 0
27991  featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order
27992});
27993
27994var BaseLangSysRecord = new r.Struct({
27995  tag: new r.String(4), // 4-byte language system identification tag
27996  minMax: new r.Pointer(r.uint16, MinMax, { type: 'parent' })
27997});
27998
27999var BaseScript = new r.Struct({
28000  baseValues: new r.Pointer(r.uint16, BaseValues), // May be NULL
28001  defaultMinMax: new r.Pointer(r.uint16, MinMax), // May be NULL
28002  baseLangSysCount: r.uint16, // May be 0
28003  baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag
28004});
28005
28006var BaseScriptRecord = new r.Struct({
28007  tag: new r.String(4), // 4-byte script identification tag
28008  script: new r.Pointer(r.uint16, BaseScript, { type: 'parent' })
28009});
28010
28011var BaseScriptList = new r.Array(BaseScriptRecord, r.uint16);
28012
28013// Array of 4-byte baseline identification tags-must be in alphabetical order
28014var BaseTagList = new r.Array(new r.String(4), r.uint16);
28015
28016var Axis = new r.Struct({
28017  baseTagList: new r.Pointer(r.uint16, BaseTagList), // May be NULL
28018  baseScriptList: new r.Pointer(r.uint16, BaseScriptList)
28019});
28020
28021var BASE = new r.VersionedStruct(r.uint32, {
28022  header: {
28023    horizAxis: new r.Pointer(r.uint16, Axis), // May be NULL
28024    vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL
28025  },
28026
28027  0x00010000: {},
28028  0x00010001: {
28029    itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)
28030  }
28031});
28032
28033var AttachPoint = new r.Array(r.uint16, r.uint16);
28034var AttachList = new r.Struct({
28035  coverage: new r.Pointer(r.uint16, Coverage),
28036  glyphCount: r.uint16,
28037  attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')
28038});
28039
28040var CaretValue = new r.VersionedStruct(r.uint16, {
28041  1: { // Design units only
28042    coordinate: r.int16
28043  },
28044
28045  2: { // Contour point
28046    caretValuePoint: r.uint16
28047  },
28048
28049  3: { // Design units plus Device table
28050    coordinate: r.int16,
28051    deviceTable: new r.Pointer(r.uint16, Device)
28052  }
28053});
28054
28055var LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);
28056
28057var LigCaretList = new r.Struct({
28058  coverage: new r.Pointer(r.uint16, Coverage),
28059  ligGlyphCount: r.uint16,
28060  ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')
28061});
28062
28063var MarkGlyphSetsDef = new r.Struct({
28064  markSetTableFormat: r.uint16,
28065  markSetCount: r.uint16,
28066  coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')
28067});
28068
28069var GDEF = new r.VersionedStruct(r.uint32, {
28070  header: {
28071    glyphClassDef: new r.Pointer(r.uint16, ClassDef),
28072    attachList: new r.Pointer(r.uint16, AttachList),
28073    ligCaretList: new r.Pointer(r.uint16, LigCaretList),
28074    markAttachClassDef: new r.Pointer(r.uint16, ClassDef)
28075  },
28076
28077  0x00010000: {},
28078  0x00010002: {
28079    markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef)
28080  },
28081  0x00010003: {
28082    markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef),
28083    itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)
28084  }
28085});
28086
28087var ValueFormat = new r.Bitfield(r.uint16, ['xPlacement', 'yPlacement', 'xAdvance', 'yAdvance', 'xPlaDevice', 'yPlaDevice', 'xAdvDevice', 'yAdvDevice']);
28088
28089var types = {
28090  xPlacement: r.int16,
28091  yPlacement: r.int16,
28092  xAdvance: r.int16,
28093  yAdvance: r.int16,
28094  xPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: 'rel' }),
28095  yPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: 'rel' }),
28096  xAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: 'rel' }),
28097  yAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: 'rel' })
28098};
28099
28100var ValueRecord = function () {
28101  function ValueRecord() {
28102    var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'valueFormat';
28103
28104    _classCallCheck(this, ValueRecord);
28105
28106    this.key = key;
28107  }
28108
28109  ValueRecord.prototype.buildStruct = function buildStruct(parent) {
28110    var struct = parent;
28111    while (!struct[this.key] && struct.parent) {
28112      struct = struct.parent;
28113    }
28114
28115    if (!struct[this.key]) return;
28116
28117    var fields = {};
28118    fields.rel = function () {
28119      return struct._startOffset;
28120    };
28121
28122    var format = struct[this.key];
28123    for (var key in format) {
28124      if (format[key]) {
28125        fields[key] = types[key];
28126      }
28127    }
28128
28129    return new r.Struct(fields);
28130  };
28131
28132  ValueRecord.prototype.size = function size(val, ctx) {
28133    return this.buildStruct(ctx).size(val, ctx);
28134  };
28135
28136  ValueRecord.prototype.decode = function decode(stream, parent) {
28137    var res = this.buildStruct(parent).decode(stream, parent);
28138    delete res.rel;
28139    return res;
28140  };
28141
28142  return ValueRecord;
28143}();
28144
28145var PairValueRecord = new r.Struct({
28146  secondGlyph: r.uint16,
28147  value1: new ValueRecord('valueFormat1'),
28148  value2: new ValueRecord('valueFormat2')
28149});
28150
28151var PairSet = new r.Array(PairValueRecord, r.uint16);
28152
28153var Class2Record = new r.Struct({
28154  value1: new ValueRecord('valueFormat1'),
28155  value2: new ValueRecord('valueFormat2')
28156});
28157
28158var Anchor = new r.VersionedStruct(r.uint16, {
28159  1: { // Design units only
28160    xCoordinate: r.int16,
28161    yCoordinate: r.int16
28162  },
28163
28164  2: { // Design units plus contour point
28165    xCoordinate: r.int16,
28166    yCoordinate: r.int16,
28167    anchorPoint: r.uint16
28168  },
28169
28170  3: { // Design units plus Device tables
28171    xCoordinate: r.int16,
28172    yCoordinate: r.int16,
28173    xDeviceTable: new r.Pointer(r.uint16, Device),
28174    yDeviceTable: new r.Pointer(r.uint16, Device)
28175  }
28176});
28177
28178var EntryExitRecord = new r.Struct({
28179  entryAnchor: new r.Pointer(r.uint16, Anchor, { type: 'parent' }),
28180  exitAnchor: new r.Pointer(r.uint16, Anchor, { type: 'parent' })
28181});
28182
28183var MarkRecord = new r.Struct({
28184  class: r.uint16,
28185  markAnchor: new r.Pointer(r.uint16, Anchor, { type: 'parent' })
28186});
28187
28188var MarkArray = new r.Array(MarkRecord, r.uint16);
28189
28190var BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) {
28191  return t.parent.classCount;
28192});
28193var BaseArray = new r.Array(BaseRecord, r.uint16);
28194
28195var ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) {
28196  return t.parent.parent.classCount;
28197});
28198var LigatureAttach = new r.Array(ComponentRecord, r.uint16);
28199var LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16);
28200
28201var GPOSLookup = new r.VersionedStruct('lookupType', {
28202  1: new r.VersionedStruct(r.uint16, { // Single Adjustment
28203    1: { // Single positioning value
28204      coverage: new r.Pointer(r.uint16, Coverage),
28205      valueFormat: ValueFormat,
28206      value: new ValueRecord()
28207    },
28208    2: {
28209      coverage: new r.Pointer(r.uint16, Coverage),
28210      valueFormat: ValueFormat,
28211      valueCount: r.uint16,
28212      values: new r.LazyArray(new ValueRecord(), 'valueCount')
28213    }
28214  }),
28215
28216  2: new r.VersionedStruct(r.uint16, { // Pair Adjustment Positioning
28217    1: { // Adjustments for glyph pairs
28218      coverage: new r.Pointer(r.uint16, Coverage),
28219      valueFormat1: ValueFormat,
28220      valueFormat2: ValueFormat,
28221      pairSetCount: r.uint16,
28222      pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')
28223    },
28224
28225    2: { // Class pair adjustment
28226      coverage: new r.Pointer(r.uint16, Coverage),
28227      valueFormat1: ValueFormat,
28228      valueFormat2: ValueFormat,
28229      classDef1: new r.Pointer(r.uint16, ClassDef),
28230      classDef2: new r.Pointer(r.uint16, ClassDef),
28231      class1Count: r.uint16,
28232      class2Count: r.uint16,
28233      classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count')
28234    }
28235  }),
28236
28237  3: { // Cursive Attachment Positioning
28238    format: r.uint16,
28239    coverage: new r.Pointer(r.uint16, Coverage),
28240    entryExitCount: r.uint16,
28241    entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount')
28242  },
28243
28244  4: { // MarkToBase Attachment Positioning
28245    format: r.uint16,
28246    markCoverage: new r.Pointer(r.uint16, Coverage),
28247    baseCoverage: new r.Pointer(r.uint16, Coverage),
28248    classCount: r.uint16,
28249    markArray: new r.Pointer(r.uint16, MarkArray),
28250    baseArray: new r.Pointer(r.uint16, BaseArray)
28251  },
28252
28253  5: { // MarkToLigature Attachment Positioning
28254    format: r.uint16,
28255    markCoverage: new r.Pointer(r.uint16, Coverage),
28256    ligatureCoverage: new r.Pointer(r.uint16, Coverage),
28257    classCount: r.uint16,
28258    markArray: new r.Pointer(r.uint16, MarkArray),
28259    ligatureArray: new r.Pointer(r.uint16, LigatureArray)
28260  },
28261
28262  6: { // MarkToMark Attachment Positioning
28263    format: r.uint16,
28264    mark1Coverage: new r.Pointer(r.uint16, Coverage),
28265    mark2Coverage: new r.Pointer(r.uint16, Coverage),
28266    classCount: r.uint16,
28267    mark1Array: new r.Pointer(r.uint16, MarkArray),
28268    mark2Array: new r.Pointer(r.uint16, BaseArray)
28269  },
28270
28271  7: Context, // Contextual positioning
28272  8: ChainingContext, // Chaining contextual positioning
28273
28274  9: { // Extension Positioning
28275    posFormat: r.uint16,
28276    lookupType: r.uint16, // cannot also be 9
28277    extension: new r.Pointer(r.uint32, GPOSLookup)
28278  }
28279});
28280
28281// Fix circular reference
28282GPOSLookup.versions[9].extension.type = GPOSLookup;
28283
28284var GPOS = new r.VersionedStruct(r.uint32, {
28285  header: {
28286    scriptList: new r.Pointer(r.uint16, ScriptList),
28287    featureList: new r.Pointer(r.uint16, FeatureList),
28288    lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup))
28289  },
28290
28291  0x00010000: {},
28292  0x00010001: {
28293    featureVariations: new r.Pointer(r.uint32, FeatureVariations)
28294  }
28295});
28296
28297var Sequence = new r.Array(r.uint16, r.uint16);
28298var AlternateSet = Sequence;
28299
28300var Ligature = new r.Struct({
28301  glyph: r.uint16,
28302  compCount: r.uint16,
28303  components: new r.Array(r.uint16, function (t) {
28304    return t.compCount - 1;
28305  })
28306});
28307
28308var LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);
28309
28310var GSUBLookup = new r.VersionedStruct('lookupType', {
28311  1: new r.VersionedStruct(r.uint16, { // Single Substitution
28312    1: {
28313      coverage: new r.Pointer(r.uint16, Coverage),
28314      deltaGlyphID: r.int16
28315    },
28316    2: {
28317      coverage: new r.Pointer(r.uint16, Coverage),
28318      glyphCount: r.uint16,
28319      substitute: new r.LazyArray(r.uint16, 'glyphCount')
28320    }
28321  }),
28322
28323  2: { // Multiple Substitution
28324    substFormat: r.uint16,
28325    coverage: new r.Pointer(r.uint16, Coverage),
28326    count: r.uint16,
28327    sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')
28328  },
28329
28330  3: { // Alternate Substitution
28331    substFormat: r.uint16,
28332    coverage: new r.Pointer(r.uint16, Coverage),
28333    count: r.uint16,
28334    alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')
28335  },
28336
28337  4: { // Ligature Substitution
28338    substFormat: r.uint16,
28339    coverage: new r.Pointer(r.uint16, Coverage),
28340    count: r.uint16,
28341    ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')
28342  },
28343
28344  5: Context, // Contextual Substitution
28345  6: ChainingContext, // Chaining Contextual Substitution
28346
28347  7: { // Extension Substitution
28348    substFormat: r.uint16,
28349    lookupType: r.uint16, // cannot also be 7
28350    extension: new r.Pointer(r.uint32, GSUBLookup)
28351  },
28352
28353  8: { // Reverse Chaining Contextual Single Substitution
28354    substFormat: r.uint16,
28355    coverage: new r.Pointer(r.uint16, Coverage),
28356    backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),
28357    lookaheadGlyphCount: r.uint16,
28358    lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),
28359    glyphCount: r.uint16,
28360    substitutes: new r.Array(r.uint16, 'glyphCount')
28361  }
28362});
28363
28364// Fix circular reference
28365GSUBLookup.versions[7].extension.type = GSUBLookup;
28366
28367var GSUB = new r.VersionedStruct(r.uint32, {
28368  header: {
28369    scriptList: new r.Pointer(r.uint16, ScriptList),
28370    featureList: new r.Pointer(r.uint16, FeatureList),
28371    lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup))
28372  },
28373
28374  0x00010000: {},
28375  0x00010001: {
28376    featureVariations: new r.Pointer(r.uint32, FeatureVariations)
28377  }
28378});
28379
28380var JstfGSUBModList = new r.Array(r.uint16, r.uint16);
28381
28382var JstfPriority = new r.Struct({
28383  shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),
28384  shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),
28385  shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),
28386  shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),
28387  shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)),
28388  extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),
28389  extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),
28390  extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),
28391  extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),
28392  extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup))
28393});
28394
28395var JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16);
28396
28397var JstfLangSysRecord = new r.Struct({
28398  tag: new r.String(4),
28399  jstfLangSys: new r.Pointer(r.uint16, JstfLangSys)
28400});
28401
28402var JstfScript = new r.Struct({
28403  extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)), // array of glyphs to extend line length
28404  defaultLangSys: new r.Pointer(r.uint16, JstfLangSys),
28405  langSysCount: r.uint16,
28406  langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount')
28407});
28408
28409var JstfScriptRecord = new r.Struct({
28410  tag: new r.String(4),
28411  script: new r.Pointer(r.uint16, JstfScript, { type: 'parent' })
28412});
28413
28414var JSTF = new r.Struct({
28415  version: r.uint32, // should be 0x00010000
28416  scriptCount: r.uint16,
28417  scriptList: new r.Array(JstfScriptRecord, 'scriptCount')
28418});
28419
28420// TODO: add this to restructure
28421
28422var VariableSizeNumber = function () {
28423  function VariableSizeNumber(size) {
28424    _classCallCheck(this, VariableSizeNumber);
28425
28426    this._size = size;
28427  }
28428
28429  VariableSizeNumber.prototype.decode = function decode(stream, parent) {
28430    switch (this.size(0, parent)) {
28431      case 1:
28432        return stream.readUInt8();
28433      case 2:
28434        return stream.readUInt16BE();
28435      case 3:
28436        return stream.readUInt24BE();
28437      case 4:
28438        return stream.readUInt32BE();
28439    }
28440  };
28441
28442  VariableSizeNumber.prototype.size = function size(val, parent) {
28443    return restructure_src_utils.resolveLength(this._size, null, parent);
28444  };
28445
28446  return VariableSizeNumber;
28447}();
28448
28449var MapDataEntry = new r.Struct({
28450  entry: new VariableSizeNumber(function (t) {
28451    return ((t.parent.entryFormat & 0x0030) >> 4) + 1;
28452  }),
28453  outerIndex: function outerIndex(t) {
28454    return t.entry >> (t.parent.entryFormat & 0x000F) + 1;
28455  },
28456  innerIndex: function innerIndex(t) {
28457    return t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1;
28458  }
28459});
28460
28461var DeltaSetIndexMap = new r.Struct({
28462  entryFormat: r.uint16,
28463  mapCount: r.uint16,
28464  mapData: new r.Array(MapDataEntry, 'mapCount')
28465});
28466
28467var HVAR = new r.Struct({
28468  majorVersion: r.uint16,
28469  minorVersion: r.uint16,
28470  itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),
vendor: 6,857 bytes, lines 28471-28685
28471  advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),
28472  LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),
28473  RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)
28474});
28475
28476var Signature = new r.Struct({
28477  format: r.uint32,
28478  length: r.uint32,
28479  offset: r.uint32
28480});
28481
28482var SignatureBlock = new r.Struct({
28483  reserved: new r.Reserved(r.uint16, 2),
28484  cbSignature: r.uint32, // Length (in bytes) of the PKCS#7 packet in pbSignature
28485  signature: new r.Buffer('cbSignature')
28486});
28487
28488var DSIG = new r.Struct({
28489  ulVersion: r.uint32, // Version number of the DSIG table (0x00000001)
28490  usNumSigs: r.uint16, // Number of signatures in the table
28491  usFlag: r.uint16, // Permission flags
28492  signatures: new r.Array(Signature, 'usNumSigs'),
28493  signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs')
28494});
28495
28496var GaspRange = new r.Struct({
28497  rangeMaxPPEM: r.uint16, // Upper limit of range, in ppem
28498  rangeGaspBehavior: new r.Bitfield(r.uint16, [// Flags describing desired rasterizer behavior
28499  'grayscale', 'gridfit', 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType
28500  ])
28501});
28502
28503var gasp = new r.Struct({
28504  version: r.uint16, // set to 0
28505  numRanges: r.uint16,
28506  gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem
28507});
28508
28509var DeviceRecord = new r.Struct({
28510  pixelSize: r.uint8,
28511  maximumWidth: r.uint8,
28512  widths: new r.Array(r.uint8, function (t) {
28513    return t.parent.parent.maxp.numGlyphs;
28514  })
28515});
28516
28517// The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes
28518var hdmx = new r.Struct({
28519  version: r.uint16,
28520  numRecords: r.int16,
28521  sizeDeviceRecord: r.int32,
28522  records: new r.Array(DeviceRecord, 'numRecords')
28523});
28524
28525var KernPair = new r.Struct({
28526  left: r.uint16,
28527  right: r.uint16,
28528  value: r.int16
28529});
28530
28531var ClassTable = new r.Struct({
28532  firstGlyph: r.uint16,
28533  nGlyphs: r.uint16,
28534  offsets: new r.Array(r.uint16, 'nGlyphs'),
28535  max: function max(t) {
28536    return t.offsets.length && Math.max.apply(Math, t.offsets);
28537  }
28538});
28539
28540var Kern2Array = new r.Struct({
28541  off: function off(t) {
28542    return t._startOffset - t.parent.parent._startOffset;
28543  },
28544  len: function len(t) {
28545    return ((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2);
28546  },
28547  values: new r.LazyArray(r.int16, 'len')
28548});
28549
28550var KernSubtable = new r.VersionedStruct('format', {
28551  0: {
28552    nPairs: r.uint16,
28553    searchRange: r.uint16,
28554    entrySelector: r.uint16,
28555    rangeShift: r.uint16,
28556    pairs: new r.Array(KernPair, 'nPairs')
28557  },
28558
28559  2: {
28560    rowWidth: r.uint16,
28561    leftTable: new r.Pointer(r.uint16, ClassTable, { type: 'parent' }),
28562    rightTable: new r.Pointer(r.uint16, ClassTable, { type: 'parent' }),
28563    array: new r.Pointer(r.uint16, Kern2Array, { type: 'parent' })
28564  },
28565
28566  3: {
28567    glyphCount: r.uint16,
28568    kernValueCount: r.uint8,
28569    leftClassCount: r.uint8,
28570    rightClassCount: r.uint8,
28571    flags: r.uint8,
28572    kernValue: new r.Array(r.int16, 'kernValueCount'),
28573    leftClass: new r.Array(r.uint8, 'glyphCount'),
28574    rightClass: new r.Array(r.uint8, 'glyphCount'),
28575    kernIndex: new r.Array(r.uint8, function (t) {
28576      return t.leftClassCount * t.rightClassCount;
28577    })
28578  }
28579});
28580
28581var KernTable = new r.VersionedStruct('version', {
28582  0: { // Microsoft uses this format
28583    subVersion: r.uint16, // Microsoft has an extra sub-table version number
28584    length: r.uint16, // Length of the subtable, in bytes
28585    format: r.uint8, // Format of subtable
28586    coverage: new r.Bitfield(r.uint8, ['horizontal', // 1 if table has horizontal data, 0 if vertical
28587    'minimum', // If set to 1, the table has minimum values. If set to 0, the table has kerning values.
28588    'crossStream', // If set to 1, kerning is perpendicular to the flow of the text
28589    'override' // If set to 1 the value in this table replaces the accumulated value
28590    ]),
28591    subtable: KernSubtable,
28592    padding: new r.Reserved(r.uint8, function (t) {
28593      return t.length - t._currentOffset;
28594    })
28595  },
28596  1: { // Apple uses this format
28597    length: r.uint32,
28598    coverage: new r.Bitfield(r.uint8, [null, null, null, null, null, 'variation', // Set if table has variation kerning values
28599    'crossStream', // Set if table has cross-stream kerning values
28600    'vertical' // Set if table has vertical kerning values
28601    ]),
28602    format: r.uint8,
28603    tupleIndex: r.uint16,
28604    subtable: KernSubtable,
28605    padding: new r.Reserved(r.uint8, function (t) {
28606      return t.length - t._currentOffset;
28607    })
28608  }
28609});
28610
28611var kern = new r.VersionedStruct(r.uint16, {
28612  0: { // Microsoft Version
28613    nTables: r.uint16,
28614    tables: new r.Array(KernTable, 'nTables')
28615  },
28616
28617  1: { // Apple Version
28618    reserved: new r.Reserved(r.uint16), // the other half of the version number
28619    nTables: r.uint32,
28620    tables: new r.Array(KernTable, 'nTables')
28621  }
28622});
28623
28624// Linear Threshold table
28625// Records the ppem for each glyph at which the scaling becomes linear again,
28626// despite instructions effecting the advance width
28627var LTSH = new r.Struct({
28628  version: r.uint16,
28629  numGlyphs: r.uint16,
28630  yPels: new r.Array(r.uint8, 'numGlyphs')
28631});
28632
28633// PCL 5 Table
28634// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines
28635var PCLT = new r.Struct({
28636  version: r.uint16,
28637  fontNumber: r.uint32,
28638  pitch: r.uint16,
28639  xHeight: r.uint16,
28640  style: r.uint16,
28641  typeFamily: r.uint16,
28642  capHeight: r.uint16,
28643  symbolSet: r.uint16,
28644  typeface: new r.String(16),
28645  characterComplement: new r.String(8),
28646  fileName: new r.String(6),
28647  strokeWeight: new r.String(1),
28648  widthType: new r.String(1),
28649  serifStyle: r.uint8,
28650  reserved: new r.Reserved(r.uint8)
28651});
28652
28653// VDMX tables contain ascender/descender overrides for certain (usually small)
28654// sizes. This is needed in order to match font metrics on Windows.
28655
28656var Ratio = new r.Struct({
28657  bCharSet: r.uint8, // Character set
28658  xRatio: r.uint8, // Value to use for x-Ratio
28659  yStartRatio: r.uint8, // Starting y-Ratio value
28660  yEndRatio: r.uint8 // Ending y-Ratio value
28661});
28662
28663var vTable = new r.Struct({
28664  yPelHeight: r.uint16, // yPelHeight to which values apply
28665  yMax: r.int16, // Maximum value (in pels) for this yPelHeight
28666  yMin: r.int16 // Minimum value (in pels) for this yPelHeight
28667});
28668
28669var VdmxGroup = new r.Struct({
28670  recs: r.uint16, // Number of height records in this group
28671  startsz: r.uint8, // Starting yPelHeight
28672  endsz: r.uint8, // Ending yPelHeight
28673  entries: new r.Array(vTable, 'recs') // The VDMX records
28674});
28675
28676var VDMX = new r.Struct({
28677  version: r.uint16, // Version number (0 or 1)
28678  numRecs: r.uint16, // Number of VDMX groups present
28679  numRatios: r.uint16, // Number of aspect ratio groupings
28680  ratioRanges: new r.Array(Ratio, 'numRatios'), // Ratio ranges
28681  offsets: new r.Array(r.uint16, 'numRatios'), // Offset to the VDMX group for this ratio range
28682  groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings
28683});
28684
28685// Vertical Header Table
28686var vhea = new r.Struct({
28687  version: r.uint16, // Version number of the Vertical Header Table
28688  ascent: r.int16, // The vertical typographic ascender for this font
28689  descent: r.int16, // The vertical typographic descender for this font
28690  lineGap: r.int16, // The vertical typographic line gap for this font
28691  advanceHeightMax: r.int16, // The maximum advance height measurement found in the font
28692  minTopSideBearing: r.int16, // The minimum top side bearing measurement found in the font
28693  minBottomSideBearing: r.int16, // The minimum bottom side bearing measurement found in the font
28694  yMaxExtent: r.int16,
28695  caretSlopeRise: r.int16, // Caret slope (rise/run)
28696  caretSlopeRun: r.int16,
28697  caretOffset: r.int16, // Set value equal to 0 for nonslanted fonts
28698  reserved: new r.Reserved(r.int16, 4),
28699  metricDataFormat: r.int16, // Set to 0
28700  numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table
28701});
28702
28703var VmtxEntry = new r.Struct({
28704  advance: r.uint16, // The advance height of the glyph
28705  bearing: r.int16 // The top sidebearing of the glyph
28706});
28707
28708// Vertical Metrics Table
28709var vmtx = new r.Struct({
28710  metrics: new r.LazyArray(VmtxEntry, function (t) {
28711    return t.parent.vhea.numberOfMetrics;
28712  }),
28713  bearings: new r.LazyArray(r.int16, function (t) {
28714    return t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics;
28715  })
28716});
28717
28718var shortFrac = new r.Fixed(16, 'BE', 14);
28719
28720var Correspondence = new r.Struct({
28721  fromCoord: shortFrac,
28722  toCoord: shortFrac
28723});
28724
28725var Segment = new r.Struct({
28726  pairCount: r.uint16,
28727  correspondence: new r.Array(Correspondence, 'pairCount')
28728});
28729
28730var avar = new r.Struct({
28731  version: r.fixed32,
28732  axisCount: r.uint32,
28733  segment: new r.Array(Segment, 'axisCount')
28734});
28735
28736var UnboundedArrayAccessor = function () {
28737  function UnboundedArrayAccessor(type, stream, parent) {
28738    _classCallCheck(this, UnboundedArrayAccessor);
28739
28740    this.type = type;
28741    this.stream = stream;
28742    this.parent = parent;
28743    this.base = this.stream.pos;
28744    this._items = [];
28745  }
28746
28747  UnboundedArrayAccessor.prototype.getItem = function getItem(index) {
28748    if (this._items[index] == null) {
28749      var pos = this.stream.pos;
28750      this.stream.pos = this.base + this.type.size(null, this.parent) * index;
28751      this._items[index] = this.type.decode(this.stream, this.parent);
28752      this.stream.pos = pos;
28753    }
28754
28755    return this._items[index];
28756  };
28757
28758  UnboundedArrayAccessor.prototype.inspect = function inspect() {
28759    return '[UnboundedArray ' + this.type.constructor.name + ']';
28760  };
28761
28762  return UnboundedArrayAccessor;
28763}();
28764
28765var UnboundedArray = function (_r$Array) {
28766  _inherits(UnboundedArray, _r$Array);
28767
28768  function UnboundedArray(type) {
28769    _classCallCheck(this, UnboundedArray);
28770
28771    return _possibleConstructorReturn(this, _r$Array.call(this, type, 0));
28772  }
28773
28774  UnboundedArray.prototype.decode = function decode(stream, parent) {
28775    return new UnboundedArrayAccessor(this.type, stream, parent);
28776  };
28777
28778  return UnboundedArray;
28779}(r.Array);
28780
28781var LookupTable = function LookupTable() {
28782  var ValueType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : r.uint16;
28783
28784  // Helper class that makes internal structures invisible to pointers
28785  var Shadow = function () {
28786    function Shadow(type) {
28787      _classCallCheck(this, Shadow);
28788
28789      this.type = type;
28790    }
28791
28792    Shadow.prototype.decode = function decode(stream, ctx) {
28793      ctx = ctx.parent.parent;
28794      return this.type.decode(stream, ctx);
28795    };
28796
28797    Shadow.prototype.size = function size(val, ctx) {
28798      ctx = ctx.parent.parent;
28799      return this.type.size(val, ctx);
28800    };
28801
28802    Shadow.prototype.encode = function encode(stream, val, ctx) {
28803      ctx = ctx.parent.parent;
28804      return this.type.encode(stream, val, ctx);
28805    };
28806
28807    return Shadow;
28808  }();
28809
28810  ValueType = new Shadow(ValueType);
28811
28812  var BinarySearchHeader = new r.Struct({
28813    unitSize: r.uint16,
28814    nUnits: r.uint16,
28815    searchRange: r.uint16,
28816    entrySelector: r.uint16,
28817    rangeShift: r.uint16
28818  });
28819
28820  var LookupSegmentSingle = new r.Struct({
28821    lastGlyph: r.uint16,
28822    firstGlyph: r.uint16,
28823    value: ValueType
28824  });
28825
28826  var LookupSegmentArray = new r.Struct({
28827    lastGlyph: r.uint16,
28828    firstGlyph: r.uint16,
28829    values: new r.Pointer(r.uint16, new r.Array(ValueType, function (t) {
28830      return t.lastGlyph - t.firstGlyph + 1;
28831    }), { type: 'parent' })
28832  });
28833
28834  var LookupSingle = new r.Struct({
28835    glyph: r.uint16,
28836    value: ValueType
28837  });
28838
28839  return new r.VersionedStruct(r.uint16, {
28840    0: {
28841      values: new UnboundedArray(ValueType) // length == number of glyphs maybe?
28842    },
28843    2: {
28844      binarySearchHeader: BinarySearchHeader,
28845      segments: new r.Array(LookupSegmentSingle, function (t) {
28846        return t.binarySearchHeader.nUnits;
28847      })
28848    },
28849    4: {
28850      binarySearchHeader: BinarySearchHeader,
28851      segments: new r.Array(LookupSegmentArray, function (t) {
28852        return t.binarySearchHeader.nUnits;
28853      })
28854    },
28855    6: {
28856      binarySearchHeader: BinarySearchHeader,
28857      segments: new r.Array(LookupSingle, function (t) {
28858        return t.binarySearchHeader.nUnits;
28859      })
28860    },
28861    8: {
28862      firstGlyph: r.uint16,
28863      count: r.uint16,
28864      values: new r.Array(ValueType, 'count')
28865    }
28866  });
28867};
28868
28869function StateTable() {
28870  var entryData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
28871  var lookupType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : r.uint16;
28872
28873  var entry = _Object$assign({
28874    newState: r.uint16,
28875    flags: r.uint16
28876  }, entryData);
28877
28878  var Entry = new r.Struct(entry);
28879  var StateArray = new UnboundedArray(new r.Array(r.uint16, function (t) {
28880    return t.nClasses;
28881  }));
28882
28883  var StateHeader = new r.Struct({
28884    nClasses: r.uint32,
28885    classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)),
28886    stateArray: new r.Pointer(r.uint32, StateArray),
28887    entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry))
28888  });
28889
28890  return StateHeader;
28891}
28892
28893// This is the old version of the StateTable structure
28894function StateTable1() {
28895  var entryData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
28896  var lookupType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : r.uint16;
28897
28898  var ClassLookupTable = new r.Struct({
28899    version: function version() {
28900      return 8;
28901    },
28902    // simulate LookupTable
28903    firstGlyph: r.uint16,
28904    values: new r.Array(r.uint8, r.uint16)
28905  });
28906
28907  var entry = _Object$assign({
28908    newStateOffset: r.uint16,
28909    // convert offset to stateArray index
28910    newState: function newState(t) {
28911      return (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses;
28912    },
28913    flags: r.uint16
28914  }, entryData);
28915
28916  var Entry = new r.Struct(entry);
28917  var StateArray = new UnboundedArray(new r.Array(r.uint8, function (t) {
28918    return t.nClasses;
28919  }));
28920
28921  var StateHeader1 = new r.Struct({
28922    nClasses: r.uint16,
28923    classTable: new r.Pointer(r.uint16, ClassLookupTable),
28924    stateArray: new r.Pointer(r.uint16, StateArray),
28925    entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry))
28926  });
28927
28928  return StateHeader1;
28929}
28930
28931var BslnSubtable = new r.VersionedStruct('format', {
28932  0: { // Distance-based, no mapping
28933    deltas: new r.Array(r.int16, 32)
28934  },
28935
28936  1: { // Distance-based, with mapping
28937    deltas: new r.Array(r.int16, 32),
28938    mappingData: new LookupTable(r.uint16)
28939  },
28940
28941  2: { // Control point-based, no mapping
28942    standardGlyph: r.uint16,
28943    controlPoints: new r.Array(r.uint16, 32)
28944  },
28945
28946  3: { // Control point-based, with mapping
28947    standardGlyph: r.uint16,
28948    controlPoints: new r.Array(r.uint16, 32),
28949    mappingData: new LookupTable(r.uint16)
28950  }
28951});
28952
28953var bsln = new r.Struct({
28954  version: r.fixed32,
28955  format: r.uint16,
28956  defaultBaseline: r.uint16,
28957  subtable: BslnSubtable
28958});
28959
28960var Setting = new r.Struct({
28961  setting: r.uint16,
28962  nameIndex: r.int16,
28963  name: function name(t) {
28964    return t.parent.parent.parent.name.records.fontFeatures[t.nameIndex];
28965  }
28966});
28967
28968var FeatureName = new r.Struct({
28969  feature: r.uint16,
28970  nSettings: r.uint16,
28971  settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), { type: 'parent' }),
28972  featureFlags: new r.Bitfield(r.uint8, [null, null, null, null, null, null, 'hasDefault', 'exclusive']),
28973  defaultSetting: r.uint8,
28974  nameIndex: r.int16,
28975  name: function name(t) {
28976    return t.parent.parent.name.records.fontFeatures[t.nameIndex];
28977  }
28978});
28979
28980var feat = new r.Struct({
28981  version: r.fixed32,
28982  featureNameCount: r.uint16,
28983  reserved1: new r.Reserved(r.uint16),
28984  reserved2: new r.Reserved(r.uint32),
28985  featureNames: new r.Array(FeatureName, 'featureNameCount')
28986});
28987
28988var Axis$1 = new r.Struct({
28989  axisTag: new r.String(4),
28990  minValue: r.fixed32,
28991  defaultValue: r.fixed32,
28992  maxValue: r.fixed32,
28993  flags: r.uint16,
28994  nameID: r.uint16,
28995  name: function name(t) {
28996    return t.parent.parent.name.records.fontFeatures[t.nameID];
28997  }
28998});
28999
29000var Instance = new r.Struct({
29001  nameID: r.uint16,
29002  name: function name(t) {
29003    return t.parent.parent.name.records.fontFeatures[t.nameID];
29004  },
29005  flags: r.uint16,
29006  coord: new r.Array(r.fixed32, function (t) {
29007    return t.parent.axisCount;
29008  }),
29009  postscriptNameID: new r.Optional(r.uint16, function (t) {
29010    return t.parent.instanceSize - t._currentOffset > 0;
29011  })
29012});
29013
29014var fvar = new r.Struct({
29015  version: r.fixed32,
29016  offsetToData: r.uint16,
29017  countSizePairs: r.uint16,
29018  axisCount: r.uint16,
29019  axisSize: r.uint16,
29020  instanceCount: r.uint16,
29021  instanceSize: r.uint16,
29022  axis: new r.Array(Axis$1, 'axisCount'),
29023  instance: new r.Array(Instance, 'instanceCount')
29024});
29025
29026var shortFrac$1 = new r.Fixed(16, 'BE', 14);
29027
29028var Offset = function () {
29029  function Offset() {
29030    _classCallCheck(this, Offset);
29031  }
29032
29033  Offset.decode = function decode(stream, parent) {
29034    // In short format, offsets are multiplied by 2.
29035    // This doesn't seem to be documented by Apple, but it
29036    // is implemented this way in Freetype.
29037    return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2;
29038  };
29039
29040  return Offset;
29041}();
29042
29043var gvar = new r.Struct({
29044  version: r.uint16,
29045  reserved: new r.Reserved(r.uint16),
29046  axisCount: r.uint16,
29047  globalCoordCount: r.uint16,
29048  globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac$1, 'axisCount'), 'globalCoordCount')),
29049  glyphCount: r.uint16,
29050  flags: r.uint16,
29051  offsetToData: r.uint32,
29052  offsets: new r.Array(new r.Pointer(Offset, 'void', { relativeTo: 'offsetToData', allowNull: false }), function (t) {
29053    return t.glyphCount + 1;
29054  })
29055});
29056
29057var ClassTable$1 = new r.Struct({
29058  length: r.uint16,
29059  coverage: r.uint16,
29060  subFeatureFlags: r.uint32,
29061  stateTable: new StateTable1()
29062});
29063
29064var WidthDeltaRecord = new r.Struct({
29065  justClass: r.uint32,
29066  beforeGrowLimit: r.fixed32,
29067  beforeShrinkLimit: r.fixed32,
29068  afterGrowLimit: r.fixed32,
29069  afterShrinkLimit: r.fixed32,
29070  growFlags: r.uint16,
29071  shrinkFlags: r.uint16
29072});
29073
29074var WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);
29075
29076var ActionData = new r.VersionedStruct('actionType', {
29077  0: { // Decomposition action
29078    lowerLimit: r.fixed32,
29079    upperLimit: r.fixed32,
29080    order: r.uint16,
29081    glyphs: new r.Array(r.uint16, r.uint16)
29082  },
29083
29084  1: { // Unconditional add glyph action
29085    addGlyph: r.uint16
29086  },
29087
29088  2: { // Conditional add glyph action
29089    substThreshold: r.fixed32,
29090    addGlyph: r.uint16,
29091    substGlyph: r.uint16
29092  },
29093
29094  3: {}, // Stretch glyph action (no data, not supported by CoreText)
29095
29096  4: { // Ductile glyph action (not supported by CoreText)
29097    variationAxis: r.uint32,
29098    minimumLimit: r.fixed32,
29099    noStretchValue: r.fixed32,
29100    maximumLimit: r.fixed32
29101  },
29102
29103  5: { // Repeated add glyph action
29104    flags: r.uint16,
29105    glyph: r.uint16
29106  }
29107});
29108
29109var Action = new r.Struct({
29110  actionClass: r.uint16,
29111  actionType: r.uint16,
29112  actionLength: r.uint32,
29113  actionData: ActionData,
29114  padding: new r.Reserved(r.uint8, function (t) {
29115    return t.actionLength - t._currentOffset;
29116  })
29117});
29118
29119var PostcompensationAction = new r.Array(Action, r.uint32);
29120var PostCompensationTable = new r.Struct({
29121  lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction))
29122});
29123
29124var JustificationTable = new r.Struct({
29125  classTable: new r.Pointer(r.uint16, ClassTable$1, { type: 'parent' }),
29126  wdcOffset: r.uint16,
29127  postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, { type: 'parent' }),
29128  widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, { type: 'parent', relativeTo: 'wdcOffset' }))
29129});
29130
29131var just = new r.Struct({
29132  version: r.uint32,
29133  format: r.uint16,
29134  horizontal: new r.Pointer(r.uint16, JustificationTable),
29135  vertical: new r.Pointer(r.uint16, JustificationTable)
29136});
29137
29138var LigatureData = {
29139  action: r.uint16
29140};
29141
29142var ContextualData = {
29143  markIndex: r.uint16,
29144  currentIndex: r.uint16
29145};
29146
29147var InsertionData = {
29148  currentInsertIndex: r.uint16,
29149  markedInsertIndex: r.uint16
29150};
29151
29152var SubstitutionTable = new r.Struct({
29153  items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable()))
29154});
29155
29156var SubtableData = new r.VersionedStruct('type', {
29157  0: { // Indic Rearrangement Subtable
29158    stateTable: new StateTable()
29159  },
29160
29161  1: { // Contextual Glyph Substitution Subtable
29162    stateTable: new StateTable(ContextualData),
29163    substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)
29164  },
29165
29166  2: { // Ligature subtable
29167    stateTable: new StateTable(LigatureData),
29168    ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),
29169    components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),
29170    ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))
29171  },
29172
29173  4: { // Non-contextual Glyph Substitution Subtable
29174    lookupTable: new LookupTable()
29175  },
29176
29177  5: { // Glyph Insertion Subtable
29178    stateTable: new StateTable(InsertionData),
29179    insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))
29180  }
29181});
29182
29183var Subtable = new r.Struct({
29184  length: r.uint32,
29185  coverage: r.uint24,
29186  type: r.uint8,
29187  subFeatureFlags: r.uint32,
29188  table: SubtableData,
29189  padding: new r.Reserved(r.uint8, function (t) {
29190    return t.length - t._currentOffset;
29191  })
29192});
29193
29194var FeatureEntry = new r.Struct({
29195  featureType: r.uint16,
29196  featureSetting: r.uint16,
29197  enableFlags: r.uint32,
29198  disableFlags: r.uint32
29199});
29200
29201var MorxChain = new r.Struct({
29202  defaultFlags: r.uint32,
29203  chainLength: r.uint32,
29204  nFeatureEntries: r.uint32,
29205  nSubtables: r.uint32,
29206  features: new r.Array(FeatureEntry, 'nFeatureEntries'),
29207  subtables: new r.Array(Subtable, 'nSubtables')
29208});
29209
29210var morx = new r.Struct({
29211  version: r.uint16,
29212  unused: new r.Reserved(r.uint16),
29213  nChains: r.uint32,
29214  chains: new r.Array(MorxChain, 'nChains')
29215});
29216
29217var OpticalBounds = new r.Struct({
29218  left: r.int16,
29219  top: r.int16,
29220  right: r.int16,
29221  bottom: r.int16
29222});
29223
29224var opbd = new r.Struct({
29225  version: r.fixed32,
29226  format: r.uint16,
29227  lookupTable: new LookupTable(OpticalBounds)
29228}
29228);
29229
29230var tables = {};
29231// Required Tables
29232tables.cmap = cmap;
29233tables.head = head;
29234tables.hhea = hhea;
29235tables.hmtx = hmtx;
29236tables.maxp = maxp;
29237tables.name = NameTable;
29238tables['OS/2'] = OS2;
29239tables.post = post;
29240
29241// TrueType Outlines
29242tables.fpgm = fpgm;
29243tables.loca = loca;
29244tables.prep = prep;
29245tables['cvt '] = cvt;
29246tables.glyf = glyf;
29247
29248// PostScript Outlines
29249tables['CFF '] = CFFFont;
29250tables['CFF2'] = CFFFont;
29251tables.VORG = VORG;
29252
29253// Bitmap Glyphs
29254tables.EBLC = EBLC;
29255tables.CBLC = tables.EBLC;
29256tables.sbix = sbix;
29257tables.COLR = COLR;
29258tables.CPAL = CPAL;
29259
29260// Advanced OpenType Tables
29261tables.BASE = BASE;
29262tables.GDEF = GDEF;
29263tables.GPOS = GPOS;
29264tables.GSUB = GSUB;
29265tables.JSTF = JSTF;
29266
29267// OpenType variations tables
29268tables.HVAR = HVAR;
29269
29270// Other OpenType Tables
29271tables.DSIG = DSIG;
29272tables.gasp = gasp;
29273tables.hdmx = hdmx;
29274tables.kern = kern;
29275tables.LTSH = LTSH;
29276tables.PCLT = PCLT;
29277tables.VDMX = VDMX;
29278tables.vhea = vhea;
29279tables.vmtx = vmtx;
29280
29281// Apple Advanced Typography Tables
29282tables.avar = avar;
29283tables.bsln = bsln;
29284tables.feat = feat;
29285tables.fvar = fvar;
29286tables.gvar = gvar;
29287tables.just = just;
29288tables.morx = morx;
29289tables.opbd = opbd;
29290
29291var TableEntry = new r.Struct({
29292  tag: new r.String(4),
29293  checkSum: r.uint32,
29294  offset: new r.Pointer(r.uint32, 'void', { type: 'global' }),
29295  length: r.uint32
29296});
29297
29298var Directory = new r.Struct({
29299  tag: new r.String(4),
29300  numTables: r.uint16,
29301  searchRange: r.uint16,
29302  entrySelector: r.uint16,
29303  rangeShift: r.uint16,
29304  tables: new r.Array(TableEntry, 'numTables')
29305});
29306
29307Directory.process = function () {
29308  var tables = {};
29309  for (var _iterator = this.tables, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
29310    var _ref;
29311
29312    if (_isArray) {
29313      if (_i >= _iterator.length) break;
29314      _ref = _iterator[_i++];
29315    } else {
29316      _i = _iterator.next();
29317      if (_i.done) break;
29318      _ref = _i.value;
29319    }
29320
29321    var table = _ref;
29322
29323    tables[table.tag] = table;
29324  }
29325
29326  this.tables = tables;
29327};
29328
29329Directory.preEncode = function (stream) {
29330  var tables$$ = [];
29331  for (var tag in this.tables) {
29332    var table = this.tables[tag];
29333    if (table) {
29334      tables$$.push({
29335        tag: tag,
29336        checkSum: 0,
29337        offset: new r.VoidPointer(tables[tag], table),
29338        length: tables[tag].size(table)
29339      });
29340    }
29341  }
29342
29343  this.tag = 'true';
29344  this.numTables = tables$$.length;
29345  this.tables = tables$$;
29346
29347  this.searchRange = Math.floor(Math.log(this.numTables) / Math.LN2) * 16;
29348  this.entrySelector = Math.floor(this.searchRange / Math.LN2);
29349  this.rangeShift = this.numTables * 16 - this.searchRange;
29350};
29351
29352function binarySearch(arr, cmp) {
29353  var min = 0;
29354  var max = arr.length - 1;
29355  while (min <= max) {
29356    var mid = min + max >> 1;
29357    var res = cmp(arr[mid]);
29358
29359    if (res < 0) {
29360      max = mid - 1;
29361    } else if (res > 0) {
29362      min = mid + 1;
29363    } else {
29364      return mid;
29365    }
29366  }
29367
29368  return -1;
29369}
29370
29371function range(index, end) {
29372  var range = [];
29373  while (index < end) {
29374    range.push(index++);
29375  }
29376  return range;
29377}
29378
29379var _class$1;
29380function _applyDecoratedDescriptor$1(target, property, decorators, descriptor, context) {
29381  var desc = {};
29382  Object['ke' + 'ys'](descriptor).forEach(function (key) {
29383    desc[key] = descriptor[key];
29384  });
29385  desc.enumerable = !!desc.enumerable;
29386  desc.configurable = !!desc.configurable;
29387
29388  if ('value' in desc || desc.initializer) {
29389    desc.writable = true;
29390  }
29391
29392  desc = decorators.slice().reverse().reduce(function (desc, decorator) {
29393    return decorator(target, property, desc) || desc;
29394  }, desc);
29395
29396  if (context && desc.initializer !== void 0) {
29397    desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
29398    desc.initializer = undefined;
29399  }
29400
29401  if (desc.initializer === void 0) {
29402    Object['define' + 'Property'](target, property, desc);
29403    desc = null;
29404  }
29405
29406  return desc;
29407}
29408
29409// iconv-lite is an optional dependency.
29410try {
29411  var iconv = __webpack_require__(52);
29412} catch (err) {}
29413
29414var CmapProcessor = (_class$1 = function () {
29415  function CmapProcessor(cmapTable) {
29416    _classCallCheck(this, CmapProcessor);
29417
29418    // Attempt to find a Unicode cmap first
29419    this.encoding = null;
29420    this.cmap = this.findSubtable(cmapTable, [
29421    // 32-bit subtables
29422    [3, 10], [0, 6], [0, 4],
29423
29424    // 16-bit subtables
29425    [3, 1], [0, 3], [0, 2], [0, 1], [0, 0]]);
29426
29427    // If not unicode cmap was found, and iconv-lite is installed,
29428    // take the first table with a supported encoding.
29429    if (!this.cmap && iconv) {
29430      for (var _iterator = cmapTable.tables, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
29431        var _ref;
29432
29433        if (_isArray) {
29434          if (_i >= _iterator.length) break;
29435          _ref = _iterator[_i++];
29436        } else {
29437          _i = _iterator.next();
29438          if (_i.done) break;
29439          _ref = _i.value;
29440        }
29441
29442        var cmap = _ref;
29443
29444        var encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1);
29445        if (iconv.encodingExists(encoding)) {
29446          this.cmap = cmap.table;
29447          this.encoding = encoding;
29448        }
29449      }
29450    }
29451
29452    if (!this.cmap) {
29453      throw new Error("Could not find a supported cmap table");
29454    }
29455
29456    this.uvs = this.findSubtable(cmapTable, [[0, 5]]);
29457    if (this.uvs && this.uvs.version !== 14) {
29458      this.uvs = null;
29459    }
29460  }
29461
29462  CmapProcessor.prototype.findSubtable = function findSubtable(cmapTable, pairs) {
29463    for (var _iterator2 = pairs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
29464      var _ref2;
29465
29466      if (_isArray2) {
29467        if (_i2 >= _iterator2.length) break;
29468        _ref2 = _iterator2[_i2++];
29469      } else {
29470        _i2 = _iterator2.next();
29471        if (_i2.done) break;
29472        _ref2 = _i2.value;
29473      }
29474
29475      var _ref3 = _ref2,
29476          platformID = _ref3[0],
29477          encodingID = _ref3[1];
29478
29479      for (var _iterator3 = cmapTable.tables, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
29480        var _ref4;
29481
29482        if (_isArray3) {
29483          if (_i3 >= _iterator3.length) break;
29484          _ref4 = _iterator3[_i3++];
29485        } else {
29486          _i3 = _iterator3.next();
29487          if (_i3.done) break;
29488          _ref4 = _i3.value;
29489        }
29490
29491        var cmap = _ref4;
29492
29493        if (cmap.platformID === platformID && cmap.encodingID === encodingID) {
29494          return cmap.table;
29495        }
29496      }
29497    }
29498
29499    return null;
29500  };
29501
29502  CmapProcessor.prototype.lookup = function lookup(codepoint, variationSelector) {
29503    // If there is no Unicode cmap in this font, we need to re-encode
29504    // the codepoint in the encoding that the cmap supports.
29505    if (this.encoding) {
29506      var buf = iconv.encode(_String$fromCodePoint(codepoint), this.encoding);
29507      codepoint = 0;
29508      for (var i = 0; i < buf.length; i++) {
29509        codepoint = codepoint << 8 | buf[i];
29510      }
29511
29512      // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.
29513    } else if (variationSelector) {
29514      var gid = this.getVariationSelector(codepoint, variationSelector);
29515      if (gid) {
29516        return gid;
29517      }
29518    }
29519
29520    var cmap = this.cmap;
29521    switch (cmap.version) {
29522      case 0:
29523        return cmap.codeMap.get(codepoint) || 0;
29524
29525      case 4:
29526        {
29527          var min = 0;
29528          var max = cmap.segCount - 1;
29529          while (min <= max) {
29530            var mid = min + max >> 1;
29531
29532            if (codepoint < cmap.startCode.get(mid)) {
29533              max = mid - 1;
29534            } else if (codepoint > cmap.endCode.get(mid)) {
29535              min = mid + 1;
29536            } else {
29537              var rangeOffset = cmap.idRangeOffset.get(mid);
29538              var _gid = void 0;
29539
29540              if (rangeOffset === 0) {
29541                _gid = codepoint + cmap.idDelta.get(mid);
29542              } else {
29543                var index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);
29544                _gid = cmap.glyphIndexArray.get(index) || 0;
29545                if (_gid !== 0) {
29546                  _gid += cmap.idDelta.get(mid);
29547                }
29548              }
29549
29550              return _gid & 0xffff;
29551            }
29552          }
29553
29554          return 0;
29555        }
29556
29557      case 8:
29558        throw new Error('TODO: cmap format 8');
29559
29560      case 6:
29561      case 10:
29562        return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;
29563
29564      case 12:
29565      case 13:
29566        {
29567          var _min = 0;
29568          var _max = cmap.nGroups - 1;
29569          while (_min <= _max) {
29570            var _mid = _min + _max >> 1;
29571            var group = cmap.groups.get(_mid);
29572
29573            if (codepoint < group.startCharCode) {
29574              _max = _mid - 1;
29575            } else if (codepoint > group.endCharCode) {
29576              _min = _mid + 1;
29577            } else {
29578              if (cmap.version === 12) {
29579                return group.glyphID + (codepoint - group.startCharCode);
29580              } else {
29581                return group.glyphID;
29582              }
29583            }
29584          }
29585
29586          return 0;
29587        }
29588
29589      case 14:
29590        throw new Error('TODO: cmap format 14');
29591
29592      default:
29593        throw new Error('Unknown cmap format ' + cmap.version);
29594    }
29595  };
29596
29597  CmapProcessor.prototype.getVariationSelector = function getVariationSelector(codepoint, variationSelector) {
29598    if (!this.uvs) {
29599      return 0;
29600    }
29601
29602    var selectors = this.uvs.varSelectors.toArray();
29603    var i = binarySearch(selectors, function (x) {
29604      return variationSelector - x.varSelector;
29605    });
29606    var sel = selectors[i];
29607
29608    if (i !== -1 && sel.defaultUVS) {
29609      i = binarySearch(sel.defaultUVS, function (x) {
29610        return codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0;
29611      });
29612    }
29613
29614    if (i !== -1 && sel.nonDefaultUVS) {
29615      i = binarySearch(sel.nonDefaultUVS, function (x) {
29616        return codepoint - x.unicodeValue;
29617      });
29618      if (i !== -1) {
29619        return sel.nonDefaultUVS[i].glyphID;
29620      }
29621    }
29622
29623    return 0;
29624  };
29625
29626  CmapProcessor.prototype.getCharacterSet = function getCharacterSet() {
29627    var cmap = this.cmap;
29628    switch (cmap.version) {
29629      case 0:
29630        return range(0, cmap.codeMap.length);
29631
29632      case 4:
29633        {
29634          var res = [];
29635          var endCodes = cmap.endCode.toArray();
29636          for (var i = 0; i < endCodes.length; i++) {
29637            var tail = endCodes[i] + 1;
29638            var start = cmap.startCode.get(i);
29639            res.push.apply(res, range(start, tail));
29640          }
29641
29642          return res;
29643        }
29644
29645      case 8:
29646        throw new Error('TODO: cmap format 8');
29647
29648      case 6:
29649      case 10:
29650        return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);
29651
29652      case 12:
29653      case 13:
29654        {
29655          var _res = [];
29656          for (var _iterator4 = cmap.groups.toArray(), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _getIterator(_iterator4);;) {
29657            var _ref5;
29658
29659            if (_isArray4) {
29660              if (_i4 >= _iterator4.length) break;
29661              _ref5 = _iterator4[_i4++];
29662            } else {
29663              _i4 = _iterator4.next();
29664              if (_i4.done) break;
29665              _ref5 = _i4.value;
29666            }
29667
29668            var group = _ref5;
29669
29670            _res.push.apply(_res, range(group.startCharCode, group.endCharCode + 1));
29671          }
29672
29673          return _res;
29674        }
29675
29676      case 14:
29677        throw new Error('TODO: cmap format 14');
29678
29679      default:
29680        throw new Error('Unknown cmap format ' + cmap.version);
29681    }
29682  };
29683
29684  CmapProcessor.prototype.codePointsForGlyph = function codePointsForGlyph(gid) {
29685    var cmap = this.cmap;
29686    switch (cmap.version) {
29687      case 0:
29688        {
29689          var res = [];
29690          for (var i = 0; i < 256; i++) {
29691            if (cmap.codeMap.get(i) === gid) {
29692              res.push(i);
29693            }
29694          }
29695
29696          return res;
29697        }
29698
29699      case 4:
29700        {
29701          var _res2 = [];
29702          for (var _i5 = 0; _i5 < cmap.segCount; _i5++) {
29703            var end = cmap.endCode.get(_i5);
29704            var start = cmap.startCode.get(_i5);
29705            var rangeOffset = cmap.idRangeOffset.get(_i5);
29706            var delta = cmap.idDelta.get(_i5);
29707
29708            for (var c = start; c <= end; c++) {
29709              var g = 0;
29710              if (rangeOffset === 0) {
29711                g = c + delta;
29712              } else {
29713                var index = rangeOffset / 2 + (c - start) - (cma
29713p.segCount - _i5);
29714                g = cmap.glyphIndexArray.get(index) || 0;
29715                if (g !== 0) {
29716                  g += delta;
29717                }
29718              }
29719
29720              if (g === gid) {
29721                _res2.push(c);
29722              }
29723            }
29724          }
29725
29726          return _res2;
29727        }
29728
29729      case 12:
29730        {
29731          var _res3 = [];
29732          for (var _iterator5 = cmap.groups.toArray(), _isArray5 = Array.isArray(_iterator5), _i6 = 0, _iterator5 = _isArray5 ? _iterator5 : _getIterator(_iterator5);;) {
29733            var _ref6;
29734
29735            if (_isArray5) {
29736              if (_i6 >= _iterator5.length) break;
29737              _ref6 = _iterator5[_i6++];
29738            } else {
29739              _i6 = _iterator5.next();
29740              if (_i6.done) break;
29741              _ref6 = _i6.value;
29742            }
29743
29744            var group = _ref6;
29745
29746            if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) {
29747              _res3.push(group.startCharCode + (gid - group.glyphID));
29748            }
29749          }
29750
29751          return _res3;
29752        }
29753
29754      case 13:
29755        {
29756          var _res4 = [];
29757          for (var _iterator6 = cmap.groups.toArray(), _isArray6 = Array.isArray(_iterator6), _i7 = 0, _iterator6 = _isArray6 ? _iterator6 : _getIterator(_iterator6);;) {
29758            var _ref7;
29759
29760            if (_isArray6) {
29761              if (_i7 >= _iterator6.length) break;
29762              _ref7 = _iterator6[_i7++];
29763            } else {
29764              _i7 = _iterator6.next();
29765              if (_i7.done) break;
29766              _ref7 = _i7.value;
29767            }
29768
29769            var _group = _ref7;
29770
29771            if (gid === _group.glyphID) {
29772              _res4.push.apply(_res4, range(_group.startCharCode, _group.endCharCode + 1));
29773            }
29774          }
29775
29776          return _res4;
29777        }
29778
29779      default:
29780        throw new Error('Unknown cmap format ' + cmap.version);
29781    }
29782  };
29783
29784  return CmapProcessor;
29785}(), (_applyDecoratedDescriptor$1(_class$1.prototype, 'getCharacterSet', [cache], _Object$getOwnPropertyDescriptor(_class$1.prototype, 'getCharacterSet'), _class$1.prototype), _applyDecoratedDescriptor$1(_class$1.prototype, 'codePointsForGlyph', [cache], _Object$getOwnPropertyDescriptor(_class$1.prototype, 'codePointsForGlyph'), _class$1.prototype)), _class$1);
29786
29787var KernProcessor = function () {
29788  function KernProcessor(font) {
29789    _classCallCheck(this, KernProcessor);
29790
29791    this.kern = font.kern;
29792  }
29793
29794  KernProcessor.prototype.process = function process(glyphs, positions) {
29795    for (var glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) {
29796      var left = glyphs[glyphIndex].id;
29797      var right = glyphs[glyphIndex + 1].id;
29798      positions[glyphIndex].xAdvance += this.getKerning(left, right);
29799    }
29800  };
29801
29802  KernProcessor.prototype.getKerning = function getKerning(left, right) {
29803    var res = 0;
29804
29805    for (var _iterator = this.kern.tables, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
29806      var _ref;
29807
29808      if (_isArray) {
29809        if (_i >= _iterator.length) break;
29810        _ref = _iterator[_i++];
29811      } else {
29812        _i = _iterator.next();
29813        if (_i.done) break;
29814        _ref = _i.value;
29815      }
29816
29817      var table = _ref;
29818
29819      if (table.coverage.crossStream) {
29820        continue;
29821      }
29822
29823      switch (table.version) {
29824        case 0:
29825          if (!table.coverage.horizontal) {
29826            continue;
29827          }
29828
29829          break;
29830        case 1:
29831          if (table.coverage.vertical || table.coverage.variation) {
29832            continue;
29833          }
29834
29835          break;
29836        default:
29837          throw new Error('Unsupported kerning table version ' + table.version);
29838      }
29839
29840      var val = 0;
29841      var s = table.subtable;
29842      switch (table.format) {
29843        case 0:
29844          var pairIdx = binarySearch(s.pairs, function (pair) {
29845            return left - pair.left || right - pair.right;
29846          });
29847
29848          if (pairIdx >= 0) {
29849            val = s.pairs[pairIdx].value;
29850          }
29851
29852          break;
29853
29854        case 2:
29855          var leftOffset = 0,
29856              rightOffset = 0;
29857          if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) {
29858            leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];
29859          } else {
29860            leftOffset = s.array.off;
29861          }
29862
29863          if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) {
29864            rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];
29865          }
29866
29867          var index = (leftOffset + rightOffset - s.array.off) / 2;
29868          val = s.array.values.get(index);
29869          break;
29870
29871        case 3:
29872          if (left >= s.glyphCount || right >= s.glyphCount) {
29873            return 0;
29874          }
29875
29876          val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];
29877          break;
29878
29879        default:
29880          throw new Error('Unsupported kerning sub-table format ' + table.format);
29881      }
29882
29883      // Microsoft supports the override flag, which resets the result
29884      // Otherwise, the sum of the results from all subtables is returned
29885      if (table.coverage.override) {
29886        res = val;
29887      } else {
29888        res += val;
29889      }
29890    }
29891
29892    return res;
29893  };
29894
29895  return KernProcessor;
29896}();
29897
29898/**
29899 * This class is used when GPOS does not define 'mark' or 'mkmk' features
29900 * for positioning marks relative to base glyphs. It uses the unicode
29901 * combining class property to position marks.
29902 *
29903 * Based on code from Harfbuzz, thanks!
29904 * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc
29905 */
29906
29907var UnicodeLayoutEngine = function () {
29908  function UnicodeLayoutEngine(font) {
29909    _classCallCheck(this, UnicodeLayoutEngine);
29910
29911    this.font = font;
29912  }
29913
29914  UnicodeLayoutEngine.prototype.positionGlyphs = function positionGlyphs(glyphs, positions) {
29915    // find each base + mark cluster, and position the marks relative to the base
29916    var clusterStart = 0;
29917    var clusterEnd = 0;
29918    for (var index = 0; index < glyphs.length; index++) {
29919      var glyph = glyphs[index];
29920      if (glyph.isMark) {
29921        // TODO: handle ligatures
29922        clusterEnd = index;
29923      } else {
29924        if (clusterStart !== clusterEnd) {
29925          this.positionCluster(glyphs, positions, clusterStart, clusterEnd);
29926        }
29927
29928        clusterStart = clusterEnd = index;
29929      }
29930    }
29931
29932    if (clusterStart !== clusterEnd) {
29933      this.positionCluster(glyphs, positions, clusterStart, clusterEnd);
29934    }
29935
29936    return positions;
29937  };
29938
29939  UnicodeLayoutEngine.prototype.positionCluster = function positionCluster(glyphs, positions, clusterStart, clusterEnd) {
29940    var base = glyphs[clusterStart];
29941    var baseBox = base.cbox.copy();
29942
29943    // adjust bounding box for ligature glyphs
29944    if (base.codePoints.length > 1) {
29945      // LTR. TODO: RTL support.
29946      baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length;
29947    }
29948
29949    var xOffset = -positions[clusterStart].xAdvance;
29950    var yOffset = 0;
29951    var yGap = this.font.unitsPerEm / 16;
29952
29953    // position each of the mark glyphs relative to the base glyph
29954    for (var index = clusterStart + 1; index <= clusterEnd; index++) {
29955      var mark = glyphs[index];
29956      var markBox = mark.cbox;
29957      var position = positions[index];
29958
29959      var combiningClass = this.getCombiningClass(mark.codePoints[0]);
29960
29961      if (combiningClass !== 'Not_Reordered') {
29962        position.xOffset = position.yOffset = 0;
29963
29964        // x positioning
29965        switch (combiningClass) {
29966          case 'Double_Above':
29967          case 'Double_Below':
29968            // LTR. TODO: RTL support.
29969            position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;
29970            break;
29971
29972          case 'Attached_Below_Left':
29973          case 'Below_Left':
29974          case 'Above_Left':
29975            // left align
29976            position.xOffset += baseBox.minX - markBox.minX;
29977            break;
29978
29979          case 'Attached_Above_Right':
29980          case 'Below_Right':
29981          case 'Above_Right':
29982            // right align
29983            position.xOffset += baseBox.maxX - markBox.width - markBox.minX;
29984            break;
29985
29986          default:
29987            // Attached_Below, Attached_Above, Below, Above, other
29988            // center align
29989            position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;
29990        }
29991
29992        // y positioning
29993        switch (combiningClass) {
29994          case 'Double_Below':
29995          case 'Below_Left':
29996          case 'Below':
29997          case 'Below_Right':
29998          case 'Attached_Below_Left':
29999          case 'Attached_Below':
30000            // add a small gap between the glyphs if they are not attached
30001            if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') {
30002              baseBox.minY += yGap;
30003            }
30004
30005            position.yOffset = -baseBox.minY - markBox.maxY;
30006            baseBox.minY += markBox.height;
30007            break;
30008
30009          case 'Double_Above':
30010          case 'Above_Left':
30011          case 'Above':
30012          case 'Above_Right':
30013          case 'Attached_Above':
30014          case 'Attached_Above_Right':
30015            // add a small gap between the glyphs if they are not attached
30016            if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') {
30017              baseBox.maxY += yGap;
30018            }
30019
30020            position.yOffset = baseBox.maxY - markBox.minY;
30021            baseBox.maxY += markBox.height;
30022            break;
30023        }
30024
30025        position.xAdvance = position.yAdvance = 0;
30026        position.xOffset += xOffset;
30027        position.yOffset += yOffset;
30028      } else {
30029        xOffset -= position.xAdvance;
30030        yOffset -= position.yAdvance;
30031      }
30032    }
30033
30034    return;
30035  };
30036
30037  UnicodeLayoutEngine.prototype.getCombiningClass = function getCombiningClass(codePoint) {
30038    var combiningClass = unicode.getCombiningClass(codePoint);
30039
30040    // Thai / Lao need some per-character work
30041    if ((codePoint & ~0xff) === 0x0e00) {
30042      if (combiningClass === 'Not_Reordered') {
30043        switch (codePoint) {
30044          case 0x0e31:
30045          case 0x0e34:
30046          case 0x0e35:
30047          case 0x0e36:
30048          case 0x0e37:
30049          case 0x0e47:
30050          case 0x0e4c:
30051          case 0x0e3d:
30052          case 0x0e4e:
30053            return 'Above_Right';
30054
30055          case 0x0eb1:
30056          case 0x0eb4:
30057          case 0x0eb5:
30058          case 0x0eb6:
30059          case 0x0eb7:
30060          case 0x0ebb:
30061          case 0x0ecc:
30062          case 0x0ecd:
30063            return 'Above';
30064
30065          case 0x0ebc:
30066            return 'Below';
30067        }
30068      } else if (codePoint === 0x0e3a) {
30069        // virama
30070        return 'Below_Right';
30071      }
30072    }
30073
30074    switch (combiningClass) {
30075      // Hebrew
30076
30077      case 'CCC10': // sheva
30078      case 'CCC11': // hataf segol
30079      case 'CCC12': // hataf patah
30080      case 'CCC13': // hataf qamats
30081      case 'CCC14': // hiriq
30082      case 'CCC15': // tsere
30083      case 'CCC16': // segol
30084      case 'CCC17': // patah
30085      case 'CCC18': // qamats
30086      case 'CCC20': // qubuts
30087      case 'CCC22':
30088        // meteg
30089        return 'Below';
30090
30091      case 'CCC23':
30092        // rafe
30093        return 'Attached_Above';
30094
30095      case 'CCC24':
30096        // shin dot
30097        return 'Above_Right';
30098
30099      case 'CCC25': // sin dot
30100      case 'CCC19':
30101        // holam
30102        return 'Above_Left';
30103
30104      case 'CCC26':
30105        // point varika
30106        return 'Above';
30107
30108      case 'CCC21':
30109        // dagesh
30110        break;
30111
30112      // Arabic and Syriac
30113
30114      case 'CCC27': // fathatan
30115      case 'CCC28': // dammatan
30116      case 'CCC30': // fatha
30117      case 'CCC31': // damma
30118      case 'CCC33': // shadda
30119      case 'CCC34': // sukun
30120      case 'CCC35': // superscript alef
30121      case 'CCC36':
30122        // superscript alaph
30123        return 'Above';
30124
30125      case 'CCC29': // kasratan
30126      case 'CCC32':
30127        // kasra
30128        return 'Below';
30129
30130      // Thai
30131
30132      case 'CCC103':
30133        // sara u / sara uu
30134        return 'Below_Right';
30135
30136      case 'CCC107':
30137        // mai
30138        return 'Above_Right';
30139
30140      // Lao
30141
30142      case 'CCC118':
30143        // sign u / sign uu
30144        return 'Below';
30145
30146      case 'CCC122':
30147        // mai
30148        return 'Above';
30149
30150      // Tibetan
30151
30152      case 'CCC129': // sign aa
30153      case 'CCC132':
30154        // sign u
30155        return 'Below';
30156
30157      case 'CCC130':
30158        // sign i
30159        return 'Above';
30160    }
30161
30162    return combiningClass;
30163  };
30164
30165  return UnicodeLayoutEngine;
30166}();
30167
30168/**
30169 * Represents a glyph bounding box
30170 */
30171var BBox = function () {
30172  function BBox() {
30173    var minX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Infinity;
30174    var minY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Infinity;
30175    var maxX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -Infinity;
30176    var maxY = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -Infinity;
30177
30178    _classCallCheck(this, BBox);
30179
30180    /**
30181     * The minimum X position in the bounding box
30182     * @type {number}
30183     */
30184    this.minX = minX;
30185
30186    /**
30187     * The minimum Y position in the bounding box
30188     * @type {number}
30189     */
30190    this.minY = minY;
30191
30192    /**
30193     * The maxmimum X position in the bounding box
30194     * @type {number}
30195     */
30196    this.maxX = maxX;
30197
30198    /**
30199     * The maxmimum Y position in the bounding box
30200     * @type {number}
30201     */
30202    this.maxY = maxY;
30203  }
30204
30205  /**
30206   * The width of the bounding box
30207   * @type {number}
30208   */
30209
30210
30211  BBox.prototype.addPoint = function addPoint(x, y) {
30212    if (Math.abs(x) !== Infinity) {
30213      if (x < this.minX) {
30214        this.minX = x;
30215      }
30216
30217      if (x > this.maxX) {
30218        this.maxX = x;
30219      }
30220    }
30221
30222    if (Math.abs(y) !== Infinity) {
30223      if (y < this.minY) {
30224        this.minY = y;
30225      }
30226
30227      if (y > this.maxY) {
30228        this.maxY = y;
30229      }
30230    }
30231  };
30232
30233  BBox.prototype.copy = function copy() {
30234    return new BBox(this.minX, this.minY, this.maxX, this.maxY);
30235  };
30236
30237  _createClass(BBox, [{
30238    key: "width",
30239    get: function get() {
30240      return this.maxX - this.minX;
30241    }
30242
30243    /**
30244     * The height of the bounding box
30245     * @type {number}
30246     */
30247
30248  }, {
30249    key: "height",
30250    get: function get() {
30251      return this.maxY - this.minY;
30252    }
30253  }]);
30254
30255  return BBox;
30256}();
30257
30258// This maps the Unicode Script property to an OpenType script tag
30259// Data from http://www.microsoft.com/typography/otspec/scripttags.htm
30260// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.
30261var UNICODE_SCRIPTS = {
30262  Caucasian_Albanian: 'aghb',
30263  Arabic: 'arab',
30264  Imperial_Aramaic: 'armi',
30265  Armenian: 'armn',
30266  Avestan: 'avst',
30267  Balinese: 'bali',
30268  Bamum: 'bamu',
30269  Bassa_Vah: 'bass',
30270  Batak: 'batk',
30271  Bengali: ['bng2', 'beng'],
30272  Bopomofo: 'bopo',
30273  Brahmi: 'brah',
30274  Braille: 'brai',
30275  Buginese: 'bugi',
30276  Buhid: 'buhd',
30277  Chakma: 'cakm',
30278  Canadian_Aboriginal: 'cans',
30279  Carian: 'cari',
30280  Cham: 'cham',
30281  Cherokee: 'cher',
30282  Coptic: 'copt',
30283  Cypriot: 'cprt',
30284  Cyrillic: 'cyrl',
30285  Devanagari: ['dev2', 'deva'],
30286  Deseret: 'dsrt',
30287  Duployan: 'dupl',
30288  Egyptian_Hieroglyphs: 'egyp',
30289  Elbasan: 'elba',
30290  Ethiopic: 'ethi',
30291  Georgian: 'geor',
30292  Glagolitic: 'glag',
30293  Gothic: 'goth',
30294  Grantha: 'gran',
30295  Greek: 'grek',
30296  Gujarati: ['gjr2', 'gujr'],
30297  Gurmukhi: ['gur2', 'guru'],
30298  Hangul: 'hang',
30299  Han: 'hani',
30300  Hanunoo: 'hano',
30301  Hebrew: 'hebr',
30302  Hiragana: 'hira',
30303  Pahawh_Hmong: 'hmng',
30304  Katakana_Or_Hiragana: 'hrkt',
30305  Old_Italic: 'ital',
30306  Javanese: 'java',
30307  Kayah_Li: 'kali',
30308  Katakana: 'kana',
30309  Kharoshthi: 'khar',
30310  Khmer: 'khmr',
30311  Khojki: 'khoj',
30312  Kannada: ['knd2', 'knda'],
30313  Kaithi: 'kthi',
30314  Tai_Tham: 'lana',
30315  Lao: 'lao ',
30316  Latin: 'latn',
30317  Lepcha: 'lepc',
30318  Limbu: 'limb',
30319  Linear_A: 'lina',
30320  Linear_B: 'linb',
30321  Lisu: 'lisu',
30322  Lycian: 'lyci',
30323  Lydian: 'lydi',
30324  Mahajani: 'mahj',
30325  Mandaic: 'mand',
30326  Manichaean: 'mani',
30327  Mende_Kikakui: 'mend',
30328  Meroitic_Cursive: 'merc',
30329  Meroitic_Hieroglyphs: 'mero',
30330  Malayalam: ['mlm2', 'mlym'],
30331  Modi: 'modi',
30332  Mongolian: 'mong',
30333  Mro: 'mroo',
30334  Meetei_Mayek: 'mtei',
30335  Myanmar: ['mym2', 'mymr'],
30336  Old_North_Arabian: 'narb',
30337  Nabataean: 'nbat',
30338  Nko: 'nko ',
30339  Ogham: 'ogam',
30340  Ol_Chiki: 'olck',
30341  Old_Turkic: 'orkh',
30342  Oriya: ['ory2', 'orya'],
30343  Osmanya: 'osma',
30344  Palmyrene: 'palm',
30345  Pau_Cin_Hau: 'pauc',
30346  Old_Permic: 'perm',
30347  Phags_Pa: 'phag',
30348  Inscriptional_Pahlavi: 'phli',
30349  Psalter_Pahlavi: 'phlp',
30350  Phoenician: 'phnx',
30351  Miao: 'plrd',
30352  Inscriptional_Parthian: 'prti',
30353  Rejang: 'rjng',
30354  Runic: 'runr',
30355  Samaritan: 'samr',
30356  Old_South_Arabian: 'sarb',
30357  Saurashtra: 'saur',
30358  Shavian: 'shaw',
30359  Sharada: 'shrd',
30360  Siddham: 'sidd',
30361  Khudawadi: 'sind',
30362  Sinhala: 'sinh',
30363  Sora_Sompeng: 'sora',
30364  Sundanese: 'sund',
30365  Syloti_Nagri: 'sylo',
30366  Syriac: 'syrc',
30367  Tagbanwa: 'tagb',
30368  Takri: 'takr',
30369  Tai_Le: 'tale',
30370  New_Tai_Lue: 'talu',
30371  Tamil: ['tml2', 'taml'],
30372  Tai_Viet: 'tavt',
30373  Telugu: ['tel2', 'telu'],
30374  Tifinagh: 'tfng',
30375  Tagalog: 'tglg',
30376  Thaana: 'thaa',
30377  Thai: 'thai',
30378  Tibetan: 'tibt',
30379  Tirhuta: 'tirh',
30380  Ugaritic: 'ugar',
30381  Vai: 'vai ',
30382  Warang_Citi: 'wara',
30383  Old_Persian: 'xpeo',
30384  Cuneiform: 'xsux',
30385  Yi: 'yi  ',
30386  Inherited: 'zinh',
30387  Common: 'zyyy',
30388  Unknown: 'zzzz'
30389};
30390
30391var OPENTYPE_SCRIPTS = {};
30392for (var script in UNICODE_SCRIPTS) {
30393  var tag = UNICODE_SCRIPTS[script];
30394  if (Array.isArray(tag)) {
30395    for (var _iterator = tag, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
30396      var _ref;
30397
30398      if (_isArray) {
30399        if (_i >= _iterator.length) break;
30400        _ref = _iterator[_i++];
30401      } else {
30402        _i = _iterator.next();
30403        if (_i.done) break;
30404        _ref = _i.value;
30405      }
30406
30407      var t = _ref;
30408
30409      OPENTYPE_SCRIPTS[t] = script;
30410    }
30411  } else {
30412    OPENTYPE_SCRIPTS[tag] = script;
30413  }
30414}
30415
30416function fromOpenType(tag) {
30417  return OPENTYPE_SCRIPTS[tag];
30418}
30419
30420function forString(string) {
30421  var len = string.length;
30422  var idx = 0;
30423  while (idx < len) {
30424    var code = string.charCodeAt(idx++);
30425
30426    // Check if this is a high surrogate
30427    if (0xd800 <= code && code <= 0xdbff && idx < len) {
30428      var next = string.charCodeAt(idx);
30429
30430      // Check if this is a low surrogate
30431      if (0xdc00 <= next && next <= 0xdfff) {
30432        idx++;
30433        code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;
30434      }
30435    }
30436
30437    var _script = unicode.getScript(code);
30438    if (_script !== 'Common' && _script !== 'Inherited' && _script !== 'Unknown') {
30439      return UNICODE_SCRIPTS[_script];
30440    }
30441  }
30442
30443  return UNICODE_SCRIPTS.Unknown;
30444}
30445
30446function forCodePoints(codePoints) {
30447  for (var i = 0; i < codePoints.length; i++) {
30448    var codePoint = codePoints[i];
30449    var _script2 = unicode.getScript(codePoint);
30450    if (_script2 !== 'Common' && _script2 !== 'Inherited' && _script2 !== 'Unknown') {
30451      return UNICODE_SCRIPTS[_script2];
30452    }
30453  }
30454
30455  return UNICODE_SCRIPTS.Unknown;
30456}
30457
30458// The scripts in this map are written from right to left
30459var RTL = {
30460  arab: true, // Arabic
30461  hebr: true, // Hebrew
30462  syrc: true, // Syriac
30463  thaa: true, // Thaana
30464  cprt: true, // Cypriot Syllabary
30465  khar: true, // Kharosthi
30466  phnx: true, // Phoenician
30467  'nko ': true, // N'Ko
30468  lydi: true, // Lydian
30469  avst: true, // Avestan
30470  armi: true, // Imperial Aramaic
30471  phli: true, // Inscriptional Pahlavi
30472  prti: true, // Inscriptional Parthian
30473  sarb: true, // Old South Arabian
30474  orkh: true, // Old Turkic, Orkhon Runic
30475  samr: true, // Samaritan
30476  mand: true, // Mandaic, Mandaean
30477  merc: true, // Meroitic Cursive
30478  mero: true, // Meroitic Hieroglyphs
30479
30480  // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)
30481  mani: true, // Manichaean
30482  mend: true, // Mende Kikakui
30483  nbat: true, // Nabataean
30484  narb: true, // Old North Arabian
30485  palm: true, // Palmyrene
30486  phlp: true // Psalter Pahlavi
30487};
30488
30489function direction(script) {
30490  if (RTL[script]) {
30491    return 'rtl';
30492  }
30493
30494  return 'ltr';
30495}
30496
30497/**
30498 * Represents a run of Glyph and GlyphPosition objects.
30499 * Returned by the font layout method.
30500 */
30501
30502var GlyphRun = function () {
30503  function GlyphRun(glyphs, features, script, language, direction$$) {
30504    _classCallCheck(this, GlyphRun);
30505
30506    /**
30507     * An array of Glyph objects in the run
30508     * @type {Glyph[]}
30509     */
30510    this.glyphs = glyphs;
30511
30512    /**
30513     * An array of GlyphPosition objects for each glyph in the run
30514     * @type {GlyphPosition[]}
30515     */
30516    this.positions = null;
30517
30518    /**
30519     * The script that was requested for shaping. This was either passed in or detected automatically.
30520     * @type {string}
30521     */
30522    this.script = script;
30523
30524    /**
30525     * The language requested for shaping, as passed in. If `null`, the default language for the
30526     * script was used.
30527     * @type {string}
30528     */
30529    this.language = language || null;
30530
30531    /**
30532     * The direction requested for shaping, as passed in (either ltr or rtl).
30533     * If `null`, the default direction of the script is used.
30534     * @type {string}
30535     */
30536    this.direction = direction$$ || direction(script);
30537
30538    /**
30539     * The features requested during shaping. This is a combination of user
30540     * specified features and features chosen by the shaper.
30541     * @type {object}
30542     */
30543    this.features = {};
30544
30545    // Convert features to an object
30546    if (Array.isArray(features)) {
30547      for (var _iterator = features, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
30548        var _ref;
30549
30550        if (_isArray) {
30551          if (_i >= _iterator.length) break;
30552          _ref = _iterator[_i++];
30553        } else {
30554          _i = _iterator.next();
30555          if (_i.done) break;
30556          _ref = _i.value;
30557        }
30558
30559        var tag = _ref;
30560
30561        this.features[tag] = true;
30562      }
30563    } else if ((typeof features === 'undefined' ? 'undefined' : _typeof(features)) === 'object') {
30564      this.features = features;
30565    }
30566  }
30567
30568  /**
30569   * The total advance width of the run.
30570   * @type {number}
30571   */
30572
30573
30574  _createClass(GlyphRun, [{
30575    key: 'advanceWidth',
30576    get: function get() {
30577      var width = 0;
30578      for (var _iterator2 = this.positions, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
30579        var _ref2;
30580
30581        if (_isArray2) {
30582          if (_i2 >= _iterator2.length) break;
30583          _ref2 = _iterator2[_i2++];
30584        } else {
30585          _i2 = _iterator2.next();
30586          if (_i2.done) break;
30587          _ref2 = _i2.value;
30588        }
30589
30590        var position = _ref2;
30591
30592        width += position.xAdvance;
30593      }
30594
30595      return width;
30596    }
30597
30598    /**
30599     * The total advance height of the run.
30600     * @type {number}
30601     */
30602
30603  }, {
30604    key: 'advanceHeight',
30605    get: function get() {
30606      var height = 0;
30607      for (var _iterator3 = this.positions, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
30608        var _ref3;
30609
30610        if (_isArray3) {
30611          if (_i3 >= _iterator3.length) break;
30612          _ref3 = _iterator3[_i3++];
30613        } else {
30614          _i3 = _iterator3.next();
30615          if (_i3.done) break;
30616          _ref3 = _i3.value;
30617        }
30618
30619        var position = _ref3;
30620
30621        height += position.yAdvance;
30622      }
30623
30624      return height;
30625    }
30626
30627    /**
30628     * The bounding box containing all glyphs in the run.
30629     * @type {BBox}
30630     */
30631
30632  }, {
30633    key: 'bbox',
30634    get: function get() {
30635      var bbox = new BBox();
30636
30637      var x = 0;
30638      var y = 0;
30639      for (var index = 0; index < this.glyphs.length; index++) {
30640        var glyph = this.glyphs[index];
30641        var p = this.positions[index];
30642        var b = glyph.bbox;
30643
30644        bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);
30645        bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);
30646
30647        x += p.xAdvance;
30648        y += p.yAdvance;
30649      }
30650
30651      return bbox;
30652    }
30653  }]);
30654
30655  return GlyphRun;
30656}();
30657
30658/**
30659 * Represents positioning information for a glyph in a GlyphRun.
30660 */
30661var GlyphPosition = function GlyphPosition() {
30662  var xAdvance = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
30663  var yAdvance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
30664  var xOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
30665  var yOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
30666
30667  _classCallCheck(this, GlyphPosition);
30668
30669  /**
30670   * The amount to move the virtual pen in the X direction after rendering this glyph.
30671   * @type {number}
30672   */
30673  this.xAdvance = xAdvance;
30674
30675  /**
30676   * The amount to move the virtual pen in the Y direction after rendering this glyph.
30677   * @type {number}
30678   */
30679  this.yAdvance = yAdvance;
30680
30681  /**
30682   * The offset from the pen position in the X direction at which to render this glyph.
30683   * @type {number}
30684   */
30685  this.xOffset = xOffset;
30686
30687  /**
30688   * The offset from the pen position in the Y direction at which to render this glyph.
30689   * @type {number}
30690   */
30691  this.yOffset = yOffset;
30692};
30693
30694// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html
30695// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac
30696var features = {
30697  allTypographicFeatures: {
30698    code: 0,
30699    exclusive: false,
30700    allTypeFeatures: 0
30701  },
30702  ligatures: {
30703    code: 1,
30704    exclusive: false,
30705    requiredLigatures: 0,
30706    commonLigatures: 2,
30707    rareLigatures: 4,
30708    // logos: 6
30709    rebusPictures: 8,
30710    diphthongLigatures: 10,
30711    squaredLigatures: 12,
30712    abbrevSquaredLigatures: 14,
30713    symbolLigatures: 16,
30714    contextualLigatures: 18,
30715    historicalLigatures: 20
30716  },
30717  cursiveConnection: {
30718    code: 2,
30719    exclusive: true,
30720    unconnected: 0,
30721    partiallyConnected: 1,
30722    cursive: 2
30723  },
30724  letterCase: {
30725    code: 3,
30726    exclusive: true
30727  },
30728  // upperAndLowerCase: 0          # deprecated
30729  // allCaps: 1                    # deprecated
30730  // allLowerCase: 2               # deprecated
30731  // smallCaps: 3                  # deprecated
30732  // initialCaps: 4                # deprecated
30733  // initialCapsAndSmallCaps: 5    # deprecated
30734  verticalSubstitution: {
30735    code: 4,
30736    exclusive: false,
30737    substituteVerticalForms: 0
30738  },
30739  linguisticRearrangement: {
30740    code: 5,
30741    exclusive: false,
30742    linguisticRearrangement: 0
30743  },
30744  numberSpacing: {
30745    code: 6,
30746    exclusive: true,
30747    monospacedNumbers: 0,
30748    proportionalNumbers: 1,
30749    thirdWidthNumbers: 2,
30750    quarterWidthNumbers: 3
30751  },
30752  smartSwash: {
30753    code: 8,
30754    exclusive: false,
30755    wordInitialSwashes: 0,
30756    wordFinalSwashes: 2,
30757    // lineInitialSwashes: 4
30758    // lineFinalSwashes: 6
30759    nonFinalSwashes: 8
30760  },
30761  diacritics: {
30762    code: 9,
30763    exclusive: true,
30764    showDiacritics: 0,
30765    hideDiacritics: 1,
30766    decomposeDiacritics: 2
30767  },
30768  verticalPosition: {
30769    code: 10,
30770    exclusive: true,
30771    normalPosition: 0,
30772    superiors: 1,
30773    inferiors: 2,
30774    ordinals: 3,
30775    scientificInferiors: 4
30776  },
30777  fractions: {
30778    code: 11,
30779    exclusive: true,
30780    noFractions: 0,
30781    verticalFractions: 1,
30782    diagonalFractions: 2
30783  },
30784  overlappingCharacters: {
30785    code: 13,
30786    exclusive: false,
30787    preventOverlap: 0
30788  },
30789  typographicExtras: {
30790    code: 14,
30791    exclusive: false,
30792    // hyphensToEmDash: 0
30793    // hyphenToEnDash: 2
30794    slashedZero: 4
30795  },
30796  // formInterrobang: 6
30797  // smartQuotes: 8
30798  // periodsToEllipsis: 10
30799  mathematicalExtras: {
30800    code: 15,
30801    exclusive: false,
30802    // hyphenToMinus: 0
30803    // asteristoMultiply: 2
30804    // slashToDivide: 4
30805    // inequalityLigatures: 6
30806    // exponents: 8
30807    mathematicalGreek: 10
30808  },
30809  ornamentSets: {
30810    code: 16,
30811    exclusive: true,
30812    noOrnaments: 0,
30813    dingbats: 1,
30814    piCharacters: 2,
30815    fleurons: 3,
30816    decorativeBorders: 4,
30817    internationalSymbols: 5,
30818    mathSymbols: 6
30819  },
30820  characterAlternatives: {
30821    code: 17,
30822    exclusive: true,
30823    noAlternates: 0
30824  },
30825  // user defined options
30826  designComplexity: {
30827    code: 18,
30828    exclusive: true,
30829    designLevel1: 0,
30830    designLevel2: 1,
30831    designLevel3: 2,
30832    designLevel4: 3,
30833    designLevel5: 4
30834  },
30835  styleOptions: {
30836    code: 19,
30837    exclusive: true,
30838    noStyleOptions: 0,
30839    displayText: 1,
30840    engravedText: 2,
30841    illuminatedCaps: 3,
30842    titlingCaps: 4,
30843    tallCaps: 5
30844  },
30845  characterShape: {
30846    code: 20,
30847    exclusive: true,
30848    traditionalCharacters: 0,
30849    simplifiedCharacters: 1,
30850    JIS1978Characters: 2,
30851    JIS1983Characters: 3,
30852    JIS1990Characters: 4,
30853    traditionalAltOne: 5,
30854    traditionalAltTwo: 6,
30855    traditionalAltThree: 7,
30856    traditionalAltFour: 8,
30857    traditionalAltFive: 9,
30858    expertCharacters: 10,
30859    JIS2004Characters: 11,
30860    hojoCharacters: 12,
30861    NLCCharacters: 13,
30862    traditionalNamesCharacters: 14
30863  },
30864  numberCase: {
30865    code: 21,
30866    exclusive: true,
30867    lowerCaseNumbers: 0,
30868    upperCaseNumbers: 1
30869  },
30870  textSpacing: {
30871    code: 22,
30872    exclusive: true,
30873    proportionalText: 0,
30874    monospacedText: 1,
30875    halfWidthText: 2,
30876    thirdWidthText: 3,
30877    quarterWidthText: 4,
30878    altProportionalText: 5,
30879    altHalfWidthText: 6
30880  },
30881  transliteration: {
30882    code: 23,
30883    exclusive: true,
30884    noTransliteration: 0
30885  },
30886  // hanjaToHangul: 1
30887  // hiraganaToKatakana: 2
30888  // katakanaToHiragana: 3
30889  // kanaToRomanization: 4
30890  // romanizationToHiragana: 5
30891  // romanizationToKatakana: 6
30892  // hanjaToHangulAltOne: 7
30893  // hanjaToHangulAltTwo: 8
30894  // hanjaToHangulAltThree: 9
30895  annotation: {
30896    code: 24,
30897    exclusive: true,
30898    noAnnotation: 0,
30899    boxAnnotation: 1,
30900    roundedBoxAnnotation: 2,
30901    circleAnnotation: 3,
30902    invertedCircleAnnotation: 4,
30903    parenthesisAnnotation: 5,
30904    periodAnnotation: 6,
30905    romanNumeralAnnotation: 7,
30906    diamondAnnotation: 8,
30907    invertedBoxAnnotation: 9,
30908    invertedRoundedBoxAnnotation: 10
30909  },
30910  kanaSpacing: {
30911    code: 25,
30912    exclusive: true,
30913    fullWidthKana: 0,
30914    proportionalKana: 1
30915  },
30916  ideographicSpacing: {
30917    code: 26,
30918    exclusive: true,
30919    fullWidthIdeographs: 0,
30920    proportionalIdeographs: 1,
30921    halfWidthIdeographs: 2
30922  },
30923  unicodeDecomposition: {
30924    code: 27,
30925    exclusive: false,
30926    canonicalComposition: 0,
30927    compatibilityComposition: 2,
30928    transcodingComposition: 4
30929  },
30930  rubyKana: {
30931    code: 28,
30932    exclusive: false,
30933    // noRubyKana: 0     # deprecated - use rubyKanaOff instead
30934    // rubyKana: 1     # deprecated - use rubyKanaOn instead
30935    rubyKana: 2
30936  },
30937  CJKSymbolAlternatives: {
30938    code: 29,
30939    exclusive: true,
30940    noCJKSymbolAlternatives: 0,
30941    CJKSymbolAltOne: 1,
30942    CJKSymbolAltTwo: 2,
30943    CJKSymbolAltThree: 3,
30944    CJKSymbolAltFour: 4,
30945    CJKSymbolAltFive: 5
30946  },
30947  ideographicAlternatives: {
30948    code: 30,
30949    exclusive: true,
30950    noIdeographicAlternatives: 0,
30951    ideographicAltOne: 1,
30952    ideographicAltTwo: 2,
30953    ideographicAltThree: 3,
30954    ideographicAltFour: 4,
30955    ideographicAltFive: 5
30956  },
30957  CJKVerticalRomanPlacement: {
30958    code: 31,
30959    exclusive: true,
30960    CJKVerticalRomanCentered: 0,
30961    CJKVerticalRomanHBaseline: 1
30962  },
30963  italicCJKRoman: {
30964    code: 32,
30965    exclusive: false,
30966    // noCJKItalicRoman: 0     # deprecated - use CJKItalicRomanOff instead
30967    // CJKItalicRoman: 1     # deprecated - use CJKItalicRomanOn instead
30968    CJKItalicRoman: 2
30969  },
30970  caseSensitiveLayout: {
30971    code: 33,
30972    exclusive: false,
30973    caseSensitiveLayout: 0,
30974    caseSensitiveSpacing: 2
30975  },
30976  alternateKana: {
30977    code: 34,
30978    exclusive: false,
30979    alternateHorizKana: 0,
30980    alternateVertKana: 2
30981  },
30982  stylisticAlternatives: {
30983    code: 35,
30984    exclusive: false,
30985    noStylisticAlternates: 0,
30986    stylisticAltOne: 2,
30987    stylisticAltTwo: 4,
30988    stylisticAltThree: 6,
30989    stylisticAltFour: 8,
30990    stylisticAltFive: 10,
30991    stylisticAltSix: 12,
30992    stylisticAltSeven: 14,
30993    stylisticAltEight: 16,
30994    stylisticAltNine: 18,
30995    stylisticAltTen: 20,
30996    stylisticAltEleven: 22,
30997    stylisticAltTwelve: 24,
30998    stylisticAltThirteen: 26,
30999    stylisticAltFourteen: 28,
31000    stylisticAltFifteen: 30,
31001    stylisticAltSixteen: 32,
31002    stylisticAltSeventeen: 34,
31003    stylisticAltEighteen: 36,
31004    stylisticAltNineteen: 38,
31005    stylisticAltTwenty: 40
31006  },
31007  contextualAlternates: {
31008    code: 36,
31009    exclusive: false,
31010    contextualAlternates: 0,
31011    swashAlternates: 2,
31012    contextualSwashAlternates: 4
31013  },
31014  lowerCase: {
31015    code: 37,
31016    exclusive: true,
31017    defaultLowerCase: 0,
31018    lowerCaseSmallCaps: 1,
31019    lowerCasePetiteCaps: 2
31020  },
31021  upperCase: {
31022    code: 38,
31023    exclusive: true,
31024    defaultUpperCase: 0,
31025    upperCaseSmallCaps: 1,
31026    upperCasePetiteCaps: 2
31027  },
31028  languageTag: { // indices into ltag table
31029    code: 39,
31030    exclusive: true
31031  },
31032  CJKRomanSpacing: {
31033    code: 103,
31034    exclusive: true,
31035    halfWidthCJKRoman: 0,
31036    proportionalCJKRoman: 1,
31037    defaultCJKRoman: 2,
31038    fullWidthCJKRoman: 3
31039  }
31040};
31041
31042var feature = function feature(name, selector) {
31043  return [features[name].code, features[name][selector]];
31044};
31045
31046var OTMapping = {
31047  rlig: feature('ligatures', 'requiredLigatures'),
31048  clig: feature('ligatures', 'contextualLigatures'),
31049  dlig: feature('ligatures', 'rareLigatures'),
31050  hlig: feature('ligatures', 'historicalLigatures'),
31051  liga: feature('ligatures', 'commonLigatures'),
31052  hist: feature('ligatures', 'historicalLigatures'), // ??
31053
31054  smcp: feature('lowerCase', 'lowerCaseSmallCaps'),
31055  pcap: feature('lowerCase', 'lowerCasePetiteCaps'),
31056
31057  frac: feature('fractions', 'diagonalFractions'),
31058  dnom: feature('fractions', 'diagonalFractions'), // ??
31059  numr: feature('fractions', 'diagonalFractions'), // ??
31060  afrc: feature('fractions', 'verticalFractions'),
31061  // aalt
31062  // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?
31063  // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?
31064  // unic, vatu, vhal, vjmo, vpal, vrt2
31065  // dist -> trak table?
31066  // kern, vkrn -> kern table
31067  // lfbd + opbd + rtbd -> opbd table?
31068  // mark, mkmk -> acnt table?
31069  // locl -> languageTag + ltag table
31070
31071  case: feature('caseSensitiveLayout', 'caseSensitiveLayout'), // also caseSensitiveSpacing
31072  ccmp: feature('unicodeDecomposition', 'canonicalComposition'), // compatibilityComposition?
31073  cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), // guess..., probably not given below
31074  valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),
31075  swsh: feature('contextualAlternates', 'swashAlternates'),
31076  cswh: feature('contextualAlternates', 'contextualSwashAlternates'),
31077  curs: feature('cursiveConnection', 'cursive'), // ??
31078  c2pc: feature('upperCase', 'upperCasePetiteCaps'),
31079  c2sc: feature('upperCase', 'upperCaseSmallCaps'),
31080
31081  init: feature('smartSwash', 'wordInitialSwashes'), // ??
31082  fin2: feature('smartSwash', 'wordFinalSwashes'), // ??
31083  medi: feature('smartSwash', 'nonFinalSwashes'), // ??
31084  med2: feature('smartSwash', 'nonFinalSwashes'), // ??
31085  fin3: feature('smartSwash', 'wordFinalSwashes'), // ??
31086  fina: feature('smartSwash', 'wordFinalSwashes'), // ??
31087
31088  pkna: feature('kanaSpacing', 'proportionalKana'),
31089  half: feature('textSpacing', 'halfWidthText'), // also HalfWidthCJKRoman, HalfWidthIdeographs?
31090  halt: feature('textSpacing', 'altHalfWidthText'),
31091
31092  hkna: feature('alternateKana', 'alternateHorizKana'),
31093  vkna: feature('alternateKana', 'alternateVertKana'),
31094  // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated
31095
31096  ital: feature('italicCJKRoman', 'CJKItalicRoman'),
31097  lnum: feature('numberCase', 'upperCaseNumbers'),
31098  onum: feature('numberCase', 'lowerCaseNumbers'),
31099  mgrk: feature('mathematicalExtras', 'mathematicalGreek'),
31100
31101  // nalt: not enough info. what type of annotation?
31102  // ornm: ditto, which ornament style?
31103
31104  calt: feature('contextualAlternates', 'contextualAlternates'), // or more?
31105  vrt2: feature('verticalSubstitution', 'substituteVerticalForms'), // oh... below?
31106  vert: feature('verticalSubstitution', 'substituteVerticalForms'),
31107  tnum: feature('numberSpacing', 'monospacedNumbers'),
31108  pnum: feature('numberSpacing', 'proportionalNumbers'),
31109  sups: feature('verticalPosition', 'superiors'),
31110  subs: feature('verticalPosition', 'inferiors'),
31111  ordn: feature('verticalPosition', 'ordinals'),
31112  pwid: feature('textSpacing', 'proportionalText'),
31113  hwid: feature('textSpacing', 'halfWidthText'),
31114  qwid: feature('textSpacing', 'quarterWidthText'), // also QuarterWidthNumbers?
31115  twid: feature('textSpacing', 'thirdWidthText'), // also ThirdWidthNumbers?
31116  fwid: feature('textSpacing', 'proportionalText'), //??
31117  palt: feature('textSpacing', 'altProportionalText'),
31118  trad: feature('characterShape', 'traditionalCharacters'),
31119  smpl: feature('characterShape', 'simplifiedCharacters'),
31120  jp78: feature('characterShape', 'JIS1978Characters'),
31121  jp83: feature('characterShape', 'JIS1983Characters'),
31122  jp90: feature('characterShape', 'JIS1990Characters'),
31123  jp04: feature('characterShape', 'JIS2004Characters'),
31124  expt: feature('characterShape', 'expertCharacters'),
31125  hojo: feature('characterShape', 'hojoCharacters'),
31126  nlck: feature('characterShape', 'NLCCharacters'),
31127  tnam: feature('characterShape', 'traditionalNamesCharacters'),
31128  ruby: feature('rubyKana', 'rubyKana'),
31129  titl: feature('styleOptions', 'titlingCaps'),
31130  zero: feature('typographicExtras', 'slashedZero'),
31131
31132  ss01: feature('stylisticAlternatives', 'stylisticAltOne'),
31133  ss02: feature('stylisticAlternatives', 'stylisticAltTwo'),
31134  ss03: feature('stylisticAlternatives', 'stylisticAltThree'),
31135  ss04: feature('stylisticAlternatives', 'stylisticAltFour'),
31136  ss05: feature('stylisticAlternatives', 'stylisticAltFive'),
31137  ss06: feature('stylisticAlternatives', 'stylisticAltSix'),
31138  ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),
31139  ss08: feature('stylisticAlternatives', 'stylisticAltEight'),
31140  ss09: feature('stylisticAlternatives', 'stylisticAltNine'),
31141  ss10: feature('stylisticAlternatives', 'stylisticAltTen'),
31142  ss11: feature('stylisticAlternatives', 'stylisticAltEleven'),
31143  ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'),
31144  ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'),
31145  ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'),
31146  ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'),
31147  ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'),
31148  ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'),
31149  ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'),
31150  ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'),
31151  ss20: feature('stylisticAlternatives', 'stylisticAltTwenty')
31152};
31153
31154// salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose
31155
31156// Add cv01-cv99 features
31157for (var i = 1; i <= 99; i++) {
31158  OTMapping['cv' + ('00' + i).slice(-2)] = [features.characterAlternatives.code, i];
31159}
31160
31161// create inverse mapping
31162var AATMapping = {};
31163for (var ot in OTMapping) {
31164  var aat = OTMapping[ot];
31165  if (AATMapping[aat[0]] == null) {
31166    AATMapping[aat[0]] = {};
31167  }
31168
31169  AATMapping[aat[0]][aat[1]] = ot;
31170}
31171
31172// Maps an array of OpenType features to AAT features
31173// in the form of {featureType:{featureSetting:true}}
31174function mapOTToAAT(features) {
31175  var res = {};
31176  for (var k in features) {
31177    var r = void 0;
31178    if (r = OTMapping[k]) {
31179      if (res[r[0]] == null) {
31180        res[r[0]] = {};
31181      }
31182
31183      res[r[0]][r[1]] = features[k];
31184    }
31185  }
31186
31187  return res;
31188}
31189
31190// Maps strings in a [featureType, featureSetting]
31191// to their equivalent number codes
31192function mapFeatureStrings(f) {
31193  var type = f[0],
31194      setting = f[1];
31195
31196  if (isNaN(type)) {
31197    var typeCode = features[type] && features[type].code;
31198  } else {
31199    var typeCode = type;
31200  }
31201
31202  if (isNaN(setting)) {
31203    var settingCode = features[type] && features[type][setting];
31204  } else {
31205    var settingCode = setting;
31206  }
31207
31208  return [typeCode, settingCode];
31209}
31210
31211// Maps AAT features to an array of OpenType features
31212// Supports both arrays in the form of [[featureType, featureSetting]]
31213// and objects in the form of {featureType:{featureSetting:true}}
31214// featureTypes and featureSettings can be either strings or number codes
31215function mapAATToOT(features) {
31216  var res = {};
31217  if (Array.isArray(features)) {
31218    for (var k = 0; k < features.length; k++) {
31219      var r = void 0;
31220      var f = mapFeatureStrings(features[k]);
31221      if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) {
31222        res[r] = true;
31223      }
31224    }
31225  } else if ((typeof features === 'undefined' ? 'undefined' : _typeof(features)) === 'object') {
31226    for (var type in features) {
31227      var _feature = features[type];
31228      for (var setting in _feature) {
31229        var _r = void 0;
31230        var _f = mapFeatureStrings([type, setting]);
31231        if (_feature[setting] && (_r = AATMapping[_f[0]] && AATMapping[_f[0]][_f[1]])) {
31232          res[_r] = true;
31233        }
31234      }
31235    }
31236  }
31237
31238  return _Object$keys(res);
31239}
31240
31241var _class$3;
31242function _applyDecoratedDescriptor$3(target, property, decorators, descriptor, context) {
31243  var desc = {};
31244  Object['ke' + 'ys'](descriptor).forEach(function (key) {
31245    desc[key] = descriptor[key];
31246  });
31247  desc.enumerable = !!desc.enumerable;
31248  desc.configurable = !!desc.configurable;
31249
31250  if ('value' in desc || desc.initializer) {
31251    desc.writable = true;
31252  }
31253
31254  desc = decorators.slice().reverse().reduce(function (desc, decorator) {
31255    return decorator(target, property, desc) || desc;
31256  }, desc);
31257
31258  if (context && desc.initializer !== void 0) {
31259    desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
31260    desc.initializer = undefined;
31261  }
31262
31263  if (desc.initializer === void 0) {
31264    Object['define' + 'Property'](target, property, desc);
31265    desc = null;
31266  }
31267
31268  return desc;
31269}
31270
31271var AATLookupTable = (_class$3 = function () {
31272  function AATLookupTable(table) {
31273    _classCallCheck(this, AATLookupTable);
31274
31275    this.table = table;
31276  }
31277
31278  AATLookupTable.prototype.lookup = function lookup(glyph) {
31279    switch (this.table.version) {
31280      case 0:
31281        // simple array format
31282        return this.table.values.getItem(glyph);
31283
31284      case 2: // segment format
31285      case 4:
31286        {
31287          var min = 0;
31288          var max = this.table.binarySearchHeader.nUnits - 1;
31289
31290          while (min <= max) {
31291            var mid = min + max >> 1;
31292            var seg = this.table.segments[mid];
31293
31294            // special end of search value
31295            if (seg.firstGlyph === 0xffff) {
31296              return null;
31297            }
31298
31299            if (glyph < seg.firstGlyph) {
31300              max = mid - 1;
31301            } else if (glyph > seg.lastGlyph) {
31302              min = mid + 1;
31303            } else {
31304              if (this.table.version === 2) {
31305                return seg.value;
31306              } else {
31307                return seg.values[glyph - seg.firstGlyph];
31308              }
31309            }
31310          }
31311
31312          return null;
31313        }
31314
31315      case 6:
31316        {
31317          // lookup single
31318          var _min = 0;
31319          var _max = this.table.binarySearchHeader.nUnits - 1;
31320
31321          while (_min <= _max) {
31322            var mid = _min + _max >> 1;
31323            var seg = this.table.segments[mid];
31324
31325            // special end of search value
31326            if (seg.glyph === 0xffff) {
31327              return null;
31328            }
31329
31330            if (glyph < seg.glyph) {
31331              _max = mid - 1;
31332            } else if (glyph > seg.glyph) {
31333              _min = mid + 1;
31334            } else {
31335              return seg.value;
31336            }
31337          }
31338
31339          return null;
31340        }
31341
31342      case 8:
31343        // lookup trimmed
31344        return this.table.values[glyph - this.table.firstGlyph];
31345
31346      default:
31347        throw new Error('Unknown lookup table format: ' + this.table.version);
31348    }
31349  };
31350
31351  AATLookupTable.prototype.glyphsForValue = function glyphsForValue(classValue) {
31352    var res = [];
31353
31354    switch (this.table.version) {
31355      case 2: // segment format
31356      case 4:
31357        {
31358          for (var _iterator = this.table.segments, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
31359            var _ref;
31360
31361            if (_isArray) {
31362              if (_i >= _iterator.length) break;
31363              _ref = _iterator[_i++];
31364            } else {
31365              _i = _iterator.next();
31366              if (_i.done) break;
31367              _ref = _i.value;
31368            }
31369
31370            var segment = _ref;
31371
31372            if (this.table.version === 2 && segment.value === classValue) {
31373              res.push.apply(res, range(segment.firstGlyph, segment.lastGlyph + 1));
31374            } else {
31375              for (var index = 0; index < segment.values.length; index++) {
31376                if (segment.values[index] === classValue) {
31377                  res.push(segment.firstGlyph + index);
31378                }
31379              }
31380            }
31381          }
31382
31383          break;
31384        }
31385
31386      case 6:
31387        {
31388          // lookup single
31389          for (var _iterator2 = this.table.segments, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
31390            var _ref2;
31391
31392            if (_isArray2) {
31393              if (_i2 >= _iterator2.length) break;
31394              _ref2 = _iterator2[_i2++];
31395            } else {
31396              _i2 = _iterator2.next();
31397              if (_i2.done) break;
31398              _ref2 = _i2.value;
31399            }
31400
31401            var _segment = _ref2;
31402
31403            if (_segment.value === classValue) {
31404              res.push(_segment.glyph);
31405            }
31406          }
31407
31408          break;
31409        }
31410
31411      case 8:
31412        {
31413          // lookup trimmed
31414          for (var i = 0; i < this.table.values.length; i++) {
31415            if (this.table.values[i] === classValue) {
31416              res.push(this.table.firstGlyph + i);
31417            }
31418          }
31419
31420          break;
31421        }
31422
31423      default:
31424        throw new Error('Unknown lookup table format: ' + this.table.version);
31425    }
31426
31427    return res;
31428  };
31429
31430  return AATLookupTable;
31431}(), (_applyDecoratedDescriptor$3(_class$3.prototype, 'glyphsForValue', [cache], _Object$getOwnPropertyDescriptor(_class$3.prototype, 'glyphsForValue'), _class$3.prototype)), _class$3);
31432
31433var START_OF_TEXT_STATE = 0;
31434var END_OF_TEXT_CLASS = 0;
31435var OUT_OF_BOUNDS_CLASS = 1;
31436var DELETED_GLYPH_CLASS = 2;
31437var DONT_ADVANCE = 0x4000;
31438
31439var AATStateMachine = function () {
31440  function AATStateMachine(stateTable) {
31441    _classCallCheck(this, AATStateMachine);
31442
31443    this.stateTable = stateTable;
31444    this.lookupTable = new AATLookupTable(stateTable.classTable);
31445  }
31446
31447  AATStateMachine.prototype.process = function process(glyphs, reverse, processEntry) {
31448    var currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?
31449    var index = reverse ? glyphs.length - 1 : 0;
31450    var dir = reverse ? -1 : 1;
31451
31452    while (dir === 1 && index <= glyphs.length || dir === -1 && index >= -1) {
31453      var glyph = null;
31454      var classCode = OUT_OF_BOUNDS_CLASS;
31455      var shouldAdvance = true;
31456
31457      if (index === glyphs.length || index === -1) {
31458        classCode = END_OF_TEXT_CLASS;
31459      } else {
31460        glyph = glyphs[index];
31461        if (glyph.id === 0xffff) {
31462          // deleted glyph
31463          classCode = DELETED_GLYPH_CLASS;
31464        } else {
31465          classCode = this.lookupTable.lookup(glyph.id);
31466          if (classCode == null) {
31467            classCode = OUT_OF_BOUNDS_CLASS;
31468          }
31469        }
31470      }
31471
31472      var row = this.stateTable.stateArray.getItem(currentState);
31473      var entryIndex = row[classCode];
31474      var entry = this.stateTable.entryTable.getItem(entryIndex);
31475
31476      if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) {
31477        processEntry(glyph, entry, index);
31478        shouldAdvance = !(entry.flags & DONT_ADVANCE);
31479      }
31480
31481      currentState = entry.newState;
31482      if (shouldAdvance) {
31483        index += dir;
31484      }
31485    }
31486
31487    return glyphs;
31488  };
31489
31490  /**
31491   * Performs a depth-first traversal of the glyph strings
31492   * represented by the state machine.
31493   */
31494
31495
31496  AATStateMachine.prototype.traverse = function traverse(opts) {
31497    var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
31498    var visited = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new _Set();
31499
31500    if (visited.has(state)) {
31501      return;
31502    }
31503
31504    visited.add(state);
31505
31506    var _stateTable = this.stateTable,
31507        nClasses = _stateTable.nClasses,
31508        stateArray = _stateTable.stateArray,
31509        entryTable = _stateTable.entryTable;
31510
31511    var row = stateArray.getItem(state);
31512
31513    // Skip predefined classes
31514    for (var classCode = 4; classCode < nClasses; classCode++) {
31515      var entryIndex = row[classCode];
31516      var entry = entryTable.getItem(entryIndex);
31517
31518      // Try all glyphs in the class
31519      for (var _iterator = this.lookupTable.glyphsForValue(classCode), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
31520        var _ref;
31521
31522        if (_isArray) {
31523          if (_i >= _iterator.length) break;
31524          _ref = _iterator[_i++];
31525        } else {
31526          _i = _iterator.next();
31527          if (_i.done) break;
31528          _ref = _i.value;
31529        }
31530
31531        var glyph = _ref;
31532
31533        if (opts.enter) {
31534          opts.enter(glyph, entry);
31535        }
31536
31537        if (entry.newState !== 0) {
31538          this.traverse(opts, entry.newState, visited);
31539        }
31540
31541        if (opts.exit) {
31542          opts.exit(glyph, entry);
31543        }
31544      }
31545    }
31546  };
31547
31548  return AATStateMachine;
31549}();
31550
31551var _class$2;
31552function _applyDecoratedDescriptor$2(target, property, decorators, descriptor, context) {
31553  var desc = {};
31554  Object['ke' + 'ys'](descriptor).forEach(function (key) {
31555    desc[key] = descriptor[key];
31556  });
31557  desc.enumerable = !!desc.enumerable;
31558  desc.configurable = !!desc.configurable;
31559
31560  if ('value' in desc || desc.initializer) {
31561    desc.writable = true;
31562  }
31563
31564  desc = decorators.slice().reverse().reduce(function (desc, decorator) {
31565    return decorator(target, property, desc) || desc;
31566  }, desc);
31567
31568  if (context && desc.initializer !== void 0) {
31569    desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
31570    desc.initializer = undefined;
31571  }
31572
31573  if (desc.initializer === void 0) {
31574    Object['define' + 'Property'](target, property, desc);
31575    desc = null;
31576  }
31577
31578  return desc;
31579}
31580
31581// indic replacement flags
31582var MARK_FIRST = 0x8000;
31583var MARK_LAST = 0x2000;
31584var VERB = 0x000F;
31585
31586// contextual substitution and glyph insertion flag
31587var SET_MARK = 0x8000;
31588
31589// ligature entry flags
31590var SET_COMPONENT = 0x8000;
31591var PERFORM_ACTION = 0x2000;
31592
31593// ligature action masks
31594var LAST_MASK = 0x80000000;
31595var STORE_MASK = 0x40000000;
31596var OFFSET_MASK = 0x3FFFFFFF;
31597
31598var REVERSE_DIRECTION = 0x400000;
31599var CURRENT_INSERT_BEFORE = 0x0800;
31600var MARKED_INSERT_BEFORE = 0x0400;
31601var CURRENT_INSERT_COUNT = 0x03E0;
31602var MARKED_INSERT_COUNT = 0x001F;
31603
31604var AATMorxProcessor = (_class$2 = function () {
31605  function AATMorxProcessor(font) {
31606    _classCallCheck(this, AATMorxProcessor);
31607
31608    this.processIndicRearragement = this.processIndicRearragement.bind(this);
31609    this.processContextualSubstitution = this.processContextualSubstitution.bind(this);
31610    this.processLigature = this.processLigature.bind(this);
31611    this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);
31612    this.processGlyphInsertion = this.processGlyphInsertion.bind(this);
31613    this.font = font;
31614    this.morx = font.morx;
31615    this.inputCache = null;
31616  }
31617
31618  // Processes an array of glyphs and applies the specified features
31619  // Features should be in the form of {featureType:{featureSetting:true}}
31620
31621
31622  AATMorxProcessor.prototype.process = function process(glyphs) {
31623    var features = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
31624
31625    for (var _iterator = this.morx.chains, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
31626      var _ref;
31627
31628      if (_isArray) {
31629        if (_i >= _iterator.length) break;
31630        _ref = _iterator[_i++];
31631      } else {
31632        _i = _iterator.next();
31633        if (_i.done) break;
31634        _ref = _i.value;
31635      }
31636
31637      var chain = _ref;
31638
31639      var flags = chain.defaultFlags;
31640
31641      // enable/disable the requested features
31642      for (var _iterator2 = chain.features, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
31643        var _ref2;
31644
31645        if (_isArray2) {
31646          if (_i2 >= _iterator2.length) break;
31647          _ref2 = _iterator2[_i2++];
31648        } else {
31649          _i2 = _iterator2.next();
31650          if (_i2.done) break;
31651          _ref2 = _i2.value;
31652        }
31653
31654        var feature = _ref2;
31655
31656        var f = void 0;
31657        if ((f = features[feature.featureType]) && f[feature.featureSetting]) {
31658          flags &= feature.disableFlags;
31659          flags |= feature.enableFlags;
31660        }
31661      }
31662
31663      for (var _iterator3 = chain.subtables, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
31664        var _ref3;
31665
31666        if (_isArray3) {
31667          if (_i3 >= _iterator3.length) break;
31668          _ref3 = _iterator3[_i3++];
31669        } else {
31670          _i3 = _iterator3.next();
31671          if (_i3.done) break;
31672          _ref3 = _i3.value;
31673        }
31674
31675        var subtable = _ref3;
31676
31677        if (subtable.subFeatureFlags & flags) {
31678          this.processSubtable(subtable, glyphs);
31679        }
31680      }
31681    }
31682
31683    // remove deleted glyphs
31684    var index = glyphs.length - 1;
31685    while (index >= 0) {
31686      if (glyphs[index].id === 0xffff) {
31687        glyphs.splice(index, 1);
31688      }
31689
31690      index--;
31691    }
31692
31693    return glyphs;
31694  };
31695
31696  AATMorxProcessor.prototype.processSubtable = function processSubtable(subtable, glyphs) {
31697    this.subtable = subtable;
31698    this.glyphs = glyphs;
31699    if (this.subtable.type === 4) {
31700      this.processNoncontextualSubstitutions(this.subtable, this.glyphs);
31701      return;
31702    }
31703
31704    this.ligatureStack = [];
31705    this.markedGlyph = null;
31706    this.firstGlyph = null;
31707    this.lastGlyph = null;
31708    this.markedIndex = null;
31709
31710    var stateMachine = this.getStateMachine(subtable);
31711    var process = this.getProcessor();
31712
31713    var reverse = !!(this.subtable.coverage & REVERSE_DIRECTION);
31714    return stateMachine.process(this.glyphs, reverse, process);
31715  };
31716
31717  AATMorxProcessor.prototype.getStateMachine = function getStateMachine(subtable) {
31718    return new AATStateMachine(subtable.table.stateTable);
31719  };
31720
31721  AATMorxProcessor.prototype.getProcessor = function getProcessor() {
31722    switch (this.subtable.type) {
31723      case 0:
31724        return this.processIndicRearragement;
31725      case 1:
31726        return this.processContextualSubstitution;
31727      case 2:
31728        return this.processLigature;
31729      case 4:
31730        return this.processNoncontextualSubstitutions;
31731      case 5:
31732        return this.processGlyphInsertion;
31733      default:
31734        throw new Error('Invalid morx subtable type: ' + this.subtable.type);
31735    }
31736  };
31737
31738  AATMorxProcessor.prototype.processIndicRearragement = function processIndicRearragement(glyph, entry, index) {
31739    if (entry.flags & MARK_FIRST) {
31740      this.firstGlyph = index;
31741    }
31742
31743    if (entry.flags & MARK_LAST) {
31744      this.lastGlyph = index;
31745    }
31746
31747    reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph);
31748  };
31749
31750  AATMorxProcessor.prototype.processContextualSubstitution = function processContextualSubstitution(glyph, entry, index) {
31751    var subsitutions = this.subtable.table.substitutionTable.items;
31752    if (entry.markIndex !== 0xffff) {
31753      var lookup = subsitutions.getItem(entry.markIndex);
31754      var lookupTable = new AATLookupTable(lookup);
31755      glyph = this.glyphs[this.markedGlyph];
31756      var gid = lookupTable.lookup(glyph.id);
31757      if (gid) {
31758        this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);
31759      }
31760    }
31761
31762    if (entry.currentIndex !== 0xffff) {
31763      var _lookup = subsitutions.getItem(entry.currentIndex);
31764      var _lookupTable = new AATLookupTable(_lookup);
31765      glyph = this.glyphs[index];
31766      var gid = _lookupTable.lookup(glyph.id);
31767      if (gid) {
31768        this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);
31769      }
31770    }
31771
31772    if (entry.flags & SET_MARK) {
31773      this.markedGlyph = index;
31774    }
31775  };
31776
31777  AATMorxProcessor.prototype.processLigature = function processLigature(glyph, entry, index) {
31778    if (entry.flags & SET_COMPONENT) {
31779      this.ligatureStack.push(index);
31780    }
31781
31782    if (entry.flags & PERFORM_ACTION) {
31783      var _ligatureStack;
31784
31785      var actions = this.subtable.table.ligatureActions;
31786      var components = this.subtable.table.components;
31787      var ligatureList = this.subtable.table.ligatureList;
31788
31789      var actionIndex = entry.action;
31790      var last = false;
31791      var ligatureIndex = 0;
31792      var codePoints = [];
31793      var ligatureGlyphs = [];
31794
31795      while (!last) {
31796        var _codePoints;
31797
31798        var componentGlyph = this.ligatureStack.pop();
31799        (_codePoints = codePoints).unshift.apply(_codePoints, this.glyphs[componentGlyph].codePoints);
31800
31801        var action = actions.getItem(actionIndex++);
31802        last = !!(action & LAST_MASK);
31803        var store = !!(action & STORE_MASK);
31804        var offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits
31805        offset += this.glyphs[componentGlyph].id;
31806
31807        var component = components.getItem(offset);
31808        ligatureIndex += component;
31809
31810        if (last || store) {
31811          var ligatureEntry = ligatureList.getItem(ligatureIndex);
31812          this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);
31813          ligatureGlyphs.push(componentGlyph);
31814          ligatureIndex = 0;
31815          codePoints = [];
31816        } else {
31817          this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);
31818        }
31819      }
31820
31821      // Put ligature glyph indexes back on the stack
31822      (_ligatureStack = this.ligatureStack).push.apply(_ligatureStack, ligatureGlyphs);
31823    }
31824  };
31825
31826  AATMorxProcessor.prototype.processNoncontextualSubstitutions = function processNoncontextualSubstitutions(subtable, glyphs, index) {
31827    var lookupTable = new AATLookupTable(subtable.table.lookupTable);
31828
31829    for (index = 0; index < glyphs.length; index++) {
31830      var glyph = glyphs[index];
31831      if (glyph.id !== 0xffff) {
31832        var gid = lookupTable.lookup(glyph.id);
31833        if (gid) {
31834          // 0 means do nothing
31835          glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);
31836        }
31837      }
31838    }
31839  };
31840
31841  AATMorxProcessor.prototype._insertGlyphs = function _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {
31842    var _glyphs;
31843
31844    var insertions = [];
31845    while (count--) {
31846      var gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);
31847      insertions.push(this.font.getGlyph(gid));
31848    }
31849
31850    if (!isBefore) {
31851      glyphIndex++;
31852    }
31853
31854    (_glyphs = this.glyphs).splice.apply(_glyphs, [glyphIndex, 0].concat(insertions));
31855  };
31856
31857  AATMorxProcessor.prototype.processGlyphInsertion = function processGlyphInsertion(glyph, entry, index) {
31858    if (entry.flags & SET_MARK) {
31859      this.markedIndex = index;
31860    }
31861
31862    if (entry.markedInsertIndex !== 0xffff) {
31863      var count = (entry.flags & MARKED_INSERT_COUNT) >>> 5;
31864      var isBefore = !!(entry.flags & MARKED_INSERT_BEFORE);
31865      this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);
31866    }
31867
31868    if (entry.currentInsertIndex !== 0xffff) {
31869      var _count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5;
31870      var _isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE);
31871      this._insertGlyphs(index, entry.currentInsertIndex, _count, _isBefore);
31872    }
31873  };
31874
31875  AATMorxProcessor.prototype.getSupportedFeatures = function getSupportedFeatures() {
31876    var features = [];
31877    for (var _iterator4 = this.morx.chains, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _getIterator(_iterator4);;) {
31878      var _ref4;
31879
31880      if (_isArray4) {
31881        if (_i4 >= _iterator4.length) break;
31882        _ref4 = _iterator4[_i4++];
31883      } else {
31884        _i4 = _iterator4.next();
31885        if (_i4.done) break;
31886        _ref4 = _i4.value;
31887      }
31888
31889      var chain = _ref4;
31890
31891      for (var _iterator5 = chain.features, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _getIterator(_iterator5);;) {
31892        var _ref5;
31893
31894        if (_isArray5) {
31895          if (_i5 >= _iterator5.length) break;
31896          _ref5 = _iterator5[_i5++];
31897        } else {
31898          _i5 = _iterator5.next();
31899          if (_i5.done) break;
31900          _ref5 = _i5.value;
31901        }
31902
31903        var feature = _ref5;
31904
31905        features.push([feature.featureType, feature.featureSetting]);
31906      }
31907    }
31908
31909    return features;
31910  };
31911
31912  AATMorxProcessor.prototype.generateInputs = function generateInputs(gid) {
31913    if (!this.inputCache) {
31914      this.generateInputCache();
31915    }
31916
31917    return this.inputCache[gid] || [];
31918  };
31919
31920  AATMorxProcessor.prototype.generateInputCache = function generateInputCache() {
31921    this.inputCache = {};
31922
31923    for (var _iterator6 = this.morx.chains, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _getIterator(_iterator6);;) {
31924      var _ref6;
31925
31926      if (_isArray6) {
31927        if (_i6 >= _iterator6.length) break;
31928        _ref6 = _iterator6[_i6++];
31929      } else {
31930        _i6 = _iterator6.next();
31931        if (_i6.done) break;
31932        _ref6 = _i6.value;
31933      }
31934
31935      var chain = _ref6;
31936
31937      var flags = chain.defaultFlags;
31938
31939      for (var _iterator7 = chain.subtables, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _getIterator(_iterator7);;) {
31940        var _ref7;
31941
31942        if (_isArray7) {
31943          if (_i7 >= _iterator7.length) break;
31944          _ref7 = _iterator7[_i7++];
31945        } else {
31946          _i7 = _iterator7.next();
31947          if (_i7.done) break;
31948          _ref7 = _i7.value;
31949        }
31950
31951        var subtable = _ref7;
31952
31953        if (subtable.subFeatureFlags & flags) {
31954          this.generateInputsForSubtable(subtable);
31955        }
31956      }
31957    }
31958  };
31959
31960  AATMorxProcessor.prototype.generateInputsForSubtable = function generateInputsForSubtable(subtable) {
31961    var _this = this;
31962
31963    // Currently, only supporting ligature subtables.
31964    if (subtable.type !== 2) {
31965      return;
31966    }
31967
31968    var reverse = !!(subtable.coverage & REVERSE_DIRECTION);
31969    if (reverse) {
31970      throw new Error('Reverse subtable, not supported.');
31971    }
31972
31973    this.subtable = subtable;
31974    this.ligatureStack = [];
31975
31976    var stateMachine = this.getStateMachine(subtable);
31977    var process = this.getProcessor();
31978
31979    var input = [];
31980    var stack = [];
31981    this.glyphs = [];
31982
31983    stateMachine.traverse({
31984      enter: function enter(glyph, entry) {
31985        var glyphs = _this.glyphs;
31986        stack.push({
31987          glyphs: glyphs.slice(),
31988          ligatureStack: _this.ligatureStack.slice()
31989        });
31990
31991        // Add glyph to input and glyphs to process.
31992        var g = _this.font.getGlyph(glyph);
31993        input.push(g);
31994        glyphs.push(input[input.length - 1]);
31995
31996        // Process ligature substitution
31997        process(glyphs[glyphs.length - 1], entry, glyphs.length - 1);
31998
31999        // Add input to result if only one matching (non-deleted) glyph remains.
32000        var count = 0;
32001        var found = 0;
32002        for (var i = 0; i < glyphs.length && count <= 1; i++) {
32003          if (glyphs[i].id !== 0xffff) {
32004            count++;
32005            found = glyphs[i].id;
32006          }
32007        }
32008
32009        if (count === 1) {
32010          var result = input.map(function (g) {
32011            return g.id;
32012          });
32013          var _cache = _this.inputCache[found];
32014          if (_cache) {
32015            _cache.push(result);
32016          } else {
32017            _this.inputCache[found] = [result];
32018          }
32019        }
32020      },
32021
32022      exit: function exit() {
32023        var _stack$pop = stack.pop();
32024
32025        _this.glyphs = _stack$pop.glyphs;
32026        _this.ligatureStack = _stack$pop.ligatureStack;
32027
32028        input.pop();
32029      }
32030    });
32031  };
32032
32033  return AATMorxProcessor;
32034}(), (_applyDecoratedDescriptor$2(_class$2.prototype, 'getStateMachine', [cache], _Object$getOwnPropertyDescriptor(_class$2.prototype, 'getStateMachine'), _class$2.prototype)), _class$2);
32035
32036function swap(glyphs, rangeA, rangeB) {
32037  var reverseA = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
32038  var reverseB = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
32039
32040  var end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);
32041  if (reverseB) {
32042    end.reverse();
32043  }
32044
32045  var start = glyphs.splice.apply(glyphs, [rangeA[0], rangeA[1]].concat(end));
32046  if (reverseA) {
32047    start.reverse();
32048  }
32049
32050  glyphs.splice.apply(glyphs, [rangeB[0] - (rangeA[1] - 1), 0].concat(start));
32051  return glyphs;
32052}
32053
32054function reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {
32055  var length = lastGlyph - firstGlyph + 1;
32056  switch (verb) {
32057    case 0:
32058      // no change
32059      return glyphs;
32060
32061    case 1:
32062      // Ax => xA
32063      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]);
32064
32065    case 2:
32066      // xD => Dx
32067      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]);
32068
32069    case 3:
32070      // AxD => DxA
32071      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]);
32072
32073    case 4:
32074      // ABx => xAB
32075      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]);
32076
32077    case 5:
32078      // ABx => xBA
32079      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false);
32080
32081    case 6:
32082      // xCD => CDx
32083      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]);
32084
32085    case 7:
32086      // xCD => DCx
32087      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true);
32088
32089    case 8:
32090      // AxCD => CDxA
32091      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]);
32092
32093    case 9:
32094      // AxCD => DCxA
32095      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true);
32096
32097    case 10:
32098      // ABxD => DxAB
32099      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]);
32100
32101    case 11:
32102      // ABxD => DxBA
32103      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false);
32104
32105    case 12:
32106      // ABxCD => CDxAB
32107      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]);
32108
32109    case 13:
32110      // ABxCD => CDxBA
32111      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false);
32112
32113    case 14:
32114      // ABxCD => DCxAB
32115      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true);
32116
32117    case 15:
32118      // ABxCD => DCxBA
32119      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true);
32120
32121    default:
32122      throw new Error('Unknown verb: ' + verb);
32123  }
32124}
32125
32126var AATLayoutEngine = function () {
32127  function AATLayoutEngine(font) {
32128    _classCallCheck(this, AATLayoutEngine);
32129
32130    this.font = font;
32131    this.morxProcessor = new AATMorxProcessor(font);
32132    this.fallbackPosition = false;
32133  }
32134
32135  AATLayoutEngine.prototype.substitute = function substitute(glyphRun) {
32136    // AAT expects the glyphs to be in visual order prior to morx processing,
32137    // so reverse the glyphs if the script is right-to-left.
32138    if (glyphRun.direction === 'rtl') {
32139      glyphRun.glyphs.reverse();
32140    }
32141
32142    this.morxProcessor.process(glyphRun.glyphs, mapOTToAAT(glyphRun.features));
32143  };
32144
32145  AATLayoutEngine.prototype.getAvailableFeatures = function getAvailableFeatures(script, language) {
32146    return mapAATToOT(this.morxProcessor.getSupportedFeatures());
32147  };
32148
32149  AATLayoutEngine.prototype.stringsForGlyph = function stringsForGlyph(gid) {
32150    var glyphStrings = this.morxProcessor.generateInputs(gid);
32151    var result = new _Set();
32152
32153    for (var _iterator = glyphStrings, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
32154      var _ref;
32155
32156      if (_isArray) {
32157        if (_i >= _iterator.length) break;
32158        _ref = _iterator[_i++];
32159      } else {
32160        _i = _iterator.next();
32161        if (_i.done) break;
32162        _ref = _i.value;
32163      }
32164
32165      var glyphs = _ref;
32166
32167      this._addStrings(glyphs, 0, result, '');
32168    }
32169
32170    return result;
32171  };
32172
32173  AATLayoutEngine.prototype._addStrings = function _addStrings(glyphs, index, strings, string) {
32174    var codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);
32175
32176    for (var _iterator2 = codePoints, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
32177      var _ref2;
32178
32179      if (_isArray2) {
32180        if (_i2 >= _iterator2.length) break;
32181        _ref2 = _iterator2[_i2++];
32182      } else {
32183        _i2 = _iterator2.next();
32184        if (_i2.done) break;
32185        _ref2 = _i2.value;
32186      }
32187
32188      var codePoint = _ref2;
32189
32190      var s = string + _String$fromCodePoint(codePoint);
32191      if (index < glyphs.length - 1) {
32192        this._addStrings(glyphs, index + 1, strings, s);
32193      } else {
32194        strings.add(s);
32195      }
32196    }
32197  };
32198
32199  return AATLayoutEngine;
32200}();
32201
32202/**
32203 * ShapingPlans are used by the OpenType shapers to store which
32204 * features should by applied, and in what order to apply them.
32205 * The features are applied in groups called stages. A feature
32206 * can be applied globally to all glyphs, or locally to only
32207 * specific glyphs.
32208 *
32209 * @private
32210 */
32211
32212var ShapingPlan = function () {
32213  function ShapingPlan(font, script, direction) {
32214    _classCallCheck(this, ShapingPlan);
32215
32216    this.font = font;
32217    this.script = script;
32218    this.direction = direction;
32219    this.stages = [];
32220    this.globalFeatures = {};
32221    this.allFeatures = {};
32222  }
32223
32224  /**
32225   * Adds the given features to the last stage.
32226   * Ignores features that have already been applied.
32227   */
32228
32229
32230  ShapingPlan.prototype._addFeatures = function _addFeatures(features, global) {
32231    var stageIndex = this.stages.length - 1;
32232    var stage = this.stages[stageIndex];
32233    for (var _iterator = features, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
32234      var _ref;
32235
32236      if (_isArray) {
32237        if (_i >= _iterator.length) break;
32238        _ref = _iterator[_i++];
32239      } else {
32240        _i = _iterator.next();
32241        if (_i.done) break;
32242        _ref = _i.value;
32243      }
32244
32245      var feature = _ref;
32246
32247      if (this.allFeatures[feature] == null) {
32248        stage.push(feature);
32249        this.allFeatures[feature] = stageIndex;
32250
32251        if (global) {
32252          this.globalFeatures[feature] = true;
32253        }
32254      }
32255    }
32256  };
32257
32258  /**
32259   * Add features to the last stage
32260   */
32261
32262
32263  ShapingPlan.prototype.add = function add(arg) {
32264    var global = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
32265
32266    if (this.stages.length === 0) {
32267      this.stages.push([]);
32268    }
32269
32270    if (typeof arg === 'string') {
32271      arg = [arg];
32272    }
32273
32274    if (Array.isArray(arg)) {
32275      this._addFeatures(arg, global);
32276    } else if ((typeof arg === 'undefined' ? 'undefined' : _typeof(arg)) === 'object') {
32277      this._addFeatures(arg.global || [], true);
32278      this._addFeatures(arg.local || [], false);
32279    } else {
32280      throw new Error("Unsupported argument to ShapingPlan#add");
32281    }
32282  };
32283
32284  /**
32285   * Add a new stage
32286   */
32287
32288
32289  ShapingPlan.prototype.addStage = function addStage(arg, global) {
32290    if (typeof arg === 'function') {
32291      this.stages.push(arg, []);
32292    } else {
32293      this.stages.push([]);
32294      this.add(arg, global);
32295    }
32296  };
32297
32298  ShapingPlan.prototype.setFeatureOverrides = function setFeatureOverrides(features) {
32299    if (Array.isArray(features)) {
32300      this.add(features);
32301    } else if ((typeof features === 'undefined' ? 'undefined' : _typeof(features)) === 'object') {
32302      for (var tag in features) {
32303        if (features[tag]) {
32304          this.add(tag);
32305        } else if (this.allFeatures[tag] != null) {
32306          var stage = this.stages[this.allFeatures[tag]];
32307          stage.splice(stage.indexOf(tag), 1);
32308          delete this.allFeatures[tag];
32309          delete this.globalFeatures[tag];
32310        }
32311      }
32312    }
32313  };
32314
32315  /**
32316   * Assigns the global features to the given glyphs
32317   */
32318
32319
32320  ShapingPlan.prototype.assignGlobalFeatures = function assignGlobalFeatures(glyphs) {
32321    for (var _iterator2 = glyphs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
32322      var _ref2;
32323
32324      if (_isArray2) {
32325        if (_i2 >= _iterator2.length) break;
32326        _ref2 = _iterator2[_i2++];
32327      } else {
32328        _i2 = _iterator2.next();
32329        if (_i2.done) break;
32330        _ref2 = _i2.value;
32331      }
32332
32333      var glyph = _ref2;
32334
32335      for (var feature in this.globalFeatures) {
32336        glyph.features[feature] = true;
32337      }
32338    }
32339  };
32340
32341  /**
32342   * Executes the planned stages using the given OTProcessor
32343   */
32344
32345
32346  ShapingPlan.prototype.process = function process(processor, glyphs, positions) {
32347    for (var _iterator3 = this.stages, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
32348      var _ref3;
32349
32350      if (_isArray3) {
32351        if (_i3 >= _iterator3.length) break;
32352        _ref3 = _iterator3[_i3++];
32353      } else {
32354        _i3 = _iterator3.next();
32355        if (_i3.done) break;
32356        _ref3 = _i3.value;
32357      }
32358
32359      var stage = _ref3;
32360
32361      if (typeof stage === 'function') {
32362        if (!positions) {
32363          stage(this.font, glyphs, this);
32364        }
32365      } else if (stage.length > 0) {
32366        processor.applyFeatures(stage, glyphs, positions);
32367      }
32368    }
32369  };
32370
32371  return ShapingPlan;
32372}();
32373
32374var _class$4;
32375var _temp;
32376var VARIATION_FEATURES = ['rvrn'];
32377var COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk'];
32378var FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom'];
32379var HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern'];
32380var DIRECTIONAL_FEATURES = {
32381  ltr: ['ltra', 'ltrm'],
32382  rtl: ['rtla', 'rtlm']
32383};
32384
32385var DefaultShaper = (_temp = _class$4 = function () {
32386  function DefaultShaper() {
32387    _classCallCheck(this, DefaultShaper);
32388  }
32389
32390  DefaultShaper.plan = function plan(_plan, glyphs, features) {
32391    // Plan the features we want to apply
32392    this.planPreprocessing(_plan);
32393    this.planFeatures(_plan);
32394    this.planPostprocessing(_plan, features);
32395
32396    // Assign the global features to all the glyphs
32397    _plan.assignGlobalFeatures(glyphs);
32398
32399    // Assign local features to glyphs
32400    this.assignFeatures(_plan, glyphs);
32401  };
32402
32403  DefaultShaper.planPreprocessing = function planPreprocessing(plan) {
32404    plan.add({
32405      global: [].concat(VARIATION_FEATURES, DIRECTIONAL_FEATURES[plan.direction]),
32406      local: FRACTIONAL_FEATURES
32407    });
32408  };
32409
32410  DefaultShaper.planFeatures = function planFeatures(plan) {
32411    // Do nothing by default. Let subclasses override this.
32412  };
32413
32414  DefaultShaper.planPostprocessing = function planPostprocessing(plan, userFeatures) {
32415    plan.add([].concat(COMMON_FEATURES, HORIZONTAL_FEATURES));
32416    plan.setFeatureOverrides(userFeatures);
32417  };
32418
32419  DefaultShaper.assignFeatures = function assignFeatures(plan, glyphs) {
32420    // Enable contextual fractions
32421    for (var i = 0; i < glyphs.length; i++) {
32422      var glyph = glyphs[i];
32423      if (glyph.codePoints[0] === 0x2044) {
32424        // fraction slash
32425        var start = i;
32426        var end = i + 1;
32427
32428        // Apply numerator
32429        while (start > 0 && unicode.isDigit(glyphs[start - 1].codePoints[0])) {
32430          glyphs[start - 1].features.numr = true;
32431          glyphs[start - 1].features.frac = true;
32432          start--;
32433        }
32434
32435        // Apply denominator
32436        while (end < glyphs.length && unicode.isDigit(glyphs[end].codePoints[0])) {
32437          glyphs[end].features.dnom = true;
32438          glyphs[end].features.frac = true;
32439          end++;
32440        }
32441
32442        // Apply fraction slash
32443        glyph.features.frac = true;
32444        i = end - 1;
32445      }
32446    }
32447  };
32448
32449  return DefaultShaper;
32450}(), _class$4.zeroMarkWidths = 'AFTER_GPOS', _temp);
32451
32452var trie = new UnicodeTrie(Buffer("AAEQAAAAAAAAADGgAZUBav7t2CtPA0EUBeDZB00pin9AJZIEgyUEj0QhweDAgQOJxCBRBElQSBwSicLgkOAwnNKZ5GaY2c7uzj4o5yZfZrrbefbuIx2nSq3CGmzAWH/+K+UO7MIe7MMhHMMpnMMFXMIVXIt2t3CnP088iPqjqNN8e4Ij7Rle4LUH82rLm6i/92A+RERERERERERNmfz/89GDeRARERERzbN8ceps2Iwt9H0C9/AJ6yOlDkbTczcot5VSm8Pm1vcFWfb7+BKOLTuOd2UlTX4wGP85Eg953lWPFbnuN7PkjtLmalOWbNenkHOSa7T3KmR9MVTZ2zZkVj1kHa68MueVKH0R4zqQ44WEXLM8VjcWHP0PtKLfPzQnMtGn3W4QYf6qxFxceVI394r2xnV+1rih0fV1Vzf3fO1n3evL5J78ruvZ5ptX2Rwy92Tfb1wlEqut3U+sZ3HXOeJ7/zDrbyuP6+Zz0fqa6Nv3vhY7Yu1xWnGevmsvsUpTT/RYIe8waUH/rvHMWKFzLfN8L+rTfp645mfX7ftlnfDtYxN59w0=","base64"));
32453var FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init'];
32454
32455var ShapingClasses = {
32456  Non_Joining: 0,
32457  Left_Joining: 1,
32458  Right_Joining: 2,
32459  Dual_Joining: 3,
32460  Join_Causing: 3,
32461  ALAPH: 4,
32462  'DALATH RISH': 5,
32463  Transparent: 6
32464};
32465
32466var ISOL = 'isol';
32467var FINA = 'fina';
32468var FIN2 = 'fin2';
32469var FIN3 = 'fin3';
32470var MEDI = 'medi';
32471var MED2 = 'med2';
32472var INIT = 'init';
32473var NONE = null;
32474
32475// Each entry is [prevAction, curAction, nextState]
32476var STATE_TABLE = [
32477//   Non_Joining,        Left_Joining,       Right_Joining,     Dual_Joining,           ALAPH,            DALATH RISH
32478// State 0: prev was U,  not willing to join.
32479[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 6]],
32480
32481// State 1: prev was R or ISOL/ALAPH,  not willing to join.
32482[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN2, 5], [NONE, ISOL, 6]],
32483
32484// State 2: prev was D/L in ISOL form,  willing to join.
32485[[NONE, NONE, 0], [NONE, ISOL, 2], [INIT, FINA, 1], [INIT, FINA, 3], [INIT, FINA, 4], [INIT, FINA, 6]],
32486
32487// State 3: prev was D in FINA form,  willing to join.
32488[[NONE, NONE, 0], [NONE, ISOL, 2], [MEDI, FINA, 1], [MEDI, FINA, 3], [MEDI, FINA, 4], [MEDI, FINA, 6]],
32489
32490// State 4: prev was FINA ALAPH,  not willing to join.
32491[[NONE, NONE, 0], [NONE, ISOL, 2], [MED2, ISOL, 1], [MED2, ISOL, 2], [MED2, FIN2, 5], [MED2, ISOL, 6]],
32492
32493// State 5: prev was FIN2/FIN3 ALAPH,  not willing to join.
32494[[NONE, NONE, 0], [NONE, ISOL, 2], [ISOL, ISOL, 1], [ISOL, ISOL, 2], [ISOL, FIN2, 5], [ISOL, ISOL, 6]],
32495
32496// State 6: prev was DALATH/RISH,  not willing to join.
32497[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN3, 5], [NONE, ISOL, 6]]];
32498
32499/**
32500 * This is a shaper for Arabic, and other cursive scripts.
32501 * It uses data from ArabicShaping.txt in the Unicode database,
32502 * compiled to a UnicodeTrie by generate-data.coffee.
32503 *
32504 * The shaping state machine was ported from Harfbuzz.
32505 * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc
32506 */
32507
32508var ArabicShaper = function (_DefaultShaper) {
32509  _inherits(ArabicShaper, _DefaultShaper);
32510
32511  function ArabicShaper() {
32512    _classCallCheck(this, ArabicShaper);
32513
32514    return _possibleConstructorReturn(this, _DefaultShaper.apply(this, arguments));
32515  }
32516
32517  ArabicShaper.planFeatures = function planFeatures(plan) {
32518    plan.add(['ccmp', 'locl']);
32519    for (var i = 0; i < FEATURES.length; i++) {
32520      var feature = FEATURES[i];
32521      plan.addStage(feature, false);
32522    }
32523
32524    plan.addStage('mset');
32525  };
32526
32527  ArabicShaper.assignFeatures = function assignFeatures(plan, glyphs) {
32528    _DefaultShaper.assignFeatures.call(this, plan, glyphs);
32529
32530    var prev = -1;
32531    var state = 0;
32532    var actions = [];
32533
32534    // Apply the state machine to map glyphs to features
32535    for (var i = 0; i < glyphs.length; i++) {
32536      var curAction = void 0,
32537          prevAction = void 0;
32538      var glyph = glyphs[i];
32539      var type = getShapingClass(glyph.codePoints[0]);
32540      if (type === ShapingClasses.Transparent) {
32541        actions[i] = NONE;
32542        continue;
32543      }
32544
32545      var _STATE_TABLE$state$ty = STATE_TABLE[state][type];
32546      prevAction = _STATE_TABLE$state$ty[0];
32547      curAction = _STATE_TABLE$state$ty[1];
32548      state = _STATE_TABLE$state$ty[2];
32549
32550
32551      if (prevAction !== NONE && prev !== -1) {
32552        actions[prev] = prevAction;
32553      }
32554
32555      actions[i] = curAction;
32556      prev = i;
32557    }
32558
32559    // Apply the chosen features to their respective glyphs
32560    for (var index = 0; index < glyphs.length; index++) {
32561      var feature = void 0;
32562      var glyph = glyphs[index];
32563      if (feature = actions[index]) {
32564        glyph.features[feature] = true;
32565      }
32566    }
32567  };
32568
32569  return ArabicShaper;
32570}(DefaultShaper);
32571
32572function getShapingClass(codePoint) {
32573  var res = trie.get(codePoint);
32574  if (res) {
32575    return res - 1;
32576  }
32577
32578  var category = unicode.getCategory(codePoint);
32579  if (category === 'Mn' || category === 'Me' || category === 'Cf') {
32580    return ShapingClasses.Transparent;
32581  }
32582
32583  return ShapingClasses.Non_Joining;
32584}
32585
32586var GlyphIterator = function () {
32587  function GlyphIterator(glyphs, options) {
32588    _classCallCheck(this, GlyphIterator);
32589
32590    this.glyphs = glyphs;
32591    this.reset(options);
32592  }
32593
32594  GlyphIterator.prototype.reset = function reset() {
32595    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
32596    var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
32597
32598    this.options = options;
32599    this.flags = options.flags || {};
32600    this.markAttachmentType = options.markAttachmentType || 0;
32601    this.index = index;
32602  };
32603
32604  GlyphIterator.prototype.shouldIgnore = function shouldIgnore(glyph) {
32605    return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType;
32606  };
32607
32608  GlyphIterator.prototype.move = function move(dir) {
32609    this.index += dir;
32610    while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) {
32611      this.index += dir;
32612    }
32613
32614    if (0 > this.index || this.index >= this.glyphs.length) {
32615      return null;
32616    }
32617
32618    return this.glyphs[this.index];
32619  };
32620
32621  GlyphIterator.prototype.next = function next() {
32622    return this.move(+1);
32623  };
32624
32625  GlyphIterator.prototype.prev = function prev() {
32626    return this.move(-1);
32627  };
32628
32629  GlyphIterator.prototype.peek = function peek() {
32630    var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
32631
32632    var idx = this.index;
32633    var res = this.increment(count);
32634    this.index = idx;
32635    return res;
32636  };
32637
32638  GlyphIterator.prototype.peekIndex = function peekIndex() {
32639    var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
32640
32641    var idx = this.index;
32642    this.increment(count);
32643    var res = this.index;
32644    this.index = idx;
32645    return res;
32646  };
32647
32648  GlyphIterator.prototype.increment = function increment() {
32649    var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
32650
32651    var dir = count < 0 ? -1 : 1;
32652    count = Math.abs(count);
32653    while (count--) {
32654      this.move(dir);
32655    }
32656
32657    return this.glyphs[this.index];
32658  };
32659
32660  _createClass(GlyphIterator, [{
32661    key: "cur",
32662    get: function get() {
32663      return this.glyphs[this.index] || null;
32664    }
32665  }]);
32666
32667  return GlyphIterator;
32668}();
32669
32670var DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn'];
32671
32672var OTProcessor = function () {
32673  function OTProcessor(font, table) {
32674    _classCallCheck(this, OTProcessor);
32675
32676    this.font = font;
32677    this.table = table;
32678
32679    this.script = null;
32680    this.scriptTag = null;
32681
32682    this.language = null;
32683    this.languageTag = null;
32684
32685    this.features = {};
32686    this.lookups = {};
32687
32688    // Setup variation substitutions
32689    this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1;
32690
32691    // initialize to default script + language
32692    this.selectScript();
32693
32694    // current context (set by applyFeatures)
32695    this.glyphs = [];
32696    this.positions = []; // only used by GPOS
32697    this.ligatureID = 1;
32698    this.currentFeature = null;
32699  }
32700
32701  OTProcessor.prototype.findScript = function findScript(script) {
32702    if (this.table.scriptList == null) {
32703      return null;
32704    }
32705
32706    if (!Array.isArray(script)) {
32707      script = [script];
32708    }
32709
32710    for (var _iterator = script, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
32711      var _ref;
32712
32713      if (_isArray) {
32714        if (_i >= _iterator.length) break;
32715        _ref = _iterator[_i++];
32716      } else {
32717        _i = _iterator.next();
32718        if (_i.done) break;
32719        _ref = _i.value;
32720      }
32721
32722      var s = _ref;
32723
32724      for (var _iterator2 = this.table.scriptList, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
32725        var _ref2;
32726
32727        if (_isArray2) {
32728          if (_i2 >= _iterator2.length) break;
32729          _ref2 = _iterator2[_i2++];
32730        } else {
32731          _i2 = _iterator2.next();
32732          if (_i2.done) break;
32733          _ref2 = _i2.value;
32734        }
32735
32736        var entry = _ref2;
32737
32738        if (entry.tag === s) {
32739          return entry;
32740        }
32741      }
32742    }
32743
32744    return null;
32745  };
32746
32747  OTProcessor.prototype.selectScript = function selectScript(script, language, direction$$) {
32748    var changed = false;
32749    var entry = void 0;
32750    if (!this.script || script !== this.scriptTag) {
32751      entry = this.findScript(script);
32752      if (!entry) {
32753        entry = this.findScript(DEFAULT_SCRIPTS);
32754      }
32755
32756      if (!entry) {
32757        return this.scriptTag;
32758      }
32759
32760      this.scriptTag = entry.tag;
32761      this.script = entry.script;
32762      this.language = null;
32763      this.languageTag = null;
32764      changed = true;
32765    }
32766
32767    if (!direction$$ || direction$$ !== this.direction) {
32768      this.direction = direction$$ || direction(script);
32769    }
32770
32771    if (language && language.length < 4) {
32772      language += ' '.repeat(4 - language.length);
32773    }
32774
32775    if (!language || language !== this.languageTag) {
32776      this.language = null;
32777
32778      for (var _iterator3 = this.script.langSysRecords, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
32779        var _ref3;
32780
32781        if (_isArray3) {
32782          if (_i3 >= _iterator3.length) break;
32783          _ref3 = _iterator3[_i3++];
32784        } else {
32785          _i3 = _iterator3.next();
32786          if (_i3.done) break;
32787          _ref3 = _i3.value;
32788        }
32789
32790        var lang = _ref3;
32791
32792        if (lang.tag === language) {
32793          this.language = lang.langSys;
32794          this.languageTag = lang.tag;
32795          break;
32796        }
32797      }
32798
32799      if (!this.language) {
32800        this.language = this.script.defaultLangSys;
32801        this.languageTag = null;
32802      }
32803
32804      changed = true;
32805    }
32806
32807    // Build a feature lookup table
32808    if (changed) {
32809      this.features = {};
32810      if (this.language) {
32811        for (var _iterator4 = this.language.featureIndexes, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _getIterator(_iterator4);;) {
32812          var _ref4;
32813
32814          if (_isArray4) {
32815            if (_i4 >= _iterator4.length) break;
32816            _ref4 = _iterator4[_i4++];
32817          } else {
32818            _i4 = _iterator4.next();
32819            if (_i4.done) break;
32820            _ref4 = _i4.value;
32821          }
32822
32823          var featureIndex = _ref4;
32824
32825          var record = this.table.featureList[featureIndex];
32826          var substituteFeature = this.substituteFeatureForVariations(featureIndex);
32827          this.features[record.tag] = substituteFeature || record.feature;
32828        }
32829      }
32830    }
32831
32832    return this.scriptTag;
32833  };
32834
32835  OTProcessor.prototype.lookupsForFeatures = function lookupsForFeatures() {
32836    var userFeatures = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
32837    var exclude = arguments[1];
32838
32839    var lookups = [];
32840    for (var _iterator5 = userFeatures, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _getIterator(_iterator5);;) {
32841      var _ref5;
32842
32843      if (_isArray5) {
32844        if (_i5 >= _iterator5.length) break;
32845        _ref5 = _iterator5[_i5++];
32846      } else {
32847        _i5 = _iterator5.next();
32848        if (_i5.done) break;
32849        _ref5 = _i5.value;
32850      }
32851
32852      var tag = _ref5;
32853
32854      var feature = this.features[tag];
32855      if (!feature) {
32856        continue;
32857      }
32858
32859      for (var _iterator6 = feature.lookupListIndexes, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _getIterator(_iterator6);;) {
32860        var _ref6;
32861
32862        if (_isArray6) {
32863          if (_i6 >= _iterator6.length) break;
32864          _ref6 = _iterator6[_i6++];
32865        } else {
32866          _i6 = _iterator6.next();
32867          if (_i6.done) break;
32868          _ref6 = _i6.value;
32869        }
32870
32871        var lookupIndex = _ref6;
32872
32873        if (exclude && exclude.indexOf(lookupIndex) !== -1) {
32874          continue;
32875        }
32876
32877        lookups.push({
32878          feature: tag,
32879          index: lookupIndex,
32880          lookup: this.table.lookupList.get(lookupIndex)
32881        });
32882      }
32883    }
32884
32885    lookups.sort(function (a, b) {
32886      return a.index - b.index;
32887    });
32888    return lookups;
32889  };
32890
32891  OTProcessor.prototype.substituteFeatureForVariations = function substituteFeatureForVariations(featureIndex) {
32892    if (this.variationsIndex === -1) {
32893      return null;
32894    }
32895
32896    var record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];
32897    var substitutions = record.featureTableSubstitution.substitutions;
32898    for (var _iterator7 = substitutions, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _getIterator(_iterator7);;) {
32899      var _ref7;
32900
32901      if (_isArray7) {
32902        if (_i7 >= _iterator7.length) break;
32903        _ref7 = _iterator7[_i7++];
32904      } else {
32905        _i7 = _iterator7.next();
32906        if (_i7.done) break;
32907        _ref7 = _i7.value;
32908      }
32909
32910      var substitution = _ref7;
32911
32912      if (substitution.featureIndex === featureIndex) {
32913        return substitution.alternateFeatureTable;
32914      }
32915    }
32916
32917    return null;
32918  };
32919
32920  OTProcessor.prototype.findVariationsIndex = function findVariationsIndex(coords) {
32921    var variations = this.table.featureVariations;
32922    if (!variations) {
32923      return -1;
32924    }
32925
32926    var records = variations.featureVariationRecords;
32927    for (var i = 0; i < records.length; i++) {
32928      var conditions = records[i].conditionSet.conditionTable;
32929      if (this.variationConditionsMatch(conditions, coords)) {
32930        return i;
32931      }
32932    }
32933
32934    return -1;
32935  };
32936
32937  OTProcessor.prototype.variationConditionsMatch = function variationConditionsMatch(conditions, coords) {
32938    return conditions.every(function (condition) {
32939      var coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;
32940      return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;
32941    });
32942  };
32943
32944  OTProcessor.prototype.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) {
32945    var lookups = this.lookupsForFeatures(userFeatures);
32946    this.applyLookups(lookups, glyphs, advances);
32947  };
32948
32949  OTProcessor.prototype.applyLookups = function applyLookups(lookups, glyphs, positions) {
32950    this.glyphs = glyphs;
32951    this.positions = positions;
32952    this.glyphIterator = new GlyphIterator(glyphs);
32953
32954    for (var _iterator8 = lookups, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _getIterator(_iterator8);;) {
32955      var _ref8;
32956
32957      if (_isArray8) {
32958        if (_i8 >= _iterator8.length) break;
32959        _ref8 = _iterator8[_i8++];
32960      } else {
32961        _i8 = _iterator8.next();
32962        if (_i8.done) break;
32963        _ref8 = _i8.value;
32964      }
32965
32966      var _ref9 = _ref8,
32967          feature = _ref9.feature,
32968          lookup = _ref9.lookup;
32969
32970      this.currentFeature = feature;
32971      this.glyphIterator.reset(lookup.flags);
32972
32973      while (this.glyphIterator.index < glyphs.length) {
32974        if (!(feature in this.glyphIterator.cur.features)) {
32975          this.glyphIterator.next();
32976          continue;
32977        }
32978
32979        for (var _iterator9 = lookup.subTables, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _getIterator(_iterator9);;) {
32980          var _ref10;
32981
32982          if (_isArray9) {
32983            if (_i9 >= _iterator9.length) break;
32984            _ref10 = _iterator9[_i9++];
32985          } else {
32986            _i9 = _iterator9.next();
32987            if (_i9.done) break;
32988            _ref10 = _i9.value;
32989          }
32990
32991          var table = _ref10;
32992
32993          var res = this.applyLookup(lookup.lookupType, table);
32994          if (res) {
32995            break;
32996          }
32997        }
32998
32999        this.glyphIterator.next();
33000      }
33001    }
33002  };
33003
33004  OTProcessor.prototype.applyLookup = function applyLookup(lookup, table) {
33005    throw new Error("applyLookup must be implemented by subclasses");
33006  };
33007
33008  OTProcessor.prototype.applyLookupList = function applyLookupList(lookupRecords) {
33009    var options = this.glyphIterator.options;
33010    var glyphIndex = this.glyphIterator.index;
33011
33012    for (var _iterator10 = lookupRecords, _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 
33012: _getIterator(_iterator10);;) {
33013      var _ref11;
33014
33015      if (_isArray10) {
33016        if (_i10 >= _iterator10.length) break;
33017        _ref11 = _iterator10[_i10++];
33018      } else {
33019        _i10 = _iterator10.next();
33020        if (_i10.done) break;
33021        _ref11 = _i10.value;
33022      }
33023
33024      var lookupRecord = _ref11;
33025
33026      // Reset flags and find glyph index for this lookup record
33027      this.glyphIterator.reset(options, glyphIndex);
33028      this.glyphIterator.increment(lookupRecord.sequenceIndex);
33029
33030      // Get the lookup and setup flags for subtables
33031      var lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);
33032      this.glyphIterator.reset(lookup.flags, this.glyphIterator.index);
33033
33034      // Apply lookup subtables until one matches
33035      for (var _iterator11 = lookup.subTables, _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _getIterator(_iterator11);;) {
33036        var _ref12;
33037
33038        if (_isArray11) {
33039          if (_i11 >= _iterator11.length) break;
33040          _ref12 = _iterator11[_i11++];
33041        } else {
33042          _i11 = _iterator11.next();
33043          if (_i11.done) break;
33044          _ref12 = _i11.value;
33045        }
33046
33047        var table = _ref12;
33048
33049        if (this.applyLookup(lookup.lookupType, table)) {
33050          break;
33051        }
33052      }
33053    }
33054
33055    this.glyphIterator.reset(options, glyphIndex);
33056    return true;
33057  };
33058
33059  OTProcessor.prototype.coverageIndex = function coverageIndex(coverage, glyph) {
33060    if (glyph == null) {
33061      glyph = this.glyphIterator.cur.id;
33062    }
33063
33064    switch (coverage.version) {
33065      case 1:
33066        return coverage.glyphs.indexOf(glyph);
33067
33068      case 2:
33069        for (var _iterator12 = coverage.rangeRecords, _isArray12 = Array.isArray(_iterator12), _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _getIterator(_iterator12);;) {
33070          var _ref13;
33071
33072          if (_isArray12) {
33073            if (_i12 >= _iterator12.length) break;
33074            _ref13 = _iterator12[_i12++];
33075          } else {
33076            _i12 = _iterator12.next();
33077            if (_i12.done) break;
33078            _ref13 = _i12.value;
33079          }
33080
33081          var range = _ref13;
33082
33083          if (range.start <= glyph && glyph <= range.end) {
33084            return range.startCoverageIndex + glyph - range.start;
33085          }
33086        }
33087
33088        break;
33089    }
33090
33091    return -1;
33092  };
33093
33094  OTProcessor.prototype.match = function match(sequenceIndex, sequence, fn, matched) {
33095    var pos = this.glyphIterator.index;
33096    var glyph = this.glyphIterator.increment(sequenceIndex);
33097    var idx = 0;
33098
33099    while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) {
33100      if (matched) {
33101        matched.push(this.glyphIterator.index);
33102      }
33103
33104      idx++;
33105      glyph = this.glyphIterator.next();
33106    }
33107
33108    this.glyphIterator.index = pos;
33109    if (idx < sequence.length) {
33110      return false;
33111    }
33112
33113    return matched || true;
33114  };
33115
33116  OTProcessor.prototype.sequenceMatches = function sequenceMatches(sequenceIndex, sequence) {
33117    return this.match(sequenceIndex, sequence, function (component, glyph) {
33118      return component === glyph.id;
33119    });
33120  };
33121
33122  OTProcessor.prototype.sequenceMatchIndices = function sequenceMatchIndices(sequenceIndex, sequence) {
33123    var _this = this;
33124
33125    return this.match(sequenceIndex, sequence, function (component, glyph) {
33126      // If the current feature doesn't apply to this glyph,
33127      if (!(_this.currentFeature in glyph.features)) {
33128        return false;
33129      }
33130
33131      return component === glyph.id;
33132    }, []);
33133  };
33134
33135  OTProcessor.prototype.coverageSequenceMatches = function coverageSequenceMatches(sequenceIndex, sequence) {
33136    var _this2 = this;
33137
33138    return this.match(sequenceIndex, sequence, function (coverage, glyph) {
33139      return _this2.coverageIndex(coverage, glyph.id) >= 0;
33140    });
33141  };
33142
33143  OTProcessor.prototype.getClassID = function getClassID(glyph, classDef) {
33144    switch (classDef.version) {
33145      case 1:
33146        // Class array
33147        var i = glyph - classDef.startGlyph;
33148        if (i >= 0 && i < classDef.classValueArray.length) {
33149          return classDef.classValueArray[i];
33150        }
33151
33152        break;
33153
33154      case 2:
33155        for (var _iterator13 = classDef.classRangeRecord, _isArray13 = Array.isArray(_iterator13), _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _getIterator(_iterator13);;) {
33156          var _ref14;
33157
33158          if (_isArray13) {
33159            if (_i13 >= _iterator13.length) break;
33160            _ref14 = _iterator13[_i13++];
33161          } else {
33162            _i13 = _iterator13.next();
33163            if (_i13.done) break;
33164            _ref14 = _i13.value;
33165          }
33166
33167          var range = _ref14;
33168
33169          if (range.start <= glyph && glyph <= range.end) {
33170            return range.class;
33171          }
33172        }
33173
33174        break;
33175    }
33176
33177    return 0;
33178  };
33179
33180  OTProcessor.prototype.classSequenceMatches = function classSequenceMatches(sequenceIndex, sequence, classDef) {
33181    var _this3 = this;
33182
33183    return this.match(sequenceIndex, sequence, function (classID, glyph) {
33184      return classID === _this3.getClassID(glyph.id, classDef);
33185    });
33186  };
33187
33188  OTProcessor.prototype.applyContext = function applyContext(table) {
33189    switch (table.version) {
33190      case 1:
33191        var index = this.coverageIndex(table.coverage);
33192        if (index === -1) {
33193          return false;
33194        }
33195
33196        var set = table.ruleSets[index];
33197        for (var _iterator14 = set, _isArray14 = Array.isArray(_iterator14), _i14 = 0, _iterator14 = _isArray14 ? _iterator14 : _getIterator(_iterator14);;) {
33198          var _ref15;
33199
33200          if (_isArray14) {
33201            if (_i14 >= _iterator14.length) break;
33202            _ref15 = _iterator14[_i14++];
33203          } else {
33204            _i14 = _iterator14.next();
33205            if (_i14.done) break;
33206            _ref15 = _i14.value;
33207          }
33208
33209          var rule = _ref15;
33210
33211          if (this.sequenceMatches(1, rule.input)) {
33212            return this.applyLookupList(rule.lookupRecords);
33213          }
33214        }
33215
33216        break;
33217
33218      case 2:
33219        if (this.coverageIndex(table.coverage) === -1) {
33220          return false;
33221        }
33222
33223        index = this.getClassID(this.glyphIterator.cur.id, table.classDef);
33224        if (index === -1) {
33225          return false;
33226        }
33227
33228        set = table.classSet[index];
33229        for (var _iterator15 = set, _isArray15 = Array.isArray(_iterator15), _i15 = 0, _iterator15 = _isArray15 ? _iterator15 : _getIterator(_iterator15);;) {
33230          var _ref16;
33231
33232          if (_isArray15) {
33233            if (_i15 >= _iterator15.length) break;
33234            _ref16 = _iterator15[_i15++];
33235          } else {
33236            _i15 = _iterator15.next();
33237            if (_i15.done) break;
33238            _ref16 = _i15.value;
33239          }
33240
33241          var _rule = _ref16;
33242
33243          if (this.classSequenceMatches(1, _rule.classes, table.classDef)) {
33244            return this.applyLookupList(_rule.lookupRecords);
33245          }
33246        }
33247
33248        break;
33249
33250      case 3:
33251        if (this.coverageSequenceMatches(0, table.coverages)) {
33252          return this.applyLookupList(table.lookupRecords);
33253        }
33254
33255        break;
33256    }
33257
33258    return false;
33259  };
33260
33261  OTProcessor.prototype.applyChainingContext = function applyChainingContext(table) {
33262    switch (table.version) {
33263      case 1:
33264        var index = this.coverageIndex(table.coverage);
33265        if (index === -1) {
33266          return false;
33267        }
33268
33269        var set = table.chainRuleSets[index];
33270        for (var _iterator16 = set, _isArray16 = Array.isArray(_iterator16), _i16 = 0, _iterator16 = _isArray16 ? _iterator16 : _getIterator(_iterator16);;) {
33271          var _ref17;
33272
33273          if (_isArray16) {
33274            if (_i16 >= _iterator16.length) break;
33275            _ref17 = _iterator16[_i16++];
33276          } else {
33277            _i16 = _iterator16.next();
33278            if (_i16.done) break;
33279            _ref17 = _i16.value;
33280          }
33281
33282          var rule = _ref17;
33283
33284          if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) {
33285            return this.applyLookupList(rule.lookupRecords);
33286          }
33287        }
33288
33289        break;
33290
33291      case 2:
33292        if (this.coverageIndex(table.coverage) === -1) {
33293          return false;
33294        }
33295
33296        index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);
33297        var rules = table.chainClassSet[index];
33298        if (!rules) {
33299          return false;
33300        }
33301
33302        for (var _iterator17 = rules, _isArray17 = Array.isArray(_iterator17), _i17 = 0, _iterator17 = _isArray17 ? _iterator17 : _getIterator(_iterator17);;) {
33303          var _ref18;
33304
33305          if (_isArray17) {
33306            if (_i17 >= _iterator17.length) break;
33307            _ref18 = _iterator17[_i17++];
33308          } else {
33309            _i17 = _iterator17.next();
33310            if (_i17.done) break;
33311            _ref18 = _i17.value;
33312          }
33313
33314          var _rule2 = _ref18;
33315
33316          if (this.classSequenceMatches(-_rule2.backtrack.length, _rule2.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, _rule2.input, table.inputClassDef) && this.classSequenceMatches(1 + _rule2.input.length, _rule2.lookahead, table.lookaheadClassDef)) {
33317            return this.applyLookupList(_rule2.lookupRecords);
33318          }
33319        }
33320
33321        break;
33322
33323      case 3:
33324        if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) {
33325          return this.applyLookupList(table.lookupRecords);
33326        }
33327
33328        break;
33329    }
33330
33331    return false;
33332  };
33333
33334  return OTProcessor;
33335}();
33336
33337var GlyphInfo = function () {
33338  function GlyphInfo(font, id) {
33339    var codePoints = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
33340    var features = arguments[3];
33341
33342    _classCallCheck(this, GlyphInfo);
33343
33344    this._font = font;
33345    this.codePoints = codePoints;
33346    this.id = id;
33347
33348    this.features = {};
33349    if (Array.isArray(features)) {
33350      for (var i = 0; i < features.length; i++) {
33351        var feature = features[i];
33352        this.features[feature] = true;
33353      }
33354    } else if ((typeof features === 'undefined' ? 'undefined' : _typeof(features)) === 'object') {
33355      _Object$assign(this.features, features);
33356    }
33357
33358    this.ligatureID = null;
33359    this.ligatureComponent = null;
33360    this.isLigated = false;
33361    this.cursiveAttachment = null;
33362    this.markAttachment = null;
33363    this.shaperInfo = null;
33364    this.substituted = false;
33365    this.isMultiplied = false;
33366  }
33367
33368  GlyphInfo.prototype.copy = function copy() {
33369    return new GlyphInfo(this._font, this.id, this.codePoints, this.features);
33370  };
33371
33372  _createClass(GlyphInfo, [{
33373    key: 'id',
33374    get: function get() {
33375      return this._id;
33376    },
33377    set: function set(id) {
33378      this._id = id;
33379      this.substituted = true;
33380
33381      var GDEF = this._font.GDEF;
33382      if (GDEF && GDEF.glyphClassDef) {
33383        // TODO: clean this up
33384        var classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef);
33385        this.isBase = classID === 1;
33386        this.isLigature = classID === 2;
33387        this.isMark = classID === 3;
33388        this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;
33389      } else {
33390        this.isMark = this.codePoints.every(unicode.isMark);
33391        this.isBase = !this.isMark;
33392        this.isLigature = this.codePoints.length > 1;
33393        this.markAttachmentType = 0;
33394      }
33395    }
33396  }]);
33397
33398  return GlyphInfo;
33399}();
33400
33401var _class$5;
33402var _temp$1;
33403/**
33404 * This is a shaper for the Hangul script, used by the Korean language.
33405 * It does the following:
33406 *   - decompose if unsupported by the font:
33407 *     <LV>   -> <L,V>
33408 *     <LVT>  -> <L,V,T>
33409 *     <LV,T> -> <L,V,T>
33410 *
33411 *   - compose if supported by the font:
33412 *     <L,V>   -> <LV>
33413 *     <L,V,T> -> <LVT>
33414 *     <LV,T>  -> <LVT>
33415 *
33416 *   - reorder tone marks (S is any valid syllable):
33417 *     <S, M> -> <M, S>
33418 *
33419 *   - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.
33420 *
33421 * This logic is based on the following documents:
33422 *   - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm
33423 *   - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf
33424 */
33425var HangulShaper = (_temp$1 = _class$5 = function (_DefaultShaper) {
33426  _inherits(HangulShaper, _DefaultShaper);
33427
33428  function HangulShaper() {
33429    _classCallCheck(this, HangulShaper);
33430
33431    return _possibleConstructorReturn(this, _DefaultShaper.apply(this, arguments));
33432  }
33433
33434  HangulShaper.planFeatures = function planFeatures(plan) {
33435    plan.add(['ljmo', 'vjmo', 'tjmo'], false);
33436  };
33437
33438  HangulShaper.assignFeatures = function assignFeatures(plan, glyphs) {
33439    var state = 0;
33440    var i = 0;
33441    while (i < glyphs.length) {
33442      var action = void 0;
33443      var glyph = glyphs[i];
33444      var code = glyph.codePoints[0];
33445      var type = getType(code);
33446
33447      var _STATE_TABLE$state$ty = STATE_TABLE$1[state][type];
33448      action = _STATE_TABLE$state$ty[0];
33449      state = _STATE_TABLE$state$ty[1];
33450
33451
33452      switch (action) {
33453        case DECOMPOSE:
33454          // Decompose the composed syllable if it is not supported by the font.
33455          if (!plan.font.hasGlyphForCodePoint(code)) {
33456            i = decompose(glyphs, i, plan.font);
33457          }
33458          break;
33459
33460        case COMPOSE:
33461          // Found a decomposed syllable. Try to compose if supported by the font.
33462          i = compose(glyphs, i, plan.font);
33463          break;
33464
33465        case TONE_MARK:
33466          // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.
33467          reorderToneMark(glyphs, i, plan.font);
33468          break;
33469
33470        case INVALID:
33471          // Tone mark has no valid syllable to attach to, so insert a dotted circle
33472          i = insertDottedCircle(glyphs, i, plan.font);
33473          break;
33474      }
33475
33476      i++;
33477    }
33478  };
33479
33480  return HangulShaper;
33481}(DefaultShaper), _class$5.zeroMarkWidths = 'NONE', _temp$1);
33482var HANGUL_BASE = 0xac00;
33483var HANGUL_END = 0xd7a4;
33484var HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;
33485var L_BASE = 0x1100; // lead
33486var V_BASE = 0x1161; // vowel
33487var T_BASE = 0x11a7; // trail
33488var L_COUNT = 19;
33489var V_COUNT = 21;
33490var T_COUNT = 28;
33491var L_END = L_BASE + L_COUNT - 1;
33492var V_END = V_BASE + V_COUNT - 1;
33493var T_END = T_BASE + T_COUNT - 1;
33494var DOTTED_CIRCLE = 0x25cc;
33495
33496var isL = function isL(code) {
33497  return 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;
33498};
33499var isV = function isV(code) {
33500  return 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;
33501};
33502var isT = function isT(code) {
33503  return 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;
33504};
33505var isTone = function isTone(code) {
33506  return 0x302e <= code && code <= 0x302f;
33507};
33508var isLVT = function isLVT(code) {
33509  return HANGUL_BASE <= code && code <= HANGUL_END;
33510};
33511var isLV = function isLV(code) {
33512  return code - HANGUL_BASE < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;
33513};
33514var isCombiningL = function isCombiningL(code) {
33515  return L_BASE <= code && code <= L_END;
33516};
33517var isCombiningV = function isCombiningV(code) {
33518  return V_BASE <= code && code <= V_END;
33519};
33520var isCombiningT = function isCombiningT(code) {
33521  return T_BASE + 1 && 1 <= code && code <= T_END;
33522};
33523
33524// Character categories
33525var X = 0; // Other character
33526var L = 1; // Leading consonant
33527var V = 2; // Medial vowel
33528var T = 3; // Trailing consonant
33529var LV = 4; // Composed <LV> syllable
33530var LVT = 5; // Composed <LVT> syllable
33531var M = 6; // Tone mark
33532
33533// This function classifies a character using the above categories.
33534function getType(code) {
33535  if (isL(code)) {
33536    return L;
33537  }
33538  if (isV(code)) {
33539    return V;
33540  }
33541  if (isT(code)) {
33542    return T;
33543  }
33544  if (isLV(code)) {
33545    return LV;
33546  }
33547  if (isLVT(code)) {
33548    return LVT;
33549  }
33550  if (isTone(code)) {
33551    return M;
33552  }
33553  return X;
33554}
33555
33556// State machine actions
33557var NO_ACTION = 0;
33558var DECOMPOSE = 1;
33559var COMPOSE = 2;
33560var TONE_MARK = 4;
33561var INVALID = 5;
33562
33563// Build a state machine that accepts valid syllables, and applies actions along the way.
33564// The logic this is implementing is documented at the top of the file.
33565var STATE_TABLE$1 = [
33566//       X                 L                 V                T                  LV                LVT               M
33567// State 0: start state
33568[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]],
33569
33570// State 1: <L>
33571[[NO_ACTION, 0], [NO_ACTION, 1], [COMPOSE, 2], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]],
33572
33573// State 2: <L,V> or <LV>
33574[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [COMPOSE, 3], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]],
33575
33576// State 3: <L,V,T> or <LVT>
33577[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]]];
33578
33579function getGlyph(font, code, features) {
33580  return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features);
33581}
33582
33583function decompose(glyphs, i, font) {
33584  var glyph = glyphs[i];
33585  var code = glyph.codePoints[0];
33586
33587  var s = code - HANGUL_BASE;
33588  var t = T_BASE + s % T_COUNT;
33589  s = s / T_COUNT | 0;
33590  var l = L_BASE + s / V_COUNT | 0;
33591  var v = V_BASE + s % V_COUNT;
33592
33593  // Don't decompose if all of the components are not available
33594  if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== T_BASE && !font.hasGlyphForCodePoint(t)) {
33595    return i;
33596  }
33597
33598  // Replace the current glyph with decomposed L, V, and T glyphs,
33599  // and apply the proper OpenType features to each component.
33600  var ljmo = getGlyph(font, l, glyph.features);
33601  ljmo.features.ljmo = true;
33602
33603  var vjmo = getGlyph(font, v, glyph.features);
33604  vjmo.features.vjmo = true;
33605
33606  var insert = [ljmo, vjmo];
33607
33608  if (t > T_BASE) {
33609    var tjmo = getGlyph(font, t, glyph.features);
33610    tjmo.features.tjmo = true;
33611    insert.push(tjmo);
33612  }
33613
33614  glyphs.splice.apply(glyphs, [i, 1].concat(insert));
33615  return i + insert.length - 1;
33616}
33617
33618function compose(glyphs, i, font) {
33619  var glyph = glyphs[i];
33620  var code = glyphs[i].codePoints[0];
33621  var type = getType(code);
33622
33623  var prev = glyphs[i - 1].codePoints[0];
33624  var prevType = getType(prev);
33625
33626  // Figure out what type of syllable we're dealing with
33627  var lv = void 0,
33628      ljmo = void 0,
33629      vjmo = void 0,
33630      tjmo = void 0;
33631  if (prevType === LV && type === T) {
33632    // <LV,T>
33633    lv = prev;
33634    tjmo = glyph;
33635  } else {
33636    if (type === V) {
33637      // <L,V>
33638      ljmo = glyphs[i - 1];
33639      vjmo = glyph;
33640    } else {
33641      // <L,V,T>
33642      ljmo = glyphs[i - 2];
33643      vjmo = glyphs[i - 1];
33644      tjmo = glyph;
33645    }
33646
33647    var l = ljmo.codePoints[0];
33648    var v = vjmo.codePoints[0];
33649
33650    // Make sure L and V are combining characters
33651    if (isCombiningL(l) && isCombiningV(v)) {
33652      lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT;
33653    }
33654  }
33655
33656  var t = tjmo && tjmo.codePoints[0] || T_BASE;
33657  if (lv != null && (t === T_BASE || isCombiningT(t))) {
33658    var s = lv + (t - T_BASE);
33659
33660    // Replace with a composed glyph if supported by the font,
33661    // otherwise apply the proper OpenType features to each component.
33662    if (font.hasGlyphForCodePoint(s)) {
33663      var del = prevType === V ? 3 : 2;
33664      glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features));
33665      return i - del + 1;
33666    }
33667  }
33668
33669  // Didn't compose (either a non-combining component or unsupported by font).
33670  if (ljmo) {
33671    ljmo.features.ljmo = true;
33672  }
33673  if (vjmo) {
33674    vjmo.features.vjmo = true;
33675  }
33676  if (tjmo) {
33677    tjmo.features.tjmo = true;
33678  }
33679
33680  if (prevType === LV) {
33681    // Sequence was originally <L,V>, which got combined earlier.
33682    // Either the T was non-combining, or the LVT glyph wasn't supported.
33683    // Decompose the glyph again and apply OT features.
33684    decompose(glyphs, i - 1, font);
33685    return i + 1;
33686  }
33687
33688  return i;
33689}
33690
33691function getLength(code) {
33692  switch (getType(code)) {
33693    case LV:
33694    case LVT:
33695      return 1;
33696    case V:
33697      return 2;
33698    case T:
33699      return 3;
33700  }
33701}
33702
33703function reorderToneMark(glyphs, i, font) {
33704  var glyph = glyphs[i];
33705  var code = glyphs[i].codePoints[0];
33706
33707  // Move tone mark to the beginning of the previous syllable, unless it is zero width
33708  if (font.glyphForCodePoint(code).advanceWidth === 0) {
33709    return;
33710  }
33711
33712  var prev = glyphs[i - 1].codePoints[0];
33713  var len = getLength(prev);
33714
33715  glyphs.splice(i, 1);
33716  return glyphs.splice(i - len, 0, glyph);
33717}
33718
33719function insertDottedCircle(glyphs, i, font) {
33720  var glyph = glyphs[i];
33721  var code = glyphs[i].codePoints[0];
33722
33723  if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) {
33724    var dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features);
33725
33726    // If the tone mark is zero width, insert the dotted circle before, otherwise after
33727    var idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;
33728    glyphs.splice(idx, 0, dottedCircle);
33729    i++;
33730  }
33731
33732  return i;
33733}
33734
33735var stateTable = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 14, 15, 16, 17], [0, 0, 0, 18, 19, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 28, 29, 30, 31, 32, 33, 0, 34, 0, 0, 35, 36, 0, 0, 37, 0], [0, 0, 0, 38, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 39, 0, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 12, 43, 0, 0, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0], [0, 0, 0, 45, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 55, 56, 57, 58, 0, 59, 0, 0, 60, 61, 0, 0, 62, 0], [0, 0, 0, 4, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 63, 64, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 63, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 0, 2, 16, 0], [0, 0, 0, 18, 65, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 0, 0], [0, 0, 0, 69, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 73, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 75, 0, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 25, 79, 0, 0, 0, 0], [0, 0, 0, 18, 19, 20, 74, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 81, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 87, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 18, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 89, 90, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 89, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 0, 0], [0, 0, 0, 94, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 96, 0, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 35, 100, 0, 0, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 102, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 28, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 110, 111, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 110, 0, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 0, 0], [0, 0, 0, 0, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 0, 0, 115, 116, 117, 118, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 39, 0, 122, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 124, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0], [0, 39, 0, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 47, 47, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 128, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 129, 130, 131, 132, 
33735133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 135, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 136, 0, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 60, 140, 0, 0, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0], [0, 0, 0, 142, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 150, 151, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 150, 0, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 157, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 3, 4, 5, 159, 160, 8, 161, 0, 162, 0, 11, 12, 163, 0, 75, 16, 0], [0, 0, 0, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0], [0, 124, 64, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 124, 0, 0], [0, 0, 0, 0, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 172, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 75, 0, 176, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 178, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0], [0, 75, 0, 0, 0, 175, 179, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 180, 180, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 83, 83, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 182, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 183, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 191, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0], [0, 178, 90, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 178, 0, 0], [0, 0, 0, 0, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 198, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 96, 0, 202, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 204, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0], [0, 96, 0, 0, 0, 201, 205, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 206, 206, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 104, 104, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 208, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 209, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 217, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0], [0, 204, 111, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 204, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 223, 0, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 119, 225, 0, 0, 0, 0], [0, 0, 0, 115, 116, 117, 222, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 115, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 226, 64, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 226, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 39, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 44, 44, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 229, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 39, 0, 122, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 231, 231, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 130, 131, 132, 
33735133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 131, 131, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 234, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 235, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 0, 0, 240, 241, 242, 243, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 136, 0, 247, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 249, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0], [0, 136, 0, 0, 0, 246, 250, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 251, 251, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 144, 144, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 253, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 254, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 262, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0], [0, 249, 151, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 249, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 158, 225, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 222, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 155, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 43, 266, 266, 8, 161, 0, 24, 0, 0, 12, 267, 0, 0, 0, 0], [0, 75, 0, 176, 43, 268, 268, 269, 161, 0, 24, 0, 0, 0, 267, 0, 75, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0], [0, 273, 274, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 273, 0, 0], [0, 0, 0, 40, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 121, 275, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 279, 0, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 173, 281, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 278, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 169, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 282, 90, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 282, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 80, 80, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 285, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 75, 0, 176, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 287, 287, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 185, 185, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 290, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 291, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 192, 281, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 278, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 189, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 76, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 175, 296, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 299, 0, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 199, 301, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 298, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 195, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 302, 111, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 302, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 96, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 101, 101, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 305, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 96, 0, 202, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 307, 307, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 211, 211, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 310, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 311, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 218, 301, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 298, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 215, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 97, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 201, 316, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 320, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 223, 0, 323, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 0, 0, 121, 324, 
337350, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 325, 318, 326, 327, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 64, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 121, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0], [0, 0, 0, 0, 0, 329, 329, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 237, 237, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 332, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 333, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 337, 0, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 244, 339, 0, 0, 0, 0], [0, 0, 0, 240, 241, 242, 336, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 240, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 340, 151, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 340, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 136, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 141, 141, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 343, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 136, 0, 247, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 345, 345, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 256, 256, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 348, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 349, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 263, 339, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 336, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 260, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 137, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 246, 354, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 355, 90, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 355, 0, 0], [0, 0, 0, 0, 0, 356, 356, 269, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 357, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 366, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 40, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 372, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 279, 0, 375, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 0, 0, 175, 376, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 377, 370, 378, 379, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 90, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 175, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0], [0, 0, 0, 0, 0, 381, 381, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 293, 293, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 384, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 385, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 76, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 390, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 299, 0, 393, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 0, 0, 201, 394, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 395, 388, 39
337356, 397, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 111, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 201, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0], [0, 0, 0, 0, 0, 399, 399, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 313, 313, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 402, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 403, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 97, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 407, 0, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 321, 409, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 406, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 0, 0, 317, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 410, 64, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 410, 0, 0], [0, 223, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 323, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 328, 409, 0, 0, 0, 0], [0, 0, 0, 325, 318, 326, 406, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 325, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0], [0, 0, 0, 0, 0, 411, 411, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 413, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 417, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 337, 0, 420, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 0, 0, 246, 421, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 422, 415, 423, 424, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 151, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 246, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0], [0, 0, 0, 0, 0, 426, 426, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 351, 351, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 429, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 430, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 137, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 434, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 180, 180, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 359, 359, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 437, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 438, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 443, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 367, 225, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 445, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 364, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 448, 0, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 373, 450, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 447, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 0, 0, 369, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 451, 90, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 451, 0, 0], [0, 279, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 375, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 380, 450, 0, 0, 0, 0], [0, 0, 0, 377, 370, 378, 447, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 377, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0], [0, 0, 0, 0, 0, 452, 452, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 454, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 457, 0, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 391, 459, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 456, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 0, 0, 387, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 460, 111, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 460, 0, 0], [0, 299, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 393, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 398, 459, 0, 0, 0, 0], [0, 0, 0, 395, 388, 39
337356, 456, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 395, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0], [0, 0, 0, 0, 0, 461, 461, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 463, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 467, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 407, 0, 470, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 0, 0, 121, 471, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 472, 465, 473, 474, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0], [0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 479, 0, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 418, 481, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 478, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 0, 0, 414, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 482, 151, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 482, 0, 0], [0, 337, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 420, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 425, 481, 0, 0, 0, 0], [0, 0, 0, 422, 415, 423, 478, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 422, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0], [0, 0, 0, 0, 0, 483, 483, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 485, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 435, 225, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 445, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 432, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 486, 486, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 440, 440, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 489, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 490, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 497, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 0, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 0, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 502, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 448, 0, 505, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 0, 0, 175, 506, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 507, 500, 508, 509, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0], [0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 515, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 457, 0, 518, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 0, 0, 201, 519, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 520, 513, 521, 522, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0], [0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 527, 0, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 468, 529, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 526, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 0, 0, 464, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 530, 64, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 530, 0, 0], [0, 407, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 470, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 475, 529, 0, 0, 0, 0], [0, 0, 0, 472, 465, 473, 526, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 472, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0], [0, 0, 0, 0, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 534, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 479, 0, 537, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 0, 0, 246, 538, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 539, 532, 540, 541, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0], [0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0], [0, 0, 0, 0, 0, 544, 544, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 492, 492, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 547, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 548, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 274, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 368, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 553, 0, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 503, 555, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 552, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 0, 0, 499, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 556, 90, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 556, 0, 0], [0, 448, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 505, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 510, 555, 0, 0, 0, 0], [0, 0, 0, 507, 500, 508, 552, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 507, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 559, 0, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 516, 561, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 558, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 0, 0, 512, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 562, 111, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 562, 0, 0], [0, 457, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 518, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 523, 561, 0, 0, 0, 0], [0, 0, 0, 520, 513, 521, 558, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 520, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0], [0, 0, 0, 0, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 565, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 527, 0, 567, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 0, 0, 121, 568, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 569, 66, 570, 571, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 575, 0, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 535, 577, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 574, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 0, 0, 531, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 578, 151, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 578, 0, 0], [0, 479, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 537, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 542, 577, 0, 0, 0, 0], [0, 0, 0, 539, 532, 540, 574, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 539, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0], [0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0], [0, 0, 0, 0, 0, 579, 579, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 581, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 584, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 553, 0, 586, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 0, 0, 175, 587, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 588, 91, 589, 590, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 0, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0], [0, 0, 0, 592, 
33735112, 593, 594, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 559, 0, 596, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 0, 0, 201, 597, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 598, 112, 599, 600, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 566, 165, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 67, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 0, 0, 563, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 527, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 567, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 572, 165, 0, 0, 0, 0], [0, 0, 0, 569, 66, 570, 67, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 569, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 605, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 575, 0, 607, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 0, 0, 246, 608, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 609, 152, 610, 611, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0], [0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 585, 194, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 92, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 0, 0, 582, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 553, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 586, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 591, 194, 0, 0, 0, 0], [0, 0, 0, 588, 91, 589, 92, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 588, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 595, 220, 0, 0, 0, 0], [0, 0, 0, 592, 112, 593, 113, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 0, 0, 592, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 559, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 596, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 601, 220, 0, 0, 0, 0], [0, 0, 0, 598, 112, 599, 113, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 598, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 606, 265, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 153, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 0, 0, 603, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 575, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 607, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 612, 265, 0, 0, 0, 0], [0, 0, 0, 609, 152, 610, 153, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 609, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0]];
33736var accepting = [false, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, false, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, false, false, true, false, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, false, false, false, false, false, false, false, true, true, false, false, true, true, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, false, true, true, false, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, false, true, true, true, true, true, false, true, true, false, true, true, true];
33737var tags = [[], ["broken_cluster"], ["consonant_syllable"], ["vowel_syllable"], ["broken_cluster"], ["broken_cluster"], [], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["standalone_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["consonant_syllable"], ["broken_cluster"], ["symbol_cluster"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], [], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["broken_cluster"], ["broken_cluster"], ["consonant_syllable", "broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["symbol_cluster"], [], ["symbol_cluster"], ["symbol_cluster"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], [], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], [], [], [], ["broken_cluster"], ["broken_cluster"], [], [], ["broken_cluster"], ["broken_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], [], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["symbol_cluster"], ["symbol_cluster"], ["symbol_cluster"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], [], [], [], ["consonant_syllable"], ["consonant_syllable"], [], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], [], [], ["vowel_syllable"], ["vowel_syllable"], [], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], [], [], [], [], ["broken_cluster"], ["broken_cluster"], [], [], ["broken_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], [], [], [], ["standalone_cluster"], ["standalone_cluster"], [], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["broken_cluster"], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["broken_cluster"], ["symbol_cluster"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], [], [], [], [], ["consonant_syllable"], ["consonant_syllable"], [], [], ["consonant_syllable"], ["consonant_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], [], [], [], ["vowel_syllable"], ["vowel_syllable"], [], [], ["vowel_syllable"], ["vowel_syllable"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], [], [], [], [], ["broken_cluster"], [], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], [], [], [], [], ["standalone_cluster"], ["standalone_cluster"], [], [], ["standalone_cluster"], ["standalone_cluster"], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], [], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], [], [], [], [], ["consonant_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], [], [], [], ["vowel_syllable"], [], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], [], [], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], [], [], [], [], ["standalone_cluster"], [], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], [], [], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], [], [], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], [], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], [], [], [], [], [], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_clust
33737er"], [], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], [], [], [], [], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], [], [], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["broken_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], [], ["consonant_syllable"], ["vowel_syllable"], ["standalone_cluster"]];
33738var indicMachine = {
33739	stateTable: stateTable,
33740	accepting: accepting,
33741	tags: tags
33742};
33743
33744var categories = ["O", "IND", "S", "GB", "B", "FM", "CGJ", "VMAbv", "VMPst", "VAbv", "VPst", "CMBlw", "VPre", "VBlw", "H", "VMBlw", "CMAbv", "MBlw", "CS", "R", "SUB", "MPst", "MPre", "FAbv", "FPst", "FBlw", "SMAbv", "SMBlw", "VMPre", "ZWNJ", "ZWJ", "WJ", "VS", "N", "HN", "MAbv"];
33745var decompositions$1 = { "2507": [2503, 2494], "2508": [2503, 2519], "2888": [2887, 2902], "2891": [2887, 2878], "2892": [2887, 2903], "3018": [3014, 3006], "3019": [3015, 3006], "3020": [3014, 3031], "3144": [3142, 3158], "3264": [3263, 3285], "3271": [3270, 3285], "3272": [3270, 3286], "3274": [3270, 3266], "3275": [3270, 3266, 3285], "3402": [3398, 3390], "3403": [3399, 3390], "3404": [3398, 3415], "3546": [3545, 3530], "3548": [3545, 3535], "3549": [3545, 3535, 3530], "3550": [3545, 3551], "3635": [3661, 3634], "3763": [3789, 3762], "3955": [3953, 3954], "3957": [3953, 3956], "3958": [4018, 3968], "3959": [4018, 3953, 3968], "3960": [4019, 3968], "3961": [4019, 3953, 3968], "3969": [3953, 3968], "6971": [6970, 6965], "6973": [6972, 6965], "6976": [6974, 6965], "6977": [6975, 6965], "6979": [6978, 6965], "69934": [69937, 69927], "69935": [69938, 69927], "70475": [70471, 70462], "70476": [70471, 70487], "70843": [70841, 70842], "70844": [70841, 70832], "70846": [70841, 70845], "71098": [71096, 71087], "71099": [71097, 71087] };
33746var stateTable$1 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [2, 2, 3, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 2, 0, 24, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 27, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 46, 0, 0, 0, 39, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 49, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 46, 0, 0, 0, 53, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0]];
33747var accepting$1 = [false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true];
33748var tags$1 = [[], ["broken_cluster"], ["independent_cluster"], ["symbol_cluster"], ["standard_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["numeral_cluster"], ["broken_cluster"], ["independent_cluster"], ["symbol_cluster"], ["symbol_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["virama_terminated_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["broken_cluster"], ["broken_cluster"], ["numeral_cluster"], ["number_joiner_terminated_cluster"], ["standard_cluster"], ["standard_cluster"], ["numeral_cluster"]];
33749var useData = {
33750	categories: categories,
33751	decompositions: decompositions$1,
33752	stateTable: stateTable$1,
33753	accepting: accepting$1,
33754	tags: tags$1
33755};
33756
33757// Cateories used in the OpenType spec:
33758// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx
33759var CATEGORIES = {
33760  X: 1 << 0,
33761  C: 1 << 1,
33762  V: 1 << 2,
33763  N: 1 << 3,
33764  H: 1 << 4,
33765  ZWNJ: 1 << 5,
33766  ZWJ: 1 << 6,
33767  M: 1 << 7,
33768  SM: 1 << 8,
33769  VD: 1 << 9,
33770  A: 1 << 10,
33771  Placeholder: 1 << 11,
33772  Dotted_Circle: 1 << 12,
33773  RS: 1 << 13, // Register Shifter, used in Khmer OT spec.
33774  Coeng: 1 << 14, // Khmer-style Virama.
33775  Repha: 1 << 15, // Atomically-encoded logical or visual repha.
33776  Ra: 1 << 16,
33777  CM: 1 << 17, // Consonant-Medial.
33778  Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).
33779};
33780
33781// Visual positions in a syllable from left to right.
33782var POSITIONS = {
33783  Start: 1 << 0,
33784
33785  Ra_To_Become_Reph: 1 << 1,
33786  Pre_M: 1 << 2,
33787  Pre_C: 1 << 3,
33788
33789  Base_C: 1 << 4,
33790  After_Main: 1 << 5,
33791
33792  Above_C: 1 << 6,
33793
33794  Before_Sub: 1 << 7,
33795  Below_C: 1 << 8,
33796  After_Sub: 1 << 9,
33797
33798  Before_Post: 1 << 10,
33799  Post_C: 1 << 11,
33800  After_Post: 1 << 12,
33801
33802  Final_C: 1 << 13,
33803  SMVD: 1 << 14,
33804
33805  End: 1 << 15
33806};
33807
33808var CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle;
33809var JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ;
33810var HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng;
33811
33812var INDIC_CONFIGS = {
33813  Default: {
33814    hasOldSpec: false,
33815    virama: 0,
33816    basePos: 'Last',
33817    rephPos: POSITIONS.Before_Post,
33818    rephMode: 'Implicit',
33819    blwfMode: 'Pre_And_Post'
33820  },
33821
33822  Devanagari: {
33823    hasOldSpec: true,
33824    virama: 0x094D,
33825    basePos: 'Last',
33826    rephPos: POSITIONS.Before_Post,
33827    rephMode: 'Implicit',
33828    blwfMode: 'Pre_And_Post'
33829  },
33830
33831  Bengali: {
33832    hasOldSpec: true,
33833    virama: 0x09CD,
33834    basePos: 'Last',
33835    rephPos: POSITIONS.After_Sub,
33836    rephMode: 'Implicit',
33837    blwfMode: 'Pre_And_Post'
33838  },
33839
33840  Gurmukhi: {
33841    hasOldSpec: true,
33842    virama: 0x0A4D,
33843    basePos: 'Last',
33844    rephPos: POSITIONS.Before_Sub,
33845    rephMode: 'Implicit',
33846    blwfMode: 'Pre_And_Post'
33847  },
33848
33849  Gujarati: {
33850    hasOldSpec: true,
33851    virama: 0x0ACD,
33852    basePos: 'Last',
33853    rephPos: POSITIONS.Before_Post,
33854    rephMode: 'Implicit',
33855    blwfMode: 'Pre_And_Post'
33856  },
33857
33858  Oriya: {
33859    hasOldSpec: true,
33860    virama: 0x0B4D,
33861    basePos: 'Last',
33862    rephPos: POSITIONS.After_Main,
33863    rephMode: 'Implicit',
33864    blwfMode: 'Pre_And_Post'
33865  },
33866
33867  Tamil: {
33868    hasOldSpec: true,
33869    virama: 0x0BCD,
33870    basePos: 'Last',
33871    rephPos: POSITIONS.After_Post,
33872    rephMode: 'Implicit',
33873    blwfMode: 'Pre_And_Post'
33874  },
33875
33876  Telugu: {
33877    hasOldSpec: true,
33878    virama: 0x0C4D,
33879    basePos: 'Last',
33880    rephPos: POSITIONS.After_Post,
33881    rephMode: 'Explicit',
33882    blwfMode: 'Post_Only'
33883  },
33884
33885  Kannada: {
33886    hasOldSpec: true,
33887    virama: 0x0CCD,
33888    basePos: 'Last',
33889    rephPos: POSITIONS.After_Post,
33890    rephMode: 'Implicit',
33891    blwfMode: 'Post_Only'
33892  },
33893
33894  Malayalam: {
33895    hasOldSpec: true,
33896    virama: 0x0D4D,
33897    basePos: 'Last',
33898    rephPos: POSITIONS.After_Main,
33899    rephMode: 'Log_Repha',
33900    blwfMode: 'Pre_And_Post'
33901  },
33902
33903  // Handled by UniversalShaper
33904  // Sinhala: {
33905  //   hasOldSpec: false,
33906  //   virama: 0x0DCA,
33907  //   basePos: 'Last_Sinhala',
33908  //   rephPos: POSITIONS.After_Main,
33909  //   rephMode: 'Explicit',
33910  //   blwfMode: 'Pre_And_Post'
33911  // },
33912
33913  Khmer: {
33914    hasOldSpec: false,
33915    virama: 0x17D2,
33916    basePos: 'First',
33917    rephPos: POSITIONS.Ra_To_Become_Reph,
33918    rephMode: 'Vis_Repha',
33919    blwfMode: 'Pre_And_Post'
33920  }
33921};
33922
33923// Additional decompositions that aren't in Unicode
33924var INDIC_DECOMPOSITIONS = {
33925  // Khmer
33926  0x17BE: [0x17C1, 0x17BE],
33927  0x17BF: [0x17C1, 0x17BF],
33928  0x17C0: [0x17C1, 0x17C0],
33929  0x17C4: [0x17C1, 0x17C4],
33930  0x17C5: [0x17C1, 0x17C5]
33931};
33932
33933var _class$6;
33934var _temp$2;
33935var decompositions = useData.decompositions;
33936
33937var trie$1 = new UnicodeTrie(Buffer("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","base64"));
33938var stateMachine = new StateMachine(indicMachine);
33939
33940/**
33941 * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc.
33942 * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc
33943 */
33944var IndicShaper = (_temp$2 = _class$6 = function (_DefaultShaper) {
33945  _inherits(IndicShaper, _DefaultShaper);
33946
33947  function IndicShaper() {
33948    _classCallCheck(this, IndicShaper);
33949
33950    return _possibleConstructorReturn(this, _DefaultShaper.apply(this, arguments));
33951  }
33952
33953  IndicShaper.planFeatures = function planFeatures(plan) {
33954    plan.addStage(setupSyllables);
33955
33956    plan.addStage(['locl', 'ccmp']);
33957
33958    plan.addStage(initialReordering);
33959
33960    plan.addStage('nukt');
33961    plan.addStage('akhn');
33962    plan.addStage('rphf', false);
33963    plan.addStage('rkrf');
33964    plan.addStage('pref', false);
33965    plan.addStage('blwf', false);
33966    plan.addStage('abvf', false);
33967    plan.addStage('half', false);
33968    plan.addStage('pstf', false);
33969    plan.addStage('vatu');
33970    plan.addStage('cjct');
33971    plan.addStage('cfar', false);
33972
33973    plan.addStage(finalReordering);
33974
33975    plan.addStage({
33976      local: ['init'],
33977      global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig']
33978    });
33979
33980    // Setup the indic config for the selected script
33981    plan.unicodeScript = fromOpenType(plan.script);
33982    plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default;
33983    plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2';
33984
33985    // TODO: turn off kern (Khmer) and liga features.
33986  };
33987
33988  IndicShaper.assignFeatures = function assignFeatures(plan, glyphs) {
33989    var _loop = function _loop(i) {
33990      var codepoint = glyphs[i].codePoints[0];
33991      var d = INDIC_DECOMPOSITIONS[codepoint] || decompositions[codepoint];
33992      if (d) {
33993        var decomposed = d.map(function (c) {
33994          var g = plan.font.glyphForCodePoint(c);
33995          return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);
33996        });
33997
33998        glyphs.splice.apply(glyphs, [i, 1].concat(decomposed));
33999      }
34000    };
34001
34002    // Decompose split matras
34003    // TODO: do this in a more general unicode normalizer
34004    for (var i = glyphs.length - 1; i >= 0; i--) {
34005      _loop(i);
34006    }
34007  };
34008
34009  return IndicShaper;
34010}(DefaultShaper), _class$6.zeroMarkWidths = 'NONE', _temp$2);
34011function indicCategory(glyph) {
34012  return trie$1.get(glyph.codePoints[0]) >> 8;
34013}
34014
34015function indicPosition(glyph) {
34016  return 1 << (trie$1.get(glyph.codePoints[0]) & 0xff);
34017}
34018
34019var IndicInfo = function IndicInfo(category, position, syllableType, syllable) {
34020  _classCallCheck(this, IndicInfo);
34021
34022  this.category = category;
34023  this.position = position;
34024  this.syllableType = syllableType;
34025  this.syllable = syllable;
34026};
34027
34028function setupSyllables(font, glyphs) {
34029  var syllable = 0;
34030  var last = 0;
34031  for (var _iterator = stateMachine.match(glyphs.map(indicCategory)), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
34032    var _ref;
34033
34034    if (_isArray) {
34035      if (_i >= _iterator.length) break;
34036      _ref = _iterator[_i++];
34037    } else {
34038      _i = _iterator.next();
34039      if (_i.done) break;
34040      _ref = _i.value;
34041    }
34042
34043    var _ref2 = _ref,
34044        start = _ref2[0],
34045        end = _ref2[1],
34046        tags = _ref2[2];
34047
34048    if (start > last) {
34049      ++syllable;
34050      for (var _i2 = last; _i2 < start; _i2++) {
34051        glyphs[_i2].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);
34052      }
34053    }
34054
34055    ++syllable;
34056
34057    // Create shaper info
34058    for (var _i3 = start; _i3 <= end; _i3++) {
34059      glyphs[_i3].shaperInfo = new IndicInfo(1 << indicCategory(glyphs[_i3]), indicPosition(glyphs[_i3]), tags[0], syllable);
34060    }
34061
34062    last = end + 1;
34063  }
34064
34065  if (last < glyphs.length) {
34066    ++syllable;
34067    for (var i = last; i < glyphs.length; i++) {
34068      glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);
34069    }
34070  }
34071}
34072
34073function isConsonant(glyph) {
34074  return glyph.shaperInfo.category & CONSONANT_FLAGS;
34075}
34076
34077function isJoiner(glyph) {
34078  return glyph.shaperInfo.category & JOINER_FLAGS;
34079}
34080
34081function isHalantOrCoeng(glyph) {
34082  return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS;
34083}
34084
34085function wouldSubstitute(glyphs, feature) {
34086  for (var _iterator2 = glyphs, _isArray2 = Array.isArray(_iterator2), _i4 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
34087    var _glyph$features;
34088
34089    var _ref3;
34090
34091    if (_isArray2) {
34092      if (_i4 >= _iterator2.length) break;
34093      _ref3 = _iterator2[_i4++];
34094    } else {
34095      _i4 = _iterator2.next();
34096      if (_i4.done) break;
34097      _ref3 = _i4.value;
34098    }
34099
34100    var glyph = _ref3;
34101
34102    glyph.features = (_glyph$features = {}, _glyph$features[feature] = true, _glyph$features);
34103  }
34104
34105  var GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;
34106  GSUB.applyFeatures([feature], glyphs);
34107
34108  return glyphs.length === 1;
34109}
34110
34111function consonantPosition(font, consonant, virama) {
34112  var glyphs = [virama, consonant, virama];
34113  if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) {
34114    return POSITIONS.Below_C;
34115  } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) {
34116    return POSITIONS.Post_C;
34117  } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) {
34118    return POSITIONS.Post_C;
34119  }
34120
34121  return POSITIONS.Base_C;
34122}
34123
34124function initialReordering(font, glyphs, plan) {
34125  var indicConfig = plan.indicConfig;
34126  var features = font._layoutEngine.engine.GSUBProcessor.features;
34127
34128  var dottedCircle = font.glyphForCodePoint(0x25cc).id;
34129  var virama = font.glyphForCodePoint(indicConfig.virama).id;
34130  if (virama) {
34131    var info = new GlyphInfo(font, virama, [indicConfig.virama]);
34132    for (var i = 0; i < glyphs.length; i++) {
34133      if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {
34134        glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info);
34135      }
34136    }
34137  }
34138
34139  for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {
34140    var _glyphs$start$shaperI = glyphs[start].shaperInfo,
34141        category = _glyphs$start$shaperI.category,
34142        syllableType = _glyphs$start$shaperI.syllableType;
34143
34144
34145    if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {
34146      continue;
34147    }
34148
34149    if (syllableType === 'broken_cluster' && dottedCircle) {
34150      var g = new GlyphInfo(font, dottedCircle, [0x25cc]);
34151      g.shaperInfo = new IndicInfo(1 << indicCategory(g), indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable);
34152
34153      // Insert after possible Repha.
34154      var _i5 = start;
34155      while (_i5 < end && glyphs[_i5].shaperInfo.category === CATEGORIES.Repha) {
34156        _i5++;
34157      }
34158
34159      glyphs.splice(_i5++, 0, g);
34160      end++;
34161    }
34162
34163    // 1. Find base consonant:
34164    //
34165    // The shaping engine finds the base consonant of the syllable, using the
34166    // following algorithm: starting from the end of the syllable, move backwards
34167    // until a consonant is found that does not have a below-base or post-base
34168    // form (post-base forms have to follow below-base forms), or that is not a
34169    // pre-base reordering Ra, or arrive at the first consonant. The consonant
34170    // stopped at will be the base.
34171
34172    var base = end;
34173    var limit = start;
34174    var hasReph = false;
34175
34176    // If the syllable starts with Ra + Halant (in a script that has Reph)
34177    // and has more than one consonant, Ra is excluded from candidates for
34178    // base consonants.
34179    if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)) {
34180      // See if it matches the 'rphf' feature.
34181      var _g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];
34182      if (wouldSubstitute(_g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && wouldSubstitute(_g, 'rphf')) {
34183        limit += 2;
34184        while (limit < end && isJoiner(glyphs[limit])) {
34185          limit++;
34186        }
34187        base = start;
34188        hasReph = true;
34189      }
34190    } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) {
34191      limit++;
34192      while (limit < end && isJoiner(glyphs[limit])) {
34193        limit++;
34194      }
34195      base = start;
34196      hasReph = true;
34197    }
34198
34199    switch (indicConfig.basePos) {
34200      case 'Last':
34201        {
34202          // starting from the end of the syllable, move backwards
34203          var _i6 = end;
34204          var seenBelow = false;
34205
34206          do {
34207            var _info = glyphs[--_i6].shaperInfo;
34208
34209            // until a consonant is found
34210            if (isConsonant(glyphs[_i6])) {
34211              // that does not have a below-base or post-base form
34212              // (post-base forms have to follow below-base forms),
34213              if (_info.position !== POSITIONS.Below_C && (_info.position !== POSITIONS.Post_C || seenBelow)) {
34214                base = _i6;
34215                break;
34216              }
34217
34218              // or that is not a pre-base reordering Ra,
34219              //
34220              // IMPLEMENTATION NOTES:
34221              //
34222              // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped
34223              // by the logic above already.
34224              //
34225
34226              // or arrive at the first consonant. The consonant stopped at will
34227              // be the base.
34228              if (_info.position === POSITIONS.Below_C) {
34229                seenBelow = true;
34230              }
34231
34232              base = _i6;
34233            } else if (start < _i6 && _info.category === CATEGORIES.ZWJ && glyphs[_i6 - 1].shaperInfo.category === CATEGORIES.H) {
34234              // A ZWJ after a Halant stops the base search, and requests an explicit
34235              // half form.
34236              // A ZWJ before a Halant, requests a subjoined form instead, and hence
34237              // search continues.  This is particularly important for Bengali
34238              // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya.
34239              break;
34240            }
34241          } while (_i6 > limit);
34242          break;
34243        }
34244
34245      case 'First':
34246        {
34247          // The first consonant is always the base.
34248          base = start;
34249
34250          // Mark all subsequent consonants as below.
34251          for (var _i7 = base + 1; _i7 < end; _i7++) {
34252            if (isConsonant(glyphs[_i7])) {
34253              glyphs[_i7].shaperInfo.position = POSITIONS.Below_C;
34254            }
34255          }
34256        }
34257    }
34258
34259    // If the syllable starts with Ra + Halant (in a script that has Reph)
34260    // and has more than one consonant, Ra is excluded from candidates for
34261    // base consonants.
34262    //
34263    //  Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)
34264    if (hasReph && base === start && limit - base <= 2) {
34265      hasReph = false;
34266    }
34267
34268    // 2. Decompose and reorder Matras:
34269    //
34270    // Each matra and any syllable modifier sign in the cluster are moved to the
34271    // appropriate position relative to the consonant(s) in the cluster. The
34272    // shaping engine decomposes two- or three-part matras into their constituent
34273    // parts before any repositioning. Matra characters are classified by which
34274    // consonant in a conjunct they have affinity for and are reordered to the
34275    // following positions:
34276    //
34277    //   o Before first half form in the syllable
34278    //   o After subjoined consonants
34279    //   o After post-form consonant
34280    //   o After main consonant (for above marks)
34281    //
34282    // IMPLEMENTATION NOTES:
34283    //
34284    // The normalize() routine has already decomposed matras for us, so we don't
34285    // need to worry about that.
34286
34287    // 3.  Reorder marks to canonical order:
34288    //
34289    // Adjacent nukta and halant or nukta and vedic sign are always repositioned
34290    // if necessary, so that the nukta is first.
34291    //
34292    // IMPLEMENTATION NOTES:
34293    //
34294    // We don't need to do this: the normalize() routine already did this for us.
34295
34296    // Reorder characters
34297
34298    for (var _i8 = start; _i8 < base; _i8++) {
34299      var _info2 = glyphs[_i8].shaperInfo;
34300      _info2.position = Math.min(POSITIONS.Pre_C, _info2.position);
34301    }
34302
34303    if (base < end) {
34304      glyphs[base].shaperInfo.position = POSITIONS.Base_C;
34305    }
34306
34307    // Mark final consonants.  A final consonant is one appearing after a matra,
34308    // like in Khmer.
34309    for (var _i9 = base + 1; _i9 < end; _i9++) {
34310      if (glyphs[_i9].shaperInfo.category === CATEGORIES.M) {
34311        for (var j = _i9 + 1; j < end; j++) {
34312          if (isConsonant(glyphs[j])) {
34313            glyphs[j].shaperInfo.position = POSITIONS.Final_C;
34314            break;
34315          }
34316        }
34317        break;
34318      }
34319    }
34320
34321    // Handle beginning Ra
34322    if (hasReph) {
34323      glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph;
34324    }
34325
34326    // For old-style Indic script tags, move the first post-base Halant after
34327    // last consonant.
34328    //
34329    // Reports suggest that in some scripts Uniscribe does this only if there
34330    // is *not* a Halant after last consonant already (eg. Kannada), while it
34331    // does it unconditionally in other scripts (eg. Malayalam).  We don't
34332    // currently know about other scripts, so we single out Malayalam for now.
34333    //
34334    // Kannada test case:
34335    // U+0C9A,U+0CCD,U+0C9A,U+0CCD
34336    // With some versions of Lohit Kannada.
34337    // https://bugs.freedesktop.org/show_bug.cgi?id=59118
34338    //
34339    // Malayalam test case:
34340    // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D
34341    // With lohit-ttf-20121122/Lohit-Malayalam.ttf
34342    if (plan.isOldSpec) {
34343      var disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';
34344      for (var _i10 = base + 1; _i10 < end; _i10++) {
34345        if (glyphs[_i10].shaperInfo.category === CATEGORIES.H) {
34346          var _j = void 0;
34347          for (_j = end - 1; _j > _i10; _j--) {
34348            if (isConsonant(glyphs[_j]) || disallowDoubleHalants && glyphs[_j].shaperInfo.category === CATEGORIES.H) {
34349              break;
34350            }
34351          }
34352
34353          if (glyphs[_j].shaperInfo.category !== CATEGORIES.H && _j > _i10) {
34354            // Move Halant to after last consonant.
34355            var t = glyphs[_i10];
34356            glyphs.splice.apply(glyphs, [_i10, 0].concat(glyphs.splice(_i10 + 1, _j - _i10)));
34357            glyphs[_j] = t;
34358          }
34359
34360          break;
34361        }
34362      }
34363    }
34364
34365    // Attach misc marks to previous char to move with them.
34366    var lastPos = POSITIONS.Start;
34367    for (var _i11 = start; _i11 < end; _i11++) {
34368      var _info3 = glyphs[_i11].shaperInfo;
34369      if (_info3.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & _info3.category)) {
34370        _info3.position = lastPos;
34371        if (_info3.category === CATEGORIES.H && _info3.position === POSITIONS.Pre_M) {
34372          // Uniscribe doesn't move the Halant with Left Matra.
34373          // TEST: U+092B,U+093F,U+094DE
34374          // We follow.  This is important for the Sinhala
34375          // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA
34376          // where U+0DD9 is a left matra and U+0DCA is the virama.
34377          // We don't want to move the virama with the left matra.
34378          // TEST: U+0D9A,U+0DDA
34379          for (var _j2 = _i11; _j2 > start; _j2--) {
34380            if (glyphs[_j2 - 1].shaperInfo.position !== POSITIONS.Pre_M) {
34381              _info3.position = glyphs[_j2 - 1].shaperInfo.position;
34382              break;
34383            }
34384          }
34385        }
34386      } else if (_info3.position !== POSITIONS.SMVD) {
34387        lastPos = _info3.position;
34388      }
34389    }
34390
34391    // For post-base consonants let them own anything before them
34392    // since the last consonant or matra.
34393    var last = base;
34394    for (var _i12 = base + 1; _i12 < end; _i12++) {
34395      if (isConsonant(glyphs[_i12])) {
34396        for (var _j3 = last + 1; _j3 < _i12; _j3++) {
34397          if (glyphs[_j3].shaperInfo.position < POSITIONS.SMVD) {
34398            glyphs[_j3].shaperInfo.position = glyphs[_i12].shaperInfo.position;
34399          }
34400        }
34401        last = _i12;
34402      } else if (glyphs[_i12].shaperInfo.category === CATEGORIES.M) {
34403        last = _i12;
34404      }
34405    }
34406
34407    var arr = glyphs.slice(start, end);
34408    arr.sort(function (a, b) {
34409      return a.shaperInfo.position - b.shaperInfo.position;
34410    });
34411    glyphs.splice.apply(glyphs, [start, arr.length].concat(arr));
34412
34413    // Find base again
34414    for (var _i13 = start; _i13 < end; _i13++) {
34415      if (glyphs[_i13].shaperInfo.position === POSITIONS.Base_C) {
34416        base = _i13;
34417        break;
34418      }
34419    }
34420
34421    // Setup features now
34422
34423    // Reph
34424    for (var _i14 = start; _i14 < end && glyphs[_i14].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; _i14++) {
34425      glyphs[_i14].features.rphf = true;
34426    }
34427
34428    // Pre-base
34429    var blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';
34430    for (var _i15 = start; _i15 < base; _i15++) {
34431      glyphs[_i15].features.half = true;
34432      if (blwf) {
34433        glyphs[_i15].features.blwf = true;
34434      }
34435    }
34436
34437    // Post-base
34438    for (var _i16 = base + 1; _i16 < end; _i16++) {
34439      glyphs[_i16].features.abvf = true;
34440      glyphs[_i16].features.pstf = true;
34441      glyphs[_i16].features.blwf = true;
34442    }
34443
34444    if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {
34445      // Old-spec eye-lash Ra needs special handling.  From the
34446      // spec:
34447      //
34448      // "The feature 'below-base form' is applied to consonants
34449      // having below-base forms and following the base consonant.
34450      // The exception is vattu, which may appear below half forms
34451      // as well as below the base glyph. The feature 'below-base
34452      // form' will be applied to all such occurrences of Ra as well."
34453      //
34454      // Test case: U+0924,U+094D,U+0930,U+094d,U+0915
34455      // with Sanskrit 2003 font.
34456      //
34457      // However, note that Ra,Halant,ZWJ is the correct way to
34458      // request eyelash form of Ra, so we wouldbn't inhibit it
34459      // in that sequence.
34460      //
34461      // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915
34462      for (var _i17 = start; _i17 + 1 < base; _i17++) {
34463        if (glyphs[_i17].shaperInfo.category === CATEGORIES.Ra && glyphs[_i17 + 1].shaperInfo.category === CATEGORIES.H && (_i17 + 1 === base || glyphs[_i17 + 2].shaperInfo.category === CATEGORIES.ZWJ)) {
34464          glyphs[_i17].features.blwf = true;
34465          glyphs[_i17 + 1].features.blwf = true;
34466        }
34467      }
34468    }
34469
34470    var prefLen = 2;
34471    if (features.pref && base + prefLen < end) {
34472      // Find a Halant,Ra sequence and mark it for pre-base reordering processing.
34473      for (var _i18 = base + 1; _i18 + prefLen - 1 < end; _i18++) {
34474        var _g2 = [glyphs[_i18].copy(), glyphs[_i18 + 1].copy()];
34475        if (wouldSubstitute(_g2, 'pref')) {
34476          for (var _j4 = 0; _j4 < prefLen; _j4++) {
34477            glyphs[_i18++].features.pref = true;
34478          }
34479
34480          // Mark the subsequent stuff with 'cfar'.  Used in Khmer.
34481          // Read the feature spec.
34482          // This allows distinguishing the following cases with MS Khmer fonts:
34483          // U+1784,U+17D2,U+179A,U+17D2,U+1782
34484          // U+1784,U+17D2,U+1782,U+17D2,U+179A
34485          if (features.cfar) {
34486            for (; _i18 < end; _i18++) {
34487              glyphs[_i18].features.cfar = true;
34488            }
34489          }
34490
34491          break;
34492        }
34493      }
34494    }
34495
34496    // Apply ZWJ/ZWNJ effects
34497    for (var _i19 = start + 1; _i19 < end; _i19++) {
34498      if (isJoiner(glyphs[_i19])) {
34499        var nonJoiner = glyphs[_i19].shaperInfo.category === CATEGORIES.ZWNJ;
34500        var _j5 = _i19;
34501
34502        do {
34503          _j5--;
34504
34505          // ZWJ/ZWNJ should disable CJCT.  They do that by simply
34506          // being there, since we don't skip them for the CJCT
34507          // feature (ie. F_MANUAL_ZWJ)
34508
34509          // A ZWNJ disables HALF.
34510          if (nonJoiner) {
34511            delete glyphs[_j5].features.half;
34512          }
34513        } while (_j5 > start && !isConsonant(glyphs[_j5]));
34514      }
34515    }
34516  }
34517}
34518
34519function finalReordering(font, glyphs, plan) {
34520  var indicConfig = plan.indicConfig;
34521  var features = font._layoutEngine.engine.GSUBProcessor.features;
34522
34523  for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {
34524    // 4. Final reordering:
34525    //
34526    // After the localized forms and basic shaping forms GSUB features have been
34527    // applied (see below), the shaping engine performs some final glyph
34528    // reordering before applying all the remaining font features to the entire
34529    // cluster.
34530
34531    var tryPref = !!features.pref;
34532
34533    // Find base again
34534    var base = start;
34535    for (; base < end; base++) {
34536      if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) {
34537        if (tryPref && base + 1 < end) {
34538          for (var i = base + 1; i < end; i++) {
34539            if (glyphs[i].features.pref) {
34540              if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {
34541                // Ok, this was a 'pref' candidate but didn't form any.
34542                // Base is around here...
34543                base = i;
34544                while (base < end && isHalantOrCoeng(glyphs[base])) {
34545                  base++;
34546                }
34547                glyphs[base].shaperInfo.position = POSITIONS.BASE_C;
34548                tryPref = false;
34549              }
34550              break;
34551            }
34552          }
34553        }
34554
34555        // For Malayalam, skip over unformed below- (but NOT post-) forms.
34556        if (plan.unicodeScript === 'Malayalam') {
34557          for (var _i20 = base + 1; _i20 < end; _i20++) {
34558            while (_i20 < end && isJoiner(glyphs[_i20])) {
34559              _i20++;
34560            }
34561
34562            if (_i20 === end || !isHalantOrCoeng(glyphs[_i20])) {
34563              break;
34564            }
34565
34566            _i20++; // Skip halant.
34567            while (_i20 < end && isJoiner(glyphs[_i20])) {
34568              _i20++;
34569            }
34570
34571            if (_i20 < end && isConsonant(glyphs[_i20]) && glyphs[_i20].shaperInfo.position === POSITIONS.Below_C) {
34572              base = _i20;
34573              glyphs[base].shaperInfo.position = POSITIONS.Base_C;
34574            }
34575          }
34576        }
34577
34578        if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) {
34579          base--;
34580        }
34581        break;
34582      }
34583    }
34584
34585    if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) {
34586      base--;
34587    }
34588
34589    if (base < end) {
34590      while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) {
34591        base--;
34592      }
34593    }
34594
34595    // o Reorder matras:
34596    //
34597    // If a pre-base matra character had been reordered before applying basic
34598    // features, the glyph can be moved closer to the main consonant based on
34599    // whether half-forms had been formed. Actual position for the matra is
34600    // defined as “after last standalone halant glyph, after initial matra
34601    // position and before the main consonant”. If ZWJ or ZWNJ follow this
34602    // halant, position is moved after it.
34603    //
34604
34605    if (start + 1 < end && start < base) {
34606      // Otherwise there can't be any pre-base matra characters.
34607      // If we lost track of base, alas, position before last thingy.
34608      var newPos = base === end ? base - 2 : base - 1;
34609
34610      // Malayalam / Tamil do not have "half" forms or explicit virama forms.
34611      // The glyphs formed by 'half' are Chillus or ligated explicit viramas.
34612      // We want to position matra after them.
34613      if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {
34614        while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {
34615          newPos--;
34616        }
34617
34618        // If we found no Halant we are done.
34619        // Otherwise only proceed if the Halant does
34620        // not belong to the Matra itself!
34621        if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {
34622          // If ZWJ or ZWNJ follow this halant, position is moved after it.
34623          if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) {
34624            newPos++;
34625          }
34626        } else {
34627          newPos = start; // No move.
34628        }
34629      }
34630
34631      if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {
34632        // Now go see if there's actually any matras...
34633        for (var _i21 = newPos; _i21 > start; _i21--) {
34634          if (glyphs[_i21 - 1].shaperInfo.position === POSITIONS.Pre_M) {
34635            var oldPos = _i21 - 1;
34636            if (oldPos < base && base <= newPos) {
34637              // Shouldn't actually happen.
34638              base--;
34639            }
34640
34641            var tmp = glyphs[oldPos];
34642            glyphs.splice.apply(glyphs, [oldPos, 0].concat(glyphs.splice(oldPos + 1, newPos - oldPos)));
34643            glyphs[newPos] = tmp;
34644
34645            newPos--;
34646          }
34647        }
34648      }
34649    }
34650
34651    // o Reorder reph:
34652    //
34653    // Reph’s original position is always at the beginning of the syllable,
34654    // (i.e. it is not reordered at the character reordering stage). However,
34655    // it will be reordered according to the basic-forms shaping results.
34656    // Possible positions for reph, depending on the script, are; after main,
34657    // before post-base consonant forms, and after post-base consonant forms.
34658
34659    // Two cases:
34660    //
34661    // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then
34662    //   we should only move it if the sequence ligated to the repha form.
34663    //
34664    // - If repha is encoded separately and in the logical position, we should only
34665    //   move it if it did NOT ligate.  If it ligated, it's probably the font trying
34666    //   to make it work without the reordering.
34667    if (start + 1 < end && glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph && glyphs[start].shaperInfo.category === CATEGORIES.Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) {
34668      var newRephPos = void 0;
34669      var rephPos = indicConfig.rephPos;
34670      var found = false;
34671
34672      // 1. If reph should be positioned after post-base consonant forms,
34673      //    proceed to step 5.
34674      if (rephPos !== POSITIONS.After_Post) {
34675        //  2. If the reph repositioning class is not after post-base: target
34676        //     position is after the first explicit halant glyph between the
34677        //     first post-reph consonant and last main consonant. If ZWJ or ZWNJ
34678        //     are following this halant, position is moved after it. If such
34679        //     position is found, this is the target position. Otherwise,
34680        //     proceed to the next step.
34681        //
34682        //     Note: in old-implementation fonts, where classifications were
34683        //     fixed in shaping engine, there was no case where reph position
34684        //     will be found on this step.
34685        newRephPos = start + 1;
34686        while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {
34687          newRephPos++;
34688        }
34689
34690        if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {
34691          // ->If ZWJ or ZWNJ are following this halant, position is moved after it.
34692          if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {
34693            newRephPos++;
34694          }
34695
34696          found = true;
34697        }
34698
34699        // 3. If reph should be repositioned after the main consonant: find the
34700        //    first consonant not ligated with main, or find the first
34701        //    consonant that is not a potential pre-base reordering Ra.
34702        if (!found && rephPos === POSITIONS.After_Main) {
34703          newRephPos = base;
34704          while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) {
34705            newRephPos++;
34706          }
34707
34708          found = newRephPos < end;
34709        }
34710
34711        // 4. If reph should be positioned before post-base consonant, find
34712        //    first post-base classified consonant not ligated with main. If no
34713        //    consonant is found, the target position should be before the
34714        //    first matra, syllable modifier sign or vedic sign.
34715        //
34716        // This is our take on what step 4 is trying to say (and failing, BADLY).
34717        if (!found && rephPos === POSITIONS.After_Sub) {
34718          newRephPos = base;
34719          while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) {
34720            newRephPos++;
34721          }
34722
34723          found = newRephPos < end;
34724        }
34725      }
34726
34727      //  5. If no consonant is found in steps 3 or 4, move reph to a position
34728      //     immediately before the first post-base matra, syllable modifier
34729      //     sign or vedic sign that has a reordering class after the intended
34730      //     reph position. For example, if the reordering position for reph
34731      //     is post-main, it will skip above-base matras that also have a
34732      //     post-main position.
34733      if (!found) {
34734        // Copied from step 2.
34735        newRephPos = start + 1;
34736        while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {
34737          newRephPos++;
34738        }
34739
34740        if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {
34741          // ->If ZWJ or ZWNJ are following this halant, position is moved after it.
34742          if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {
34743            newRephPos++;
34744          }
34745
34746          found = true;
34747        }
34748      }
34749
34750      // 6. Otherwise, reorder reph to the end of the syllable.
34751      if (!found) {
34752        newRephPos = end - 1;
34753        while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) {
34754          newRephPos--;
34755        }
34756
34757        // If the Reph is to be ending up after a Matra,Halant sequence,
34758        // position it before that Halant so it can interact with the Matra.
34759        // However, if it's a plain Consonant,Halant we shouldn't do that.
34760        // Uniscribe doesn't do this.
34761        // TEST: U+0930,U+094D,U+0915,U+094B,U+094D
34762        if (isHalantOrCoeng(glyphs[newRephPos])) {
34763          for (var _i22 = base + 1; _i22 < newRephPos; _i22++) {
34764            if (glyphs[_i22].shaperInfo.category === CATEGORIES.M) {
34765              newRephPos--;
34766            }
34767          }
34768        }
34769      }
34770
34771      var reph = glyphs[start];
34772      glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, newRephPos - start)));
34773      glyphs[newRephPos] = reph;
34774
34775      if (start < base && base <= newRephPos) {
34776        base--;
34777      }
34778    }
34779
34780    // o Reorder pre-base reordering consonants:
34781    //
34782    // If a pre-base reordering consonant is found, reorder it according to
34783    // the following rules:
34784    if (tryPref && base + 1 < end) {
34785      for (var _i23 = base + 1; _i23 < end; _i23++) {
34786        if (glyphs[_i23].features.pref) {
34787          // 1. Only reorder a glyph produced by substitution during application
34788          //    of the <pref> feature. (Note that a font may shape a Ra consonant with
34789          //    the feature generally but block it in certain contexts.)
34790
34791          // Note: We just check that something got substituted.  We don't check that
34792          // the <pref> feature actually did it...
34793          //
34794          // Reorder pref only if it ligated.
34795          if (glyphs[_i23].isLigated && !glyphs[_i23].isMultiplied) {
34796            // 2. Try to find a target position the same way as for pre-base matra.
34797            //    If it is found, reorder pre-base consonant glyph.
34798            //
34799            // 3. If position is not found, reorder immediately before main
34800            //    consonant.
34801            var _newPos = base;
34802
34803            // Malayalam / Tamil do not have "half" forms or explicit virama forms.
34804            // The glyphs formed by 'half' are Chillus or ligated explicit viramas.
34805            // We want to position matra after them.
34806            if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {
34807              while (_newPos > start && !(glyphs[_newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {
34808                _newPos--;
34809              }
34810
34811              // In Khmer coeng model, a H,Ra can go *after* matras.  If it goes after a
34812              // split matra, it should be reordered to *before* the left part of such matra.
34813              if (_newPos > start && glyphs[_newPos - 1].shaperInfo.category === CATEGORIES.M) {
34814                var _oldPos2 = _i23;
34815                for (var j = base + 1; j < _oldPos2; j++) {
34816                  if (glyphs[j].shaperInfo.category === CATEGORIES.M) {
34817                    _newPos--;
34818                    break;
34819                  }
34820                }
34821              }
34822            }
34823
34824            if (_newPos > start && isHalantOrCoeng(glyphs[_newPos - 1])) {
34825              // -> If ZWJ or ZWNJ follow this halant, position is moved after it.
34826              if (_newPos < end && isJoiner(glyphs[_newPos])) {
34827                _newPos++;
34828              }
34829            }
34830
34831            var _oldPos = _i23;
34832            var _tmp = glyphs[_oldPos];
34833            glyphs.splice.apply(glyphs, [_newPos + 1, 0].concat(glyphs.splice(_newPos, _oldPos - _newPos)));
34834            glyphs[_newPos] = _tmp;
34835
34836            if (_newPos <= base && base < _oldPos) {
34837              base++;
34838            }
34839          }
34840
34841          break;
34842        }
34843      }
34844    }
34845
34846    // Apply 'init' to the Left Matra if it's a word start.
34847    if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(unicode.getCategory(glyphs[start - 1].codePoints[0])))) {
34848      glyphs[start].features.init = true;
34849    }
34850  }
34851}
34852
34853function nextSyllable(glyphs, start) {
34854  if (start >= glyphs.length) return start;
34855  var syllable = glyphs[start].shaperInfo.syllable;
34856  while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {}
34857  return start;
34858}
34859
34860var _class$7;
34861var _temp$3;
34862var categories$1 = useData.categories;
34863var decompositions$2 = useData.decompositions;
34864var trie$2 = new UnicodeTrie(Buffer("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","base64"));
34865var stateMachine$1 = new StateMachine(useData);
34866
34867/**
34868 * This shaper is an implementation of the Universal Shaping Engine, which
34869 * uses Unicode data to shape a number of scripts without a dedicated shaping engine.
34870 * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm.
34871 */
34872var UniversalShaper = (_temp$3 = _class$7 = function (_DefaultShaper) {
34873  _inherits(UniversalShaper, _DefaultShaper);
34874
34875  function UniversalShaper() {
34876    _classCallCheck(this, UniversalShaper);
34877
34878    return _possibleConstructorReturn(this, _DefaultShaper.apply(this, arguments));
34879  }
34880
34881  UniversalShaper.planFeatures = function planFeatures(plan) {
34882    plan.addStage(setupSyllables$1);
34883
34884    // Default glyph pre-processing group
34885    plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']);
34886
34887    // Reordering group
34888    plan.addStage(clearSubstitutionFlags);
34889    plan.addStage(['rphf'], false);
34890    plan.addStage(recordRphf);
34891    plan.addStage(clearSubstitutionFlags);
34892    plan.addStage(['pref']);
34893    plan.addStage(recordPref);
34894
34895    // Orthographic unit shaping group
34896    plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']);
34897    plan.addStage(reorder);
34898
34899    // Topographical features
34900    // Scripts that need this are handled by the Arabic shaper, not implemented here for now.
34901    // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);
34902
34903    // Standard topographic presentation and positional feature application
34904    plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']);
34905  };
34906
34907  UniversalShaper.assignFeatures = function assignFeatures(plan, glyphs) {
34908    var _loop = function _loop(i) {
34909      var codepoint = glyphs[i].codePoints[0];
34910      if (decompositions$2[codepoint]) {
34911        var decomposed = decompositions$2[codepoint].map(function (c) {
34912          var g = plan.font.glyphForCodePoint(c);
34913          return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);
34914        });
34915
34916        glyphs.splice.apply(glyphs, [i, 1].concat(decomposed));
34917      }
34918    };
34919
34920    // Decompose split vowels
34921    // TODO: do this in a more general unicode normalizer
34922    for (var i = glyphs.length - 1; i >= 0; i--) {
34923      _loop(i);
34924    }
34925  };
34926
34927  return UniversalShaper;
34928}(DefaultShaper), _class$7.zeroMarkWidths = 'BEFORE_GPOS', _temp$3);
34929function useCategory(glyph) {
34930  return trie$2.get(glyph.codePoints[0]);
34931}
34932
34933var USEInfo = function USEInfo(category, syllableType, syllable) {
34934  _classCallCheck(this, USEInfo);
34935
34936  this.category = category;
34937  this.syllableType = syllableType;
34938  this.syllable = syllable;
34939};
34940
34941function setupSyllables$1(font, glyphs) {
34942  var syllable = 0;
34943  for (var _iterator = stateMachine$1.match(glyphs.map(useCategory)), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
34944    var _ref;
34945
34946    if (_isArray) {
34947      if (_i >= _iterator.length) break;
34948      _ref = _iterator[_i++];
34949    } else {
34950      _i = _iterator.next();
34951      if (_i.done) break;
34952      _ref = _i.value;
34953    }
34954
34955    var _ref2 = _ref,
34956        start = _ref2[0],
34957        end = _ref2[1],
34958        tags = _ref2[2];
34959
34960    ++syllable;
34961
34962    // Create shaper info
34963    for (var i = start; i <= end; i++) {
34964      glyphs[i].shaperInfo = new USEInfo(categories$1[useCategory(glyphs[i])], tags[0], syllable);
34965    }
34966
34967    // Assign rphf feature
34968    var limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);
34969    for (var _i2 = start; _i2 < start + limit; _i2++) {
34970      glyphs[_i2].features.rphf = true;
34971    }
34972  }
34973}
34974
34975function clearSubstitutionFlags(font, glyphs) {
34976  for (var _iterator2 = glyphs, _isArray2 = Array.isArray(_iterator2), _i3 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
34977    var _ref3;
34978
34979    if (_isArray2) {
34980      if (_i3 >= _iterator2.length) break;
34981      _ref3 = _iterator2[_i3++];
34982    } else {
34983      _i3 = _iterator2.next();
34984      if (_i3.done) break;
34985      _ref3 = _i3.value;
34986    }
34987
34988    var glyph = _ref3;
34989
34990    glyph.substituted = false;
34991  }
34992}
34993
34994function recordRphf(font, glyphs) {
34995  for (var _iterator3 = glyphs, _isArray3 = Array.isArray(_iterator3), _i4 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
34996    var _ref4;
34997
34998    if (_isArray3) {
34999      if (_i4 >= _iterator3.length) break;
35000      _ref4 = _iterator3[_i4++];
35001    } else {
35002      _i4 = _iterator3.next();
35003      if (_i4.done) break;
35004      _ref4 = _i4.value;
35005    }
35006
35007    var glyph = _ref4;
35008
35009    if (glyph.substituted && glyph.features.rphf) {
35010      // Mark a substituted repha.
35011      glyph.shaperInfo.category = 'R';
35012    }
35013  }
35014}
35015
35016function recordPref(font, glyphs) {
35017  for (var _iterator4 = glyphs, _isArray4 = Array.isArray(_iterator4), _i5 = 0, _iterator4 = _isArray4 ? _iterator4 : _getIterator(_iterator4);;) {
35018    var _ref5;
35019
35020    if (_isArray4) {
35021      if (_i5 >= _iterator4.length) break;
35022      _ref5 = _iterator4[_i5++];
35023    } else {
35024      _i5 = _iterator4.next();
35025      if (_i5.done) break;
35026      _ref5 = _i5.value;
35027    }
35028
35029    var glyph = _ref5;
35030
35031    if (glyph.substituted) {
35032      // Mark a substituted pref as VPre, as they behave the same way.
35033      glyph.shaperInfo.category = 'VPre';
35034    }
35035  }
35036}
35037
35038function reorder(font, glyphs) {
35039  var dottedCircle = font.glyphForCodePoint(0x25cc).id;
35040
35041  for (var start = 0, end = nextSyllable$1(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable$1(glyphs, start)) {
35042    var i = void 0,
35043        j = void 0;
35044    var info = glyphs[start].shaperInfo;
35045    var type = info.syllableType;
35046
35047    // Only a few syllable types need reordering.
35048    if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') {
35049      continue;
35050    }
35051
35052    // Insert a dotted circle glyph in broken clusters.
35053    if (type === 'broken_cluster' && dottedCircle) {
35054      var g = new GlyphInfo(font, dottedCircle, [0x25cc]);
35055      g.shaperInfo = info;
35056
35057      // Insert after possible Repha.
35058      for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++) {}
35059      glyphs.splice(++i, 0, g);
35060      end++;
35061    }
35062
35063    // Move things forward.
35064    if (info.category === 'R' && end - start > 1) {
35065      // Got a repha. Reorder it to after first base, before first halant.
35066      for (i = start + 1; i < end; i++) {
35067        info = glyphs[i].shaperInfo;
35068        if (isBase(info) || isHalant(glyphs[i])) {
35069          // If we hit a halant, move before it; otherwise it's a base: move to it's
35070          // place, and shift things in between backward.
35071          if (isHalant(glyphs[i])) {
35072            i--;
35073          }
35074
35075          glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, i - start), [glyphs[i]]));
35076          break;
35077        }
35078      }
35079    }
35080
35081    // Move things back.
35082    for (i = start, j = end; i < end; i++) {
35083      info = glyphs[i].shaperInfo;
35084      if (isBase(info) || isHalant(glyphs[i])) {
35085        // If we hit a halant, move after it; otherwise it's a base: move to it's
35086        // place, and shift things in between backward.
35087        j = isHalant(glyphs[i]) ? i + 1 : i;
35088      } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) {
35089        glyphs.splice.apply(glyphs, [j, 1, glyphs[i]].concat(glyphs.splice(j, i - j)));
35090      }
35091    }
35092  }
35093}
35094
35095function nextSyllable$1(glyphs, start) {
35096  if (start >= glyphs.length) return start;
35097  var syllable = glyphs[start].shaperInfo.syllable;
35098  while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {}
35099  return start;
35100}
35101
35102function isHalant(glyph) {
35103  return glyph.shaperInfo.category === 'H' && !glyph.isLigated;
35104}
35105
35106function isBase(info) {
35107  return info.category === 'B' || info.category === 'GB';
35108}
35109
35110var SHAPERS = {
35111  arab: ArabicShaper, // Arabic
35112  mong: ArabicShaper, // Mongolian
35113  syrc: ArabicShaper, // Syriac
35114  'nko ': ArabicShaper, // N'Ko
35115  phag: ArabicShaper, // Phags Pa
35116  mand: ArabicShaper, // Mandaic
35117  mani: ArabicShaper, // Manichaean
35118  phlp: ArabicShaper, // Psalter Pahlavi
35119
35120  hang: HangulShaper, // Hangul
35121
35122  bng2: IndicShaper, // Bengali
35123  beng: IndicShaper, // Bengali
35124  dev2: IndicShaper, // Devanagari
35125  deva: IndicShaper, // Devanagari
35126  gjr2: IndicShaper, // Gujarati
35127  gujr: IndicShaper, // Gujarati
35128  guru: IndicShaper, // Gurmukhi
35129  gur2: IndicShaper, // Gurmukhi
35130  knda: IndicShaper, // Kannada
35131  knd2: IndicShaper, // Kannada
35132  mlm2: IndicShaper, // Malayalam
35133  mlym: IndicShaper, // Malayalam
35134  ory2: IndicShaper, // Oriya
35135  orya: IndicShaper, // Oriya
35136  taml: IndicShaper, // Tamil
35137  tml2: IndicShaper, // Tamil
35138  telu: IndicShaper, // Telugu
35139  tel2: IndicShaper, // Telugu
35140  khmr: IndicShaper, // Khmer
35141
35142  bali: UniversalShaper, // Balinese
35143  batk: UniversalShaper, // Batak
35144  brah: UniversalShaper, // Brahmi
35145  bugi: UniversalShaper, // Buginese
35146  buhd: UniversalShaper, // Buhid
35147  cakm: UniversalShaper, // Chakma
35148  cham: UniversalShaper, // Cham
35149  dupl: UniversalShaper, // Duployan
35150  egyp: UniversalShaper, // Egyptian Hieroglyphs
35151  gran: UniversalShaper, // Grantha
35152  hano: UniversalShaper, // Hanunoo
35153  java: UniversalShaper, // Javanese
35154  kthi: UniversalShaper, // Kaithi
35155  kali: UniversalShaper, // Kayah Li
35156  khar: UniversalShaper, // Kharoshthi
35157  khoj: UniversalShaper, // Khojki
35158  sind: UniversalShaper, // Khudawadi
35159  lepc: UniversalShaper, // Lepcha
35160  limb: UniversalShaper, // Limbu
35161  mahj: UniversalShaper, // Mahajani
35162  // mand: UniversalShaper, // Mandaic
35163  // mani: UniversalShaper, // Manichaean
35164  mtei: UniversalShaper, // Meitei Mayek
35165  modi: UniversalShaper, // Modi
35166  // mong: UniversalShaper, // Mongolian
35167  // 'nko ': UniversalShaper, // N’Ko
35168  hmng: UniversalShaper, // Pahawh Hmong
35169  // phag: UniversalShaper, // Phags-pa
35170  // phlp: UniversalShaper, // Psalter Pahlavi
35171  rjng: UniversalShaper, // Rejang
35172  saur: UniversalShaper, // Saurashtra
35173  shrd: UniversalShaper, // Sharada
35174  sidd: UniversalShaper, // Siddham
35175  sinh: UniversalShaper, // Sinhala
35176  sund: UniversalShaper, // Sundanese
35177  sylo: UniversalShaper, // Syloti Nagri
35178  tglg: UniversalShaper, // Tagalog
35179  tagb: UniversalShaper, // Tagbanwa
35180  tale: UniversalShaper, // Tai Le
35181  lana: UniversalShaper, // Tai Tham
35182  tavt: UniversalShaper, // Tai Viet
35183  takr: UniversalShaper, // Takri
35184  tibt: UniversalShaper, // Tibetan
35185  tfng: UniversalShaper, // Tifinagh
35186  tirh: UniversalShaper, // Tirhuta
35187
35188  latn: DefaultShaper, // Latin
35189  DFLT: DefaultShaper // Default
35190};
35191
35192function choose(script) {
35193  if (!Array.isArray(script)) {
35194    script = [script];
35195  }
35196
35197  for (var _iterator = script, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
35198    var _ref;
35199
35200    if (_isArray) {
35201      if (_i >= _iterator.length) break;
35202      _ref = _iterator[_i++];
35203    } else {
35204      _i = _iterator.next();
35205      if (_i.done) break;
35206      _ref = _i.value;
35207    }
35208
35209    var s = _ref;
35210
35211    var shaper = SHAPERS[s];
35212    if (shaper) {
35213      return shaper;
35214    }
35215  }
35216
35217  return DefaultShaper;
35218}
35219
35220var GSUBProcessor = function (_OTProcessor) {
35221  _inherits(GSUBProcessor, _OTProcessor);
35222
35223  function GSUBProcessor() {
35224    _classCallCheck(this, GSUBProcessor);
35225
35226    return _possibleConstructorReturn(this, _OTProcessor.apply(this, arguments));
35227  }
35228
35229  GSUBProcessor.prototype.applyLookup = function applyLookup(lookupType, table) {
35230    var _this2 = this;
35231
35232    switch (lookupType) {
35233      case 1:
35234        {
35235          // Single Substitution
35236          var index = this.coverageIndex(table.coverage);
35237          if (index === -1) {
35238            return false;
35239          }
35240
35241          var glyph = this.glyphIterator.cur;
35242          switch (table.version) {
35243            case 1:
35244              glyph.id = glyph.id + table.deltaGlyphID & 0xffff;
35245              break;
35246
35247            case 2:
35248              glyph.id = table.substitute.get(index);
35249              break;
35250          }
35251
35252          return true;
35253        }
35254
35255      case 2:
35256        {
35257          // Multiple Substitution
35258          var _index = this.coverageIndex(table.coverage);
35259          if (_index !== -1) {
35260            var _glyphs;
35261
35262            var sequence = table.sequences.get(_index);
35263            this.glyphIterator.cur.id = sequence[0];
35264            this.glyphIterator.cur.ligatureComponent = 0;
35265
35266            var features = this.glyphIterator.cur.features;
35267            var curGlyph = this.glyphIterator.cur;
35268            var replacement = sequence.slice(1).map(function (gid, i) {
35269              var glyph = new GlyphInfo(_this2.font, gid, undefined, features);
35270              glyph.shaperInfo = curGlyph.shaperInfo;
35271              glyph.isLigated = curGlyph.isLigated;
35272              glyph.ligatureComponent = i + 1;
35273              glyph.substituted = true;
35274              glyph.isMultiplied = true;
35275              return glyph;
35276            });
35277
35278            (_glyphs = this.glyphs).splice.apply(_glyphs, [this.glyphIterator.index + 1, 0].concat(replacement));
35279            return true;
35280          }
35281
35282          return false;
35283        }
35284
35285      case 3:
35286        {
35287          // Alternate Substitution
35288          var _index2 = this.coverageIndex(table.coverage);
35289          if (_index2 !== -1) {
35290            var USER_INDEX = 0; // TODO
35291            this.glyphIterator.cur.id = table.alternateSet.get(_index2)[USER_INDEX];
35292            return true;
35293          }
35294
35295          return false;
35296        }
35297
35298      case 4:
35299        {
35300          // Ligature Substitution
35301          var _index3 = this.coverageIndex(table.coverage);
35302          if (_index3 === -1) {
35303            return false;
35304          }
35305
35306          for (var _iterator = table.ligatureSets.get(_index3), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
35307            var _ref;
35308
35309            if (_isArray) {
35310              if (_i >= _iterator.length) break;
35311              _ref = _iterator[_i++];
35312            } else {
35313              _i = _iterator.next();
35314              if (_i.done) break;
35315              _ref = _i.value;
35316            }
35317
35318            var ligature = _ref;
35319
35320            var matched = this.sequenceMatchIndices(1, ligature.components);
35321            if (!matched) {
35322              continue;
35323            }
35324
35325            var _curGlyph = this.glyphIterator.cur;
35326
35327            // Concatenate all of the characters the new ligature will represent
35328            var characters = _curGlyph.codePoints.slice();
35329            for (var _iterator2 = matched, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
35330              var _ref2;
35331
35332              if (_isArray2) {
35333                if (_i2 >= _iterator2.length) break;
35334                _ref2 = _iterator2[_i2++];
35335              } else {
35336                _i2 = _iterator2.next();
35337                if (_i2.done) break;
35338                _ref2 = _i2.value;
35339              }
35340
35341              var _index4 = _ref2;
35342
35343              characters.push.apply(characters, this.glyphs[_index4].codePoints);
35344            }
35345
35346            // Create the replacement ligature glyph
35347            var ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, _curGlyph.features);
35348            ligatureGlyph.shaperInfo = _curGlyph.shaperInfo;
35349            ligatureGlyph.isLigated = true;
35350            ligatureGlyph.substituted = true;
35351
35352            // From Harfbuzz:
35353            // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave
35354            //   the ligature to keep its old ligature id.  This will allow it to attach to
35355            //   a base ligature in GPOS.  Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,
35356            //   and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a
35357            //   ligature id and component value of 2.  Then if SHADDA,FATHA form a ligature
35358            //   later, we don't want them to lose their ligature id/component, otherwise
35359            //   GPOS will fail to correctly position the mark ligature on top of the
35360            //   LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343
35361            //
35362            // - If a ligature is formed of components that some of which are also ligatures
35363            //   themselves, and those ligature components had marks attached to *their*
35364            //   components, we have to attach the marks to the new ligature component
35365            //   positions!  Now *that*'s tricky!  And these marks may be following the
35366            //   last component of the whole sequence, so we should loop forward looking
35367            //   for them and update them.
35368            //
35369            //   Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a
35370            //   'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature
35371            //   id and component == 1.  Now, during 'liga', the LAM and the LAM-HEH ligature
35372            //   form a LAM-LAM-HEH ligature.  We need to reassign the SHADDA and FATHA to
35373            //   the new ligature with a component value of 2.
35374            //
35375            //   This in fact happened to a font...  See https://bugzilla.gnome.org/show_bug.cgi?id=437633
35376            var isMarkLigature = _curGlyph.isMark;
35377            for (var i = 0; i < matched.length && isMarkLigature; i++) {
35378              isMarkLigature = this.glyphs[matched[i]].isMark;
35379            }
35380
35381            ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;
35382
35383            var lastLigID = _curGlyph.ligatureID;
35384            var lastNumComps = _curGlyph.codePoints.length;
35385            var curComps = lastNumComps;
35386            var idx = this.glyphIterator.index + 1;
35387
35388            // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.
35389            // This allows GPOS to attach marks to the correct ligature components.
35390            for (var _iterator3 = matched, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
35391              var _ref3;
35392
35393              if (_isArray3) {
35394                if (_i3 >= _iterator3.length) break;
35395                _ref3 = _iterator3[_i3++];
35396              } else {
35397                _i3 = _iterator3.next();
35398                if (_i3.done) break;
35399                _ref3 = _i3.value;
35400              }
35401
35402              var matchIndex = _ref3;
35403
35404              // Don't assign new ligature components for mark ligatures (see above)
35405              if (isMarkLigature) {
35406                idx = matchIndex;
35407              } else {
35408                while (idx < matchIndex) {
35409                  var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);
35410                  this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;
35411                  this.glyphs[idx].ligatureComponent = ligatureComponent;
35412                  idx++;
35413                }
35414              }
35415
35416              lastLigID = this.glyphs[idx].ligatureID;
35417              lastNumComps = this.glyphs[idx].codePoints.length;
35418              curComps += lastNumComps;
35419              idx++; // skip base glyph
35420            }
35421
35422            // Adjust ligature components for any marks following
35423            if (lastLigID && !isMarkLigature) {
35424              for (var _i4 = idx; _i4 < this.glyphs.length; _i4++) {
35425                if (this.glyphs[_i4].ligatureID === lastLigID) {
35426                  var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[_i4].ligatureComponent || 1, lastNumComps);
35427                  this.glyphs[_i4].ligatureComponent = ligatureComponent;
35428                } else {
35429                  break;
35430                }
35431              }
35432            }
35433
35434            // Delete the matched glyphs, and replace the current glyph with the ligature glyph
35435            for (var _i5 = matched.length - 1; _i5 >= 0; _i5--) {
35436              this.glyphs.splice(matched[_i5], 1);
35437            }
35438
35439            this.glyphs[this.glyphIterator.index] = ligatureGlyph;
35440            return true;
35441          }
35442
35443          return false;
35444        }
35445
35446      case 5:
35447        // Contextual Substitution
35448        return this.applyContext(table);
35449
35450      case 6:
35451        // Chaining Contextual Substitution
35452        return this.applyChainingContext(table);
35453
35454      case 7:
35455        // Extension Substitution
35456        return this.applyLookup(table.lookupType, table.extension);
35457
35458      default:
35459        throw new Error('GSUB lookupType ' + lookupType + ' is not supported');
35460    }
35461  };
35462
35463  return GSUBProcessor;
35464}(OTProcessor);
35465
35466var GPOSProcessor = function (_OTProcessor) {
35467  _inherits(GPOSProcessor, _OTProcessor);
35468
35469  function GPOSProcessor() {
35470    _classCallCheck(this, GPOSProcessor);
35471
35472    return _possibleConstructorReturn(this, _OTProcessor.apply(this, arguments));
35473  }
35474
35475  GPOSProcessor.prototype.applyPositionValue = function applyPositionValue(sequenceIndex, value) {
35476    var position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];
35477    if (value.xAdvance != null) {
35478      position.xAdvance += value.xAdvance;
35479    }
35480
35481    if (value.yAdvance != null) {
35482      position.yAdvance += value.yAdvance;
35483    }
35484
35485    if (value.xPlacement != null) {
35486      position.xOffset += value.xPlacement;
35487    }
35488
35489    if (value.yPlacement != null) {
35490      position.yOffset += value.yPlacement;
35491    }
35492
35493    // Adjustments for font variations
35494    var variationProcessor = this.font._variationProcessor;
35495    var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;
35496    if (variationProcessor && variationStore) {
35497      if (value.xPlaDevice) {
35498        position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);
35499      }
35500
35501      if (value.yPlaDevice) {
35502        position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);
35503      }
35504
35505      if (value.xAdvDevice) {
35506        position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);
35507      }
35508
35509      if (value.yAdvDevice) {
35510        position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);
35511      }
35512    }
35513
35514    // TODO: device tables
35515  };
35516
35517  GPOSProcessor.prototype.applyLookup = function applyLookup(lookupType, table) {
35518    switch (lookupType) {
35519      case 1:
35520        {
35521          // Single positioning value
35522          var index = this.coverageIndex(table.coverage);
35523          if (index === -1) {
35524            return false;
35525          }
35526
35527          switch (table.version) {
35528            case 1:
35529              this.applyPositionValue(0, table.value);
35530              break;
35531
35532            case 2:
35533              this.applyPositionValue(0, table.values.get(index));
35534              break;
35535          }
35536
35537          return true;
35538        }
35539
35540      case 2:
35541        {
35542          // Pair Adjustment Positioning
35543          var nextGlyph = this.glyphIterator.peek();
35544          if (!nextGlyph) {
35545            return false;
35546          }
35547
35548          var _index = this.coverageIndex(table.coverage);
35549          if (_index === -1) {
35550            return false;
35551          }
35552
35553          switch (table.version) {
35554            case 1:
35555              // Adjustments for glyph pairs
35556              var set = table.pairSets.get(_index);
35557
35558              for (var _iterator = set, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
35559                var _ref;
35560
35561                if (_isArray) {
35562                  if (_i >= _iterator.length) break;
35563                  _ref = _iterator[_i++];
35564                } else {
35565                  _i = _iterator.next();
35566                  if (_i.done) break;
35567                  _ref = _i.value;
35568                }
35569
35570                var _pair = _ref;
35571
35572                if (_pair.secondGlyph === nextGlyph.id) {
35573                  this.applyPositionValue(0, _pair.value1);
35574                  this.applyPositionValue(1, _pair.value2);
35575                  return true;
35576                }
35577              }
35578
35579              return false;
35580
35581            case 2:
35582              // Class pair adjustment
35583              var class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);
35584              var class2 = this.getClassID(nextGlyph.id, table.classDef2);
35585              if (class1 === -1 || class2 === -1) {
35586                return false;
35587              }
35588
35589              var pair = table.classRecords.get(class1).get(class2);
35590              this.applyPositionValue(0, pair.value1);
35591              this.applyPositionValue(1, pair.value2);
35592              return true;
35593          }
35594        }
35595
35596      case 3:
35597        {
35598          // Cursive Attachment Positioning
35599          var nextIndex = this.glyphIterator.peekIndex();
35600          var _nextGlyph = this.glyphs[nextIndex];
35601          if (!_nextGlyph) {
35602            return false;
35603          }
35604
35605          var curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];
35606          if (!curRecord || !curRecord.exitAnchor) {
35607            return false;
35608          }
35609
35610          var nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, _nextGlyph.id)];
35611          if (!nextRecord || !nextRecord.entryAnchor) {
35612            return false;
35613          }
35614
35615          var entry = this.getAnchor(nextRecord.entryAnchor);
35616          var exit = this.getAnchor(curRecord.exitAnchor);
35617
35618          var cur = this.positions[this.glyphIterator.index];
35619          var next = this.positions[nextIndex];
35620
35621          switch (this.direction) {
35622            case 'ltr':
35623              cur.xAdvance = exit.x + cur.xOffset;
35624
35625              var d = entry.x + next.xOffset;
35626              next.xAdvance -= d;
35627              next.xOffset -= d;
35628              break;
35629
35630            case 'rtl':
35631              d = exit.x + cur.xOffset;
35632              cur.xAdvance -= d;
35633              cur.xOffset -= d;
35634              next.xAdvance = entry.x + next.xOffset;
35635              break;
35636          }
35637
35638          if (this.glyphIterator.flags.rightToLeft) {
35639            this.glyphIterator.cur.cursiveAttachment = nextIndex;
35640            cur.yOffset = entry.y - exit.y;
35641          } else {
35642            _nextGlyph.cursiveAttachment = this.glyphIterator.index;
35643            cur.yOffset = exit.y - entry.y;
35644          }
35645
35646          return true;
35647        }
35648
35649      case 4:
35650        {
35651          // Mark to base positioning
35652          var markIndex = this.coverageIndex(table.markCoverage);
35653          if (markIndex === -1) {
35654            return false;
35655          }
35656
35657          // search backward for a base glyph
35658          var baseGlyphIndex = this.glyphIterator.index;
35659          while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)) {}
35660
35661          if (baseGlyphIndex < 0) {
35662            return false;
35663          }
35664
35665          var baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);
35666          if (baseIndex === -1) {
35667            return false;
35668          }
35669
35670          var markRecord = table.markArray[markIndex];
35671          var baseAnchor = table.baseArray[baseIndex][markRecord.class];
35672          this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);
35673          return true;
35674        }
35675
35676      case 5:
35677        {
35678          // Mark to ligature positioning
35679          var _markIndex = this.coverageIndex(table.markCoverage);
35680          if (_markIndex === -1) {
35681            return false;
35682          }
35683
35684          // search backward for a base glyph
35685          var _baseGlyphIndex = this.glyphIterator.index;
35686          while (--_baseGlyphIndex >= 0 && this.glyphs[_baseGlyphIndex].isMark) {}
35687
35688          if (_baseGlyphIndex < 0) {
35689            return false;
35690          }
35691
35692          var ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[_baseGlyphIndex].id);
35693          if (ligIndex === -1) {
35694            return false;
35695          }
35696
35697          var ligAttach = table.ligatureArray[ligIndex];
35698          var markGlyph = this.glyphIterator.cur;
35699          var ligGlyph = this.glyphs[_baseGlyphIndex];
35700          var compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1;
35701
35702          var _markRecord = table.markArray[_markIndex];
35703          var _baseAnchor = ligAttach[compIndex][_markRecord.class];
35704          this.applyAnchor(_markRecord, _baseAnchor, _baseGlyphIndex);
35705          return true;
35706        }
35707
35708      case 6:
35709        {
35710          // Mark to mark positioning
35711          var mark1Index = this.coverageIndex(table.mark1Coverage);
35712          if (mark1Index === -1) {
35713            return false;
35714          }
35715
35716          // get the previous mark to attach to
35717          var prevIndex = this.glyphIterator.peekIndex(-1);
35718          var prev = this.glyphs[prevIndex];
35719          if (!prev || !prev.isMark) {
35720            return false;
35721          }
35722
35723          var _cur = this.glyphIterator.cur;
35724
35725          // The following logic was borrowed from Harfbuzz
35726          var good = false;
35727          if (_cur.ligatureID === prev.ligatureID) {
35728            if (!_cur.ligatureID) {
35729              // Marks belonging to the same base
35730              good = true;
35731            } else if (_cur.ligatureComponent === prev.ligatureComponent) {
35732              // Marks belonging to the same ligature component
35733              good = true;
35734            }
35735          } else {
35736            // If ligature ids don't match, it may be the case that one of the marks
35737            // itself is a ligature, in which case match.
35738            if (_cur.ligatureID && !_cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) {
35739              good = true;
35740            }
35741          }
35742
35743          if (!good) {
35744            return false;
35745          }
35746
35747          var mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);
35748          if (mark2Index === -1) {
35749            return false;
35750          }
35751
35752          var _markRecord2 = table.mark1Array[mark1Index];
35753          var _baseAnchor2 = table.mark2Array[mark2Index][_markRecord2.class];
35754          this.applyAnchor(_markRecord2, _baseAnchor2, prevIndex);
35755          return true;
35756        }
35757
35758      case 7:
35759        // Contextual positioning
35760        return this.applyContext(table);
35761
35762      case 8:
35763        // Chaining contextual positioning
35764        return this.applyChainingContext(table);
35765
35766      case 9:
35767        // Extension positioning
35768        return this.applyLookup(table.lookupType, table.extension);
35769
35770      default:
35771        throw new Error('Unsupported GPOS table: ' + lookupType);
35772    }
35773  };
35774
35775  GPOSProcessor.prototype.applyAnchor = function applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {
35776    var baseCoords = this.getAnchor(baseAnchor);
35777    var markCoords = this.getAnchor(markRecord.markAnchor);
35778
35779    var basePos = this.positions[baseGlyphIndex];
35780    var markPos = this.positions[this.glyphIterator.index];
35781
35782    markPos.xOffset = baseCoords.x - markCoords.x;
35783    markPos.yOffset = baseCoords.y - markCoords.y;
35784    this.glyphIterator.cur.markAttachment = baseGlyphIndex;
35785  };
35786
35787  GPOSProcessor.prototype.getAnchor = function getAnchor(anchor) {
35788    // TODO: contour point, device tables
35789    var x = anchor.xCoordinate;
35790    var y = anchor.yCoordinate;
35791
35792    // Adjustments for font variations
35793    var variationProcessor = this.font._variationProcessor;
35794    var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;
35795    if (variationProcessor && variationStore) {
35796      if (anchor.xDeviceTable) {
35797        x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);
35798      }
35799
35800      if (anchor.yDeviceTable) {
35801        y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);
35802      }
35803    }
35804
35805    return { x: x, y: y };
35806  };
35807
35808  GPOSProcessor.prototype.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) {
35809    _OTProcessor.prototype.applyFeatures.call(this, userFeatures, glyphs, advances);
35810
35811    for (var i = 0; i < this.glyphs.length; i++) {
35812      this.fixCursiveAttachment(i);
35813    }
35814
35815    this.fixMarkAttachment();
35816  };
35817
35818  GPOSProcessor.prototype.fixCursiveAttachment = function fixCursiveAttachment(i) {
35819    var glyph = this.glyphs[i];
35820    if (glyph.cursiveAttachment != null) {
35821      var j = glyph.cursiveAttachment;
35822
35823      glyph.cursiveAttachment = null;
35824      this.fixCursiveAttachment(j);
35825
35826      this.positions[i].yOffset += this.positions[j].yOffset;
35827    }
35828  };
35829
35830  GPOSProcessor.prototype.fixMarkAttachment = function fixMarkAttachment() {
35831    for (var i = 0; i < this.glyphs.length; i++) {
35832      var glyph = this.glyphs[i];
35833      if (glyph.markAttachment != null) {
35834        var j = glyph.markAttachment;
35835
35836        this.positions[i].xOffset += this.positions[j].xOffset;
35837        this.positions[i].yOffset += this.positions[j].yOffset;
35838
35839        if (this.direction === 'ltr') {
35840          for (var k = j; k < i; k++) {
35841            this.positions[i].xOffset -= this.positions[k].xAdvance;
35842            this.positions[i].yOffset -= this.positions[k].yAdvance;
35843          }
35844        } else {
35845          for (var _k = j + 1; _k < i + 1; _k++) {
35846            this.positions[i].xOffset += this.positions[_k].xAdvance;
35847            this.positions[i].yOffset += this.positions[_k].yAdvance;
35848          }
35849        }
35850      }
35851    }
35852  };
35853
35854  return GPOSProcessor;
35855}(OTProcessor);
35856
35857var OTLayoutEngine = function () {
35858  function OTLayoutEngine(font) {
35859    _classCallCheck(this, OTLayoutEngine);
35860
35861    this.font = font;
35862    this.glyphInfos = null;
35863    this.plan = null;
35864    this.GSUBProcessor = null;
35865    this.GPOSProcessor = null;
35866    this.fallbackPosition = true;
35867
35868    if (font.GSUB) {
35869      this.GSUBProcessor = new GSUBProcessor(font, font.GSUB);
35870    }
35871
35872    if (font.GPOS) {
35873      this.GPOSProcessor = new GPOSProcessor(font, font.GPOS);
35874    }
35875  }
35876
35877  OTLayoutEngine.prototype.setup = function setup(glyphRun) {
35878    var _this = this;
35879
35880    // Map glyphs to GlyphInfo objects so data can be passed between
35881    // GSUB and GPOS without mutating the real (shared) Glyph objects.
35882    this.glyphInfos = glyphRun.glyphs.map(function (glyph) {
35883      return new GlyphInfo(_this.font, glyph.id, [].concat(glyph.codePoints));
35884    });
35885
35886    // Select a script based on what is available in GSUB/GPOS.
35887    var script = null;
35888    if (this.GPOSProcessor) {
35889      script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);
35890    }
35891
35892    if (this.GSUBProcessor) {
35893      script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);
35894    }
35895
35896    // Choose a shaper based on the script, and setup a shaping plan.
35897    // This determines which features to apply to which glyphs.
35898    this.shaper = choose(script);
35899    this.plan = new ShapingPlan(this.font, script, glyphRun.direction);
35900    this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features);
35901
35902    // Assign chosen features to output glyph run
35903    for (var key in this.plan.allFeatures) {
35904      glyphRun.features[key] = true;
35905    }
35906  };
35907
35908  OTLayoutEngine.prototype.substitute = function substitute(glyphRun) {
35909    var _this2 = this;
35910
35911    if (this.GSUBProcessor) {
35912      this.plan.process(this.GSUBProcessor, this.glyphInfos);
35913
35914      // Map glyph infos back to normal Glyph objects
35915      glyphRun.glyphs = this.glyphInfos.map(function (glyphInfo) {
35916        return _this2.font.getGlyph(glyphInfo.id, glyphInfo.codePoints);
35917      });
35918    }
35919  };
35920
35921  OTLayoutEngine.prototype.position = function position(glyphRun) {
35922    if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') {
35923      this.zeroMarkAdvances(glyphRun.positions);
35924    }
35925
35926    if (this.GPOSProcessor) {
35927      this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);
35928    }
35929
35930    if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') {
35931      this.zeroMarkAdvances(glyphRun.positions);
35932    }
35933
35934    // Reverse the glyphs and positions if the script is right-to-left
35935    if (glyphRun.direction === 'rtl') {
35936      glyphRun.glyphs.reverse();
35937      glyphRun.positions.reverse();
35938    }
35939
35940    return this.GPOSProcessor && this.GPOSProcessor.features;
35941  };
35942
35943  OTLayoutEngine.prototype.zeroMarkAdvances = function zeroMarkAdvances(positions) {
35944    for (var i = 0; i < this.glyphInfos.length; i++) {
35945      if (this.glyphInfos[i].isMark) {
35946        positions[i].xAdvance = 0;
35947        positions[i].yAdvance = 0;
35948      }
35949    }
35950  };
35951
35952  OTLayoutEngine.prototype.cleanup = function cleanup() {
35953    this.glyphInfos = null;
35954    this.plan = null;
35955    this.shaper = null;
35956  };
35957
35958  OTLayoutEngine.prototype.getAvailableFeatures = function getAvailableFeatures(script, language) {
35959    var features = [];
35960
35961    if (this.GSUBProcessor) {
35962      this.GSUBProcessor.selectScript(script, language);
35963      features.push.apply(features, _Object$keys(this.GSUBProcessor.features));
35964    }
35965
35966    if (this.GPOSProcessor) {
35967      this.GPOSProcessor.selectScript(script, language);
35968      features.push.apply(features, _Object$keys(this.GPOSProcessor.features));
35969    }
35970
35971    return features;
35972  };
35973
35974  return OTLayoutEngine;
35975}();
35976
35977var LayoutEngine = function () {
35978  function LayoutEngine(font) {
35979    _classCallCheck(this, LayoutEngine);
35980
35981    this.font = font;
35982    this.unicodeLayoutEngine = null;
35983    this.kernProcessor = null;
35984
35985    // Choose an advanced layout engine. We try the AAT morx table first since more
35986    // scripts are currently supported because the shaping logic is built into the font.
35987    if (this.font.morx) {
35988      this.engine = new AATLayoutEngine(this.font);
35989    } else if (this.font.GSUB || this.font.GPOS) {
35990      this.engine = new OTLayoutEngine(this.font);
35991    }
35992  }
35993
35994  LayoutEngine.prototype.layout = function layout(string, features, script, language, direction) {
35995    // Make the features parameter optional
35996    if (typeof features === 'string') {
35997      direction = language;
35998      language = script;
35999      script = features;
36000      features = [];
36001    }
36002
36003    // Map string to glyphs if needed
36004    if (typeof string === 'string') {
36005      // Attempt to detect the script from the string if not provided.
36006      if (script == null) {
36007        script = forString(string);
36008      }
36009
36010      var glyphs = this.font.glyphsForString(string);
36011    } else {
36012      // Attempt to detect the script from the glyph code points if not provided.
36013      if (script == null) {
36014        var codePoints = [];
36015        for (var _iterator = string, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
36016          var _ref;
36017
36018          if (_isArray) {
36019            if (_i >= _iterator.length) break;
36020            _ref = _iterator[_i++];
36021          } else {
36022            _i = _iterator.next();
36023            if (_i.done) break;
36024            _ref = _i.value;
36025          }
36026
36027          var glyph = _ref;
36028
36029          codePoints.push.apply(codePoints, glyph.codePoints);
36030        }
36031
36032        script = forCodePoints(codePoints);
36033      }
36034
36035      var glyphs = string;
36036    }
36037
36038    var glyphRun = new GlyphRun(glyphs, features, script, language, direction);
36039
36040    // Return early if there are no glyphs
36041    if (glyphs.length === 0) {
36042      glyphRun.positions = [];
36043      return glyphRun;
36044    }
36045
36046    // Setup the advanced layout engine
36047    if (this.engine && this.engine.setup) {
36048      this.engine.setup(glyphRun);
36049    }
36050
36051    // Substitute and position the glyphs
36052    this.substitute(glyphRun);
36053    this.position(glyphRun);
36054
36055    this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions);
36056
36057    // Let the layout engine clean up any state it might have
36058    if (this.engine && this.engine.cleanup) {
36059      this.engine.cleanup();
36060    }
36061
36062    return glyphRun;
36063  };
36064
36065  LayoutEngine.prototype.substitute = function substitute(glyphRun) {
36066    // Call the advanced layout engine to make substitutions
36067    if (this.engine && this.engine.substitute) {
36068      this.engine.substitute(glyphRun);
36069    }
36070  };
36071
36072  LayoutEngine.prototype.position = function position(glyphRun) {
36073    // Get initial glyph positions
36074    glyphRun.positions = glyphRun.glyphs.map(function (glyph) {
36075      return new GlyphPosition(glyph.advanceWidth);
36076    });
36077    var positioned = null;
36078
36079    // Call the advanced layout engine. Returns the features applied.
36080    if (this.engine && this.engine.position) {
36081      positioned = this.engine.position(glyphRun);
36082    }
36083
36084    // if there is no GPOS table, use unicode properties to position marks.
36085    if (!positioned && (!this.engine || this.engine.fallbackPosition)) {
36086      if (!this.unicodeLayoutEngine) {
36087        this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font);
36088      }
36089
36090      this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);
36091    }
36092
36093    // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table
36094    if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {
36095      if (!this.kernProcessor) {
36096        this.kernProcessor = new KernProcessor(this.font);
36097      }
36098
36099      this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);
36100      glyphRun.features.kern = true;
36101    }
36102  };
36103
36104  LayoutEngine.prototype.hideDefaultIgnorables = function hideDefaultIgnorables(glyphs, positions) {
36105    var space = this.font.glyphForCodePoint(0x20);
36106    for (var i = 0; i < glyphs.length; i++) {
36107      if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {
36108        glyphs[i] = space;
36109        positions[i].xAdvance = 0;
36110        positions[i].yAdvance = 0;
36111      }
36112    }
36113  };
36114
36115  LayoutEngine.prototype.isDefaultIgnorable = function isDefaultIgnorable(ch) {
36116    // From DerivedCoreProperties.txt in the Unicode database,
36117    // minus U+115F, U+1160, U+3164 and U+FFA0, which is what
36118    // Harfbuzz and Uniscribe do.
36119    var plane = ch >> 16;
36120    if (plane === 0) {
36121      // BMP
36122      switch (ch >> 8) {
36123        case 0x00:
36124          return ch === 0x00AD;
36125        case 0x03:
36126          return ch === 0x034F;
36127        case 0x06:
36128          return ch === 0x061C;
36129        case 0x17:
36130          return 0x17B4 <= ch && ch <= 0x17B5;
36131        case 0x18:
36132          return 0x180B <= ch && ch <= 0x180E;
36133        case 0x20:
36134          return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F;
36135        case 0xFE:
36136          return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF;
36137        case 0xFF:
36138          return 0xFFF0 <= ch && ch <= 0xFFF8;
36139        default:
36140          return false;
36141      }
36142    } else {
36143      // Other planes
36144      switch (plane) {
36145        case 0x01:
36146          return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A;
36147        case 0x0E:
36148          return 0xE0000 <= ch && ch <= 0xE0FFF;
36149        default:
36150          return false;
36151      }
36152    }
36153  };
36154
36155  LayoutEngine.prototype.getAvailableFeatures = function getAvailableFeatures(script, language) {
36156    var features = [];
36157
36158    if (this.engine) {
36159      features.push.apply(features, this.engine.getAvailableFeatures(script, language));
36160    }
36161
36162    if (this.font.kern && features.indexOf('kern') === -1) {
36163      features.push('kern');
36164    }
36165
36166    return features;
36167  };
36168
36169  LayoutEngine.prototype.stringsForGlyph = function stringsForGlyph(gid) {
36170    var result = new _Set();
36171
36172    var codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);
36173    for (var _iterator2 = codePoints, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
36174      var _ref2;
36175
36176      if (_isArray2) {
36177        if (_i2 >= _iterator2.length) break;
36178        _ref2 = _iterator2[_i2++];
36179      } else {
36180        _i2 = _iterator2.next();
36181        if (_i2.done) break;
36182        _ref2 = _i2.value;
36183      }
36184
36185      var codePoint = _ref2;
36186
36187      result.add(_String$fromCodePoint(codePoint));
36188    }
36189
36190    if (this.engine && this.engine.stringsForGlyph) {
36191      for (var _iterator3 = this.engine.stringsForGlyph(gid), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
36192        var _ref3;
36193
36194        if (_isArray3) {
36195          if (_i3 >= _iterator3.length) break;
36196          _ref3 = _iterator3[_i3++];
36197        } else {
36198          _i3 = _iterator3.next();
36199          if (_i3.done) break;
36200          _ref3 = _i3.value;
36201        }
36202
36203        var string = _ref3;
36204
36205        result.add(string);
36206      }
36207    }
36208
36209    return _Array$from(result);
36210  };
36211
36212  return LayoutEngine;
36213}();
36214
36215var SVG_COMMANDS = {
36216  moveTo: 'M',
36217  lineTo: 'L',
36218  quadraticCurveTo: 'Q',
36219  bezierCurveTo: 'C',
36220  closePath: 'Z'
36221};
36222
36223/**
36224 * Path objects are returned by glyphs and represent the actual
36225 * vector outlines for each glyph in the font. Paths can be converted
36226 * to SVG path data strings, or to functions that can be applied to
36227 * render the path to a graphics context.
36228 */
36229
36230var Path = function () {
36231  function Path() {
36232    _classCallCheck(this, Path);
36233
36234    this.commands = [];
36235    this._bbox = null;
36236    this._cbox = null;
36237  }
36238
36239  /**
36240   * Compiles the path to a JavaScript function that can be applied with
36241   * a graphics context in order to render the path.
36242   * @return {string}
36243   */
36244
36245
36246  Path.prototype.toFunction = function toFunction() {
36247    var cmds = this.commands.map(function (c) {
36248      return '  ctx.' + c.command + '(' + c.args.join(', ') + ');';
36249    });
36250    return new Function('ctx', cmds.join('\n'));
36251  };
36252
36253  /**
36254   * Converts the path to an SVG path data string
36255   * @return {string}
36256   */
36257
36258
36259  Path.prototype.toSVG = function toSVG() {
36260    var cmds = this.commands.map(function (c) {
36261      var args = c.args.map(function (arg) {
36262        return Math.round(arg * 100) / 100;
36263      });
36264      return '' + SVG_COMMANDS[c.command] + args.join(' ');
36265    });
36266
36267    return cmds.join('');
36268  };
36269
36270  /**
36271   * Gets the "control box" of a path.
36272   * This is like the bounding box, but it includes all points including
36273   * control points of bezier segments and is much faster to compute than
36274   * the real bounding box.
36275   * @type {BBox}
36276   */
36277
36278
36279  /**
36280   * Applies a mapping function to each point in the path.
36281   * @param {function} fn
36282   * @return {Path}
36283   */
36284  Path.prototype.mapPoints = function mapPoints(fn) {
36285    var path = new Path();
36286
36287    for (var _iterator = this.commands, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
36288      var _ref;
36289
36290      if (_isArray) {
36291        if (_i >= _iterator.length) break;
36292        _ref = _iterator[_i++];
36293      } else {
36294        _i = _iterator.next();
36295        if (_i.done) break;
36296        _ref = _i.value;
36297      }
36298
36299      var c = _ref;
36300
36301      var args = [];
36302      for (var _i2 = 0; _i2 < c.args.length; _i2 += 2) {
36303        var _fn = fn(c.args[_i2], c.args[_i2 + 1]),
36304            x = _fn[0],
36305            y = _fn[1];
36306
36307        args.push(x, y);
36308      }
36309
36310      path[c.command].apply(path, args);
36311    }
36312
36313    return path;
36314  };
36315
36316  /**
36317   * Transforms the path by the given matrix.
36318   */
36319
36320
36321  Path.prototype.transform = function transform(m0, m1, m2, m3, m4, m5) {
36322    return this.mapPoints(function (x, y) {
36323      x = m0 * x + m2 * y + m4;
36324      y = m1 * x + m3 * y + m5;
36325      return [x, y];
36326    });
36327  };
36328
36329  /**
36330   * Translates the path by the given offset.
36331   */
36332
36333
36334  Path.prototype.translate = function translate(x, y) {
36335    return this.transform(1, 0, 0, 1, x, y);
36336  };
36337
36338  /**
36339   * Rotates the path by the given angle (in radians).
36340   */
36341
36342
36343  Path.prototype.rotate = function rotate(angle) {
36344    var cos = Math.cos(angle);
36345    var sin = Math.sin(angle);
36346    return this.transform(cos, sin, -sin, cos, 0, 0);
36347  };
36348
36349  /**
36350   * Scales the path.
36351   */
36352
36353
36354  Path.prototype.scale = function scale(scaleX) {
36355    var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;
36356
36357    return this.transform(scaleX, 0, 0, scaleY, 0, 0);
36358  };
36359
36360  _createClass(Path, [{
36361    key: 'cbox',
36362    get: function get() {
36363      if (!this._cbox) {
36364        var cbox = new BBox();
36365        for (var _iterator2 = this.commands, _isArray2 = Array.isArray(_iterator2), _i3 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
36366          var _ref2;
36367
36368          if (_isArray2) {
36369            if (_i3 >= _iterator2.length) break;
36370            _ref2 = _iterator2[_i3++];
36371          } else {
36372            _i3 = _iterator2.next();
36373            if (_i3.done) break;
36374            _ref2 = _i3.value;
36375          }
36376
36377          var command = _ref2;
36378
36379          for (var _i4 = 0; _i4 < command.args.length; _i4 += 2) {
36380            cbox.addPoint(command.args[_i4], command.args[_i4 + 1]);
36381          }
36382        }
36383
36384        this._cbox = _Object$freeze(cbox);
36385      }
36386
36387      return this._cbox;
36388    }
36389
36390    /**
36391     * Gets the exact bounding box of the path by evaluating curve segments.
36392     * Slower to compute than the control box, but more accurate.
36393     * @type {BBox}
36394     */
36395
36396  }, {
36397    key: 'bbox',
36398    get: function get() {
36399      if (this._bbox) {
36400        return this._bbox;
36401      }
36402
36403      var bbox = new BBox();
36404      var cx = 0,
36405          cy = 0;
36406
36407      var f = function f(t) {
36408        return Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i];
36409      };
36410
36411      for (var _iterator3 = this.commands, _isArray3 = Array.isArray(_iterator3), _i5 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
36412        var _ref3;
36413
36414        if (_isArray3) {
36415          if (_i5 >= _iterator3.length) break;
36416          _ref3 = _iterator3[_i5++];
36417        } else {
36418          _i5 = _iterator3.next();
36419          if (_i5.done) break;
36420          _ref3 = _i5.value;
36421        }
36422
36423        var c = _ref3;
36424
36425        switch (c.command) {
36426          case 'moveTo':
36427          case 'lineTo':
36428            var _c$args = c.args,
36429                x = _c$args[0],
36430                y = _c$args[1];
36431
36432            bbox.addPoint(x, y);
36433            cx = x;
36434            cy = y;
36435            break;
36436
36437          case 'quadraticCurveTo':
36438          case 'bezierCurveTo':
36439            if (c.command === 'quadraticCurveTo') {
36440              // http://fontforge.org/bezier.html
36441              var _c$args2 = c.args,
36442                  qp1x = _c$args2[0],
36443                  qp1y = _c$args2[1],
36444                  p3x = _c$args2[2],
36445                  p3y = _c$args2[3];
36446
36447              var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0)
36448              var cp1y = cy + 2 / 3 * (qp1y - cy);
36449              var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2)
36450              var cp2y = p3y + 2 / 3 * (qp1y - p3y);
36451            } else {
36452              var _c$args3 = c.args,
36453                  cp1x = _c$args3[0],
36454                  cp1y = _c$args3[1],
36455                  cp2x = _c$args3[2],
36456                  cp2y = _c$args3[3],
36457                  p3x = _c$args3[4],
36458                  p3y = _c$args3[5];
36459            }
36460
36461            // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html
36462            bbox.addPoint(p3x, p3y);
36463
36464            var p0 = [cx, cy];
36465            var p1 = [cp1x, cp1y];
36466            var p2 = [cp2x, cp2y];
36467            var p3 = [p3x, p3y];
36468
36469            for (var i = 0; i <= 1; i++) {
36470              var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];
36471              var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];
36472              c = 3 * p1[i] - 3 * p0[i];
36473
36474              if (a === 0) {
36475                if (b === 0) {
36476                  continue;
36477                }
36478
36479                var t = -c / b;
36480                if (0 < t && t < 1) {
36481                  if (i === 0) {
36482                    bbox.addPoint(f(t), bbox.maxY);
36483                  } else if (i === 1) {
36484                    bbox.addPoint(bbox.maxX, f(t));
36485                  }
36486                }
36487
36488                continue;
36489              }
36490
36491              var b2ac = Math.pow(b, 2) - 4 * c * a;
36492              if (b2ac < 0) {
36493                continue;
36494              }
36495
36496              var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);
36497              if (0 < t1 && t1 < 1) {
36498                if (i === 0) {
36499                  bbox.addPoint(f(t1), bbox.maxY);
36500                } else if (i === 1) {
36501                  bbox.addPoint(bbox.maxX, f(t1));
36502                }
36503              }
36504
36505              var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);
36506              if (0 < t2 && t2 < 1) {
36507                if (i === 0) {
36508                  bbox.addPoint(f(t2), bbox.maxY);
36509                } else if (i === 1) {
36510                  bbox.addPoint(bbox.maxX, f(t2));
36511                }
36512              }
36513            }
36514
36515            cx = p3x;
36516            cy = p3y;
36517            break;
36518        }
36519      }
36520
36521      return this._bbox = _Object$freeze(bbox);
36522    }
36523  }]);
36524
36525  return Path;
36526}();
36527
36528var _arr = ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath'];
36529
36530var _loop = function _loop() {
36531  var command = _arr[_i6];
36532  Path.prototype[command] = function () {
36533    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
36534      args[_key] = arguments[_key];
36535    }
36536
36537    this._bbox = this._cbox = null;
36538    this.commands.push({
36539      command: command,
36540      args: args
36541    });
36542
36543    return this;
36544  };
36545};
36546
36547for (var _i6 = 0; _i6 < _arr.length; _i6++) {
36548  _loop();
36549}
36550
36551var StandardNames = ['.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodce
36551ntered', 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'];
36552
36553var _class$8;
36554function _applyDecoratedDescriptor$4(target, property, decorators, descriptor, context) {
36555  var desc = {};
36556  Object['ke' + 'ys'](descriptor).forEach(function (key) {
36557    desc[key] = descriptor[key];
36558  });
36559  desc.enumerable = !!desc.enumerable;
36560  desc.configurable = !!desc.configurable;
36561
36562  if ('value' in desc || desc.initializer) {
36563    desc.writable = true;
36564  }
36565
36566  desc = decorators.slice().reverse().reduce(function (desc, decorator) {
36567    return decorator(target, property, desc) || desc;
36568  }, desc);
36569
36570  if (context && desc.initializer !== void 0) {
36571    desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
36572    desc.initializer = undefined;
36573  }
36574
36575  if (desc.initializer === void 0) {
36576    Object['define' + 'Property'](target, property, desc);
36577    desc = null;
36578  }
36579
36580  return desc;
36581}
36582
36583/**
36584 * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and
36585 * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context.
36586 *
36587 * You do not create glyph objects directly. They are created by various methods on the font object.
36588 * There are several subclasses of the base Glyph class internally that may be returned depending
36589 * on the font format, but they all inherit from this class.
36590 */
36591var Glyph = (_class$8 = function () {
36592  function Glyph(id, codePoints, font) {
36593    _classCallCheck(this, Glyph);
36594
36595    /**
36596     * The glyph id in the font
36597     * @type {number}
36598     */
36599    this.id = id;
36600
36601    /**
36602     * An array of unicode code points that are represented by this glyph.
36603     * There can be multiple code points in the case of ligatures and other glyphs
36604     * that represent multiple visual characters.
36605     * @type {number[]}
36606     */
36607    this.codePoints = codePoints;
36608    this._font = font;
36609
36610    // TODO: get this info from GDEF if available
36611    this.isMark = this.codePoints.every(unicode.isMark);
36612    this.isLigature = this.codePoints.length > 1;
36613  }
36614
36615  Glyph.prototype._getPath = function _getPath() {
36616    return new Path();
36617  };
36618
36619  Glyph.prototype._getCBox = function _getCBox() {
36620    return this.path.cbox;
36621  };
36622
36623  Glyph.prototype._getBBox = function _getBBox() {
36624    return this.path.bbox;
36625  };
36626
36627  Glyph.prototype._getTableMetrics = function _getTableMetrics(table) {
36628    if (this.id < table.metrics.length) {
36629      return table.metrics.get(this.id);
36630    }
36631
36632    var metric = table.metrics.get(table.metrics.length - 1);
36633    var res = {
36634      advance: metric ? metric.advance : 0,
36635      bearing: table.bearings.get(this.id - table.metrics.length) || 0
36636    };
36637
36638    return res;
36639  };
36640
36641  Glyph.prototype._getMetrics = function _getMetrics(cbox) {
36642    if (this._metrics) {
36643      return this._metrics;
36644    }
36645
36646    var _getTableMetrics2 = this._getTableMetrics(this._font.hmtx),
36647        advanceWidth = _getTableMetrics2.advance,
36648        leftBearing = _getTableMetrics2.bearing;
36649
36650    // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea
36651
36652
36653    if (this._font.vmtx) {
36654      var _getTableMetrics3 = this._getTableMetrics(this._font.vmtx),
36655          advanceHeight = _getTableMetrics3.advance,
36656          topBearing = _getTableMetrics3.bearing;
36657    } else {
36658      var os2 = void 0;
36659      if (typeof cbox === 'undefined' || cbox === null) {
36660        cbox = this.cbox;
36661      }
36662
36663      if ((os2 = this._font['OS/2']) && os2.version > 0) {
36664        var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);
36665        var topBearing = os2.typoAscender - cbox.maxY;
36666      } else {
36667        var hhea = this._font.hhea;
36668
36669        var advanceHeight = Math.abs(hhea.ascent - hhea.descent);
36670        var topBearing = hhea.ascent - cbox.maxY;
36671      }
36672    }
36673
36674    if (this._font._variationProcessor && this._font.HVAR) {
36675      advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);
36676    }
36677
36678    return this._metrics = { advanceWidth: advanceWidth, advanceHeight: advanceHeight, leftBearing: leftBearing, topBearing: topBearing };
36679  };
36680
36681  /**
36682   * The glyph’s control box.
36683   * This is often the same as the bounding box, but is faster to compute.
36684   * Because of the way bezier curves are defined, some of the control points
36685   * can be outside of the bounding box. Where `bbox` takes this into account,
36686   * `cbox` does not. Thus, cbox is less accurate, but faster to compute.
36687   * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)
36688   * for a more detailed description.
36689   *
36690   * @type {BBox}
36691   */
36692
36693
36694  /**
36695   * Returns a path scaled to the given font size.
36696   * @param {number} size
36697   * @return {Path}
36698   */
36699  Glyph.prototype.getScaledPath = function getScaledPath(size) {
36700    var scale = 1 / this._font.unitsPerEm * size;
36701    return this.path.scale(scale);
36702  };
36703
36704  /**
36705   * The glyph's advance width.
36706   * @type {number}
36707   */
36708
36709
36710  Glyph.prototype._getName = function _getName() {
36711    var post = this._font.post;
36712
36713    if (!post) {
36714      return null;
36715    }
36716
36717    switch (post.version) {
36718      case 1:
36719        return StandardNames[this.id];
36720
36721      case 2:
36722        var id = post.glyphNameIndex[this.id];
36723        if (id < StandardNames.length) {
36724          return StandardNames[id];
36725        }
36726
36727        return post.names[id - StandardNames.length];
36728
36729      case 2.5:
36730        return StandardNames[this.id + post.offsets[this.id]];
36731
36732      case 4:
36733        return String.fromCharCode(post.map[this.id]);
36734    }
36735  };
36736
36737  /**
36738   * The glyph's name
36739   * @type {string}
36740   */
36741
36742
36743  /**
36744   * Renders the glyph to the given graphics context, at the specified font size.
36745   * @param {CanvasRenderingContext2d} ctx
36746   * @param {number} size
36747   */
36748  Glyph.prototype.render = function render(ctx, size) {
36749    ctx.save();
36750
36751    var scale = 1 / this._font.head.unitsPerEm * size;
36752    ctx.scale(scale, scale);
36753
36754    var fn = this.path.toFunction();
36755    fn(ctx);
36756    ctx.fill();
36757
36758    ctx.restore();
36759  };
36760
36761  _createClass(Glyph, [{
36762    key: 'cbox',
36763    get: function get() {
36764      return this._getCBox();
36765    }
36766
36767    /**
36768     * The glyph’s bounding box, i.e. the rectangle that encloses the
36769     * glyph outline as tightly as possible.
36770     * @type {BBox}
36771     */
36772
36773  }, {
36774    key: 'bbox',
36775    get: function get() {
36776      return this._getBBox();
36777    }
36778
36779    /**
36780     * A vector Path object representing the glyph outline.
36781     * @type {Path}
36782     */
36783
36784  }, {
36785    key: 'path',
36786    get: function get() {
36787      // Cache the path so we only decode it once
36788      // Decoding is actually performed by subclasses
36789      return this._getPath();
36790    }
36791  }, {
36792    key: 'advanceWidth',
36793    get: function get() {
36794      return this._getMetrics().advanceWidth;
36795    }
36796
36797    /**
36798     * The glyph's advance height.
36799     * @type {number}
36800     */
36801
36802  }, {
36803    key: 'advanceHeight',
36804    get: function get() {
36805      return this._getMetrics().advanceHeight;
36806    }
36807  }, {
36808    key: 'ligatureCaretPositions',
36809    get: function get() {}
36810  }, {
36811    key: 'name',
36812    get: function get() {
36813      return this._getName();
36814    }
36815  }]);
36816
36817  return Glyph;
36818}(), (_applyDecoratedDescriptor$4(_class$8.prototype, 'cbox', [cache], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'cbox'), _class$8.prototype), _applyDecoratedDescriptor$4(_class$8.prototype, 'bbox', [cache], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'bbox'), _class$8.prototype), _applyDecoratedDescriptor$4(_class$8.prototype, 'path', [cache], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'path'), _class$8.prototype), _applyDecoratedDescriptor$4(_class$8.prototype, 'advanceWidth', [cache], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'advanceWidth'), _class$8.prototype), _applyDecoratedDescriptor$4(_class$8.prototype, 'advanceHeight', [cache], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'advanceHeight'), _class$8.prototype), _applyDecoratedDescriptor$4(_class$8.prototype, 'name', [cache], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'name'), _class$8.prototype)), _class$8);
36819
36820// The header for both simple and composite glyphs
36821var GlyfHeader = new r.Struct({
36822  numberOfContours: r.int16, // if negative, this is a composite glyph
36823  xMin: r.int16,
36824  yMin: r.int16,
36825  xMax: r.int16,
36826  yMax: r.int16
36827});
36828
36829// Flags for simple glyphs
36830var ON_CURVE = 1 << 0;
36831var X_SHORT_VECTOR = 1 << 1;
36832var Y_SHORT_VECTOR = 1 << 2;
36833var REPEAT = 1 << 3;
36834var SAME_X = 1 << 4;
36835var SAME_Y = 1 << 5;
36836
36837// Flags for composite glyphs
36838var ARG_1_AND_2_ARE_WORDS = 1 << 0;
36839var WE_HAVE_A_SCALE = 1 << 3;
36840var MORE_COMPONENTS = 1 << 5;
36841var WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;
36842var WE_HAVE_A_TWO_BY_TWO = 1 << 7;
36843var WE_HAVE_INSTRUCTIONS = 1 << 8;
36844// Represents a point in a simple glyph
36845var Point = function () {
36846  function Point(onCurve, endContour) {
36847    var x = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
36848    var y = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
36849
36850    _classCallCheck(this, Point);
36851
36852    this.onCurve = onCurve;
36853    this.endContour = endContour;
36854    this.x = x;
36855    this.y = y;
36856  }
36857
36858  Point.prototype.copy = function copy() {
36859    return new Point(this.onCurve, this.endContour, this.x, this.y);
36860  };
36861
36862  return Point;
36863}();
36864
36865// Represents a component in a composite glyph
36866
36867var Component = function Component(glyphID, dx, dy) {
36868  _classCallCheck(this, Component);
36869
36870  this.glyphID = glyphID;
36871  this.dx = dx;
36872  this.dy = dy;
36873  this.pos = 0;
36874  this.scaleX = this.scaleY = 1;
36875  this.scale01 = this.scale10 = 0;
36876};
36877
36878/**
36879 * Represents a TrueType glyph.
36880 */
36881
36882
36883var TTFGlyph = function (_Glyph) {
36884  _inherits(TTFGlyph, _Glyph);
36885
36886  function TTFGlyph() {
36887    _classCallCheck(this, TTFGlyph);
36888
36889    return _possibleConstructorReturn(this, _Glyph.apply(this, arguments));
36890  }
36891
36892  // Parses just the glyph header and returns the bounding box
36893  TTFGlyph.prototype._getCBox = function _getCBox(internal) {
36894    // We need to decode the glyph if variation processing is requested,
36895    // so it's easier just to recompute the path's cbox after decoding.
36896    if (this._font._variationProcessor && !internal) {
36897      return this.path.cbox;
36898    }
36899
36900    var stream = this._font._getTableStream('glyf');
36901    stream.pos += this._font.loca.offsets[this.id];
36902    var glyph = GlyfHeader.decode(stream);
36903
36904    var cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);
36905    return _Object$freeze(cbox);
36906  };
36907
36908  // Parses a single glyph coordinate
36909
36910
36911  TTFGlyph.prototype._parseGlyphCoord = function _parseGlyphCoord(stream, prev, short, same) {
36912    if (short) {
36913      var val = stream.readUInt8();
36914      if (!same) {
36915        val = -val;
36916      }
36917
36918      val += prev;
36919    } else {
36920      if (same) {
36921        var val = prev;
36922      } else {
36923        var val = prev + stream.readInt16BE();
36924      }
36925    }
36926
36927    return val;
36928  };
36929
36930  // Decodes the glyph data into points for simple glyphs,
36931  // or components for composite glyphs
36932
36933
36934  TTFGlyph.prototype._decode = function _decode() {
36935    var glyfPos = this._font.loca.offsets[this.id];
36936    var nextPos = this._font.loca.offsets[this.id + 1];
36937
36938    // Nothing to do if there is no data for this glyph
36939    if (glyfPos === nextPos) {
36940      return null;
36941    }
36942
36943    var stream = this._font._getTableStream('glyf');
36944    stream.pos += glyfPos;
36945    var startPos = stream.pos;
36946
36947    var glyph = GlyfHeader.decode(stream);
36948
36949    if (glyph.numberOfContours > 0) {
36950      this._decodeSimple(glyph, stream);
36951    } else if (glyph.numberOfContours < 0) {
36952      this._decodeComposite(glyph, stream, startPos);
36953    }
36954
36955    return glyph;
36956  };
36957
36958  TTFGlyph.prototype._decodeSimple = function _decodeSimple(glyph, stream) {
36959    // this is a simple glyph
36960    glyph.points = [];
36961
36962    var endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream);
36963    glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream);
36964
36965    var flags = [];
36966    var numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;
36967
36968    while (flags.length < numCoords) {
36969      var flag = stream.readUInt8();
36970      flags.push(flag);
36971
36972      // check for repeat flag
36973      if (flag & REPEAT) {
36974        var count = stream.readUInt8();
36975        for (var j = 0; j < count; j++) {
36976          flags.push(flag);
36977        }
36978      }
36979    }
36980
36981    for (var i = 0; i < flags.length; i++) {
36982      var flag = flags[i];
36983      var point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);
36984      glyph.points.push(point);
36985    }
36986
36987    var px = 0;
36988    for (var i = 0; i < flags.length; i++) {
36989      var flag = flags[i];
36990      glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X);
36991    }
36992
36993    var py = 0;
36994    for (var i = 0; i < flags.length; i++) {
36995      var flag = flags[i];
36996      glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y);
36997    }
36998
36999    if (this._font._variationProcessor) {
37000      var points = glyph.points.slice();
37001      points.push.apply(points, this._getPhantomPoints(glyph));
37002
37003      this._font._variationProcessor.transformPoints(this.id, points);
37004      glyph.phantomPoints = points.slice(-4);
37005    }
37006
37007    return;
37008  };
37009
37010  TTFGlyph.prototype._decodeComposite = function _decodeComposite(glyph, stream) {
37011    var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
37012
37013    // this is a composite glyph
37014    glyph.components = [];
37015    var haveInstructions = false;
37016    var flags = MORE_COMPONENTS;
37017
37018    while (flags & MORE_COMPONENTS) {
37019      flags = stream.readUInt16BE();
37020      var gPos = stream.pos - offset;
37021      var glyphID = stream.readUInt16BE();
37022      if (!haveInstructions) {
37023        haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0;
37024      }
37025
37026      if (flags & ARG_1_AND_2_ARE_WORDS) {
37027        var dx = stream.readInt16BE();
37028        var dy = stream.readInt16BE();
37029      } else {
37030        var dx = stream.readInt8();
37031        var dy = stream.readInt8();
37032      }
37033
37034      var component = new Component(glyphID, dx, dy);
37035      component.pos = gPos;
37036
37037      if (flags & WE_HAVE_A_SCALE) {
37038        // fixed number with 14 bits of fraction
37039        component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
37040      } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {
37041        component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
37042        component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
37043      } else if (flags & WE_HAVE_A_TWO_BY_TWO) {
37044        component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
37045        component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
37046        component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
37047        component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
37048      }
37049
37050      glyph.components.push(component);
37051    }
37052
37053    if (this._font._variationProcessor) {
37054      var points = [];
37055      for (var j = 0; j < glyph.components.length; j++) {
37056        var component = glyph.components[j];
37057        points.push(new Point(true, true, component.dx, component.dy));
37058      }
37059
37060      points.push.apply(points, this._getPhantomPoints(glyph));
37061
37062      this._font._variationProcessor.transformPoints(this.id, points);
37063      glyph.phantomPoints = points.splice(-4, 4);
37064
37065      for (var i = 0; i < points.length; i++) {
37066        var point = points[i];
37067        glyph.components[i].dx = point.x;
37068        glyph.components[i].dy = point.y;
37069      }
37070    }
37071
37072    return haveInstructions;
37073  };
37074
37075  TTFGlyph.prototype._getPhantomPoints = function _getPhantomPoints(glyph) {
37076    var cbox = this._getCBox(true);
37077    if (this._metrics == null) {
37078      this._metrics = Glyph.prototype._getMetrics.call(this, cbox);
37079    }
37080
37081    var _metrics = this._metrics,
37082        advanceWidth = _metrics.advanceWidth,
37083        advanceHeight = _metrics.advanceHeight,
37084        leftBearing = _metrics.leftBearing,
37085        topBearing = _metrics.topBearing;
37086
37087
37088    return [new Point(false, true, glyph.xMin - leftBearing, 0), new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0), new Point(false, true, 0, glyph.yMax + topBearing), new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)];
37089  };
37090
37091  // Decodes font data, resolves composite glyphs, and returns an array of contours
37092
37093
37094  TTFGlyph.prototype._getContours = function _getContours() {
37095    var glyph = this._decode();
37096    if (!glyph) {
37097      return [];
37098    }
37099
37100    var points = [];
37101
37102    if (glyph.numberOfContours < 0) {
37103      // resolve composite glyphs
37104      for (var _iterator = glyph.components, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
37105        var _ref;
37106
37107        if (_isArray) {
37108          if (_i >= _iterator.length) break;
37109          _ref = _iterator[_i++];
37110        } else {
37111          _i = _iterator.next();
37112          if (_i.done) break;
37113          _ref = _i.value;
37114        }
37115
37116        var component = _ref;
37117
37118        var _contours = this._font.getGlyph(component.glyphID)._getContours();
37119        for (var i = 0; i < _contours.length; i++) {
37120          var contour = _contours[i];
37121          for (var j = 0; j < contour.length; j++) {
37122            var _point = contour[j];
37123            var x = _point.x * component.scaleX + _point.y * component.scale01 + component.dx;
37124            var y = _point.y * component.scaleY + _point.x * component.scale10 + component.dy;
37125            points.push(new Point(_point.onCurve, _point.endContour, x, y));
37126          }
37127        }
37128      }
37129    } else {
37130      points = glyph.points || [];
37131    }
37132
37133    // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table
37134    if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {
37135      this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;
37136      this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;
37137      this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x;
37138      this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax;
37139    }
37140
37141    var contours = [];
37142    var cur = [];
37143    for (var k = 0; k < points.length; k++) {
37144      var point = points[k];
37145      cur.push(point);
37146      if (point.endContour) {
37147        contours.push(cur);
37148        cur = [];
37149      }
37150    }
37151
37152    return contours;
37153  };
37154
37155  TTFGlyph.prototype._getMetrics = function _getMetrics() {
37156    if (this._metrics) {
37157      return this._metrics;
37158    }
37159
37160    var cbox = this._getCBox(true);
37161    _Glyph.prototype._getMetrics.call(this, cbox);
37162
37163    if (this._font._variationProcessor && !this._font.HVAR) {
37164      // No HVAR table, decode the glyph. This triggers recomputation of metrics.
37165      this.path;
37166    }
37167
37168    return this._metrics;
37169  };
37170
37171  // Converts contours to a Path object that can be rendered
37172
37173
37174  TTFGlyph.prototype._getPath = function _getPath() {
37175    var contours = this._getContours();
37176    var path = new Path();
37177
37178    for (var i = 0; i < contours.length; i++) {
37179      var contour = contours[i];
37180      var firstPt = contour[0];
37181      var lastPt = contour[contour.length - 1];
37182      var start = 0;
37183
37184      if (firstPt.onCurve) {
37185        // The first point will be consumed by the moveTo command, so skip in the loop
37186        var curvePt = null;
37187        start = 1;
37188      } else {
37189        if (lastPt.onCurve) {
37190          // Start at the last point if the first point is off curve and the last point is on curve
37191          firstPt = lastPt;
37192        } else {
37193          // Start at the middle if both the first and last points are off curve
37194          firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);
37195        }
37196
37197        var curvePt = firstPt;
37198      }
37199
37200      path.moveTo(firstPt.x, firstPt.y);
37201
37202      for (var j = start; j < contour.length; j++) {
37203        var pt = contour[j];
37204        var prevPt = j === 0 ? firstPt : contour[j - 1];
37205
37206        if (prevPt.onCurve && pt.onCurve) {
37207          path.lineTo(pt.x, pt.y);
37208        } else if (prevPt.onCurve && !pt.onCurve) {
37209          var curvePt = pt;
37210        } else if (!prevPt.onCurve && !pt.onCurve) {
37211          var midX = (prevPt.x + pt.x) / 2;
37212          var midY = (prevPt.y + pt.y) / 2;
37213          path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);
37214          var curvePt = pt;
37215        } else if (!prevPt.onCurve && pt.onCurve) {
37216          path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);
37217          var curvePt = null;
37218        } else {
37219          throw new Error("Unknown TTF path state");
37220        }
37221      }
37222
37223      // Connect the first and last points
37224      if (curvePt) {
37225        path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);
37226      }
37227
37228      path.closePath();
37229    }
37230
37231    return path;
37232  };
37233
37234  return TTFGlyph;
37235}(Glyph);
37236
37237/**
37238 * Represents an OpenType PostScript glyph, in the Compact Font Format.
37239 */
37240
37241var CFFGlyph = function (_Glyph) {
37242  _inherits(CFFGlyph, _Glyph);
37243
37244  function CFFGlyph() {
37245    _classCallCheck(this, CFFGlyph);
37246
37247    return _possibleConstructorReturn(this, _Glyph.apply(this, arguments));
37248  }
37249
37250  CFFGlyph.prototype._getName = function _getName() {
37251    if (this._font.CFF2) {
37252      return _Glyph.prototype._getName.call(this);
37253    }
37254
37255    return this._font['CFF '].getGlyphName(this.id);
37256  };
37257
37258  CFFGlyph.prototype.bias = function bias(s) {
37259    if (s.length < 1240) {
37260      return 107;
37261    } else if (s.length < 33900) {
37262      return 1131;
37263    } else {
37264      return 32768;
37265    }
37266  };
37267
37268  CFFGlyph.prototype._getPath = function _getPath() {
37269    var stream = this._font.stream;
37270    var pos = stream.pos;
37271
37272
37273    var cff = this._font.CFF2 || this._font['CFF '];
37274    var str = cff.topDict.CharStrings[this.id];
37275    var end = str.offset + str.length;
37276    stream.pos = str.offset;
37277
37278    var path = new Path();
37279    var stack = [];
37280    var trans = [];
37281
37282    var width = null;
37283    var nStems = 0;
37284    var x = 0,
37285        y = 0;
37286    var usedGsubrs = void 0;
37287    var usedSubrs = void 0;
37288    var open = false;
37289
37290    this._usedGsubrs = usedGsubrs = {};
37291    this._usedSubrs = usedSubrs = {};
37292
37293    var gsubrs = cff.globalSubrIndex || [];
37294    var gsubrsBias = this.bias(gsubrs);
37295
37296    var privateDict = cff.privateDictForGlyph(this.id);
37297    var subrs = privateDict.Subrs || [];
37298    var subrsBias = this.bias(subrs);
37299
37300    var vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;
37301    var vsindex = privateDict.vsindex;
37302    var variationProcessor = this._font._variationProcessor;
37303
37304    function checkWidth() {
37305      if (width == null) {
37306        width = stack.shift() + privateDict.nominalWidthX;
37307      }
37308    }
37309
37310    function parseStems() {
37311      if (stack.length % 2 !== 0) {
37312        checkWidth();
37313      }
37314
37315      nStems += stack.length >> 1;
37316      return stack.length = 0;
37317    }
37318
37319    function moveTo(x, y) {
37320      if (open) {
37321        path.closePath();
37322      }
37323
37324      path.moveTo(x, y);
37325      open = true;
37326    }
37327
37328    var parse = function parse() {
37329      while (stream.pos < end) {
37330        var op = stream.readUInt8();
37331        if (op < 32) {
37332          switch (op) {
37333            case 1: // hstem
37334            case 3: // vstem
37335            case 18: // hstemhm
37336            case 23:
37337              // vstemhm
37338              parseStems();
37339              break;
37340
37341            case 4:
37342              // vmoveto
37343              if (stack.length > 1) {
37344                checkWidth();
37345              }
37346
37347              y += stack.shift();
37348              moveTo(x, y);
37349              break;
37350
37351            case 5:
37352              // rlineto
37353              while (stack.length >= 2) {
37354                x += stack.shift();
37355                y += stack.shift();
37356                path.lineTo(x, y);
37357              }
37358              break;
37359
37360            case 6: // hlineto
37361            case 7:
37362              // vlineto
37363              var phase = op === 6;
37364              while (stack.length >= 1) {
37365                if (phase) {
37366                  x += stack.shift();
37367                } else {
37368                  y += stack.shift();
37369                }
37370
37371                path.lineTo(x, y);
37372                phase = !phase;
37373              }
37374              break;
37375
37376            case 8:
37377              // rrcurveto
37378              while (stack.length > 0) {
37379                var c1x = x + stack.shift();
37380                var c1y = y + stack.shift();
37381                var c2x = c1x + stack.shift();
37382                var c2y = c1y + stack.shift();
37383                x = c2x + stack.shift();
37384                y = c2y + stack.shift();
37385                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);
37386              }
37387              break;
37388
37389            case 10:
37390              // callsubr
37391              var index = stack.pop() + subrsBias;
37392              var subr = subrs[index];
37393              if (subr) {
37394                usedSubrs[index] = true;
37395                var p = stream.pos;
37396                var e = end;
37397                stream.pos = subr.offset;
37398                end = subr.offset + subr.length;
37399                parse();
37400                stream.pos = p;
37401                end = e;
37402              }
37403              break;
37404
37405            case 11:
37406              // return
37407              if (cff.version >= 2) {
37408                break;
37409              }
37410              return;
37411
37412            case 14:
37413              // endchar
37414              if (cff.version >= 2) {
37415                break;
37416              }
37417
37418              if (stack.length > 0) {
37419                checkWidth();
37420              }
37421
37422              if (open) {
37423                path.closePath();
37424                open = false;
37425              }
37426              break;
37427
37428            case 15:
37429              {
37430                // vsindex
37431                if (cff.version < 2) {
37432                  throw new Error('vsindex operator not supported in CFF v1');
37433                }
37434
37435                vsindex = stack.pop();
37436                break;
37437              }
37438
37439            case 16:
37440              {
37441                // blend
37442                if (cff.version < 2) {
37443                  throw new Error('blend operator not supported in CFF v1');
37444                }
37445
37446                if (!variationProcessor) {
37447                  throw new Error('blend operator in non-variation font');
37448                }
37449
37450                var blendVector = variationProcessor.getBlendVector(vstore, vsindex);
37451                var numBlends = stack.pop();
37452                var numOperands = numBlends * blendVector.length;
37453                var delta = stack.length - numOperands;
37454                var base = delta - numBlends;
37455
37456                for (var i = 0; i < numBlends; i++) {
37457                  var sum = stack[base + i];
37458                  for (var j = 0; j < blendVector.length; j++) {
37459                    sum += blendVector[j] * stack[delta++];
37460                  }
37461
37462                  stack[base + i] = sum;
37463                }
37464
37465                while (numOperands--) {
37466                  stack.pop();
37467                }
37468
37469                break;
37470              }
37471
37472            case 19: // hintmask
37473            case 20:
37474              // cntrmask
37475              parseStems();
37476              stream.pos += nStems + 7 >> 3;
37477              break;
37478
37479            case 21:
37480              // rmoveto
37481              if (stack.length > 2) {
37482                checkWidth();
37483              }
37484
37485              x += stack.shift();
37486              y += stack.shift();
37487              moveTo(x, y);
37488              break;
37489
37490            case 22:
37491              // hmoveto
37492              if (stack.length > 1) {
37493                checkWidth();
37494              }
37495
37496              x += stack.shift();
37497              moveTo(x, y);
37498              break;
37499
37500            case 24:
37501              // rcurveline
37502              while (stack.length >= 8) {
37503                var c1x = x + stack.shift();
37504                var c1y = y + stack.shift();
37505                var c2x = c1x + stack.shift();
37506                var c2y = c1y + stack.shift();
37507                x = c2x + stack.shift();
37508                y = c2y + stack.shift();
37509                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);
37510              }
37511
37512              x += stack.shift();
37513              y += stack.shift();
37514              path.lineTo(x, y);
37515              break;
37516
37517            case 25:
37518              // rlinecurve
37519              while (stack.length >= 8) {
37520                x += stack.shift();
37521                y += stack.shift();
37522                path.lineTo(x, y);
37523              }
37524
37525              var c1x = x + stack.shift();
37526              var c1y = y + stack.shift();
37527              var c2x = c1x + stack.shift();
37528              var c2y = c1y + stack.shift();
37529              x = c2x + stack.shift();
37530              y = c2y + stack.shift();
37531              path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);
37532              break;
37533
37534            case 26:
37535              // vvcurveto
37536              if (stack.length % 2) {
37537                x += stack.shift();
37538              }
37539
37540              while (stack.length >= 4) {
37541                c1x = x;
37542                c1y = y + stack.shift();
37543                c2x = c1x + stack.shift();
37544                c2y = c1y + stack.shift();
37545                x = c2x;
37546                y = c2y + stack.shift();
37547                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);
37548              }
37549              break;
37550
37551            case 27:
37552              // hhcurveto
37553              if (stack.length % 2) {
37554                y += stack.shift();
37555              }
37556
37557              while (stack.length >= 4) {
37558                c1x = x + stack.shift();
37559                c1y = y;
37560                c2x = c1x + stack.shift();
37561                c2y = c1y + stack.shift();
37562                x = c2x + stack.shift();
37563                y = c2y;
37564                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);
37565              }
37566              break;
37567
37568            case 28:
37569              // shortint
37570              stack.push(stream.readInt16BE());
37571              break;
37572
37573            case 29:
37574              // callgsubr
37575              index = stack.pop() + gsubrsBias;
37576              subr = gsubrs[index];
37577              if (subr) {
37578                usedGsubrs[index] = true;
37579                var p = stream.pos;
37580                var e = end;
37581                stream.pos = subr.offset;
37582                end = subr.offset + subr.length;
37583                parse();
37584                stream.pos = p;
37585                end = e;
37586              }
37587              break;
37588
37589            case 30: // vhcurveto
37590            case 31:
37591              // hvcurveto
37592              phase = op === 31;
37593              while (stack.length >= 4) {
37594                if (phase) {
37595                  c1x = x + stack.shift();
37596                  c1y = y;
37597                  c2x = c1x + stack.shift();
37598                  c2y = c1y + stack.shift();
37599                  y = c2y + stack.shift();
37600                  x = c2x + (stack.length === 1 ? stack.shift() : 0);
37601                } else {
37602                  c1x = x;
37603                  c1y = y + stack.shift();
37604                  c2x = c1x + stack.shift();
37605                  c2y = c1y + stack.shift();
37606                  x = c2x + stack.shift();
37607                  y = c2y + (stack.length === 1 ? stack.shift() : 0);
37608                }
37609
37610                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);
37611                phase = !phase;
37612              }
37613              break;
37614
37615            case 12:
37616              op = stream.readUInt8();
37617              switch (op) {
37618                case 3:
37619                  // and
37620                  var a = stack.pop();
37621                  var b = stack.pop();
37622                  stack.push(a && b ? 1 : 0);
37623                  break;
37624
37625                case 4:
37626                  // or
37627                  a = stack.pop();
37628                  b = stack.pop();
37629                  stack.push(a || b ? 1 : 0);
37630                  break;
37631
37632                case 5:
37633                  // not
37634                  a = stack.pop();
37635                  stack.push(a ? 0 : 1);
37636                  break;
37637
37638                case 9:
37639                  // abs
37640                  a = stack.pop();
37641                  stack.push(Math.abs(a));
37642                  break;
37643
37644                case 10:
37645                  // add
37646                  a = stack.pop();
37647                  b = stack.pop();
37648                  stack.push(a + b);
37649                  break;
37650
37651                case 11:
37652                  // sub
37653                  a = stack.pop();
37654                  b = stack.pop();
37655                  stack.push(a - b);
37656                  break;
37657
37658                case 12:
37659                  // div
37660                  a = stack.pop();
37661                  b = stack.pop();
37662                  stack.push(a / b);
37663                  break;
37664
37665                case 14:
37666                  // neg
37667                  a = stack.pop();
37668                  stack.push(-a);
37669                  break;
37670
37671                case 15:
37672                  // eq
37673                  a = stack.pop();
37674                  b = stack.pop();
37675                  stack.push(a === b ? 1 : 0);
37676                  break;
37677
37678                case 18:
37679                  // drop
37680                  stack.pop();
37681                  break;
37682
37683                case 20:
37684                  // put
37685                  var val = stack.pop();
37686                  var idx = stack.pop();
37687                  trans[idx] = val;
37688                  break;
37689
37690                case 21:
37691                  // get
37692                  idx = stack.pop();
37693                  stack.push(trans[idx] || 0);
37694                  break;
37695
37696                case 22:
37697                  // ifelse
37698                  var s1 = stack.pop();
37699                  var s2 = stack.pop();
37700                  var v1 = stack.pop();
37701                  var v2 = stack.pop();
37702                  stack.push(v1 <= v2 ? s1 : s2);
37703                  break;
37704
37705                case 23:
37706                  // random
37707                  stack.push(Math.random());
37708                  break;
37709
37710                case 24:
37711                  // mul
37712                  a = stack.pop();
37713                  b = stack.pop();
37714                  stack.push(a * b);
37715                  break;
37716
37717                case 26:
37718                  // sqrt
37719                  a = stack.pop();
37720                  stack.push(Math.sqrt(a));
37721                  break;
37722
37723                case 27:
37724                  // dup
37725                  a = stack.pop();
37726                  stack.push(a, a);
37727                  break;
37728
37729                case 28:
37730                  // exch
37731                  a = stack.pop();
37732                  b = stack.pop();
37733                  stack.push(b, a);
37734                  break;
37735
37736                case 29:
37737                  // index
37738                  idx = stack.pop();
37739                  if (idx < 0) {
37740                    idx = 0;
37741                  } else if (idx > stack.length - 1) {
37742                    idx = stack.length - 1;
37743                  }
37744
37745                  stack.push(stack[idx]);
37746                  break;
37747
37748                case 30:
37749                  // roll
37750                  var n = stack.pop();
37751                  var _j = stack.pop();
37752
37753                  if (_j >= 0) {
37754                    while (_j > 0) {
37755                      var t = stack[n - 1];
37756                      for (var _i = n - 2; _i >= 0; _i--) {
37757                        stack[_i + 1] = stack[_i];
37758                      }
37759
37760                      stack[0] = t;
37761                      _j--;
37762                    }
37763                  } else {
37764                    while (_j < 0) {
37765                      var t = stack[0];
37766                      for (var _i2 = 0; _i2 <= n; _i2++) {
37767                        stack[_i2] = stack[_i2 + 1];
37768                      }
37769
37770                      stack[n - 1] = t;
37771                      _j++;
37772                    }
37773                  }
37774                  break;
37775
37776                case 34:
37777                  // hflex
37778                  c1x = x + stack.shift();
37779                  c1y = y;
37780                  c2x = c1x + stack.shift();
37781                  c2y = c1y + stack.shift();
37782                  var c3x = c2x + stack.shift();
37783                  var c3y = c2y;
37784                  var c4x = c3x + stack.shift();
37785                  var c4y = c3y;
37786                  var c5x = c4x + stack.shift();
37787                  var c5y = c4y;
37788                  var c6x = c5x + stack.shift();
37789                  var c6y = c5y;
37790                  x = c6x;
37791                  y = c6y;
37792
37793                  path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);
37794                  path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);
37795                  break;
37796
37797                case 35:
37798                  // flex
37799                  var pts = [];
37800
37801                  for (var _i3 = 0; _i3 <= 5; _i3++) {
37802                    x += stack.shift();
37803                    y += stack.shift();
37804                    pts.push(x, y);
37805                  }
37806
37807                  path.bezierCurveTo.apply(path, pts.slice(0, 6));
37808                  path.bezierCurveTo.apply(path, pts.slice(6));
37809                  stack.shift(); // fd
37810                  break;
37811
37812                case 36:
37813                  // hflex1
37814                  c1x = x + stack.shift();
37815                  c1y = y + stack.shift();
37816                  c2x = c1x + stack.shift();
37817                  c2y = c1y + stack.shift();
37818                  c3x = c2x + stack.shift();
37819                  c3y = c2y;
37820                  c4x = c3x + stack.shift();
37821                  c4y = c3y;
37822                  c5x = c4x + stack.shift();
37823                  c5y = c4y + stack.shift();
37824                  c6x = c5x + stack.shift();
37825                  c6y = c5y;
37826                  x = c6x;
37827                  y = c6y;
37828
37829                  path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);
37830                  path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);
37831                  break;
37832
37833                case 37:
37834                  // flex1
37835                  var startx = x;
37836                  var starty = y;
37837
37838                  pts = [];
37839                  for (var _i4 = 0; _i4 <= 4; _i4++) {
37840                    x += stack.shift();
37841                    y += stack.shift();
37842                    pts.push(x, y);
37843                  }
37844
37845                  if (Math.abs(x - startx) > Math.abs(y - starty)) {
37846                    // horizontal
37847                    x += stack.shift();
37848                    y = starty;
37849                  } else {
37850                    x = startx;
37851                    y += stack.shift();
37852                  }
37853
37854                  pts.push(x, y);
37855                  path.bezierCurveTo.apply(path, pts.slice(0, 6));
37856                  path.bezierCurveTo.apply(path, pts.slice(6));
37857                  break;
37858
37859                default:
37860                  throw new Error('Unknown op: 12 ' + op);
37861              }
37862              break;
37863
37864            default:
37865              throw new Error('Unknown op: ' + op);
37866          }
37867        } else if (op < 247) {
37868          stack.push(op - 139);
37869        } else if (op < 251) {
37870          var b1 = stream.readUInt8();
37871          stack.push((op - 247) * 256 + b1 + 108);
37872        } else if (op < 255) {
37873          var b1 = stream.readUInt8();
37874          stack.push(-(op - 251) * 256 - b1 - 108);
37875        } else {
37876          stack.push(stream.readInt32BE() / 65536);
37877        }
37878      }
37879    };
37880
37881    parse();
37882
37883    if (open) {
37884      path.closePath();
37885    }
37886
37887    return path;
37888  };
37889
37890  return CFFGlyph;
37891}(Glyph);
37892
37893var SBIXImage = new r.Struct({
37894  originX: r.uint16,
37895  originY: r.uint16,
37896  type: new r.String(4),
37897  data: new r.Buffer(function (t) {
37898    return t.parent.buflen - t._currentOffset;
37899  })
37900});
37901
37902/**
37903 * Represents a color (e.g. emoji) glyph in Apple's SBIX format.
37904 */
37905
37906var SBIXGlyph = function (_TTFGlyph) {
37907  _inherits(SBIXGlyph, _TTFGlyph);
37908
37909  function SBIXGlyph() {
37910    _classCallCheck(this, SBIXGlyph);
37911
37912    return _possibleConstructorReturn(this, _TTFGlyph.apply(this, arguments));
37913  }
37914
37915  /**
37916   * Returns an object representing a glyph image at the given point size.
37917   * The object has a data property with a Buffer containing the actual image data,
37918   * along with the image type, and origin.
37919   *
37920   * @param {number} size
37921   * @return {object}
37922   */
37923  SBIXGlyph.prototype.getImageForSize = function getImageForSize(size) {
37924    for (var i = 0; i < this._font.sbix.imageTables.length; i++) {
37925      var table = this._font.sbix.imageTables[i];
37926      if (table.ppem >= size) {
37927        break;
37928      }
37929    }
37930
37931    var offsets = table.imageOffsets;
37932    var start = offsets[this.id];
37933    var end = offsets[this.id + 1];
37934
37935    if (start === end) {
37936      return null;
37937    }
37938
37939    this._font.stream.pos = start;
37940    return SBIXImage.decode(this._font.stream, { buflen: end - start });
37941  };
37942
37943  SBIXGlyph.prototype.render = function render(ctx, size) {
37944    var img = this.getImageForSize(size);
37945    if (img != null) {
37946      var scale = size / this._font.unitsPerEm;
37947      ctx.image(img.data, { height: size, x: img.originX, y: (this.bbox.minY - img.originY) * scale });
37948    }
37949
37950    if (this._font.sbix.flags.renderOutlines) {
37951      _TTFGlyph.prototype.render.call(this, ctx, size);
37952    }
37953  };
37954
37955  return SBIXGlyph;
37956}(TTFGlyph);
37957
37958var COLRLayer = function COLRLayer(glyph, color) {
37959  _classCallCheck(this, COLRLayer);
37960
37961  this.glyph = glyph;
37962  this.color = color;
37963};
37964
37965/**
37966 * Represents a color (e.g. emoji) glyph in Microsoft's COLR format.
37967 * Each glyph in this format contain a list of colored layers, each
37968 * of which  is another vector glyph.
37969 */
37970
37971
37972var COLRGlyph = function (_Glyph) {
37973  _inherits(COLRGlyph, _Glyph);
37974
37975  function COLRGlyph() {
37976    _classCallCheck(this, COLRGlyph);
37977
37978    return _possibleConstructorReturn(this, _Glyph.apply(this, arguments));
37979  }
37980
37981  COLRGlyph.prototype._getBBox = function _getBBox() {
37982    var bbox = new BBox();
37983    for (var i = 0; i < this.layers.length; i++) {
37984      var layer = this.layers[i];
37985      var b = layer.glyph.bbox;
37986      bbox.addPoint(b.minX, b.minY);
37987      bbox.addPoint(b.maxX, b.maxY);
37988    }
37989
37990    return bbox;
37991  };
37992
37993  /**
37994   * Returns an array of objects containing the glyph and color for
37995   * each layer in the composite color glyph.
37996   * @type {object[]}
37997   */
37998
37999
38000  COLRGlyph.prototype.render = function render(ctx, size) {
38001    for (var _iterator = this.layers, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
38002      var _ref;
38003
38004      if (_isArray) {
38005        if (_i >= _iterator.length) break;
38006        _ref = _iterator[_i++];
38007      } else {
38008        _i = _iterator.next();
38009        if (_i.done) break;
38010        _ref = _i.value;
38011      }
38012
38013      var _ref2 = _ref,
38014          glyph = _ref2.glyph,
38015          color = _ref2.color;
38016
38017      ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100);
38018      glyph.render(ctx, size);
38019    }
38020
38021    return;
38022  };
38023
38024  _createClass(COLRGlyph, [{
38025    key: 'layers',
38026    get: function get() {
38027      var cpal = this._font.CPAL;
38028      var colr = this._font.COLR;
38029      var low = 0;
38030      var high = colr.baseGlyphRecord.length - 1;
38031
38032      while (low <= high) {
38033        var mid = low + high >> 1;
38034        var rec = colr.baseGlyphRecord[mid];
38035
38036        if (this.id < rec.gid) {
38037          high = mid - 1;
38038        } else if (this.id > rec.gid) {
38039          low = mid + 1;
38040        } else {
38041          var baseLayer = rec;
38042          break;
38043        }
38044      }
38045
38046      // if base glyph not found in COLR table,
38047      // default to normal glyph from glyf or CFF
38048      if (baseLayer == null) {
38049        var g = this._font._getBaseGlyph(this.id);
38050        var color = {
38051          red: 0,
38052          green: 0,
38053          blue: 0,
38054          alpha: 255
38055        };
38056
38057        return [new COLRLayer(g, color)];
38058      }
38059
38060      // otherwise, return an array of all the layers
38061      var layers = [];
38062      for (var i = baseLayer.firstLayerIndex;
38062 i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) {
38063        var rec = colr.layerRecords[i];
38064        var color = cpal.colorRecords[rec.paletteIndex];
38065        var g = this._font._getBaseGlyph(rec.gid);
38066        layers.push(new COLRLayer(g, color));
38067      }
38068
38069      return layers;
38070    }
38071  }]);
38072
38073  return COLRGlyph;
38074}(Glyph);
38075
38076var TUPLES_SHARE_POINT_NUMBERS = 0x8000;
38077var TUPLE_COUNT_MASK = 0x0fff;
38078var EMBEDDED_TUPLE_COORD = 0x8000;
38079var INTERMEDIATE_TUPLE = 0x4000;
38080var PRIVATE_POINT_NUMBERS = 0x2000;
38081var TUPLE_INDEX_MASK = 0x0fff;
38082var POINTS_ARE_WORDS = 0x80;
38083var POINT_RUN_COUNT_MASK = 0x7f;
38084var DELTAS_ARE_ZERO = 0x80;
38085var DELTAS_ARE_WORDS = 0x40;
38086var DELTA_RUN_COUNT_MASK = 0x3f;
38087
38088/**
38089 * This class is transforms TrueType glyphs according to the data from
38090 * the Apple Advanced Typography variation tables (fvar, gvar, and avar).
38091 * These tables allow infinite adjustments to glyph weight, width, slant,
38092 * and optical size without the designer needing to specify every exact style.
38093 *
38094 * Apple's documentation for these tables is not great, so thanks to the
38095 * Freetype project for figuring much of this out.
38096 *
38097 * @private
38098 */
38099
38100var GlyphVariationProcessor = function () {
38101  function GlyphVariationProcessor(font, coords) {
38102    _classCallCheck(this, GlyphVariationProcessor);
38103
38104    this.font = font;
38105    this.normalizedCoords = this.normalizeCoords(coords);
38106    this.blendVectors = new _Map();
38107  }
38108
38109  GlyphVariationProcessor.prototype.normalizeCoords = function normalizeCoords(coords) {
38110    // the default mapping is linear along each axis, in two segments:
38111    // from the minValue to defaultValue, and from defaultValue to maxValue.
38112    var normalized = [];
38113    for (var i = 0; i < this.font.fvar.axis.length; i++) {
38114      var axis = this.font.fvar.axis[i];
38115      if (coords[i] < axis.defaultValue) {
38116        normalized.push((coords[i] - axis.defaultValue + _Number$EPSILON) / (axis.defaultValue - axis.minValue + _Number$EPSILON));
38117      } else {
38118        normalized.push((coords[i] - axis.defaultValue + _Number$EPSILON) / (axis.maxValue - axis.defaultValue + _Number$EPSILON));
38119      }
38120    }
38121
38122    // if there is an avar table, the normalized value is calculated
38123    // by interpolating between the two nearest mapped values.
38124    if (this.font.avar) {
38125      for (var i = 0; i < this.font.avar.segment.length; i++) {
38126        var segment = this.font.avar.segment[i];
38127        for (var j = 0; j < segment.correspondence.length; j++) {
38128          var pair = segment.correspondence[j];
38129          if (j >= 1 && normalized[i] < pair.fromCoord) {
38130            var prev = segment.correspondence[j - 1];
38131            normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + _Number$EPSILON) / (pair.fromCoord - prev.fromCoord + _Number$EPSILON) + prev.toCoord;
38132
38133            break;
38134          }
38135        }
38136      }
38137    }
38138
38139    return normalized;
38140  };
38141
38142  GlyphVariationProcessor.prototype.transformPoints = function transformPoints(gid, glyphPoints) {
38143    if (!this.font.fvar || !this.font.gvar) {
38144      return;
38145    }
38146
38147    var gvar = this.font.gvar;
38148
38149    if (gid >= gvar.glyphCount) {
38150      return;
38151    }
38152
38153    var offset = gvar.offsets[gid];
38154    if (offset === gvar.offsets[gid + 1]) {
38155      return;
38156    }
38157
38158    // Read the gvar data for this glyph
38159    var stream = this.font.stream;
38160
38161    stream.pos = offset;
38162    if (stream.pos >= stream.length) {
38163      return;
38164    }
38165
38166    var tupleCount = stream.readUInt16BE();
38167    var offsetToData = offset + stream.readUInt16BE();
38168
38169    if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) {
38170      var here = stream.pos;
38171      stream.pos = offsetToData;
38172      var sharedPoints = this.decodePoints();
38173      offsetToData = stream.pos;
38174      stream.pos = here;
38175    }
38176
38177    var origPoints = glyphPoints.map(function (pt) {
38178      return pt.copy();
38179    });
38180
38181    tupleCount &= TUPLE_COUNT_MASK;
38182    for (var i = 0; i < tupleCount; i++) {
38183      var tupleDataSize = stream.readUInt16BE();
38184      var tupleIndex = stream.readUInt16BE();
38185
38186      if (tupleIndex & EMBEDDED_TUPLE_COORD) {
38187        var tupleCoords = [];
38188        for (var a = 0; a < gvar.axisCount; a++) {
38189          tupleCoords.push(stream.readInt16BE() / 16384);
38190        }
38191      } else {
38192        if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) {
38193          throw new Error('Invalid gvar table');
38194        }
38195
38196        var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK];
38197      }
38198
38199      if (tupleIndex & INTERMEDIATE_TUPLE) {
38200        var startCoords = [];
38201        for (var _a = 0; _a < gvar.axisCount; _a++) {
38202          startCoords.push(stream.readInt16BE() / 16384);
38203        }
38204
38205        var endCoords = [];
38206        for (var _a2 = 0; _a2 < gvar.axisCount; _a2++) {
38207          endCoords.push(stream.readInt16BE() / 16384);
38208        }
38209      }
38210
38211      // Get the factor at which to apply this tuple
38212      var factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);
38213      if (factor === 0) {
38214        offsetToData += tupleDataSize;
38215        continue;
38216      }
38217
38218      var here = stream.pos;
38219      stream.pos = offsetToData;
38220
38221      if (tupleIndex & PRIVATE_POINT_NUMBERS) {
38222        var points = this.decodePoints();
38223      } else {
38224        var points = sharedPoints;
38225      }
38226
38227      // points.length = 0 means there are deltas for all points
38228      var nPoints = points.length === 0 ? glyphPoints.length : points.length;
38229      var xDeltas = this.decodeDeltas(nPoints);
38230      var yDeltas = this.decodeDeltas(nPoints);
38231
38232      if (points.length === 0) {
38233        // all points
38234        for (var _i = 0; _i < glyphPoints.length; _i++) {
38235          var point = glyphPoints[_i];
38236          point.x += Math.round(xDeltas[_i] * factor);
38237          point.y += Math.round(yDeltas[_i] * factor);
38238        }
38239      } else {
38240        var outPoints = origPoints.map(function (pt) {
38241          return pt.copy();
38242        });
38243        var hasDelta = glyphPoints.map(function () {
38244          return false;
38245        });
38246
38247        for (var _i2 = 0; _i2 < points.length; _i2++) {
38248          var idx = points[_i2];
38249          if (idx < glyphPoints.length) {
38250            var _point = outPoints[idx];
38251            hasDelta[idx] = true;
38252
38253            _point.x += Math.round(xDeltas[_i2] * factor);
38254            _point.y += Math.round(yDeltas[_i2] * factor);
38255          }
38256        }
38257
38258        this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);
38259
38260        for (var _i3 = 0; _i3 < glyphPoints.length; _i3++) {
38261          var deltaX = outPoints[_i3].x - origPoints[_i3].x;
38262          var deltaY = outPoints[_i3].y - origPoints[_i3].y;
38263
38264          glyphPoints[_i3].x += deltaX;
38265          glyphPoints[_i3].y += deltaY;
38266        }
38267      }
38268
38269      offsetToData += tupleDataSize;
38270      stream.pos = here;
38271    }
38272  };
38273
38274  GlyphVariationProcessor.prototype.decodePoints = function decodePoints() {
38275    var stream = this.font.stream;
38276    var count = stream.readUInt8();
38277
38278    if (count & POINTS_ARE_WORDS) {
38279      count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();
38280    }
38281
38282    var points = new Uint16Array(count);
38283    var i = 0;
38284    var point = 0;
38285    while (i < count) {
38286      var run = stream.readUInt8();
38287      var runCount = (run & POINT_RUN_COUNT_MASK) + 1;
38288      var fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;
38289
38290      for (var j = 0; j < runCount && i < count; j++) {
38291        point += fn.call(stream);
38292        points[i++] = point;
38293      }
38294    }
38295
38296    return points;
38297  };
38298
38299  GlyphVariationProcessor.prototype.decodeDeltas = function decodeDeltas(count) {
38300    var stream = this.font.stream;
38301    var i = 0;
38302    var deltas = new Int16Array(count);
38303
38304    while (i < count) {
38305      var run = stream.readUInt8();
38306      var runCount = (run & DELTA_RUN_COUNT_MASK) + 1;
38307
38308      if (run & DELTAS_ARE_ZERO) {
38309        i += runCount;
38310      } else {
38311        var fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;
38312        for (var j = 0; j < runCount && i < count; j++) {
38313          deltas[i++] = fn.call(stream);
38314        }
38315      }
38316    }
38317
38318    return deltas;
38319  };
38320
38321  GlyphVariationProcessor.prototype.tupleFactor = function tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {
38322    var normalized = this.normalizedCoords;
38323    var gvar = this.font.gvar;
38324
38325    var factor = 1;
38326
38327    for (var i = 0; i < gvar.axisCount; i++) {
38328      if (tupleCoords[i] === 0) {
38329        continue;
38330      }
38331
38332      if (normalized[i] === 0) {
38333        return 0;
38334      }
38335
38336      if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) {
38337        if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) {
38338          return 0;
38339        }
38340
38341        factor = (factor * normalized[i] + _Number$EPSILON) / (tupleCoords[i] + _Number$EPSILON);
38342      } else {
38343        if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) {
38344          return 0;
38345        } else if (normalized[i] < tupleCoords[i]) {
38346          factor = factor * (normalized[i] - startCoords[i] + _Number$EPSILON) / (tupleCoords[i] - startCoords[i] + _Number$EPSILON);
38347        } else {
38348          factor = factor * (endCoords[i] - normalized[i] + _Number$EPSILON) / (endCoords[i] - tupleCoords[i] + _Number$EPSILON);
38349        }
38350      }
38351    }
38352
38353    return factor;
38354  };
38355
38356  // Interpolates points without delta values.
38357  // Needed for the Ø and Q glyphs in Skia.
38358  // Algorithm from Freetype.
38359
38360
38361  GlyphVariationProcessor.prototype.interpolateMissingDeltas = function interpolateMissingDeltas(points, inPoints, hasDelta) {
38362    if (points.length === 0) {
38363      return;
38364    }
38365
38366    var point = 0;
38367    while (point < points.length) {
38368      var firstPoint = point;
38369
38370      // find the end point of the contour
38371      var endPoint = point;
38372      var pt = points[endPoint];
38373      while (!pt.endContour) {
38374        pt = points[++endPoint];
38375      }
38376
38377      // find the first point that has a delta
38378      while (point <= endPoint && !hasDelta[point]) {
38379        point++;
38380      }
38381
38382      if (point > endPoint) {
38383        continue;
38384      }
38385
38386      var firstDelta = point;
38387      var curDelta = point;
38388      point++;
38389
38390      while (point <= endPoint) {
38391        // find the next point with a delta, and interpolate intermediate points
38392        if (hasDelta[point]) {
38393          this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);
38394          curDelta = point;
38395        }
38396
38397        point++;
38398      }
38399
38400      // shift contour if we only have a single delta
38401      if (curDelta === firstDelta) {
38402        this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);
38403      } else {
38404        // otherwise, handle the remaining points at the end and beginning of the contour
38405        this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);
38406
38407        if (firstDelta > 0) {
38408          this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);
38409        }
38410      }
38411
38412      point = endPoint + 1;
38413    }
38414  };
38415
38416  GlyphVariationProcessor.prototype.deltaInterpolate = function deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {
38417    if (p1 > p2) {
38418      return;
38419    }
38420
38421    var iterable = ['x', 'y'];
38422    for (var i = 0; i < iterable.length; i++) {
38423      var k = iterable[i];
38424      if (inPoints[ref1][k] > inPoints[ref2][k]) {
38425        var p = ref1;
38426        ref1 = ref2;
38427        ref2 = p;
38428      }
38429
38430      var in1 = inPoints[ref1][k];
38431      var in2 = inPoints[ref2][k];
38432      var out1 = outPoints[ref1][k];
38433      var out2 = outPoints[ref2][k];
38434
38435      // If the reference points have the same coordinate but different
38436      // delta, inferred delta is zero.  Otherwise interpolate.
38437      if (in1 !== in2 || out1 === out2) {
38438        var scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);
38439
38440        for (var _p = p1; _p <= p2; _p++) {
38441          var out = inPoints[_p][k];
38442
38443          if (out <= in1) {
38444            out += out1 - in1;
38445          } else if (out >= in2) {
38446            out += out2 - in2;
38447          } else {
38448            out = out1 + (out - in1) * scale;
38449          }
38450
38451          outPoints[_p][k] = out;
38452        }
38453      }
38454    }
38455  };
38456
38457  GlyphVariationProcessor.prototype.deltaShift = function deltaShift(p1, p2, ref, inPoints, outPoints) {
38458    var deltaX = outPoints[ref].x - inPoints[ref].x;
38459    var deltaY = outPoints[ref].y - inPoints[ref].y;
38460
38461    if (deltaX === 0 && deltaY === 0) {
38462      return;
38463    }
38464
38465    for (var p = p1; p <= p2; p++) {
38466      if (p !== ref) {
38467        outPoints[p].x += deltaX;
38468        outPoints[p].y += deltaY;
38469      }
38470    }
38471  };
38472
38473  GlyphVariationProcessor.prototype.getAdvanceAdjustment = function getAdvanceAdjustment(gid, table) {
38474    var outerIndex = void 0,
38475        innerIndex = void 0;
38476
38477    if (table.advanceWidthMapping) {
38478      var idx = gid;
38479      if (idx >= table.advanceWidthMapping.mapCount) {
38480        idx = table.advanceWidthMapping.mapCount - 1;
38481      }
38482
38483      var entryFormat = table.advanceWidthMapping.entryFormat;
38484      var _table$advanceWidthMa = table.advanceWidthMapping.mapData[idx];
38485      outerIndex = _table$advanceWidthMa.outerIndex;
38486      innerIndex = _table$advanceWidthMa.innerIndex;
38487    } else {
38488      outerIndex = 0;
38489      innerIndex = gid;
38490    }
38491
38492    return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);
38493  };
38494
38495  // See pseudo code from `Font Variations Overview'
38496  // in the OpenType specification.
38497
38498
38499  GlyphVariationProcessor.prototype.getDelta = function getDelta(itemStore, outerIndex, innerIndex) {
38500    if (outerIndex >= itemStore.itemVariationData.length) {
38501      return 0;
38502    }
38503
38504    var varData = itemStore.itemVariationData[outerIndex];
38505    if (innerIndex >= varData.deltaSets.length) {
38506      return 0;
38507    }
38508
38509    var deltaSet = varData.deltaSets[innerIndex];
38510    var blendVector = this.getBlendVector(itemStore, outerIndex);
38511    var netAdjustment = 0;
38512
38513    for (var master = 0; master < varData.regionIndexCount; master++) {
38514      netAdjustment += deltaSet.deltas[master] * blendVector[master];
38515    }
38516
38517    return netAdjustment;
38518  };
38519
38520  GlyphVariationProcessor.prototype.getBlendVector = function getBlendVector(itemStore, outerIndex) {
38521    var varData = itemStore.itemVariationData[outerIndex];
38522    if (this.blendVectors.has(varData)) {
38523      return this.blendVectors.get(varData);
38524    }
38525
38526    var normalizedCoords = this.normalizedCoords;
38527    var blendVector = [];
38528
38529    // outer loop steps through master designs to be blended
38530    for (var master = 0; master < varData.regionIndexCount; master++) {
38531      var scalar = 1;
38532      var regionIndex = varData.regionIndexes[master];
38533      var axes = itemStore.variationRegionList.variationRegions[regionIndex];
38534
38535      // inner loop steps through axes in this region
38536      for (var j = 0; j < axes.length; j++) {
38537        var axis = axes[j];
38538        var axisScalar = void 0;
38539
38540        // compute the scalar contribution of this axis
38541        // ignore invalid ranges
38542        if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {
38543          axisScalar = 1;
38544        } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {
38545          axisScalar = 1;
38546
38547          // peak of 0 means ignore this axis
38548        } else if (axis.peakCoord === 0) {
38549          axisScalar = 1;
38550
38551          // ignore this region if coords are out of range
38552        } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {
38553          axisScalar = 0;
38554
38555          // calculate a proportional factor
38556        } else {
38557          if (normalizedCoords[j] === axis.peakCoord) {
38558            axisScalar = 1;
38559          } else if (normalizedCoords[j] < axis.peakCoord) {
38560            axisScalar = (normalizedCoords[j] - axis.startCoord + _Number$EPSILON) / (axis.peakCoord - axis.startCoord + _Number$EPSILON);
38561          } else {
38562            axisScalar = (axis.endCoord - normalizedCoords[j] + _Number$EPSILON) / (axis.endCoord - axis.peakCoord + _Number$EPSILON);
38563          }
38564        }
38565
38566        // take product of all the axis scalars
38567        scalar *= axisScalar;
38568      }
38569
38570      blendVector[master] = scalar;
38571    }
38572
38573    this.blendVectors.set(varData, blendVector);
38574    return blendVector;
38575  };
38576
38577  return GlyphVariationProcessor;
38578}();
38579
38580var Subset = function () {
38581  function Subset(font) {
38582    _classCallCheck(this, Subset);
38583
38584    this.font = font;
38585    this.glyphs = [];
38586    this.mapping = {};
38587
38588    // always include the missing glyph
38589    this.includeGlyph(0);
38590  }
38591
38592  Subset.prototype.includeGlyph = function includeGlyph(glyph) {
38593    if ((typeof glyph === 'undefined' ? 'undefined' : _typeof(glyph)) === 'object') {
38594      glyph = glyph.id;
38595    }
38596
38597    if (this.mapping[glyph] == null) {
38598      this.glyphs.push(glyph);
38599      this.mapping[glyph] = this.glyphs.length - 1;
38600    }
38601
38602    return this.mapping[glyph];
38603  };
38604
38605  Subset.prototype.encodeStream = function encodeStream() {
38606    var _this = this;
38607
38608    var s = new r.EncodeStream();
38609
38610    process.nextTick(function () {
38611      _this.encode(s);
38612      return s.end();
38613    });
38614
38615    return s;
38616  };
38617
38618  return Subset;
38619}();
38620
38621// Flags for simple glyphs
38622var ON_CURVE$1 = 1 << 0;
38623var X_SHORT_VECTOR$1 = 1 << 1;
38624var Y_SHORT_VECTOR$1 = 1 << 2;
38625var REPEAT$1 = 1 << 3;
38626var SAME_X$1 = 1 << 4;
38627var SAME_Y$1 = 1 << 5;
38628
38629var Point$1 = function () {
38630  function Point() {
38631    _classCallCheck(this, Point);
38632  }
38633
38634  Point.size = function size(val) {
38635    return val >= 0 && val <= 255 ? 1 : 2;
38636  };
38637
38638  Point.encode = function encode(stream, value) {
38639    if (value >= 0 && value <= 255) {
38640      stream.writeUInt8(value);
38641    } else {
38642      stream.writeInt16BE(value);
38643    }
38644  };
38645
38646  return Point;
38647}();
38648
38649var Glyf = new r.Struct({
38650  numberOfContours: r.int16, // if negative, this is a composite glyph
38651  xMin: r.int16,
38652  yMin: r.int16,
38653  xMax: r.int16,
38654  yMax: r.int16,
38655  endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'),
38656  instructions: new r.Array(r.uint8, r.uint16),
38657  flags: new r.Array(r.uint8, 0),
38658  xPoints: new r.Array(Point$1, 0),
38659  yPoints: new r.Array(Point$1, 0)
38660});
38661
38662/**
38663 * Encodes TrueType glyph outlines
38664 */
38665
38666var TTFGlyphEncoder = function () {
38667  function TTFGlyphEncoder() {
38668    _classCallCheck(this, TTFGlyphEncoder);
38669  }
38670
38671  TTFGlyphEncoder.prototype.encodeSimple = function encodeSimple(path) {
38672    var instructions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
38673
38674    var endPtsOfContours = [];
38675    var xPoints = [];
38676    var yPoints = [];
38677    var flags = [];
38678    var same = 0;
38679    var lastX = 0,
38680        lastY = 0,
38681        lastFlag = 0;
38682    var pointCount = 0;
38683
38684    for (var i = 0; i < path.commands.length; i++) {
38685      var c = path.commands[i];
38686
38687      for (var j = 0; j < c.args.length; j += 2) {
38688        var x = c.args[j];
38689        var y = c.args[j + 1];
38690        var flag = 0;
38691
38692        // If the ending point of a quadratic curve is the midpoint
38693        // between the control point and the control point of the next
38694        // quadratic curve, we can omit the ending point.
38695        if (c.command === 'quadraticCurveTo' && j === 2) {
38696          var next = path.commands[i + 1];
38697          if (next && next.command === 'quadraticCurveTo') {
38698            var midX = (lastX + next.args[0]) / 2;
38699            var midY = (lastY + next.args[1]) / 2;
38700
38701            if (x === midX && y === midY) {
38702              continue;
38703            }
38704          }
38705        }
38706
38707        // All points except control points are on curve.
38708        if (!(c.command === 'quadraticCurveTo' && j === 0)) {
38709          flag |= ON_CURVE$1;
38710        }
38711
38712        flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR$1, SAME_X$1);
38713        flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR$1, SAME_Y$1);
38714
38715        if (flag === lastFlag && same < 255) {
38716          flags[flags.length - 1] |= REPEAT$1;
38717          same++;
38718        } else {
38719          if (same > 0) {
38720            flags.push(same);
38721            same = 0;
38722          }
38723
38724          flags.push(flag);
38725          lastFlag = flag;
38726        }
38727
38728        lastX = x;
38729        lastY = y;
38730        pointCount++;
38731      }
38732
38733      if (c.command === 'closePath') {
38734        endPtsOfContours.push(pointCount - 1);
38735      }
38736    }
38737
38738    // Close the path if the last command didn't already
38739    if (path.commands.length >
38739 1 && path.commands[path.commands.length - 1].command !== 'closePath') {
38740      endPtsOfContours.push(pointCount - 1);
38741    }
38742
38743    var bbox = path.bbox;
38744    var glyf = {
38745      numberOfContours: endPtsOfContours.length,
38746      xMin: bbox.minX,
38747      yMin: bbox.minY,
38748      xMax: bbox.maxX,
38749      yMax: bbox.maxY,
38750      endPtsOfContours: endPtsOfContours,
38751      instructions: instructions,
38752      flags: flags,
38753      xPoints: xPoints,
38754      yPoints: yPoints
38755    };
38756
38757    var size = Glyf.size(glyf);
38758    var tail = 4 - size % 4;
38759
38760    var stream = new r.EncodeStream(size + tail);
38761    Glyf.encode(stream, glyf);
38762
38763    // Align to 4-byte length
38764    if (tail !== 0) {
38765      stream.fill(0, tail);
38766    }
38767
38768    return stream.buffer;
38769  };
38770
38771  TTFGlyphEncoder.prototype._encodePoint = function _encodePoint(value, last, points, flag, shortFlag, sameFlag) {
38772    var diff = value - last;
38773
38774    if (value === last) {
38775      flag |= sameFlag;
38776    } else {
38777      if (-255 <= diff && diff <= 255) {
38778        flag |= shortFlag;
38779        if (diff < 0) {
38780          diff = -diff;
38781        } else {
38782          flag |= sameFlag;
38783        }
38784      }
38785
38786      points.push(diff);
38787    }
38788
38789    return flag;
38790  };
38791
38792  return TTFGlyphEncoder;
38793}();
38794
38795var TTFSubset = function (_Subset) {
38796  _inherits(TTFSubset, _Subset);
38797
38798  function TTFSubset(font) {
38799    _classCallCheck(this, TTFSubset);
38800
38801    var _this = _possibleConstructorReturn(this, _Subset.call(this, font));
38802
38803    _this.glyphEncoder = new TTFGlyphEncoder();
38804    return _this;
38805  }
38806
38807  TTFSubset.prototype._addGlyph = function _addGlyph(gid) {
38808    var glyph = this.font.getGlyph(gid);
38809    var glyf = glyph._decode();
38810
38811    // get the offset to the glyph from the loca table
38812    var curOffset = this.font.loca.offsets[gid];
38813    var nextOffset = this.font.loca.offsets[gid + 1];
38814
38815    var stream = this.font._getTableStream('glyf');
38816    stream.pos += curOffset;
38817
38818    var buffer = stream.readBuffer(nextOffset - curOffset);
38819
38820    // if it is a compound glyph, include its components
38821    if (glyf && glyf.numberOfContours < 0) {
38822      buffer = new Buffer(buffer);
38823      for (var _iterator = glyf.components, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
38824        var _ref;
38825
38826        if (_isArray) {
38827          if (_i >= _iterator.length) break;
38828          _ref = _iterator[_i++];
38829        } else {
38830          _i = _iterator.next();
38831          if (_i.done) break;
38832          _ref = _i.value;
38833        }
38834
38835        var component = _ref;
38836
38837        gid = this.includeGlyph(component.glyphID);
38838        buffer.writeUInt16BE(gid, component.pos);
38839      }
38840    } else if (glyf && this.font._variationProcessor) {
38841      // If this is a TrueType variation glyph, re-encode the path
38842      buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);
38843    }
38844
38845    this.glyf.push(buffer);
38846    this.loca.offsets.push(this.offset);
38847
38848    this.hmtx.metrics.push({
38849      advance: glyph.advanceWidth,
38850      bearing: glyph._getMetrics().leftBearing
38851    });
38852
38853    this.offset += buffer.length;
38854    return this.glyf.length - 1;
38855  };
38856
38857  TTFSubset.prototype.encode = function encode(stream) {
38858    // tables required by PDF spec:
38859    //   head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm
38860    //
38861    // additional tables required for standalone fonts:
38862    //   name, cmap, OS/2, post
38863
38864    this.glyf = [];
38865    this.offset = 0;
38866    this.loca = {
38867      offsets: []
38868    };
38869
38870    this.hmtx = {
38871      metrics: [],
38872      bearings: []
38873    };
38874
38875    // include all the glyphs
38876    // not using a for loop because we need to support adding more
38877    // glyphs to the array as we go, and CoffeeScript caches the length.
38878    var i = 0;
38879    while (i < this.glyphs.length) {
38880      this._addGlyph(this.glyphs[i++]);
38881    }
38882
38883    var maxp = cloneDeep(this.font.maxp);
38884    maxp.numGlyphs = this.glyf.length;
38885
38886    this.loca.offsets.push(this.offset);
38887    tables.loca.preEncode.call(this.loca);
38888
38889    var head = cloneDeep(this.font.head);
38890    head.indexToLocFormat = this.loca.version;
38891
38892    var hhea = cloneDeep(this.font.hhea);
38893    hhea.numberOfMetrics = this.hmtx.metrics.length;
38894
38895    // map = []
38896    // for index in [0...256]
38897    //     if index < @numGlyphs
38898    //         map[index] = index
38899    //     else
38900    //         map[index] = 0
38901    //
38902    // cmapTable =
38903    //     version: 0
38904    //     length: 262
38905    //     language: 0
38906    //     codeMap: map
38907    //
38908    // cmap =
38909    //     version: 0
38910    //     numSubtables: 1
38911    //     tables: [
38912    //         platformID: 1
38913    //         encodingID: 0
38914    //         table: cmapTable
38915    //     ]
38916
38917    // TODO: subset prep, cvt, fpgm?
38918    Directory.encode(stream, {
38919      tables: {
38920        head: head,
38921        hhea: hhea,
38922        loca: this.loca,
38923        maxp: maxp,
38924        'cvt ': this.font['cvt '],
38925        prep: this.font.prep,
38926        glyf: this.glyf,
38927        hmtx: this.hmtx,
38928        fpgm: this.font.fpgm
38929
38930        // name: clone @font.name
38931        // 'OS/2': clone @font['OS/2']
38932        // post: clone @font.post
38933        // cmap: cmap
38934      }
38935    });
38936  };
38937
38938  return TTFSubset;
38939}(Subset);
38940
38941var CFFSubset = function (_Subset) {
38942  _inherits(CFFSubset, _Subset);
38943
38944  function CFFSubset(font) {
38945    _classCallCheck(this, CFFSubset);
38946
38947    var _this = _possibleConstructorReturn(this, _Subset.call(this, font));
38948
38949    _this.cff = _this.font['CFF '];
38950    if (!_this.cff) {
38951      throw new Error('Not a CFF Font');
38952    }
38953    return _this;
38954  }
38955
38956  CFFSubset.prototype.subsetCharstrings = function subsetCharstrings() {
38957    this.charstrings = [];
38958    var gsubrs = {};
38959
38960    for (var _iterator = this.glyphs, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
38961      var _ref;
38962
38963      if (_isArray) {
38964        if (_i >= _iterator.length) break;
38965        _ref = _iterator[_i++];
38966      } else {
38967        _i = _iterator.next();
38968        if (_i.done) break;
38969        _ref = _i.value;
38970      }
38971
38972      var gid = _ref;
38973
38974      this.charstrings.push(this.cff.getCharString(gid));
38975
38976      var glyph = this.font.getGlyph(gid);
38977      var path = glyph.path; // this causes the glyph to be parsed
38978
38979      for (var subr in glyph._usedGsubrs) {
38980        gsubrs[subr] = true;
38981      }
38982    }
38983
38984    this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);
38985  };
38986
38987  CFFSubset.prototype.subsetSubrs = function subsetSubrs(subrs, used) {
38988    var res = [];
38989    for (var i = 0; i < subrs.length; i++) {
38990      var subr = subrs[i];
38991      if (used[i]) {
38992        this.cff.stream.pos = subr.offset;
38993        res.push(this.cff.stream.readBuffer(subr.length));
38994      } else {
38995        res.push(new Buffer([11])); // return
38996      }
38997    }
38998
38999    return res;
39000  };
39001
39002  CFFSubset.prototype.subsetFontdict = function subsetFontdict(topDict) {
39003    topDict.FDArray = [];
39004    topDict.FDSelect = {
39005      version: 0,
39006      fds: []
39007    };
39008
39009    var used_fds = {};
39010    var used_subrs = [];
39011    for (var _iterator2 = this.glyphs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
39012      var _ref2;
39013
39014      if (_isArray2) {
39015        if (_i2 >= _iterator2.length) break;
39016        _ref2 = _iterator2[_i2++];
39017      } else {
39018        _i2 = _iterator2.next();
39019        if (_i2.done) break;
39020        _ref2 = _i2.value;
39021      }
39022
39023      var gid = _ref2;
39024
39025      var fd = this.cff.fdForGlyph(gid);
39026      if (fd == null) {
39027        continue;
39028      }
39029
39030      if (!used_fds[fd]) {
39031        topDict.FDArray.push(_Object$assign({}, this.cff.topDict.FDArray[fd]));
39032        used_subrs.push({});
39033      }
39034
39035      used_fds[fd] = true;
39036      topDict.FDSelect.fds.push(topDict.FDArray.length - 1);
39037
39038      var glyph = this.font.getGlyph(gid);
39039      var path = glyph.path; // this causes the glyph to be parsed
39040      for (var subr in glyph._usedSubrs) {
39041        used_subrs[used_subrs.length - 1][subr] = true;
39042      }
39043    }
39044
39045    for (var i = 0; i < topDict.FDArray.length; i++) {
39046      var dict = topDict.FDArray[i];
39047      delete dict.FontName;
39048      if (dict.Private && dict.Private.Subrs) {
39049        dict.Private = _Object$assign({}, dict.Private);
39050        dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);
39051      }
39052    }
39053
39054    return;
39055  };
39056
39057  CFFSubset.prototype.createCIDFontdict = function createCIDFontdict(topDict) {
39058    var used_subrs = {};
39059    for (var _iterator3 = this.glyphs, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
39060      var _ref3;
39061
39062      if (_isArray3) {
39063        if (_i3 >= _iterator3.length) break;
39064        _ref3 = _iterator3[_i3++];
39065      } else {
39066        _i3 = _iterator3.next();
39067        if (_i3.done) break;
39068        _ref3 = _i3.value;
39069      }
39070
39071      var gid = _ref3;
39072
39073      var glyph = this.font.getGlyph(gid);
39074      var path = glyph.path; // this causes the glyph to be parsed
39075
39076      for (var subr in glyph._usedSubrs) {
39077        used_subrs[subr] = true;
39078      }
39079    }
39080
39081    var privateDict = _Object$assign({}, this.cff.topDict.Private);
39082    privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);
39083
39084    topDict.FDArray = [{ Private: privateDict }];
39085    return topDict.FDSelect = {
39086      version: 3,
39087      nRanges: 1,
39088      ranges: [{ first: 0, fd: 0 }],
39089      sentinel: this.charstrings.length
39090    };
39091  };
39092
39093  CFFSubset.prototype.addString = function addString(string) {
39094    if (!string) {
39095      return null;
39096    }
39097
39098    if (!this.strings) {
39099      this.strings = [];
39100    }
39101
39102    this.strings.push(string);
39103    return standardStrings.length + this.strings.length - 1;
39104  };
39105
39106  CFFSubset.prototype.encode = function encode(stream) {
39107    this.subsetCharstrings();
39108
39109    var charset = {
39110      version: this.charstrings.length > 255 ? 2 : 1,
39111      ranges: [{ first: 1, nLeft: this.charstrings.length - 2 }]
39112    };
39113
39114    var topDict = _Object$assign({}, this.cff.topDict);
39115    topDict.Private = null;
39116    topDict.charset = charset;
39117    topDict.Encoding = null;
39118    topDict.CharStrings = this.charstrings;
39119
39120    var _arr = ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName'];
39121    for (var _i4 = 0; _i4 < _arr.length; _i4++) {
39122      var key = _arr[_i4];
39123      topDict[key] = this.addString(this.cff.string(topDict[key]));
39124    }
39125
39126    topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0];
39127    topDict.CIDCount = this.charstrings.length;
39128
39129    if (this.cff.isCIDFont) {
39130      this.subsetFontdict(topDict);
39131    } else {
39132      this.createCIDFontdict(topDict);
39133    }
39134
39135    var top = {
39136      version: 1,
39137      hdrSize: this.cff.hdrSize,
39138      offSize: this.cff.length,
39139      header: this.cff.header,
39140      nameIndex: [this.cff.postscriptName],
39141      topDictIndex: [topDict],
39142      stringIndex: this.strings,
39143      globalSubrIndex: this.gsubrs
39144    };
39145
39146    CFFTop.encode(stream, top);
39147  };
39148
39149  return CFFSubset;
39150}(Subset);
39151
39152var _class;
39153function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
39154  var desc = {};
39155  Object['ke' + 'ys'](descriptor).forEach(function (key) {
39156    desc[key] = descriptor[key];
39157  });
39158  desc.enumerable = !!desc.enumerable;
39159  desc.configurable = !!desc.configurable;
39160
39161  if ('value' in desc || desc.initializer) {
39162    desc.writable = true;
39163  }
39164
39165  desc = decorators.slice().reverse().reduce(function (desc, decorator) {
39166    return decorator(target, property, desc) || desc;
39167  }, desc);
39168
39169  if (context && desc.initializer !== void 0) {
39170    desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
39171    desc.initializer = undefined;
39172  }
39173
39174  if (desc.initializer === void 0) {
39175    Object['define' + 'Property'](target, property, desc);
39176    desc = null;
39177  }
39178
39179  return desc;
39180}
39181
39182/**
39183 * This is the base class for all SFNT-based font formats in fontkit.
39184 * It supports TrueType, and PostScript glyphs, and several color glyph formats.
39185 */
39186var TTFFont = (_class = function () {
39187  TTFFont.probe = function probe(buffer) {
39188    var format = buffer.toString('ascii', 0, 4);
39189    return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);
39190  };
39191
39192  function TTFFont(stream) {
39193    var variationCoords = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
39194
39195    _classCallCheck(this, TTFFont);
39196
39197    this.stream = stream;
39198    this.variationCoords = variationCoords;
39199
39200    this._directoryPos = this.stream.pos;
39201    this._tables = {};
39202    this._glyphs = {};
39203    this._decodeDirectory();
39204
39205    // define properties for each table to lazily parse
39206    for (var tag in this.directory.tables) {
39207      var table = this.directory.tables[tag];
39208      if (tables[tag] && table.length > 0) {
39209        _Object$defineProperty(this, tag, {
39210          get: this._getTable.bind(this, table)
39211        });
39212      }
39213    }
39214  }
39215
39216  TTFFont.prototype._getTable = function _getTable(table) {
39217    if (!(table.tag in this._tables)) {
39218      try {
39219        this._tables[table.tag] = this._decodeTable(table);
39220      } catch (e) {
39221        if (fontkit.logErrors) {
39222          console.error('Error decoding table ' + table.tag);
39223          console.error(e.stack);
39224        }
39225      }
39226    }
39227
39228    return this._tables[table.tag];
39229  };
39230
39231  TTFFont.prototype._getTableStream = function _getTableStream(tag) {
39232    var table = this.directory.tables[tag];
39233    if (table) {
39234      this.stream.pos = table.offset;
39235      return this.stream;
39236    }
39237
39238    return null;
39239  };
39240
39241  TTFFont.prototype._decodeDirectory = function _decodeDirectory() {
39242    return this.directory = Directory.decode(this.stream, { _startOffset: 0 });
39243  };
39244
39245  TTFFont.prototype._decodeTable = function _decodeTable(table) {
39246    var pos = this.stream.pos;
39247
39248    var stream = this._getTableStream(table.tag);
39249    var result = tables[table.tag].decode(stream, this, table.length);
39250
39251    this.stream.pos = pos;
39252    return result;
39253  };
39254
39255  /**
39256   * The unique PostScript name for this font
39257   * @type {string}
39258   */
39259
39260
39261  /**
39262   * Gets a string from the font's `name` table
39263   * `lang` is a BCP-47 language code.
39264   * @return {string}
39265   */
39266  TTFFont.prototype.getName = function getName(key) {
39267    var lang = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en';
39268
39269    var record = this.name.records[key];
39270    if (record) {
39271      return record[lang];
39272    }
39273
39274    return null;
39275  };
39276
39277  /**
39278   * The font's full name, e.g. "Helvetica Bold"
39279   * @type {string}
39280   */
39281
39282
39283  /**
39284   * Returns whether there is glyph in the font for the given unicode code point.
39285   *
39286   * @param {number} codePoint
39287   * @return {boolean}
39288   */
39289  TTFFont.prototype.hasGlyphForCodePoint = function hasGlyphForCodePoint(codePoint) {
39290    return !!this._cmapProcessor.lookup(codePoint);
39291  };
39292
39293  /**
39294   * Maps a single unicode code point to a Glyph object.
39295   * Does not perform any advanced substitutions (there is no context to do so).
39296   *
39297   * @param {number} codePoint
39298   * @return {Glyph}
39299   */
39300
39301
39302  TTFFont.prototype.glyphForCodePoint = function glyphForCodePoint(codePoint) {
39303    return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]);
39304  };
39305
39306  /**
39307   * Returns an array of Glyph objects for the given string.
39308   * This is only a one-to-one mapping from characters to glyphs.
39309   * For most uses, you should use font.layout (described below), which
39310   * provides a much more advanced mapping supporting AAT and OpenType shaping.
39311   *
39312   * @param {string} string
39313   * @return {Glyph[]}
39314   */
39315
39316
39317  TTFFont.prototype.glyphsForString = function glyphsForString(string) {
39318    var glyphs = [];
39319    var len = string.length;
39320    var idx = 0;
39321    var last = -1;
39322    var state = -1;
39323
39324    while (idx <= len) {
39325      var code = 0;
39326      var nextState = 0;
39327
39328      if (idx < len) {
39329        // Decode the next codepoint from UTF 16
39330        code = string.charCodeAt(idx++);
39331        if (0xd800 <= code && code <= 0xdbff && idx < len) {
39332          var next = string.charCodeAt(idx);
39333          if (0xdc00 <= next && next <= 0xdfff) {
39334            idx++;
39335            code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;
39336          }
39337        }
39338
39339        // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.
39340        nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0;
39341      } else {
39342        idx++;
39343      }
39344
39345      if (state === 0 && nextState === 1) {
39346        // Variation selector following normal codepoint.
39347        glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code]));
39348      } else if (state === 0 && nextState === 0) {
39349        // Normal codepoint following normal codepoint.
39350        glyphs.push(this.glyphForCodePoint(last));
39351      }
39352
39353      last = code;
39354      state = nextState;
39355    }
39356
39357    return glyphs;
39358  };
39359
39360  /**
39361   * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.
39362   *
39363   * @param {string} string
39364   * @param {string[]} [userFeatures]
39365   * @param {string} [script]
39366   * @param {string} [language]
39367   * @param {string} [direction]
39368   * @return {GlyphRun}
39369   */
39370  TTFFont.prototype.layout = function layout(string, userFeatures, script, language, direction) {
39371    return this._layoutEngine.layout(string, userFeatures, script, language, direction);
39372  };
39373
39374  /**
39375   * Returns an array of strings that map to the given glyph id.
39376   * @param {number} gid - glyph id
39377   */
39378
39379
39380  TTFFont.prototype.stringsForGlyph = function stringsForGlyph(gid) {
39381    return this._layoutEngine.stringsForGlyph(gid);
39382  };
39383
39384  /**
39385   * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)
39386   * (or mapped AAT tags) supported by the font.
39387   * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.
39388   * If this is an AAT font, the OpenType feature tags are mapped to AAT features.
39389   *
39390   * @type {string[]}
39391   */
39392
39393
39394  TTFFont.prototype.getAvailableFeatures = function getAvailableFeatures(script, language) {
39395    return this._layoutEngine.getAvailableFeatures(script, language);
39396  };
39397
39398  TTFFont.prototype._getBaseGlyph = function _getBaseGlyph(glyph) {
39399    var characters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
39400
39401    if (!this._glyphs[glyph]) {
39402      if (this.directory.tables.glyf) {
39403        this._glyphs[glyph] = new TTFGlyph(glyph, characters, this);
39404      } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) {
39405        this._glyphs[glyph] = new CFFGlyph(glyph, characters, this);
39406      }
39407    }
39408
39409    return this._glyphs[glyph] || null;
39410  };
39411
39412  /**
39413   * Returns a glyph object for the given glyph id.
39414   * You can pass the array of code points this glyph represents for
39415   * your use later, and it will be stored in the glyph object.
39416   *
39417   * @param {number} glyph
39418   * @param {number[]} characters
39419   * @return {Glyph}
39420   */
39421
39422
39423  TTFFont.prototype.getGlyph = function getGlyph(glyph) {
39424    var characters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
39425
39426    if (!this._glyphs[glyph]) {
39427      if (this.directory.tables.sbix) {
39428        this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this);
39429      } else if (this.directory.tables.COLR && this.directory.tables.CPAL) {
39430        this._glyphs[glyph] = new COLRGlyph(glyph, characters, this);
39431      } else {
39432        this._getBaseGlyph(glyph, characters);
39433      }
39434    }
39435
39436    return this._glyphs[glyph] || null;
39437  };
39438
39439  /**
39440   * Returns a Subset for this font.
39441   * @return {Subset}
39442   */
39443
39444
39445  TTFFont.prototype.createSubset = function createSubset() {
39446    if (this.directory.tables['CFF ']) {
39447      return new CFFSubset(this);
39448    }
39449
39450    return new TTFSubset(this);
39451  };
39452
39453  /**
39454   * Returns an object describing the available variation axes
39455   * that this font supports. Keys are setting tags, and values
39456   * contain the axis name, range, and default value.
39457   *
39458   * @type {object}
39459   */
39460
39461
39462  /**
39463   * Returns a new font with the given variation settings applied.
39464   * Settings can either be an instance name, or an object containing
39465   * variation tags as specified by the `variationAxes` property.
39466   *
39467   * @param {object} settings
39468   * @return {TTFFont}
39469   */
39470  TTFFont.prototype.getVariation = function getVariation(settings) {
39471    if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) {
39472      throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');
39473    }
39474
39475    if (typeof settings === 'string') {
39476      settings = this.namedVariations[settings];
39477    }
39478
39479    if ((typeof settings === 'undefined' ? 'undefined' : _typeof(settings)) !== 'object') {
39480      throw new Error('Variation settings must be either a variation name or settings object.');
39481    }
39482
39483    // normalize the coordinates
39484    var coords = this.fvar.axis.map(function (axis, i) {
39485      var axisTag = axis.axisTag.trim();
39486      if (axisTag in settings) {
39487        return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));
39488      } else {
39489        return axis.defaultValue;
39490      }
39491    });
39492
39493    var stream = new r.DecodeStream(this.stream.buffer);
39494    stream.pos = this._directoryPos;
39495
39496    var font = new TTFFont(stream, coords);
39497    font._tables = this._tables;
39498
39499    return font;
39500  };
39501
39502  // Standardized format plugin API
39503  TTFFont.prototype.getFont = function getFont(name) {
39504    return this.getVariation(name);
39505  };
39506
39507  _createClass(TTFFont, [{
39508    key: 'postscriptName',
39509    get: function get() {
39510      var name = this.name.records.postscriptName;
39511      if (name) {
39512        var lang = _Object$keys(name)[0];
39513        return name[lang];
39514      }
39515
39516      return null;
39517    }
39518  }, {
39519    key: 'fullName',
39520    get: function get() {
39521      return this.getName('fullName');
39522    }
39523
39524    /**
39525     * The font's family name, e.g. "Helvetica"
39526     * @type {string}
39527     */
39528
39529  }, {
39530    key: 'familyName',
39531    get: function get() {
39532      return this.getName('fontFamily');
39533    }
39534
39535    /**
39536     * The font's sub-family, e.g. "Bold".
39537     * @type {string}
39538     */
39539
39540  }, {
39541    key: 'subfamilyName',
39542    get: function get() {
39543      return this.getName('fontSubfamily');
39544    }
39545
39546    /**
39547     * The font's copyright information
39548     * @type {string}
39549     */
39550
39551  }, {
39552    key: 'copyright',
39553    get: function get() {
39554      return this.getName('copyright');
39555    }
39556
39557    /**
39558     * The font's version number
39559     * @type {string}
39560     */
39561
39562  }, {
39563    key: 'version',
39564    get: function get() {
39565      return this.getName('version');
39566    }
39567
39568    /**
39569     * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))
39570     * @type {number}
39571     */
39572
39573  }, {
39574    key: 'ascent',
39575    get: function get() {
39576      return this.hhea.ascent;
39577    }
39578
39579    /**
39580     * The font’s [descender](https://en.wikipedia.org/wiki/Descender)
39581     * @type {number}
39582     */
39583
39584  }, {
39585    key: 'descent',
39586    get: function get() {
39587      return this.hhea.descent;
39588    }
39589
39590    /**
39591     * The amount of space that should be included between lines
39592     * @type {number}
39593     */
39594
39595  }, {
39596    key: 'lineGap',
39597    get: function get() {
39598      return this.hhea.lineGap;
39599    }
39600
39601    /**
39602     * The offset from the normal underline position that should be used
39603     * @type {number}
39604     */
39605
39606  }, {
39607    key: 'underlinePosition',
39608    get: function get() {
39609      return this.post.underlinePosition;
39610    }
39611
39612    /**
39613     * The weight of the underline that should be used
39614     * @type {number}
39615     */
39616
39617  }, {
39618    key: 'underlineThickness',
39619    get: function get() {
39620      return this.post.underlineThickness;
39621    }
39622
39623    /**
39624     * If this is an italic font, the angle the cursor should be drawn at to match the font design
39625     * @type {number}
39626     */
39627
39628  }, {
39629    key: 'italicAngle',
39630    get: function get() {
39631      return this.post.italicAngle;
39632    }
39633
39634    /**
39635     * The height of capital letters above the baseline.
39636     * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.
39637     * @type {number}
39638     */
39639
39640  }, {
39641    key: 'capHeight',
39642    get: function get() {
39643      var os2 = this['OS/2'];
39644      return os2 ? os2.capHeight : this.ascent;
39645    }
39646
39647    /**
39648     * The height of lower case letters in the font.
39649     * See [here](https://en.wikipedia.org/wiki/X-height) for more details.
39650     * @type {number}
39651     */
39652
39653  }, {
39654    key: 'xHeight',
39655    get: function get() {
39656      var os2 = this['OS/2'];
39657      return os2 ? os2.xHeight : 0;
39658    }
39659
39660    /**
39661     * The number of glyphs in the font.
39662     * @type {number}
39663     */
39664
39665  }, {
39666    key: 'numGlyphs',
39667    get: function get() {
39668      return this.maxp.numGlyphs;
39669    }
39670
39671    /**
39672     * The size of the font’s internal coordinate grid
39673     * @type {number}
39674     */
39675
39676  }, {
39677    key: 'unitsPerEm',
39678    get: function get() {
39679      return this.head.unitsPerEm;
39680    }
39681
39682    /**
39683     * The font’s bounding box, i.e. the box that encloses all glyphs in the font.
39684     * @type {BBox}
39685     */
39686
39687  }, {
39688    key: 'bbox',
39689    get: function get() {
39690      return _Object$freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));
39691    }
39692  }, {
39693    key: '_cmapProcessor',
39694    get: function get() {
39695      return new CmapProcessor(this.cmap);
39696    }
39697
39698    /**
39699     * An array of all of the unicode code points supported by the font.
39700     * @type {number[]}
39701     */
39702
39703  }, {
39704    key: 'characterSet',
39705    get: function get() {
39706      return this._cmapProcessor.getCharacterSet();
39707    }
39708  }, {
39709    key: '_layoutEngine',
39710    get: function get() {
39711      return new LayoutEngine(this);
39712    }
39713  }, {
39714    key: 'availableFeatures',
39715    get: function get() {
39716      return this._layoutEngine.getAvailableFeatures();
39717    }
39718  }, {
39719    key: 'variationAxes',
39720    get: function get() {
39721      var res = {};
39722      if (!this.fvar) {
39723        return res;
39724      }
39725
39726      for (var _iterator = this.fvar.axis, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
39727        var _ref;
39728
39729        if (_isArray) {
39730          if (_i >= _iterator.length) break;
39731          _ref = _iterator[_i++];
39732        } else {
39733          _i = _iterator.next();
39734          if (_i.done) break;
39735          _ref = _i.value;
39736        }
39737
39738        var axis = _ref;
39739
39740        res[axis.axisTag.trim()] = {
39741          name: axis.name.en,
39742          min: axis.minValue,
39743          default: axis.defaultValue,
39744          max: axis.maxValue
39745        };
39746      }
39747
39748      return res;
39749    }
39750
39751    /**
39752     * Returns an object describing the named variation instances
39753     * that the font designer has specified. Keys are variation names
39754     * and values are the variation settings for this instance.
39755     *
39756     * @type {object}
39757     */
39758
39759  }, {
39760    key: 'namedVariations',
39761    get: function get() {
39762      var res = {};
39763      if (!this.fvar) {
39764        return res;
39765      }
39766
39767      for (var _iterator2 = this.fvar.instance, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
39768        var _ref2;
39769
39770        if (_isArray2) {
39771          if (_i2 >= _iterator2.length) break;
39772          _ref2 = _iterator2[_i2++];
39773        } else {
39774          _i2 = _iterator2.next();
39775          if (_i2.done) break;
39776          _ref2 = _i2.value;
39777        }
39778
39779        var instance = _ref2;
39780
39781        var settings = {};
39782        for (var i = 0; i < this.fvar.axis.length; i++) {
39783          var axis = this.fvar.axis[i];
39784          settings[axis.axisTag.trim()] = instance.coord[i];
39785        }
39786
39787        res[instance.name.en] = settings;
39788      }
39789
39790      return res;
39791    }
39792  }, {
39793    key: '_variationProcessor',
39794    get: function get() {
39795      if (!this.fvar) {
39796        return null;
39797      }
39798
39799      var variationCoords = this.variationCoords;
39800
39801      // Ignore if no variation coords and not CFF2
39802      if (!variationCoords && !this.CFF2) {
39803        return null;
39804      }
39805
39806      if (!variationCoords) {
39807        variationCoords = this.fvar.axis.map(function (axis) {
39808          return axis.defaultValue;
39809        });
39810      }
39811
39812      return new GlyphVariationProcessor(this, variationCoords);
39813    }
39814  }]);
39815
39816  return TTFFont;
39817}(), (_applyDecoratedDescriptor(_class.prototype, 'bbox', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, 'bbox'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, '_cmapProcessor', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, '_cmapProcessor'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'characterSet', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, 'characterSet'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, '_layoutEngine', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, '_layoutEngine'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'variationAxes', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, 'variationAxes'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'namedVariations', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, 'namedVariations'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, '_variationProcessor', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, '_variationProcessor'), _class.prototype)), _class);
39818
39819var WOFFDirectoryEntry = new r.Struct({
39820  tag: new r.String(4),
39821  offset: new r.Pointer(r.uint32, 'void', { type: 'global' }),
39822  compLength: r.uint32,
39823  length: r.uint32,
39824  origChecksum: r.uint32
39825});
39826
39827var WOFFDirectory = new r.Struct({
39828  tag: new r.String(4), // should be 'wOFF'
39829  flavor: r.uint32,
39830  length: r.uint32,
39831  numTables: r.uint16,
39832  reserved: new r.Reserved(r.uint16),
39833  totalSfntSize: r.uint32,
39834  majorVersion: r.uint16,
39835  minorVersion: r.uint16,
39836  metaOffset: r.uint32,
39837  metaLength: r.uint32,
39838  metaOrigLength: r.uint32,
39839  privOffset: r.uint32,
39840  privLength: r.uint32,
39841  tables: new r.Array(WOFFDirectoryEntry, 'numTables')
39842});
39843
39844WOFFDirectory.process = function () {
39845  var tables = {};
39846  for (var _iterator = this.tables, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
39847    var _ref;
39848
39849    if (_isArray) {
39850      if (_i >= _iterator.length) break;
39851      _ref = _iterator[_i++];
39852    } else {
39853      _i = _iterator.next();
39854      if (_i.done) break;
39855      _ref = _i.value;
39856    }
39857
39858    var table = _ref;
39859
39860    tables[table.tag] = table;
39861  }
39862
39863  this.tables = tables;
39864};
39865
39866var WOFFFont = function (_TTFFont) {
39867  _inherits(WOFFFont, _TTFFont);
39868
39869  function WOFFFont() {
39870    _classCallCheck(this, WOFFFont);
39871
39872    return _possibleConstructorReturn(this, _TTFFont.apply(this, arguments));
39873  }
39874
39875  WOFFFont.probe = function probe(buffer) {
39876    return buffer.toString('ascii', 0, 4) === 'wOFF';
39877  };
39878
39879  WOFFFont.prototype._decodeDirectory = function _decodeDirectory() {
39880    this.directory = WOFFDirectory.decode(this.stream, { _startOffset: 0 });
39881  };
39882
39883  WOFFFont.prototype._getTableStream = function _getTableStream(tag) {
39884    var table = this.directory.tables[tag];
39885    if (table) {
39886      this.stream.pos = table.offset;
39887
39888      if (table.compLength < table.length) {
39889        this.stream.pos += 2; // skip deflate header
39890        var outBuffer = new Buffer(table.length);
39891        var buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);
39892        return new r.DecodeStream(buf);
39893      } else {
39894        return this.stream;
39895      }
39896    }
39897
39898    return null;
39899  };
39900
39901  return WOFFFont;
39902}(TTFFont);
39903
39904/**
39905 * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently.
39906 */
39907
39908var WOFF2Glyph = function (_TTFGlyph) {
39909  _inherits(WOFF2Glyph, _TTFGlyph);
39910
39911  function WOFF2Glyph() {
39912    _classCallCheck(this, WOFF2Glyph);
39913
39914    return _possibleConstructorReturn(this, _TTFGlyph.apply(this, arguments));
39915  }
39916
39917  WOFF2Glyph.prototype._decode = function _decode() {
39918    // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.
39919    return this._font._transformedGlyphs[this.id];
39920  };
39921
39922  WOFF2Glyph.prototype._getCBox = function _getCBox() {
39923    return this.path.bbox;
39924  };
39925
39926  return WOFF2Glyph;
39927}(TTFGlyph);
39928
39929var Base128 = {
39930  decode: function decode(stream) {
39931    var result = 0;
39932    var iterable = [0, 1, 2, 3, 4];
39933    for (var j = 0; j < iterable.length; j++) {
39934      var i = iterable[j];
39935      var code = stream.readUInt8();
39936
39937      // If any of the top seven bits are set then we're about to overflow.
39938      if (result & 0xe0000000) {
39939        throw new Error('Overflow');
39940      }
39941
39942      result = result << 7 | code & 0x7f;
39943      if ((code & 0x80) === 0) {
39944        return result;
39945      }
39946    }
39947
39948    throw new Error('Bad base 128 number');
39949  }
39950};
39951
39952var knownTags = ['cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ', 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp', 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF', 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL', 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc', 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx', 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill'];
39953
39954var WOFF2DirectoryEntry = new r.Struct({
39955  flags: r.uint8,
39956  customTag: new r.Optional(new r.String(4), function (t) {
39957    return (t.flags & 0x3f) === 0x3f;
39958  }),
39959  tag: function tag(t) {
39960    return t.customTag || knownTags[t.flags & 0x3f];
39961  }, // || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); },
39962  length: Base128,
39963  transformVersion: function transformVersion(t) {
39964    return t.flags >>> 6 & 0x03;
39965  },
39966  transformed: function transformed(t) {
39967    return t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0;
39968  },
39969  transformLength: new r.Optional(Base128, function (t) {
39970    return t.transformed;
39971  })
39972});
39973
39974var WOFF2Directory = new r.Struct({
39975  tag: new r.String(4), // should be 'wOF2'
39976  flavor: r.uint32,
39977  length: r.uint32,
39978  numTables: r.uint16,
39979  reserved: new r.Reserved(r.uint16),
39980  totalSfntSize: r.uint32,
39981  totalCompressedSize: r.uint32,
39982  majorVersion: r.uint16,
39983  minorVersion: r.uint16,
39984  metaOffset: r.uint32,
39985  metaLength: r.uint32,
39986  metaOrigLength: r.uint32,
39987  privOffset: r.uint32,
39988  privLength: r.uint32,
39989  tables: new r.Array(WOFF2DirectoryEntry, 'numTables')
39990});
39991
39992WOFF2Directory.process = function () {
39993  var tables = {};
39994  for (var i = 0; i < this.tables.length; i++) {
39995    var table = this.tables[i];
39996    tables[table.tag] = table;
39997  }
39998
39999  return this.tables = tables;
40000};
40001
40002/**
40003 * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2
40004 * See spec here: http://www.w3.org/TR/WOFF2/
40005 */
40006
40007var WOFF2Font = function (_TTFFont) {
40008  _inherits(WOFF2Font, _TTFFont);
40009
40010  function WOFF2Font() {
40011    _classCallCheck(this, WOFF2Font);
40012
40013    return _possibleConstructorReturn(this, _TTFFont.apply(this, arguments));
40014  }
40015
40016  WOFF2Font.probe = function probe(buffer) {
40017    return buffer.toString('ascii', 0, 4) === 'wOF2';
40018  };
40019
40020  WOFF2Font.prototype._decodeDirectory = function _decodeDirectory() {
40021    this.directory = WOFF2Directory.decode(this.stream);
40022    this._dataPos = this.stream.pos;
40023  };
40024
40025  WOFF2Font.prototype._decompress = function _decompress() {
40026    // decompress data and setup table offsets if we haven't already
40027    if (!this._decompressed) {
40028      this.stream.pos = this._dataPos;
40029      var buffer = this.stream.readBuffer(this.directory.totalCompressedSize);
40030
40031      var decompressedSize = 0;
40032      for (var tag in this.directory.tables) {
40033        var entry = this.directory.tables[tag];
40034        entry.offset = decompressedSize;
40035        decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length;
40036      }
40037
40038      var decompressed = brotli(buffer, decompressedSize);
40039      if (!decompressed) {
40040        throw new Error('Error decoding compressed data in WOFF2');
40041      }
40042
40043      this.stream = new r.DecodeStream(new Buffer(decompressed));
40044      this._decompressed = true;
40045    }
40046  };
40047
40048  WOFF2Font.prototype._decodeTable = function _decodeTable(table) {
40049    this._decompress();
40050    return _TTFFont.prototype._decodeTable.call(this, table);
40051  };
40052
40053  // Override this method to get a glyph and return our
40054  // custom subclass if there is a glyf table.
40055
40056
40057  WOFF2Font.prototype._getBaseGlyph = function _getBaseGlyph(glyph) {
40058    var characters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
40059
40060    if (!this._glyphs[glyph]) {
40061      if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {
40062        if (!this._transformedGlyphs) {
40063          this._transformGlyfTable();
40064        }
40065        return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this);
40066      } else {
40067        return _TTFFont.prototype._getBaseGlyph.call(this, glyph, characters);
40068      }
40069    }
40070  };
40071
40072  WOFF2Font.prototype._transformGlyfTable = function _transformGlyfTable() {
40073    this._decompress();
40074    this.stream.pos = this.directory.tables.glyf.offset;
40075    var table = GlyfTable.decode(this.stream);
40076    var glyphs = [];
40077
40078    for (var index = 0; index < table.numGlyphs; index++) {
40079      var glyph = {};
40080      var nContours = table.nContours.readInt16BE();
40081      glyph.numberOfContours = nContours;
40082
40083      if (nContours > 0) {
40084        // simple glyph
40085        var nPoints = [];
40086        var totalPoints = 0;
40087
40088        for (var i = 0; i < nContours; i++) {
40089          var _r = read255UInt16(table.nPoints);
40090          totalPoints += _r;
40091          nPoints.push(totalPoints);
40092        }
40093
40094        glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints);
40095        for (var _i = 0; _i < nContours; _i++) {
40096          glyph.points[nPoints[_i] - 1].endContour = true;
40097        }
40098
40099        var instructionSize = read255UInt16(table.glyphs);
40100      } else if (nContours < 0) {
40101        // composite glyph
40102        var haveInstructions = TTFGlyph.prototype._decodeComposite.call({ _font: this }, glyph, table.composites);
40103        if (haveInstructions) {
40104          var instructionSize = read255UInt16(table.glyphs);
40105        }
40106      }
40107
40108      glyphs.push(glyph);
40109    }
40110
40111    this._transformedGlyphs = glyphs;
40112  };
40113
40114  return WOFF2Font;
40115}(TTFFont);
40116
40117var Substream = function () {
40118  function Substream(length) {
40119    _classCallCheck(this, Substream);
40120
40121    this.length = length;
40122    this._buf = new r.Buffer(length);
40123  }
40124
40125  Substream.prototype.decode = function decode(stream, parent) {
40126    return new r.DecodeStream(this._buf.decode(stream, parent));
40127  };
40128
40129  return Substream;
40130}();
40131
40132// This struct represents the entire glyf table
40133
40134
40135var GlyfTable = new r.Struct({
40136  version: r.uint32,
40137  numGlyphs: r.uint16,
40138  indexFormat: r.uint16,
40139  nContourStreamSize: r.uint32,
40140  nPointsStreamSize: r.uint32,
40141  flagStreamSize: r.uint32,
40142  glyphStreamSize: r.uint32,
40143  compositeStreamSize: r.uint32,
40144  bboxStreamSize: r.uint32,
40145  instructionStreamSize: r.uint32,
40146  nContours: new Substream('nContourStreamSize'),
40147  nPoints: new Substream('nPointsStreamSize'),
40148  flags: new Substream('flagStreamSize'),
40149  glyphs: new Substream('glyphStreamSize'),
40150  composites: new Substream('compositeStreamSize'),
40151  bboxes: new Substream('bboxStreamSize'),
40152  instructions: new Substream('instructionStreamSize')
40153});
40154
40155var WORD_CODE = 253;
40156var ONE_MORE_BYTE_CODE2 = 254;
40157var ONE_MORE_BYTE_CODE1 = 255;
40158var LOWEST_U_CODE = 253;
40159
40160function read255UInt16(stream) {
40161  var code = stream.readUInt8();
40162
40163  if (code === WORD_CODE) {
40164    return stream.readUInt16BE();
40165  }
40166
40167  if (code === ONE_MORE_BYTE_CODE1) {
40168    return stream.readUInt8() + LOWEST_U_CODE;
40169  }
40170
40171  if (code === ONE_MORE_BYTE_CODE2) {
40172    return stream.readUInt8() + LOWEST_U_CODE * 2;
40173  }
40174
40175  return code;
40176}
40177
40178function withSign(flag, baseval) {
40179  return flag & 1 ? baseval : -baseval;
40180}
40181
40182function decodeTriplet(flags, glyphs, nPoints) {
40183  var y = void 0;
40184  var x = y = 0;
40185  var res = [];
40186
40187  for (var i = 0; i < nPoints; i++) {
40188    var dx = 0,
40189        dy = 0;
40190    var flag = flags.readUInt8();
40191    var onCurve = !(flag >> 7);
40192    flag &= 0x7f;
40193
40194    if (flag < 10) {
40195      dx = 0;
40196      dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());
40197    } else if (flag < 20) {
40198      dx = withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8());
40199      dy = 0;
40200    } else if (flag < 84) {
40201      var b0 = flag - 20;
40202      var b1 = glyphs.readUInt8();
40203      dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));
40204      dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));
40205    } else if (flag < 120) {
40206      var b0 = flag - 84;
40207      dx = withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8());
40208      dy = withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8());
40209    } else if (flag < 124) {
40210      var b1 = glyphs.readUInt8();
40211      var b2 = glyphs.readUInt8();
40212      dx = withSign(flag, (b1 << 4) + (b2 >> 4));
40213      dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());
40214    } else {
40215      dx = withSign(flag, glyphs.readUInt16BE());
40216      dy = withSign(flag >> 1, glyphs.readUInt16BE());
40217    }
40218
40219    x += dx;
40220    y += dy;
40221    res.push(new Point(onCurve, false, x, y));
40222  }
40223
40224  return res;
40225}
40226
40227var TTCHeader = new r.VersionedStruct(r.uint32, {
40228  0x00010000: {
40229    numFonts: r.uint32,
40230    offsets: new r.Array(r.uint32, 'numFonts')
40231  },
40232  0x00020000: {
40233    numFonts: r.uint32,
40234    offsets: new r.Array(r.uint32, 'numFonts'),
40235    dsigTag: r.uint32,
40236    dsigLength: r.uint32,
40237    dsigOffset: r.uint32
40238  }
40239});
40240
40241var TrueTypeCollection = function () {
40242  TrueTypeCollection.probe = function probe(buffer) {
40243    return buffer.toString('ascii', 0, 4) === 'ttcf';
40244  };
40245
40246  function TrueTypeCollection(stream) {
40247    _classCallCheck(this, TrueTypeCollection);
40248
40249    this.stream = stream;
40250    if (stream.readString(4) !== 'ttcf') {
40251      throw new Error('Not a TrueType collection');
40252    }
40253
40254    this.header = TTCHeader.decode(stream);
40255  }
40256
40257  TrueTypeCollection.prototype.getFont = function getFont(name) {
40258    for (var _iterator = this.header.offsets, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
40259      var _ref;
40260
40261      if (_isArray) {
40262        if (_i >= _iterator.length) break;
40263        _ref = _iterator[_i++];
40264      } else {
40265        _i = _iterator.next();
40266        if (_i.done) break;
40267        _ref = _i.value;
40268      }
40269
40270      var offset = _ref;
40271
40272      var stream = new r.DecodeStream(this.stream.buffer);
40273      stream.pos = offset;
40274      var font = new TTFFont(stream);
40275      if (font.postscriptName === name) {
40276        return font;
40277      }
40278    }
40279
40280    return null;
40281  };
40282
40283  _createClass(TrueTypeCollection, [{
40284    key: 'fonts',
40285    get: function get() {
40286      var fonts = [];
40287      for (var _iterator2 = this.header.offsets, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
40288        var _ref2;
40289
40290        if (_isArray2) {
40291          if (_i2 >= _iterator2.length) break;
40292          _ref2 = _iterator2[_i2++];
40293        } else {
40294          _i2 = _iterator2.next();
40295          if (_i2.done) break;
40296          _ref2 = _i2.value;
40297        }
40298
40299        var offset = _ref2;
40300
40301        var stream = new r.DecodeStream(this.stream.buffer);
40302        stream.pos = offset;
40303        fonts.push(new TTFFont(stream));
40304      }
40305
40306      return fonts;
40307    }
40308  }]);
40309
40310  return TrueTypeCollection;
40311}();
40312
40313var DFontName = new r.String(r.uint8);
40314var DFontData = new r.Struct({
40315  len: r.uint32,
40316  buf: new r.Buffer('len')
40317});
40318
40319var Ref = new r.Struct({
40320  id: r.uint16,
40321  nameOffset: r.int16,
40322  attr: r.uint8,
40323  dataOffset: r.uint24,
40324  handle: r.uint32
40325});
40326
40327var Type = new r.Struct({
40328  name: new r.String(4),
40329  maxTypeIndex: r.uint16,
40330  refList: new r.Pointer(r.uint16, new r.Array(Ref, function (t) {
40331    return t.maxTypeIndex + 1;
40332  }), { type: 'parent' })
40333});
40334
40335var TypeList = new r.Struct({
40336  length: r.uint16,
40337  types: new r.Array(Type, function (t) {
40338    return t.length + 1;
40339  })
40340});
40341
40342var DFontMap = new r.Struct({
40343  reserved: new r.Reserved(r.uint8, 24),
40344  typeList: new r.Pointer(r.uint16, TypeList),
40345  nameListOffset: new r.Pointer(r.uint16, 'void')
40346});
40347
40348var DFontHeader = new r.Struct({
40349  dataOffset: r.uint32,
40350  map: new r.Pointer(r.uint32, DFontMap),
40351  dataLength: r.uint32,
40352  mapLength: r.uint32
40353});
40354
40355var DFont = function () {
40356  DFont.probe = function probe(buffer) {
40357    var stream = new r.DecodeStream(buffer);
40358
40359    try {
40360      var header = DFontHeader.decode(stream);
40361    } catch (e) {
40362      return false;
40363    }
40364
40365    for (var _iterator = header.map.typeList.types, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) {
40366      var _ref;
40367
40368      if (_isArray) {
40369        if (_i >= _iterator.length) break;
40370        _ref = _iterator[_i++];
40371      } else {
40372        _i = _iterator.next();
40373        if (_i.done) break;
40374        _ref = _i.value;
40375      }
40376
40377      var type = _ref;
40378
40379      if (type.name === 'sfnt') {
40380        return true;
40381      }
40382    }
40383
40384    return false;
40385  };
40386
40387  function DFont(stream) {
40388    _classCallCheck(this, DFont);
40389
40390    this.stream = stream;
40391    this.header = DFontHeader.decode(this.stream);
40392
40393    for (var _iterator2 = this.header.map.typeList.types, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) {
40394      var _ref2;
40395
40396      if (_isArray2) {
40397        if (_i2 >= _iterator2.length) break;
40398        _ref2 = _iterator2[_i2++];
40399      } else {
40400        _i2 = _iterator2.next();
40401        if (_i2.done) break;
40402        _ref2 = _i2.value;
40403      }
40404
40405      var type = _ref2;
40406
40407      for (var _iterator3 = type.refList, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) {
40408        var _ref3;
40409
40410        if (_isArray3) {
40411          if (_i3 >= _iterator3.length) break;
40412          _ref3 = _iterator3[_i3++];
40413        } else {
40414          _i3 = _iterator3.next();
40415          if (_i3.done) break;
40416          _ref3 = _i3.value;
40417        }
40418
40419        var ref = _ref3;
40420
40421        if (ref.nameOffset >= 0) {
40422          this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;
40423          ref.name = DFontName.decode(this.stream);
40424        } else {
40425          ref.name = null;
40426        }
40427      }
40428
40429      if (type.name === 'sfnt') {
40430        this.sfnt = type;
40431      }
40432    }
40433  }
40434
40435  DFont.prototype.getFont = function getFont(name) {
40436    if (!this.sfnt) {
40437      return null;
40438    }
40439
40440    for (var _iterator4 = this.sfnt.refList, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _getIterator(_iterator4);;) {
40441      var _ref4;
40442
40443      if (_isArray4) {
40444        if (_i4 >= _iterator4.length) break;
40445        _ref4 = _iterator4[_i4++];
40446      } else {
40447        _i4 = _iterator4.next();
40448        if (_i4.done) break;
40449        _ref4 = _i4.value;
40450      }
40451
40452      var ref = _ref4;
40453
40454      var pos = this.header.dataOffset + ref.dataOffset + 4;
40455      var stream = new r.DecodeStream(this.stream.buffer.slice(pos));
40456      var font = new TTFFont(stream);
40457      if (font.postscriptName === name) {
40458        return font;
40459      }
40460    }
40461
40462    return null;
40463  };
40464
40465  _createClass(DFont, [{
40466    key: 'fonts',
40467    get: function get() {
40468      var fonts = [];
40469      for (var _iterator5 = this.sfnt.refList, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _getIterator(_iterator5);;) {
40470        var _ref5;
40471
40472        if (_isArray5) {
40473          if (_i5 >= _iterator5.length) break;
40474          _ref5 = _iterator5[_i5++];
40475        } else {
40476          _i5 = _iterator5.next();
40477          if (_i5.done) break;
40478          _ref5 = _i5.value;
40479        }
40480
40481        var ref = _ref5;
40482
40483        var pos = this.header.dataOffset + ref.dataOffset + 4;
40484        var stream = new r.DecodeStream(this.stream.buffer.slice(pos));
40485        fonts.push(new TTFFont(stream));
40486      }
40487
40488      return fonts;
40489    }
40490  }]);
40491
40492  return DFont;
40493}();
40494
40495// Register font formats
40496fontkit.registerFormat(TTFFont);
40497fontkit.registerFormat(WOFFFont);
40498fontkit.registerFormat(WOFF2Font);
40499fontkit.registerFormat(TrueTypeCollection);
40500fontkit.registerFormat(DFont);
40501
40502module.exports = fontkit;
40503
40504/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer, __webpack_require__(11)))
40505
40506/***/ }),
40507/* 168 */
40508/***/ (function(module, exports, __webpack_require__) {
40509
40510// Generated by CoffeeScript 1.7.1
40511(function() {
40512  var key, val, _ref, _ref1;
40513
40514  exports.EncodeStream = __webpack_require__(169);
40515
40516  exports.DecodeStream = __webpack_require__(51);
40517
40518  exports.Array = __webpack_require__(93);
40519
40520  exports.LazyArray = __webpack_require__(187);
40521
40522  exports.Bitfield = __webpack_require__(188);
40523
40524  exports.Boolean = __webpack_require__(189);
40525
40526  exports.Buffer = __webpack_require__(190);
40527
40528  exports.Enum = __webpack_require__(191);
40529
40530  exports.Optional = __webpack_require__(192);
40531
40532  exports.Reserved = __webpack_require__(193);
40533
40534  exports.String = __webpack_require__(194);
40535
40536  exports.Struct = __webpack_require__(94);
40537
40538  exports.VersionedStruct = __webpack_require__(195);
40539
40540  _ref = __webpack_require__(22);
40541  for (key in _ref) {
40542    val = _ref[key];
40543    exports[key] = val;
40544  }
40545
40546  _ref1 = __webpack_require__(196);
40547  for (key in _ref1) {
40548    val = _ref1[key];
40549    exports[key] = val;
40550  }
40551
40552}).call(this);
40553
40554
40555/***/ }),
40556/* 169 */
40557/***/ (function(module, exports, __webpack_require__) {
40558
40559/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
40560(function() {
40561  var DecodeStream, EncodeStream, iconv, stream,
40562    __hasProp = {}.hasOwnProperty,
40563    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
40564
40565  stream = __webpack_require__(15);
40566
40567  DecodeStream = __webpack_require__(51);
40568
40569  try {
40570    iconv = __webpack_require__(52);
40571  } catch (_error) {}
40572
40573  EncodeStream = (function(_super) {
40574    var key;
40575
40576    __extends(EncodeStream, _super);
40577
40578    function EncodeStream(bufferSize) {
40579      if (bufferSize == null) {
40580        bufferSize = 65536;
40581      }
40582      EncodeStream.__super__.constructor.apply(this, arguments);
40583      this.buffer = new Buffer(bufferSize);
40584      this.bufferOffset = 0;
40585      this.pos = 0;
40586    }
40587
40588    for (key in Buffer.prototype) {
40589      if (key.slice(0, 5) === 'write') {
40590        (function(key) {
40591          var bytes;
40592          bytes = +DecodeStream.TYPES[key.replace(/write|[BL]E/g, '')];
40593          return EncodeStream.prototype[key] = function(value) {
40594            this.ensure(bytes);
40595            this.buffer[key](value, this.bufferOffset);
40596            this.bufferOffset += bytes;
40597            return this.pos += bytes;
40598          };
40599        })(key);
40600      }
40601    }
40602
40603    EncodeStream.prototype._read = function() {};
40604
40605    EncodeStream.prototype.ensure = function(bytes) {
40606      if (this.bufferOffset + bytes > this.buffer.length) {
40607        return this.flush();
40608      }
40609    };
40610
40611    EncodeStream.prototype.flush = function() {
40612      if (this.bufferOffset > 0) {
40613        this.push(new Buffer(this.buffer.slice(0, this.bufferOffset)));
40614        return this.bufferOffset = 0;
40615      }
40616    };
40617
40618    EncodeStream.prototype.writeBuffer = function(buffer) {
40619      this.flush();
40620      this.push(buffer);
40621      return this.pos += buffer.length;
40622    };
40623
40624    EncodeStream.prototype.writeString = function(string, encoding) {
40625      var buf, byte, i, _i, _ref;
40626      if (encoding == null) {
40627        encoding = 'ascii';
40628      }
40629      switch (encoding) {
40630        case 'utf16le':
40631        case 'ucs2':
40632        case 'utf8':
40633        case 'ascii':
40634          return this.writeBuffer(new Buffer(string, encoding));
40635        case 'utf16be':
40636          buf = new Buffer(string, 'utf16le');
40637          for (i = _i = 0, _ref = buf.length - 1; _i < _ref; i = _i += 2) {
40638            byte = buf[i];
40639            buf[i] = buf[i + 1];
40640            buf[i + 1] = byte;
40641          }
40642          return this.writeBuffer(buf);
40643        default:
40644          if (iconv) {
40645            return this.writeBuffer(iconv.encode(string, encoding));
40646          } else {
40647            throw new Error('Install iconv-lite to enable additional string encodings.');
40648          }
40649      }
40650    };
40651
40652    EncodeStream.prototype.writeUInt24BE = function(val) {
40653      this.ensure(3);
40654      this.buffer[this.bufferOffset++] = val >>> 16 & 0xff;
40655      this.buffer[this.bufferOffset++] = val >>> 8 & 0xff;
40656      this.buffer[this.bufferOffset++] = val & 0xff;
40657      return this.pos += 3;
40658    };
40659
40660    EncodeStream.prototype.writeUInt24LE = function(val) {
40661      this.ensure(3);
40662      this.buffer[this.bufferOffset++] = val & 0xff;
40663      this.buffer[this.bufferOffset++] = val >>> 8 & 0xff;
40664      this.buffer[this.bufferOffset++] = val >>> 16 & 0xff;
40665      return this.pos += 3;
40666    };
40667
40668    EncodeStream.prototype.writeInt24BE = function(val) {
40669      if (val >= 0) {
40670        return this.writeUInt24BE(val);
40671      } else {
40672        return this.writeUInt24BE(val + 0xffffff + 1);
40673      }
40674    };
40675
40676    EncodeStream.prototype.writeInt24LE = function(val) {
40677      if (val >= 0) {
40678        return this.writeUInt24LE(val);
40679      } else {
40680        return this.writeUInt24LE(val + 0xffffff + 1);
40681      }
40682    };
40683
40684    EncodeStream.prototype.fill = function(val, length) {
40685      var buf;
40686      if (length < this.buffer.length) {
40687        this.ensure(length);
40688        this.buffer.fill(val, this.bufferOffset, this.bufferOffset + length);
40689        this.bufferOffset += length;
40690        return this.pos += length;
40691      } else {
40692        buf = new Buffer(length);
40693        buf.fill(val);
40694        return this.writeBuffer(buf);
40695      }
40696    };
40697
40698    EncodeStream.prototype.end = function() {
40699      this.flush();
40700      return this.push(null);
40701    };
40702
40703    return EncodeStream;
40704
40705  })(stream.Readable);
40706
40707  module.exports = EncodeStream;
40708
40709}).call(this);
40710
40711/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
40712
40713/***/ }),
40714/* 170 */
40715/***/ (function(module, exports, __webpack_require__) {
40716
40717"use strict";
40718
40719
40720var BOMChar = '\uFEFF';
40721
40722exports.PrependBOM = PrependBOMWrapper
40723function PrependBOMWrapper(encoder, options) {
40724    this.encoder = encoder;
40725    this.addBOM = true;
40726}
40727
40728PrependBOMWrapper.prototype.write = function(str) {
40729    if (this.addBOM) {
40730        str = BOMChar + str;
40731        this.addBOM = false;
40732    }
40733
40734    return this.encoder.write(str);
40735}
40736
40737PrependBOMWrapper.prototype.end = function() {
40738    return this.encoder.end();
40739}
40740
40741
40742//------------------------------------------------------------------------------
40743
40744exports.StripBOM = StripBOMWrapper;
40745function StripBOMWrapper(decoder, options) {
40746    this.decoder = decoder;
40747    this.pass = false;
40748    this.options = options || {};
40749}
40750
40751StripBOMWrapper.prototype.write = function(buf) {
40752    var res = this.decoder.write(buf);
40753    if (this.pass || !res)
40754        return res;
40755
40756    if (res[0] === BOMChar) {
40757        res = res.slice(1);
40758        if (typeof this.options.stripBOM === 'function')
40759            this.options.stripBOM();
40760    }
40761
40762    this.pass = true;
40763    return res;
40764}
40765
40766StripBOMWrapper.prototype.end = function() {
40767    return this.decoder.end();
40768}
40769
40770
40771
40772/***/ }),
40773/* 171 */
40774/***/ (function(module, exports, __webpack_require__) {
40775
40776"use strict";
40777
40778
40779// Update this array if you add/rename/remove files in this directory.
40780// We support Browserify by skipping automatic module discovery and requiring modules directly.
40781var modules = [
40782    __webpack_require__(172),
40783    __webpack_require__(173),
40784    __webpack_require__(174),
40785    __webpack_require__(175),
40786    __webpack_require__(176),
40787    __webpack_require__(177),
40788    __webpack_require__(178),
40789    __webpack_require__(179),
40790];
40791
40792// Put all encoding/alias/codec definitions to single object and export it.
40793for (var i = 0; i < modules.length; i++) {
40794    var module = modules[i];
40795    for (var enc in module)
40796        if (Object.prototype.hasOwnProperty.call(module, enc))
40797            exports[enc] = module[enc];
40798}
40799
40800
40801/***/ }),
40802/* 172 */
40803/***/ (function(module, exports, __webpack_require__) {
40804
40805"use strict";
40806
40807var Buffer = __webpack_require__(1).Buffer;
40808
40809// Export Node.js internal encodings.
40810
40811module.exports = {
40812    // Encodings
40813    utf8:   { type: "_internal", bomAware: true},
40814    cesu8:  { type: "_internal", bomAware: true},
40815    unicode11utf8: "utf8",
40816
40817    ucs2:   { type: "_internal", bomAware: true},
40818    utf16le: "ucs2",
40819
40820    binary: { type: "_internal" },
40821    base64: { type: "_internal" },
40822    hex:    { type: "_internal" },
40823
40824    // Codec.
40825    _internal: InternalCodec,
40826};
40827
40828//------------------------------------------------------------------------------
40829
40830function InternalCodec(codecOptions, iconv) {
40831    this.enc = codecOptions.encodingName;
40832    this.bomAware = codecOptions.bomAware;
40833
40834    if (this.enc === "base64")
40835        this.encoder = InternalEncoderBase64;
40836    else if (this.enc === "cesu8") {
40837        this.enc = "utf8"; // Use utf8 for decoding.
40838        this.encoder = InternalEncoderCesu8;
40839
40840        // Add decoder for versions of Node not supporting CESU-8
40841        if (new Buffer('eda0bdedb2a9', 'hex').toString() !== '💩') {
40842            this.decoder = InternalDecoderCesu8;
40843            this.defaultCharUnicode = iconv.defaultCharUnicode;
40844        }
40845    }
40846}
40847
40848InternalCodec.prototype.encoder = InternalEncoder;
40849InternalCodec.prototype.decoder = InternalDecoder;
40850
40851//------------------------------------------------------------------------------
40852
40853// We use node.js internal decoder. Its signature is the same as ours.
40854var StringDecoder = __webpack_require__(47).StringDecoder;
40855
40856if (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.
40857    StringDecoder.prototype.end = function() {};
40858
40859
40860function InternalDecoder(options, codec) {
40861    StringDecoder.call(this, codec.enc);
40862}
40863
40864InternalDecoder.prototype = StringDecoder.prototype;
40865
40866
40867//------------------------------------------------------------------------------
40868// Encoder is mostly trivial
40869
40870function InternalEncoder(options, codec) {
40871    this.enc = codec.enc;
40872}
40873
40874InternalEncoder.prototype.write = function(str) {
40875    return new Buffer(str, this.enc);
40876}
40877
40878InternalEncoder.prototype.end = function() {
40879}
40880
40881
40882//------------------------------------------------------------------------------
40883// Except base64 encoder, which must keep its state.
40884
40885function InternalEncoderBase64(options, codec) {
40886    this.prevStr = '';
40887}
40888
40889InternalEncoderBase64.prototype.write = function(str) {
40890    str = this.prevStr + str;
40891    var completeQuads = str.length - (str.length % 4);
40892    this.prevStr = str.slice(completeQuads);
40893    str = str.slice(0, completeQuads);
40894
40895    return new Buffer(str, "base64");
40896}
40897
40898InternalEncoderBase64.prototype.end = function() {
40899    return new Buffer(this.prevStr, "base64");
40900}
40901
40902
40903//------------------------------------------------------------------------------
40904// CESU-8 encoder is also special.
40905
40906function InternalEncoderCesu8(options, codec) {
40907}
40908
40909InternalEncoderCesu8.prototype.write = function(str) {
40910    var buf = new Buffer(str.length * 3), bufIdx = 0;
40911    for (var i = 0; i < str.length; i++) {
vendor: 21,539 bytes, lines 40912-41610
40912        var charCode = str.charCodeAt(i);
40913        // Naive implementation, but it works because CESU-8 is especially easy
40914        // to convert from UTF-16 (which all JS strings are encoded in).
40915        if (charCode < 0x80)
40916            buf[bufIdx++] = charCode;
40917        else if (charCode < 0x800) {
40918            buf[bufIdx++] = 0xC0 + (charCode >>> 6);
40919            buf[bufIdx++] = 0x80 + (charCode & 0x3f);
40920        }
40921        else { // charCode will always be < 0x10000 in javascript.
40922            buf[bufIdx++] = 0xE0 + (charCode >>> 12);
40923            buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);
40924            buf[bufIdx++] = 0x80 + (charCode & 0x3f);
40925        }
40926    }
40927    return buf.slice(0, bufIdx);
40928}
40929
40930InternalEncoderCesu8.prototype.end = function() {
40931}
40932
40933//------------------------------------------------------------------------------
40934// CESU-8 decoder is not implemented in Node v4.0+
40935
40936function InternalDecoderCesu8(options, codec) {
40937    this.acc = 0;
40938    this.contBytes = 0;
40939    this.accBytes = 0;
40940    this.defaultCharUnicode = codec.defaultCharUnicode;
40941}
40942
40943InternalDecoderCesu8.prototype.write = function(buf) {
40944    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes,
40945        res = '';
40946    for (var i = 0; i < buf.length; i++) {
40947        var curByte = buf[i];
40948        if ((curByte & 0xC0) !== 0x80) { // Leading byte
40949            if (contBytes > 0) { // Previous code is invalid
40950                res += this.defaultCharUnicode;
40951                contBytes = 0;
40952            }
40953
40954            if (curByte < 0x80) { // Single-byte code
40955                res += String.fromCharCode(curByte);
40956            } else if (curByte < 0xE0) { // Two-byte code
40957                acc = curByte & 0x1F;
40958                contBytes = 1; accBytes = 1;
40959            } else if (curByte < 0xF0) { // Three-byte code
40960                acc = curByte & 0x0F;
40961                contBytes = 2; accBytes = 1;
40962            } else { // Four or more are not supported for CESU-8.
40963                res += this.defaultCharUnicode;
40964            }
40965        } else { // Continuation byte
40966            if (contBytes > 0) { // We're waiting for it.
40967                acc = (acc << 6) | (curByte & 0x3f);
40968                contBytes--; accBytes++;
40969                if (contBytes === 0) {
40970                    // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)
40971                    if (accBytes === 2 && acc < 0x80 && acc > 0)
40972                        res += this.defaultCharUnicode;
40973                    else if (accBytes === 3 && acc < 0x800)
40974                        res += this.defaultCharUnicode;
40975                    else
40976                        // Actually add character.
40977                        res += String.fromCharCode(acc);
40978                }
40979            } else { // Unexpected continuation byte
40980                res += this.defaultCharUnicode;
40981            }
40982        }
40983    }
40984    this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;
40985    return res;
40986}
40987
40988InternalDecoderCesu8.prototype.end = function() {
40989    var res = 0;
40990    if (this.contBytes > 0)
40991        res += this.defaultCharUnicode;
40992    return res;
40993}
40994
40995
40996/***/ }),
40997/* 173 */
40998/***/ (function(module, exports, __webpack_require__) {
40999
41000"use strict";
41001
41002var Buffer = __webpack_require__(1).Buffer;
41003
41004// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js
41005
41006// == UTF16-BE codec. ==========================================================
41007
41008exports.utf16be = Utf16BECodec;
41009function Utf16BECodec() {
41010}
41011
41012Utf16BECodec.prototype.encoder = Utf16BEEncoder;
41013Utf16BECodec.prototype.decoder = Utf16BEDecoder;
41014Utf16BECodec.prototype.bomAware = true;
41015
41016
41017// -- Encoding
41018
41019function Utf16BEEncoder() {
41020}
41021
41022Utf16BEEncoder.prototype.write = function(str) {
41023    var buf = new Buffer(str, 'ucs2');
41024    for (var i = 0; i < buf.length; i += 2) {
41025        var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;
41026    }
41027    return buf;
41028}
41029
41030Utf16BEEncoder.prototype.end = function() {
41031}
41032
41033
41034// -- Decoding
41035
41036function Utf16BEDecoder() {
41037    this.overflowByte = -1;
41038}
41039
41040Utf16BEDecoder.prototype.write = function(buf) {
41041    if (buf.length == 0)
41042        return '';
41043
41044    var buf2 = new Buffer(buf.length + 1),
41045        i = 0, j = 0;
41046
41047    if (this.overflowByte !== -1) {
41048        buf2[0] = buf[0];
41049        buf2[1] = this.overflowByte;
41050        i = 1; j = 2;
41051    }
41052
41053    for (; i < buf.length-1; i += 2, j+= 2) {
41054        buf2[j] = buf[i+1];
41055        buf2[j+1] = buf[i];
41056    }
41057
41058    this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;
41059
41060    return buf2.slice(0, j).toString('ucs2');
41061}
41062
41063Utf16BEDecoder.prototype.end = function() {
41064}
41065
41066
41067// == UTF-16 codec =============================================================
41068// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.
41069// Defaults to UTF-16LE, as it's prevalent and default in Node.
41070// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le
41071// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});
41072
41073// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).
41074
41075exports.utf16 = Utf16Codec;
41076function Utf16Codec(codecOptions, iconv) {
41077    this.iconv = iconv;
41078}
41079
41080Utf16Codec.prototype.encoder = Utf16Encoder;
41081Utf16Codec.prototype.decoder = Utf16Decoder;
41082
41083
41084// -- Encoding (pass-through)
41085
41086function Utf16Encoder(options, codec) {
41087    options = options || {};
41088    if (options.addBOM === undefined)
41089        options.addBOM = true;
41090    this.encoder = codec.iconv.getEncoder('utf-16le', options);
41091}
41092
41093Utf16Encoder.prototype.write = function(str) {
41094    return this.encoder.write(str);
41095}
41096
41097Utf16Encoder.prototype.end = function() {
41098    return this.encoder.end();
41099}
41100
41101
41102// -- Decoding
41103
41104function Utf16Decoder(options, codec) {
41105    this.decoder = null;
41106    this.initialBytes = [];
41107    this.initialBytesLen = 0;
41108
41109    this.options = options || {};
41110    this.iconv = codec.iconv;
41111}
41112
41113Utf16Decoder.prototype.write = function(buf) {
41114    if (!this.decoder) {
41115        // Codec is not chosen yet. Accumulate initial bytes.
41116        this.initialBytes.push(buf);
41117        this.initialBytesLen += buf.length;
41118
41119        if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below)
41120            return '';
41121
41122        // We have enough bytes -> detect endianness.
41123        var buf = Buffer.concat(this.initialBytes),
41124            encoding = detectEncoding(buf, this.options.defaultEncoding);
41125        this.decoder = this.iconv.getDecoder(encoding, this.options);
41126        this.initialBytes.length = this.initialBytesLen = 0;
41127    }
41128
41129    return this.decoder.write(buf);
41130}
41131
41132Utf16Decoder.prototype.end = function() {
41133    if (!this.decoder) {
41134        var buf = Buffer.concat(this.initialBytes),
41135            encoding = detectEncoding(buf, this.options.defaultEncoding);
41136        this.decoder = this.iconv.getDecoder(encoding, this.options);
41137
41138        var res = this.decoder.write(buf),
41139            trail = this.decoder.end();
41140
41141        return trail ? (res + trail) : res;
41142    }
41143    return this.decoder.end();
41144}
41145
41146function detectEncoding(buf, defaultEncoding) {
41147    var enc = defaultEncoding || 'utf-16le';
41148
41149    if (buf.length >= 2) {
41150        // Check BOM.
41151        if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM
41152            enc = 'utf-16be';
41153        else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM
41154            enc = 'utf-16le';
41155        else {
41156            // No BOM found. Try to deduce encoding from initial content.
41157            // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.
41158            // So, we count ASCII as if it was LE or BE, and decide from that.
41159            var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions
41160                _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even.
41161
41162            for (var i = 0; i < _len; i += 2) {
41163                if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++;
41164                if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++;
41165            }
41166
41167            if (asciiCharsBE > asciiCharsLE)
41168                enc = 'utf-16be';
41169            else if (asciiCharsBE < asciiCharsLE)
41170                enc = 'utf-16le';
41171        }
41172    }
41173
41174    return enc;
41175}
41176
41177
41178
41179
41180/***/ }),
41181/* 174 */
41182/***/ (function(module, exports, __webpack_require__) {
41183
41184"use strict";
41185
41186var Buffer = __webpack_require__(1).Buffer;
41187
41188// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152
41189// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3
41190
41191exports.utf7 = Utf7Codec;
41192exports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7
41193function Utf7Codec(codecOptions, iconv) {
41194    this.iconv = iconv;
41195};
41196
41197Utf7Codec.prototype.encoder = Utf7Encoder;
41198Utf7Codec.prototype.decoder = Utf7Decoder;
41199Utf7Codec.prototype.bomAware = true;
41200
41201
41202// -- Encoding
41203
41204var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g;
41205
41206function Utf7Encoder(options, codec) {
41207    this.iconv = codec.iconv;
41208}
41209
41210Utf7Encoder.prototype.write = function(str) {
41211    // Naive implementation.
41212    // Non-direct chars are encoded as "+<base64>-"; single "+" char is encoded as "+-".
41213    return new Buffer(str.replace(nonDirectChars, function(chunk) {
41214        return "+" + (chunk === '+' ? '' :
41215            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, ''))
41216            + "-";
41217    }.bind(this)));
41218}
41219
41220Utf7Encoder.prototype.end = function() {
41221}
41222
41223
41224// -- Decoding
41225
41226function Utf7Decoder(options, codec) {
41227    this.iconv = codec.iconv;
41228    this.inBase64 = false;
41229    this.base64Accum = '';
41230}
41231
41232var base64Regex = /[A-Za-z0-9\/+]/;
41233var base64Chars = [];
41234for (var i = 0; i < 256; i++)
41235    base64Chars[i] = base64Regex.test(String.fromCharCode(i));
41236
41237var plusChar = '+'.charCodeAt(0),
41238    minusChar = '-'.charCodeAt(0),
41239    andChar = '&'.charCodeAt(0);
41240
41241Utf7Decoder.prototype.write = function(buf) {
41242    var res = "", lastI = 0,
41243        inBase64 = this.inBase64,
41244        base64Accum = this.base64Accum;
41245
41246    // The decoder is more involved as we must handle chunks in stream.
41247
41248    for (var i = 0; i < buf.length; i++) {
41249        if (!inBase64) { // We're in direct mode.
41250            // Write direct chars until '+'
41251            if (buf[i] == plusChar) {
41252                res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars.
41253                lastI = i+1;
41254                inBase64 = true;
41255            }
41256        } else { // We decode base64.
41257            if (!base64Chars[buf[i]]) { // Base64 ended.
41258                if (i == lastI && buf[i] == minusChar) {// "+-" -> "+"
41259                    res += "+";
41260                } else {
41261                    var b64str = base64Accum + buf.slice(lastI, i).toString();
41262                    res += this.iconv.decode(new Buffer(b64str, 'base64'), "utf16-be");
41263                }
41264
41265                if (buf[i] != minusChar) // Minus is absorbed after base64.
41266                    i--;
41267
41268                lastI = i+1;
41269                inBase64 = false;
41270                base64Accum = '';
41271            }
41272        }
41273    }
41274
41275    if (!inBase64) {
41276        res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars.
41277    } else {
41278        var b64str = base64Accum + buf.slice(lastI).toString();
41279
41280        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.
41281        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.
41282        b64str = b64str.slice(0, canBeDecoded);
41283
41284        res += this.iconv.decode(new Buffer(b64str, 'base64'), "utf16-be");
41285    }
41286
41287    this.inBase64 = inBase64;
41288    this.base64Accum = base64Accum;
41289
41290    return res;
41291}
41292
41293Utf7Decoder.prototype.end = function() {
41294    var res = "";
41295    if (this.inBase64 && this.base64Accum.length > 0)
41296        res = this.iconv.decode(new Buffer(this.base64Accum, 'base64'), "utf16-be");
41297
41298    this.inBase64 = false;
41299    this.base64Accum = '';
41300    return res;
41301}
41302
41303
41304// UTF-7-IMAP codec.
41305// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)
41306// Differences:
41307//  * Base64 part is started by "&" instead of "+"
41308//  * Direct characters are 0x20-0x7E, except "&" (0x26)
41309//  * In Base64, "," is used instead of "/"
41310//  * Base64 must not be used to represent direct characters.
41311//  * No implicit shift back from Base64 (should always end with '-')
41312//  * String must end in non-shifted position.
41313//  * "-&" while in base64 is not allowed.
41314
41315
41316exports.utf7imap = Utf7IMAPCodec;
41317function Utf7IMAPCodec(codecOptions, iconv) {
41318    this.iconv = iconv;
41319};
41320
41321Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;
41322Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;
41323Utf7IMAPCodec.prototype.bomAware = true;
41324
41325
41326// -- Encoding
41327
41328function Utf7IMAPEncoder(options, codec) {
41329    this.iconv = codec.iconv;
41330    this.inBase64 = false;
41331    this.base64Accum = new Buffer(6);
41332    this.base64AccumIdx = 0;
41333}
41334
41335Utf7IMAPEncoder.prototype.write = function(str) {
41336    var inBase64 = this.inBase64,
41337        base64Accum = this.base64Accum,
41338        base64AccumIdx = this.base64AccumIdx,
41339        buf = new Buffer(str.length*5 + 10), bufIdx = 0;
41340
41341    for (var i = 0; i < str.length; i++) {
41342        var uChar = str.charCodeAt(i);
41343        if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.
41344            if (inBase64) {
41345                if (base64AccumIdx > 0) {
41346                    bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx);
41347                    base64AccumIdx = 0;
41348                }
41349
41350                buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.
41351                inBase64 = false;
41352            }
41353
41354            if (!inBase64) {
41355                buf[bufIdx++] = uChar; // Write direct character
41356
41357                if (uChar === andChar)  // Ampersand -> '&-'
41358                    buf[bufIdx++] = minusChar;
41359            }
41360
41361        } else { // Non-direct character
41362            if (!inBase64) {
41363                buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.
41364                inBase64 = true;
41365            }
41366            if (inBase64) {
41367                base64Accum[base64AccumIdx++] = uChar >> 8;
41368                base64Accum[base64AccumIdx++] = uChar & 0xFF;
41369
41370                if (base64AccumIdx == base64Accum.length) {
41371                    bufIdx += buf.write(base64Accum.toString('base64').replace(/\//g, ','), bufIdx);
41372                    base64AccumIdx = 0;
41373                }
41374            }
41375        }
41376    }
41377
41378    this.inBase64 = inBase64;
41379    this.base64AccumIdx = base64AccumIdx;
41380
41381    return buf.slice(0, bufIdx);
41382}
41383
41384Utf7IMAPEncoder.prototype.end = function() {
41385    var buf = new Buffer(10), bufIdx = 0;
41386    if (this.inBase64) {
41387        if (this.base64AccumIdx > 0) {
41388            bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx);
41389            this.base64AccumIdx = 0;
41390        }
41391
41392        buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.
41393        this.inBase64 = false;
41394    }
41395
41396    return buf.slice(0, bufIdx);
41397}
41398
41399
41400// -- Decoding
41401
41402function Utf7IMAPDecoder(options, codec) {
41403    this.iconv = codec.iconv;
41404    this.inBase64 = false;
41405    this.base64Accum = '';
41406}
41407
41408var base64IMAPChars = base64Chars.slice();
41409base64IMAPChars[','.charCodeAt(0)] = true;
41410
41411Utf7IMAPDecoder.prototype.write = function(buf) {
41412    var res = "", lastI = 0,
41413        inBase64 = this.inBase64,
41414        base64Accum = this.base64Accum;
41415
41416    // The decoder is more involved as we must handle chunks in stream.
41417    // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).
41418
41419    for (var i = 0; i < buf.length; i++) {
41420        if (!inBase64) { // We're in direct mode.
41421            // Write direct chars until '&'
41422            if (buf[i] == andChar) {
41423                res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars.
41424                lastI = i+1;
41425                inBase64 = true;
41426            }
41427        } else { // We decode base64.
41428            if (!base64IMAPChars[buf[i]]) { // Base64 ended.
41429                if (i == lastI && buf[i] == minusChar) { // "&-" -> "&"
41430                    res += "&";
41431                } else {
41432                    var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/');
41433                    res += this.iconv.decode(new Buffer(b64str, 'base64'), "utf16-be");
41434                }
41435
41436                if (buf[i] != minusChar) // Minus may be absorbed after base64.
41437                    i--;
41438
41439                lastI = i+1;
41440                inBase64 = false;
41441                base64Accum = '';
41442            }
41443        }
41444    }
41445
41446    if (!inBase64) {
41447        res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars.
41448    } else {
41449        var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/');
41450
41451        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.
41452        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.
41453        b64str = b64str.slice(0, canBeDecoded);
41454
41455        res += this.iconv.decode(new Buffer(b64str, 'base64'), "utf16-be");
41456    }
41457
41458    this.inBase64 = inBase64;
41459    this.base64Accum = base64Accum;
41460
41461    return res;
41462}
41463
41464Utf7IMAPDecoder.prototype.end = function() {
41465    var res = "";
41466    if (this.inBase64 && this.base64Accum.length > 0)
41467        res = this.iconv.decode(new Buffer(this.base64Accum, 'base64'), "utf16-be");
41468
41469    this.inBase64 = false;
41470    this.base64Accum = '';
41471    return res;
41472}
41473
41474
41475
41476
41477/***/ }),
41478/* 175 */
41479/***/ (function(module, exports, __webpack_require__) {
41480
41481"use strict";
41482
41483var Buffer = __webpack_require__(1).Buffer;
41484
41485// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that
41486// correspond to encoded bytes (if 128 - then lower half is ASCII).
41487
41488exports._sbcs = SBCSCodec;
41489function SBCSCodec(codecOptions, iconv) {
41490    if (!codecOptions)
41491        throw new Error("SBCS codec is called without the data.")
41492
41493    // Prepare char buffer for decoding.
41494    if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))
41495        throw new Error("Encoding '"+codecOptions.type+"' has incorrect 'chars' (must be of len 128 or 256)");
41496
41497    if (codecOptions.chars.length === 128) {
41498        var asciiString = "";
41499        for (var i = 0; i < 128; i++)
41500            asciiString += String.fromCharCode(i);
41501        codecOptions.chars = asciiString + codecOptions.chars;
41502    }
41503
41504    this.decodeBuf = new Buffer(codecOptions.chars, 'ucs2');
41505
41506    // Encoding buffer.
41507    var encodeBuf = new Buffer(65536);
41508    encodeBuf.fill(iconv.defaultCharSingleByte.charCodeAt(0));
41509
41510    for (var i = 0; i < codecOptions.chars.length; i++)
41511        encodeBuf[codecOptions.chars.charCodeAt(i)] = i;
41512
41513    this.encodeBuf = encodeBuf;
41514}
41515
41516SBCSCodec.prototype.encoder = SBCSEncoder;
41517SBCSCodec.prototype.decoder = SBCSDecoder;
41518
41519
41520function SBCSEncoder(options, codec) {
41521    this.encodeBuf = codec.encodeBuf;
41522}
41523
41524SBCSEncoder.prototype.write = function(str) {
41525    var buf = new Buffer(str.length);
41526    for (var i = 0; i < str.length; i++)
41527        buf[i] = this.encodeBuf[str.charCodeAt(i)];
41528
41529    return buf;
41530}
41531
41532SBCSEncoder.prototype.end = function() {
41533}
41534
41535
41536function SBCSDecoder(options, codec) {
41537    this.decodeBuf = codec.decodeBuf;
41538}
41539
41540SBCSDecoder.prototype.write = function(buf) {
41541    // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.
41542    var decodeBuf = this.decodeBuf;
41543    var newBuf = new Buffer(buf.length*2);
41544    var idx1 = 0, idx2 = 0;
41545    for (var i = 0; i < buf.length; i++) {
41546        idx1 = buf[i]*2; idx2 = i*2;
41547        newBuf[idx2] = decodeBuf[idx1];
41548        newBuf[idx2+1] = decodeBuf[idx1+1];
41549    }
41550    return newBuf.toString('ucs2');
41551}
41552
41553SBCSDecoder.prototype.end = function() {
41554}
41555
41556
41557/***/ }),
41558/* 176 */
41559/***/ (function(module, exports, __webpack_require__) {
41560
41561"use strict";
41562
41563
41564// Manually added data to be used by sbcs codec in addition to generated one.
41565
41566module.exports = {
41567    // Not supported by iconv, not sure why.
41568    "10029": "maccenteuro",
41569    "maccenteuro": {
41570        "type": "_sbcs",
41571        "chars": "ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ"
41572    },
41573
41574    "808": "cp808",
41575    "ibm808": "cp808",
41576    "cp808": {
41577        "type": "_sbcs",
41578        "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ "
41579    },
41580
41581    // Aliases of generated encodings.
41582    "ascii8bit": "ascii",
41583    "usascii": "ascii",
41584    "ansix34": "ascii",
41585    "ansix341968": "ascii",
41586    "ansix341986": "ascii",
41587    "csascii": "ascii",
41588    "cp367": "ascii",
41589    "ibm367": "ascii",
41590    "isoir6": "ascii",
41591    "iso646us": "ascii",
41592    "iso646irv": "ascii",
41593    "us": "ascii",
41594
41595    "latin1": "iso88591",
41596    "latin2": "iso88592",
41597    "latin3": "iso88593",
41598    "latin4": "iso88594",
41599    "latin5": "iso88599",
41600    "latin6": "iso885910",
41601    "latin7": "iso885913",
41602    "latin8": "iso885914",
41603    "latin9": "iso885915",
41604    "latin10": "iso885916",
41605
41606    "csisolatin1": "iso88591",
41607    "csisolatin2": "iso88592",
41608    "csisolatin3": "iso88593",
41609    "csisolatin4": "iso88594",
41610    "csisolatincyrillic": "iso88595",
41611    "csisolatinarabic": "iso88596",
41612    "csisolatingreek" : "iso88597",
41613    "csisolatinhebrew": "iso88598",
41614    "csisolatin5": "iso88599",
41615    "csisolatin6": "iso885910",
41616
41617    "l1": "iso88591",
41618    "l2": "iso88592",
41619    "l3": "iso88593",
41620    "l4": "iso88594",
41621    "l5": "iso88599",
41622    "l6": "iso885910",
41623    "l7": "iso885913",
41624    "l8": "iso885914",
41625    "l9": "iso885915",
41626    "l10": "iso885916",
41627
41628    "isoir14": "iso646jp",
41629    "isoir57": "iso646cn",
41630    "isoir100": "iso88591",
41631    "isoir101": "iso88592",
41632    "isoir109": "iso88593",
41633    "isoir110": "iso88594",
41634    "isoir144": "iso88595",
41635    "isoir127": "iso88596",
41636    "isoir126": "iso88597",
41637    "isoir138": "iso88598",
41638    "isoir148": "iso88599",
41639    "isoir157": "iso885910",
41640    "isoir166": "tis620",
41641    "isoir179": "iso885913",
41642    "isoir199": "iso885914",
41643    "isoir203": "iso885915",
41644    "isoir226": "iso885916",
41645
41646    "cp819": "iso88591",
41647    "ibm819": "iso88591",
41648
41649    "cyrillic": "iso88595",
41650
41651    "arabic": "iso88596",
41652    "arabic8": "iso88596",
41653    "ecma114": "iso88596",
41654    "asmo708": "iso88596",
41655
41656    "greek" : "iso88597",
41657    "greek8" : "iso88597",
41658    "ecma118" : "iso88597",
41659    "elot928" : "iso88597",
41660
41661    "hebrew": "iso88598",
41662    "hebrew8": "iso88598",
41663
41664    "turkish": "iso88599",
41665    "turkish8": "iso88599",
41666
41667    "thai": "iso885911",
41668    "thai8": "iso885911",
41669
41670    "celtic": "iso885914",
41671    "celtic8": "iso885914",
41672    "isoceltic": "iso885914",
41673
41674    "tis6200": "tis620",
41675    "tis62025291": "tis620",
41676    "tis62025330": "tis620",
41677
41678    "10000": "macroman",
41679    "10006": "macgreek",
41680    "10007": "maccyrillic",
41681    "10079": "maciceland",
41682    "10081": "macturkish",
41683
41684    "cspc8codepage437": "cp437",
41685    "cspc775baltic": "cp775",
41686    "cspc850multilingual": "cp850",
41687    "cspcp852": "cp852",
41688    "cspc862latinhebrew": "cp862",
41689    "cpgr": "cp869",
41690
41691    "msee": "cp1250",
41692    "mscyrl": "cp1251",
41693    "msansi": "cp1252",
41694    "msgreek": "cp1253",
41695    "msturk": "cp1254",
41696    "mshebr": "cp1255",
41697    "msarab": "cp1256",
41698    "winbaltrim": "cp1257",
41699
41700    "cp20866": "koi8r",
41701    "20866": "koi8r",
41702    "ibm878": "koi8r",
41703    "cskoi8r": "koi8r",
41704
41705    "cp21866": "koi8u",
41706    "21866": "koi8u",
41707    "ibm1168": "koi8u",
41708
41709    "strk10482002": "rk1048",
41710
41711    "tcvn5712": "tcvn",
41712    "tcvn57121": "tcvn",
41713
41714    "gb198880": "iso646cn",
41715    "cn": "iso646cn",
41716
41717    "csiso14jisc6220ro": "iso646jp",
41718    "jisc62201969ro": "iso646jp",
41719    "jp": "iso646jp",
41720
41721    "cshproman8": "hproman8",
41722    "r8": "hproman8",
41723    "roman8": "hproman8",
41724    "xroman8": "hproman8",
41725    "ibm1051": "hproman8",
41726
41727    "mac": "macintosh",
41728    "csmacintosh": "macintosh",
41729};
41730
41731
41732
41733/***/ }),
41734/* 177 */
41735/***/ (function(module, exports, __webpack_require__) {
41736
41737"use strict";
41738
41739
41740// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.
41741module.exports = {
41742  "437": "cp437",
41743  "737": "cp737",
41744  "775": "cp775",
41745  "850": "cp850",
41746  "852": "cp852",
41747  "855": "cp855",
41748  "856": "cp856",
41749  "857": "cp857",
41750  "858": "cp858",
41751  "860": "cp860",
41752  "861": "cp861",
41753  "862": "cp862",
41754  "863": "cp863",
41755  "864": "cp864",
41756  "865": "cp865",
41757  "866": "cp866",
41758  "869": "cp869",
41759  "874": "windows874",
41760  "922": "cp922",
41761  "1046": "cp1046",
41762  "1124": "cp1124",
41763  "1125": "cp1125",
41764  "1129": "cp1129",
41765  "1133": "cp1133",
41766  "1161": "cp1161",
41767  "1162": "cp1162",
41768  "1163": "cp1163",
41769  "1250": "windows1250",
41770  "1251": "windows1251",
41771  "1252": "windows1252",
41772  "1253": "windows1253",
41773  "1254": "windows1254",
41774  "1255": "windows1255",
41775  "1256": "windows1256",
41776  "1257": "windows1257",
41777  "1258": "windows1258",
41778  "28591": "iso88591",
41779  "28592": "iso88592",
41780  "28593": "iso88593",
41781  "28594": "iso88594",
41782  "28595": "iso88595",
41783  "28596": "iso88596",
41784  "28597": "iso88597",
41785  "28598": "iso88598",
41786  "28599": "iso88599",
41787  "28600": "iso885910",
41788  "28601": "iso885911",
41789  "28603": "iso885913",
41790  "28604": "iso885914",
41791  "28605": "iso885915",
41792  "28606": "iso885916",
41793  "windows874": {
41794    "type": "_sbcs",
41795    "chars": "€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟ
41795ภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
41796  },
41797  "win874": "windows874",
41798  "cp874": "windows874",
41799  "windows1250": {
41800    "type": "_sbcs",
41801    "chars": "€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"
41802  },
41803  "win1250": "windows1250",
41804  "cp1250": "windows1250",
41805  "windows1251": {
41806    "type": "_sbcs",
41807    "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
41808  },
41809  "win1251": "windows1251",
41810  "cp1251": "windows1251",
41811  "windows1252": {
41812    "type": "_sbcs",
41813    "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
41814  },
41815  "win1252": "windows1252",
41816  "cp1252": "windows1252",
41817  "windows1253": {
41818    "type": "_sbcs",
41819    "chars": "€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"
41820  },
41821  "win1253": "windows1253",
41822  "cp1253": "windows1253",
41823  "windows1254": {
41824    "type": "_sbcs",
41825    "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"
41826  },
41827  "win1254": "windows1254",
41828  "cp1254": "windows1254",
41829  "windows1255": {
41830    "type": "_sbcs",
41831    "chars": "€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�"
41832  },
41833  "win1255": "windows1255",
41834  "cp1255": "windows1255",
41835  "windows1256": {
41836    "type": "_sbcs",
41837    "chars": "€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے"
41838  },
41839  "win1256": "windows1256",
41840  "cp1256": "windows1256",
41841  "windows1257": {
41842    "type": "_sbcs",
41843    "chars": "€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙"
41844  },
41845  "win1257": "windows1257",
41846  "cp1257": "windows1257",
41847  "windows1258": {
41848    "type": "_sbcs",
41849    "chars": "€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"
41850  },
41851  "win1258": "windows1258",
41852  "cp1258": "windows1258",
41853  "iso88591": {
41854    "type": "_sbcs",
41855    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øù
41855úûüýþÿ"
41856  },
41857  "cp28591": "iso88591",
41858  "iso88592": {
41859    "type": "_sbcs",
41860    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"
41861  },
41862  "cp28592": "iso88592",
41863  "iso88593": {
41864    "type": "_sbcs",
41865    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ħ˘£¤�Ĥ§¨İŞĞĴ­�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙"
41866  },
41867  "cp28593": "iso88593",
41868  "iso88594": {
41869    "type": "_sbcs",
41870    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙"
41871  },
41872  "cp28594": "iso88594",
41873  "iso88595": {
41874    "type": "_sbcs",
41875    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ"
41876  },
41877  "cp28595": "iso88595",
41878  "iso88596": {
41879    "type": "_sbcs",
41880    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������"
41881  },
41882  "cp28596": "iso88596",
41883  "iso88597": {
41884    "type": "_sbcs",
41885    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"
41886  },
41887  "cp28597": "iso88597",
41888  "iso88598": {
41889    "type": "_sbcs",
41890    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�"
41891  },
41892  "cp28598": "iso88598",
41893  "iso88599": {
41894    "type": "_sbcs",
41895    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"
41896  },
41897  "cp28599": "iso88599",
41898  "iso885910": {
41899    "type": "_sbcs",
41900    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ"
41901  },
41902  "cp28600": "iso885910",
41903  "iso885911": {
41904    "type": "_sbcs",
41905    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
41906  },
41907  "cp28601": "iso885911",
41908  "iso885913": {
41909    "type": "_sbcs",
41910    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’"
41911  },
41912  "cp28603": "iso885913",
41913  "iso885914": {
41914    "type": "_sbcs",
41915    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïÅ
41915µÃ±Ã²Ã³Ã´ÃµÃ¶á¹«Ã¸Ã¹ÃºÃ»Ã¼Ã½Å·Ã¿"
41916  },
41917  "cp28604": "iso885914",
41918  "iso885915": {
41919    "type": "_sbcs",
41920    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
41921  },
41922  "cp28605": "iso885915",
41923  "iso885916": {
41924    "type": "_sbcs",
41925    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄąŁ€„Чš©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ"
41926  },
41927  "cp28606": "iso885916",
41928  "cp437": {
41929    "type": "_sbcs",
41930    "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
41931  },
41932  "ibm437": "cp437",
41933  "csibm437": "cp437",
41934  "cp737": {
41935    "type": "_sbcs",
41936    "chars": "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ "
41937  },
41938  "ibm737": "cp737",
41939  "csibm737": "cp737",
41940  "cp775": {
41941    "type": "_sbcs",
41942    "chars": "ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ "
41943  },
41944  "ibm775": "cp775",
41945  "csibm775": "cp775",
41946  "cp850": {
41947    "type": "_sbcs",
41948    "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ "
41949  },
41950  "ibm850": "cp850",
41951  "csibm850": "cp850",
41952  "cp852": {
41953    "type": "_sbcs",
41954    "chars": "ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ "
41955  },
41956  "ibm852": "cp852",
41957  "csibm852": "cp852",
41958  "cp855": {
41959    "type": "_sbcs",
41960    "chars": "ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ "
41961  },
41962  "ibm855": "cp855",
41963  "csibm855": "cp855",
41964  "cp856": {
41965    "type": "_sbcs",
41966    "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ "
41967  },
41968  "ibm856": "cp856",
41969  "csibm856": "cp856",
41970  "cp857": {
41971    "type": "_sbcs",
41972    "chars": "ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ "
41973  },
41974  "ibm857": "cp857",
41975  "csibm857": "cp857",
41976  "cp858": {
41977    "type": "_sbcs",
41978    "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ "
41979  },
41980  "ibm858": "cp858",
41981  "csibm858": "cp858",
41982  "cp860": {
41983    "type": "_sbcs",
41984    "chars": "ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
41985  },
41986  "ibm860": "cp860",
41987  "csibm860": "cp860",
41988  "cp861": {
41989    "type": "_sbcs",
41990    "chars": "ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
41991  },
41992  "ibm861": "cp861",
41993  "csibm861": "cp861",
41994  "cp862": {
41995    "type": "_sbcs",
41996    "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
41997  },
41998  "ibm862": "cp862",
41999  "csibm862": "cp862",
42000  "cp863": {
42001    "type": "_sbcs",
42002    "chars": "ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
42003  },
42004  "ibm863": "cp863",
42005  "csibm863": "cp863",
42006  "cp864": {
42007    "type": "_sbcs",
42008    "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$Ùª&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~�°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�"
42009  },
42010  "ibm864": "cp864",
42011  "csibm864": "cp864",
42012  "cp865": {
42013    "type": "_sbcs",
42014    "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
42015  },
42016  "ibm865": "cp865",
42017  "csibm865": "cp865",
42018  "cp866": {
42019    "type": "_sbcs",
42020    "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ "
42021  },
42022  "ibm866": "cp866",
42023  "csibm866": "cp866",
42024  "cp869": {
42025    "type": "_sbcs",
42026    "chars": "������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ "
42027  },
42028  "ibm869": "cp869",
42029  "csibm869": "cp869",
42030  "cp922": {
42031    "type": "_sbcs",
42032    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øù
42032úûüýžÿ"
42033  },
42034  "ibm922": "cp922",
42035  "csibm922": "cp922",
42036  "cp1046": {
42037    "type": "_sbcs",
42038    "chars": "ﺈ×÷ﹱˆ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�"
42039  },
42040  "ibm1046": "cp1046",
42041  "csibm1046": "cp1046",
42042  "cp1124": {
42043    "type": "_sbcs",
42044    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ"
42045  },
42046  "ibm1124": "cp1124",
42047  "csibm1124": "cp1124",
42048  "cp1125": {
42049    "type": "_sbcs",
42050    "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ "
42051  },
42052  "ibm1125": "cp1125",
42053  "csibm1125": "cp1125",
42054  "cp1129": {
42055    "type": "_sbcs",
42056    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"
42057  },
42058  "ibm1129": "cp1129",
42059  "csibm1129": "cp1129",
42060  "cp1133": {
42061    "type": "_sbcs",
42062    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�"
42063  },
42064  "ibm1133": "cp1133",
42065  "csibm1133": "cp1133",
42066  "cp1161": {
42067    "type": "_sbcs",
42068    "chars": "��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ "
42069  },
42070  "ibm1161": "cp1161",
42071  "csibm1161": "cp1161",
42072  "cp1162": {
42073    "type": "_sbcs",
42074    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
42075  },
42076  "ibm1162": "cp1162",
42077  "csibm1162": "cp1162",
42078  "cp1163": {
42079    "type": "_sbcs",
42080    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"
42081  },
42082  "ibm1163": "cp1163",
42083  "csibm1163": "cp1163",
42084  "maccroatian": {
42085    "type": "_sbcs",
42086    "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ"
42087  },
42088  "maccyrillic": {
42089    "type": "_sbcs",
42090    "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"
42091  },
42092  "macgreek": {
42093    "type": "_sbcs",
42094    "chars": "Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�"
42095  },
42096  "maciceland": {
42097    "type": "_sbcs",
42098    "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
42099  },
42100  "macroman": {
42101    "type": "_sbcs",
42102    "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
42103  },
42104  "macromania": {
42105    "type": "_sbcs",
42106    "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
42107  },
42108  "macthai": {
42109    "type": "_sbcs",
42110    "chars": "«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟ
42110ภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����"
42111  },
42112  "macturkish": {
42113    "type": "_sbcs",
42114    "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ"
42115  },
42116  "macukraine": {
42117    "type": "_sbcs",
42118    "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"
42119  },
42120  "koi8r": {
42121    "type": "_sbcs",
42122    "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
42123  },
42124  "koi8u": {
42125    "type": "_sbcs",
42126    "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
42127  },
42128  "koi8ru": {
42129    "type": "_sbcs",
42130    "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
42131  },
42132  "koi8t": {
42133    "type": "_sbcs",
42134    "chars": "қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
42135  },
42136  "armscii8": {
42137    "type": "_sbcs",
42138    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�"
42139  },
42140  "rk1048": {
42141    "type": "_sbcs",
42142    "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ Ұұ
42142Ә¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
42143  },
42144  "tcvn": {
42145    "type": "_sbcs",
42146    "chars": "\u0000ÚỤ\u0003ỪỬỮ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010ỨỰỲỶỸÝỴ\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~�ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ"
42147  },
42148  "georgianacademy": {
42149    "type": "_sbcs",
42150    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
42151  },
42152  "georgianps": {
42153    "type": "_sbcs",
42154    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
42155  },
42156  "pt154": {
42157    "type": "_sbcs",
42158    "chars": "ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
42159  },
42160  "viscii": {
42161    "type": "_sbcs",
42162    "chars": "\u0000\u0001Ẳ\u0003\u0004ẴẪ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013á»¶\u0015\u0016\u0017\u0018Ỹ\u001a\u001b\u001c\u001dá»´\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~�ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ"
42163  },
42164  "iso646cn": {
42165    "type": "_sbcs",
42166    "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#Â¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾���������������������������������������������������������������������������������������������������������������������������������"
42167  },
42168  "iso646jp": {
42169    "type": "_sbcs",
42170    "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[Â¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾���������������������������������������������������������������������������������������������������������������������������������"
42171  },
42172  "hproman8": {
42173    "type": "_sbcs",
42174    "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉ
vendor: 22,942 bytes, lines 42174-42760
42174ïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�"
42175  },
42176  "macintosh": {
42177    "type": "_sbcs",
42178    "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
42179  },
42180  "ascii": {
42181    "type": "_sbcs",
42182    "chars": "��������������������������������������������������������������������������������������������������������������������������������"
42183  },
42184  "tis620": {
42185    "type": "_sbcs",
42186    "chars": "���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
42187  }
42188}
42189
42190/***/ }),
42191/* 178 */
42192/***/ (function(module, exports, __webpack_require__) {
42193
42194"use strict";
42195
42196var Buffer = __webpack_require__(1).Buffer;
42197
42198// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.
42199// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.
42200// To save memory and loading time, we read table files only when requested.
42201
42202exports._dbcs = DBCSCodec;
42203
42204var UNASSIGNED = -1,
42205    GB18030_CODE = -2,
42206    SEQ_START  = -10,
42207    NODE_START = -1000,
42208    UNASSIGNED_NODE = new Array(0x100),
42209    DEF_CHAR = -1;
42210
42211for (var i = 0; i < 0x100; i++)
42212    UNASSIGNED_NODE[i] = UNASSIGNED;
42213
42214
42215// Class DBCSCodec reads and initializes mapping tables.
42216function DBCSCodec(codecOptions, iconv) {
42217    this.encodingName = codecOptions.encodingName;
42218    if (!codecOptions)
42219        throw new Error("DBCS codec is called without the data.")
42220    if (!codecOptions.table)
42221        throw new Error("Encoding '" + this.encodingName + "' has no data.");
42222
42223    // Load tables.
42224    var mappingTable = codecOptions.table();
42225
42226
42227    // Decode tables: MBCS -> Unicode.
42228
42229    // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.
42230    // Trie root is decodeTables[0].
42231    // Values: >=  0 -> unicode character code. can be > 0xFFFF
42232    //         == UNASSIGNED -> unknown/unassigned sequence.
42233    //         == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.
42234    //         <= NODE_START -> index of the next node in our trie to process next byte.
42235    //         <= SEQ_START  -> index of the start of a character code sequence, in decodeTableSeq.
42236    this.decodeTables = [];
42237    this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.
42238
42239    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here.
42240    this.decodeTableSeq = [];
42241
42242    // Actual mapping tables consist of chunks. Use them to fill up decode tables.
42243    for (var i = 0; i < mappingTable.length; i++)
42244        this._addDecodeChunk(mappingTable[i]);
42245
42246    this.defaultCharUnicode = iconv.defaultCharUnicode;
42247
42248
42249    // Encode tables: Unicode -> DBCS.
42250
42251    // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.
42252    // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.
42253    // Values: >=  0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).
42254    //         == UNASSIGNED -> no conversion found. Output a default char.
42255    //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.
42256    this.encodeTable = [];
42257
42258    // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of
42259    // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key
42260    // means end of sequence (needed when one sequence is a strict subsequence of another).
42261    // Objects are kept separately from encodeTable to increase performance.
42262    this.encodeTableSeq = [];
42263
42264    // Some chars can be decoded, but need not be encoded.
42265    var skipEncodeChars = {};
42266    if (codecOptions.encodeSkipVals)
42267        for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {
42268            var val = codecOptions.encodeSkipVals[i];
42269            if (typeof val === 'number')
42270                skipEncodeChars[val] = true;
42271            else
42272                for (var j = val.from; j <= val.to; j++)
42273                    skipEncodeChars[j] = true;
42274        }
42275
42276    // Use decode trie to recursively fill out encode tables.
42277    this._fillEncodeTable(0, 0, skipEncodeChars);
42278
42279    // Add more encoding pairs when needed.
42280    if (codecOptions.encodeAdd) {
42281        for (var uChar in codecOptions.encodeAdd)
42282            if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))
42283                this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);
42284    }
42285
42286    this.defCharSB  = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];
42287    if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];
42288    if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0);
42289
42290
42291    // Load & create GB18030 tables when needed.
42292    if (typeof codecOptions.gb18030 === 'function') {
42293        this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.
42294
42295        // Add GB18030 decode tables.
42296        var thirdByteNodeIdx = this.decodeTables.length;
42297        var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0);
42298
42299        var fourthByteNodeIdx = this.decodeTables.length;
42300        var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0);
42301
42302        for (var i = 0x81; i <= 0xFE; i++) {
42303            var secondByteNodeIdx = NODE_START - this.decodeTables[0][i];
42304            var secondByteNode = this.decodeTables[secondByteNodeIdx];
42305            for (var j = 0x30; j <= 0x39; j++)
42306                secondByteNode[j] = NODE_START - thirdByteNodeIdx;
42307        }
42308        for (var i = 0x81; i <= 0xFE; i++)
42309            thirdByteNode[i] = NODE_START - fourthByteNodeIdx;
42310        for (var i = 0x30; i <= 0x39; i++)
42311            fourthByteNode[i] = GB18030_CODE
42312    }
42313}
42314
42315DBCSCodec.prototype.encoder = DBCSEncoder;
42316DBCSCodec.prototype.decoder = DBCSDecoder;
42317
42318// Decoder helpers
42319DBCSCodec.prototype._getDecodeTrieNode = function(addr) {
42320    var bytes = [];
42321    for (; addr > 0; addr >>= 8)
42322        bytes.push(addr & 0xFF);
42323    if (bytes.length == 0)
42324        bytes.push(0);
42325
42326    var node = this.decodeTables[0];
42327    for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.
42328        var val = node[bytes[i]];
42329
42330        if (val == UNASSIGNED) { // Create new node.
42331            node[bytes[i]] = NODE_START - this.decodeTables.length;
42332            this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));
42333        }
42334        else if (val <= NODE_START) { // Existing node.
42335            node = this.decodeTables[NODE_START - val];
42336        }
42337        else
42338            throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16));
42339    }
42340    return node;
42341}
42342
42343
42344DBCSCodec.prototype._addDecodeChunk = function(chunk) {
42345    // First element of chunk is the hex mbcs code where we start.
42346    var curAddr = parseInt(chunk[0], 16);
42347
42348    // Choose the decoding node where we'll write our chars.
42349    var writeTable = this._getDecodeTrieNode(curAddr);
42350    curAddr = curAddr & 0xFF;
42351
42352    // Write all other elements of the chunk to the table.
42353    for (var k = 1; k < chunk.length; k++) {
42354        var part = chunk[k];
42355        if (typeof part === "string") { // String, write as-is.
42356            for (var l = 0; l < part.length;) {
42357                var code = part.charCodeAt(l++);
42358                if (0xD800 <= code && code < 0xDC00) { // Decode surrogate
42359                    var codeTrail = part.charCodeAt(l++);
42360                    if (0xDC00 <= codeTrail && codeTrail < 0xE000)
42361                        writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);
42362                    else
42363                        throw new Error("Incorrect surrogate pair in "  + this.encodingName + " at chunk " + chunk[0]);
42364                }
42365                else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)
42366                    var len = 0xFFF - code + 2;
42367                    var seq = [];
42368                    for (var m = 0; m < len; m++)
42369                        seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.
42370
42371                    writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;
42372                    this.decodeTableSeq.push(seq);
42373                }
42374                else
42375                    writeTable[curAddr++] = code; // Basic char
42376            }
42377        }
42378        else if (typeof part === "number") { // Integer, meaning increasing sequence starting with prev character.
42379            var charCode = writeTable[curAddr - 1] + 1;
42380            for (var l = 0; l < part; l++)
42381                writeTable[curAddr++] = charCode++;
42382        }
42383        else
42384            throw new Error("Incorrect type '" + typeof part + "' given in "  + this.encodingName + " at chunk " + chunk[0]);
42385    }
42386    if (curAddr > 0xFF)
42387        throw new Error("Incorrect chunk in "  + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr);
42388}
42389
42390// Encoder helpers
42391DBCSCodec.prototype._getEncodeBucket = function(uCode) {
42392    var high = uCode >> 8; // This could be > 0xFF because of astral characters.
42393    if (this.encodeTable[high] === undefined)
42394        this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.
42395    return this.encodeTable[high];
42396}
42397
42398DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {
42399    var bucket = this._getEncodeBucket(uCode);
42400    var low = uCode & 0xFF;
42401    if (bucket[low] <= SEQ_START)
42402        this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.
42403    else if (bucket[low] == UNASSIGNED)
42404        bucket[low] = dbcsCode;
42405}
42406
42407DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {
42408
42409    // Get the root of character tree according to first character of the sequence.
42410    var uCode = seq[0];
42411    var bucket = this._getEncodeBucket(uCode);
42412    var low = uCode & 0xFF;
42413
42414    var node;
42415    if (bucket[low] <= SEQ_START) {
42416        // There's already a sequence with  - use it.
42417        node = this.encodeTableSeq[SEQ_START-bucket[low]];
42418    }
42419    else {
42420        // There was no sequence object - allocate a new one.
42421        node = {};
42422        if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.
42423        bucket[low] = SEQ_START - this.encodeTableSeq.length;
42424        this.encodeTableSeq.push(node);
42425    }
42426
42427    // Traverse the character tree, allocating new nodes as needed.
42428    for (var j = 1; j < seq.length-1; j++) {
42429        var oldVal = node[uCode];
42430        if (typeof oldVal === 'object')
42431            node = oldVal;
42432        else {
42433            node = node[uCode] = {}
42434            if (oldVal !== undefined)
42435                node[DEF_CHAR] = oldVal
42436        }
42437    }
42438
42439    // Set the leaf to given dbcsCode.
42440    uCode = seq[seq.length-1];
42441    node[uCode] = dbcsCode;
42442}
42443
42444DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {
42445    var node = this.decodeTables[nodeIdx];
42446    for (var i = 0; i < 0x100; i++) {
42447        var uCode = node[i];
42448        var mbCode = prefix + i;
42449        if (skipEncodeChars[mbCode])
42450            continue;
42451
42452        if (uCode >= 0)
42453            this._setEncodeChar(uCode, mbCode);
42454        else if (uCode <= NODE_START)
42455            this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars);
42456        else if (uCode <= SEQ_START)
42457            this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);
42458    }
42459}
42460
42461
42462
42463// == Encoder ==================================================================
42464
42465function DBCSEncoder(options, codec) {
42466    // Encoder state
42467    this.leadSurrogate = -1;
42468    this.seqObj = undefined;
42469
42470    // Static data
42471    this.encodeTable = codec.encodeTable;
42472    this.encodeTableSeq = codec.encodeTableSeq;
42473    this.defaultCharSingleByte = codec.defCharSB;
42474    this.gb18030 = codec.gb18030;
42475}
42476
42477DBCSEncoder.prototype.write = function(str) {
42478    var newBuf = new Buffer(str.length * (this.gb18030 ? 4 : 3)),
42479        leadSurrogate = this.leadSurrogate,
42480        seqObj = this.seqObj, nextChar = -1,
42481        i = 0, j = 0;
42482
42483    while (true) {
42484        // 0. Get next character.
42485        if (nextChar === -1) {
42486            if (i == str.length) break;
42487            var uCode = str.charCodeAt(i++);
42488        }
42489        else {
42490            var uCode = nextChar;
42491            nextChar = -1;
42492        }
42493
42494        // 1. Handle surrogates.
42495        if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.
42496            if (uCode < 0xDC00) { // We've got lead surrogate.
42497                if (leadSurrogate === -1) {
42498                    leadSurrogate = uCode;
42499                    continue;
42500                } else {
42501                    leadSurrogate = uCode;
42502                    // Double lead surrogate found.
42503                    uCode = UNASSIGNED;
42504                }
42505            } else { // We've got trail surrogate.
42506                if (leadSurrogate !== -1) {
42507                    uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);
42508                    leadSurrogate = -1;
42509                } else {
42510                    // Incomplete surrogate pair - only trail surrogate found.
42511                    uCode = UNASSIGNED;
42512                }
42513
42514            }
42515        }
42516        else if (leadSurrogate !== -1) {
42517            // Incomplete surrogate pair - only lead surrogate found.
42518            nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.
42519            leadSurrogate = -1;
42520        }
42521
42522        // 2. Convert uCode character.
42523        var dbcsCode = UNASSIGNED;
42524        if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence
42525            var resCode = seqObj[uCode];
42526            if (typeof resCode === 'object') { // Sequence continues.
42527                seqObj = resCode;
42528                continue;
42529
42530            } else if (typeof resCode == 'number') { // Sequence finished. Write it.
42531                dbcsCode = resCode;
42532
42533            } else if (resCode == undefined) { // Current character is not part of the sequence.
42534
42535                // Try default character for this sequence
42536                resCode = seqObj[DEF_CHAR];
42537                if (resCode !== undefined) {
42538                    dbcsCode = resCode; // Found. Write it.
42539                    nextChar = uCode; // Current character will be written too in the next iteration.
42540
42541                } else {
42542                    // TODO: What if we have no default? (resCode == undefined)
42543                    // Then, we should write first char of the sequence as-is and try the rest recursively.
42544                    // Didn't do it for now because no encoding has this situation yet.
42545                    // Currently, just skip the sequence and write current char.
42546                }
42547            }
42548            seqObj = undefined;
42549        }
42550        else if (uCode >= 0) {  // Regular character
42551            var subtable = this.encodeTable[uCode >> 8];
42552            if (subtable !== undefined)
42553                dbcsCode = subtable[uCode & 0xFF];
42554
42555            if (dbcsCode <= SEQ_START) { // Sequence start
42556                seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];
42557                continue;
42558            }
42559
42560            if (dbcsCode == UNASSIGNED && this.gb18030) {
42561                // Use GB18030 algorithm to find character(s) to write.
42562                var idx = findIdx(this.gb18030.uChars, uCode);
42563                if (idx != -1) {
42564                    var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);
42565                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;
42566                    newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;
42567                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;
42568                    newBuf[j++] = 0x30 + dbcsCode;
42569                    continue;
42570                }
42571            }
42572        }
42573
42574        // 3. Write dbcsCode character.
42575        if (dbcsCode === UNASSIGNED)
42576            dbcsCode = this.defaultCharSingleByte;
42577
42578        if (dbcsCode < 0x100) {
42579            newBuf[j++] = dbcsCode;
42580        }
42581        else if (dbcsCode < 0x10000) {
42582            newBuf[j++] = dbcsCode >> 8;   // high byte
42583            newBuf[j++] = dbcsCode & 0xFF; // low byte
42584        }
42585        else {
42586            newBuf[j++] = dbcsCode >> 16;
42587            newBuf[j++] = (dbcsCode >> 8) & 0xFF;
42588            newBuf[j++] = dbcsCode & 0xFF;
42589        }
42590    }
42591
42592    this.seqObj = seqObj;
42593    this.leadSurrogate = leadSurrogate;
42594    return newBuf.slice(0, j);
42595}
42596
42597DBCSEncoder.prototype.end = function() {
42598    if (this.leadSurrogate === -1 && this.seqObj === undefined)
42599        return; // All clean. Most often case.
42600
42601    var newBuf = new Buffer(10), j = 0;
42602
42603    if (this.seqObj) { // We're in the sequence.
42604        var dbcsCode = this.seqObj[DEF_CHAR];
42605        if (dbcsCode !== undefined) { // Write beginning of the sequence.
42606            if (dbcsCode < 0x100) {
42607                newBuf[j++] = dbcsCode;
42608            }
42609            else {
42610                newBuf[j++] = dbcsCode >> 8;   // high byte
42611                newBuf[j++] = dbcsCode & 0xFF; // low byte
42612            }
42613        } else {
42614            // See todo above.
42615        }
42616        this.seqObj = undefined;
42617    }
42618
42619    if (this.leadSurrogate !== -1) {
42620        // Incomplete surrogate pair - only lead surrogate found.
42621        newBuf[j++] = this.defaultCharSingleByte;
42622        this.leadSurrogate = -1;
42623    }
42624
42625    return newBuf.slice(0, j);
42626}
42627
42628// Export for testing
42629DBCSEncoder.prototype.findIdx = findIdx;
42630
42631
42632// == Decoder ==================================================================
42633
42634function DBCSDecoder(options, codec) {
42635    // Decoder state
42636    this.nodeIdx = 0;
42637    this.prevBuf = new Buffer(0);
42638
42639    // Static data
42640    this.decodeTables = codec.decodeTables;
42641    this.decodeTableSeq = codec.decodeTableSeq;
42642    this.defaultCharUnicode = codec.defaultCharUnicode;
42643    this.gb18030 = codec.gb18030;
42644}
42645
42646DBCSDecoder.prototype.write = function(buf) {
42647    var newBuf = new Buffer(buf.length*2),
42648        nodeIdx = this.nodeIdx,
42649        prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length,
42650        seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence.
42651        uCode;
42652
42653    if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later.
42654        prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);
42655
42656    for (var i = 0, j = 0; i < buf.length; i++) {
42657        var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset];
42658
42659        // Lookup in current trie node.
42660        var uCode = this.decodeTables[nodeIdx][curByte];
42661
42662        if (uCode >= 0) {
42663            // Normal character, just use it.
42664        }
42665        else if (uCode === UNASSIGNED) { // Unknown char.
42666            // TODO: Callback with seq.
42667            //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);
42668            i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle).
42669            uCode = this.defaultCharUnicode.charCodeAt(0);
42670        }
42671        else if (uCode === GB18030_CODE) {
42672            var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);
42673            var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30);
42674            var idx = findIdx(this.gb18030.gbChars, ptr);
42675            uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];
42676        }
42677        else if (uCode <= NODE_START) { // Go to next trie node.
42678            nodeIdx = NODE_START - uCode;
42679            continue;
42680        }
42681        else if (uCode <= SEQ_START) { // Output a sequence of chars.
42682            var seq = this.decodeTableSeq[SEQ_START - uCode];
42683            for (var k = 0; k < seq.length - 1; k++) {
42684                uCode = seq[k];
42685                newBuf[j++] = uCode & 0xFF;
42686                newBuf[j++] = uCode >> 8;
42687            }
42688            uCode = seq[seq.length-1];
42689        }
42690        else
42691            throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte);
42692
42693        // Write the character to buffer, handling higher planes using surrogate pair.
42694        if (uCode > 0xFFFF) {
42695            uCode -= 0x10000;
42696            var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);
42697            newBuf[j++] = uCodeLead & 0xFF;
42698            newBuf[j++] = uCodeLead >> 8;
42699
42700            uCode = 0xDC00 + uCode % 0x400;
42701        }
42702        newBuf[j++] = uCode & 0xFF;
42703        newBuf[j++] = uCode >> 8;
42704
42705        // Reset trie node.
42706        nodeIdx = 0; seqStart = i+1;
42707    }
42708
42709    this.nodeIdx = nodeIdx;
42710    this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset);
42711    return newBuf.slice(0, j).toString('ucs2');
42712}
42713
42714DBCSDecoder.prototype.end = function() {
42715    var ret = '';
42716
42717    // Try to parse all remaining chars.
42718    while (this.prevBuf.length > 0) {
42719        // Skip 1 character in the buffer.
42720        ret += this.defaultCharUnicode;
42721        var buf = this.prevBuf.slice(1);
42722
42723        // Parse remaining as usual.
42724        this.prevBuf = new Buffer(0);
42725        this.nodeIdx = 0;
42726        if (buf.length > 0)
42727            ret += this.write(buf);
42728    }
42729
42730    this.nodeIdx = 0;
42731    return ret;
42732}
42733
42734// Binary search for GB18030. Returns largest i such that table[i] <= val.
42735function findIdx(table, val) {
42736    if (table[0] > val)
42737        return -1;
42738
42739    var l = 0, r = table.length;
42740    while (l < r-1) { // always table[l] <= val < table[r]
42741        var mid = l + Math.floor((r-l+1)/2);
42742        if (table[mid] <= val)
42743            l = mid;
42744        else
42745            r = mid;
42746    }
42747    return l;
42748}
42749
42750
42751
42752/***/ }),
42753/* 179 */
42754/***/ (function(module, exports, __webpack_require__) {
42755
42756"use strict";
42757
42758
42759// Description of supported double byte encodings and aliases.
42760// Tables are not require()-d until they are needed to speed up library load.
42761// require()-s are direct to support Browserify.
42762
42763module.exports = {
42764
42765    // == Japanese/ShiftJIS ====================================================
42766    // All japanese encodings are based on JIS X set of standards:
42767    // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.
42768    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes.
42769    //              Has several variations in 1978, 1983, 1990 and 1997.
42770    // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.
42771    // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.
42772    //              2 planes, first is superset of 0208, second - revised 0212.
42773    //              Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)
42774
42775    // Byte encodings are:
42776    //  * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte
42777    //               encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.
42778    //               Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.
42779    //  * EUC-JP:    Up to 3 bytes per character. Used mostly on *nixes.
42780    //               0x00-0x7F       - lower part of 0201
42781    //               0x8E, 0xA1-0xDF - upper part of 0201
42782    //               (0xA1-0xFE)x2   - 0208 plane (94x94).
42783    //               0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).
42784    //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.
42785    //               Used as-is in ISO2022 family.
42786    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII,
42787    //                0201-1976 Roman, 0208-1978, 0208-1983.
42788    //  * ISO2022-JP-1: Adds esc seq for 0212-1990.
42789    //  * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.
42790    //  * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.
42791    //  * ISO2022-JP-2004: Adds 0213-2004 Plane 1.
42792    //
42793    // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.
42794    //
42795    // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html
42796
42797    'shiftjis': {
42798        type: '_dbcs',
42799        table: function() { return __webpack_require__(180) },
42800        encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E},
42801        encodeSkipVals: [{from: 0xED40, to: 0xF940}],
42802    },
42803    'csshiftjis': 'shiftjis',
42804    'mskanji': 'shiftjis',
42805    'sjis': 'shiftjis',
42806    'windows31j': 'shiftjis',
42807    'ms31j': 'shiftjis',
42808    'xsjis': 'shiftjis',
42809    'windows932': 'shiftjis',
42810    'ms932': 'shiftjis',
42811    '932': 'shiftjis',
42812    'cp932': 'shiftjis',
42813
42814    'eucjp': {
42815        type: '_dbcs',
42816        table: function() { return __webpack_require__(181) },
42817        encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E},
42818    },
42819
42820    // TODO: KDDI extension to Shift_JIS
42821    // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.
42822    // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.
42823
42824
42825    // == Chinese/GBK ==========================================================
42826    // http://en.wikipedia.org/wiki/GBK
42827    // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder
42828
42829    // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936
42830    'gb2312': 'cp936',
42831    'gb231280': 'cp936',
42832    'gb23121980': 'cp936',
42833    'csgb2312': 'cp936',
42834    'csiso58gb231280': 'cp936',
42835    'euccn': 'cp936',
42836
42837    // Microsoft's CP936 is a subset and approximation of GBK.
42838    'windows936': 'cp936',
42839    'ms936': 'cp936',
42840    '936': 'cp936',
42841    'cp936': {
42842        type: '_dbcs',
42843        table: function() { return __webpack_require__(53) },
42844    },
42845
42846    // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.
42847    'gbk': {
42848        type: '_dbcs',
42849        table: function() { return __webpack_require__(53).concat(__webpack_require__(91)) },
42850    },
42851    'xgbk': 'gbk',
42852    'isoir58': 'gbk',
42853
42854    // GB18030 is an algorithmic extension of GBK.
42855    // Main source: https://www.w3.org/TR/encoding/#gbk-encoder
42856    // http://icu-project.org/docs/papers/gb18030.html
42857    // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml
42858    // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0
42859    'gb18030': {
42860        type: '_dbcs',
42861        table: function() { return __webpack_require__(53).concat(__webpack_require__(91)) },
42862        gb18030: function() { return __webpack_require__(182) },
42863        encodeSkipVals: [0x80],
42864        encodeAdd: {'€': 0xA2E3},
42865    },
42866
42867    'chinese': 'gb18030',
42868
42869
42870    // == Korean ===============================================================
42871    // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.
42872    'windows949': 'cp949',
42873    'ms949': 'cp949',
42874    '949': 'cp949',
42875    'cp949': {
42876        type: '_dbcs',
42877        table: function() { return __webpack_require__(183) },
42878    },
42879
42880    'cseuckr': 'cp949',
42881    'csksc56011987': 'cp949',
42882    'euckr': 'cp949',
42883    'isoir149': 'cp949',
42884    'korean': 'cp949',
42885    'ksc56011987': 'cp949',
42886    'ksc56011989': 'cp949',
42887    'ksc5601': 'cp949',
42888
42889
42890    // == Big5/Taiwan/Hong Kong ================================================
42891    // There are lots of tables for Big5 and cp950. Please see the following links for history:
42892    // http://moztw.org/docs/big5/  http://www.haible.de/bruno/charsets/conversion-tables/Big5.html
42893    // Variations, in roughly number of defined chars:
42894    //  * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT
42895    //  * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/
42896    //  * Big5-2003 (Taiwan standard) almost superset of cp950.
42897    //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.
42898    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard.
42899    //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.
42900    //    Plus, it has 4 combining sequences.
42901    //    Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299
42902    //    because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.
42903    //    Implementations are not consistent within browsers; sometimes labeled as just big5.
42904    //    MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.
42905    //    Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31
42906    //    In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.
42907    //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt
42908    //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt
42909    //
42910    // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder
42911    // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.
42912
42913    'windows950': 'cp950',
42914    'ms950': 'cp950',
42915    '950': 'cp950',
42916    'cp950': {
42917        type: '_dbcs',
42918        table: function() { return __webpack_require__(92) },
42919    },
42920
42921    // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.
42922    'big5': 'big5hkscs',
42923    'big5hkscs': {
42924        type: '_dbcs',
42925        table: function() { return __webpack_require__(92).concat(__webpack_require__(184)) },
42926        encodeSkipVals: [0xa2cc],
42927    },
42928
42929    'cnbig5': 'big5hkscs',
42930    'csbig5': 'big5hkscs',
42931    'xxbig5': 'big5hkscs',
42932};
42933
42934
42935/***/ }),
42936/* 180 */
42937/***/ (function(module, exports) {
42938
42939module.exports = [["0","\u000
vendor: 23,645 bytes, line 42939
429390",128],["a1","。",62],["8140"," 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈",9,"+-±×"],["8180","÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓"],["81b8","∈∋⊆⊇⊂⊃∪∩"],["81c8","∧∨¬⇒⇔∀∃"],["81da","∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],["81f0","ʼn♯♭♪†‡¶"],["81fc","◯"],["824f","0",9],["8260","A",25],["8281","a",25],["829f","ぁ",82],["8340","ァ",62],["8380","ム",22],["839f","Α",16,"Σ",6],["83bf","α",16,"σ",6],["8440","А",5,"ЁЖ",25],["8470","а",5,"ёж",7],["8480","о",17],["849f","─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],["8740","①",19,"Ⅰ",9],["875f","㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],["877e","㍻"],["8780","〝〟№㏍℡㊤",4,"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"],["889f","亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],["8940","院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円"],["8980","園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],["8a40","魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫"],["8a80","橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],["8b40","機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救"],["8b80","朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],["8c40","掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨"],["8c80","劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],["8d40","后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降"],["8d80","項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],["8e40","察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止"],["8e80","死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],["8f40","宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳"],["8f80","準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],["9040","拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨"],["9080","逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],["9140","繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻"],["9180","操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],["9240","叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄"],["9280","逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],["9340","邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬"],["9380","凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],["9440","如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅"],["9480","楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],["9540","鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷"],["9580","斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],["9640","法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆"],["9680","摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],["9740","諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲"],["9780","沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],["9840","蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],["989f","弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],["9940","僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭"],["9980","凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],["9a40","咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸"],["9a80","噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],["9b40","奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀"],["9b80","它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],["9c40","廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠"],["9c80","怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],["9d40","戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫"],["9d80","捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],["9e40","曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎"],["9e80","梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],["9f40","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯"],["9f80","麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],["e040","漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝"],["e080","烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],["e140","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿"],["e180","痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],["e240","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰"],["e280","窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],["e340","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷"],["e380","縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],["e440","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤"],["e480","艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],["e540","蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬"],["e580","蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],["e640","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧"],["e680","諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],["e740","蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜"],["e780","轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],["e840","錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙"],["e880","閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],["e940","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃"],["e980","騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],["ea40","鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯"],["ea80","黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙"],["ed40","纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏"],["ed80","塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],["ee40","犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙"],["ee80","蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],["eeef","ⅰ",9,"¬¦'""],["f040","",62],["f080","",124],["f140","",62],["f180","",124],["f240","",62],["f280","",124],["f340","",62],["f380","",124],["f440","",62],["f480","",124],["f540","",62],["f580","",124],["f640","",62],["f680","",124],["f740","",62],["f780","",124],["f840","",62],["f880","",124],["f940",""],["fa40","ⅰ",9,"Ⅰ",9,"¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊"],["fa80","兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯"],["fb40","涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神"],["fb80","祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙"],["fc40","髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"]]
42939
42940
42941/***/ }),
42942/* 181 */
42943/***/ (function(module, exports) {
42944
42945module.exports = [["0","\u000
vendor: 40,870 bytes, line 42945
429450",127],["8ea1","。",62],["a1a1"," 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈",9,"+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇"],["a2a1","◆□■△▲▽▼※〒→←↑↓〓"],["a2ba","∈∋⊆⊇⊂⊃∪∩"],["a2ca","∧∨¬⇒⇔∀∃"],["a2dc","∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],["a2f2","ʼn♯♭♪†‡¶"],["a2fe","◯"],["a3b0","0",9],["a3c1","A",25],["a3e1","a",25],["a4a1","ぁ",82],["a5a1","ァ",85],["a6a1","Α",16,"Σ",6],["a6c1","α",16,"σ",6],["a7a1","А",5,"ЁЖ",25],["a7d1","а",5,"ёж",25],["a8a1","─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],["ada1","①",19,"Ⅰ",9],["adc0","㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],["addf","㍻〝〟№㏍℡㊤",4,"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"],["b0a1","亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],["b1a1","院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応"],["b2a1","押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],["b3a1","魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱"],["b4a1","粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],["b5a1","機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京"],["b6a1","供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],["b7a1","掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲"],["b8a1","検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],["b9a1","后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込"],["baa1","此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],["bba1","察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時"],["bca1","次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],["bda1","宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償"],["bea1","勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],["bfa1","拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾"],["c0a1","澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],["c1a1","繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎"],["c2a1","臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],["c3a1","叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵"],["c4a1","帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],["c5a1","邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到"],["c6a1","董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],["c7a1","如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦"],["c8a1","函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],["c9a1","鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服"],["caa1","福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],["cba1","法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満"],["cca1","漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],["cda1","諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃"],["cea1","痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],["cfa1","蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],["d0a1","弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],["d1a1","僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨"],["d2a1","辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],["d3a1","咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉"],["d4a1","圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],["d5a1","奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓"],["d6a1","屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],["d7a1","廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚"],["d8a1","悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],["d9a1","戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼"],["daa1","據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],["dba1","曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍"],["dca1","棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],["dda1","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾"],["dea1","沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],["dfa1","漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼"],["e0a1","燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],["e1a1","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰"],["e2a1","癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],["e3a1","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐"],["e4a1","筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],["e5a1","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺"],["e6a1","罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],["e7a1","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙"],["e8a1","茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],["e9a1","蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙"],["eaa1","蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],["eba1","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫"],["eca1","譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],["eda1","蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸"],["eea1","遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],["efa1","錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞"],["f0a1","陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],["f1a1","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷"],["f2a1","髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],["f3a1","鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠"],["f4a1","堯槇遙瑤凜熙"],["f9a1","纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德"],["faa1","忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],["fba1","犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚"],["fca1","釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],["fcf1","ⅰ",9,"¬¦'""],["8fa2af","˘ˇ¸˙˝¯˛˚~΄΅"],["8fa2c2","¡¦¿"],["8fa2eb","ºª©®™¤№"],["8fa6e1","ΆΈΉΊΪ"],["8fa6e7","Ό"],["8fa6e9","ΎΫ"],["8fa6ec","Ώ"],["8fa6f1","άέήίϊΐόςύϋΰώ"],["8fa7c2","Ђ",10,"ЎЏ"],["8fa7f2","ђ",10,"ўџ"],["8fa9a1","ÆĐ"],["8fa9a4","Ħ"],["8fa9a6","IJ"],["8fa9a8","ŁĿ"],["8fa9ab","ŊØŒ"],["8fa9af","ŦÞ"],["8fa9c1","æđðħıijĸłŀʼnŋøœßŧþ"],["8faaa1","ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ"],["8faaba","ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ"],["8faba1","áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ"],["8fabbd","ġĥíìïîǐ"],["8fabc5","īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż"],["8fb0a1","丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄"],["8fb1a1","侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐"],["8fb2a1","傒傓傔傖傛傜傞",4,"傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂"],["8fb3a1","凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋"],["8fb4a1","匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿"],["8fb5a1","咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒"],["8fb6a1","嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍",5,"嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤",4,"囱囫园"],["8fb7a1","囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭",4,"坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡"],["8fb8a1","堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭"],["8fb9a1","奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿"],["8fbaa1","嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖",4,"寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩"],["8fbba1","屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤"],["8fbca1","巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪",4,"幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧"],["8fbda1","彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐",4,"忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷"],["8fbea1","悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐",4,"愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥"],["8fbfa1","懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵"],["8fc0a1","捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿"],["8fc1a1","擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝"],["8fc2a1","昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝"],["8fc3a1","杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮",4,"桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏"],["8fc4a1","棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲"],["8fc5a1","樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽"],["8fc6a1","歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖"],["8fc7a1","泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞"],["8fc8a1","湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊"],["8fc9a1","濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔",4,"炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃",4,"焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠"],["8fcaa1","煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻"],["8fcba1","狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽"],["8fcca1","珿琀琁琄琇琊琑琚琛琤琦琨",9,"琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆"],["8fcda1","甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹",5,"疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹"],["8fcea1","瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢",6,"皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢"],["8fcfa1","睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳"],["8fd0a1","碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞"],["8fd1a1","秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰"],["8fd2a1","笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙",5],["8fd3a1","籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝"],["8fd4a1","綞綦綧綪綳綶綷綹緂",4,"緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭"],["8fd5a1","罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮"],["8fd6a1","胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆"],["8fd7a1","艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸"],["8fd8a1","荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓"],["8fd9a1","蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏",4,"蕖蕙蕜",6,"蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼"],["8fdaa1","藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠",4,"虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣"],["8fdba1","蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃",6,"螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵"],["8fdca1","蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊",4,"裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺"],["8fdda1","襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔",4,"觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳"],["8fdea1","誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂",4,"譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆"],["8fdfa1","貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢"],["8fe0a1","踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁"],["8fe1a1","轃轇轏轑",4,"轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃"],["8fe2a1","郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿"],["8fe3a1","釂釃釅釓釔釗釙釚釞釤釥釩釪釬",5,"釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵",4,"鉻鉼鉽鉿銈銉銊銍銎銒銗"],["8fe4a1","銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿",4,"鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶"],["8fe5a1","鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉",4,"鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹"],["8fe6a1","镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂"],["8fe7a1","霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦"],["8fe8a1","頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱",4,"餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵"],["8fe9a1","馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿",4],["8feaa1","鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪",4,"魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸"],["8feba1","鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦",4,"鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻"],["8feca1","鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵"],["8feda1","黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃",4,"齓齕齖齗齘齚齝齞齨齩齭",4,"齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥"]]
42945
42946
42947/***/ }),
42948/* 182 */
42949/***/ (function(module, exports) {
42950
42951module.exports = {"uChars":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],"gbChars":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}
42952
42953/***/ }),
42954/* 183 */
42955/***/ (function(module, exports) {
42956
42957module.exports = [["0","\u000
vendor: 37,837 bytes, line 42957
429570",127],["8141","갂갃갅갆갋",4,"갘갞갟갡갢갣갥",6,"갮갲갳갴"],["8161","갵갶갷갺갻갽갾갿걁",9,"걌걎",5,"걕"],["8181","걖걗걙걚걛걝",18,"걲걳걵걶걹걻",4,"겂겇겈겍겎겏겑겒겓겕",6,"겞겢",5,"겫겭겮겱",6,"겺겾겿곀곂곃곅곆곇곉곊곋곍",7,"곖곘",7,"곢곣곥곦곩곫곭곮곲곴곷",4,"곾곿괁괂괃괅괇",4,"괎괐괒괓"],["8241","괔괕괖괗괙괚괛괝괞괟괡",7,"괪괫괮",5],["8261","괶괷괹괺괻괽",6,"굆굈굊",5,"굑굒굓굕굖굗"],["8281","굙",7,"굢굤",7,"굮굯굱굲굷굸굹굺굾궀궃",4,"궊궋궍궎궏궑",10,"궞",5,"궥",17,"궸",7,"귂귃귅귆귇귉",6,"귒귔",7,"귝귞귟귡귢귣귥",18],["8341","귺귻귽귾긂",5,"긊긌긎",5,"긕",7],["8361","긝",18,"긲긳긵긶긹긻긼"],["8381","긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗",4,"깞깢깣깤깦깧깪깫깭깮깯깱",6,"깺깾",5,"꺆",5,"꺍",46,"꺿껁껂껃껅",6,"껎껒",5,"껚껛껝",8],["8441","껦껧껩껪껬껮",5,"껵껶껷껹껺껻껽",8],["8461","꼆꼉꼊꼋꼌꼎꼏꼑",18],["8481","꼤",7,"꼮꼯꼱꼳꼵",6,"꼾꽀꽄꽅꽆꽇꽊",5,"꽑",10,"꽞",5,"꽦",18,"꽺",5,"꾁꾂꾃꾅꾆꾇꾉",6,"꾒꾓꾔꾖",5,"꾝",26,"꾺꾻꾽꾾"],["8541","꾿꿁",5,"꿊꿌꿏",4,"꿕",6,"꿝",4],["8561","꿢",5,"꿪",5,"꿲꿳꿵꿶꿷꿹",6,"뀂뀃"],["8581","뀅",6,"뀍뀎뀏뀑뀒뀓뀕",6,"뀞",9,"뀩",26,"끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞",29,"끾끿낁낂낃낅",6,"낎낐낒",5,"낛낝낞낣낤"],["8641","낥낦낧낪낰낲낶낷낹낺낻낽",6,"냆냊",5,"냒"],["8661","냓냕냖냗냙",6,"냡냢냣냤냦",10],["8681","냱",22,"넊넍넎넏넑넔넕넖넗넚넞",4,"넦넧넩넪넫넭",6,"넶넺",5,"녂녃녅녆녇녉",6,"녒녓녖녗녙녚녛녝녞녟녡",22,"녺녻녽녾녿놁놃",4,"놊놌놎놏놐놑놕놖놗놙놚놛놝"],["8741","놞",9,"놩",15],["8761","놹",18,"뇍뇎뇏뇑뇒뇓뇕"],["8781","뇖",5,"뇞뇠",7,"뇪뇫뇭뇮뇯뇱",7,"뇺뇼뇾",5,"눆눇눉눊눍",6,"눖눘눚",5,"눡",18,"눵",6,"눽",26,"뉙뉚뉛뉝뉞뉟뉡",6,"뉪",4],["8841","뉯",4,"뉶",5,"뉽",6,"늆늇늈늊",4],["8861","늏늒늓늕늖늗늛",4,"늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷"],["8881","늸",15,"닊닋닍닎닏닑닓",4,"닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉",6,"댒댖",5,"댝",54,"덗덙덚덝덠덡덢덣"],["8941","덦덨덪덬덭덯덲덳덵덶덷덹",6,"뎂뎆",5,"뎍"],["8961","뎎뎏뎑뎒뎓뎕",10,"뎢",5,"뎩뎪뎫뎭"],["8981","뎮",21,"돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩",18,"돽",18,"됑",6,"됙됚됛됝됞됟됡",6,"됪됬",7,"됵",15],["8a41","둅",10,"둒둓둕둖둗둙",6,"둢둤둦"],["8a61","둧",4,"둭",18,"뒁뒂"],["8a81","뒃",4,"뒉",19,"뒞",5,"뒥뒦뒧뒩뒪뒫뒭",7,"뒶뒸뒺",5,"듁듂듃듅듆듇듉",6,"듑듒듓듔듖",5,"듞듟듡듢듥듧",4,"듮듰듲",5,"듹",26,"딖딗딙딚딝"],["8b41","딞",5,"딦딫",4,"딲딳딵딶딷딹",6,"땂땆"],["8b61","땇땈땉땊땎땏땑땒땓땕",6,"땞땢",8],["8b81","땫",52,"떢떣떥떦떧떩떬떭떮떯떲떶",4,"떾떿뗁뗂뗃뗅",6,"뗎뗒",5,"뗙",18,"뗭",18],["8c41","똀",15,"똒똓똕똖똗똙",4],["8c61","똞",6,"똦",5,"똭",6,"똵",5],["8c81","똻",12,"뙉",26,"뙥뙦뙧뙩",50,"뚞뚟뚡뚢뚣뚥",5,"뚭뚮뚯뚰뚲",16],["8d41","뛃",16,"뛕",8],["8d61","뛞",17,"뛱뛲뛳뛵뛶뛷뛹뛺"],["8d81","뛻",4,"뜂뜃뜄뜆",33,"뜪뜫뜭뜮뜱",6,"뜺뜼",7,"띅띆띇띉띊띋띍",6,"띖",9,"띡띢띣띥띦띧띩",6,"띲띴띶",5,"띾띿랁랂랃랅",6,"랎랓랔랕랚랛랝랞"],["8e41","랟랡",6,"랪랮",5,"랶랷랹",8],["8e61","럂",4,"럈럊",19],["8e81","럞",13,"럮럯럱럲럳럵",6,"럾렂",4,"렊렋렍렎렏렑",6,"렚렜렞",5,"렦렧렩렪렫렭",6,"렶렺",5,"롁롂롃롅",11,"롒롔",7,"롞롟롡롢롣롥",6,"롮롰롲",5,"롹롺롻롽",7],["8f41","뢅",7,"뢎",17],["8f61","뢠",7,"뢩",6,"뢱뢲뢳뢵뢶뢷뢹",4],["8f81","뢾뢿룂룄룆",5,"룍룎룏룑룒룓룕",7,"룞룠룢",5,"룪룫룭룮룯룱",6,"룺룼룾",5,"뤅",18,"뤙",6,"뤡",26,"뤾뤿륁륂륃륅",6,"륍륎륐륒",5],["9041","륚륛륝륞륟륡",6,"륪륬륮",5,"륶륷륹륺륻륽"],["9061","륾",5,"릆릈릋릌릏",15],["9081","릟",12,"릮릯릱릲릳릵",6,"릾맀맂",5,"맊맋맍맓",4,"맚맜맟맠맢맦맧맩맪맫맭",6,"맶맻",4,"먂",5,"먉",11,"먖",33,"먺먻먽먾먿멁멃멄멅멆"],["9141","멇멊멌멏멐멑멒멖멗멙멚멛멝",6,"멦멪",5],["9161","멲멳멵멶멷멹",9,"몆몈몉몊몋몍",5],["9181","몓",20,"몪몭몮몯몱몳",4,"몺몼몾",5,"뫅뫆뫇뫉",14,"뫚",33,"뫽뫾뫿묁묂묃묅",7,"묎묐묒",5,"묙묚묛묝묞묟묡",6],["9241","묨묪묬",7,"묷묹묺묿",4,"뭆뭈뭊뭋뭌뭎뭑뭒"],["9261","뭓뭕뭖뭗뭙",7,"뭢뭤",7,"뭭",4],["9281","뭲",21,"뮉뮊뮋뮍뮎뮏뮑",18,"뮥뮦뮧뮩뮪뮫뮭",6,"뮵뮶뮸",7,"믁믂믃믅믆믇믉",6,"믑믒믔",35,"믺믻믽믾밁"],["9341","밃",4,"밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵"],["9361","밶밷밹",6,"뱂뱆뱇뱈뱊뱋뱎뱏뱑",8],["9381","뱚뱛뱜뱞",37,"벆벇벉벊벍벏",4,"벖벘벛",4,"벢벣벥벦벩",6,"벲벶",5,"벾벿볁볂볃볅",7,"볎볒볓볔볖볗볙볚볛볝",22,"볷볹볺볻볽"],["9441","볾",5,"봆봈봊",5,"봑봒봓봕",8],["9461","봞",5,"봥",6,"봭",12],["9481","봺",5,"뵁",6,"뵊뵋뵍뵎뵏뵑",6,"뵚",9,"뵥뵦뵧뵩",22,"붂붃붅붆붋",4,"붒붔붖붗붘붛붝",6,"붥",10,"붱",6,"붹",24],["9541","뷒뷓뷖뷗뷙뷚뷛뷝",11,"뷪",5,"뷱"],["9561","뷲뷳뷵뷶뷷뷹",6,"븁븂븄븆",5,"븎븏븑븒븓"],["9581","븕",6,"븞븠",35,"빆빇빉빊빋빍빏",4,"빖빘빜빝빞빟빢빣빥빦빧빩빫",4,"빲빶",4,"빾빿뺁뺂뺃뺅",6,"뺎뺒",5,"뺚",13,"뺩",14],["9641","뺸",23,"뻒뻓"],["9661","뻕뻖뻙",6,"뻡뻢뻦",5,"뻭",8],["9681","뻶",10,"뼂",5,"뼊",13,"뼚뼞",33,"뽂뽃뽅뽆뽇뽉",6,"뽒뽓뽔뽖",44],["9741","뾃",16,"뾕",8],["9761","뾞",17,"뾱",7],["9781","뾹",11,"뿆",5,"뿎뿏뿑뿒뿓뿕",6,"뿝뿞뿠뿢",89,"쀽쀾쀿"],["9841","쁀",16,"쁒",5,"쁙쁚쁛"],["9861","쁝쁞쁟쁡",6,"쁪",15],["9881","쁺",21,"삒삓삕삖삗삙",6,"삢삤삦",5,"삮삱삲삷",4,"삾샂샃샄샆샇샊샋샍샎샏샑",6,"샚샞",5,"샦샧샩샪샫샭",6,"샶샸샺",5,"섁섂섃섅섆섇섉",6,"섑섒섓섔섖",5,"섡섢섥섨섩섪섫섮"],["9941","섲섳섴섵섷섺섻섽섾섿셁",6,"셊셎",5,"셖셗"],["9961","셙셚셛셝",6,"셦셪",5,"셱셲셳셵셶셷셹셺셻"],["9981","셼",8,"솆",5,"솏솑솒솓솕솗",4,"솞솠솢솣솤솦솧솪솫솭솮솯솱",11,"솾",5,"쇅쇆쇇쇉쇊쇋쇍",6,"쇕쇖쇙",6,"쇡쇢쇣쇥쇦쇧쇩",6,"쇲쇴",7,"쇾쇿숁숂숃숅",6,"숎숐숒",5,"숚숛숝숞숡숢숣"],["9a41","숤숥숦숧숪숬숮숰숳숵",16],["9a61","쉆쉇쉉",6,"쉒쉓쉕쉖쉗쉙",6,"쉡쉢쉣쉤쉦"],["9a81","쉧",4,"쉮쉯쉱쉲쉳쉵",6,"쉾슀슂",5,"슊",5,"슑",6,"슙슚슜슞",5,"슦슧슩슪슫슮",5,"슶슸슺",33,"싞싟싡싢싥",5,"싮싰싲싳싴싵싷싺싽싾싿쌁",6,"쌊쌋쌎쌏"],["9b41","쌐쌑쌒쌖쌗쌙쌚쌛쌝",6,"쌦쌧쌪",8],["9b61","쌳",17,"썆",7],["9b81","썎",25,"썪썫썭썮썯썱썳",4,"썺썻썾",5,"쎅쎆쎇쎉쎊쎋쎍",50,"쏁",22,"쏚"],["9c41","쏛쏝쏞쏡쏣",4,"쏪쏫쏬쏮",5,"쏶쏷쏹",5],["9c61","쏿",8,"쐉",6,"쐑",9],["9c81","쐛",8,"쐥",6,"쐭쐮쐯쐱쐲쐳쐵",6,"쐾",9,"쑉",26,"쑦쑧쑩쑪쑫쑭",6,"쑶쑷쑸쑺",5,"쒁",18,"쒕",6,"쒝",12],["9d41","쒪",13,"쒹쒺쒻쒽",8],["9d61","쓆",25],["9d81","쓠",8,"쓪",5,"쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂",9,"씍씎씏씑씒씓씕",6,"씝",10,"씪씫씭씮씯씱",6,"씺씼씾",5,"앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩",6,"앲앶",5,"앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔"],["9e41","얖얙얚얛얝얞얟얡",7,"얪",9,"얶"],["9e61","얷얺얿",4,"엋엍엏엒엓엕엖엗엙",6,"엢엤엦엧"],["9e81","엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑",6,"옚옝",6,"옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉",6,"왒왖",5,"왞왟왡",10,"왭왮왰왲",5,"왺왻왽왾왿욁",6,"욊욌욎",5,"욖욗욙욚욛욝",6,"욦"],["9f41","욨욪",5,"욲욳욵욶욷욻",4,"웂웄웆",5,"웎"],["9f61","웏웑웒웓웕",6,"웞웟웢",5,"웪웫웭웮웯웱웲"],["9f81","웳",4,"웺웻웼웾",5,"윆윇윉윊윋윍",6,"윖윘윚",5,"윢윣윥윦윧윩",6,"윲윴윶윸윹윺윻윾윿읁읂읃읅",4,"읋읎읐읙읚읛읝읞읟읡",6,"읩읪읬",7,"읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛",4,"잢잧",4,"잮잯잱잲잳잵잶잷"],["a041","잸잹잺잻잾쟂",5,"쟊쟋쟍쟏쟑",6,"쟙쟚쟛쟜"],["a061","쟞",5,"쟥쟦쟧쟩쟪쟫쟭",13],["a081","쟻",4,"젂젃젅젆젇젉젋",4,"젒젔젗",4,"젞젟젡젢젣젥",6,"젮젰젲",5,"젹젺젻젽젾젿졁",6,"졊졋졎",5,"졕",26,"졲졳졵졶졷졹졻",4,"좂좄좈좉좊좎",5,"좕",7,"좞좠좢좣좤"],["a141","좥좦좧좩",18,"좾좿죀죁"],["a161","죂죃죅죆죇죉죊죋죍",6,"죖죘죚",5,"죢죣죥"],["a181","죦",14,"죶",5,"죾죿줁줂줃줇",4,"줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈",9,"±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬"],["a241","줐줒",5,"줙",18],["a261","줭",6,"줵",18],["a281","쥈",7,"쥒쥓쥕쥖쥗쥙",6,"쥢쥤",7,"쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®"],["a341","쥱쥲쥳쥵",6,"쥽",10,"즊즋즍즎즏"],["a361","즑",6,"즚즜즞",16],["a381","즯",16,"짂짃짅짆짉짋",4,"짒짔짗짘짛!",58,"₩]",32," ̄"],["a441","짞짟짡짣짥짦짨짩짪짫짮짲",5,"짺짻짽짾짿쨁쨂쨃쨄"],["a461","쨅쨆쨇쨊쨎",5,"쨕쨖쨗쨙",12],["a481","쨦쨧쨨쨪",28,"ㄱ",93],["a541","쩇",4,"쩎쩏쩑쩒쩓쩕",6,"쩞쩢",5,"쩩쩪"],["a561","쩫",17,"쩾",5,"쪅쪆"],["a581","쪇",16,"쪙",14,"ⅰ",9],["a5b0","Ⅰ",9],["a5c1","Α",16,"Σ",6],["a5e1","α",16,"σ",6],["a641","쪨",19,"쪾쪿쫁쫂쫃쫅"],["a661","쫆",5,"쫎쫐쫒쫔쫕쫖쫗쫚",5,"쫡",6],["a681","쫨쫩쫪쫫쫭",6,"쫵",18,"쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃",7],["a741","쬋",4,"쬑쬒쬓쬕쬖쬗쬙",6,"쬢",7],["a761","쬪",22,"쭂쭃쭄"],["a781","쭅쭆쭇쭊쭋쭍쭎쭏쭑",6,"쭚쭛쭜쭞",5,"쭥",7,"㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙",9,"㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰",9,"㎀",4,"㎺",5,"㎐",4,"Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆"],["a841","쭭",10,"쭺",14],["a861","쮉",18,"쮝",6],["a881","쮤",19,"쮹",11,"ÆÐªĦ"],["a8a6","IJ"],["a8a8","ĿŁØŒºÞŦŊ"],["a8b1","㉠",27,"ⓐ",25,"①",14,"½⅓⅔¼¾⅛⅜⅝⅞"],["a941","쯅",14,"쯕",10],["a961","쯠쯡쯢쯣쯥쯦쯨쯪",18],["a981","쯽",14,"찎찏찑찒찓찕",6,"찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀",27,"⒜",25,"⑴",14,"¹²³⁴ⁿ₁₂₃₄"],["aa41","찥찦찪찫찭찯찱",6,"찺찿",4,"챆챇챉챊챋챍챎"],["aa61","챏",4,"챖챚",5,"챡챢챣챥챧챩",6,"챱챲"],["aa81","챳챴챶",29,"ぁ",82],["ab41","첔첕첖첗첚첛첝첞첟첡",6,"첪첮",5,"첶첷첹"],["ab61","첺첻첽",6,"쳆쳈쳊",5,"쳑쳒쳓쳕",5],["ab81","쳛",8,"쳥",6,"쳭쳮쳯쳱",12,"ァ",85],["ac41","쳾쳿촀촂",5,"촊촋촍촎촏촑",6,"촚촜촞촟촠"],["ac61","촡촢촣촥촦촧촩촪촫촭",11,"촺",4],["ac81","촿",28,"쵝쵞쵟А",5,"ЁЖ",25],["acd1","а",5,"ёж",25],["ad41","쵡쵢쵣쵥",6,"쵮쵰쵲",5,"쵹",7],["ad61","춁",6,"춉",10,"춖춗춙춚춛춝춞춟"],["ad81","춠춡춢춣춦춨춪",5,"춱",18,"췅"],["ae41","췆",5,"췍췎췏췑",16],["ae61","췢",5,"췩췪췫췭췮췯췱",6,"췺췼췾",4],["ae81","츃츅츆츇츉츊츋츍",6,"츕츖츗츘츚",5,"츢츣츥츦츧츩츪츫"],["af41","츬츭츮츯츲츴츶",19],["af61","칊",13,"칚칛칝칞칢",5,"칪칬"],["af81","칮",5,"칶칷칹칺칻칽",6,"캆캈캊",5,"캒캓캕캖캗캙"],["b041","캚",5,"캢캦",5,"캮",12],["b061","캻",5,"컂",19],["b081","컖",13,"컦컧컩컪컭",6,"컶컺",5,"가각간갇갈갉갊감",7,"같",4,"갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆"],["b141","켂켃켅켆켇켉",6,"켒켔켖",5,"켝켞켟켡켢켣"],["b161","켥",6,"켮켲",5,"켹",11],["b181","콅",14,"콖콗콙콚콛콝",6,"콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸"],["b241","콭콮콯콲콳콵콶콷콹",6,"쾁쾂쾃쾄쾆",5,"쾍"],["b261","쾎",18,"쾢",5,"쾩"],["b281","쾪",5,"쾱",18,"쿅",6,"깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙"],["b341","쿌",19,"쿢쿣쿥쿦쿧쿩"],["b361","쿪",5,"쿲쿴쿶",5,"쿽쿾쿿퀁퀂퀃퀅",5],["b381","퀋",5,"퀒",5,"퀙",19,"끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫",4,"낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝"],["b441","퀮",5,"퀶퀷퀹퀺퀻퀽",6,"큆큈큊",5],["b461","큑큒큓큕큖큗큙",6,"큡",10,"큮큯"],["b481","큱큲큳큵",6,"큾큿킀킂",18,"뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫",4,"닳담답닷",4,"닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥"],["b541","킕",14,"킦킧킩킪킫킭",5],["b561","킳킶킸킺",5,"탂탃탅탆탇탊",5,"탒탖",4],["b581","탛탞탟탡탢탣탥",6,"탮탲",5,"탹",11,"덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸"],["b641","턅",7,"턎",17],["b661","턠",15,"턲턳턵턶턷턹턻턼턽턾"],["b681","턿텂텆",5,"텎텏텑텒텓텕",6,"텞텠텢",5,"텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗"],["b741","텮",13,"텽",6,"톅톆톇톉톊"],["b761","톋",20,"톢톣톥톦톧"],["b781","톩",6,"톲톴톶톷톸톹톻톽톾톿퇁",14,"래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩"],["b841","퇐",7,"퇙",17],["b861","퇫",8,"퇵퇶퇷퇹",13],["b881","툈툊",5,"툑",24,"륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많",4,"맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼"],["b941","툪툫툮툯툱툲툳툵",6,"툾퉀퉂",5,"퉉퉊퉋퉌"],["b961","퉍",14,"퉝",6,"퉥퉦퉧퉨"],["b981","퉩",22,"튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바",4,"받",4,"밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗"],["ba41","튍튎튏튒튓튔튖",5,"튝튞튟튡튢튣튥",6,"튭"],["ba61","튮튯튰튲",5,"튺튻튽튾틁틃",4,"틊틌",5],["ba81","틒틓틕틖틗틙틚틛틝",6,"틦",9,"틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤"],["bb41","틻",4,"팂팄팆",5,"팏팑팒팓팕팗",4,"팞팢팣"],["bb61","팤팦팧팪팫팭팮팯팱",6,"팺팾",5,"퍆퍇퍈퍉"],["bb81","퍊",31,"빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤"],["bc41","퍪",17,"퍾퍿펁펂펃펅펆펇"],["bc61","펈펉펊펋펎펒",5,"펚펛펝펞펟펡",6,"펪펬펮"],["bc81","펯",4,"펵펶펷펹펺펻펽",6,"폆폇폊",5,"폑",5,"샥샨샬샴샵샷샹섀섄섈섐섕서",4,"섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭"],["bd41","폗폙",7,"폢폤",7,"폮폯폱폲폳폵폶폷"],["bd61","폸폹폺폻폾퐀퐂",5,"퐉",13],["bd81","퐗",5,"퐞",25,"숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰"],["be41","퐸",7,"푁푂푃푅",14],["be61","푔",7,"푝푞푟푡푢푣푥",7,"푮푰푱푲"],["be81","푳",4,"푺푻푽푾풁풃",4,"풊풌풎",5,"풕",8,"쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄",6,"엌엎"],["bf41","풞",10,"풪",14],["bf61","풹",18,"퓍퓎퓏퓑퓒퓓퓕"],["bf81","퓖",5,"퓝퓞퓠",7,"퓩퓪퓫퓭퓮퓯퓱",6,"퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염",5,"옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨"],["c041","퓾",5,"픅픆픇픉픊픋픍",6,"픖픘",5],["c061","픞",25],["c081","픸픹픺픻픾픿핁핂핃핅",6,"핎핐핒",5,"핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응",7,"읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊"],["c141","핤핦핧핪핬핮",5,"핶핷핹핺핻핽",6,"햆햊햋"],["c161","햌햍햎햏햑",19,"햦햧"],["c181","햨",31,"점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓"],["c241","헊헋헍헎헏헑헓",4,"헚헜헞",5,"헦헧헩헪헫헭헮"],["c261","헯",4,"헶헸헺",5,"혂혃혅혆혇혉",6,"혒"],["c281","혖",5,"혝혞혟혡혢혣혥",7,"혮",9,"혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻"],["c341","혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝",4],["c361","홢",4,"홨홪",5,"홲홳홵",11],["c381","횁횂횄횆",5,"횎횏횑횒횓횕",7,"횞횠횢",5,"횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층"],["c441","횫횭횮횯횱",7,"횺횼",7,"훆훇훉훊훋"],["c461","훍훎훏훐훒훓훕훖훘훚",5,"훡훢훣훥훦훧훩",4],["c481","훮훯훱훲훳훴훶",5,"훾훿휁휂휃휅",11,"휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼"],["c541","휕휖휗휚휛휝휞휟휡",6,"휪휬휮",5,"휶휷휹"],["c561","휺휻휽",6,"흅흆흈흊",5,"흒흓흕흚",4],["c581","흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵",6,"흾흿힀힂",5,"힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜"],["c641","힍힎힏힑",6,"힚힜힞",5],["c6a1","퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁"],["c7a1","퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠"],["c8a1","혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝"],["caa1","伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕"],["cba1","匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢"],["cca1","瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械"],["cda1","棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜"],["cea1","科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾"],["cfa1","區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴"],["d0a1","鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣"],["d1a1","朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩",5,"那樂",4,"諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉"],["d2a1","納臘蠟衲囊娘廊",4,"乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧",5,"駑魯",10,"濃籠聾膿農惱牢磊腦賂雷尿壘",7,"嫩訥杻紐勒",5,"能菱陵尼泥匿溺多茶"],["d3a1","丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃"],["d4a1","棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅"],["d5a1","蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣"],["d6a1","煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼"],["d7a1","遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬"],["d8a1","立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅"],["d9a1","蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文"],["daa1","汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑"],["dba1","發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖"],["dca1","碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦"],["dda1","孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥"],["dea1","脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索"],["dfa1","傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署"],["e0a1","胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬"],["e1a1","聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁"],["e2a1","戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧"],["e3a1","嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁"],["e4a1","沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額"],["e5a1","櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬"],["e6a1","旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒"],["e7a1","簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳"],["e8a1","烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療"],["e9a1","窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓"],["eaa1","運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜"],["eba1","濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼"],["eca1","議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄"],["eda1","立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長"],["eea1","障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱"],["efa1","煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖"],["f0a1","靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫"],["f1a1","踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只"],["f2a1","咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯"],["f3a1","鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策"],["f4a1","責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢"],["f5a1","椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃"],["f6a1","贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託"],["f7a1","鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑"],["f8a1","阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃"],["f9a1","品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航"],["faa1","行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型"],["fba1","形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵"],["fca1","禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆"],["fda1","爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰"]]
42957
42958
42959/***/ }),
42960/* 184 */
42961/***/ (function(module, exports) {
42962
42963module.exports = 
vendor: 17,595 bytes, line 42963
42963[["8740","䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻"],["8767","綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬"],["87a1","𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋"],["8840","㇀",4,"𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ"],["88a1","ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛"],["8940","𪎩𡅅"],["8943","攊"],["8946","丽滝鵎釟"],["894c","𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮"],["89a1","琑糼緍楆竉刧"],["89ab","醌碸酞肼"],["89b0","贋胶𠧧"],["89b5","肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁"],["89c1","溚舾甙"],["89c5","䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅"],["8a40","𧶄唥"],["8a43","𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓"],["8a64","𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕"],["8a76","䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯"],["8aa1","𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱"],["8aac","䠋𠆩㿺塳𢶍"],["8ab2","𤗈𠓼𦂗𠽌𠶖啹䂻䎺"],["8abb","䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃"],["8ac9","𪘁𠸉𢫏𢳉"],["8ace","𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻"],["8adf","𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌"],["8af6","𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭"],["8b40","𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹"],["8b55","𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑"],["8ba1","𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁"],["8bde","𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢"],["8c40","倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋"],["8ca1","𣏹椙橃𣱣泿"],["8ca7","爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚"],["8cc9","顨杫䉶圽"],["8cce","藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶"],["8ce6","峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻"],["8d40","𠮟"],["8d42","𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱"],["8da1","㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘"],["8e40","𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎"],["8ea1","繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛"],["8f40","蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖"],["8fa1","𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起"],["9040","趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛"],["90a1","𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜"],["9140","𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈"],["91a1","鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨"],["9240","𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘"],["92a1","働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃"],["9340","媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍"],["93a1","摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋"],["9440","銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻"],["94a1","㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡"],["9540","𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂"],["95a1","衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰"],["9640","桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸"],["96a1","𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉"],["9740","愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫"],["97a1","𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎"],["9840","𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦"],["98a1","咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃"],["9940","䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚"],["99a1","䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿"],["9a40","鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺"],["9aa1","黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪"],["9b40","𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌"],["9b62","𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎"],["9ba1","椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊"],["9c40","嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶"],["9ca1","㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏"],["9d40","𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁"],["9da1","辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢"],["9e40","𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺"],["9ea1","鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭"],["9ead","𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹"],["9ec5","㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲"],["9ef5","噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼"],["9f40","籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱"],["9f4f","凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰"],["9fa1","椬叚鰊鴂䰻陁榀傦畆𡝭駚剳"],["9fae","酙隁酜"],["9fb2","酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽"],["9fc1","𤤙盖鮝个𠳔莾衂"],["9fc9","届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳"],["9fdb","歒酼龥鮗頮颴骺麨麄煺笔"],["9fe7","毺蠘罸"],["9feb","嘠𪙊蹷齓"],["9ff0","跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇"],["a040","𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷"],["a055","𡠻𦸅"],["a058","詾𢔛"],["a05b","惽癧髗鵄鍮鮏蟵"],["a063","蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽"],["a073","坟慯抦戹拎㩜懢厪𣏵捤栂㗒"],["a0a1","嵗𨯂迚𨸹"],["a0a6","僙𡵆礆匲阸𠼻䁥"],["a0ae","矾"],["a0b0","糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦"],["a0d4","覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷"],["a0e2","罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫"],["a3c0","␀",31,"␡"],["c6a1","①",9,"⑴",9,"ⅰ",9,"丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー[]✽ぁ",23],["c740","す",58,"ァアィイ"],["c7a1","ゥ",81,"А",5,"ЁЖ",4],["c840","Л",26,"ёж",25,"⇧↸↹㇏𠃌乚𠂊刂䒑"],["c8a1","龰冈龱𧘇"],["c8cd","¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣"],["c8f5","ʃɐɛɔɵœøŋʊɪ"],["f9fe","■"],["fa40","𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸"],["faa1","鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍"],["fb40","𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙"],["fba1","𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂"],["fc40","廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷"],["fca1","𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝"],["fd40","𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀"],["fda1","𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎"],["fe40","鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌"],["fea1","𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔"]]
42963
42964
42965/***/ }),
42966/* 185 */
42967/***/ (function(module, exports, __webpack_require__) {
42968
42969"use strict";
42970
42971
42972var Buffer = __webpack_require__(1).Buffer,
42973    Transform = __webpack_require__(15).Transform;
42974
42975
42976// == Exports ==================================================================
42977module.exports = function(iconv) {
42978
42979    // Additional Public API.
42980    iconv.encodeStream = function encodeStream(encoding, options) {
vendor: 12,939 bytes, lines 42981-43351
42981        return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);
42982    }
42983
42984    iconv.decodeStream = function decodeStream(encoding, options) {
42985        return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);
42986    }
42987
42988    iconv.supportsStreams = true;
42989
42990
42991    // Not published yet.
42992    iconv.IconvLiteEncoderStream = IconvLiteEncoderStream;
42993    iconv.IconvLiteDecoderStream = IconvLiteDecoderStream;
42994    iconv._collect = IconvLiteDecoderStream.prototype.collect;
42995};
42996
42997
42998// == Encoder stream =======================================================
42999function IconvLiteEncoderStream(conv, options) {
43000    this.conv = conv;
43001    options = options || {};
43002    options.decodeStrings = false; // We accept only strings, so we don't need to decode them.
43003    Transform.call(this, options);
43004}
43005
43006IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {
43007    constructor: { value: IconvLiteEncoderStream }
43008});
43009
43010IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {
43011    if (typeof chunk != 'string')
43012        return done(new Error("Iconv encoding stream needs strings as its input."));
43013    try {
43014        var res = this.conv.write(chunk);
43015        if (res && res.length) this.push(res);
43016        done();
43017    }
43018    catch (e) {
43019        done(e);
43020    }
43021}
43022
43023IconvLiteEncoderStream.prototype._flush = function(done) {
43024    try {
43025        var res = this.conv.end();
43026        if (res && res.length) this.push(res);
43027        done();
43028    }
43029    catch (e) {
43030        done(e);
43031    }
43032}
43033
43034IconvLiteEncoderStream.prototype.collect = function(cb) {
43035    var chunks = [];
43036    this.on('error', cb);
43037    this.on('data', function(chunk) { chunks.push(chunk); });
43038    this.on('end', function() {
43039        cb(null, Buffer.concat(chunks));
43040    });
43041    return this;
43042}
43043
43044
43045// == Decoder stream =======================================================
43046function IconvLiteDecoderStream(conv, options) {
43047    this.conv = conv;
43048    options = options || {};
43049    options.encoding = this.encoding = 'utf8'; // We output strings.
43050    Transform.call(this, options);
43051}
43052
43053IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {
43054    constructor: { value: IconvLiteDecoderStream }
43055});
43056
43057IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {
43058    if (!Buffer.isBuffer(chunk))
43059        return done(new Error("Iconv decoding stream needs buffers as its input."));
43060    try {
43061        var res = this.conv.write(chunk);
43062        if (res && res.length) this.push(res, this.encoding);
43063        done();
43064    }
43065    catch (e) {
43066        done(e);
43067    }
43068}
43069
43070IconvLiteDecoderStream.prototype._flush = function(done) {
43071    try {
43072        var res = this.conv.end();
43073        if (res && res.length) this.push(res, this.encoding);
43074        done();
43075    }
43076    catch (e) {
43077        done(e);
43078    }
43079}
43080
43081IconvLiteDecoderStream.prototype.collect = function(cb) {
43082    var res = '';
43083    this.on('error', cb);
43084    this.on('data', function(chunk) { res += chunk; });
43085    this.on('end', function() {
43086        cb(null, res);
43087    });
43088    return this;
43089}
43090
43091
43092
43093/***/ }),
43094/* 186 */
43095/***/ (function(module, exports, __webpack_require__) {
43096
43097"use strict";
43098
43099var Buffer = __webpack_require__(1).Buffer;
43100
43101// == Extend Node primitives to use iconv-lite =================================
43102
43103module.exports = function (iconv) {
43104    var original = undefined; // Place to keep original methods.
43105
43106    // Node authors rewrote Buffer internals to make it compatible with
43107    // Uint8Array and we cannot patch key functions since then.
43108    iconv.supportsNodeEncodingsExtension = !(new Buffer(0) instanceof Uint8Array);
43109
43110    iconv.extendNodeEncodings = function extendNodeEncodings() {
43111        if (original) return;
43112        original = {};
43113
43114        if (!iconv.supportsNodeEncodingsExtension) {
43115            console.error("ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node");
43116            console.error("See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility");
43117            return;
43118        }
43119
43120        var nodeNativeEncodings = {
43121            'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true,
43122            'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true,
43123        };
43124
43125        Buffer.isNativeEncoding = function(enc) {
43126            return enc && nodeNativeEncodings[enc.toLowerCase()];
43127        }
43128
43129        // -- SlowBuffer -----------------------------------------------------------
43130        var SlowBuffer = __webpack_require__(1).SlowBuffer;
43131
43132        original.SlowBufferToString = SlowBuffer.prototype.toString;
43133        SlowBuffer.prototype.toString = function(encoding, start, end) {
43134            encoding = String(encoding || 'utf8').toLowerCase();
43135
43136            // Use native conversion when possible
43137            if (Buffer.isNativeEncoding(encoding))
43138                return original.SlowBufferToString.call(this, encoding, start, end);
43139
43140            // Otherwise, use our decoding method.
43141            if (typeof start == 'undefined') start = 0;
43142            if (typeof end == 'undefined') end = this.length;
43143            return iconv.decode(this.slice(start, end), encoding);
43144        }
43145
43146        original.SlowBufferWrite = SlowBuffer.prototype.write;
43147        SlowBuffer.prototype.write = function(string, offset, length, encoding) {
43148            // Support both (string, offset, length, encoding)
43149            // and the legacy (string, encoding, offset, length)
43150            if (isFinite(offset)) {
43151                if (!isFinite(length)) {
43152                    encoding = length;
43153                    length = undefined;
43154                }
43155            } else {  // legacy
43156                var swap = encoding;
43157                encoding = offset;
43158                offset = length;
43159                length = swap;
43160            }
43161
43162            offset = +offset || 0;
43163            var remaining = this.length - offset;
43164            if (!length) {
43165                length = remaining;
43166            } else {
43167                length = +length;
43168                if (length > remaining) {
43169                    length = remaining;
43170                }
43171            }
43172            encoding = String(encoding || 'utf8').toLowerCase();
43173
43174            // Use native conversion when possible
43175            if (Buffer.isNativeEncoding(encoding))
43176                return original.SlowBufferWrite.call(this, string, offset, length, encoding);
43177
43178            if (string.length > 0 && (length < 0 || offset < 0))
43179                throw new RangeError('attempt to write beyond buffer bounds');
43180
43181            // Otherwise, use our encoding method.
43182            var buf = iconv.encode(string, encoding);
43183            if (buf.length < length) length = buf.length;
43184            buf.copy(this, offset, 0, length);
43185            return length;
43186        }
43187
43188        // -- Buffer ---------------------------------------------------------------
43189
43190        original.BufferIsEncoding = Buffer.isEncoding;
43191        Buffer.isEncoding = function(encoding) {
43192            return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding);
43193        }
43194
43195        original.BufferByteLength = Buffer.byteLength;
43196        Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) {
43197            encoding = String(encoding || 'utf8').toLowerCase();
43198
43199            // Use native conversion when possible
43200            if (Buffer.isNativeEncoding(encoding))
43201                return original.BufferByteLength.call(this, str, encoding);
43202
43203            // Slow, I know, but we don't have a better way yet.
43204            return iconv.encode(str, encoding).length;
43205        }
43206
43207        original.BufferToString = Buffer.prototype.toString;
43208        Buffer.prototype.toString = function(encoding, start, end) {
43209            encoding = String(encoding || 'utf8').toLowerCase();
43210
43211            // Use native conversion when possible
43212            if (Buffer.isNativeEncoding(encoding))
43213                return original.BufferToString.call(this, encoding, start, end);
43214
43215            // Otherwise, use our decoding method.
43216            if (typeof start == 'undefined') start = 0;
43217            if (typeof end == 'undefined') end = this.length;
43218            return iconv.decode(this.slice(start, end), encoding);
43219        }
43220
43221        original.BufferWrite = Buffer.prototype.write;
43222        Buffer.prototype.write = function(string, offset, length, encoding) {
43223            var _offset = offset, _length = length, _encoding = encoding;
43224            // Support both (string, offset, length, encoding)
43225            // and the legacy (string, encoding, offset, length)
43226            if (isFinite(offset)) {
43227                if (!isFinite(length)) {
43228                    encoding = length;
43229                    length = undefined;
43230                }
43231            } else {  // legacy
43232                var swap = encoding;
43233                encoding = offset;
43234                offset = length;
43235                length = swap;
43236            }
43237
43238            encoding = String(encoding || 'utf8').toLowerCase();
43239
43240            // Use native conversion when possible
43241            if (Buffer.isNativeEncoding(encoding))
43242                return original.BufferWrite.call(this, string, _offset, _length, _encoding);
43243
43244            offset = +offset || 0;
43245            var remaining = this.length - offset;
43246            if (!length) {
43247                length = remaining;
43248            } else {
43249                length = +length;
43250                if (length > remaining) {
43251                    length = remaining;
43252                }
43253            }
43254
43255            if (string.length > 0 && (length < 0 || offset < 0))
43256                throw new RangeError('attempt to write beyond buffer bounds');
43257
43258            // Otherwise, use our encoding method.
43259            var buf = iconv.encode(string, encoding);
43260            if (buf.length < length) length = buf.length;
43261            buf.copy(this, offset, 0, length);
43262            return length;
43263
43264            // TODO: Set _charsWritten.
43265        }
43266
43267
43268        // -- Readable -------------------------------------------------------------
43269        if (iconv.supportsStreams) {
43270            var Readable = __webpack_require__(15).Readable;
43271
43272            original.ReadableSetEncoding = Readable.prototype.setEncoding;
43273            Readable.prototype.setEncoding = function setEncoding(enc, options) {
43274                // Use our own decoder, it has the same interface.
43275                // We cannot use original function as it doesn't handle BOM-s.
43276                this._readableState.decoder = iconv.getDecoder(enc, options);
43277                this._readableState.encoding = enc;
43278            }
43279
43280            Readable.prototype.collect = iconv._collect;
43281        }
43282    }
43283
43284    // Remove iconv-lite Node primitive extensions.
43285    iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() {
43286        if (!iconv.supportsNodeEncodingsExtension)
43287            return;
43288        if (!original)
43289            throw new Error("require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.")
43290
43291        delete Buffer.isNativeEncoding;
43292
43293        var SlowBuffer = __webpack_require__(1).SlowBuffer;
43294
43295        SlowBuffer.prototype.toString = original.SlowBufferToString;
43296        SlowBuffer.prototype.write = original.SlowBufferWrite;
43297
43298        Buffer.isEncoding = original.BufferIsEncoding;
43299        Buffer.byteLength = original.BufferByteLength;
43300        Buffer.prototype.toString = original.BufferToString;
43301        Buffer.prototype.write = original.BufferWrite;
43302
43303        if (iconv.supportsStreams) {
43304            var Readable = __webpack_require__(15).Readable;
43305
43306            Readable.prototype.setEncoding = original.ReadableSetEncoding;
43307            delete Readable.prototype.collect;
43308        }
43309
43310        original = undefined;
43311    }
43312}
43313
43314
43315/***/ }),
43316/* 187 */
43317/***/ (function(module, exports, __webpack_require__) {
43318
43319// Generated by CoffeeScript 1.7.1
43320(function() {
43321  var ArrayT, LazyArray, LazyArrayT, NumberT, inspect, utils,
43322    __hasProp = {}.hasOwnProperty,
43323    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
43324
43325  ArrayT = __webpack_require__(93);
43326
43327  NumberT = __webpack_require__(22).Number;
43328
43329  utils = __webpack_require__(12);
43330
43331  inspect = __webpack_require__(49).inspect;
43332
43333  LazyArrayT = (function(_super) {
43334    __extends(LazyArrayT, _super);
43335
43336    function LazyArrayT() {
43337      return LazyArrayT.__super__.constructor.apply(this, arguments);
43338    }
43339
43340    LazyArrayT.prototype.decode = function(stream, parent) {
43341      var length, pos, res;
43342      pos = stream.pos;
43343      length = utils.resolveLength(this.length, stream, parent);
43344      if (this.length instanceof NumberT) {
43345        parent = {
43346          parent: parent,
43347          _startOffset: pos,
43348          _currentOffset: 0,
43349          _length: length
43350        };
43351      }
43352      res = new LazyArray(this.type, length, stream, parent);
43353      stream.pos += length * this.type.size(null, parent);
43354      return res;
43355    };
43356
43357    LazyArrayT.prototype.size = function(val, ctx) {
43358      if (val instanceof LazyArray) {
43359        val = val.toArray();
43360      }
43361      return LazyArrayT.__super__.size.call(this, val, ctx);
43362    };
43363
43364    LazyArrayT.prototype.encode = function(stream, val, ctx) {
43365      if (val instanceof LazyArray) {
43366        val = val.toArray();
43367      }
43368      return LazyArrayT.__super__.encode.call(this, stream, val, ctx);
43369    };
43370
43371    return LazyArrayT;
43372
43373  })(ArrayT);
43374
43375  LazyArray = (function() {
43376    function LazyArray(type, length, stream, ctx) {
43377      this.type = type;
43378      this.length = length;
43379      this.stream = stream;
43380      this.ctx = ctx;
43381      this.base = this.stream.pos;
43382      this.items = [];
43383    }
43384
43385    LazyArray.prototype.get = function(index) {
43386      var pos;
43387      if (index < 0 || index >= this.length) {
43388        return void 0;
43389      }
43390      if (this.items[index] == null) {
43391        pos = this.stream.pos;
43392        this.stream.pos = this.base + this.type.size(null, this.ctx) * index;
43393        this.items[index] = this.type.decode(this.stream, this.ctx);
43394        this.stream.pos = pos;
43395      }
43396      return this.items[index];
43397    };
43398
43399    LazyArray.prototype.toArray = function() {
43400      var i, _i, _ref, _results;
43401      _results = [];
43402      for (i = _i = 0, _ref = this.length; _i < _ref; i = _i += 1) {
43403        _results.push(this.get(i));
43404      }
43405      return _results;
43406    };
43407
43408    LazyArray.prototype.inspect = function() {
43409      return inspect(this.toArray());
43410    };
43411
43412    return LazyArray;
43413
43414  })();
43415
43416  module.exports = LazyArrayT;
43417
43418}).call(this);
43419
43420
43421/***/ }),
43422/* 188 */
43423/***/ (function(module, exports) {
43424
43425// Generated by CoffeeScript 1.7.1
43426(function() {
43427  var Bitfield;
43428
43429  Bitfield = (function() {
43430    function Bitfield(type, flags) {
43431      this.type = type;
43432      this.flags = flags != null ? flags : [];
43433    }
43434
43435    Bitfield.prototype.decode = function(stream) {
43436      var flag, i, res, val, _i, _len, _ref;
43437      val = this.type.decode(stream);
43438      res = {};
43439      _ref = this.flags;
43440      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
43441        flag = _ref[i];
43442        if (flag != null) {
43443          res[flag] = !!(val & (1 << i));
43444        }
43445      }
43446      return res;
43447    };
43448
43449    Bitfield.prototype.size = function() {
43450      return this.type.size();
43451    };
43452
43453    Bitfield.prototype.encode = function(stream, keys) {
43454      var flag, i, val, _i, _len, _ref;
43455      val = 0;
43456      _ref = this.flags;
43457      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
43458        flag = _ref[i];
43459        if (flag != null) {
43460          if (keys[flag]) {
43461            val |= 1 << i;
43462          }
43463        }
43464      }
43465      return this.type.encode(stream, val);
43466    };
43467
43468    return Bitfield;
43469
43470  })();
43471
43472  module.exports = Bitfield;
43473
43474}).call(this);
43475
43476
43477/***/ }),
43478/* 189 */
43479/***/ (function(module, exports) {
43480
43481// Generated by CoffeeScript 1.7.1
43482(function() {
43483  var BooleanT;
43484
43485  BooleanT = (function() {
43486    function BooleanT(type) {
43487      this.type = type;
43488    }
43489
43490    BooleanT.prototype.decode = function(stream, parent) {
43491      return !!this.type.decode(stream, parent);
43492    };
43493
43494    BooleanT.prototype.size = function(val, parent) {
43495      return this.type.size(val, parent);
43496    };
43497
43498    BooleanT.prototype.encode = function(stream, val, parent) {
43499      return this.type.encode(stream, +val, parent);
43500    };
43501
43502    return BooleanT;
43503
43504  })();
43505
43506  module.exports = BooleanT;
43507
43508}).call(this);
43509
43510
43511/***/ }),
43512/* 190 */
43513/***/ (function(module, exports, __webpack_require__) {
43514
43515// Generated by CoffeeScript 1.7.1
43516(function() {
43517  var BufferT, NumberT, utils;
43518
43519  utils = __webpack_require__(12);
43520
43521  NumberT = __webpack_require__(22).Number;
43522
43523  BufferT = (function() {
43524    function BufferT(length) {
43525      this.length = length;
43526    }
43527
43528    BufferT.prototype.decode = function(stream, parent) {
43529      var length;
43530      length = utils.resolveLength(this.length, stream, parent);
43531      return stream.readBuffer(length);
43532    };
43533
43534    BufferT.prototype.size = function(val, parent) {
43535      if (!val) {
43536        return utils.resolveLength(this.length, null, parent);
43537      }
43538      return val.length;
43539    };
43540
43541    BufferT.prototype.encode = function(stream, buf, parent) {
43542      if (this.length instanceof NumberT) {
43543        this.length.encode(stream, buf.length);
43544      }
43545      return stream.writeBuffer(buf);
43546    };
43547
43548    return BufferT;
43549
43550  })();
43551
43552  module.exports = BufferT;
43553
43554}).call(this);
43555
43556
43557/***/ }),
43558/* 191 */
43559/***/ (function(module, exports) {
43560
43561// Generated by CoffeeScript 1.7.1
43562(function() {
43563  var Enum;
43564
43565  Enum = (function() {
43566    function Enum(type, options) {
43567      this.type = type;
43568      this.options = options != null ? options : [];
43569    }
43570
43571    Enum.prototype.decode = function(stream) {
43572      var index;
43573      index = this.type.decode(stream);
43574      return this.options[index] || index;
43575    };
43576
43577    Enum.prototype.size = function() {
43578      return this.type.size();
43579    };
43580
43581    Enum.prototype.encode = function(stream, val) {
43582      var index;
43583      index = this.options.indexOf(val);
43584      if (index === -1) {
43585        throw new Error("Unknown option in enum: " + val);
43586      }
43587      return this.type.encode(stream, index);
43588    };
43589
43590    return Enum;
43591
43592  })();
43593
43594  module.exports = Enum;
43595
43596}).call(this);
43597
43598
43599/***/ }),
43600/* 192 */
43601/***/ (function(module, exports) {
43602
43603// Generated by CoffeeScript 1.7.1
43604(function() {
43605  var Optional;
43606
43607  Optional = (function() {
43608    function Optional(type, condition) {
43609      this.type = type;
43610      this.condition = condition != null ? condition : true;
43611    }
43612
43613    Optional.prototype.decode = function(stream, parent) {
43614      var condition;
43615      condition = this.condition;
43616      if (typeof condition === 'function') {
43617        condition = condition.call(parent, parent);
43618      }
43619      if (condition) {
43620        return this.type.decode(stream, parent);
43621      }
43622    };
43623
43624    Optional.prototype.size = function(val, parent) {
43625      var condition;
43626      condition = this.condition;
43627      if (typeof condition === 'function') {
43628        condition = condition.call(parent, parent);
43629      }
43630      if (condition) {
43631        return this.type.size(val, parent);
43632      } else {
43633        return 0;
43634      }
43635    };
43636
43637    Optional.prototype.encode = function(stream, val, parent) {
43638      var condition;
43639      condition = this.condition;
43640      if (typeof condition === 'function') {
43641        condition = condition.call(parent, parent);
43642      }
43643      if (condition) {
43644        return this.type.encode(stream, val, parent);
43645      }
43646    };
43647
43648    return Optional;
43649
43650  })();
43651
43652  module.exports = Optional;
43653
43654}).call(this);
43655
43656
43657/***/ }),
43658/* 193 */
43659/***/ (function(module, exports, __webpack_require__) {
43660
43661// Generated by CoffeeScript 1.7.1
43662(function() {
43663  var Reserved, utils;
43664
43665  utils = __webpack_require__(12);
43666
43667  Reserved = (function() {
43668    function Reserved(type, count) {
43669      this.type = type;
43670      this.count = count != null ? count : 1;
43671    }
43672
43673    Reserved.prototype.decode = function(stream, parent) {
43674      stream.pos += this.size(null, parent);
43675      return void 0;
43676    };
43677
43678    Reserved.prototype.size = function(data, parent) {
43679      var count;
43680      count = utils.resolveLength(this.count, null, parent);
43681      return this.type.size() * count;
43682    };
43683
43684    Reserved.prototype.encode = function(stream, val, parent) {
43685      return stream.fill(0, this.size(val, parent));
43686    };
43687
43688    return Reserved;
43689
43690  })();
43691
43692  module.exports = Reserved;
43693
43694}).call(this);
43695
43696
43697/***/ }),
43698/* 194 */
43699/***/ (function(module, exports, __webpack_require__) {
43700
43701/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
43702(function() {
43703  var NumberT, StringT, utils;
43704
43705  NumberT = __webpack_require__(22).Number;
43706
43707  utils = __webpack_require__(12);
43708
43709  StringT = (function() {
43710    function StringT(length, encoding) {
43711      this.length = length;
43712      this.encoding = encoding != null ? encoding : 'ascii';
43713    }
43714
43715    StringT.prototype.decode = function(stream, parent) {
43716      var buffer, encoding, length, pos, string;
43717      length = (function() {
43718        if (this.length != null) {
43719          return utils.resolveLength(this.length, stream, parent);
43720        } else {
43721          buffer = stream.buffer, length = stream.length, pos = stream.pos;
43722          while (pos < length && buffer[pos] !== 0x00) {
43723            ++pos;
43724          }
43725          return pos - stream.pos;
43726        }
43727      }).call(this);
43728      encoding = this.encoding;
43729      if (typeof encoding === 'function') {
43730        encoding = encoding.call(parent, parent) || 'ascii';
43731      }
43732      string = stream.readString(length, encoding);
43733      if ((this.length == null) && stream.pos < stream.length) {
43734        stream.pos++;
43735      }
43736      return string;
43737    };
43738
43739    StringT.prototype.size = function(val, parent) {
43740      var encoding, size;
43741      if (!val) {
43742        return utils.resolveLength(this.length, null, parent);
43743      }
43744      encoding = this.encoding;
43745      if (typeof encoding === 'function') {
43746        encoding = encoding.call(parent != null ? parent.val : void 0, parent != null ? parent.val : void 0) || 'ascii';
43747      }
43748      if (encoding === 'utf16be') {
43749        encoding = 'utf16le';
43750      }
43751      size = Buffer.byteLength(val, encoding);
43752      if (this.length instanceof NumberT) {
43753        size += this.length.size();
43754      }
43755      if (this.length == null) {
43756        size++;
43757      }
43758      return size;
43759    };
43760
43761    StringT.prototype.encode = function(stream, val, parent) {
43762      var encoding;
43763      encoding = this.encoding;
43764      if (typeof encoding === 'function') {
43765        encoding = encoding.call(parent != null ? parent.val : void 0, parent != null ? parent.val : void 0) || 'ascii';
43766      }
43767      if (this.length instanceof NumberT) {
43768        this.length.encode(stream, Buffer.byteLength(val, encoding));
43769      }
43770      stream.writeString(val, encoding);
43771      if (this.length == null) {
43772        return stream.writeUInt8(0x00);
43773      }
43774    };
43775
43776    return StringT;
43777
43778  })();
43779
43780  module.exports = StringT;
43781
43782}).call(this);
43783
43784/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
43785
43786/***/ }),
43787/* 195 */
43788/***/ (function(module, exports, __webpack_require__) {
43789
43790// Generated by CoffeeScript 1.7.1
43791(function() {
43792  var Struct, VersionedStruct,
43793    __hasProp = {}.hasOwnProperty,
43794    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
43795
43796  Struct = __webpack_require__(94);
43797
43798  VersionedStruct = (function(_super) {
43799    __extends(VersionedStruct, _super);
43800
43801    function VersionedStruct(type, versions) {
43802      this.type = type;
43803      this.versions = versions != null ? versions : {};
43804      if (typeof this.type === 'string') {
43805        this.versionGetter = new Function('parent', "return parent." + this.type);
43806        this.versionSetter = new Function('parent', 'version', "return parent." + this.type + " = version");
43807      }
43808    }
43809
43810    VersionedStruct.prototype.decode = function(stream, parent, length) {
43811      var fields, res, _ref;
43812      if (length == null) {
43813        length = 0;
43814      }
43815      res = this._setup(stream, parent, length);
43816      if (typeof this.type === 'string') {
43817        res.version = this.versionGetter(parent);
43818      } else {
43819        res.version = this.type.decode(stream);
43820      }
43821      if (this.versions.header) {
43822        this._parseFields(stream, res, this.versions.header);
43823      }
43824      fields = this.versions[res.version];
43825      if (fields == null) {
43826        throw new Error("Unknown version " + res.version);
43827      }
43828      if (fields instanceof VersionedStruct) {
43829        return fields.decode(stream, parent);
43830      }
43831      this._parseFields(stream, res, fields);
43832      if ((_ref = this.process) != null) {
43833        _ref.call(res, stream);
43834      }
43835      return res;
43836    };
43837
43838    VersionedStruct.prototype.size = function(val, parent, includePointers) {
43839      var ctx, fields, key, size, type, _ref;
43840      if (includePointers == null) {
43841        includePointers = true;
43842      }
43843      if (!val) {
43844        throw new Error('Not a fixed size');
43845      }
43846      ctx = {
43847        parent: parent,
43848        val: val,
43849        pointerSize: 0
43850      };
43851      size = 0;
43852      if (typeof this.type !== 'string') {
43853        size += this.type.size(val.version, ctx);
43854      }
43855      if (this.versions.header) {
43856        _ref = this.versions.header;
43857        for (key in _ref) {
43858          type = _ref[key];
43859          if (type.size != null) {
43860            size += type.size(val[key], ctx);
43861          }
43862        }
43863      }
43864      fields = this.versions[val.version];
43865      if (fields == null) {
43866        throw new Error("Unknown version " + val.version);
43867      }
43868      for (key in fields) {
43869        type = fields[key];
43870        if (type.size != null) {
43871          size += type.size(val[key], ctx);
43872        }
43873      }
43874      if (includePointers) {
43875        size += ctx.pointerSize;
43876      }
43877      return size;
43878    };
43879
43880    VersionedStruct.prototype.encode = function(stream, val, parent) {
43881      var ctx, fields, i, key, ptr, type, _ref, _ref1;
43882      if ((_ref = this.preEncode) != null) {
43883        _ref.call(val, stream);
43884      }
43885      ctx = {
43886        pointers: [],
43887        startOffset: stream.pos,
43888        parent: parent,
43889        val: val,
43890        pointerSize: 0
43891      };
43892      ctx.pointerOffset = stream.pos + this.size(val, ctx, false);
43893      if (typeof this.type !== 'string') {
43894        this.type.encode(stream, val.version);
43895      }
43896      if (this.versions.header) {
43897        _ref1 = this.versions.header;
43898        for (key in _ref1) {
43899          type = _ref1[key];
43900          if (type.encode != null) {
43901            type.encode(stream, val[key], ctx);
43902          }
43903        }
43904      }
43905      fields = this.versions[val.version];
43906      for (key in fields) {
43907        type = fields[key];
43908        if (type.encode != null) {
43909          type.encode(stream, val[key], ctx);
43910        }
43911      }
43912      i = 0;
43913      while (i < ctx.pointers.length) {
43914        ptr = ctx.pointers[i++];
43915        ptr.type.encode(stream, ptr.val, ptr.parent);
43916      }
43917    };
43918
43919    return VersionedStruct;
43920
43921  })(Struct);
43922
43923  module.exports = VersionedStruct;
43924
43925}).call(this);
43926
43927
43928/***/ }),
43929/* 196 */
43930/***/ (function(module, exports, __webpack_require__) {
43931
43932// Generated by CoffeeScript 1.7.1
43933(function() {
43934  var Pointer, VoidPointer, utils;
43935
43936  utils = __webpack_require__(12);
43937
43938  Pointer = (function() {
43939    function Pointer(offsetType, type, options) {
43940      var _base, _base1, _base2, _base3;
43941      this.offsetType = offsetType;
43942      this.type = type;
43943      this.options = options != null ? options : {};
43944      if (this.type === 'void') {
43945        this.type = null;
43946      }
43947      if ((_base = this.options).type == null) {
43948        _base.type = 'local';
43949      }
43950      if ((_base1 = this.options).allowNull == null) {
43951        _base1.allowNull = true;
43952      }
43953      if ((_base2 = this.options).nullValue == null) {
43954        _base2.nullValue = 0;
43955      }
43956      if ((_base3 = this.options).lazy == null) {
43957        _base3.lazy = false;
43958      }
43959      if (this.options.relativeTo) {
43960        this.relativeToGetter = new Function('ctx', "return ctx." + this.options.relativeTo);
43961      }
43962    }
43963
43964    Pointer.prototype.decode = function(stream, ctx) {
43965      var c, decodeValue, offset, ptr, relative, val;
43966      offset = this.offsetType.decode(stream, ctx);
43967      if (offset === this.options.nullValue && this.options.allowNull) {
43968        return null;
43969      }
43970      relative = (function() {
43971        switch (this.options.type) {
43972          case 'local':
43973            return ctx._startOffset;
43974          case 'immediate':
43975            return stream.pos - this.offsetType.size();
43976          case 'parent':
43977            return ctx.parent._startOffset;
43978          default:
43979            c = ctx;
43980            while (c.parent) {
43981              c = c.parent;
43982            }
43983            return c._startOffset || 0;
43984        }
43985      }).call(this);
43986      if (this.options.relativeTo) {
43987        relative += this.relativeToGetter(ctx);
43988      }
43989      ptr = offset + relative;
43990      if (this.type != null) {
43991        val = null;
43992        decodeValue = (function(_this) {
43993          return function() {
43994            var pos;
43995            if (val != null) {
43996              return val;
43997            }
43998            pos = stream.pos;
43999            stream.pos = ptr;
44000            val = _this.type.decode(stream, ctx);
44001            stream.pos = pos;
44002            return val;
44003          };
44004        })(this);
44005        if (this.options.lazy) {
44006          return new utils.PropertyDescriptor({
44007            get: decodeValue
44008          });
44009        }
44010        return decodeValue();
44011      } else {
44012        return ptr;
44013      }
44014    };
44015
44016    Pointer.prototype.size = function(val, ctx) {
44017      var parent, type;
44018      parent = ctx;
44019      switch (this.options.type) {
44020        case 'local':
44021        case 'immediate':
44022          break;
44023        case 'parent':
44024          ctx = ctx.parent;
44025          break;
44026        default:
44027          while (ctx.parent) {
44028            ctx = ctx.parent;
44029          }
44030      }
44031      type = this.type;
44032      if (type == null) {
44033        if (!(val instanceof VoidPointer)) {
44034          throw new Error("Must be a VoidPointer");
44035        }
44036        type = val.type;
44037        val = val.value;
44038      }
44039      if (val && ctx) {
44040        ctx.pointerSize += type.size(val, parent);
44041      }
44042      return this.offsetType.size();
44043    };
44044
44045    Pointer.prototype.encode = function(stream, val, ctx) {
44046      var parent, relative, type;
44047      parent = ctx;
44048      if (val == null) {
44049        this.offsetType.encode(stream, this.options.nullValue);
44050        return;
44051      }
44052      switch (this.options.type) {
44053        case 'local':
44054          relative = ctx.startOffset;
44055          break;
44056        case 'immediate':
44057          relative = stream.pos + this.offsetType.size(val, parent);
44058          break;
44059        case 'parent':
44060          ctx = ctx.parent;
44061          relative = ctx.startOffset;
44062          break;
44063        default:
44064          relative = 0;
44065          while (ctx.parent) {
44066            ctx = ctx.parent;
44067          }
44068      }
44069      if (this.options.relativeTo) {
44070        relative += this.relativeToGetter(parent.val);
44071      }
44072      this.offsetType.encode(stream, ctx.pointerOffset - relative);
44073      type = this.type;
44074      if (type == null) {
44075        if (!(val instanceof VoidPointer)) {
vendor: 9,594 bytes, lines 44076-44438
44076          throw new Error("Must be a VoidPointer");
44077        }
44078        type = val.type;
44079        val = val.value;
44080      }
44081      ctx.pointers.push({
44082        type: type,
44083        val: val,
44084        parent: parent
44085      });
44086      return ctx.pointerOffset += type.size(val, parent);
44087    };
44088
44089    return Pointer;
44090
44091  })();
44092
44093  VoidPointer = (function() {
44094    function VoidPointer(type, value) {
44095      this.type = type;
44096      this.value = value;
44097    }
44098
44099    return VoidPointer;
44100
44101  })();
44102
44103  exports.Pointer = Pointer;
44104
44105  exports.VoidPointer = VoidPointer;
44106
44107}).call(this);
44108
44109
44110/***/ }),
44111/* 197 */
44112/***/ (function(module, exports, __webpack_require__) {
44113
44114module.exports = { "default": __webpack_require__(198), __esModule: true };
44115
44116/***/ }),
44117/* 198 */
44118/***/ (function(module, exports, __webpack_require__) {
44119
44120__webpack_require__(199);
44121var $Object = __webpack_require__(2).Object;
44122module.exports = function getOwnPropertyDescriptor(it, key) {
44123  return $Object.getOwnPropertyDescriptor(it, key);
44124};
44125
44126
44127/***/ }),
44128/* 199 */
44129/***/ (function(module, exports, __webpack_require__) {
44130
44131// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
44132var toIObject = __webpack_require__(17);
44133var $getOwnPropertyDescriptor = __webpack_require__(57).f;
44134
44135__webpack_require__(59)('getOwnPropertyDescriptor', function () {
44136  return function getOwnPropertyDescriptor(it, key) {
44137    return $getOwnPropertyDescriptor(toIObject(it), key);
44138  };
44139});
44140
44141
44142/***/ }),
44143/* 200 */
44144/***/ (function(module, exports, __webpack_require__) {
44145
44146__webpack_require__(28);
44147__webpack_require__(24);
44148module.exports = __webpack_require__(208);
44149
44150
44151/***/ }),
44152/* 201 */
44153/***/ (function(module, exports, __webpack_require__) {
44154
44155"use strict";
44156
44157var addToUnscopables = __webpack_require__(202);
44158var step = __webpack_require__(98);
44159var Iterators = __webpack_require__(23);
44160var toIObject = __webpack_require__(17);
44161
44162// 22.1.3.4 Array.prototype.entries()
44163// 22.1.3.13 Array.prototype.keys()
44164// 22.1.3.29 Array.prototype.values()
44165// 22.1.3.30 Array.prototype[@@iterator]()
44166module.exports = __webpack_require__(61)(Array, 'Array', function (iterated, kind) {
44167  this._t = toIObject(iterated); // target
44168  this._i = 0;                   // next index
44169  this._k = kind;                // kind
44170// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
44171}, function () {
44172  var O = this._t;
44173  var kind = this._k;
44174  var index = this._i++;
44175  if (!O || index >= O.length) {
44176    this._t = undefined;
44177    return step(1);
44178  }
44179  if (kind == 'keys') return step(0, index);
44180  if (kind == 'values') return step(0, O[index]);
44181  return step(0, [index, O[index]]);
44182}, 'values');
44183
44184// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
44185Iterators.Arguments = Iterators.Array;
44186
44187addToUnscopables('keys');
44188addToUnscopables('values');
44189addToUnscopables('entries');
44190
44191
44192/***/ }),
44193/* 202 */
44194/***/ (function(module, exports) {
44195
44196module.exports = function () { /* empty */ };
44197
44198
44199/***/ }),
44200/* 203 */
44201/***/ (function(module, exports, __webpack_require__) {
44202
44203"use strict";
44204
44205var create = __webpack_require__(36);
44206var descriptor = __webpack_require__(27);
44207var setToStringTag = __webpack_require__(39);
44208var IteratorPrototype = {};
44209
44210// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
44211__webpack_require__(13)(IteratorPrototype, __webpack_require__(4)('iterator'), function () { return this; });
44212
44213module.exports = function (Constructor, NAME, next) {
44214  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
44215  setToStringTag(Constructor, NAME + ' Iterator');
44216};
44217
44218
44219/***/ }),
44220/* 204 */
44221/***/ (function(module, exports, __webpack_require__) {
44222
44223// false -> Array#indexOf
44224// true  -> Array#includes
44225var toIObject = __webpack_require__(17);
44226var toLength = __webpack_require__(37);
44227var toAbsoluteIndex = __webpack_require__(102);
44228module.exports = function (IS_INCLUDES) {
44229  return function ($this, el, fromIndex) {
44230    var O = toIObject($this);
44231    var length = toLength(O.length);
44232    var index = toAbsoluteIndex(fromIndex, length);
44233    var value;
44234    // Array#includes uses SameValueZero equality algorithm
44235    // eslint-disable-next-line no-self-compare
44236    if (IS_INCLUDES && el != el) while (length > index) {
44237      value = O[index++];
44238      // eslint-disable-next-line no-self-compare
44239      if (value != value) return true;
44240    // Array#indexOf ignores holes, Array#includes - not
44241    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
44242      if (O[index] === el) return IS_INCLUDES || index || 0;
44243    } return !IS_INCLUDES && -1;
44244  };
44245};
44246
44247
44248/***/ }),
44249/* 205 */
44250/***/ (function(module, exports, __webpack_require__) {
44251
44252var document = __webpack_require__(10).document;
44253module.exports = document && document.documentElement;
44254
44255
44256/***/ }),
44257/* 206 */
44258/***/ (function(module, exports, __webpack_require__) {
44259
44260// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
44261var has = __webpack_require__(18);
44262var toObject = __webpack_require__(30);
44263var IE_PROTO = __webpack_require__(64)('IE_PROTO');
44264var ObjectProto = Object.prototype;
44265
44266module.exports = Object.getPrototypeOf || function (O) {
44267  O = toObject(O);
44268  if (has(O, IE_PROTO)) return O[IE_PROTO];
44269  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
44270    return O.constructor.prototype;
44271  } return O instanceof Object ? ObjectProto : null;
44272};
44273
44274
44275/***/ }),
44276/* 207 */
44277/***/ (function(module, exports, __webpack_require__) {
44278
44279var toInteger = __webpack_require__(63);
44280var defined = __webpack_require__(56);
44281// true  -> String#at
44282// false -> String#codePointAt
44283module.exports = function (TO_STRING) {
44284  return function (that, pos) {
44285    var s = String(defined(that));
44286    var i = toInteger(pos);
44287    var l = s.length;
44288    var a, b;
44289    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
44290    a = s.charCodeAt(i);
44291    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
44292      ? TO_STRING ? s.charAt(i) : a
44293      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
44294  };
44295};
44296
44297
44298/***/ }),
44299/* 208 */
44300/***/ (function(module, exports, __webpack_require__) {
44301
44302var anObject = __webpack_require__(14);
44303var get = __webpack_require__(67);
44304module.exports = __webpack_require__(2).getIterator = function (it) {
44305  var iterFn = get(it);
44306  if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');
44307  return anObject(iterFn.call(it));
44308};
44309
44310
44311/***/ }),
44312/* 209 */
44313/***/ (function(module, exports, __webpack_require__) {
44314
44315module.exports = { "default": __webpack_require__(210), __esModule: true };
44316
44317/***/ }),
44318/* 210 */
44319/***/ (function(module, exports, __webpack_require__) {
44320
44321__webpack_require__(211);
44322module.exports = __webpack_require__(2).Object.freeze;
44323
44324
44325/***/ }),
44326/* 211 */
44327/***/ (function(module, exports, __webpack_require__) {
44328
44329// 19.1.2.5 Object.freeze(O)
44330var isObject = __webpack_require__(9);
44331var meta = __webpack_require__(40).onFreeze;
44332
44333__webpack_require__(59)('freeze', function ($freeze) {
44334  return function freeze(it) {
44335    return $freeze && isObject(it) ? $freeze(meta(it)) : it;
44336  };
44337});
44338
44339
44340/***/ }),
44341/* 212 */
44342/***/ (function(module, exports, __webpack_require__) {
44343
44344module.exports = { "default": __webpack_require__(213), __esModule: true };
44345
44346/***/ }),
44347/* 213 */
44348/***/ (function(module, exports, __webpack_require__) {
44349
44350__webpack_require__(214);
44351module.exports = __webpack_require__(2).Object.keys;
44352
44353
44354/***/ }),
44355/* 214 */
44356/***/ (function(module, exports, __webpack_require__) {
44357
44358// 19.1.2.14 Object.keys(O)
44359var toObject = __webpack_require__(30);
44360var $keys = __webpack_require__(29);
44361
44362__webpack_require__(59)('keys', function () {
44363  return function keys(it) {
44364    return $keys(toObject(it));
44365  };
44366});
44367
44368
44369/***/ }),
44370/* 215 */
44371/***/ (function(module, exports, __webpack_require__) {
44372
44373__webpack_require__(24);
44374__webpack_require__(28);
44375module.exports = __webpack_require__(70).f('iterator');
44376
44377
44378/***/ }),
44379/* 216 */
44380/***/ (function(module, exports, __webpack_require__) {
44381
44382module.exports = { "default": __webpack_require__(217), __esModule: true };
44383
44384/***/ }),
44385/* 217 */
44386/***/ (function(module, exports, __webpack_require__) {
44387
44388__webpack_require__(218);
44389__webpack_require__(73);
44390__webpack_require__(221);
44391__webpack_require__(222);
44392module.exports = __webpack_require__(2).Symbol;
44393
44394
44395/***/ }),
44396/* 218 */
44397/***/ (function(module, exports, __webpack_require__) {
44398
44399"use strict";
44400
44401// ECMAScript 6 symbols shim
44402var global = __webpack_require__(10);
44403var has = __webpack_require__(18);
44404var DESCRIPTORS = __webpack_require__(5);
44405var $export = __webpack_require__(3);
44406var redefine = __webpack_require__(99);
44407var META = __webpack_require__(40).KEY;
44408var $fails = __webpack_require__(19);
44409var shared = __webpack_require__(65);
44410var setToStringTag = __webpack_require__(39);
44411var uid = __webpack_require__(38);
44412var wks = __webpack_require__(4);
44413var wksExt = __webpack_require__(70);
44414var wksDefine = __webpack_require__(71);
44415var enumKeys = __webpack_require__(219);
44416var isArray = __webpack_require__(104);
44417var anObject = __webpack_require__(14);
44418var isObject = __webpack_require__(9);
44419var toIObject = __webpack_require__(17);
44420var toPrimitive = __webpack_require__(58);
44421var createDesc = __webpack_require__(27);
44422var _create = __webpack_require__(36);
44423var gOPNExt = __webpack_require__(220);
44424var $GOPD = __webpack_require__(57);
44425var $DP = __webpack_require__(6);
44426var $keys = __webpack_require__(29);
44427var gOPD = $GOPD.f;
44428var dP = $DP.f;
44429var gOPN = gOPNExt.f;
44430var $Symbol = global.Symbol;
44431var $JSON = global.JSON;
44432var _stringify = $JSON && $JSON.stringify;
44433var PROTOTYPE = 'prototype';
44434var HIDDEN = wks('_hidden');
44435var TO_PRIMITIVE = wks('toPrimitive');
44436var isEnum = {}.propertyIsEnumerable;
44437var SymbolRegistry = shared('symbol-registry');
44438var AllSymbols = shared('symbols');
vendor: 9,267 bytes, lines 44439-44710
44439var OPSymbols = shared('op-symbols');
44440var ObjectProto = Object[PROTOTYPE];
44441var USE_NATIVE = typeof $Symbol == 'function';
44442var QObject = global.QObject;
44443// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
44444var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
44445
44446// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
44447var setSymbolDesc = DESCRIPTORS && $fails(function () {
44448  return _create(dP({}, 'a', {
44449    get: function () { return dP(this, 'a', { value: 7 }).a; }
44450  })).a != 7;
44451}) ? function (it, key, D) {
44452  var protoDesc = gOPD(ObjectProto, key);
44453  if (protoDesc) delete ObjectProto[key];
44454  dP(it, key, D);
44455  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
44456} : dP;
44457
44458var wrap = function (tag) {
44459  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
44460  sym._k = tag;
44461  return sym;
44462};
44463
44464var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
44465  return typeof it == 'symbol';
44466} : function (it) {
44467  return it instanceof $Symbol;
44468};
44469
44470var $defineProperty = function defineProperty(it, key, D) {
44471  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
44472  anObject(it);
44473  key = toPrimitive(key, true);
44474  anObject(D);
44475  if (has(AllSymbols, key)) {
44476    if (!D.enumerable) {
44477      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
44478      it[HIDDEN][key] = true;
44479    } else {
44480      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
44481      D = _create(D, { enumerable: createDesc(0, false) });
44482    } return setSymbolDesc(it, key, D);
44483  } return dP(it, key, D);
44484};
44485var $defineProperties = function defineProperties(it, P) {
44486  anObject(it);
44487  var keys = enumKeys(P = toIObject(P));
44488  var i = 0;
44489  var l = keys.length;
44490  var key;
44491  while (l > i) $defineProperty(it, key = keys[i++], P[key]);
44492  return it;
44493};
44494var $create = function create(it, P) {
44495  return P === undefined ? _create(it) : $defineProperties(_create(it), P);
44496};
44497var $propertyIsEnumerable = function propertyIsEnumerable(key) {
44498  var E = isEnum.call(this, key = toPrimitive(key, true));
44499  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
44500  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
44501};
44502var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
44503  it = toIObject(it);
44504  key = toPrimitive(key, true);
44505  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
44506  var D = gOPD(it, key);
44507  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
44508  return D;
44509};
44510var $getOwnPropertyNames = function getOwnPropertyNames(it) {
44511  var names = gOPN(toIObject(it));
44512  var result = [];
44513  var i = 0;
44514  var key;
44515  while (names.length > i) {
44516    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
44517  } return result;
44518};
44519var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
44520  var IS_OP = it === ObjectProto;
44521  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
44522  var result = [];
44523  var i = 0;
44524  var key;
44525  while (names.length > i) {
44526    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
44527  } return result;
44528};
44529
44530// 19.4.1.1 Symbol([description])
44531if (!USE_NATIVE) {
44532  $Symbol = function Symbol() {
44533    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
44534    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
44535    var $set = function (value) {
44536      if (this === ObjectProto) $set.call(OPSymbols, value);
44537      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
44538      setSymbolDesc(this, tag, createDesc(1, value));
44539    };
44540    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
44541    return wrap(tag);
44542  };
44543  redefine($Symbol[PROTOTYPE], 'toString', function toString() {
44544    return this._k;
44545  });
44546
44547  $GOPD.f = $getOwnPropertyDescriptor;
44548  $DP.f = $defineProperty;
44549  __webpack_require__(105).f = gOPNExt.f = $getOwnPropertyNames;
44550  __webpack_require__(35).f = $propertyIsEnumerable;
44551  __webpack_require__(72).f = $getOwnPropertySymbols;
44552
44553  if (DESCRIPTORS && !__webpack_require__(62)) {
44554    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
44555  }
44556
44557  wksExt.f = function (name) {
44558    return wrap(wks(name));
44559  };
44560}
44561
44562$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
44563
44564for (var es6Symbols = (
44565  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
44566  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
44567).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
44568
44569for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
44570
44571$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
44572  // 19.4.2.1 Symbol.for(key)
44573  'for': function (key) {
44574    return has(SymbolRegistry, key += '')
44575      ? SymbolRegistry[key]
44576      : SymbolRegistry[key] = $Symbol(key);
44577  },
44578  // 19.4.2.5 Symbol.keyFor(sym)
44579  keyFor: function keyFor(sym) {
44580    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
44581    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
44582  },
44583  useSetter: function () { setter = true; },
44584  useSimple: function () { setter = false; }
44585});
44586
44587$export($export.S + $export.F * !USE_NATIVE, 'Object', {
44588  // 19.1.2.2 Object.create(O [, Properties])
44589  create: $create,
44590  // 19.1.2.4 Object.defineProperty(O, P, Attributes)
44591  defineProperty: $defineProperty,
44592  // 19.1.2.3 Object.defineProperties(O, Properties)
44593  defineProperties: $defineProperties,
44594  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
44595  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
44596  // 19.1.2.7 Object.getOwnPropertyNames(O)
44597  getOwnPropertyNames: $getOwnPropertyNames,
44598  // 19.1.2.8 Object.getOwnPropertySymbols(O)
44599  getOwnPropertySymbols: $getOwnPropertySymbols
44600});
44601
44602// 24.3.2 JSON.stringify(value [, replacer [, space]])
44603$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
44604  var S = $Symbol();
44605  // MS Edge converts symbol values to JSON as {}
44606  // WebKit converts symbol values to JSON as null
44607  // V8 throws on boxed symbols
44608  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
44609})), 'JSON', {
44610  stringify: function stringify(it) {
44611    var args = [it];
44612    var i = 1;
44613    var replacer, $replacer;
44614    while (arguments.length > i) args.push(arguments[i++]);
44615    $replacer = replacer = args[1];
44616    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
44617    if (!isArray(replacer)) replacer = function (key, value) {
44618      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
44619      if (!isSymbol(value)) return value;
44620    };
44621    args[1] = replacer;
44622    return _stringify.apply($JSON, args);
44623  }
44624});
44625
44626// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
44627$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(13)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
44628// 19.4.3.5 Symbol.prototype[@@toStringTag]
44629setToStringTag($Symbol, 'Symbol');
44630// 20.2.1.9 Math[@@toStringTag]
44631setToStringTag(Math, 'Math', true);
44632// 24.3.3 JSON[@@toStringTag]
44633setToStringTag(global.JSON, 'JSON', true);
44634
44635
44636/***/ }),
44637/* 219 */
44638/***/ (function(module, exports, __webpack_require__) {
44639
44640// all enumerable object keys, includes symbols
44641var getKeys = __webpack_require__(29);
44642var gOPS = __webpack_require__(72);
44643var pIE = __webpack_require__(35);
44644module.exports = function (it) {
44645  var result = getKeys(it);
44646  var getSymbols = gOPS.f;
44647  if (getSymbols) {
44648    var symbols = getSymbols(it);
44649    var isEnum = pIE.f;
44650    var i = 0;
44651    var key;
44652    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
44653  } return result;
44654};
44655
44656
44657/***/ }),
44658/* 220 */
44659/***/ (function(module, exports, __webpack_require__) {
44660
44661// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
44662var toIObject = __webpack_require__(17);
44663var gOPN = __webpack_require__(105).f;
44664var toString = {}.toString;
44665
44666var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
44667  ? Object.getOwnPropertyNames(window) : [];
44668
44669var getWindowNames = function (it) {
44670  try {
44671    return gOPN(it);
44672  } catch (e) {
44673    return windowNames.slice();
44674  }
44675};
44676
44677module.exports.f = function getOwnPropertyNames(it) {
44678  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
44679};
44680
44681
44682/***/ }),
44683/* 221 */
44684/***/ (function(module, exports, __webpack_require__) {
44685
44686__webpack_require__(71)('asyncIterator');
44687
44688
44689/***/ }),
44690/* 222 */
44691/***/ (function(module, exports, __webpack_require__) {
44692
44693__webpack_require__(71)('observable');
44694
44695
44696/***/ }),
44697/* 223 */
44698/***/ (function(module, exports, __webpack_require__) {
44699
44700__webpack_require__(224);
44701var $Object = __webpack_require__(2).Object;
44702module.exports = function defineProperty(it, key, desc) {
44703  return $Object.defineProperty(it, key, desc);
44704};
44705
44706
44707/***/ }),
44708/* 224 */
44709/***/ (function(module, exports, __webpack_require__) {
44710
vendor: 4,456 bytes, lines 44711-44871
44711var $export = __webpack_require__(3);
44712// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
44713$export($export.S + $export.F * !__webpack_require__(5), 'Object', { defineProperty: __webpack_require__(6).f });
44714
44715
44716/***/ }),
44717/* 225 */
44718/***/ (function(module, exports, __webpack_require__) {
44719
44720module.exports = { "default": __webpack_require__(226), __esModule: true };
44721
44722/***/ }),
44723/* 226 */
44724/***/ (function(module, exports, __webpack_require__) {
44725
44726__webpack_require__(73);
44727__webpack_require__(24);
44728__webpack_require__(28);
44729__webpack_require__(227);
44730__webpack_require__(232);
44731__webpack_require__(234);
44732__webpack_require__(235);
44733module.exports = __webpack_require__(2).Map;
44734
44735
44736/***/ }),
44737/* 227 */
44738/***/ (function(module, exports, __webpack_require__) {
44739
44740"use strict";
44741
44742var strong = __webpack_require__(108);
44743var validate = __webpack_require__(75);
44744var MAP = 'Map';
44745
44746// 23.1 Map Objects
44747module.exports = __webpack_require__(113)(MAP, function (get) {
44748  return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
44749}, {
44750  // 23.1.3.6 Map.prototype.get(key)
44751  get: function get(key) {
44752    var entry = strong.getEntry(validate(this, MAP), key);
44753    return entry && entry.v;
44754  },
44755  // 23.1.3.9 Map.prototype.set(key, value)
44756  set: function set(key, value) {
44757    return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);
44758  }
44759}, strong, true);
44760
44761
44762/***/ }),
44763/* 228 */
44764/***/ (function(module, exports, __webpack_require__) {
44765
44766"use strict";
44767
44768var global = __webpack_require__(10);
44769var core = __webpack_require__(2);
44770var dP = __webpack_require__(6);
44771var DESCRIPTORS = __webpack_require__(5);
44772var SPECIES = __webpack_require__(4)('species');
44773
44774module.exports = function (KEY) {
44775  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];
44776  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
44777    configurable: true,
44778    get: function () { return this; }
44779  });
44780};
44781
44782
44783/***/ }),
44784/* 229 */
44785/***/ (function(module, exports, __webpack_require__) {
44786
44787// 0 -> Array#forEach
44788// 1 -> Array#map
44789// 2 -> Array#filter
44790// 3 -> Array#some
44791// 4 -> Array#every
44792// 5 -> Array#find
44793// 6 -> Array#findIndex
44794var ctx = __webpack_require__(20);
44795var IObject = __webpack_require__(54);
44796var toObject = __webpack_require__(30);
44797var toLength = __webpack_require__(37);
44798var asc = __webpack_require__(230);
44799module.exports = function (TYPE, $create) {
44800  var IS_MAP = TYPE == 1;
44801  var IS_FILTER = TYPE == 2;
44802  var IS_SOME = TYPE == 3;
44803  var IS_EVERY = TYPE == 4;
44804  var IS_FIND_INDEX = TYPE == 6;
44805  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
44806  var create = $create || asc;
44807  return function ($this, callbackfn, that) {
44808    var O = toObject($this);
44809    var self = IObject(O);
44810    var f = ctx(callbackfn, that, 3);
44811    var length = toLength(self.length);
44812    var index = 0;
44813    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
44814    var val, res;
44815    for (;length > index; index++) if (NO_HOLES || index in self) {
44816      val = self[index];
44817      res = f(val, index, O);
44818      if (TYPE) {
44819        if (IS_MAP) result[index] = res;   // map
44820        else if (res) switch (TYPE) {
44821          case 3: return true;             // some
44822          case 5: return val;              // find
44823          case 6: return index;            // findIndex
44824          case 2: result.push(val);        // filter
44825        } else if (IS_EVERY) return false; // every
44826      }
44827    }
44828    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
44829  };
44830};
44831
44832
44833/***/ }),
44834/* 230 */
44835/***/ (function(module, exports, __webpack_require__) {
44836
44837// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
44838var speciesConstructor = __webpack_require__(231);
44839
44840module.exports = function (original, length) {
44841  return new (speciesConstructor(original))(length);
44842};
44843
44844
44845/***/ }),
44846/* 231 */
44847/***/ (function(module, exports, __webpack_require__) {
44848
44849var isObject = __webpack_require__(9);
44850var isArray = __webpack_require__(104);
44851var SPECIES = __webpack_require__(4)('species');
44852
44853module.exports = function (original) {
44854  var C;
44855  if (isArray(original)) {
44856    C = original.constructor;
44857    // cross-realm fallback
44858    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
44859    if (isObject(C)) {
44860      C = C[SPECIES];
44861      if (C === null) C = undefined;
44862    }
44863  } return C === undefined ? Array : C;
44864};
44865
44866
44867/***/ }),
44868/* 232 */
44869/***/ (function(module, exports, __webpack_require__) {
44870
44871// https://github.com/DavidBruant/Map-Set.prototype.toJSON
vendor: 4,505 bytes, lines 44872-45042
44872var $export = __webpack_require__(3);
44873
44874$export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(114)('Map') });
44875
44876
44877/***/ }),
44878/* 233 */
44879/***/ (function(module, exports, __webpack_require__) {
44880
44881var forOf = __webpack_require__(41);
44882
44883module.exports = function (iter, ITERATOR) {
44884  var result = [];
44885  forOf(iter, false, result.push, result, ITERATOR);
44886  return result;
44887};
44888
44889
44890/***/ }),
44891/* 234 */
44892/***/ (function(module, exports, __webpack_require__) {
44893
44894// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of
44895__webpack_require__(115)('Map');
44896
44897
44898/***/ }),
44899/* 235 */
44900/***/ (function(module, exports, __webpack_require__) {
44901
44902// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from
44903__webpack_require__(116)('Map');
44904
44905
44906/***/ }),
44907/* 236 */
44908/***/ (function(module, exports, __webpack_require__) {
44909
44910"use strict";
44911
44912
44913exports.__esModule = true;
44914
44915var _typeof2 = __webpack_require__(69);
44916
44917var _typeof3 = _interopRequireDefault(_typeof2);
44918
44919function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
44920
44921exports.default = function (self, call) {
44922  if (!self) {
44923    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
44924  }
44925
44926  return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3.default)(call)) === "object" || typeof call === "function") ? call : self;
44927};
44928
44929/***/ }),
44930/* 237 */
44931/***/ (function(module, exports, __webpack_require__) {
44932
44933"use strict";
44934
44935
44936exports.__esModule = true;
44937
44938var _setPrototypeOf = __webpack_require__(238);
44939
44940var _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);
44941
44942var _create = __webpack_require__(242);
44943
44944var _create2 = _interopRequireDefault(_create);
44945
44946var _typeof2 = __webpack_require__(69);
44947
44948var _typeof3 = _interopRequireDefault(_typeof2);
44949
44950function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
44951
44952exports.default = function (subClass, superClass) {
44953  if (typeof superClass !== "function" && superClass !== null) {
44954    throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : (0, _typeof3.default)(superClass)));
44955  }
44956
44957  subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {
44958    constructor: {
44959      value: subClass,
44960      enumerable: false,
44961      writable: true,
44962      configurable: true
44963    }
44964  });
44965  if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;
44966};
44967
44968/***/ }),
44969/* 238 */
44970/***/ (function(module, exports, __webpack_require__) {
44971
44972module.exports = { "default": __webpack_require__(239), __esModule: true };
44973
44974/***/ }),
44975/* 239 */
44976/***/ (function(module, exports, __webpack_require__) {
44977
44978__webpack_require__(240);
44979module.exports = __webpack_require__(2).Object.setPrototypeOf;
44980
44981
44982/***/ }),
44983/* 240 */
44984/***/ (function(module, exports, __webpack_require__) {
44985
44986// 19.1.3.19 Object.setPrototypeOf(O, proto)
44987var $export = __webpack_require__(3);
44988$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(241).set });
44989
44990
44991/***/ }),
44992/* 241 */
44993/***/ (function(module, exports, __webpack_require__) {
44994
44995// Works with __proto__ only. Old v8 can't work with null proto objects.
44996/* eslint-disable no-proto */
44997var isObject = __webpack_require__(9);
44998var anObject = __webpack_require__(14);
44999var check = function (O, proto) {
45000  anObject(O);
45001  if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
45002};
45003module.exports = {
45004  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
45005    function (test, buggy, set) {
45006      try {
45007        set = __webpack_require__(20)(Function.call, __webpack_require__(57).f(Object.prototype, '__proto__').set, 2);
45008        set(test, []);
45009        buggy = !(test instanceof Array);
45010      } catch (e) { buggy = true; }
45011      return function setPrototypeOf(O, proto) {
45012        check(O, proto);
45013        if (buggy) O.__proto__ = proto;
45014        else set(O, proto);
45015        return O;
45016      };
45017    }({}, false) : undefined),
45018  check: check
45019};
45020
45021
45022/***/ }),
45023/* 242 */
45024/***/ (function(module, exports, __webpack_require__) {
45025
45026module.exports = { "default": __webpack_require__(243), __esModule: true };
45027
45028/***/ }),
45029/* 243 */
45030/***/ (function(module, exports, __webpack_require__) {
45031
45032__webpack_require__(244);
45033var $Object = __webpack_require__(2).Object;
45034module.exports = function create(P, D) {
45035  return $Object.create(P, D);
45036};
45037
45038
45039/***/ }),
45040/* 244 */
45041/***/ (function(module, exports, __webpack_require__) {
45042
45043var $export = __webpack_require__(3);
45044// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
45045$export($export.S, 'Object', { create: __webpack_require__(36) });
45046
45047
45048/***/ }),
45049/* 245 */
45050/***/ (function(module, exports, __webpack_require__) {
45051
45052module.exports = { "default": __webpack_require__(246), __esModule: true };
45053
45054/***/ }),
45055/* 246 */
45056/***/ (function(module, exports, __webpack_require__) {
45057
45058__webpack_require__(247);
45059var $Object = __webpack_require__(2).Object;
45060module.exports = function defineProperties(T, D) {
45061  return $Object.defineProperties(T, D);
45062};
45063
45064
45065/***/ }),
45066/* 247 */
45067/***/ (function(module, exports, __webpack_require__) {
45068
45069var $export = __webpack_require__(3);
45070// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)
45071$export($export.S + $export.F * !__webpack_require__(5), 'Object', { defineProperties: __webpack_require__(100) });
45072
45073
45074/***/ }),
45075/* 248 */
45076/***/ (function(module, exports, __webpack_require__) {
45077
45078var pSlice = Array.prototype.slice;
45079var objectKeys = __webpack_require__(249);
45080var isArguments = __webpack_require__(250);
45081
45082var deepEqual = module.exports = function (actual, expected, opts) {
45083  if (!opts) opts = {};
45084  // 7.1. All identical values are equivalent, as determined by ===.
45085  if (actual === expected) {
45086    return true;
45087
45088  } else if (actual instanceof Date && expected instanceof Date) {
45089    return actual.getTime() === expected.getTime();
45090
45091  // 7.3. Other pairs that do not both pass typeof value == 'object',
45092  // equivalence is determined by ==.
45093  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {
45094    return opts.strict ? actual === expected : actual == expected;
45095
45096  // 7.4. For all other Object pairs, including Array objects, equivalence is
45097  // determined by having the same number of owned properties (as verified
45098  // with Object.prototype.hasOwnProperty.call), the same set of keys
45099  // (although not necessarily the same order), equivalent values for every
45100  // corresponding key, and an identical 'prototype' property. Note: this
45101  // accounts for both named and indexed properties on Arrays.
45102  } else {
45103    return objEquiv(actual, expected, opts);
45104  }
45105}
45106
45107function isUndefinedOrNull(value) {
45108  return value === null || value === undefined;
45109}
45110
45111function isBuffer (x) {
45112  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;
45113  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {
45114    return false;
45115  }
45116  if (x.length > 0 && typeof x[0] !== 'number') return false;
45117  return true;
45118}
45119
45120function objEquiv(a, b, opts) {
45121  var i, key;
45122  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
45123    return false;
45124  // an identical 'prototype' property.
45125  if (a.prototype !== b.prototype) return false;
45126  //~~~I've managed to break Object.keys through screwy arguments passing.
45127  //   Converting to array solves the problem.
45128  if (isArguments(a)) {
45129    if (!isArguments(b)) {
45130      return false;
45131    }
45132    a = pSlice.call(a);
45133    b = pSlice.call(b);
45134    return deepEqual(a, b, opts);
45135  }
45136  if (isBuffer(a)) {
45137    if (!isBuffer(b)) {
45138      return false;
45139    }
45140    if (a.length !== b.length) return false;
45141    for (i = 0; i < a.length; i++) {
45142      if (a[i] !== b[i]) return false;
45143    }
45144    return true;
45145  }
45146  try {
45147    var ka = objectKeys(a),
45148        kb = objectKeys(b);
45149  } catch (e) {//happens when one is a string literal and the other isn't
45150    return false;
45151  }
45152  // having the same number of owned properties (keys incorporates
45153  // hasOwnProperty)
45154  if (ka.length != kb.length)
45155    return false;
45156  //the same set of keys (although not necessarily the same order),
45157  ka.sort();
45158  kb.sort();
45159  //~~~cheap key test
45160  for (i = ka.length - 1; i >= 0; i--) {
45161    if (ka[i] != kb[i])
45162      return false;
45163  }
45164  //equivalent values for every corresponding key, and
45165  //~~~possibly expensive deep test
45166  for (i = ka.length - 1; i >= 0; i--) {
45167    key = ka[i];
45168    if (!deepEqual(a[key], b[key], opts)) return false;
45169  }
45170  return typeof a === typeof b;
45171}
45172
45173
45174/***/ }),
45175/* 249 */
45176/***/ (function(module, exports) {
45177
45178exports = module.exports = typeof Object.keys === 'function'
45179  ? Object.keys : shim;
45180
45181exports.shim = shim;
45182function shim (obj) {
45183  var keys = [];
45184  for (var key in obj) keys.push(key);
45185  return keys;
45186}
45187
45188
45189/***/ }),
45190/* 250 */
45191/***/ (function(module, exports) {
45192
45193var supportsArgumentsClass = (function(){
45194  return Object.prototype.toString.call(arguments)
45195})() == '[object Arguments]';
45196
45197exports = module.exports = supportsArgumentsClass ? supported : unsupported;
45198
45199exports.supported = supported;
45200function supported(object) {
45201  return Object.prototype.toString.call(object) == '[object Arguments]';
45202};
45203
45204exports.unsupported = unsupported;
45205function unsupported(object){
45206  return object &&
45207    typeof object == 'object' &&
45208    typeof object.length == 'number' &&
45209    Object.prototype.hasOwnProperty.call(object, 'callee') &&
45210    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||
45211    false;
45212};
45213
45214
45215/***/ }),
45216/* 251 */
45217/***/ (function(module, exports, __webpack_require__) {
45218
45219module.exports = { "default": __webpack_require__(252), __esModule: true };
45220
45221/***/ }),
45222/* 252 */
45223/***/ (function(module, exports, __webpack_require__) {
45224
45225__webpack_require__(253);
45226module.exports = __webpack_require__(2).Object.assign;
45227
45228
45229/***/ }),
45230/* 253 */
45231/***/ (function(module, exports, __webpack_require__) {
45232
45233// 19.1.3.1 Object.assign(target, source)
45234var $export = __webpack_require__(3);
45235
45236$export($export.S + $export.F, 'Object', { assign: __webpack_require__(254) });
45237
45238
45239/***/ }),
45240/* 254 */
45241/***/ (function(module, exports, __webpack_require__) {
45242
45243"use strict";
45244
45245// 19.1.2.1 Object.assign(target, source, ...)
45246var getKeys = __webpack_require__(29);
45247var gOPS = __webpack_require__(72);
45248var pIE = __webpack_require__(35);
45249var toObject = __webpack_require__(30);
45250var IObject = __webpack_require__(54);
45251var $assign = Object.assign;
45252
45253// should work with symbols and should have deterministic property order (V8 bug)
45254module.exports = !$assign || __webpack_require__(19)(function () {
45255  var A = {};
45256  var B = {};
45257  // eslint-disable-next-line no-undef
45258  var S = Symbol();
45259  var K = 'abcdefghijklmnopqrst';
45260  A[S] = 7;
45261  K.split('').forEach(function (k) { B[k] = k; });
45262  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
45263}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
45264  var T = toObject(target);
45265  var aLen = arguments.length;
45266  var index = 1;
45267  var getSymbols = gOPS.f;
45268  var isEnum = pIE.f;
45269  while (aLen > index) {
45270    var S = IObject(arguments[index++]);
45271    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
45272    var length = keys.length;
45273    var j = 0;
45274    var key;
45275    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];
45276  } return T;
45277} : $assign;
45278
45279
45280/***/ }),
45281/* 255 */
45282/***/ (function(module, exports, __webpack_require__) {
45283
45284module.exports = { "default": __webpack_require__(256), __esModule: true };
45285
45286/***/ }),
45287/* 256 */
45288/***/ (function(module, exports, __webpack_require__) {
45289
45290__webpack_require__(257);
45291module.exports = __webpack_require__(2).String.fromCodePoint;
45292
45293
45294/***/ }),
45295/* 257 */
45296/***/ (function(module, exports, __webpack_require__) {
45297
45298var $export = __webpack_require__(3);
45299var toAbsoluteIndex = __webpack_require__(102);
45300var fromCharCode = String.fromCharCode;
45301var $fromCodePoint = String.fromCodePoint;
45302
45303// length should be 1, old FF problem
45304$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
45305  // 21.1.2.2 String.fromCodePoint(...codePoints)
45306  fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars
45307    var res = [];
45308    var aLen = arguments.length;
45309    var i = 0;
45310    var code;
45311    while (aLen > i) {
45312      code = +arguments[i++];
45313      if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');
45314      res.push(code < 0x10000
45315        ? fromCharCode(code)
45316        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)
45317      );
45318    } return res.join('');
45319  }
45320});
45321
45322
45323/***/ }),
45324/* 258 */
45325/***/ (function(module, exports, __webpack_require__) {
45326
45327module.exports = { "default": __webpack_require__(259), __esModule: true };
45328
45329/***/ }),
45330/* 259 */
45331/***/ (function(module, exports, __webpack_require__) {
45332
45333__webpack_require__(24);
45334__webpack_require__(260);
45335module.exports = __webpack_require__(2).Array.from;
45336
45337
45338/***/ }),
45339/* 260 */
45340/***/ (function(module, exports, __webpack_require__) {
45341
45342"use strict";
45343
45344var ctx = __webpack_require__(20);
vendor: 4,084 bytes, lines 45345-45483
45345var $export = __webpack_require__(3);
45346var toObject = __webpack_require__(30);
45347var call = __webpack_require__(111);
45348var isArrayIter = __webpack_require__(112);
45349var toLength = __webpack_require__(37);
45350var createProperty = __webpack_require__(261);
45351var getIterFn = __webpack_require__(67);
45352
45353$export($export.S + $export.F * !__webpack_require__(262)(function (iter) { Array.from(iter); }), 'Array', {
45354  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
45355  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
45356    var O = toObject(arrayLike);
45357    var C = typeof this == 'function' ? this : Array;
45358    var aLen = arguments.length;
45359    var mapfn = aLen > 1 ? arguments[1] : undefined;
45360    var mapping = mapfn !== undefined;
45361    var index = 0;
45362    var iterFn = getIterFn(O);
45363    var length, result, step, iterator;
45364    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
45365    // if object isn't iterable or it's array with default iterator - use simple case
45366    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {
45367      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {
45368        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
45369      }
45370    } else {
45371      length = toLength(O.length);
45372      for (result = new C(length); length > index; index++) {
45373        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
45374      }
45375    }
45376    result.length = index;
45377    return result;
45378  }
45379});
45380
45381
45382/***/ }),
45383/* 261 */
45384/***/ (function(module, exports, __webpack_require__) {
45385
45386"use strict";
45387
45388var $defineProperty = __webpack_require__(6);
45389var createDesc = __webpack_require__(27);
45390
45391module.exports = function (object, index, value) {
45392  if (index in object) $defineProperty.f(object, index, createDesc(0, value));
45393  else object[index] = value;
45394};
45395
45396
45397/***/ }),
45398/* 262 */
45399/***/ (function(module, exports, __webpack_require__) {
45400
45401var ITERATOR = __webpack_require__(4)('iterator');
45402var SAFE_CLOSING = false;
45403
45404try {
45405  var riter = [7][ITERATOR]();
45406  riter['return'] = function () { SAFE_CLOSING = true; };
45407  // eslint-disable-next-line no-throw-literal
45408  Array.from(riter, function () { throw 2; });
45409} catch (e) { /* empty */ }
45410
45411module.exports = function (exec, skipClosing) {
45412  if (!skipClosing && !SAFE_CLOSING) return false;
45413  var safe = false;
45414  try {
45415    var arr = [7];
45416    var iter = arr[ITERATOR]();
45417    iter.next = function () { return { done: safe = true }; };
45418    arr[ITERATOR] = function () { return iter; };
45419    exec(arr);
45420  } catch (e) { /* empty */ }
45421  return safe;
45422};
45423
45424
45425/***/ }),
45426/* 263 */
45427/***/ (function(module, exports, __webpack_require__) {
45428
45429module.exports = { "default": __webpack_require__(264), __esModule: true };
45430
45431/***/ }),
45432/* 264 */
45433/***/ (function(module, exports, __webpack_require__) {
45434
45435__webpack_require__(73);
45436__webpack_require__(24);
45437__webpack_require__(28);
45438__webpack_require__(265);
45439__webpack_require__(266);
45440__webpack_require__(267);
45441__webpack_require__(268);
45442module.exports = __webpack_require__(2).Set;
45443
45444
45445/***/ }),
45446/* 265 */
45447/***/ (function(module, exports, __webpack_require__) {
45448
45449"use strict";
45450
45451var strong = __webpack_require__(108);
45452var validate = __webpack_require__(75);
45453var SET = 'Set';
45454
45455// 23.2 Set Objects
45456module.exports = __webpack_require__(113)(SET, function (get) {
45457  return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
45458}, {
45459  // 23.2.3.1 Set.prototype.add(value)
45460  add: function add(value) {
45461    return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);
45462  }
45463}, strong);
45464
45465
45466/***/ }),
45467/* 266 */
45468/***/ (function(module, exports, __webpack_require__) {
45469
45470// https://github.com/DavidBruant/Map-Set.prototype.toJSON
45471var $export = __webpack_require__(3);
45472
45473$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(114)('Set') });
45474
45475
45476/***/ }),
45477/* 267 */
45478/***/ (function(module, exports, __webpack_require__) {
45479
45480// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of
45481__webpack_require__(115)('Set');
45482
45483
45484/***/ }),
45485/* 268 */
45486/***/ (function(module, exports, __webpack_require__) {
45487
45488// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from
45489__webpack_require__(116)('Set');
45490
45491
45492/***/ }),
45493/* 269 */
45494/***/ (function(module, exports, __webpack_require__) {
45495
45496/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.9.1
45497var CATEGORY_BITS, CATEGORY_MASK, CATEGORY_SHIFT, COMBINING_BITS, COMBINING_MASK, COMBINING_SHIFT, EAW_BITS, EAW_MASK, EAW_SHIFT, NUMBER_BITS, NUMBER_MASK, SCRIPT_BITS, SCRIPT_MASK, SCRIPT_SHIFT, UnicodeTrie, bits, data, fs, log2, trie;
45498
45499UnicodeTrie = __webpack_require__(43);
45500
45501data = __webpack_require__(270);
45502
45503
45504
45505trie = new UnicodeTrie(Buffer("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","base64"));
45506
45507log2 = Math.log2 || function(n) {
45508  return Math.log(n) / Math.LN2;
45509};
45510
45511bits = function(n) {
45512  return (log2(n) + 1) | 0;
45513};
45514
45515CATEGORY_BITS = bits(data.categories.length - 1);
45516
45517COMBINING_BITS = bits(data.combiningClasses.length - 1);
45518
45519SCRIPT_BITS = bits(data.scripts.length - 1);
45520
45521EAW_BITS = bits(data.eaw.length - 1);
45522
45523NUMBER_BITS = 10;
45524
45525CATEGORY_SHIFT = COMBINING_BITS + SCRIPT_BITS + EAW_BITS + NUMBER_BITS;
45526
45527COMBINING_SHIFT = SCRIPT_BITS + EAW_BITS + NUMBER_BITS;
45528
45529SCRIPT_SHIFT = EAW_BITS + NUMBER_BITS;
45530
45531EAW_SHIFT = NUMBER_BITS;
45532
45533CATEGORY_MASK = (1 << CATEGORY_BITS) - 1;
45534
45535COMBINING_MASK = (1 << COMBINING_BITS) - 1;
45536
45537SCRIPT_MASK = (1 << SCRIPT_BITS) - 1;
45538
45539EAW_MASK = (1 << EAW_BITS) - 1;
45540
45541NUMBER_MASK = (1 << NUMBER_BITS) - 1;
45542
45543exports.getCategory = function(codePoint) {
45544  var val;
45545  val = trie.get(codePoint);
45546  return data.categories[(val >> CATEGORY_SHIFT) & CATEGORY_MASK];
45547};
45548
45549exports.getCombiningClass = function(codePoint) {
45550  var val;
45551  val = trie.get(codePoint);
45552  return data.combiningClasses[(val >> COMBINING_SHIFT) & COMBINING_MASK];
45553};
45554
45555exports.getScript = function(codePoint) {
45556  var val;
45557  val = trie.get(codePoint);
45558  return data.scripts[(val >> SCRIPT_SHIFT) & SCRIPT_MASK];
45559};
45560
45561exports.getEastAsianWidth = function(codePoint) {
45562  var val;
45563  val = trie.get(codePoint);
45564  return data.eaw[(val >> EAW_SHIFT) & EAW_MASK];
45565};
45566
45567exports.getNumericValue = function(codePoint) {
45568  var denominator, exp, num, numerator, val;
45569  val = trie.get(codePoint);
45570  num = val & NUMBER_MASK;
45571  if (num === 0) {
45572    return null;
45573  } else if (num <= 50) {
45574    return num - 1;
45575  } else if (num < 0x1e0) {
45576    numerator = (num >> 4) - 12;
45577    denominator = (num & 0xf) + 1;
45578    return numerator / denominator;
45579  } else if (num < 0x300) {
45580    val = (num >> 5) - 14;
45581    exp = (num & 0x1f) + 2;
45582    while (exp > 0) {
45583      val *= 10;
45584      exp--;
45585    }
45586    return val;
45587  } else {
45588    val = (num >> 2) - 0xbf;
45589    exp = (num & 3) + 1;
45590    while (exp > 0) {
45591      val *= 60;
45592      exp--;
45593    }
45594    return val;
45595  }
45596};
45597
45598exports.isAlphabetic = function(codePoint) {
45599  var ref;
45600  return (ref = exports.getCategory(codePoint)) === 'Lu' || ref === 'Ll' || ref === 'Lt' || ref === 'Lm' || ref === 'Lo' || ref === 'Nl';
45601};
45602
45603exports.isDigit = function(codePoint) {
45604  return exports.getCategory(codePoint) === 'Nd';
45605};
45606
45607exports.isPunctuation = function(codePoint) {
45608  var ref;
45609  return (ref = exports.getCategory(codePoint)) === 'Pc' || ref === 'Pd' || ref === 'Pe' || ref === 'Pf' || ref === 'Pi' || ref === 'Po' || ref === 'Ps';
45610};
45611
45612exports.isLowerCase = function(codePoint) {
45613  return exports.getCategory(codePoint) === 'Ll';
45614};
45615
45616exports.isUpperCase = function(codePoint) {
45617  return exports.getCategory(codePoint) === 'Lu';
45618};
45619
45620exports.isTitleCase = function(codePoint) {
45621  return exports.getCategory(codePoint) === 'Lt';
45622};
45623
45624exports.isWhiteSpace = function(codePoint) {
45625  var ref;
45626  return (ref = exports.getCategory(codePoint)) === 'Zs' || ref === 'Zl' || ref === 'Zp';
45627};
45628
45629exports.isBaseForm = function(codePoint) {
45630  var ref;
45631  return (ref = exports.getCategory(codePoint)) === 'Nd' || ref === 'No' || ref === 'Nl' || ref === 'Lu' || ref === 'Ll' || ref === 'Lt' || ref === 'Lm' || ref === 'Lo' || ref === 'Me' || ref === 'Mc';
45632};
45633
45634exports.isMark = function(codePoint) {
45635  var ref;
45636  return (ref = exports.getCategory(codePoint)) === 'Mn' || ref === 'Me' || ref === 'Mc';
45637};
45638
45639/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
45640
45641/***/ }),
45642/* 270 */
45643/***/ (function(module, exports) {
45644
45645module.exports = {"categories":["Cc","Zs","Po","Sc","Ps","Pe","Sm","Pd","Nd","Lu","Sk","Pc","Ll","So","Lo","Pi","Cf","No","Pf","Lt","Lm","Mn","Me","Mc","Nl","Zl","Zp","Cs","Co"],"combiningClasses":["Not_Reordered","Above","Above_Right","Below","Attached_Above_Right","Attached_Below","Overlay","Iota_Subscript","Double_Below","Double_Above","Below_Right","Above_Left","CCC10","CCC11","CCC12","CCC13","CCC14","CCC15","CCC16","CCC17","CCC18","CCC19","CCC20","CCC21","CCC22","CCC23","CCC24","CCC25","CCC30","CCC31","CCC32","CCC27","CCC28","CCC29","CCC33","CCC34","CCC35","CCC36","Nukta","Virama","CCC84","CCC91","CCC103","CCC107","CCC118","CCC122","CCC129","CCC130","CCC132","Attached_Above","Below_Left","Left","Kana_Voicing","CCC26","Right"],"scripts":["Common","Latin","Bopomofo","Inherited","Greek","Coptic","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Nko","Samaritan","Mandaic","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul","Ethiopic","Cherokee","Canadian_Aboriginal","Ogham","Runic","Tagalog","Hanunoo","Buhid","Tagbanwa","Khmer","Mongolian","Limbu","Tai_Le","New_Tai_Lue","Buginese","Tai_Tham","Balinese","Sundanese","Batak","Lepcha","Ol_
45645Chiki","Braille","Glagolitic","Tifinagh","Han","Hiragana","Katakana","Yi","Lisu","Vai","Bamum","Syloti_Nagri","Phags_Pa","Saurashtra","Kayah_Li","Rejang","Javanese","Cham","Tai_Viet","Meetei_Mayek","null","Linear_B","Lycian","Carian","Old_Italic","Gothic","Old_Permic","Ugaritic","Old_Persian","Deseret","Shavian","Osmanya","Elbasan","Caucasian_Albanian","Linear_A","Cypriot","Imperial_Aramaic","Palmyrene","Nabataean","Hatran","Phoenician","Lydian","Meroitic_Hieroglyphs","Meroitic_Cursive","Kharoshthi","Old_South_Arabian","Old_North_Arabian","Manichaean","Avestan","Inscriptional_Parthian","Inscriptional_Pahlavi","Psalter_Pahlavi","Old_Turkic","Old_Hungarian","Brahmi","Kaithi","Sora_Sompeng","Chakma","Mahajani","Sharada","Khojki","Multani","Khudawadi","Grantha","Tirhuta","Siddham","Modi","Takri","Ahom","Warang_Citi","Pau_Cin_Hau","Cuneiform","Egyptian_Hieroglyphs","Anatolian_Hieroglyphs","Mro","Bassa_Vah","Pahawh_Hmong","Miao","Duployan","SignWriting","Mende_Kikakui"],"eaw":["N","Na","A","W","H","F"]}
45646
45647/***/ }),
45648/* 271 */
45649/***/ (function(module, exports, __webpack_require__) {
45650
45651"use strict";
45652
45653
45654function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
45655
45656var _slicedToArray = _interopDefault(__webpack_require__(272));
45657var _getIterator = _interopDefault(__webpack_require__(60));
45658var _defineProperty = _interopDefault(__webpack_require__(276));
45659var _regeneratorRuntime = _interopDefault(__webpack_require__(277));
45660var _Symbol$iterator = _interopDefault(__webpack_require__(103));
45661var _classCallCheck = _interopDefault(__webpack_require__(106));
45662var _createClass = _interopDefault(__webpack_require__(107));
45663
45664var INITIAL_STATE = 1;
45665var FAIL_STATE = 0;
45666
45667/**
45668 * A StateMachine represents a deterministic finite automaton.
45669 * It can perform matches over a sequence of values, similar to a regular expression.
45670 */
45671
45672var StateMachine = function () {
45673  function StateMachine(dfa) {
45674    _classCallCheck(this, StateMachine);
45675
45676    this.stateTable = dfa.stateTable;
45677    this.accepting = dfa.accepting;
45678    this.tags = dfa.tags;
45679  }
45680
45681  /**
45682   * Returns an iterable object that yields pattern matches over the input sequence.
45683   * Matches are of the form [startIndex, endIndex, tags].
45684   */
45685
45686
45687  _createClass(StateMachine, [{
45688    key: 'match',
45689    value: function match(str) {
45690      var self = this;
45691      return _defineProperty({}, _Symbol$iterator, _regeneratorRuntime.mark(function _callee() {
45692        var state, startRun, lastAccepting, lastState, p, c;
45693        return _regeneratorRuntime.wrap(function _callee$(_context) {
45694          while (1) {
45695            switch (_context.prev = _context.next) {
45696              case 0:
45697                state = INITIAL_STATE;
45698                startRun = null;
45699                lastAccepting = null;
45700                lastState = null;
45701                p = 0;
45702
45703              case 5:
45704                if (!(p < str.length)) {
45705                  _context.next = 21;
45706                  break;
45707                }
45708
45709                c = str[p];
45710
45711
45712                lastState = state;
45713                state = self.stateTable[state][c];
45714
45715                if (!(state === FAIL_STATE)) {
45716                  _context.next = 15;
45717                  break;
45718                }
45719
45720                if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) {
45721                  _context.next = 13;
45722                  break;
45723                }
45724
45725                _context.next = 13;
45726                return [startRun, lastAccepting, self.tags[lastState]];
45727
45728              case 13:
45729
45730                // reset the state as if we started over from the initial state
45731                state = self.stateTable[INITIAL_STATE][c];
45732                startRun = null;
45733
45734              case 15:
45735
45736                // start a run if not in the failure state
45737                if (state !== FAIL_STATE && startRun == null) {
45738                  startRun = p;
45739                }
45740
45741                // if accepting, mark the potential match end
45742                if (self.accepting[state]) {
45743                  lastAccepting = p;
45744                }
45745
45746                // reset the state to the initial state if we get into the failure state
45747                if (state === FAIL_STATE) {
45748                  state = INITIAL_STATE;
45749                }
45750
45751              case 18:
45752                p++;
45753                _context.next = 5;
45754                break;
45755
45756              case 21:
45757                if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) {
45758                  _context.next = 24;
45759                  break;
45760                }
45761
45762                _context.next = 24;
45763                return [startRun, lastAccepting, self.tags[state]];
45764
45765              case 24:
45766              case 'end':
45767                return _context.stop();
45768            }
45769          }
45770        }, _callee, this);
45771      }));
45772    }
45773
45774    /**
45775     * For each match over the input sequence, action functions matching
45776     * the tag definitions in the input pattern are called with the startIndex,
45777     * endIndex, and sub-match sequence.
45778     */
45779
45780  }, {
45781    key: 'apply',
45782    value: function apply(str, actions) {
45783      var _iteratorNormalCompletion = true;
45784      var _didIteratorError = false;
vendor: 4,514 bytes, lines 45785-45968
45785      var _iteratorError = undefined;
45786
45787      try {
45788        for (var _iterator = _getIterator(this.match(str)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
45789          var _step$value = _slicedToArray(_step.value, 3);
45790
45791          var start = _step$value[0];
45792          var end = _step$value[1];
45793          var tags = _step$value[2];
45794          var _iteratorNormalCompletion2 = true;
45795          var _didIteratorError2 = false;
45796          var _iteratorError2 = undefined;
45797
45798          try {
45799            for (var _iterator2 = _getIterator(tags), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
45800              var tag = _step2.value;
45801
45802              if (typeof actions[tag] === 'function') {
45803                actions[tag](start, end, str.slice(start, end + 1));
45804              }
45805            }
45806          } catch (err) {
45807            _didIteratorError2 = true;
45808            _iteratorError2 = err;
45809          } finally {
45810            try {
45811              if (!_iteratorNormalCompletion2 && _iterator2.return) {
45812                _iterator2.return();
45813              }
45814            } finally {
45815              if (_didIteratorError2) {
45816                throw _iteratorError2;
45817              }
45818            }
45819          }
45820        }
45821      } catch (err) {
45822        _didIteratorError = true;
45823        _iteratorError = err;
45824      } finally {
45825        try {
45826          if (!_iteratorNormalCompletion && _iterator.return) {
45827            _iterator.return();
45828          }
45829        } finally {
45830          if (_didIteratorError) {
45831            throw _iteratorError;
45832          }
45833        }
45834      }
45835    }
45836  }]);
45837
45838  return StateMachine;
45839}();
45840
45841module.exports = StateMachine;
45842
45843
45844/***/ }),
45845/* 272 */
45846/***/ (function(module, exports, __webpack_require__) {
45847
45848"use strict";
45849
45850
45851exports.__esModule = true;
45852
45853var _isIterable2 = __webpack_require__(273);
45854
45855var _isIterable3 = _interopRequireDefault(_isIterable2);
45856
45857var _getIterator2 = __webpack_require__(60);
45858
45859var _getIterator3 = _interopRequireDefault(_getIterator2);
45860
45861function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
45862
45863exports.default = function () {
45864  function sliceIterator(arr, i) {
45865    var _arr = [];
45866    var _n = true;
45867    var _d = false;
45868    var _e = undefined;
45869
45870    try {
45871      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {
45872        _arr.push(_s.value);
45873
45874        if (i && _arr.length === i) break;
45875      }
45876    } catch (err) {
45877      _d = true;
45878      _e = err;
45879    } finally {
45880      try {
45881        if (!_n && _i["return"]) _i["return"]();
45882      } finally {
45883        if (_d) throw _e;
45884      }
45885    }
45886
45887    return _arr;
45888  }
45889
45890  return function (arr, i) {
45891    if (Array.isArray(arr)) {
45892      return arr;
45893    } else if ((0, _isIterable3.default)(Object(arr))) {
45894      return sliceIterator(arr, i);
45895    } else {
45896      throw new TypeError("Invalid attempt to destructure non-iterable instance");
45897    }
45898  };
45899}();
45900
45901/***/ }),
45902/* 273 */
45903/***/ (function(module, exports, __webpack_require__) {
45904
45905module.exports = { "default": __webpack_require__(274), __esModule: true };
45906
45907/***/ }),
45908/* 274 */
45909/***/ (function(module, exports, __webpack_require__) {
45910
45911__webpack_require__(28);
45912__webpack_require__(24);
45913module.exports = __webpack_require__(275);
45914
45915
45916/***/ }),
45917/* 275 */
45918/***/ (function(module, exports, __webpack_require__) {
45919
45920var classof = __webpack_require__(68);
45921var ITERATOR = __webpack_require__(4)('iterator');
45922var Iterators = __webpack_require__(23);
45923module.exports = __webpack_require__(2).isIterable = function (it) {
45924  var O = Object(it);
45925  return O[ITERATOR] !== undefined
45926    || '@@iterator' in O
45927    // eslint-disable-next-line no-prototype-builtins
45928    || Iterators.hasOwnProperty(classof(O));
45929};
45930
45931
45932/***/ }),
45933/* 276 */
45934/***/ (function(module, exports, __webpack_require__) {
45935
45936"use strict";
45937
45938
45939exports.__esModule = true;
45940
45941var _defineProperty = __webpack_require__(74);
45942
45943var _defineProperty2 = _interopRequireDefault(_defineProperty);
45944
45945function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
45946
45947exports.default = function (obj, key, value) {
45948  if (key in obj) {
45949    (0, _defineProperty2.default)(obj, key, {
45950      value: value,
45951      enumerable: true,
45952      configurable: true,
45953      writable: true
45954    });
45955  } else {
45956    obj[key] = value;
45957  }
45958
45959  return obj;
45960};
45961
45962/***/ }),
45963/* 277 */
45964/***/ (function(module, exports, __webpack_require__) {
45965
45966module.exports = __webpack_require__(278);
45967
45968
vendor: 8,918 bytes, lines 45969-46200
45969/***/ }),
45970/* 278 */
45971/***/ (function(module, exports, __webpack_require__) {
45972
45973/**
45974 * Copyright (c) 2014-present, Facebook, Inc.
45975 *
45976 * This source code is licensed under the MIT license found in the
45977 * LICENSE file in the root directory of this source tree.
45978 */
45979
45980// This method of obtaining a reference to the global object needs to be
45981// kept identical to the way it is obtained in runtime.js
45982var g = (function() { return this })() || Function("return this")();
45983
45984// Use `getOwnPropertyNames` because not all browsers support calling
45985// `hasOwnProperty` on the global `self` object in a worker. See #183.
45986var hadRuntime = g.regeneratorRuntime &&
45987  Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0;
45988
45989// Save the old regeneratorRuntime in case it needs to be restored later.
45990var oldRuntime = hadRuntime && g.regeneratorRuntime;
45991
45992// Force reevalutation of runtime.js.
45993g.regeneratorRuntime = undefined;
45994
45995module.exports = __webpack_require__(279);
45996
45997if (hadRuntime) {
45998  // Restore the original runtime.
45999  g.regeneratorRuntime = oldRuntime;
46000} else {
46001  // Remove the global property added by runtime.js.
46002  try {
46003    delete g.regeneratorRuntime;
46004  } catch(e) {
46005    g.regeneratorRuntime = undefined;
46006  }
46007}
46008
46009
46010/***/ }),
46011/* 279 */
46012/***/ (function(module, exports) {
46013
46014/**
46015 * Copyright (c) 2014-present, Facebook, Inc.
46016 *
46017 * This source code is licensed under the MIT license found in the
46018 * LICENSE file in the root directory of this source tree.
46019 */
46020
46021!(function(global) {
46022  "use strict";
46023
46024  var Op = Object.prototype;
46025  var hasOwn = Op.hasOwnProperty;
46026  var undefined; // More compressible than void 0.
46027  var $Symbol = typeof Symbol === "function" ? Symbol : {};
46028  var iteratorSymbol = $Symbol.iterator || "@@iterator";
46029  var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
46030  var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
46031
46032  var inModule = typeof module === "object";
46033  var runtime = global.regeneratorRuntime;
46034  if (runtime) {
46035    if (inModule) {
46036      // If regeneratorRuntime is defined globally and we're in a module,
46037      // make the exports object identical to regeneratorRuntime.
46038      module.exports = runtime;
46039    }
46040    // Don't bother evaluating the rest of this file if the runtime was
46041    // already defined globally.
46042    return;
46043  }
46044
46045  // Define the runtime globally (as expected by generated code) as either
46046  // module.exports (if we're in a module) or a new, empty object.
46047  runtime = global.regeneratorRuntime = inModule ? module.exports : {};
46048
46049  function wrap(innerFn, outerFn, self, tryLocsList) {
46050    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
46051    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
46052    var generator = Object.create(protoGenerator.prototype);
46053    var context = new Context(tryLocsList || []);
46054
46055    // The ._invoke method unifies the implementations of the .next,
46056    // .throw, and .return methods.
46057    generator._invoke = makeInvokeMethod(innerFn, self, context);
46058
46059    return generator;
46060  }
46061  runtime.wrap = wrap;
46062
46063  // Try/catch helper to minimize deoptimizations. Returns a completion
46064  // record like context.tryEntries[i].completion. This interface could
46065  // have been (and was previously) designed to take a closure to be
46066  // invoked without arguments, but in all the cases we care about we
46067  // already have an existing method we want to call, so there's no need
46068  // to create a new function object. We can even get away with assuming
46069  // the method takes exactly one argument, since that happens to be true
46070  // in every case, so we don't have to touch the arguments object. The
46071  // only additional allocation required is the completion record, which
46072  // has a stable shape and so hopefully should be cheap to allocate.
46073  function tryCatch(fn, obj, arg) {
46074    try {
46075      return { type: "normal", arg: fn.call(obj, arg) };
46076    } catch (err) {
46077      return { type: "throw", arg: err };
46078    }
46079  }
46080
46081  var GenStateSuspendedStart = "suspendedStart";
46082  var GenStateSuspendedYield = "suspendedYield";
46083  var GenStateExecuting = "executing";
46084  var GenStateCompleted = "completed";
46085
46086  // Returning this object from the innerFn has the same effect as
46087  // breaking out of the dispatch switch statement.
46088  var ContinueSentinel = {};
46089
46090  // Dummy constructor functions that we use as the .constructor and
46091  // .constructor.prototype properties for functions that return Generator
46092  // objects. For full spec compliance, you may wish to configure your
46093  // minifier not to mangle the names of these two functions.
46094  function Generator() {}
46095  function GeneratorFunction() {}
46096  function GeneratorFunctionPrototype() {}
46097
46098  // This is a polyfill for %IteratorPrototype% for environments that
46099  // don't natively support it.
46100  var IteratorPrototype = {};
46101  IteratorPrototype[iteratorSymbol] = function () {
46102    return this;
46103  };
46104
46105  var getProto = Object.getPrototypeOf;
46106  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
46107  if (NativeIteratorPrototype &&
46108      NativeIteratorPrototype !== Op &&
46109      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
46110    // This environment has a native %IteratorPrototype%; use it instead
46111    // of the polyfill.
46112    IteratorPrototype = NativeIteratorPrototype;
46113  }
46114
46115  var Gp = GeneratorFunctionPrototype.prototype =
46116    Generator.prototype = Object.create(IteratorPrototype);
46117  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
46118  GeneratorFunctionPrototype.constructor = GeneratorFunction;
46119  GeneratorFunctionPrototype[toStringTagSymbol] =
46120    GeneratorFunction.displayName = "GeneratorFunction";
46121
46122  // Helper for defining the .next, .throw, and .return methods of the
46123  // Iterator interface in terms of a single ._invoke method.
46124  function defineIteratorMethods(prototype) {
46125    ["next", "throw", "return"].forEach(function(method) {
46126      prototype[method] = function(arg) {
46127        return this._invoke(method, arg);
46128      };
46129    });
46130  }
46131
46132  runtime.isGeneratorFunction = function(genFun) {
46133    var ctor = typeof genFun === "function" && genFun.constructor;
46134    return ctor
46135      ? ctor === GeneratorFunction ||
46136        // For the native GeneratorFunction constructor, the best we can
46137        // do is to check its .name property.
46138        (ctor.displayName || ctor.name) === "GeneratorFunction"
46139      : false;
46140  };
46141
46142  runtime.mark = function(genFun) {
46143    if (Object.setPrototypeOf) {
46144      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
46145    } else {
46146      genFun.__proto__ = GeneratorFunctionPrototype;
46147      if (!(toStringTagSymbol in genFun)) {
46148        genFun[toStringTagSymbol] = "GeneratorFunction";
46149      }
46150    }
46151    genFun.prototype = Object.create(Gp);
46152    return genFun;
46153  };
46154
46155  // Within the body of any async function, `await x` is transformed to
46156  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
46157  // `hasOwn.call(value, "__await")` to determine if the yielded value is
46158  // meant to be awaited.
46159  runtime.awrap = function(arg) {
46160    return { __await: arg };
46161  };
46162
46163  function AsyncIterator(generator) {
46164    function invoke(method, arg, resolve, reject) {
46165      var record = tryCatch(generator[method], generator, arg);
46166      if (record.type === "throw") {
46167        reject(record.arg);
46168      } else {
46169        var result = record.arg;
46170        var value = result.value;
46171        if (value &&
46172            typeof value === "object" &&
46173            hasOwn.call(value, "__await")) {
46174          return Promise.resolve(value.__await).then(function(value) {
46175            invoke("next", value, resolve, reject);
46176          }, function(err) {
46177            invoke("throw", err, resolve, reject);
46178          });
46179        }
46180
46181        return Promise.resolve(value).then(function(unwrapped) {
46182          // When a yielded Promise is resolved, its final value becomes
46183          // the .value of the Promise<{value,done}> result for the
46184          // current iteration. If the Promise is rejected, however, the
46185          // result for this iteration will be rejected with the same
46186          // reason. Note that rejections of yielded Promises are not
46187          // thrown back into the generator function, as is the case
46188          // when an awaited Promise is rejected. This difference in
46189          // behavior between yield and await is important, because it
46190          // allows the consumer to decide what to do with the yielded
46191          // rejection (swallow it and continue, manually .throw it back
46192          // into the generator, abandon iteration, whatever). With
46193          // await, by contrast, there is no opportunity to examine the
46194          // rejection reason outside the generator function, so the
46195          // only option is to throw it from the await expression, and
46196          // let the generator function handle the exception.
46197          result.value = unwrapped;
46198          resolve(result);
46199        }, reject);
46200      }
vendor: 16,196 bytes, lines 46200-46736
46200
46201    }
46202
46203    var previousPromise;
46204
46205    function enqueue(method, arg) {
46206      function callInvokeWithMethodAndArg() {
46207        return new Promise(function(resolve, reject) {
46208          invoke(method, arg, resolve, reject);
46209        });
46210      }
46211
46212      return previousPromise =
46213        // If enqueue has been called before, then we want to wait until
46214        // all previous Promises have been resolved before calling invoke,
46215        // so that results are always delivered in the correct order. If
46216        // enqueue has not been called before, then it is important to
46217        // call invoke immediately, without waiting on a callback to fire,
46218        // so that the async generator function has the opportunity to do
46219        // any necessary setup in a predictable way. This predictability
46220        // is why the Promise constructor synchronously invokes its
46221        // executor callback, and why async functions synchronously
46222        // execute code before the first await. Since we implement simple
46223        // async functions in terms of async generators, it is especially
46224        // important to get this right, even though it requires care.
46225        previousPromise ? previousPromise.then(
46226          callInvokeWithMethodAndArg,
46227          // Avoid propagating failures to Promises returned by later
46228          // invocations of the iterator.
46229          callInvokeWithMethodAndArg
46230        ) : callInvokeWithMethodAndArg();
46231    }
46232
46233    // Define the unified helper method that is used to implement .next,
46234    // .throw, and .return (see defineIteratorMethods).
46235    this._invoke = enqueue;
46236  }
46237
46238  defineIteratorMethods(AsyncIterator.prototype);
46239  AsyncIterator.prototype[asyncIteratorSymbol] = function () {
46240    return this;
46241  };
46242  runtime.AsyncIterator = AsyncIterator;
46243
46244  // Note that simple async functions are implemented on top of
46245  // AsyncIterator objects; they just return a Promise for the value of
46246  // the final result produced by the iterator.
46247  runtime.async = function(innerFn, outerFn, self, tryLocsList) {
46248    var iter = new AsyncIterator(
46249      wrap(innerFn, outerFn, self, tryLocsList)
46250    );
46251
46252    return runtime.isGeneratorFunction(outerFn)
46253      ? iter // If outerFn is a generator, return the full iterator.
46254      : iter.next().then(function(result) {
46255          return result.done ? result.value : iter.next();
46256        });
46257  };
46258
46259  function makeInvokeMethod(innerFn, self, context) {
46260    var state = GenStateSuspendedStart;
46261
46262    return function invoke(method, arg) {
46263      if (state === GenStateExecuting) {
46264        throw new Error("Generator is already running");
46265      }
46266
46267      if (state === GenStateCompleted) {
46268        if (method === "throw") {
46269          throw arg;
46270        }
46271
46272        // Be forgiving, per 25.3.3.3.3 of the spec:
46273        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
46274        return doneResult();
46275      }
46276
46277      context.method = method;
46278      context.arg = arg;
46279
46280      while (true) {
46281        var delegate = context.delegate;
46282        if (delegate) {
46283          var delegateResult = maybeInvokeDelegate(delegate, context);
46284          if (delegateResult) {
46285            if (delegateResult === ContinueSentinel) continue;
46286            return delegateResult;
46287          }
46288        }
46289
46290        if (context.method === "next") {
46291          // Setting context._sent for legacy support of Babel's
46292          // function.sent implementation.
46293          context.sent = context._sent = context.arg;
46294
46295        } else if (context.method === "throw") {
46296          if (state === GenStateSuspendedStart) {
46297            state = GenStateCompleted;
46298            throw context.arg;
46299          }
46300
46301          context.dispatchException(context.arg);
46302
46303        } else if (context.method === "return") {
46304          context.abrupt("return", context.arg);
46305        }
46306
46307        state = GenStateExecuting;
46308
46309        var record = tryCatch(innerFn, self, context);
46310        if (record.type === "normal") {
46311          // If an exception is thrown from innerFn, we leave state ===
46312          // GenStateExecuting and loop back for another invocation.
46313          state = context.done
46314            ? GenStateCompleted
46315            : GenStateSuspendedYield;
46316
46317          if (record.arg === ContinueSentinel) {
46318            continue;
46319          }
46320
46321          return {
46322            value: record.arg,
46323            done: context.done
46324          };
46325
46326        } else if (record.type === "throw") {
46327          state = GenStateCompleted;
46328          // Dispatch the exception by looping back around to the
46329          // context.dispatchException(context.arg) call above.
46330          context.method = "throw";
46331          context.arg = record.arg;
46332        }
46333      }
46334    };
46335  }
46336
46337  // Call delegate.iterator[context.method](context.arg) and handle the
46338  // result, either by returning a { value, done } result from the
46339  // delegate iterator, or by modifying context.method and context.arg,
46340  // setting context.delegate to null, and returning the ContinueSentinel.
46341  function maybeInvokeDelegate(delegate, context) {
46342    var method = delegate.iterator[context.method];
46343    if (method === undefined) {
46344      // A .throw or .return when the delegate iterator has no .throw
46345      // method always terminates the yield* loop.
46346      context.delegate = null;
46347
46348      if (context.method === "throw") {
46349        if (delegate.iterator.return) {
46350          // If the delegate iterator has a return method, give it a
46351          // chance to clean up.
46352          context.method = "return";
46353          context.arg = undefined;
46354          maybeInvokeDelegate(delegate, context);
46355
46356          if (context.method === "throw") {
46357            // If maybeInvokeDelegate(context) changed context.method from
46358            // "return" to "throw", let that override the TypeError below.
46359            return ContinueSentinel;
46360          }
46361        }
46362
46363        context.method = "throw";
46364        context.arg = new TypeError(
46365          "The iterator does not provide a 'throw' method");
46366      }
46367
46368      return ContinueSentinel;
46369    }
46370
46371    var record = tryCatch(method, delegate.iterator, context.arg);
46372
46373    if (record.type === "throw") {
46374      context.method = "throw";
46375      context.arg = record.arg;
46376      context.delegate = null;
46377      return ContinueSentinel;
46378    }
46379
46380    var info = record.arg;
46381
46382    if (! info) {
46383      context.method = "throw";
46384      context.arg = new TypeError("iterator result is not an object");
46385      context.delegate = null;
46386      return ContinueSentinel;
46387    }
46388
46389    if (info.done) {
46390      // Assign the result of the finished delegate to the temporary
46391      // variable specified by delegate.resultName (see delegateYield).
46392      context[delegate.resultName] = info.value;
46393
46394      // Resume execution at the desired location (see delegateYield).
46395      context.next = delegate.nextLoc;
46396
46397      // If context.method was "throw" but the delegate handled the
46398      // exception, let the outer generator proceed normally. If
46399      // context.method was "next", forget context.arg since it has been
46400      // "consumed" by the delegate iterator. If context.method was
46401      // "return", allow the original .return call to continue in the
46402      // outer generator.
46403      if (context.method !== "return") {
46404        context.method = "next";
46405        context.arg = undefined;
46406      }
46407
46408    } else {
46409      // Re-yield the result returned by the delegate method.
46410      return info;
46411    }
46412
46413    // The delegate iterator is finished, so forget it and continue with
46414    // the outer generator.
46415    context.delegate = null;
46416    return ContinueSentinel;
46417  }
46418
46419  // Define Generator.prototype.{next,throw,return} in terms of the
46420  // unified ._invoke helper method.
46421  defineIteratorMethods(Gp);
46422
46423  Gp[toStringTagSymbol] = "Generator";
46424
46425  // A Generator should always return itself as the iterator object when the
46426  // @@iterator function is called on it. Some browsers' implementations of the
46427  // iterator prototype chain incorrectly implement this, causing the Generator
46428  // object to not be returned from this call. This ensures that doesn't happen.
46429  // See https://github.com/facebook/regenerator/issues/274 for more details.
46430  Gp[iteratorSymbol] = function() {
46431    return this;
46432  };
46433
46434  Gp.toString = function() {
46435    return "[object Generator]";
46436  };
46437
46438  function pushTryEntry(locs) {
46439    var entry = { tryLoc: locs[0] };
46440
46441    if (1 in locs) {
46442      entry.catchLoc = locs[1];
46443    }
46444
46445    if (2 in locs) {
46446      entry.finallyLoc = locs[2];
46447      entry.afterLoc = locs[3];
46448    }
46449
46450    this.tryEntries.push(entry);
46451  }
46452
46453  function resetTryEntry(entry) {
46454    var record = entry.completion || {};
46455    record.type = "normal";
46456    delete record.arg;
46457    entry.completion = record;
46458  }
46459
46460  function Context(tryLocsList) {
46461    // The root entry object (effectively a try statement without a catch
46462    // or a finally block) gives us a place to store values thrown from
46463    // locations where there is no enclosing try statement.
46464    this.tryEntries = [{ tryLoc: "root" }];
46465    tryLocsList.forEach(pushTryEntry, this);
46466    this.reset(true);
46467  }
46468
46469  runtime.keys = function(object) {
46470    var keys = [];
46471    for (var key in object) {
46472      keys.push(key);
46473    }
46474    keys.reverse();
46475
46476    // Rather than returning an object with a next method, we keep
46477    // things simple and return the next function itself.
46478    return function next() {
46479      while (keys.length) {
46480        var key = keys.pop();
46481        if (key in object) {
46482          next.value = key;
46483          next.done = false;
46484          return next;
46485        }
46486      }
46487
46488      // To avoid creating an additional object, we just hang the .value
46489      // and .done properties off the next function object itself. This
46490      // also ensures that the minifier will not anonymize the function.
46491      next.done = true;
46492      return next;
46493    };
46494  };
46495
46496  function values(iterable) {
46497    if (iterable) {
46498      var iteratorMethod = iterable[iteratorSymbol];
46499      if (iteratorMethod) {
46500        return iteratorMethod.call(iterable);
46501      }
46502
46503      if (typeof iterable.next === "function") {
46504        return iterable;
46505      }
46506
46507      if (!isNaN(iterable.length)) {
46508        var i = -1, next = function next() {
46509          while (++i < iterable.length) {
46510            if (hasOwn.call(iterable, i)) {
46511              next.value = iterable[i];
46512              next.done = false;
46513              return next;
46514            }
46515          }
46516
46517          next.value = undefined;
46518          next.done = true;
46519
46520          return next;
46521        };
46522
46523        return next.next = next;
46524      }
46525    }
46526
46527    // Return an iterator with no values.
46528    return { next: doneResult };
46529  }
46530  runtime.values = values;
46531
46532  function doneResult() {
46533    return { value: undefined, done: true };
46534  }
46535
46536  Context.prototype = {
46537    constructor: Context,
46538
46539    reset: function(skipTempReset) {
46540      this.prev = 0;
46541      this.next = 0;
46542      // Resetting context._sent for legacy support of Babel's
46543      // function.sent implementation.
46544      this.sent = this._sent = undefined;
46545      this.done = false;
46546      this.delegate = null;
46547
46548      this.method = "next";
46549      this.arg = undefined;
46550
46551      this.tryEntries.forEach(resetTryEntry);
46552
46553      if (!skipTempReset) {
46554        for (var name in this) {
46555          // Not sure about the optimal order of these conditions:
46556          if (name.charAt(0) === "t" &&
46557              hasOwn.call(this, name) &&
46558              !isNaN(+name.slice(1))) {
46559            this[name] = undefined;
46560          }
46561        }
46562      }
46563    },
46564
46565    stop: function() {
46566      this.done = true;
46567
46568      var rootEntry = this.tryEntries[0];
46569      var rootRecord = rootEntry.completion;
46570      if (rootRecord.type === "throw") {
46571        throw rootRecord.arg;
46572      }
46573
46574      return this.rval;
46575    },
46576
46577    dispatchException: function(exception) {
46578      if (this.done) {
46579        throw exception;
46580      }
46581
46582      var context = this;
46583      function handle(loc, caught) {
46584        record.type = "throw";
46585        record.arg = exception;
46586        context.next = loc;
46587
46588        if (caught) {
46589          // If the dispatched exception was caught by a catch block,
46590          // then let that catch block handle the exception normally.
46591          context.method = "next";
46592          context.arg = undefined;
46593        }
46594
46595        return !! caught;
46596      }
46597
46598      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
46599        var entry = this.tryEntries[i];
46600        var record = entry.completion;
46601
46602        if (entry.tryLoc === "root") {
46603          // Exception thrown outside of any try block that could handle
46604          // it, so set the completion value of the entire function to
46605          // throw the exception.
46606          return handle("end");
46607        }
46608
46609        if (entry.tryLoc <= this.prev) {
46610          var hasCatch = hasOwn.call(entry, "catchLoc");
46611          var hasFinally = hasOwn.call(entry, "finallyLoc");
46612
46613          if (hasCatch && hasFinally) {
46614            if (this.prev < entry.catchLoc) {
46615              return handle(entry.catchLoc, true);
46616            } else if (this.prev < entry.finallyLoc) {
46617              return handle(entry.finallyLoc);
46618            }
46619
46620          } else if (hasCatch) {
46621            if (this.prev < entry.catchLoc) {
46622              return handle(entry.catchLoc, true);
46623            }
46624
46625          } else if (hasFinally) {
46626            if (this.prev < entry.finallyLoc) {
46627              return handle(entry.finallyLoc);
46628            }
46629
46630          } else {
46631            throw new Error("try statement without catch or finally");
46632          }
46633        }
46634      }
46635    },
46636
46637    abrupt: function(type, arg) {
46638      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
46639        var entry = this.tryEntries[i];
46640        if (entry.tryLoc <= this.prev &&
46641            hasOwn.call(entry, "finallyLoc") &&
46642            this.prev < entry.finallyLoc) {
46643          var finallyEntry = entry;
46644          break;
46645        }
46646      }
46647
46648      if (finallyEntry &&
46649          (type === "break" ||
46650           type === "continue") &&
46651          finallyEntry.tryLoc <= arg &&
46652          arg <= finallyEntry.finallyLoc) {
46653        // Ignore the finally entry if control is not jumping to a
46654        // location outside the try/catch block.
46655        finallyEntry = null;
46656      }
46657
46658      var record = finallyEntry ? finallyEntry.completion : {};
46659      record.type = type;
46660      record.arg = arg;
46661
46662      if (finallyEntry) {
46663        this.method = "next";
46664        this.next = finallyEntry.finallyLoc;
46665        return ContinueSentinel;
46666      }
46667
46668      return this.complete(record);
46669    },
46670
46671    complete: function(record, afterLoc) {
46672      if (record.type === "throw") {
46673        throw record.arg;
46674      }
46675
46676      if (record.type === "break" ||
46677          record.type === "continue") {
46678        this.next = record.arg;
46679      } else if (record.type === "return") {
46680        this.rval = this.arg = record.arg;
46681        this.method = "return";
46682        this.next = "end";
46683      } else if (record.type === "normal" && afterLoc) {
46684        this.next = afterLoc;
46685      }
46686
46687      return ContinueSentinel;
46688    },
46689
46690    finish: function(finallyLoc) {
46691      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
46692        var entry = this.tryEntries[i];
46693        if (entry.finallyLoc === finallyLoc) {
46694          this.complete(entry.completion, entry.afterLoc);
46695          resetTryEntry(entry);
46696          return ContinueSentinel;
46697        }
46698      }
46699    },
46700
46701    "catch": function(tryLoc) {
46702      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
46703        var entry = this.tryEntries[i];
46704        if (entry.tryLoc === tryLoc) {
46705          var record = entry.completion;
46706          if (record.type === "throw") {
46707            var thrown = record.arg;
46708            resetTryEntry(entry);
46709          }
46710          return thrown;
46711        }
46712      }
46713
46714      // The context.catch method must only be called with a location
46715      // argument that corresponds to a known catch block.
46716      throw new Error("illegal catch attempt");
46717    },
46718
46719    delegateYield: function(iterable, resultName, nextLoc) {
46720      this.delegate = {
46721        iterator: values(iterable),
46722        resultName: resultName,
46723        nextLoc: nextLoc
46724      };
46725
46726      if (this.method === "next") {
46727        // Deliberately forget the last sent value so that we don't
46728        // accidentally pass it on to the delegate.
46729        this.arg = undefined;
46730      }
46731
46732      return ContinueSentinel;
46733    }
46734  };
46735})(
46736  // 
46736In sloppy mode, unbound `this` refers to the global object, fallback to
46737  // Function constructor if we're in global strict mode. That is sadly a form
46738  // of indirect eval which violates Content Security Policy.
46739  (function() { return this })() || Function("return this")()
46740);
46741
46742
46743/***/ }),
46744/* 280 */
46745/***/ (function(module, exports, __webpack_require__) {
46746
46747module.exports = { "default": __webpack_require__(281), __esModule: true };
46748
46749/***/ }),
46750/* 281 */
46751/***/ (function(module, exports, __webpack_require__) {
46752
46753__webpack_require__(282);
46754module.exports = Math.pow(2, -52);
46755
46756
46757/***/ }),
46758/* 282 */
46759/***/ (function(module, exports, __webpack_require__) {
46760
46761// 20.1.2.1 Number.EPSILON
46762var $export = __webpack_require__(3);
46763
46764$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });
46765
46766
46767/***/ }),
46768/* 283 */
46769/***/ (function(module, exports, __webpack_require__) {
46770
46771/* WEBPACK VAR INJECTION */(function(Buffer) {var clone = (function() {
46772'use strict';
46773
46774/**
46775 * Clones (copies) an Object using deep copying.
46776 *
46777 * This function supports circular references by default, but if you are certain
46778 * there are no circular references in your object, you can save some CPU time
46779 * by calling clone(obj, false).
46780 *
46781 * Caution: if `circular` is false and `parent` contains circular references,
46782 * your program may enter an infinite loop and crash.
46783 *
46784 * @param `parent` - the object to be cloned
46785 * @param `circular` - set to true if the object to be cloned may contain
46786 *    circular references. (optional - true by default)
46787 * @param `depth` - set to a number if the object is only to be cloned to
46788 *    a particular depth. (optional - defaults to Infinity)
46789 * @param `prototype` - sets the prototype to be used when cloning an object.
46790 *    (optional - defaults to parent prototype).
46791*/
46792function clone(parent, circular, depth, prototype) {
46793  var filter;
46794  if (typeof circular === 'object') {
46795    depth = circular.depth;
46796    prototype = circular.prototype;
46797    filter = circular.filter;
46798    circular = circular.circular
46799  }
46800  // maintain two arrays for circular references, where corresponding parents
46801  // and children have the same index
46802  var allParents = [];
46803  var allChildren = [];
46804
46805  var useBuffer = typeof Buffer != 'undefined';
46806
46807  if (typeof circular == 'undefined')
46808    circular = true;
46809
46810  if (typeof depth == 'undefined')
46811    depth = Infinity;
46812
46813  // recurse this function so we don't reset allParents and allChildren
46814  function _clone(parent, depth) {
46815    // cloning null always returns null
46816    if (parent === null)
46817      return null;
46818
46819    if (depth == 0)
46820      return parent;
46821
46822    var child;
46823    var proto;
46824    if (typeof parent != 'object') {
46825      return parent;
46826    }
46827
46828    if (clone.__isArray(parent)) {
46829      child = [];
46830    } else if (clone.__isRegExp(parent)) {
46831      child = new RegExp(parent.source, __getRegExpFlags(parent));
46832      if (parent.lastIndex) child.lastIndex = parent.lastIndex;
46833    } else if (clone.__isDate(parent)) {
46834      child = new Date(parent.getTime());
46835    } else if (useBuffer && Buffer.isBuffer(parent)) {
46836      child = new Buffer(parent.length);
46837      parent.copy(child);
46838      return child;
46839    } else {
46840      if (typeof prototype == 'undefined') {
46841        proto = Object.getPrototypeOf(parent);
46842        child = Object.create(proto);
46843      }
46844      else {
46845        child = Object.create(prototype);
46846        proto = prototype;
46847      }
46848    }
46849
46850    if (circular) {
46851      var index = allParents.indexOf(parent);
46852
46853      if (index != -1) {
46854        return allChildren[index];
46855      }
46856      allParents.push(parent);
46857      allChildren.push(child);
46858    }
46859
46860    for (var i in parent) {
46861      var attrs;
46862      if (proto) {
46863        attrs = Object.getOwnPropertyDescriptor(proto, i);
46864      }
46865
46866      if (attrs && attrs.set == null) {
46867        continue;
46868      }
46869      child[i] = _clone(parent[i], depth - 1);
46870    }
46871
46872    return child;
46873  }
46874
46875  return _clone(parent, depth);
46876}
46877
46878/**
46879 * Simple flat clone using prototype, accepts only objects, usefull for property
46880 * override on FLAT configuration object (no nested props).
46881 *
46882 * USE WITH CAUTION! This may not behave as you wish if you do not know how this
46883 * works.
46884 */
46885clone.clonePrototype = function clonePrototype(parent) {
46886  if (parent === null)
46887    return null;
46888
46889  var c = function () {};
46890  c.prototype = parent;
46891  return new c();
46892};
46893
46894// private utility functions
46895
46896function __objToStr(o) {
46897  return Object.prototype.toString.call(o);
46898};
46899clone.__objToStr = __objToStr;
46900
46901function __isDate(o) {
46902  return typeof o === 'object' && __objToStr(o) === '[object Date]';
46903};
46904clone.__isDate = __isDate;
46905
46906function __isArray(o) {
46907  return typeof o === 'object' && __objToStr(o) === '[object Array]';
46908};
46909clone.__isArray = __isArray;
46910
46911function __isRegExp(o) {
46912  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';
46913};
46914clone.__isRegExp = __isRegExp;
46915
46916function __getRegExpFlags(re) {
46917  var flags = '';
46918  if (re.global) flags += 'g';
46919  if (re.ignoreCase) flags += 'i';
46920  if (re.multiline) flags += 'm';
46921  return flags;
46922};
46923clone.__getRegExpFlags = __getRegExpFlags;
46924
46925return clone;
46926})();
46927
46928if (typeof module === 'object' && module.exports) {
46929  module.exports = clone;
46930}
46931
46932/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
46933
vendor: 5,300 bytes, lines 46934-47107
46934/***/ }),
46935/* 284 */
46936/***/ (function(module, exports, __webpack_require__) {
46937
46938module.exports = __webpack_require__(117).BrotliDecompressBuffer;
46939
46940
46941/***/ }),
46942/* 285 */
46943/***/ (function(module, exports) {
46944
46945/* Copyright 2013 Google Inc. All Rights Reserved.
46946
46947   Licensed under the Apache License, Version 2.0 (the "License");
46948   you may not use this file except in compliance with the License.
46949   You may obtain a copy of the License at
46950
46951   http://www.apache.org/licenses/LICENSE-2.0
46952
46953   Unless required by applicable law or agreed to in writing, software
46954   distributed under the License is distributed on an "AS IS" BASIS,
46955   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
46956   See the License for the specific language governing permissions and
46957   limitations under the License.
46958
46959   Bit reading helpers
46960*/
46961
46962var BROTLI_READ_SIZE = 4096;
46963var BROTLI_IBUF_SIZE =  (2 * BROTLI_READ_SIZE + 32);
46964var BROTLI_IBUF_MASK =  (2 * BROTLI_READ_SIZE - 1);
46965
46966var kBitMask = new Uint32Array([
46967  0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767,
46968  65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215
46969]);
46970
46971/* Input byte buffer, consist of a ringbuffer and a "slack" region where */
46972/* bytes from the start of the ringbuffer are copied. */
46973function BrotliBitReader(input) {
46974  this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE);
46975  this.input_ = input;    /* input callback */
46976
46977  this.reset();
46978}
46979
46980BrotliBitReader.READ_SIZE = BROTLI_READ_SIZE;
46981BrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK;
46982
46983BrotliBitReader.prototype.reset = function() {
46984  this.buf_ptr_ = 0;      /* next input will write here */
46985  this.val_ = 0;          /* pre-fetched bits */
46986  this.pos_ = 0;          /* byte position in stream */
46987  this.bit_pos_ = 0;      /* current bit-reading position in val_ */
46988  this.bit_end_pos_ = 0;  /* bit-reading end position from LSB of val_ */
46989  this.eos_ = 0;          /* input stream is finished */
46990
46991  this.readMoreInput();
46992  for (var i = 0; i < 4; i++) {
46993    this.val_ |= this.buf_[this.pos_] << (8 * i);
46994    ++this.pos_;
46995  }
46996
46997  return this.bit_end_pos_ > 0;
46998};
46999
47000/* Fills up the input ringbuffer by calling the input callback.
47001
47002   Does nothing if there are at least 32 bytes present after current position.
47003
47004   Returns 0 if either:
47005    - the input callback returned an error, or
47006    - there is no more input and the position is past the end of the stream.
47007
47008   After encountering the end of the input stream, 32 additional zero bytes are
47009   copied to the ringbuffer, therefore it is safe to call this function after
47010   every 32 bytes of input is read.
47011*/
47012BrotliBitReader.prototype.readMoreInput = function() {
47013  if (this.bit_end_pos_ > 256) {
47014    return;
47015  } else if (this.eos_) {
47016    if (this.bit_pos_ > this.bit_end_pos_)
47017      throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_);
47018  } else {
47019    var dst = this.buf_ptr_;
47020    var bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE);
47021    if (bytes_read < 0) {
47022      throw new Error('Unexpected end of input');
47023    }
47024
47025    if (bytes_read < BROTLI_READ_SIZE) {
47026      this.eos_ = 1;
47027      /* Store 32 bytes of zero after the stream end. */
47028      for (var p = 0; p < 32; p++)
47029        this.buf_[dst + bytes_read + p] = 0;
47030    }
47031
47032    if (dst === 0) {
47033      /* Copy the head of the ringbuffer to the slack region. */
47034      for (var p = 0; p < 32; p++)
47035        this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p];
47036
47037      this.buf_ptr_ = BROTLI_READ_SIZE;
47038    } else {
47039      this.buf_ptr_ = 0;
47040    }
47041
47042    this.bit_end_pos_ += bytes_read << 3;
47043  }
47044};
47045
47046/* Guarantees that there are at least 24 bits in the buffer. */
47047BrotliBitReader.prototype.fillBitWindow = function() {
47048  while (this.bit_pos_ >= 8) {
47049    this.val_ >>>= 8;
47050    this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24;
47051    ++this.pos_;
47052    this.bit_pos_ = this.bit_pos_ - 8 >>> 0;
47053    this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0;
47054  }
47055};
47056
47057/* Reads the specified number of bits from Read Buffer. */
47058BrotliBitReader.prototype.readBits = function(n_bits) {
47059  if (32 - this.bit_pos_ < n_bits) {
47060    this.fillBitWindow();
47061  }
47062
47063  var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]);
47064  this.bit_pos_ += n_bits;
47065  return val;
47066};
47067
47068module.exports = BrotliBitReader;
47069
47070
47071/***/ }),
47072/* 286 */
47073/***/ (function(module, exports, __webpack_require__) {
47074
47075var base64 = __webpack_require__(287);
47076var fs = __webpack_require__(8);
47077
47078/**
47079 * The normal dictionary-data.js is quite large, which makes it
47080 * unsuitable for browser usage. In order to make it smaller,
47081 * we read dictionary.bin, which is a compressed version of
47082 * the dictionary, and on initial load, Brotli decompresses
47083 * it's own dictionary. 😜
47084 */
47085exports.init = function() {
47086  var BrotliDecompressBuffer = __webpack_require__(117).BrotliDecompressBuffer;
47087  var compressed = base64.toByteArray(__webpack_require__(288));
47088  return BrotliDecompressBuffer(compressed);
47089};
47090
47091
47092/***/ }),
47093/* 287 */
47094/***/ (function(module, exports, __webpack_require__) {
47095
47096"use strict";
47097
47098
47099exports.byteLength = byteLength
47100exports.toByteArray = toByteArray
47101exports.fromByteArray = fromByteArray
47102
47103var lookup = []
47104var revLookup = []
47105var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
47106
47107var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
vendor: 3,403 bytes, lines 47107-47219
47107+/'
47108for (var i = 0, len = code.length; i < len; ++i) {
47109  lookup[i] = code[i]
47110  revLookup[code.charCodeAt(i)] = i
47111}
47112
47113// Support decoding URL-safe base64 strings, as Node.js does.
47114// See: https://en.wikipedia.org/wiki/Base64#URL_applications
47115revLookup['-'.charCodeAt(0)] = 62
47116revLookup['_'.charCodeAt(0)] = 63
47117
47118function placeHoldersCount (b64) {
47119  var len = b64.length
47120  if (len % 4 > 0) {
47121    throw new Error('Invalid string. Length must be a multiple of 4')
47122  }
47123
47124  // the number of equal signs (place holders)
47125  // if there are two placeholders, than the two characters before it
47126  // represent one byte
47127  // if there is only one, then the three characters before it represent 2 bytes
47128  // this is just a cheap hack to not do indexOf twice
47129  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
47130}
47131
47132function byteLength (b64) {
47133  // base64 is 4/3 + up to two characters of the original data
47134  return (b64.length * 3 / 4) - placeHoldersCount(b64)
47135}
47136
47137function toByteArray (b64) {
47138  var i, l, tmp, placeHolders, arr
47139  var len = b64.length
47140  placeHolders = placeHoldersCount(b64)
47141
47142  arr = new Arr((len * 3 / 4) - placeHolders)
47143
47144  // if there are placeholders, only get up to the last complete 4 chars
47145  l = placeHolders > 0 ? len - 4 : len
47146
47147  var L = 0
47148
47149  for (i = 0; i < l; i += 4) {
47150    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
47151    arr[L++] = (tmp >> 16) & 0xFF
47152    arr[L++] = (tmp >> 8) & 0xFF
47153    arr[L++] = tmp & 0xFF
47154  }
47155
47156  if (placeHolders === 2) {
47157    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
47158    arr[L++] = tmp & 0xFF
47159  } else if (placeHolders === 1) {
47160    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
47161    arr[L++] = (tmp >> 8) & 0xFF
47162    arr[L++] = tmp & 0xFF
47163  }
47164
47165  return arr
47166}
47167
47168function tripletToBase64 (num) {
47169  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
47170}
47171
47172function encodeChunk (uint8, start, end) {
47173  var tmp
47174  var output = []
47175  for (var i = start; i < end; i += 3) {
47176    tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF)
47177    output.push(tripletToBase64(tmp))
47178  }
47179  return output.join('')
47180}
47181
47182function fromByteArray (uint8) {
47183  var tmp
47184  var len = uint8.length
47185  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
47186  var output = ''
47187  var parts = []
47188  var maxChunkLength = 16383 // must be multiple of 3
47189
47190  // go through the array every three bytes, we'll deal with trailing stuff later
47191  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
47192    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
47193  }
47194
47195  // pad the end with zeros, but make sure to not forget the extra bytes
47196  if (extraBytes === 1) {
47197    tmp = uint8[len - 1]
47198    output += lookup[tmp >> 2]
47199    output += lookup[(tmp << 4) & 0x3F]
47200    output += '=='
47201  } else if (extraBytes === 2) {
47202    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
47203    output += lookup[tmp >> 10]
47204    output += lookup[(tmp >> 4) & 0x3F]
47205    output += lookup[(tmp << 2) & 0x3F]
47206    output += '='
47207  }
47208
47209  parts.push(output)
47210
47211  return parts.join('')
47212}
47213
47214
47215/***/ }),
47216/* 288 */
47217/***/ (function(module, exports) {
47218
47219module.exports=
vendor: 69,005 bytes, lines 47219-47220
47219"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";
47220
47221
47222/***/ }),
47223/* 289 */
47224/***/ (function(
vendor: 12,244 bytes, lines 47224-47478
47224module, exports) {
47225
47226/* Copyright 2013 Google Inc. All Rights Reserved.
47227
47228   Licensed under the Apache License, Version 2.0 (the "License");
47229   you may not use this file except in compliance with the License.
47230   You may obtain a copy of the License at
47231
47232   http://www.apache.org/licenses/LICENSE-2.0
47233
47234   Unless required by applicable law or agreed to in writing, software
47235   distributed under the License is distributed on an "AS IS" BASIS,
47236   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
47237   See the License for the specific language governing permissions and
47238   limitations under the License.
47239
47240   Lookup table to map the previous two bytes to a context id.
47241
47242   There are four different context modeling modes defined here:
47243     CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,
47244     CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,
47245     CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,
47246     CONTEXT_SIGNED: second-order context model tuned for signed integers.
47247
47248   The context id for the UTF8 context model is calculated as follows. If p1
47249   and p2 are the previous two bytes, we calcualte the context as
47250
47251     context = kContextLookup[p1] | kContextLookup[p2 + 256].
47252
47253   If the previous two bytes are ASCII characters (i.e. < 128), this will be
47254   equivalent to
47255
47256     context = 4 * context1(p1) + context2(p2),
47257
47258   where context1 is based on the previous byte in the following way:
47259
47260     0  : non-ASCII control
47261     1  : \t, \n, \r
47262     2  : space
47263     3  : other punctuation
47264     4  : " '
47265     5  : %
47266     6  : ( < [ {
47267     7  : ) > ] }
47268     8  : , ; :
47269     9  : .
47270     10 : =
47271     11 : number
47272     12 : upper-case vowel
47273     13 : upper-case consonant
47274     14 : lower-case vowel
47275     15 : lower-case consonant
47276
47277   and context2 is based on the second last byte:
47278
47279     0 : control, space
47280     1 : punctuation
47281     2 : upper-case letter, number
47282     3 : lower-case letter
47283
47284   If the last byte is ASCII, and the second last byte is not (in a valid UTF8
47285   stream it will be a continuation byte, value between 128 and 191), the
47286   context is the same as if the second last byte was an ASCII control or space.
47287
47288   If the last byte is a UTF8 lead byte (value >= 192), then the next byte will
47289   be a continuation byte and the context id is 2 or 3 depending on the LSB of
47290   the last byte and to a lesser extent on the second last byte if it is ASCII.
47291
47292   If the last byte is a UTF8 continuation byte, the second last byte can be:
47293     - continuation byte: the next byte is probably ASCII or lead byte (assuming
47294       4-byte UTF8 characters are rare) and the context id is 0 or 1.
47295     - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1
47296     - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3
47297
47298   The possible value combinations of the previous two bytes, the range of
47299   context ids and the type of the next byte is summarized in the table below:
47300
47301   |--------\-----------------------------------------------------------------|
47302   |         \                         Last byte                              |
47303   | Second   \---------------------------------------------------------------|
47304   | last byte \    ASCII            |   cont. byte        |   lead byte      |
47305   |            \   (0-127)          |   (128-191)         |   (192-)         |
47306   |=============|===================|=====================|==================|
47307   |  ASCII      | next: ASCII/lead  |  not valid          |  next: cont.     |
47308   |  (0-127)    | context: 4 - 63   |                     |  context: 2 - 3  |
47309   |-------------|-------------------|---------------------|------------------|
47310   |  cont. byte | next: ASCII/lead  |  next: ASCII/lead   |  next: cont.     |
47311   |  (128-191)  | context: 4 - 63   |  context: 0 - 1     |  context: 2 - 3  |
47312   |-------------|-------------------|---------------------|------------------|
47313   |  lead byte  | not valid         |  next: ASCII/lead   |  not valid       |
47314   |  (192-207)  |                   |  context: 0 - 1     |                  |
47315   |-------------|-------------------|---------------------|------------------|
47316   |  lead byte  | not valid         |  next: cont.        |  not valid       |
47317   |  (208-)     |                   |  context: 2 - 3     |                  |
47318   |-------------|-------------------|---------------------|------------------|
47319
47320   The context id for the signed context mode is calculated as:
47321
47322     context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2].
47323
47324   For any context modeling modes, the context ids can be calculated by |-ing
47325   together two lookups from one table using context model dependent offsets:
47326
47327     context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2].
47328
47329   where offset1 and offset2 are dependent on the context mode.
47330*/
47331
47332var CONTEXT_LSB6         = 0;
47333var CONTEXT_MSB6         = 1;
47334var CONTEXT_UTF8         = 2;
47335var CONTEXT_SIGNED       = 3;
47336
47337/* Common context lookup table for all context modes. */
47338exports.lookup = new Uint8Array([
47339  /* CONTEXT_UTF8, last byte. */
47340  /* ASCII range. */
47341   0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0,  0,  4,  0,  0,
47342   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
47343   8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,
47344  44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,
47345  12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,
47346  52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,
47347  12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,
47348  60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12,  0,
47349  /* UTF8 continuation byte range. */
47350  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
47351  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
47352  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
47353  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
47354  /* UTF8 lead byte range. */
47355  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
47356  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
47357  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
47358  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
47359  /* CONTEXT_UTF8 second last byte. */
47360  /* ASCII range. */
47361  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47362  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47363  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
47364  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
47365  1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
47366  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
47367  1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
47368  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,
47369  /* UTF8 continuation byte range. */
47370  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47371  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47372  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47373  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47374  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47375  /* UTF8 lead byte range. */
47376  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47377  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
47378  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
47379  /* CONTEXT_SIGNED, second last byte. */
47380  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
47381  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
47382  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
47383  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
47384  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
47385  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
47386  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
47387  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
47388  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
47389  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
47390  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
47391  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
47392  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
47393  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
47394  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
47395  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
47396  /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */
47397   0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
47398  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
47399  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
47400  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
47401  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
47402  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
47403  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
47404  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
47405  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
47406  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
47407  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
47408  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
47409  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
47410  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
47411  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
47412  48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,
47413  /* CONTEXT_LSB6, last byte. */
47414   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
47415  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
47416  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
47417  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
47418   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
47419  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
47420  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
47421  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
47422   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
47423  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
47424  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
47425  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
47426   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
47427  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
47428  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
47429  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
47430  /* CONTEXT_MSB6, last byte. */
47431   0,  0,  0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,
47432   4,  4,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
47433   8,  8,  8,  8,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11, 11,
47434  12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,
47435  16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,
47436  20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,
47437  24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,
47438  28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
47439  32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,
47440  36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,
47441  40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,
47442  44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,
47443  48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,
47444  52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
47445  56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,
47446  60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,
47447  /* CONTEXT_{M,L}SB6, second last byte, */
47448  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47449  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47450  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47451  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47452  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47453  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47454  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47455  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47456  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47457  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47458  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47459  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47460  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47461  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47462  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47463  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47464]);
47465
47466exports.lookupOffsets = new Uint16Array([
47467  /* CONTEXT_LSB6 */
47468  1024, 1536,
47469  /* CONTEXT_MSB6 */
47470  1280, 1536,
47471  /* CONTEXT_UTF8 */
47472  0, 256,
47473  /* CONTEXT_SIGNED */
47474  768, 512,
47475]);
47476
47477
47478/***/ }
47478),
47479/* 290 */
47480/***/ (function(module, exports) {
47481
47482/* Copyright 2013 Google Inc. All Rights Reserved.
47483
47484   Licensed under the Apache License, Version 2.0 (the "License");
47485   you may not use this file except in compliance with the License.
47486   You may obtain a copy of the License at
47487
47488   http://www.apache.org/licenses/LICENSE-2.0
47489
47490   Unless required by applicable law or agreed to in writing, software
47491   distributed under the License is distributed on an "AS IS" BASIS,
47492   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
47493   See the License for the specific language governing permissions and
47494   limitations under the License.
47495
47496   Lookup tables to map prefix codes to value ranges. This is used during
47497   decoding of the block lengths, literal insertion lengths and copy lengths.
47498*/
47499
47500/* Represents the range of values belonging to a prefix code: */
47501/* [offset, offset + 2^nbits) */
47502function PrefixCodeRange(offset, nbits) {
47503  this.offset = offset;
47504  this.nbits = nbits;
47505}
47506
47507exports.kBlockLengthPrefixCode = [
47508  new PrefixCodeRange(1, 2), new PrefixCodeRange(5, 2), new PrefixCodeRange(9, 2), new PrefixCodeRange(13, 2),
47509  new PrefixCodeRange(17, 3), new PrefixCodeRange(25, 3), new PrefixCodeRange(33, 3), new PrefixCodeRange(41, 3),
47510  new PrefixCodeRange(49, 4), new PrefixCodeRange(65, 4), new PrefixCodeRange(81, 4), new PrefixCodeRange(97, 4),
47511  new PrefixCodeRange(113, 5), new PrefixCodeRange(145, 5), new PrefixCodeRange(177, 5), new PrefixCodeRange(209, 5),
47512  new PrefixCodeRange(241, 6), new PrefixCodeRange(305, 6), new PrefixCodeRange(369, 7), new PrefixCodeRange(497, 8),
47513  new PrefixCodeRange(753, 9), new PrefixCodeRange(1265, 10), new PrefixCodeRange(2289, 11), new PrefixCodeRange(4337, 12),
47514  new PrefixCodeRange(8433, 13), new PrefixCodeRange(16625, 24)
47515];
47516
47517exports.kInsertLengthPrefixCode = [
47518  new PrefixCodeRange(0, 0), new PrefixCodeRange(1, 0), new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0),
47519  new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), new PrefixCodeRange(6, 1), new PrefixCodeRange(8, 1),
47520  new PrefixCodeRange(10, 2), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 3), new PrefixCodeRange(26, 3),
47521  new PrefixCodeRange(34, 4), new PrefixCodeRange(50, 4), new PrefixCodeRange(66, 5), new PrefixCodeRange(98, 5),
47522  new PrefixCodeRange(130, 6), new PrefixCodeRange(194, 7), new PrefixCodeRange(322, 8), new PrefixCodeRange(578, 9),
47523  new PrefixCodeRange(1090, 10), new PrefixCodeRange(2114, 12), new PrefixCodeRange(6210, 14), new PrefixCodeRange(22594, 24),
47524];
47525
47526exports.kCopyLengthPrefixCode = [
47527  new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0),
47528  new PrefixCodeRange(6, 0), new PrefixCodeRange(7, 0), new PrefixCodeRange(8, 0), new PrefixCodeRange(9, 0),
47529  new PrefixCodeRange(10, 1), new PrefixCodeRange(12, 1), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 2),
47530  new PrefixCodeRange(22, 3), new PrefixCodeRange(30, 3), new PrefixCodeRange(38, 4), new PrefixCodeRange(54, 4),
47531  new PrefixCodeRange(70, 5), new PrefixCodeRange(102, 5), new PrefixCodeRange(134, 6), new PrefixCodeRange(198, 7),
47532  new PrefixCodeRange(326, 8), new PrefixCodeRange(582, 9), new PrefixCodeRange(1094, 10), new PrefixCodeRange(2
vendor: 16,208 bytes, lines 47532-47952
47532118, 24),
47533];
47534
47535exports.kInsertRangeLut = [
47536  0, 0, 8, 8, 0, 16, 8, 16, 16,
47537];
47538
47539exports.kCopyRangeLut = [
47540  0, 8, 0, 8, 16, 0, 16, 8, 16,
47541];
47542
47543
47544/***/ }),
47545/* 291 */
47546/***/ (function(module, exports, __webpack_require__) {
47547
47548/* Copyright 2013 Google Inc. All Rights Reserved.
47549
47550   Licensed under the Apache License, Version 2.0 (the "License");
47551   you may not use this file except in compliance with the License.
47552   You may obtain a copy of the License at
47553
47554   http://www.apache.org/licenses/LICENSE-2.0
47555
47556   Unless required by applicable law or agreed to in writing, software
47557   distributed under the License is distributed on an "AS IS" BASIS,
47558   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
47559   See the License for the specific language governing permissions and
47560   limitations under the License.
47561
47562   Transformations on dictionary words.
47563*/
47564
47565var BrotliDictionary = __webpack_require__(119);
47566
47567var kIdentity       = 0;
47568var kOmitLast1      = 1;
47569var kOmitLast2      = 2;
47570var kOmitLast3      = 3;
47571var kOmitLast4      = 4;
47572var kOmitLast5      = 5;
47573var kOmitLast6      = 6;
47574var kOmitLast7      = 7;
47575var kOmitLast8      = 8;
47576var kOmitLast9      = 9;
47577var kUppercaseFirst = 10;
47578var kUppercaseAll   = 11;
47579var kOmitFirst1     = 12;
47580var kOmitFirst2     = 13;
47581var kOmitFirst3     = 14;
47582var kOmitFirst4     = 15;
47583var kOmitFirst5     = 16;
47584var kOmitFirst6     = 17;
47585var kOmitFirst7     = 18;
47586var kOmitFirst8     = 19;
47587var kOmitFirst9     = 20;
47588
47589function Transform(prefix, transform, suffix) {
47590  this.prefix = new Uint8Array(prefix.length);
47591  this.transform = transform;
47592  this.suffix = new Uint8Array(suffix.length);
47593
47594  for (var i = 0; i < prefix.length; i++)
47595    this.prefix[i] = prefix.charCodeAt(i);
47596
47597  for (var i = 0; i < suffix.length; i++)
47598    this.suffix[i] = suffix.charCodeAt(i);
47599}
47600
47601var kTransforms = [
47602     new Transform(         "", kIdentity,       ""           ),
47603     new Transform(         "", kIdentity,       " "          ),
47604     new Transform(        " ", kIdentity,       " "          ),
47605     new Transform(         "", kOmitFirst1,     ""           ),
47606     new Transform(         "", kUppercaseFirst, " "          ),
47607     new Transform(         "", kIdentity,       " the "      ),
47608     new Transform(        " ", kIdentity,       ""           ),
47609     new Transform(       "s ", kIdentity,       " "          ),
47610     new Transform(         "", kIdentity,       " of "       ),
47611     new Transform(         "", kUppercaseFirst, ""           ),
47612     new Transform(         "", kIdentity,       " and "      ),
47613     new Transform(         "", kOmitFirst2,     ""           ),
47614     new Transform(         "", kOmitLast1,      ""           ),
47615     new Transform(       ", ", kIdentity,       " "          ),
47616     new Transform(         "", kIdentity,       ", "         ),
47617     new Transform(        " ", kUppercaseFirst, " "          ),
47618     new Transform(         "", kIdentity,       " in "       ),
47619     new Transform(         "", kIdentity,       " to "       ),
47620     new Transform(       "e ", kIdentity,       " "          ),
47621     new Transform(         "", kIdentity,       "\""         ),
47622     new Transform(         "", kIdentity,       "."          ),
47623     new Transform(         "", kIdentity,       "\">"        ),
47624     new Transform(         "", kIdentity,       "\n"         ),
47625     new Transform(         "", kOmitLast3,      ""           ),
47626     new Transform(         "", kIdentity,       "]"          ),
47627     new Transform(         "", kIdentity,       " for "      ),
47628     new Transform(         "", kOmitFirst3,     ""           ),
47629     new Transform(         "", kOmitLast2,      ""           ),
47630     new Transform(         "", kIdentity,       " a "        ),
47631     new Transform(         "", kIdentity,       " that "     ),
47632     new Transform(        " ", kUppercaseFirst, ""           ),
47633     new Transform(         "", kIdentity,       ". "         ),
47634     new Transform(        ".", kIdentity,       ""           ),
47635     new Transform(        " ", kIdentity,       ", "         ),
47636     new Transform(         "", kOmitFirst4,     ""           ),
47637     new Transform(         "", kIdentity,       " with "     ),
47638     new Transform(         "", kIdentity,       "'"          ),
47639     new Transform(         "", kIdentity,       " from "     ),
47640     new Transform(         "", kIdentity,       " by "       ),
47641     new Transform(         "", kOmitFirst5,     ""           ),
47642     new Transform(         "", kOmitFirst6,     ""           ),
47643     new Transform(    " the ", kIdentity,       ""           ),
47644     new Transform(         "", kOmitLast4,      ""           ),
47645     new Transform(         "", kIdentity,       ". The "     ),
47646     new Transform(         "", kUppercaseAll,   ""           ),
47647     new Transform(         "", kIdentity,       " on "       ),
47648     new Transform(         "", kIdentity,       " as "       ),
47649     new Transform(         "", kIdentity,       " is "       ),
47650     new Transform(         "", kOmitLast7,      ""           ),
47651     new Transform(         "", kOmitLast1,      "ing "       ),
47652     new Transform(         "", kIdentity,       "\n\t"       ),
47653     new Transform(         "", kIdentity,       ":"          ),
47654     new Transform(        " ", kIdentity,       ". "         ),
47655     new Transform(         "", kIdentity,       "ed "        ),
47656     new Transform(         "", kOmitFirst9,     ""           ),
47657     new Transform(         "", kOmitFirst7,     ""           ),
47658     new Transform(         "", kOmitLast6,      ""           ),
47659     new Transform(         "", kIdentity,       "("          ),
47660     new Transform(         "", kUppercaseFirst, ", "         ),
47661     new Transform(         "", kOmitLast8,      ""           ),
47662     new Transform(         "", kIdentity,       " at "       ),
47663     new Transform(         "", kIdentity,       "ly "        ),
47664     new Transform(    " the ", kIdentity,       " of "       ),
47665     new Transform(         "", kOmitLast5,      ""           ),
47666     new Transform(         "", kOmitLast9,      ""           ),
47667     new Transform(        " ", kUppercaseFirst, ", "         ),
47668     new Transform(         "", kUppercaseFirst, "\""         ),
47669     new Transform(        ".", kIdentity,       "("          ),
47670     new Transform(         "", kUppercaseAll,   " "          ),
47671     new Transform(         "", kUppercaseFirst, "\">"        ),
47672     new Transform(         "", kIdentity,       "=\""        ),
47673     new Transform(        " ", kIdentity,       "."          ),
47674     new Transform(    ".com/", kIdentity,       ""           ),
47675     new Transform(    " the ", kIdentity,       " of the "   ),
47676     new Transform(         "", kUppercaseFirst, "'"          ),
47677     new Transform(         "", kIdentity,       ". This "    ),
47678     new Transform(         "", kIdentity,       ","          ),
47679     new Transform(        ".", kIdentity,       " "          ),
47680     new Transform(         "", kUppercaseFirst, "("          ),
47681     new Transform(         "", kUppercaseFirst, "."          ),
47682     new Transform(         "", kIdentity,       " not "      ),
47683     new Transform(        " ", kIdentity,       "=\""        ),
47684     new Transform(         "", kIdentity,       "er "        ),
47685     new Transform(        " ", kUppercaseAll,   " "          ),
47686     new Transform(         "", kIdentity,       "al "        ),
47687     new Transform(        " ", kUppercaseAll,   ""           ),
47688     new Transform(         "", kIdentity,       "='"         ),
47689     new Transform(         "", kUppercaseAll,   "\""         ),
47690     new Transform(         "", kUppercaseFirst, ". "         ),
47691     new Transform(        " ", kIdentity,       "("          ),
47692     new Transform(         "", kIdentity,       "ful "       ),
47693     new Transform(        " ", kUppercaseFirst, ". "         ),
47694     new Transform(         "", kIdentity,       "ive "       ),
47695     new Transform(         "", kIdentity,       "less "      ),
47696     new Transform(         "", kUppercaseAll,   "'"          ),
47697     new Transform(         "", kIdentity,       "est "       ),
47698     new Transform(        " ", kUppercaseFirst, "."          ),
47699     new Transform(         "", kUppercaseAll,   "\">"        ),
47700     new Transform(        " ", kIdentity,       "='"         ),
47701     new Transform(         "", kUppercaseFirst, ","          ),
47702     new Transform(         "", kIdentity,       "ize "       ),
47703     new Transform(         "", kUppercaseAll,   "."          ),
47704     new Transform( "\xc2\xa0", kIdentity,       ""           ),
47705     new Transform(        " ", kIdentity,       ","          ),
47706     new Transform(         "", kUppercaseFirst, "=\""        ),
47707     new Transform(         "", kUppercaseAll,   "=\""        ),
47708     new Transform(         "", kIdentity,       "ous "       ),
47709     new Transform(         "", kUppercaseAll,   ", "         ),
47710     new Transform(         "", kUppercaseFirst, "='"         ),
47711     new Transform(        " ", kUppercaseFirst, ","          ),
47712     new Transform(        " ", kUppercaseAll,   "=\""        ),
47713     new Transform(        " ", kUppercaseAll,   ", "         ),
47714     new Transform(         "", kUppercaseAll,   ","          ),
47715     new Transform(         "", kUppercaseAll,   "("          ),
47716     new Transform(         "", kUppercaseAll,   ". "         ),
47717     new Transform(        " ", kUppercaseAll,   "."          ),
47718     new Transform(         "", kUppercaseAll,   "='"         ),
47719     new Transform(        " ", kUppercaseAll,   ". "         ),
47720     new Transform(        " ", kUppercaseFirst, "=\""        ),
47721     new Transform(        " ", kUppercaseAll,   "='"         ),
47722     new Transform(        " ", kUppercaseFirst, "='"         )
47723];
47724
47725exports.kTransforms = kTransforms;
47726exports.kNumTransforms = kTransforms.length;
47727
47728function ToUpperCase(p, i) {
47729  if (p[i] < 0xc0) {
47730    if (p[i] >= 97 && p[i] <= 122) {
47731      p[i] ^= 32;
47732    }
47733    return 1;
47734  }
47735
47736  /* An overly simplified uppercasing model for utf-8. */
47737  if (p[i] < 0xe0) {
47738    p[i + 1] ^= 32;
47739    return 2;
47740  }
47741
47742  /* An arbitrary transform for three byte characters. */
47743  p[i + 2] ^= 5;
47744  return 3;
47745}
47746
47747exports.transformDictionaryWord = function(dst, idx, word, len, transform) {
47748  var prefix = kTransforms[transform].prefix;
47749  var suffix = kTransforms[transform].suffix;
47750  var t = kTransforms[transform].transform;
47751  var skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1);
47752  var i = 0;
47753  var start_idx = idx;
47754  var uppercase;
47755
47756  if (skip > len) {
47757    skip = len;
47758  }
47759
47760  var prefix_pos = 0;
47761  while (prefix_pos < prefix.length) {
47762    dst[idx++] = prefix[prefix_pos++];
47763  }
47764
47765  word += skip;
47766  len -= skip;
47767
47768  if (t <= kOmitLast9) {
47769    len -= t;
47770  }
47771
47772  for (i = 0; i < len; i++) {
47773    dst[idx++] = BrotliDictionary.dictionary[word + i];
47774  }
47775
47776  uppercase = idx - len;
47777
47778  if (t === kUppercaseFirst) {
47779    ToUpperCase(dst, uppercase);
47780  } else if (t === kUppercaseAll) {
47781    while (len > 0) {
47782      var step = ToUpperCase(dst, uppercase);
47783      uppercase += step;
47784      len -= step;
47785    }
47786  }
47787
47788  var suffix_pos = 0;
47789  while (suffix_pos < suffix.length) {
47790    dst[idx++] = suffix[suffix_pos++];
47791  }
47792
47793  return idx - start_idx;
47794}
47795
47796
47797/***/ }),
47798/* 292 */
47799/***/ (function(module, exports, __webpack_require__) {
47800
47801/* WEBPACK VAR INJECTION */(function(__dirname) {// Generated by CoffeeScript 1.12.6
47802(function() {
47803  var AFMFont, PDFFont, StandardFont, fs,
47804    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
47805    hasProp = {}.hasOwnProperty;
47806
47807  AFMFont = __webpack_require__(293);
47808
47809  PDFFont = __webpack_require__(50);
47810
47811  fs = __webpack_require__(8);
47812
47813  StandardFont = (function(superClass) {
47814    var STANDARD_FONTS;
47815
47816    extend(StandardFont, superClass);
47817
47818    function StandardFont(document, name1, id) {
47819      var ref;
47820      this.document = document;
47821      this.name = name1;
47822      this.id = id;
47823      this.font = new AFMFont(STANDARD_FONTS[this.name]());
47824      ref = this.font, this.ascender = ref.ascender, this.descender = ref.descender, this.bbox = ref.bbox, this.lineGap = ref.lineGap;
47825    }
47826
47827    StandardFont.prototype.embed = function() {
47828      this.dictionary.data = {
47829        Type: 'Font',
47830        BaseFont: this.name,
47831        Subtype: 'Type1',
47832        Encoding: 'WinAnsiEncoding'
47833      };
47834      return this.dictionary.end();
47835    };
47836
47837    StandardFont.prototype.encode = function(text) {
47838      var advances, encoded, glyph, glyphs, i, j, len, positions;
47839      encoded = this.font.encodeText(text);
47840      glyphs = this.font.glyphsForString('' + text);
47841      advances = this.font.advancesForGlyphs(glyphs);
47842      positions = [];
47843      for (i = j = 0, len = glyphs.length; j < len; i = ++j) {
47844        glyph = glyphs[i];
47845        positions.push({
47846          xAdvance: advances[i],
47847          yAdvance: 0,
47848          xOffset: 0,
47849          yOffset: 0,
47850          advanceWidth: this.font.widthOfGlyph(glyph)
47851        });
47852      }
47853      return [encoded, positions];
47854    };
47855
47856    StandardFont.prototype.widthOfString = function(string, size) {
47857      var advance, advances, glyphs, j, len, scale, width;
47858      glyphs = this.font.glyphsForString('' + string);
47859      advances = this.font.advancesForGlyphs(glyphs);
47860      width = 0;
47861      for (j = 0, len = advances.length; j < len; j++) {
47862        advance = advances[j];
47863        width += advance;
47864      }
47865      scale = size / 1000;
47866      return width * scale;
47867    };
47868
47869    StandardFont.isStandardFont = function(name) {
47870      return name in STANDARD_FONTS;
47871    };
47872
47873    STANDARD_FONTS = {
47874      "Courier": function() {
47875        return fs.readFileSync(__dirname + "/../font/data/Courier.afm", 'utf8');
47876      },
47877      "Courier-Bold": function() {
47878        return fs.readFileSync(__dirname + "/../font/data/Courier-Bold.afm", 'utf8');
47879      },
47880      "Courier-Oblique": function() {
47881        return fs.readFileSync(__dirname + "/../font/data/Courier-Oblique.afm", 'utf8');
47882      },
47883      "Courier-BoldOblique": function() {
47884        return fs.readFileSync(__dirname + "/../font/data/Courier-BoldOblique.afm", 'utf8');
47885      },
47886      "Helvetica": function() {
47887        return fs.readFileSync(__dirname + "/../font/data/Helvetica.afm", 'utf8');
47888      },
47889      "Helvetica-Bold": function() {
47890        return fs.readFileSync(__dirname + "/../font/data/Helvetica-Bold.afm", 'utf8');
47891      },
47892      "Helvetica-Oblique": function() {
47893        return fs.readFileSync(__dirname + "/../font/data/Helvetica-Oblique.afm", 'utf8');
47894      },
47895      "Helvetica-BoldOblique": function() {
47896        return fs.readFileSync(__dirname + "/../font/data/Helvetica-BoldOblique.afm", 'utf8');
47897      },
47898      "Times-Roman": function() {
47899        return fs.readFileSync(__dirname + "/../font/data/Times-Roman.afm", 'utf8');
47900      },
47901      "Times-Bold": function() {
47902        return fs.readFileSync(__dirname + "/../font/data/Times-Bold.afm", 'utf8');
47903      },
47904      "Times-Italic": function() {
47905        return fs.readFileSync(__dirname + "/../font/data/Times-Italic.afm", 'utf8');
47906      },
47907      "Times-BoldItalic": function() {
47908        return fs.readFileSync(__dirname + "/../font/data/Times-BoldItalic.afm", 'utf8');
47909      },
47910      "Symbol": function() {
47911        return fs.readFileSync(__dirname + "/../font/data/Symbol.afm", 'utf8');
47912      },
47913      "ZapfDingbats": function() {
47914        return fs.readFileSync(__dirname + "/../font/data/ZapfDingbats.afm", 'utf8');
47915      }
47916    };
47917
47918    return StandardFont;
47919
47920  })(PDFFont);
47921
47922  module.exports = StandardFont;
47923
47924}).call(this);
47925
47926/* WEBPACK VAR INJECTION */}.call(exports, "/"))
47927
47928/***/ }),
47929/* 293 */
47930/***/ (function(module, exports, __webpack_require__) {
47931
47932// Generated by CoffeeScript 1.12.6
47933(function() {
47934  var AFMFont, fs;
47935
47936  fs = __webpack_require__(8);
47937
47938  AFMFont = (function() {
47939    var WIN_ANSI_MAP, characters;
47940
47941    AFMFont.open = function(filename) {
47942      return new AFMFont(fs.readFileSync(filename, 'utf8'));
47943    };
47944
47945    function AFMFont(contents) {
47946      var e, i;
47947      this.contents = contents;
47948      this.attributes = {};
47949      this.glyphWidths = {};
47950      this.boundingBoxes = {};
47951      this.kernPairs = {};
47952      this.parse();
47953      this.charWidths = (function() {
47954        var j, results;
47955        results = [];
47956        for (i = j = 0; j <= 255; i = ++j) {
47957          results.push(this.glyphWidths[characters[i]]);
47958        }
47959        return results;
47960      }).call(this);
47961      this.bbox = (function() {
47962        var j, len, ref, results;
47963        ref = this.attributes['FontBBox'].split(/\s+/);
47964        results = [];
47965        for (j = 0, len = ref.length; j < len; j++) {
47966          e = ref[j];
47967          results.push(+e);
47968        }
47969        return results;
47970      }).call(this);
47971      this.ascender = +(this.attributes['Ascender'] || 0);
47972      this.descender = +(this.attributes['Descender'] || 0);
47973      this.lineGap = (this.bbox[3] - this.bbox[1]) - (this.ascender - this.descender);
47974    }
47975
47976    AFMFont.prototype.parse = function() {
47977      var a, j, key, len, line, match, name, ref, section, value;
47978      section = '';
47979      ref = this.contents.split('\n');
47980      for (j = 0, len = ref.length; j < len; j++) {
47981        line = ref[j];
47982        if (match = line.match(/^Start(\w+)/)) {
47983          section = match[1];
47984          continue;
47985        } else if (match = line.match(/^End(\w+)/)) {
47986          section = '';
47987          continue;
47988        }
47989        switch (section) {
47990          case 'FontMetrics':
47991            match = line.match(/(^\w+)\s+(.*)/);
47992            key = match[1];
47993            value = match[2];
47994            if (a = this.attributes[key]) {
47995              if (!Array.isArray(a)) {
47996                a = this.attributes[key] = [a];
47997              }
47998              a.push(value);
47999            } else {
48000              this.attributes[key] = value;
48001            }
48002            break;
48003          case 'CharMetrics':
48004            if (!/^CH?\s/.test(line)) {
48005              continue;
48006            }
48007            name = line.match(/\bN\s+(\.?\w+)\s*;/)[1];
48008            this.glyphWidths[name] = +line.match(/\bWX\s+(\d+)\s*;/)[1];
48009            break;
48010          case 'KernPairs':
48011            match = line.match(/^KPX\s+(\.?\w+)\s+(\.?\w+)\s+(-?\d+)/);
48012            if (match) {
48013              this.kernPairs[match[1] + '\0' + match[2]] = parseInt(match[3]);
48014            }
48015        }
48016      }
48017    };
48018
48019    WIN_ANSI_MAP = {
48020      402: 131,
48021      8211: 150,
48022      8212: 151,
48023      8216: 145,
48024      8217: 146,
48025      8218: 130,
48026      8220: 147,
48027      8221: 148,
48028      8222: 132,
48029      8224: 134,
48030      8225: 135,
48031      8226: 149,
48032      8230: 133,
48033      8364: 128,
48034      8240: 137,
48035      8249: 139,
48036      8250: 155,
48037      710: 136,
48038      8482: 153,
48039      338: 140,
48040      339: 156,
48041      732: 152,
48042      352: 138,
48043      353: 154,
48044      376: 159,
48045      381: 142,
48046      382: 158
48047    };
48048
48049    AFMFont.prototype.encodeText = function(text) {
48050      var char, i, j, ref, res;
48051      res = [];
48052      for (i = j = 0, ref = text.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
48053        char = text.charCodeAt(i);
48054        char = WIN_ANSI_MAP[char] || char;
48055        res.push(char.toString(16));
48056      }
48057      return res;
48058    };
48059
48060    AFMFont.prototype.glyphsForString = function(string) {
48061      var charCode, glyphs, i, j, ref;
48062      glyphs = [];
48063      for (i = j = 0, ref = string.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
48064        charCode = string.charCodeAt(i);
48065        glyphs.push(this.characterToGlyph(charCode));
48066      }
48067      return glyphs;
48068    };
48069
48070    AFMFont.prototype.characterToGlyph = function(character) {
48071      return characters[WIN_ANSI_MAP[character] || character] || '.notdef';
48072    };
48073
48074    AFMFont.prototype.widthOfGlyph = function(glyph) {
48075      return this.glyphWidths[glyph] || 0;
48076    };
48077
48078    AFMFont.prototype.getKernPair = function(left, right) {
48079      return this.kernPairs[left + '\0' + right] || 0;
48080    };
48081
48082    AFMFont.prototype.advancesForGlyphs = function(glyphs) {
48083      var advances, index, j, left, len, right;
48084      advances = [];
48085      for (index = j = 0, len = glyphs.length; j < len; index = ++j) {
48086        left = glyphs[index];
48087        right = glyphs[index + 1];
48088        advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));
48089      }
48090      return advances;
48091    };
48092
48093    characters = '.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n\nspace         exclam         quotedbl       numbersign\ndollar        percent        ampersand      quotesingle\nparenleft     parenright     asterisk       plus\ncomma         hyphen         period         slash\nzero          one            two            three\nfour          five           six            seven\neight         nine           colon          semicolon\nless          equal          greater        question\n\nat            A              B              C\nD             E              F              G\nH             I              J              K\nL             M              N              O\nP             Q              R              S\nT             U              V              W\nX             Y              Z              bracketleft\nbackslash     bracketright   asciicircum    underscore\n\ngrave         a              b              c\nd             e              f              g\nh             i              j              k\nl             m              n              o\np             q              r              s\nt             u              v              w\nx             y              z              braceleft\nbar           braceright     asciitilde     .notdef\n\nEuro          .notdef        quotesinglbase florin\nquotedblbase  ellipsis       dagger         daggerdbl\ncircumflex    perthousand    Scaron         guilsinglleft\nOE            .notdef        Zcaron         .notdef\n.notdef       quoteleft      quoteright     quotedblleft\nquotedblright bullet         endash         emdash\ntilde         trademark      scaron         guilsinglright\noe            .notdef        zcaron         ydieresis\n\nspace         exclamdown     cent           sterling\ncurrency      yen            brokenbar      section\ndieresis      copyright      ordfeminine    guillemotleft\nlogicalnot    hyphen         registered     macron\ndegree        plusminus      twosuperior    threesuperior\nacute         mu             paragraph      periodce
48093ntered\ncedilla       onesuperior    ordmasculine   guillemotright\nonequarter    onehalf        threequarters  questiondown\n\nAgrave        Aacute         Acircumflex    Atilde\nAdieresis     Aring          AE             Ccedilla\nEgrave        Eacute         Ecircumflex    Edieresis\nIgrave        Iacute         Icircumflex    Idieresis\nEth           Ntilde         Ograve         Oacute\nOcircumflex   Otilde         Odieresis      multiply\nOslash        Ugrave         Uacute         Ucircumflex\nUdieresis     Yacute         Thorn          germandbls\n\nagrave        aacute         acircumflex    atilde\nadieresis     aring          ae             ccedilla\negrave        eacute         ecircumflex    edieresis\nigrave        iacute         icircumflex    idieresis\neth           ntilde         ograve         oacute\nocircumflex   otilde         odieresis      divide\noslash        ugrave         uacute         ucircumflex\nudieresis     yacute         thorn          ydieresis'.split(/\s+/);
48094
48095    return AFMFont;
48096
48097  })();
48098
48099  module.exports = AFMFont;
48100
48101}).call(this);
48102
48103
48104/***/ }),
48105/* 294 */
48106/***/ (function(module, exports, __webpack_require__) {
48107
48108// Generated by CoffeeScript 1.12.6
48109(function() {
48110  var EmbeddedFont, PDFFont, PDFObject,
48111    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
48112    hasProp = {}.hasOwnProperty,
48113    slice = [].slice;
48114
48115  PDFFont = __webpack_require__(50);
48116
48117  PDFObject = __webpack_require__(26);
48118
48119  EmbeddedFont = (function(superClass) {
48120    var toHex;
48121
48122    extend(EmbeddedFont, superClass);
48123
48124    function EmbeddedFont(document, font, id) {
48125      this.document = document;
48126      this.font = font;
48127      this.id = id;
48128      this.subset = this.font.createSubset();
48129      this.unicode = [[0]];
48130      this.widths = [this.font.getGlyph(0).advanceWidth];
48131      this.name = this.font.postscriptName;
48132      this.scale = 1000 / this.font.unitsPerEm;
48133      this.ascender = this.font.ascent * this.scale;
48134      this.descender = this.font.descent * this.scale;
48135      this.lineGap = this.font.lineGap * this.scale;
48136      this.bbox = this.font.bbox;
48137      this.layoutCache = Object.create(null);
48138    }
48139
48140    EmbeddedFont.prototype.layoutRun = function(text, features) {
48141      var i, j, key, len, position, ref, run;
48142      run = this.font.layout(text, features);
48143      ref = run.positions;
48144      for (i = j = 0, len = ref.length; j < len; i = ++j) {
48145        position = ref[i];
48146        for (key in position) {
48147          position[key] *= this.scale;
48148        }
48149        position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;
48150      }
48151      return run;
48152    };
48153
48154    EmbeddedFont.prototype.layoutCached = function(text) {
48155      var cached, run;
48156      if (cached = this.layoutCache[text]) {
48157        return cached;
48158      }
48159      run = this.layoutRun(text);
48160      this.layoutCache[text] = run;
48161      return run;
48162    };
48163
48164    EmbeddedFont.prototype.layout = function(text, features, onlyWidth) {
48165      var advanceWidth, glyphs, index, last, positions, ref, run;
48166      if (onlyWidth == null) {
48167        onlyWidth = false;
48168      }
48169      if (features) {
48170        return this.layoutRun(text, features);
48171      }
48172      glyphs = onlyWidth ? null : [];
48173      positions = onlyWidth ? null : [];
48174      advanceWidth = 0;
48175      last = 0;
48176      index = 0;
48177      while (index <= text.length) {
48178        if ((index === text.length && last < index) || ((ref = text.charAt(index)) === ' ' || ref === '\t')) {
48179          run = this.layoutCached(text.slice(last, ++index));
48180          if (!onlyWidth) {
48181            glyphs.push.apply(glyphs, run.glyphs);
48182            positions.push.apply(positions, run.positions);
48183          }
48184          advanceWidth += run.advanceWidth;
48185          last = index;
48186        } else {
48187          index++;
48188        }
48189      }
48190      return {
48191        glyphs: glyphs,
48192        positions: positions,
48193        advanceWidth: advanceWidth
48194      };
48195    };
48196
48197    EmbeddedFont.prototype.encode = function(text, features) {
48198      var base, base1, gid, glyph, glyphs, i, j, len, positions, ref, res;
48199      ref = this.layout(text, features), glyphs = ref.glyphs, positions = ref.positions;
48200      res = [];
48201      for (i = j = 0, len = glyphs.length; j < len; i = ++j) {
48202        glyph = glyphs[i];
48203        gid = this.subset.includeGlyph(glyph.id);
48204        res.push(('0000' + gid.toString(16)).slice(-4));
48205        if ((base = this.widths)[gid] == null) {
48206          base[gid] = glyph.advanceWidth * this.scale;
48207        }
48208        if ((base1 = this.unicode)[gid] == null) {
48209          base1[gid] = glyph.codePoints;
48210        }
48211      }
48212      return [res, positions];
48213    };
48214
48215    EmbeddedFont.prototype.widthOfString = function(string, size, features) {
48216      var scale, width;
48217      width = this.layout(string, features, true).advanceWidth;
48218      scale = size / 1000;
48219      return width * scale;
48220    };
48221
48222    EmbeddedFont.prototype.embed = function() {
48223      var bbox, descendantFont, descriptor, familyClass, flags, fontFile, i, isCFF, name, ref, tag;
48224      isCFF = this.subset.cff != null;
48225      fontFile = this.document.ref();
48226      if (isCFF) {
48227        fontFile.data.Subtype = 'CIDFontType0C';
48228      }
48229      this.subset.encodeStream().pipe(fontFile);
48230      familyClass = (((ref = this.font['OS/2']) != null ? ref.sFamilyClass : void 0) || 0) >> 8;
48231      flags = 0;
48232      if (this.font.post.isFixedPitch) {
48233        flags |= 1 << 0;
48234      }
48235      if ((1 <= familyClass && familyClass <= 7)) {
48236        flags |= 1 << 1;
48237      }
48238      flags |= 1 << 2;
48239      if (familyClass === 10) {
48240        flags |= 1 << 3;
48241      }
48242      if (this.font.head.macStyle.italic) {
48243        flags |= 1 << 6;
48244      }
48245      tag = ((function() {
48246        var j, results;
48247        results = [];
48248        for (i = j = 0; j < 6; i = ++j) {
48249          results.push(String.fromCharCode(Math.random() * 26 + 65));
48250        }
48251        return results;
48252      })()).join('');
48253      name = tag + '+' + this.font.postscriptName;
48254      bbox = this.font.bbox;
48255      descriptor = this.document.ref({
48256        Type: 'FontDescriptor',
48257        FontName: name,
48258        Flags: flags,
48259        FontBBox: [bbox.minX * this.scale, bbox.minY * this.scale, bbox.maxX * this.scale, bbox.maxY * this.scale],
48260        ItalicAngle: this.font.italicAngle,
48261        Ascent: this.ascender,
48262        Descent: this.descender,
48263        CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,
48264        XHeight: (this.font.xHeight || 0) * this.scale,
48265        StemV: 0
48266      });
48267      if (isCFF) {
48268        descriptor.data.FontFile3 = fontFile;
48269      } else {
48270        descriptor.data.FontFile2 = fontFile;
48271      }
48272      descriptor.end();
48273      descendantFont = this.document.ref({
48274        Type: 'Font',
48275        Subtype: isCFF ? 'CIDFontType0' : 'CIDFontType2',
48276        BaseFont: name,
48277        CIDSystemInfo: {
48278          Registry: new String('Adobe'),
48279          Ordering: new String('Identity'),
48280          Supplement: 0
48281        },
48282        FontDescriptor: descriptor,
48283        W: [0, this.widths]
48284      });
48285      descendantFont.end();
48286      this.dictionary.data = {
48287        Type: 'Font',
48288        Subtype: 'Type0',
48289        BaseFont: name,
48290        Encoding: 'Identity-H',
48291        DescendantFonts: [descendantFont],
48292        ToUnicode: this.toUnicodeCmap()
48293      };
48294      return this.dictionary.end();
48295    };
48296
48297    toHex = function() {
48298      var code, codePoints, codes;
48299      codePoints = 1 <= arguments.length ? slice.call(arguments, 0) : [];
48300      codes = (function() {
48301        var j, len, results;
48302        results = [];
48303        for (j = 0, len = codePoints.length; j < len; j++) {
48304          code = codePoints[j];
48305          results.push(('0000' + code.toString(16)).slice(-4));
48306        }
48307        return results;
48308      })();
48309      return codes.join('');
48310    };
48311
48312    EmbeddedFont.prototype.toUnicodeCmap = function() {
48313      var cmap, codePoints, encoded, entries, j, k, len, len1, ref, value;
48314      cmap = this.document.ref();
48315      entries = [];
48316      ref = this.unicode;
48317      for (j = 0, len = ref.length; j < len; j++) {
48318        codePoints = ref[j];
48319        encoded = [];
48320        for (k = 0, len1 = codePoints.length; k < len1; k++) {
48321          value = codePoints[k];
48322          if (value > 0xffff) {
48323            value -= 0x10000;
48324            encoded.push(toHex(value >>> 10 & 0x3ff | 0xd800));
48325            value = 0xdc00 | value & 0x3ff;
48326          }
48327          encoded.push(toHex(value));
48328        }
48329        entries.push("<" + (encoded.join(' ')) + ">");
48330      }
48331      cmap.end("/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n  /Registry (Adobe)\n  /Ordering (UCS)\n  /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000><ffff>\nendcodespacerange\n1 beginbfrange\n<0000> <" + (toHex(entries.length - 1)) + "> [" + (entries.join(' ')) + "]\nendbfrange\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend");
48332      return cmap;
48333    };
48334
48335    return EmbeddedFont;
48336
48337  })(PDFFont);
48338
48339  module.exports = EmbeddedFont;
48340
48341}).call(this);
48342
48343
48344/***/ }),
48345/* 295 */
48346/***/ (function(module, exports, __webpack_require__) {
48347
48348// Generated by CoffeeScript 1.12.6
48349(function() {
48350  var LineWrapper, number;
48351
48352  LineWrapper = __webpack_require__(296);
48353
48354  number = __webpack_require__(26).number;
48355
48356  module.exports = {
48357    initText: function() {
48358      this.x = 0;
48359      this.y = 0;
48360      return this._lineGap = 0;
48361    },
48362    lineGap: function(_lineGap) {
48363      this._lineGap = _lineGap;
48364      return this;
48365    },
48366    moveDown: function(lines) {
48367      if (lines == null) {
48368        lines = 1;
48369      }
48370      this.y += this.currentLineHeight(true) * lines + this._lineGap;
48371      return this;
48372    },
48373    moveUp: function(lines) {
48374      if (lines == null) {
48375        lines = 1;
48376      }
48377      this.y -= this.currentLineHeight(true) * lines + this._lineGap;
48378      return this;
48379    },
48380    _text: function(text, x, y, options, lineCallback) {
48381      var j, len, line, ref, wrapper;
48382      options = this._initOptions(x, y, options);
48383      text = text == null ? '' : '' + text;
48384      if (options.wordSpacing) {
48385        text = text.replace(/\s{2,}/g, ' ');
48386      }
48387      if (options.width) {
48388        wrapper = this._wrapper;
48389        if (!wrapper) {
48390          wrapper = new LineWrapper(this, options);
48391          wrapper.on('line', lineCallback);
48392        }
48393        this._wrapper = options.continued ? wrapper : null;
48394        this._textOptions = options.continued ? options : null;
48395        wrapper.wrap(text, options);
48396      } else {
48397        ref = text.split('\n');
48398        for (j = 0, len = ref.length; j < len; j++) {
48399          line = ref[j];
48400          lineCallback(line, options);
48401        }
48402      }
48403      return this;
48404    },
48405    text: function(text, x, y, options) {
48406      return this._text(text, x, y, options, this._line.bind(this));
48407    },
48408    widthOfString: function(string, options) {
48409      if (options == null) {
48410        options = {};
48411      }
48412      return this._font.widthOfString(string, this._fontSize, options.features) + (options.characterSpacing || 0) * (string.length - 1);
48413    },
48414    heightOfString: function(text, options) {
48415      var height, lineGap, ref, x, y;
48416      if (options == null) {
48417        options = {};
48418      }
48419      ref = this, x = ref.x, y = ref.y;
48420      options = this._initOptions(options);
48421      options.height = 2e308;
48422      lineGap = options.lineGap || this._lineGap || 0;
48423      this._text(text, this.x, this.y, options, (function(_this) {
48424        return function(line, options) {
48425          return _this.y += _this.currentLineHeight(true) + lineGap;
48426        };
48427      })(this));
48428      height = this.y - y;
48429      this.x = x;
48430      this.y = y;
48431      return height;
48432    },
48433    list: function(list, x, y, options, wrapper) {
48434      var flatten, i, indent, itemIndent, items, level, levels, midLine, r;
48435      options = this._initOptions(x, y, options);
48436      midLine = Math.round((this._font.ascender / 1000 * this._fontSize) / 2);
48437      r = options.bulletRadius || Math.round((this._font.ascender / 1000 * this._fontSize) / 3);
48438      indent = options.textIndent || r * 5;
48439      itemIndent = options.bulletIndent || r * 8;
48440      level = 1;
48441      items = [];
48442      levels = [];
48443      flatten = function(list) {
48444        var i, item, j, len, results;
48445        results = [];
48446        for (i = j = 0, len = list.length; j < len; i = ++j) {
48447          item = list[i];
48448          if (Array.isArray(item)) {
48449            level++;
48450            flatten(item);
48451            results.push(level--);
48452          } else {
48453            items.push(item);
48454            results.push(levels.push(level));
48455          }
48456        }
48457        return results;
48458      };
48459      flatten(list);
48460      wrapper = new LineWrapper(this, options);
48461      wrapper.on('line', this._line.bind(this));
48462      level = 1;
48463      i = 0;
48464      wrapper.on('firstLine', (function(_this) {
48465        return function() {
48466          var diff, l;
48467          if ((l = levels[i++]) !== level) {
48468            diff = itemIndent * (l - level);
48469            _this.x += diff;
48470            wrapper.lineWidth -= diff;
48471            level = l;
48472          }
48473          _this.circle(_this.x - indent + r, _this.y + midLine, r);
48474          return _this.fill();
48475        };
48476      })(this));
48477      wrapper.on('sectionStart', (function(_this) {
48478        return function() {
48479          var pos;
48480          pos = indent + itemIndent * (level - 1);
48481          _this.x += pos;
48482          return wrapper.lineWidth -= pos;
48483        };
48484      })(this));
48485      wrapper.on('sectionEnd', (function(_this) {
48486        return function() {
48487          var pos;
48488          pos = indent + itemIndent * (level - 1);
48489          _this.x -= pos;
48490          return wrapper.lineWidth += pos;
48491        };
48492      })(this));
48493      wrapper.wrap(items.join('\n'), options);
48494      return this;
48495    },
48496    _initOptions: function(x, y, options) {
48497      var key, ref, val;
48498      if (x == null) {
48499        x = {};
48500      }
48501      if (options == null) {
48502        options = {};
48503      }
48504      if (typeof x === 'object') {
48505        options = x;
48506        x = null;
48507      }
48508      options = (function() {
48509        var k, opts, v;
48510        opts = {};
48511        for (k in options) {
48512          v = options[k];
48513          opts[k] = v;
48514        }
48515        return opts;
48516      })();
48517      if (this._textOptions) {
48518        ref = this._textOptions;
48519        for (key in ref) {
48520          val = ref[key];
48521          if (key !== 'continued') {
48522            if (options[key] == null) {
48523              options[key] = val;
48524            }
48525          }
48526        }
48527      }
48528      if (x != null) {
48529        this.x = x;
48530      }
48531      if (y != null) {
48532        this.y = y;
48533      }
48534      if (options.lineBreak !== false) {
48535        if (options.width == null) {
48536          options.width = this.page.width - this.x - this.page.margins.right;
48537        }
48538      }
48539      options.columns || (options.columns = 0);
48540      if (options.columnGap == null) {
48541        options.columnGap = 18;
48542      }
48543      return options;
48544    },
48545    _line: function(text, options, wrapper) {
48546      var lineGap;
48547      if (options == null) {
48548        options = {};
48549      }
48550      this._fragment(text, this.x, this.y, options);
48551      lineGap = options.lineGap || this._lineGap || 0;
48552      if (!wrapper) {
48553        return this.x += this.widthOfString(text);
48554      } else {
48555        return this.y += this.currentLineHeight(true) + lineGap;
48556      }
48557    },
48558    _fragment: function(text, x, y, options) {
48559      var addSegment, align, base, characterSpacing, commands, d, encoded, encodedWord, flush, hadOffset, i, j, key, last, len, len1, lineWidth, lineY, m, mode, name, pos, positions, positionsWord, ref, ref1, ref2, renderedWidth, scale, space, spaceWidth, textWidth, val, word, wordSpacing, words;
48560      text = ('' + text).replace(/\n/g, '');
48561      if (text.length === 0) {
48562        return;
48563      }
48564      align = options.align || 'left';
48565      wordSpacing = options.wordSpacing || 0;
48566      characterSpacing = options.characterSpacing || 0;
48567      if (options.width) {
48568        switch (align) {
48569          case 'right':
48570            textWidth = this.widthOfString(text.replace(/\s+$/, ''), options);
48571            x += options.lineWidth - textWidth;
48572            break;
48573          case 'center':
48574            x += options.lineWidth / 2 - options.textWidth / 2;
48575            break;
48576          case 'justify':
48577            words = text.trim().split(/\s+/);
48578            textWidth = this.widthOfString(text.replace(/\s+/g, ''), options);
48579            spaceWidth = this.widthOfString(' ') + characterSpacing;
48580            wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWi
48580dth);
48581        }
48582      }
48583      renderedWidth = options.textWidth + (wordSpacing * (options.wordCount - 1)) + (characterSpacing * (text.length - 1));
48584      if (options.link) {
48585        this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);
48586      }
48587      if (options.underline || options.strike) {
48588        this.save();
48589        if (!options.stroke) {
48590          this.strokeColor.apply(this, this._fillColor);
48591        }
48592        lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);
48593        this.lineWidth(lineWidth);
48594        d = options.underline ? 1 : 2;
48595        lineY = y + this.currentLineHeight() / d;
48596        if (options.underline) {
48597          lineY -= lineWidth;
48598        }
48599        this.moveTo(x, lineY);
48600        this.lineTo(x + renderedWidth, lineY);
48601        this.stroke();
48602        this.restore();
48603      }
48604      this.save();
48605      this.transform(1, 0, 0, -1, 0, this.page.height);
48606      y = this.page.height - y - (this._font.ascender / 1000 * this._fontSize);
48607      if ((base = this.page.fonts)[name = this._font.id] == null) {
48608        base[name] = this._font.ref();
48609      }
48610      this.addContent("BT");
48611      this.addContent("1 0 0 1 " + (number(x)) + " " + (number(y)) + " Tm");
48612      this.addContent("/" + this._font.id + " " + (number(this._fontSize)) + " Tf");
48613      mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;
48614      if (mode) {
48615        this.addContent(mode + " Tr");
48616      }
48617      if (characterSpacing) {
48618        this.addContent((number(characterSpacing)) + " Tc");
48619      }
48620      if (wordSpacing) {
48621        words = text.trim().split(/\s+/);
48622        wordSpacing += this.widthOfString(' ') + characterSpacing;
48623        wordSpacing *= 1000 / this._fontSize;
48624        encoded = [];
48625        positions = [];
48626        for (j = 0, len = words.length; j < len; j++) {
48627          word = words[j];
48628          ref = this._font.encode(word, options.features), encodedWord = ref[0], positionsWord = ref[1];
48629          encoded.push.apply(encoded, encodedWord);
48630          positions.push.apply(positions, positionsWord);
48631          space = {};
48632          ref1 = positions[positions.length - 1];
48633          for (key in ref1) {
48634            val = ref1[key];
48635            space[key] = val;
48636          }
48637          space.xAdvance += wordSpacing;
48638          positions[positions.length - 1] = space;
48639        }
48640      } else {
48641        ref2 = this._font.encode(text, options.features), encoded = ref2[0], positions = ref2[1];
48642      }
48643      scale = this._fontSize / 1000;
48644      commands = [];
48645      last = 0;
48646      hadOffset = false;
48647      addSegment = (function(_this) {
48648        return function(cur) {
48649          var advance, hex;
48650          if (last < cur) {
48651            hex = encoded.slice(last, cur).join('');
48652            advance = positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;
48653            commands.push("<" + hex + "> " + (number(-advance)));
48654          }
48655          return last = cur;
48656        };
48657      })(this);
48658      flush = (function(_this) {
48659        return function(i) {
48660          addSegment(i);
48661          if (commands.length > 0) {
48662            _this.addContent("[" + (commands.join(' ')) + "] TJ");
48663            return commands.length = 0;
48664          }
48665        };
48666      })(this);
48667      for (i = m = 0, len1 = positions.length; m < len1; i = ++m) {
48668        pos = positions[i];
48669        if (pos.xOffset || pos.yOffset) {
48670          flush(i);
48671          this.addContent("1 0 0 1 " + (number(x + pos.xOffset * scale)) + " " + (number(y + pos.yOffset * scale)) + " Tm");
48672          flush(i + 1);
48673          hadOffset = true;
48674        } else {
48675          if (hadOffset) {
48676            this.addContent("1 0 0 1 " + (number(x)) + " " + (number(y)) + " Tm");
48677            hadOffset = false;
48678          }
48679          if (pos.xAdvance - pos.advanceWidth !== 0) {
48680            addSegment(i + 1);
48681          }
48682        }
48683        x += pos.xAdvance * scale;
48684      }
48685      flush(i);
48686      this.addContent("ET");
48687      return this.restore();
48688    }
48689  };
48690
48691}).call(this);
48692
48693
48694/***/ }),
48695/* 296 */
48696/***/ (function(module, exports, __webpack_require__) {
48697
48698// Generated by CoffeeScript 1.12.6
48699(function() {
48700  var EventEmitter, LineBreaker, LineWrapper,
48701    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
48702    hasProp = {}.hasOwnProperty;
48703
48704  EventEmitter = __webpack_require__(31).EventEmitter;
48705
48706  LineBreaker = __webpack_require__(78);
48707
48708  LineWrapper = (function(superClass) {
48709    extend(LineWrapper, superClass);
48710
48711    function LineWrapper(document, options) {
48712      var ref;
48713      this.document = document;
48714      this.indent = options.indent || 0;
48715      this.characterSpacing = options.characterSpacing || 0;
48716      this.wordSpacing = options.wordSpacing === 0;
48717      this.columns = options.columns || 1;
48718      this.columnGap = (ref = options.columnGap) != null ? ref : 18;
48719      this.lineWidth = (options.width - (this.columnGap * (this.columns - 1))) / this.columns;
48720      this.spaceLeft = this.lineWidth;
48721      this.startX = this.document.x;
48722      this.startY = this.document.y;
48723      this.column = 1;
48724      this.ellipsis = options.ellipsis;
48725      this.continuedX = 0;
48726      this.features = options.features;
48727      if (options.height != null) {
48728        this.height = options.height;
48729        this.maxY = this.startY + options.height;
48730      } else {
48731        this.maxY = this.document.page.maxY();
48732      }
48733      this.on('firstLine', (function(_this) {
48734        return function(options) {
48735          var indent;
48736          indent = _this.continuedX || _this.indent;
48737          _this.document.x += indent;
48738          _this.lineWidth -= indent;
48739          return _this.once('line', function() {
48740            _this.document.x -= indent;
48741            _this.lineWidth += indent;
48742            if (options.continued && !_this.continuedX) {
48743              _this.continuedX = _this.indent;
48744            }
48745            if (!options.continued) {
48746              return _this.continuedX = 0;
48747            }
48748          });
48749        };
48750      })(this));
48751      this.on('lastLine', (function(_this) {
48752        return function(options) {
48753          var align;
48754          align = options.align;
48755          if (align === 'justify') {
48756            options.align = 'left';
48757          }
48758          _this.lastLine = true;
48759          return _this.once('line', function() {
48760            _this.document.y += options.paragraphGap || 0;
48761            options.align = align;
48762            return _this.lastLine = false;
48763          });
48764        };
48765      })(this));
48766    }
48767
48768    LineWrapper.prototype.wordWidth = function(word) {
48769      return this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing;
48770    };
48771
48772    LineWrapper.prototype.eachWord = function(text, fn) {
48773      var bk, breaker, fbk, l, last, lbk, shouldContinue, w, word, wordWidths;
48774      breaker = new LineBreaker(text);
48775      last = null;
48776      wordWidths = Object.create(null);
48777      while (bk = breaker.nextBreak()) {
48778        word = text.slice((last != null ? last.position : void 0) || 0, bk.position);
48779        w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word);
48780        if (w > this.lineWidth + this.continuedX) {
48781          lbk = last;
48782          fbk = {};
48783          while (word.length) {
48784            l = word.length;
48785            while (w > this.spaceLeft) {
48786              w = this.wordWidth(word.slice(0, --l));
48787            }
48788            fbk.required = l < word.length;
48789            shouldContinue = fn(word.slice(0, l), w, fbk, lbk);
48790            lbk = {
48791              required: false
48792            };
48793            word = word.slice(l);
48794            w = this.wordWidth(word);
48795            if (shouldContinue === false) {
48796              break;
48797            }
48798          }
48799        } else {
48800          shouldContinue = fn(word, w, bk, last);
48801        }
48802        if (shouldContinue === false) {
48803          break;
48804        }
48805        last = bk;
48806      }
48807    };
48808
48809    LineWrapper.prototype.wrap = function(text, options) {
48810      var buffer, emitLine, lc, nextY, textWidth, wc, y;
48811      if (options.indent != null) {
48812        this.indent = options.indent;
48813      }
48814      if (options.characterSpacing != null) {
48815        this.characterSpacing = options.characterSpacing;
48816      }
48817      if (options.wordSpacing != null) {
48818        this.wordSpacing = options.wordSpacing;
48819      }
48820      if (options.ellipsis != null) {
48821        this.ellipsis = options.ellipsis;
48822      }
48823      nextY = this.document.y + this.document.currentLineHeight(true);
48824      if (this.document.y > this.maxY || nextY > this.maxY) {
48825        this.nextSection();
48826      }
48827      buffer = '';
48828      textWidth = 0;
48829      wc = 0;
48830      lc = 0;
48831      y = this.document.y;
48832      emitLine = (function(_this) {
48833        return function() {
48834          options.textWidth = textWidth + _this.wordSpacing * (wc - 1);
48835          options.wordCount = wc;
48836          options.lineWidth = _this.lineWidth;
48837          y = _this.document.y;
48838          _this.emit('line', buffer, options, _this);
48839          return lc++;
48840        };
48841      })(this);
48842      this.emit('sectionStart', options, this);
48843      this.eachWord(text, (function(_this) {
48844        return function(word, w, bk, last) {
48845          var lh, shouldContinue;
48846          if ((last == null) || last.required) {
48847            _this.emit('firstLine', options, _this);
48848            _this.spaceLeft = _this.lineWidth;
48849          }
48850          if (w <= _this.spaceLeft) {
48851            buffer += word;
48852            textWidth += w;
48853            wc++;
48854          }
48855          if (bk.required || w > _this.spaceLeft) {
48856            if (bk.required) {
48857              _this.emit('lastLine', options, _this);
48858            }
48859            lh = _this.document.currentLineHeight(true);
48860            if ((_this.height != null) && _this.ellipsis && _this.document.y + lh * 2 > _this.maxY && _this.column >= _this.columns) {
48861              if (_this.ellipsis === true) {
48862                _this.ellipsis = '…';
48863              }
48864              buffer = buffer.replace(/\s+$/, '');
48865              textWidth = _this.wordWidth(buffer + _this.ellipsis);
48866              while (textWidth > _this.lineWidth) {
48867                buffer = buffer.slice(0, -1).replace(/\s+$/, '');
48868                textWidth = _this.wordWidth(buffer + _this.ellipsis);
48869              }
48870              buffer = buffer + _this.ellipsis;
48871            }
48872            if (bk.required && w > _this.spaceLeft) {
48873              buffer = word;
48874              textWidth = w;
48875              wc = 1;
48876            }
48877            emitLine();
48878            if (_this.document.y + lh > _this.maxY) {
48879              shouldContinue = _this.nextSection();
48880              if (!shouldContinue) {
48881                wc = 0;
48882                buffer = '';
48883                return false;
48884              }
48885            }
48886            if (bk.required) {
48887              _this.spaceLeft = _this.lineWidth;
48888              buffer = '';
48889              textWidth = 0;
48890              return wc = 0;
48891            } else {
48892              _this.spaceLeft = _this.lineWidth - w;
48893              buffer = word;
48894              textWidth = w;
48895              return wc = 1;
48896            }
48897          } else {
48898            return _this.spaceLeft -= w;
48899          }
48900        };
48901      })(this));
48902      if (wc > 0) {
48903        this.emit('lastLine', options, this);
48904        emitLine();
48905      }
48906      this.emit('sectionEnd', options, this);
48907      if (options.continued === true) {
48908        if (lc > 1) {
48909          this.continuedX = 0;
48910        }
48911        this.continuedX += options.textWidth;
48912        return this.document.y = y;
48913      } else {
48914        return this.document.x = this.startX;
48915      }
48916    };
48917
48918    LineWrapper.prototype.nextSection = function(options) {
48919      var ref;
48920      this.emit('sectionEnd', options, this);
48921      if (++this.column > this.columns) {
48922        if (this.height != null) {
48923          return false;
48924        }
48925        this.document.addPage();
48926        this.column = 1;
48927        this.startY = this.document.page.margins.top;
48928        this.maxY = this.document.page.maxY();
48929        this.document.x = this.startX;
48930        if (this.document._fillColor) {
48931          (ref = this.document).fillColor.apply(ref, this.document._fillColor);
48932        }
48933        this.emit('pageBreak', options, this);
48934      } else {
48935        this.document.x += this.lineWidth + this.columnGap;
48936        this.document.y = this.startY;
48937        this.emit('columnBreak', options, this);
48938      }
48939      this.emit('sectionStart', options, this);
48940      return true;
48941    };
48942
48943    return LineWrapper;
48944
48945  })(EventEmitter);
48946
48947  module.exports = LineWrapper;
48948
48949}).call(this);
48950
48951
48952/***/ }),
48953/* 297 */
48954/***/ (function(module, exports, __webpack_require__) {
48955
48956// Generated by CoffeeScript 1.12.6
48957(function() {
48958  var PDFImage;
48959
48960  PDFImage = __webpack_require__(121);
48961
48962  module.exports = {
48963    initImages: function() {
48964      this._imageRegistry = {};
48965      return this._imageCount = 0;
48966    },
48967    image: function(src, x, y, options) {
48968      var base, bh, bp, bw, h, hp, image, ip, name, ref, ref1, ref2, ref3, w, wp;
48969      if (options == null) {
48970        options = {};
48971      }
48972      if (typeof x === 'object') {
48973        options = x;
48974        x = null;
48975      }
48976      x = (ref = x != null ? x : options.x) != null ? ref : this.x;
48977      y = (ref1 = y != null ? y : options.y) != null ? ref1 : this.y;
48978      if (typeof src === 'string') {
48979        image = this._imageRegistry[src];
48980      }
48981      if (!image) {
48982        if (src.width && src.height) {
48983          image = src;
48984        } else {
48985          image = this.openImage(src);
48986        }
48987      }
48988      if (!image.obj) {
48989        image.embed(this);
48990      }
48991      if ((base = this.page.xobjects)[name = image.label] == null) {
48992        base[name] = image.obj;
48993      }
48994      w = options.width || image.width;
48995      h = options.height || image.height;
48996      if (options.width && !options.height) {
48997        wp = w / image.width;
48998        w = image.width * wp;
48999        h = image.height * wp;
49000      } else if (options.height && !options.width) {
49001        hp = h / image.height;
49002        w = image.width * hp;
49003        h = image.height * hp;
49004      } else if (options.scale) {
49005        w = image.width * options.scale;
49006        h = image.height * options.scale;
49007      } else if (options.fit) {
49008        ref2 = options.fit, bw = ref2[0], bh = ref2[1];
49009        bp = bw / bh;
49010        ip = image.width / image.height;
49011        if (ip > bp) {
49012          w = bw;
49013          h = bw / ip;
49014        } else {
49015          h = bh;
49016          w = bh * ip;
49017        }
49018      } else if (options.cover) {
49019        ref3 = options.cover, bw = ref3[0], bh = ref3[1];
49020        bp = bw / bh;
49021        ip = image.width / image.height;
49022        if (ip > bp) {
49023          h = bh;
49024          w = bh * ip;
49025        } else {
49026          w = bw;
49027          h = bw / ip;
49028        }
49029      }
49030      if (options.fit || options.cover) {
49031        if (options.align === 'center') {
49032          x = x + bw / 2 - w / 2;
49033        } else if (options.align === 'right') {
49034          x = x + bw - w;
49035        }
49036        if (options.valign === 'center') {
49037          y = y + bh / 2 - h / 2;
49038        } else if (options.valign === 'bottom') {
49039          y = y + bh - h;
49040        }
49041      }
49042      if (this.y === y) {
49043        this.y += h;
49044      }
49045      this.save();
49046      this.transform(w, 0, 0, -h, x, y + h);
49047      this.addContent("/" + image.label + " Do");
49048      this.restore();
49049      return this;
49050    },
49051    openImage: function(src) {
49052      var image;
49053      if (typeof src === 'string') {
49054        image = this._imageRegistry[src];
49055      }
49056      if (!image) {
49057        image = PDFImage.open(src, 'I' + (++this._imageCount));
49058        if (typeof src === 'string') {
49059          this._imageRegistry[src] = image;
49060        }
49061      }
49062      return image;
49063    }
49064  };
49065
49066}).call(this);
49067
49068
49069/***/ }),
49070/* 298 */
49071/***/ (function(module, exports) {
49072
49073// Generated by CoffeeScript 1.12.6
49074(function() {
49075  var Data;
49076
49077  Data = (function() {
49078    function Data(data) {
49079      this.data = data != null ? data : [];
49080      this.pos = 0;
49081      this.length = this.data.length;
49082    }
49083
49084    Data.prototype.readByte = function() {
49085      return this.data[this.pos++];
49086    };
49087
49088    Data.prototype.writeByte = function(byte) {
49089      return this.data[this.pos++] = byte;
49090    };
49091
49092    Data.prototype.byteAt = function(index) {
49093      return this.data[index];
49094    };
49095
49096    Data.prototype.readBool = function() {
49097      return !!this.readByte();
49098    };
49099
49100    Data.prototype.writeBool = function(val) {
49101      return this.writeByte(val ? 1 : 0);
49102    };
49103
49104    Data.prototype.readUInt32 = function() {
49105      var b1, b2, b3, b4;
49106      b1 = this.readByte() * 0x1000000;
49107      b2 = this.readByte() << 16;
49108      b3 = this.readByte() << 8;
49109      b4 = this.readByte();
49110      return b1 + b2 + b3 + b4;
49111    };
49112
49113    Data.prototype.writeUInt32 = function(val) {
49114      this.writeByte((val >>> 24) & 0xff);
49115      this.writeByte((val >> 16) & 0xff);
49116      this.writeByte((val >> 8) & 0xff);
49117      return this.writeByte(val & 0xff);
49118    };
49119
49120    Data.prototype.readInt32 = function() {
49121      var int;
49122      int = this.readUInt32();
49123      if (int >= 0x80000000) {
49124        return int - 0x100000000;
49125      } else {
49126        return int;
49127      }
49128    };
49129
49130    Data.prototype.writeInt32 = function(val) {
49131      if (val < 0) {
49132        val += 0x100000000;
49133      }
49134      return this.writeUInt32(val);
49135    };
49136
49137    Data.prototype.readUInt16 = function() {
49138      var b1, b2;
49139      b1 = this.readByte() << 8;
49140      b2 = this.readByte();
49141      return b1 | b2;
49142    };
49143
49144    Data.prototype.writeUInt16 = function(val) {
49145      this.writeByte((val >> 8) & 0xff);
49146      return this.writeByte(val & 0xff);
49147    };
49148
49149    Data.prototype.readInt16 = function() {
49150      var int;
49151      int = this.readUInt16();
49152      if (int >= 0x8000) {
49153        return int - 0x10000;
49154      } else {
49155        return int;
49156      }
49157    };
49158
49159    Data.prototype.writeInt16 = function(val) {
49160      if (val < 0) {
49161        val += 0x10000;
49162      }
49163      return this.writeUInt16(val);
49164    };
49165
49166    Data.prototype.readString = function(length) {
49167      var i, j, ref, ret;
49168      ret = [];
49169      for (i = j = 0, ref = length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
49170        ret[i] = String.fromCharCode(this.readByte());
49171      }
49172      return ret.join('');
49173    };
49174
49175    Data.prototype.writeString = function(val) {
49176      var i, j, ref, results;
49177      results = [];
49178      for (i = j = 0, ref = val.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
49179        results.push(this.writeByte(val.charCodeAt(i)));
49180      }
49181      return results;
49182    };
49183
49184    Data.prototype.stringAt = function(pos, length) {
49185      this.pos = pos;
49186      return this.readString(length);
49187    };
49188
49189    Data.prototype.readShort = function() {
49190      return this.readInt16();
49191    };
49192
49193    Data.prototype.writeShort = function(val) {
49194      return this.writeInt16(val);
49195    };
49196
49197    Data.prototype.readLongLong = function() {
49198      var b1, b2, b3, b4, b5, b6, b7, b8;
49199      b1 = this.readByte();
49200      b2 = this.readByte();
49201      b3 = this.readByte();
49202      b4 = this.readByte();
49203      b5 = this.readByte();
49204      b6 = this.readByte();
49205      b7 = this.readByte();
49206      b8 = this.readByte();
49207      if (b1 & 0x80) {
49208        return ((b1 ^ 0xff) * 0x100000000000000 + (b2 ^ 0xff) * 0x1000000000000 + (b3 ^ 0xff) * 0x10000000000 + (b4 ^ 0xff) * 0x100000000 + (b5 ^ 0xff) * 0x1000000 + (b6 ^ 0xff) * 0x10000 + (b7 ^ 0xff) * 0x100 + (b8 ^ 0xff) + 1) * -1;
49209      }
49210      return b1 * 0x100000000000000 + b2 * 0x1000000000000 + b3 * 0x10000000000 + b4 * 0x100000000 + b5 * 0x1000000 + b6 * 0x10000 + b7 * 0x100 + b8;
49211    };
49212
49213    Data.prototype.writeLongLong = function(val) {
49214      var high, low;
49215      high = Math.floor(val / 0x100000000);
49216      low = val & 0xffffffff;
49217      this.writeByte((high >> 24) & 0xff);
49218      this.writeByte((high >> 16) & 0xff);
49219      this.writeByte((high >> 8) & 0xff);
49220      this.writeByte(high & 0xff);
49221      this.writeByte((low >> 24) & 0xff);
49222      this.writeByte((low >> 16) & 0xff);
49223      this.writeByte((low >> 8) & 0xff);
49224      return this.writeByte(low & 0xff);
49225    };
49226
49227    Data.prototype.readInt = function() {
49228      return this.readInt32();
49229    };
49230
49231    Data.prototype.writeInt = function(val) {
49232      return this.writeInt32(val);
49233    };
49234
49235    Data.prototype.slice = function(start, end) {
49236      return this.data.slice(start, end);
49237    };
49238
49239    Data.prototype.read = function(bytes) {
49240      var buf, i, j, ref;
49241      buf = [];
49242      for (i = j = 0, ref = bytes; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
49243        buf.push(this.readByte());
49244      }
49245      return buf;
49246    };
49247
49248    Data.prototype.write = function(bytes) {
49249      var byte, j, len, results;
49250      results = [];
49251      for (j = 0, len = bytes.length; j < len; j++) {
49252        byte = bytes[j];
49253        results.push(this.writeByte(byte));
49254      }
49255      return results;
49256    };
49257
49258    return Data;
49259
49260  })();
49261
49262  module.exports = Data;
49263
49264}).call(this);
49265
49266
49267/***/ }),
49268/* 299 */
49269/***/ (function(module, exports, __webpack_require__) {
49270
49271// Generated by CoffeeScript 1.12.6
49272(function() {
49273  var JPEG, fs,
49274    indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
49275
49276  fs = __webpack_require__(8);
49277
49278  JPEG = (function() {
49279    var MARKERS;
49280
49281    MARKERS = [0xFFC0, 0xFFC1, 0xFFC2, 0xFFC3, 0xFFC5, 0xFFC6, 0xFFC7, 0xFFC8, 0xFFC9, 0xFFCA, 0xFFCB, 0xFFCC, 0xFFCD, 0xFFCE, 0xFFCF];
49282
49283    function JPEG(data, label) {
49284      var channels, marker, pos;
49285      this.data = data;
49286      this.label = label;
49287      if (this.data.readUInt16BE(0) !== 0xFFD8) {
49288        throw "SOI not found in JPEG";
49289      }
49290      pos = 2;
49291      while (pos < this.data.length) {
49292        marker = this.data.readUInt16BE(pos);
49293        pos += 2;
49294        if (indexOf.call(MARKERS, marker) >= 0) {
49295          break;
49296        }
49297        pos += this.data.readUInt16BE(pos);
49298      }
49299      if (indexOf.call(MARKERS, marker) < 0) {
49300        throw "Invalid JPEG.";
49301      }
49302      pos += 2;
49303      this.bits = this.data[pos++];
49304      this.height = this.data.readUInt16BE(pos);
49305      pos += 2;
49306      this.width = this.data.readUInt16BE(pos);
49307      pos += 2;
49308      channels = this.data[pos++];
49309      this.colorSpace = (function() {
49310        switch (channels) {
49311          case 1:
49312            return 'DeviceGray';
49313          case 3:
49314            return 'DeviceRGB';
49315          case 4:
49316            return 'DeviceCMYK';
49317        }
49318      })();
49319      this.obj = null;
49320    }
49321
49322    JPEG.prototype.embed = function(document) {
49323      if (this.obj) {
49324        return;
49325      }
49326      this.obj = document.ref({
49327        Type: 'XObject',
49328        Subtype: 'Image',
49329        BitsPerComponent: this.bits,
49330        Width: this.width,
49331        Height: this.height,
49332        ColorSpace: this.colorSpace,
49333        Filter: 'DCTDecode'
49334      });
49335      if (this.colorSpace === 'DeviceCMYK') {
49336        this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];
49337      }
49338      this.obj.end(this.data);
49339      return this.data = null;
49340    };
49341
49342    return JPEG;
49343
49344  })();
49345
49346  module.exports = JPEG;
49347
49348}).call(this);
49349
49350
49351/***/ }),
49352/* 300 */
49353/***/ (function(module, exports, __webpack_require__) {
49354
49355/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.12.6
49356(function() {
49357  var PNG, PNGImage, zlib;
49358
49359  zlib = __webpack_require__(48);
49360
49361  PNG = __webpack_require__(301);
49362
49363  PNGImage = (function() {
49364    function PNGImage(data, label) {
49365      this.label = label;
49366      this.image = new PNG(data);
49367      this.width = this.image.width;
49368      this.height = this.image.height;
49369      this.imgData = this.image.imgData;
49370      this.obj = null;
49371    }
49372
49373    PNGImage.prototype.embed = function(document) {
49374      var k, len1, mask, palette, params, rgb, val, x;
49375      this.document = document;
49376      if (this.obj) {
49377        return;
49378      }
49379      this.obj = this.document.ref({
49380        Type: 'XObject',
49381        Subtype: 'Image',
49382        BitsPerComponent: this.image.bits,
49383        Width: this.width,
49384        Height: this.height,
49385        Filter: 'FlateDecode'
49386      });
49387      if (!this.image.hasAlphaChannel) {
49388        params = this.document.ref({
49389          Predictor: 15,
49390          Colors: this.image.colors,
49391          BitsPerComponent: this.image.bits,
49392          Columns: this.width
49393        });
49394        this.obj.data['DecodeParms'] = params;
49395        params.end();
49396      }
49397      if (this.image.palette.length === 0) {
49398        this.obj.data['ColorSpace'] = this.image.colorSpace;
49399      } else {
49400        palette = this.document.ref();
49401        palette.end(new Buffer(this.image.palette));
49402        this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', (this.image.palette.length / 3) - 1, palette];
49403      }
49404      if (this.image.transparency.grayscale) {
49405        val = this.image.transparency.greyscale;
49406        return this.obj.data['Mask'] = [val, val];
49407      } else if (this.image.transparency.rgb) {
49408        rgb = this.image.transparency.rgb;
49409        mask = [];
49410        for (k = 0, len1 = rgb.length; k < len1; k++) {
49411          x = rgb[k];
49412          mask.push(x, x);
49413        }
49414        return this.obj.data['Mask'] = mask;
49415      } else if (this.image.transparency.indexed) {
49416        return this.loadIndexedAlphaChannel();
49417      } else if (this.image.hasAlphaChannel) {
49418        return this.splitAlphaChannel();
49419      } else {
49420        return this.finalize();
49421      }
49422    };
49423
49424    PNGImage.prototype.finalize = function() {
49425      var sMask;
49426      if (this.alphaChannel) {
49427        sMask = this.document.ref({
49428          Type: 'XObject',
49429          Subtype: 'Image',
49430          Height: this.height,
49431          Width: this.width,
49432          BitsPerComponent: 8,
49433          Filter: 'FlateDecode',
49434          ColorSpace: 'DeviceGray',
49435          Decode: [0, 1]
49436        });
49437        sMask.end(this.alphaChannel);
49438        this.obj.data['SMask'] = sMask;
49439      }
49440      this.obj.end(this.imgData);
49441      this.image = null;
49442      return this.imgData = null;
49443    };
49444
49445    PNGImage.prototype.splitAlphaChannel = function() {
49446      return this.image.decodePixels((function(_this) {
49447        return function(pixels) {
49448          var a, alphaChannel, colorByteSize, done, i, imgData, len, p, pixelCount;
49449          colorByteSize = _this.image.colors * _this.image.bits / 8;
49450          pixelCount = _this.width * _this.height;
49451          imgData = new Buffer(pixelCount * colorByteSize);
49452          alphaChannel = new Buffer(pixelCount);
49453          i = p = a = 0;
49454          len = pixels.length;
49455          while (i < len) {
49456            imgData[p++] = pixels[i++];
49457            imgData[p++] = pixels[i++];
49458            imgData[p++] = pixels[i++];
49459            alphaChannel[a++] = pixels[i++];
49460          }
49461          done = 0;
49462          zlib.deflate(imgData, function(err, imgData1) {
49463            _this.imgData = imgData1;
49464            if (err) {
49465              throw err;
49466            }
49467            if (++done === 2) {
49468              return _this.finalize();
49469            }
49470          });
49471          return zlib.deflate(alphaChannel, function(err, alphaChannel1) {
49472            _this.alphaChannel = alphaChannel1;
49473            if (err) {
49474              throw err;
49475            }
49476            if (++done === 2) {
49477              return _this.finalize();
49478            }
49479          });
49480        };
49481      })(this));
49482    };
49483
49484    PNGImage.prototype.loadIndexedAlphaChannel = function(fn) {
49485      var transparency;
49486      transparency = this.image.transparency.indexed;
49487      return this.image.decodePixels((function(_this) {
49488        return function(pixels) {
49489          var alphaChannel, i, j, k, ref;
49490          alphaChannel = new Buffer(_this.width * _this.height);
49491          i = 0;
49492          for (j = k = 0, ref = pixels.length; k < ref; j = k += 1) {
49493            alphaChannel[i++] = transparency[pixels[j]];
49494          }
49495          return zlib.deflate(alphaChannel, function(err, alphaChannel1) {
49496            _this.alphaChannel = alphaChannel1;
49497            if (err) {
49498              throw err;
49499            }
49500            return _this.finalize();
49501          });
49502        };
49503      })(this));
49504    };
49505
49506    return PNGImage;
49507
49508  })();
49509
49510  module.exports = PNGImage;
49511
49512}).call(this);
49513
49514/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
49515
49516/***/ }),
49517/* 301 */
49518/***/ (function(module, exports, __webpack_require__) {
49519
49520/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.4.0
49521
49522/*
49523# MIT LICENSE
49524# Copyright (c) 2011 Devon Govett
49525#
49526# Permission is hereby granted, free of charge, to any person obtaining a copy of this
49527# software and associated documentation files (the "Software"), to deal in the Software
49528# without restriction, including without limitation the rights to use, copy, modify, merge,
49529# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
49530# to whom the Software is furnished to do so, subject to the following conditions:
49531#
49532# The above copyright notice and this permission notice shall be included in all copies or
49533# substantial portions of the Software.
49534#
49535# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
49536# BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
49537# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
49538# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
49539# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
49540*/
49541
49542
49543(function() {
49544  var PNG, fs, zlib;
49545
49546  fs = __webpack_require__(8);
49547
49548  zlib = __webpack_require__(48);
49549
49550  module.exports = PNG = (function() {
49551
49552    PNG.decode = function(path, fn) {
49553      return fs.readFile(path, function(err, file) {
49554        var png;
49555        png = new PNG(file);
49556        return png.decode(function(pixels) {
49557          return fn(pixels);
49558        });
49559      });
49560    };
49561
49562    PNG.load = function(path) {
49563      var file;
49564      file = fs.readFileSync(path);
49565      return new PNG(file);
49566    };
49567
49568    function PNG(data) {
49569      var chunkSize, colors, i, index, key, section, short, text, _i, _j, _ref;
49570      this.data = data;
49571      this.pos = 8;
49572      this.palette = [];
49573      this.imgData = [];
49574      this.transparency = {};
49575      this.text = {};
49576      while (true) {
49577        chunkSize = this.readUInt32();
49578        section = ((function() {
49579          var _i, _results;
49580          _results = [];
49581          for (i = _i = 0; _i < 4; i = ++_i) {
49582            _results.push(String.fromCharCode(this.data[this.pos++]));
49583          }
49584          return _results;
49585        }).call(this)).join('');
49586        switch (section) {
49587          case 'IHDR':
49588            this.width = this.readUInt32();
49589            this.height = this.readUInt32();
49590            this.bits = this.data[this.pos++];
49591            this.colorType = this.data[this.pos++];
49592            this.compressionMethod = this.data[this.pos++];
49593            this.filterMethod = this.data[this.pos++];
49594            this.interlaceMethod = this.data[this.pos++];
49595            break;
49596          case 'PLTE':
49597            this.palette = this.read(chunkSize);
49598            break;
49599          case 'IDAT':
49600            for (i = _i = 0; _i < chunkSize; i = _i += 1) {
49601              this.imgData.push(this.data[this.pos++]);
49602            }
49603            break;
49604          case 'tRNS':
49605            this.transparency = {};
49606            switch (this.colorType) {
49607              case 3:
49608                this.transparency.indexed = this.read(chunkSize);
49609                short = 255 - this.transparency.indexed.length;
49610                if (short > 0) {
49611                  for (i = _j = 0; 0 <= short ? _j < short : _j > short; i = 0 <= short ? ++_j : --_j) {
49612                    this.transparency.indexed.push(255);
49613                  }
49614                }
49615                break;
49616              case 0:
49617                this.transparency.grayscale = this.read(chunkSize)[0];
49618                break;
49619              case 2:
49620                this.transparency.rgb = this.read(chunkSize);
49621            }
49622            break;
49623          case 'tEXt':
49624            text = this.read(chunkSize);
49625            index = text.indexOf(0);
49626            key = String.fromCharCode.apply(String, text.slice(0, index));
49627            this.text[key] = String.fromCharCode.apply(String, text.slice(index + 1));
49628            break;
49629          case 'IEND':
49630            this.colors = (function() {
49631              switch (this.colorType) {
49632                case 0:
49633                case 3:
49634                case 4:
49635                  return 1;
49636                case 2:
49637                case 6:
49638                  return 3;
49639              }
49640            }).call(this);
49641            this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6;
49642            colors = this.colors + (this.hasAlphaChannel ? 1 : 0);
49643            this.pixelBitlength = this.bits * colors;
49644            this.colorSpace = (function() {
49645              switch (this.colors) {
49646                case 1:
49647                  return 'DeviceGray';
49648                case 3:
49649                  return 'DeviceRGB';
49650              }
49651            }).call(this);
49652            this.imgData = new Buffer(this.imgData);
49653            return;
49654          default:
49655            this.pos += chunkSize;
49656        }
49657        this.pos += 4;
49658        if (this.pos > this.data.length) {
49659          throw new Error("Incomplete or corrupt PNG file");
49660        }
49661      }
49662      return;
49663    }
49664
49665    PNG.prototype.read = function(bytes) {
49666      var i, _i, _results;
49667      _results = [];
49668      for (i = _i = 0; 0 <= bytes ? _i < bytes : _i > bytes; i = 0 <= bytes ? ++_i : --_i) {
49669        _results.push(this.data[this.pos++]);
49670      }
49671      return _results;
49672    };
49673
49674    PNG.prototype.readUInt32 = function() {
49675      var b1, b2, b3, b4;
49676      b1 = this.data[this.pos++] << 24;
49677      b2 = this.data[this.pos++] << 16;
49678      b3 = this.data[this.pos++] << 8;
49679      b4 = this.data[this.pos++];
49680      return b1 | b2 | b3 | b4;
49681    };
49682
49683    PNG.prototype.readUInt16 = function() {
49684      var b1, b2;
49685      b1 = this.data[this.pos++] << 8;
49686      b2 = this.data[this.pos++];
49687      return b1 | b2;
49688    };
49689
49690    PNG.prototype.decodePixels = function(fn) {
49691      var _this = this;
49692      return zlib.inflate(this.imgData, function(err, data) {
49693        var byte, c, col, i, left, length, p, pa, paeth, pb, pc, pixelBytes, pixels, pos, row, scanlineLength, upper, upperLeft, _i, _j, _k, _l, _m;
49694        if (err) {
49695          throw err;
49696        }
49697        pixelBytes = _this.pixelBitlength / 8;
49698        scanlineLength = pixelBytes * _this.width;
49699        pixels = new Buffer(scanlineLength * _this.height);
49700        length = data.length;
49701        row = 0;
49702        pos = 0;
49703        c = 0;
49704        while (pos < length) {
49705          switch (data[pos++]) {
49706            case 0:
49707              for (i = _i = 0; _i < scanlineLength; i = _i += 1) {
49708                pixels[c++] = data[pos++];
49709              }
49710              break;
49711            case 1:
49712              for (i = _j = 0; _j < scanlineLength; i = _j += 1) {
49713                byte = data[pos++];
49714                left = i < pixelBytes ? 0 : pixels[c - pixelBytes];
49715                pixels[c++] = (byte + left) % 256;
49716              }
49717              break;
49718            case 2:
49719              for (i = _k = 0; _k < scanlineLength; i = _k += 1) {
49720                byte = data[pos++];
49721                col = (i - (i % pixelBytes)) / pixelBytes;
49722                upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)];
49723                pixels[c++] = (upper + byte) % 256;
49724              }
49725              break;
49726            case 3:
49727              for (i = _l = 0; _l < scanlineLength; i = _l += 1) {
49728                byte = data[pos++];
49729                col = (i - (i % pixelBytes)) / pixelBytes;
49730                left = i < pixelBytes ? 0 : pixels[c - pixelBytes];
49731                upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)];
49732                pixels[c++] = (byte + Math.floor((left + upper) / 2)) % 256;
49733              }
49734              break;
49735            case 4:
49736              for (i = _m = 0; _m < scanlineLength; i = _m += 1) {
49737                byte = data[pos++];
49738                col = (i - (i % pixelBytes)) / pixelBytes;
49739                left = i < pixelBytes ? 0 : pixels[c - pixelBytes];
49740                if (row === 0) {
49741                  upper = upperLeft = 0;
49742                } else {
49743                  upper = pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)];
49744                  upperLeft = col && pixels[(row - 1) * scanlineLength + (col - 1) * pixelBytes + (i % pixelBytes)];
49745                }
49746                p = left + upper - upperLeft;
49747                pa = Math.abs(p - left);
49748                pb = Math.abs(p - upper);
49749                pc = Math.abs(p - upperLeft);
49750                if (pa <= pb && pa <= pc) {
49751                  paeth = left;
49752                } else if (pb <= pc) {
49753                  paeth = upper;
49754                } else {
49755                  paeth = upperLeft;
49756                }
49757                pixels[c++] = (byte + paeth) % 256;
49758              }
49759              break;
49760            default:
49761              throw new Error("Invalid filter algorithm: " + data[pos - 1]);
49762          }
49763          row++;
49764        }
49765        return fn(pixels);
49766      });
49767    };
49768
49769    PNG.prototype.decodePalette = function() {
49770      var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1;
49771      palette = this.palette;
49772      transparency = this.transparency.indexed || [];
49773      ret = new Buffer(transparency.length + palette.length);
49774      pos = 0;
49775      length = palette.length;
49776      c = 0;
49777      for (i = _i = 0, _ref = palette.length; _i < _ref; i = _i += 3) {
49778        ret[pos++] = palette[i];
49779        ret[pos++] = palette[i + 1];
49780        ret[pos++] = palette[i + 2];
49781        ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255;
49782      }
49783      return ret;
49784    };
49785
49786    PNG.prototype.copyToImageData = function(imageData, pixels) {
49787      var alpha, colors, data, i, input, j, k, length, palette, v, _ref;
49788      colors = this.colors;
49789      palette = null;
49790      alpha = this.hasAlphaChannel;
49791      if (this.palette.length) {
49792        palette = (_ref = this._decodedPalette) != null ? _ref : this._decodedPalette = this.decodePalette();
49793        colors = 4;
49794        alpha = true;
49795      }
49796      data = (imageData != null ? imageData.data : void 0) || imageData;
49797      length = data.length;
49798      input = palette || pixels;
49799      i = j = 0;
49800      if (colors === 1) {
49801        while (i < length) {
49802          k = palette ? pixels[i / 4] * 4 : j;
49803          v = input[k++];
49804          data[i++] = v;
49805          data[i++] = v;
49806          data[i++] = v;
49807          data[i++] = alpha ? input[k++] : 255;
49808          j = k;
49809        }
49810      } else {
49811        while (i < length) {
49812          k = palette ? pixels[i / 4] * 4 : j;
49813          data[i++] = input[k++];
49814          data[i++] = input[k++];
49815          data[i++] = input[k++];
49816          data[i++] = alpha ? input[k++] : 255;
49817          j = k;
49818        }
49819      }
49820    };
49821
49822    PNG.prototype.decode = function(fn) {
49823      var ret,
49824        _this = this;
49825      ret = new Buffer(this.width * this.height * 4);
49826      return this.decodePixels(function(pixels) {
49827        _this.copyToImageData(ret, pixels);
49828        return fn(ret);
49829      });
49830    };
49831
49832    return PNG;
49833
49834  })();
49835
49836}).call(this);
49837
49838/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
49839
vendor: 5,261 bytes, lines 49840-50029
49840/***/ }),
49841/* 302 */
49842/***/ (function(module, exports) {
49843
49844// Generated by CoffeeScript 1.12.6
49845(function() {
49846  module.exports = {
49847    annotate: function(x, y, w, h, options) {
49848      var key, ref, val;
49849      options.Type = 'Annot';
49850      options.Rect = this._convertRect(x, y, w, h);
49851      options.Border = [0, 0, 0];
49852      if (options.Subtype !== 'Link') {
49853        if (options.C == null) {
49854          options.C = this._normalizeColor(options.color || [0, 0, 0]);
49855        }
49856      }
49857      delete options.color;
49858      if (typeof options.Dest === 'string') {
49859        options.Dest = new String(options.Dest);
49860      }
49861      for (key in options) {
49862        val = options[key];
49863        options[key[0].toUpperCase() + key.slice(1)] = val;
49864      }
49865      ref = this.ref(options);
49866      this.page.annotations.push(ref);
49867      ref.end();
49868      return this;
49869    },
49870    note: function(x, y, w, h, contents, options) {
49871      if (options == null) {
49872        options = {};
49873      }
49874      options.Subtype = 'Text';
49875      options.Contents = new String(contents);
49876      options.Name = 'Comment';
49877      if (options.color == null) {
49878        options.color = [243, 223, 92];
49879      }
49880      return this.annotate(x, y, w, h, options);
49881    },
49882    link: function(x, y, w, h, url, options) {
49883      if (options == null) {
49884        options = {};
49885      }
49886      options.Subtype = 'Link';
49887      options.A = this.ref({
49888        S: 'URI',
49889        URI: new String(url)
49890      });
49891      options.A.end();
49892      return this.annotate(x, y, w, h, options);
49893    },
49894    _markup: function(x, y, w, h, options) {
49895      var ref1, x1, x2, y1, y2;
49896      if (options == null) {
49897        options = {};
49898      }
49899      ref1 = this._convertRect(x, y, w, h), x1 = ref1[0], y1 = ref1[1], x2 = ref1[2], y2 = ref1[3];
49900      options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];
49901      options.Contents = new String;
49902      return this.annotate(x, y, w, h, options);
49903    },
49904    highlight: function(x, y, w, h, options) {
49905      if (options == null) {
49906        options = {};
49907      }
49908      options.Subtype = 'Highlight';
49909      if (options.color == null) {
49910        options.color = [241, 238, 148];
49911      }
49912      return this._markup(x, y, w, h, options);
49913    },
49914    underline: function(x, y, w, h, options) {
49915      if (options == null) {
49916        options = {};
49917      }
49918      options.Subtype = 'Underline';
49919      return this._markup(x, y, w, h, options);
49920    },
49921    strike: function(x, y, w, h, options) {
49922      if (options == null) {
49923        options = {};
49924      }
49925      options.Subtype = 'StrikeOut';
49926      return this._markup(x, y, w, h, options);
49927    },
49928    lineAnnotation: function(x1, y1, x2, y2, options) {
49929      if (options == null) {
49930        options = {};
49931      }
49932      options.Subtype = 'Line';
49933      options.Contents = new String;
49934      options.L = [x1, this.page.height - y1, x2, this.page.height - y2];
49935      return this.annotate(x1, y1, x2, y2, options);
49936    },
49937    rectAnnotation: function(x, y, w, h, options) {
49938      if (options == null) {
49939        options = {};
49940      }
49941      options.Subtype = 'Square';
49942      options.Contents = new String;
49943      return this.annotate(x, y, w, h, options);
49944    },
49945    ellipseAnnotation: function(x, y, w, h, options) {
49946      if (options == null) {
49947        options = {};
49948      }
49949      options.Subtype = 'Circle';
49950      options.Contents = new String;
49951      return this.annotate(x, y, w, h, options);
49952    },
49953    textAnnotation: function(x, y, w, h, text, options) {
49954      if (options == null) {
49955        options = {};
49956      }
49957      options.Subtype = 'FreeText';
49958      options.Contents = new String(text);
49959      options.DA = new String;
49960      return this.annotate(x, y, w, h, options);
49961    },
49962    _convertRect: function(x1, y1, w, h) {
49963      var m0, m1, m2, m3, m4, m5, ref1, x2, y2;
49964      y2 = y1;
49965      y1 += h;
49966      x2 = x1 + w;
49967      ref1 = this._ctm, m0 = ref1[0], m1 = ref1[1], m2 = ref1[2], m3 = ref1[3], m4 = ref1[4], m5 = ref1[5];
49968      x1 = m0 * x1 + m2 * y1 + m4;
49969      y1 = m1 * x1 + m3 * y1 + m5;
49970      x2 = m0 * x2 + m2 * y2 + m4;
49971      y2 = m1 * x2 + m3 * y2 + m5;
49972      return [x1, y1, x2, y2];
49973    }
49974  };
49975
49976}).call(this);
49977
49978
49979/***/ }),
49980/* 303 */
49981/***/ (function(module, exports, __webpack_require__) {
49982
49983"use strict";
49984
49985
49986module.exports = {
49987	'4A0': [4767.87, 6740.79],
49988	'2A0': [3370.39, 4767.87],
49989	A0: [2383.94, 3370.39],
49990	A1: [1683.78, 2383.94],
49991	A2: [1190.55, 1683.78],
49992	A3: [841.89, 1190.55],
49993	A4: [595.28, 841.89],
49994	A5: [419.53, 595.28],
49995	A6: [297.64, 419.53],
49996	A7: [209.76, 297.64],
49997	A8: [147.40, 209.76],
49998	A9: [104.88, 147.40],
49999	A10: [73.70, 104.88],
50000	B0: [2834.65, 4008.19],
50001	B1: [2004.09, 2834.65],
50002	B2: [1417.32, 2004.09],
50003	B3: [1000.63, 1417.32],
50004	B4: [708.66, 1000.63],
50005	B5: [498.90, 708.66],
50006	B6: [354.33, 498.90],
50007	B7: [249.45, 354.33],
50008	B8: [175.75, 249.45],
50009	B9: [124.72, 175.75],
50010	B10: [87.87, 124.72],
50011	C0: [2599.37, 3676.54],
50012	C1: [1836.85, 2599.37],
50013	C2: [1298.27, 1836.85],
50014	C3: [918.43, 1298.27],
50015	C4: [649.13, 918.43],
50016	C5: [459.21, 649.13],
50017	C6: [323.15, 459.21],
50018	C7: [229.61, 323.15],
50019	C8: [161.57, 229.61],
50020	C9: [113.39, 161.57],
50021	C10: [79.37, 113.39],
50022	RA0: [2437.80, 3458.27],
50023	RA1: [1729.13, 2437.80],
50024	RA2: [1218.90, 1729.13],
50025	RA3: [864.57, 1218.90],
50026	RA4: [609.45, 864.57],
50027	SRA0: [2551.18, 3628.35],
50028	SRA1: [1814.17, 2551.18],
50029	SRA2: [1275.59, 1814.17],
50030	SRA3: [907.09, 1275.59],
50031	SRA4: [637.80, 907.09],
50032	EXECUTIVE: [521.86, 756.00],
50033	FOLIO: [612.00, 936.00],
50034	LEGAL: [612.00, 1008.00],
50035	LETTER: [612.00, 792.00],
50036	TABLOID: [792.00, 1224.00]
50037};
50038
50039
50040/***/ }),
50041/* 304 */
50042/***/ (function(module, exports, __webpack_require__) {
50043
50044"use strict";
50045/* WEBPACK VAR INJECTION */(function(Buffer) {
50046
50047var PDFImage = __webpack_require__(121);
50048
50049function ImageMeasure(pdfKitDoc, imageDictionary) {
50050	this.pdfKitDoc = pdfKitDoc;
50051	this.imageDictionary = imageDictionary || {};
50052}
50053
50054ImageMeasure.prototype.measureImage = function (src) {
50055	var image, label;
50056	var that = this;
50057
50058	if (!this.pdfKitDoc._imageRegistry[src]) {
50059		label = 'I' + (++this.pdfKitDoc._imageCount);
50060		try {
50061			image = PDFImage.open(realImageSrc(src), label);
50062		} catch (error) {
50063			image = null;
50064		}
50065		if (image === null || image === undefined) {
50066			throw 'invalid image, images dictionary should contain dataURL entries (or local file paths in node.js)';
50067		}
50068		image.embed(this.pdfKitDoc);
50069		this.pdfKitDoc._imageRegistry[src] = image;
50070	} else {
50071		image = this.pdfKitDoc._imageRegistry[src];
50072	}
50073
50074	return {width: image.width, height: image.height};
50075
50076	function realImageSrc(src) {
50077		var img = that.imageDictionary[src];
50078
50079		if (!img) {
50080			return src;
50081		}
50082
50083		var index = img.indexOf('base64,');
50084		if (index < 0) {
50085			return that.imageDictionary[src];
50086		}
50087
50088		return Buffer.from(img.substring(index + 7), 'base64');
50089	}
50090};
50091
50092module.exports = ImageMeasure;
50093
50094/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer))
50095
50096/***/ }),
50097/* 305 */
50098/***/ (function(module, exports, __webpack_require__) {
50099
50100"use strict";
50101
50102
50103var isArray = __webpack_require__(0).isArray;
50104
50105function groupDecorations(line) {
50106	var groups = [], currentGroup = null;
50107	for (var i = 0, l = line.inlines.length; i < l; i++) {
50108		var inline = line.inlines[i];
50109		var decoration = inline.decoration;
50110		if (!decoration) {
50111			currentGroup = null;
50112			continue;
50113		}
50114		if (!isArray(decoration)) {
50115			decoration = [decoration];
50116		}
50117		var color = inline.decorationColor || inline.color || 'black';
50118		var style = inline.decorationStyle || 'solid';
50119		for (var ii = 0, ll = decoration.length; ii < ll; ii++) {
50120			var decorationItem = decoration[ii];
50121			if (!currentGroup || decorationItem !== currentGroup.decoration ||
50122				style !== currentGroup.decorationStyle || color !== currentGroup.decorationColor ||
50123				decorationItem === 'lineThrough') {
50124
50125				currentGroup = {
50126					line: line,
50127					decoration: decorationItem,
50128					decorationColor: color,
50129					decorationStyle: style,
50130					inlines: [inline]
50131				};
50132				groups.push(currentGroup);
50133			} else {
50134				currentGroup.inlines.push(inline);
50135			}
50136		}
50137	}
50138
50139	return groups;
50140}
50141
50142function drawDecoration(group, x, y, pdfKitDoc) {
50143	function maxInline() {
50144		var max = 0;
50145		for (var i = 0, l = group.inlines.length; i < l; i++) {
50146			var inline = group.inlines[i];
50147			max = inline.fontSize > max ? i : max;
50148		}
50149		return group.inlines[max];
50150	}
50151	function width() {
50152		var sum = 0;
50153		for (var i = 0, l = group.inlines.length; i < l; i++) {
50154			sum += group.inlines[i].width;
50155		}
50156		return sum;
50157	}
50158	var firstInline = group.inlines[0],
50159		biggerInline = maxInline(),
50160		totalWidth = width(),
50161		lineAscent = group.line.getAscenderHeight(),
50162		ascent = biggerInline.font.ascender / 1000 * biggerInline.fontSize,
50163		height = biggerInline.height,
50164		descent = height - ascent;
50165
50166	var lw = 0.5 + Math.floor(Math.max(biggerInline.fontSize - 8, 0) / 2) * 0.12;
50167
50168	switch (group.decoration) {
50169		case 'underline':
50170			y += lineAscent + descent * 0.45;
50171			break;
50172		case 'overline':
50173			y += lineAscent - (ascent * 0.85);
50174			break;
50175		case 'lineThrough':
50176			y += lineAscent - (ascent * 0.25);
50177			break;
50178		default:
50179			throw 'Unkown decoration : ' + group.decoration;
50180	}
50181	pdfKitDoc.save();
50182
50183	if (group.decorationStyle === 'double') {
50184		var gap = Math.max(0.5, lw * 2);
50185		pdfKitDoc.fillColor(group.decorationColor)
50186			.rect(x + firstInline.x, y - lw / 2, totalWidth, lw / 2).fill()
50187			.rect(x + firstInline.x, y + gap - lw / 2, totalWidth, lw / 2).fill();
50188	} else if (group.decorationStyle === 'dashed') {
50189		var nbDashes = Math.ceil(totalWidth / (3.96 + 2.84));
50190		var rdx = x + firstInline.x;
50191		pdfKitDoc.rect(rdx, y, totalWidth, lw).clip();
50192		pdfKitDoc.fillColor(group.decorationColor);
50193		for (var i = 0; i < nbDashes; i++) {
50194			pdfKitDoc.rect(rdx, y - lw / 2, 3.96, lw).fill();
50195			rdx += 3.96 + 2.84;
50196		}
50197	} else if (group.decorationStyle === 'dotted') {
50198		var nbDots = Math.ceil(totalWidth / (lw * 3));
50199		var rx = x + firstInline.x;
50200		pdfKitDoc.rect(rx, y, totalWidth, lw).clip();
50201		pdfKitDoc.fillColor(group.decorationColor);
50202		for (var ii = 0; ii < nbDots; ii++) {
50203			pdfKitDoc.rect(rx, y - lw / 2, lw, lw).fill();
50204			rx += (lw * 3);
50205		}
50206	} else if (group.decorationStyle === 'wavy') {
50207		var sh = 0.7, sv = 1;
50208		var nbWaves = Math.ceil(totalWidth / (sh * 2)) + 1;
50209		var rwx = x + firstInline.x - 1;
50210		pdfKitDoc.rect(x + firstInline.x, y - sv, totalWidth, y + sv).clip();
50211		pdfKitDoc.lineWidth(0.24);
50212		pdfKitDoc.moveTo(rwx, y);
50213		for (var iii = 0; iii < nbWaves; iii++) {
50214			pdfKitDoc.bezierCurveTo(rwx + sh, y - sv, rwx + sh * 2, y - sv, rwx + sh * 3, y)
50215				.bezierCurveTo(rwx + sh * 4, y + sv, rwx + sh * 5, y + sv, rwx + sh * 6, y);
50216			rwx += sh * 6;
50217		}
50218		pdfKitDoc.stroke(group.decorationColor);
50219	} else {
50220		pdfKitDoc.fillColor(group.decorationColor)
50221			.rect(x + firstInline.x, y - lw / 2, totalWidth, lw)
50222			.fill();
50223	}
vendor: 4,392 bytes, lines 50224-50357
50224	pdfKitDoc.restore();
50225}
50226
50227function drawDecorations(line, x, y, pdfKitDoc) {
50228	var groups = groupDecorations(line);
50229	for (var i = 0, l = groups.length; i < l; i++) {
50230		drawDecoration(groups[i], x, y, pdfKitDoc);
50231	}
50232}
50233
50234function drawBackground(line, x, y, pdfKitDoc) {
50235	var height = line.getHeight();
50236	for (var i = 0, l = line.inlines.length; i < l; i++) {
50237		var inline = line.inlines[i];
50238		if (!inline.background) {
50239			continue;
50240		}
50241		var justifyShift = (inline.justifyShift || 0);
50242		pdfKitDoc.fillColor(inline.background)
50243			.rect(x + inline.x - justifyShift, y, inline.width + justifyShift, height)
50244			.fill();
50245	}
50246}
50247
50248module.exports = {
50249	drawBackground: drawBackground,
50250	drawDecorations: drawDecorations
50251};
50252
50253/***/ }),
50254/* 306 */
50255/***/ (function(module, exports, __webpack_require__) {
50256
50257var __WEBPACK_AMD_DEFINE_RESULT__;/* FileSaver.js
50258 * A saveAs() FileSaver implementation.
50259 * 1.3.2
50260 * 2016-06-16 18:25:19
50261 *
50262 * By Eli Grey, http://eligrey.com
50263 * License: MIT
50264 *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
50265 */
50266
50267/*global self */
50268/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
50269
50270/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
50271
50272var saveAs = saveAs || (function(view) {
50273	"use strict";
50274	// IE <10 is explicitly unsupported
50275	if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
50276		return;
50277	}
50278	var
50279		  doc = view.document
50280		  // only get URL when necessary in case Blob.js hasn't overridden it yet
50281		, get_URL = function() {
50282			return view.URL || view.webkitURL || view;
50283		}
50284		, save_link = doc ? doc.createElementNS("http://www.w3.org/1999/xhtml", "a") : []
50285		, can_use_save_link = "download" in save_link
50286		, click = function(node) {
50287			var event = new MouseEvent("click");
50288			node.dispatchEvent(event);
50289		}
50290		, is_safari = /constructor/i.test(view.HTMLElement) || view.safari
50291		, is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent)
50292		, throw_outside = function(ex) {
50293			(view.setImmediate || view.setTimeout)(function() {
50294				throw ex;
50295			}, 0);
50296		}
50297		, force_saveable_type = "application/octet-stream"
50298		// the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to
50299		, arbitrary_revoke_timeout = 1000 * 40 // in ms
50300		, revoke = function(file) {
50301			var revoker = function() {
50302				if (typeof file === "string") { // file is an object URL
50303					get_URL().revokeObjectURL(file);
50304				} else { // file is a File
50305					file.remove();
50306				}
50307			};
50308			setTimeout(revoker, arbitrary_revoke_timeout);
50309		}
50310		, dispatch = function(filesaver, event_types, event) {
50311			event_types = [].concat(event_types);
50312			var i = event_types.length;
50313			while (i--) {
50314				var listener = filesaver["on" + event_types[i]];
50315				if (typeof listener === "function") {
50316					try {
50317						listener.call(filesaver, event || filesaver);
50318					} catch (ex) {
50319						throw_outside(ex);
50320					}
50321				}
50322			}
50323		}
50324		, auto_bom = function(blob) {
50325			// prepend BOM for UTF-8 XML and text/* types (including HTML)
50326			// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
50327			if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
50328				return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});
50329			}
50330			return blob;
50331		}
50332		, FileSaver = function(blob, name, no_auto_bom) {
50333			if (!no_auto_bom) {
50334				blob = auto_bom(blob);
50335			}
50336			// First try a.download, then web filesystem, then object URLs
50337			var
50338				  filesaver = this
50339				, type = blob.type
50340				, force = type === force_saveable_type
50341				, object_url
50342				, dispatch_all = function() {
50343					dispatch(filesaver, "writestart progress write writeend".split(" "));
50344				}
50345				// on any filesys errors revert to saving with object URLs
50346				, fs_error = function() {
50347					if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {
50348						// Safari doesn't allow downloading of blob urls
50349						var reader = new FileReader();
50350						reader.onloadend = function() {
50351							var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');
50352							var popup = view.open(url, '_blank');
50353							if(!popup) view.location.href = url;
50354							url=undefined; // release reference before dispatching
50355							filesaver.readyState = filesaver.DONE;
50356							dispatch_all();
50357						};
50358						reader.readAsDataURL(blob);
50359						filesaver.readyState = filesaver.INIT;
50360						return;
50361					}
50362					// don't create more object URLs than needed
50363					if (!object_url) {
50364						object_url = get_URL().createObjectURL(blob);
50365					}
50366					if (force) {
50367						view.location.href = object_url;
50368					} else {
50369						var opened = view.open(object_url, "_blank");
50370						if (!opened) {
50371							// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html
50372							view.location.href = object_url;
50373						}
50374					}
50375					filesaver.readyState = filesaver.DONE;
50376					dispatch_all();
50377					revoke(object_url);
50378				}
50379			;
50380			filesaver.readyState = filesaver.INIT;
50381
50382			if (can_use_save_link) {
50383				object_url = get_URL().createObjectURL(blob);
50384				setTimeout(function() {
50385					save_link.href = object_url;
50386					save_link.download = name;
50387					click(save_link);
50388					dispatch_all();
50389					revoke(object_url);
50390					filesaver.readyState = filesaver.DONE;
50391				});
50392				return;
50393			}
50394
50395			fs_error();
50396		}
50397		, FS_proto = FileSaver.prototype
50398		, saveAs = function(blob, name, no_auto_bom) {
50399			return new FileSaver(blob, name || blob.name || "download", no_auto_bom);
50400		}
50401	;
50402	// IE 10+ (native saveAs)
50403	if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
50404		return function(blob, name, no_auto_bom) {
50405			name = name || blob.name || "download";
50406
50407			if (!no_auto_bom) {
50408				blob = auto_bom(blob);
50409			}
50410			return navigator.msSaveOrOpenBlob(blob, name);
50411		};
50412	}
50413
50414	FS_proto.abort = function(){};
50415	FS_proto.readyState = FS_proto.INIT = 0;
50416	FS_proto.WRITING = 1;
50417	FS_proto.DONE = 2;
50418
50419	FS_proto.error =
50420	FS_proto.onwritestart =
50421	FS_proto.onprogress =
50422	FS_proto.onwrite =
50423	FS_proto.onabort =
50424	FS_proto.onerror =
50425	FS_proto.onwriteend =
50426		null;
50427
50428	return saveAs;
50429}(
50430	   typeof self !== "undefined" && self
50431	|| typeof window !== "undefined" && window
50432	|| this.content
50433));
50434// `self` is undefined in Firefox for Android content script context
50435// while `this` is nsIContentFrameMessageManager
50436// with an attribute `content` that corresponds to the window
50437
50438if (typeof module !== "undefined" && module.exports) {
50439  module.exports.saveAs = saveAs;
50440} else if (("function" !== "undefined" && __webpack_require__(307) !== null) && (__webpack_require__(308) !== null)) {
50441  !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
50442    return saveAs;
50443  }).call(exports, __webpack_require__, exports, module),
50444				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
50445}
50446
50447
50448/***/ }),
50449/* 307 */
50450/***/ (function(module, exports) {
50451
50452module.exports = function() {
50453	throw new Error("define cannot be used indirect");
50454};
50455
50456
50457/***/ }),
50458/* 308 */
50459/***/ (function(module, exports) {
50460
50461/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */
50462module.exports = __webpack_amd_options__;
50463
50464/* WEBPACK VAR INJECTION */}.call(exports, {}))
50465
50466/***/ })
50467/******/ ]);
50468});

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.