Created
August 1, 2024 21:10
-
-
Save evanvin/eb46aaff77017b89e8501aa668c3313e to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.waffles = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ | |
const PDFDocument = require('pdfkit-table'); | |
const fs = require('fs'); | |
const { x, options } = require('pdfkit'); | |
const FONT_SIZE = 10; | |
const TOP_BOT_MARGINS = 16; | |
const LEFT_RIGHT_MARGINS = 24; | |
function replaceFractions(arr) { | |
return arr.map(a => | |
a.replace(/(\d+)\/(\d+)/g, (match, p1, p2) => { | |
const fractions = { | |
'1/2': '½', '1/3': '⅓', '2/3': '⅔', | |
'1/4': '¼', '3/4': '¾', '1/8': '⅛', '3/8': '⅜', '5/8': '⅝', '7/8': '⅞' | |
}; | |
return fractions[match] || match; | |
}) | |
) | |
} | |
function generatePDF(title, ingredients, instructions) { | |
const doc = new PDFDocument({ | |
size: [288, 432], // 4x6 index card size in points | |
layout: 'landscape', | |
margins: { top: TOP_BOT_MARGINS, bottom: TOP_BOT_MARGINS, left: LEFT_RIGHT_MARGINS, right: LEFT_RIGHT_MARGINS } | |
}); | |
doc.pipe(fs.createWriteStream(`${title.replace(/\s/g, '')}.pdf`)); | |
// Title | |
doc.font('Courier') | |
.fontSize(FONT_SIZE) | |
.text(title.toUpperCase(), { align: 'center' }) | |
.moveDown(1); | |
//Ingredients | |
const formattedIngredients = replaceFractions(ingredients); | |
const chunkedIngredients = []; | |
for (let i = 0; i < formattedIngredients.length; i += 2) { | |
if (formattedIngredients[i + 1]) { | |
chunkedIngredients.push({ | |
a: formattedIngredients[i], | |
b: formattedIngredients[i + 1], | |
}); | |
} | |
else { | |
chunkedIngredients.push({ | |
a: formattedIngredients[i], | |
}); | |
} | |
} | |
const table = { | |
title: '', | |
headers: [ | |
{ label: "A", property: 'a', renderer: (value) => `- ${value}` }, | |
{ label: "B", property: 'b', renderer: (value) => value ? `- ${value}` : "" } | |
], | |
datas: chunkedIngredients, | |
}; | |
doc.table(table, { | |
prepareRow: (row, indexColumn, indexRow, rectRow, rectCell) => { | |
doc.font("Courier").fontSize(FONT_SIZE); | |
}, | |
hideHeader: true, | |
divider: { | |
header: { disabled: true }, | |
horizontal: { disabled: true }, | |
} | |
}); | |
doc.moveDown(1); | |
// Instructions | |
const formattedInstructions = replaceFractions(instructions); | |
doc.fontSize(FONT_SIZE).text(formattedInstructions.join(' '), { align: 'justify' }); | |
doc.end(); | |
} | |
// Example usage: | |
let title = 'Gluten-Free Pizza Dough'; | |
let ingredients = [ | |
'2 tsp active dry yeast', | |
'1 tsp sugar', | |
'3/4 c. warm water', | |
'1 egg', | |
'1 Tbsp olive oil', | |
'1 1/2 c. Red Mill all-purp fl.', | |
'2 tsp xanthan gum', | |
'1/2 tsp sea salt' | |
]; | |
let instructions = [ | |
'Preheat the oven and pizza stone to 425.', | |
'Combine yeast, sugar and water in a stand mixer bowl and let stand for about 5 min.', | |
'Combine dry ingredients in separate bowl.', | |
'Add egg and oil to wet ingredients, then add dry ingredients.', | |
'Mix with stand mixer and dough hook until dough starts to form; adding a teaspoon of water if dough moves up beaters.', | |
'Put wet dough on parchment paper.', | |
'Roll out with wet/oiled hands, and let rise for 10-15 min.', | |
'Put on preheated pizza stone.', | |
'After 3 min pull parchment off.', | |
'Parbake for another 5 mins.', | |
'Take out, put sauce and toppings on.', | |
'Bake for 9-10 min.' | |
]; | |
// title = 'Food Network Butterbeer'; | |
// ingredients = [ | |
// '1 c. brown sugar', | |
// '1 c. heavy cream', | |
// '1 Tbsp confec. sugar', | |
// '3 Tbsp butterscotch sauce', | |
// 'Pinch of salt', | |
// '1/2 tsp butter extract', | |
// '1/4 tsp vanilla', | |
// '6 c. cold club soda' | |
// ]; | |
// instructions = [ | |
// 'Combine the brown sugar with 1/2 cup water in a small saucepan over medium-high heat.', | |
// 'Cook, stirring occasionally, until the mixture boils and the sugar dissolves, 2 to 3 minutes.', | |
// 'Transfer to a small bowl or liquid measuring cup and refrigerate until very cold, about 1 hour.', | |
// 'Beat the heavy cream and confectioners\' sugar in a large bowl with a mixer on medium-high speed until soft peaks form.', | |
// 'Beat in the butterscotch sauce and salt until medium peaks form. Cover and refrigerate until ready to use.', | |
// 'Stir the butter extract and vanilla extract into the cold brown sugar syrup.', | |
// 'For each drink, combine 1 cup seltzer with 3 to 4 tablespoons of the brown sugar syrup in a chilled glass.', | |
// 'Top with the butterscotch whipped cream.' | |
// ]; | |
title = 'Holiday Simple Syrup'; | |
ingredients = [ | |
'1 c. water', | |
'1 c. sugar', | |
'1 orange peel', | |
'2 star anise', | |
'2 cinnamon sticks', | |
'1 tsp. whole cloves', | |
'1 whole nutmeg (quartered)' | |
]; | |
instructions = [ | |
'Dissolve water and sugar on the stove.', | |
'Add all the spices and the orange peel.', | |
'Simmer for 15 min.', | |
'Take off heat, and pour the syrup into a bottle through cheesecloth.' | |
]; | |
// generatePDF(title, ingredients, instructions); | |
},{"fs":257,"pdfkit":221,"pdfkit-table":220}],2:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _applyDecoratedDescriptor; | |
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { | |
var desc1 = {}; | |
Object['ke' + 'ys'](descriptor).forEach(function(key) { | |
desc1[key] = descriptor[key]; | |
}); | |
desc1.enumerable = !!desc1.enumerable; | |
desc1.configurable = !!desc1.configurable; | |
if ('value' in desc1 || desc1.initializer) { | |
desc1.writable = true; | |
} | |
desc1 = decorators.slice().reverse().reduce(function(desc, decorator) { | |
return decorator ? decorator(target, property, desc) || desc : desc; | |
}, desc1); | |
var hasAccessor = Object.prototype.hasOwnProperty.call(desc1, 'get') || Object.prototype.hasOwnProperty.call(desc1, 'set'); | |
if (context && desc1.initializer !== void 0 && !hasAccessor) { | |
desc1.value = desc1.initializer ? desc1.initializer.call(context) : void 0; | |
desc1.initializer = undefined; | |
} | |
if (hasAccessor) { | |
delete desc1.writable; | |
delete desc1.initializer; | |
delete desc1.value; | |
} | |
if (desc1.initializer === void 0) { | |
Object['define' + 'Property'](target, property, desc1); | |
desc1 = null; | |
} | |
return desc1; | |
} | |
},{}],3:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _arrayLikeToArray; | |
function _arrayLikeToArray(arr, len) { | |
if (len == null || len > arr.length) len = arr.length; | |
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i]; | |
return arr2; | |
} | |
},{}],4:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _arrayWithHoles; | |
function _arrayWithHoles(arr) { | |
if (Array.isArray(arr)) return arr; | |
} | |
},{}],5:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _arrayWithoutHoles; | |
var _arrayLikeToArray = _interopRequireDefault(require("./_array_like_to_array")); | |
function _arrayWithoutHoles(arr) { | |
if (Array.isArray(arr)) return (0, _arrayLikeToArray).default(arr); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_array_like_to_array":3}],6:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _assertThisInitialized; | |
function _assertThisInitialized(self) { | |
if (self === void 0) { | |
throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); | |
} | |
return self; | |
} | |
},{}],7:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = AsyncGenerator; | |
var _awaitValue = _interopRequireDefault(require("./_await_value")); | |
function AsyncGenerator(gen) { | |
var front, back; | |
function send(key, arg) { | |
return new Promise(function(resolve, reject) { | |
var request = { | |
key: key, | |
arg: arg, | |
resolve: resolve, | |
reject: reject, | |
next: null | |
}; | |
if (back) { | |
back = back.next = request; | |
} else { | |
front = back = request; | |
resume(key, arg); | |
} | |
}); | |
} | |
function resume(key, arg1) { | |
try { | |
var result = gen[key](arg1); | |
var value = result.value; | |
var wrappedAwait = value instanceof _awaitValue.default; | |
Promise.resolve(wrappedAwait ? value.wrapped : value).then(function(arg) { | |
if (wrappedAwait) { | |
resume("next", arg); | |
return; | |
} | |
settle(result.done ? "return" : "normal", arg); | |
}, function(err) { | |
resume("throw", err); | |
}); | |
} catch (err) { | |
settle("throw", err); | |
} | |
} | |
function settle(type, value) { | |
switch(type){ | |
case "return": | |
front.resolve({ | |
value: value, | |
done: true | |
}); | |
break; | |
case "throw": | |
front.reject(value); | |
break; | |
default: | |
front.resolve({ | |
value: value, | |
done: false | |
}); | |
break; | |
} | |
front = front.next; | |
if (front) { | |
resume(front.key, front.arg); | |
} else { | |
back = null; | |
} | |
} | |
this._invoke = send; | |
if (typeof gen.return !== "function") { | |
this.return = undefined; | |
} | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
if (typeof Symbol === "function" && Symbol.asyncIterator) { | |
AsyncGenerator.prototype[Symbol.asyncIterator] = function() { | |
return this; | |
}; | |
} | |
AsyncGenerator.prototype.next = function(arg) { | |
return this._invoke("next", arg); | |
}; | |
AsyncGenerator.prototype.throw = function(arg) { | |
return this._invoke("throw", arg); | |
}; | |
AsyncGenerator.prototype.return = function(arg) { | |
return this._invoke("return", arg); | |
}; | |
},{"./_await_value":12}],8:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _asyncGeneratorDelegate; | |
function _asyncGeneratorDelegate(inner, awaitWrap) { | |
var iter = {}, waiting = false; | |
function pump(key, value) { | |
waiting = true; | |
value = new Promise(function(resolve) { | |
resolve(inner[key](value)); | |
}); | |
return { | |
done: false, | |
value: awaitWrap(value) | |
}; | |
} | |
if (typeof Symbol === "function" && Symbol.iterator) { | |
iter[Symbol.iterator] = function() { | |
return this; | |
}; | |
} | |
iter.next = function(value) { | |
if (waiting) { | |
waiting = false; | |
return value; | |
} | |
return pump("next", value); | |
}; | |
if (typeof inner.throw === "function") { | |
iter.throw = function(value) { | |
if (waiting) { | |
waiting = false; | |
throw value; | |
} | |
return pump("throw", value); | |
}; | |
} | |
if (typeof inner.return === "function") { | |
iter.return = function(value) { | |
return pump("return", value); | |
}; | |
} | |
return iter; | |
} | |
},{}],9:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _asyncIterator; | |
function _asyncIterator(iterable) { | |
var method; | |
if (typeof Symbol === "function") { | |
if (Symbol.asyncIterator) { | |
method = iterable[Symbol.asyncIterator]; | |
if (method != null) return method.call(iterable); | |
} | |
if (Symbol.iterator) { | |
method = iterable[Symbol.iterator]; | |
if (method != null) return method.call(iterable); | |
} | |
} | |
throw new TypeError("Object is not async iterable"); | |
} | |
},{}],10:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _asyncToGenerator; | |
function _asyncToGenerator(fn) { | |
return function() { | |
var self = this, args = arguments; | |
return new Promise(function(resolve, reject) { | |
var gen = fn.apply(self, args); | |
function _next(value) { | |
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); | |
} | |
function _throw(err) { | |
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); | |
} | |
_next(undefined); | |
}); | |
}; | |
} | |
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { | |
try { | |
var info = gen[key](arg); | |
var value = info.value; | |
} catch (error) { | |
reject(error); | |
return; | |
} | |
if (info.done) { | |
resolve(value); | |
} else { | |
Promise.resolve(value).then(_next, _throw); | |
} | |
} | |
},{}],11:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _awaitAsyncGenerator; | |
var _awaitValue = _interopRequireDefault(require("./_await_value")); | |
function _awaitAsyncGenerator(value) { | |
return new _awaitValue.default(value); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_await_value":12}],12:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _AwaitValue; | |
function _AwaitValue(value) { | |
this.wrapped = value; | |
} | |
},{}],13:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _checkPrivateRedeclaration; | |
function _checkPrivateRedeclaration(obj, privateCollection) { | |
if (privateCollection.has(obj)) { | |
throw new TypeError("Cannot initialize the same private elements twice on an object"); | |
} | |
} | |
},{}],14:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classApplyDescriptorDestructureSet; | |
function _classApplyDescriptorDestructureSet(receiver, descriptor) { | |
if (descriptor.set) { | |
if (!("__destrObj" in descriptor)) { | |
descriptor.__destrObj = { | |
set value (v){ | |
descriptor.set.call(receiver, v); | |
} | |
}; | |
} | |
return descriptor.__destrObj; | |
} else { | |
if (!descriptor.writable) { | |
// This should only throw in strict mode, but class bodies are | |
// always strict and private fields can only be used inside | |
// class bodies. | |
throw new TypeError("attempted to set read only private field"); | |
} | |
return descriptor; | |
} | |
} | |
},{}],15:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classApplyDescriptorGet; | |
function _classApplyDescriptorGet(receiver, descriptor) { | |
if (descriptor.get) { | |
return descriptor.get.call(receiver); | |
} | |
return descriptor.value; | |
} | |
},{}],16:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classApplyDescriptorSet; | |
function _classApplyDescriptorSet(receiver, descriptor, value) { | |
if (descriptor.set) { | |
descriptor.set.call(receiver, value); | |
} else { | |
if (!descriptor.writable) { | |
// This should only throw in strict mode, but class bodies are | |
// always strict and private fields can only be used inside | |
// class bodies. | |
throw new TypeError("attempted to set read only private field"); | |
} | |
descriptor.value = value; | |
} | |
} | |
},{}],17:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classCallCheck; | |
function _classCallCheck(instance, Constructor) { | |
if (!(instance instanceof Constructor)) { | |
throw new TypeError("Cannot call a class as a function"); | |
} | |
} | |
},{}],18:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classCheckPrivateStaticAccess; | |
function _classCheckPrivateStaticAccess(receiver, classConstructor) { | |
if (receiver !== classConstructor) { | |
throw new TypeError("Private static access of wrong provenance"); | |
} | |
} | |
},{}],19:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classCheckPrivateStaticFieldDescriptor; | |
function _classCheckPrivateStaticFieldDescriptor(descriptor, action) { | |
if (descriptor === undefined) { | |
throw new TypeError("attempted to " + action + " private static field before its declaration"); | |
} | |
} | |
},{}],20:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classExtractFieldDescriptor; | |
function _classExtractFieldDescriptor(receiver, privateMap, action) { | |
if (!privateMap.has(receiver)) { | |
throw new TypeError("attempted to " + action + " private field on non-instance"); | |
} | |
return privateMap.get(receiver); | |
} | |
},{}],21:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classNameTDZError; | |
function _classNameTDZError(name) { | |
throw new Error("Class \"" + name + "\" cannot be referenced in computed property keys."); | |
} | |
},{}],22:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classPrivateFieldDestructureSet; | |
var _classExtractFieldDescriptor = _interopRequireDefault(require("./_class_extract_field_descriptor")); | |
var _classApplyDescriptorDestructure = _interopRequireDefault(require("./_class_apply_descriptor_destructure")); | |
function _classPrivateFieldDestructureSet(receiver, privateMap) { | |
var descriptor = (0, _classExtractFieldDescriptor).default(receiver, privateMap, "set"); | |
return (0, _classApplyDescriptorDestructure).default(receiver, descriptor); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_class_apply_descriptor_destructure":14,"./_class_extract_field_descriptor":20}],23:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classPrivateFieldGet; | |
var _classExtractFieldDescriptor = _interopRequireDefault(require("./_class_extract_field_descriptor")); | |
var _classApplyDescriptorGet = _interopRequireDefault(require("./_class_apply_descriptor_get")); | |
function _classPrivateFieldGet(receiver, privateMap) { | |
var descriptor = (0, _classExtractFieldDescriptor).default(receiver, privateMap, "get"); | |
return (0, _classApplyDescriptorGet).default(receiver, descriptor); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_class_apply_descriptor_get":15,"./_class_extract_field_descriptor":20}],24:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classPrivateFieldInit; | |
var _checkPrivateRedeclaration = _interopRequireDefault(require("./_check_private_redeclaration")); | |
function _classPrivateFieldInit(obj, privateMap, value) { | |
(0, _checkPrivateRedeclaration).default(obj, privateMap); | |
privateMap.set(obj, value); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_check_private_redeclaration":13}],25:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classPrivateFieldBase; | |
function _classPrivateFieldBase(receiver, privateKey) { | |
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { | |
throw new TypeError("attempted to use private field on non-instance"); | |
} | |
return receiver; | |
} | |
},{}],26:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classPrivateFieldLooseKey; | |
function _classPrivateFieldLooseKey(name) { | |
return "__private_" + id++ + "_" + name; | |
} | |
var id = 0; | |
},{}],27:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classPrivateFieldSet; | |
var _classExtractFieldDescriptor = _interopRequireDefault(require("./_class_extract_field_descriptor")); | |
var _classApplyDescriptorSet = _interopRequireDefault(require("./_class_apply_descriptor_set")); | |
function _classPrivateFieldSet(receiver, privateMap, value) { | |
var descriptor = (0, _classExtractFieldDescriptor).default(receiver, privateMap, "set"); | |
(0, _classApplyDescriptorSet).default(receiver, descriptor, value); | |
return value; | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_class_apply_descriptor_set":16,"./_class_extract_field_descriptor":20}],28:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classPrivateMethodGet; | |
function _classPrivateMethodGet(receiver, privateSet, fn) { | |
if (!privateSet.has(receiver)) { | |
throw new TypeError("attempted to get private field on non-instance"); | |
} | |
return fn; | |
} | |
},{}],29:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classPrivateMethodInit; | |
var _checkPrivateRedeclaration = _interopRequireDefault(require("./_check_private_redeclaration")); | |
function _classPrivateMethodInit(obj, privateSet) { | |
(0, _checkPrivateRedeclaration).default(obj, privateSet); | |
privateSet.add(obj); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_check_private_redeclaration":13}],30:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classPrivateMethodSet; | |
function _classPrivateMethodSet() { | |
throw new TypeError("attempted to reassign private method"); | |
} | |
},{}],31:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classStaticPrivateFieldDestructureSet; | |
var _classCheckPrivateStaticAccess = _interopRequireDefault(require("./_class_check_private_static_access")); | |
var _classApplyDescriptorDestructure = _interopRequireDefault(require("./_class_apply_descriptor_destructure")); | |
function _classStaticPrivateFieldDestructureSet(receiver, classConstructor, descriptor) { | |
(0, _classCheckPrivateStaticAccess).default(receiver, classConstructor); | |
(0, _classCheckPrivateStaticAccess).default(descriptor, "set"); | |
return (0, _classApplyDescriptorDestructure).default(receiver, descriptor); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_class_apply_descriptor_destructure":14,"./_class_check_private_static_access":18}],32:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classStaticPrivateFieldSpecGet; | |
var _classCheckPrivateStaticAccess = _interopRequireDefault(require("./_class_check_private_static_access")); | |
var _classApplyDescriptorGet = _interopRequireDefault(require("./_class_apply_descriptor_get")); | |
function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { | |
(0, _classCheckPrivateStaticAccess).default(receiver, classConstructor); | |
(0, _classCheckPrivateStaticAccess).default(descriptor, "get"); | |
return (0, _classApplyDescriptorGet).default(receiver, descriptor); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_class_apply_descriptor_get":15,"./_class_check_private_static_access":18}],33:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _classStaticPrivateFieldSpecSet; | |
var _classCheckPrivateStaticAccess = _interopRequireDefault(require("./_class_check_private_static_access")); | |
var _classApplyDescriptorSet = _interopRequireDefault(require("./_class_apply_descriptor_set")); | |
function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) { | |
(0, _classCheckPrivateStaticAccess).default(receiver, classConstructor); | |
(0, _classCheckPrivateStaticAccess).default(descriptor, "set"); | |
(0, _classApplyDescriptorSet).default(receiver, descriptor, value); | |
return value; | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_class_apply_descriptor_set":16,"./_class_check_private_static_access":18}],34:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _construct; | |
var _setPrototypeOf = _interopRequireDefault(require("./_set_prototype_of")); | |
function _construct(Parent, args, Class) { | |
return construct.apply(null, arguments); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
function isNativeReflectConstruct() { | |
if (typeof Reflect === "undefined" || !Reflect.construct) return false; | |
if (Reflect.construct.sham) return false; | |
if (typeof Proxy === "function") return true; | |
try { | |
Date.prototype.toString.call(Reflect.construct(Date, [], function() {})); | |
return true; | |
} catch (e) { | |
return false; | |
} | |
} | |
function construct(Parent1, args1, Class1) { | |
if (isNativeReflectConstruct()) { | |
construct = Reflect.construct; | |
} else { | |
construct = function construct(Parent, args, Class) { | |
var a = [ | |
null | |
]; | |
a.push.apply(a, args); | |
var Constructor = Function.bind.apply(Parent, a); | |
var instance = new Constructor(); | |
if (Class) (0, _setPrototypeOf).default(instance, Class.prototype); | |
return instance; | |
}; | |
} | |
return construct.apply(null, arguments); | |
} | |
},{"./_set_prototype_of":67}],35:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _createClass; | |
function _createClass(Constructor, protoProps, staticProps) { | |
if (protoProps) _defineProperties(Constructor.prototype, protoProps); | |
if (staticProps) _defineProperties(Constructor, staticProps); | |
return Constructor; | |
} | |
function _defineProperties(target, props) { | |
for(var i = 0; i < props.length; i++){ | |
var descriptor = props[i]; | |
descriptor.enumerable = descriptor.enumerable || false; | |
descriptor.configurable = true; | |
if ("value" in descriptor) descriptor.writable = true; | |
Object.defineProperty(target, descriptor.key, descriptor); | |
} | |
} | |
},{}],36:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _createSuper; | |
var _isNativeReflectConstruct = _interopRequireDefault(require("./_is_native_reflect_construct")); | |
var _getPrototypeOf = _interopRequireDefault(require("./_get_prototype_of")); | |
var _possibleConstructorReturn = _interopRequireDefault(require("./_possible_constructor_return")); | |
function _createSuper(Derived) { | |
var hasNativeReflectConstruct = (0, _isNativeReflectConstruct).default(); | |
return function _createSuperInternal() { | |
var Super = (0, _getPrototypeOf).default(Derived), result; | |
if (hasNativeReflectConstruct) { | |
var NewTarget = (0, _getPrototypeOf).default(this).constructor; | |
result = Reflect.construct(Super, arguments, NewTarget); | |
} else { | |
result = Super.apply(this, arguments); | |
} | |
return (0, _possibleConstructorReturn).default(this, result); | |
}; | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_get_prototype_of":43,"./_is_native_reflect_construct":52,"./_possible_constructor_return":64}],37:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _decorate; | |
var _toArray = _interopRequireDefault(require("./_to_array")); | |
var _toPropertyKey = _interopRequireDefault(require("./_to_property_key")); | |
function _decorate(decorators, factory, superClass) { | |
var r = factory(function initialize(O) { | |
_initializeInstanceElements(O, decorated.elements); | |
}, superClass); | |
var decorated = _decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators); | |
_initializeClassElements(r.F, decorated.elements); | |
return _runClassFinishers(r.F, decorated.finishers); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
function _createElementDescriptor(def) { | |
var key = (0, _toPropertyKey).default(def.key); | |
var descriptor; | |
if (def.kind === "method") { | |
descriptor = { | |
value: def.value, | |
writable: true, | |
configurable: true, | |
enumerable: false | |
}; | |
Object.defineProperty(def.value, "name", { | |
value: _typeof(key) === "symbol" ? "" : key, | |
configurable: true | |
}); | |
} else if (def.kind === "get") { | |
descriptor = { | |
get: def.value, | |
configurable: true, | |
enumerable: false | |
}; | |
} else if (def.kind === "set") { | |
descriptor = { | |
set: def.value, | |
configurable: true, | |
enumerable: false | |
}; | |
} else if (def.kind === "field") { | |
descriptor = { | |
configurable: true, | |
writable: true, | |
enumerable: true | |
}; | |
} | |
var element = { | |
kind: def.kind === "field" ? "field" : "method", | |
key: key, | |
placement: def.static ? "static" : def.kind === "field" ? "own" : "prototype", | |
descriptor: descriptor | |
}; | |
if (def.decorators) element.decorators = def.decorators; | |
if (def.kind === "field") element.initializer = def.value; | |
return element; | |
} | |
function _coalesceGetterSetter(element, other) { | |
if (element.descriptor.get !== undefined) { | |
other.descriptor.get = element.descriptor.get; | |
} else { | |
other.descriptor.set = element.descriptor.set; | |
} | |
} | |
function _coalesceClassElements(elements) { | |
var newElements = []; | |
var isSameElement = function isSameElement(other) { | |
return other.kind === "method" && other.key === element.key && other.placement === element.placement; | |
}; | |
for(var i = 0; i < elements.length; i++){ | |
var element = elements[i]; | |
var other1; | |
if (element.kind === "method" && (other1 = newElements.find(isSameElement))) { | |
if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other1.descriptor)) { | |
if (_hasDecorators(element) || _hasDecorators(other1)) { | |
throw new ReferenceError("Duplicated methods (" + element.key + ") can't be decorated."); | |
} | |
other1.descriptor = element.descriptor; | |
} else { | |
if (_hasDecorators(element)) { | |
if (_hasDecorators(other1)) { | |
throw new ReferenceError("Decorators can't be placed on different accessors with for " + "the same property (" + element.key + ")."); | |
} | |
other1.decorators = element.decorators; | |
} | |
_coalesceGetterSetter(element, other1); | |
} | |
} else { | |
newElements.push(element); | |
} | |
} | |
return newElements; | |
} | |
function _hasDecorators(element) { | |
return element.decorators && element.decorators.length; | |
} | |
function _isDataDescriptor(desc) { | |
return desc !== undefined && !(desc.value === undefined && desc.writable === undefined); | |
} | |
function _initializeClassElements(F, elements) { | |
var proto = F.prototype; | |
[ | |
"method", | |
"field" | |
].forEach(function(kind) { | |
elements.forEach(function(element) { | |
var placement = element.placement; | |
if (element.kind === kind && (placement === "static" || placement === "prototype")) { | |
var receiver = placement === "static" ? F : proto; | |
_defineClassElement(receiver, element); | |
} | |
}); | |
}); | |
} | |
function _initializeInstanceElements(O, elements) { | |
[ | |
"method", | |
"field" | |
].forEach(function(kind) { | |
elements.forEach(function(element) { | |
if (element.kind === kind && element.placement === "own") { | |
_defineClassElement(O, element); | |
} | |
}); | |
}); | |
} | |
function _defineClassElement(receiver, element) { | |
var descriptor = element.descriptor; | |
if (element.kind === "field") { | |
var initializer = element.initializer; | |
descriptor = { | |
enumerable: descriptor.enumerable, | |
writable: descriptor.writable, | |
configurable: descriptor.configurable, | |
value: initializer === void 0 ? void 0 : initializer.call(receiver) | |
}; | |
} | |
Object.defineProperty(receiver, element.key, descriptor); | |
} | |
function _decorateClass(elements, decorators) { | |
var newElements = []; | |
var finishers = []; | |
var placements = { | |
static: [], | |
prototype: [], | |
own: [] | |
}; | |
elements.forEach(function(element) { | |
_addElementPlacement(element, placements); | |
}); | |
elements.forEach(function(element) { | |
if (!_hasDecorators(element)) return newElements.push(element); | |
var elementFinishersExtras = _decorateElement(element, placements); | |
newElements.push(elementFinishersExtras.element); | |
newElements.push.apply(newElements, elementFinishersExtras.extras); | |
finishers.push.apply(finishers, elementFinishersExtras.finishers); | |
}); | |
if (!decorators) { | |
return { | |
elements: newElements, | |
finishers: finishers | |
}; | |
} | |
var result = _decorateConstructor(newElements, decorators); | |
finishers.push.apply(finishers, result.finishers); | |
result.finishers = finishers; | |
return result; | |
} | |
function _addElementPlacement(element, placements, silent) { | |
var keys = placements[element.placement]; | |
if (!silent && keys.indexOf(element.key) !== -1) { | |
throw new TypeError("Duplicated element (" + element.key + ")"); | |
} | |
keys.push(element.key); | |
} | |
function _decorateElement(element, placements) { | |
var extras = []; | |
var finishers = []; | |
for(var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--){ | |
var keys = placements[element.placement]; | |
keys.splice(keys.indexOf(element.key), 1); | |
var elementObject = _fromElementDescriptor(element); | |
var elementFinisherExtras = _toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject); | |
element = elementFinisherExtras.element; | |
_addElementPlacement(element, placements); | |
if (elementFinisherExtras.finisher) { | |
finishers.push(elementFinisherExtras.finisher); | |
} | |
var newExtras = elementFinisherExtras.extras; | |
if (newExtras) { | |
for(var j = 0; j < newExtras.length; j++){ | |
_addElementPlacement(newExtras[j], placements); | |
} | |
extras.push.apply(extras, newExtras); | |
} | |
} | |
return { | |
element: element, | |
finishers: finishers, | |
extras: extras | |
}; | |
} | |
function _decorateConstructor(elements, decorators) { | |
var finishers = []; | |
for(var i = decorators.length - 1; i >= 0; i--){ | |
var obj = _fromClassDescriptor(elements); | |
var elementsAndFinisher = _toClassDescriptor((0, decorators[i])(obj) || obj); | |
if (elementsAndFinisher.finisher !== undefined) { | |
finishers.push(elementsAndFinisher.finisher); | |
} | |
if (elementsAndFinisher.elements !== undefined) { | |
elements = elementsAndFinisher.elements; | |
for(var j = 0; j < elements.length - 1; j++){ | |
for(var k = j + 1; k < elements.length; k++){ | |
if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) { | |
throw new TypeError("Duplicated element (" + elements[j].key + ")"); | |
} | |
} | |
} | |
} | |
} | |
return { | |
elements: elements, | |
finishers: finishers | |
}; | |
} | |
function _fromElementDescriptor(element) { | |
var obj = { | |
kind: element.kind, | |
key: element.key, | |
placement: element.placement, | |
descriptor: element.descriptor | |
}; | |
var desc = { | |
value: "Descriptor", | |
configurable: true | |
}; | |
Object.defineProperty(obj, Symbol.toStringTag, desc); | |
if (element.kind === "field") obj.initializer = element.initializer; | |
return obj; | |
} | |
function _toElementDescriptors(elementObjects) { | |
if (elementObjects === undefined) return; | |
return (0, _toArray).default(elementObjects).map(function(elementObject) { | |
var element = _toElementDescriptor(elementObject); | |
_disallowProperty(elementObject, "finisher", "An element descriptor"); | |
_disallowProperty(elementObject, "extras", "An element descriptor"); | |
return element; | |
}); | |
} | |
function _toElementDescriptor(elementObject) { | |
var kind = String(elementObject.kind); | |
if (kind !== "method" && kind !== "field") { | |
throw new TypeError('An element descriptor\'s .kind property must be either "method" or' + ' "field", but a decorator created an element descriptor with' + ' .kind "' + kind + '"'); | |
} | |
var key = (0, _toPropertyKey).default(elementObject.key); | |
var placement = String(elementObject.placement); | |
if (placement !== "static" && placement !== "prototype" && placement !== "own") { | |
throw new TypeError('An element descriptor\'s .placement property must be one of "static",' + ' "prototype" or "own", but a decorator created an element descriptor' + ' with .placement "' + placement + '"'); | |
} | |
var descriptor = elementObject.descriptor; | |
_disallowProperty(elementObject, "elements", "An element descriptor"); | |
var element = { | |
kind: kind, | |
key: key, | |
placement: placement, | |
descriptor: Object.assign({}, descriptor) | |
}; | |
if (kind !== "field") { | |
_disallowProperty(elementObject, "initializer", "A method descriptor"); | |
} else { | |
_disallowProperty(descriptor, "get", "The property descriptor of a field descriptor"); | |
_disallowProperty(descriptor, "set", "The property descriptor of a field descriptor"); | |
_disallowProperty(descriptor, "value", "The property descriptor of a field descriptor"); | |
element.initializer = elementObject.initializer; | |
} | |
return element; | |
} | |
function _toElementFinisherExtras(elementObject) { | |
var element = _toElementDescriptor(elementObject); | |
var finisher = _optionalCallableProperty(elementObject, "finisher"); | |
var extras = _toElementDescriptors(elementObject.extras); | |
return { | |
element: element, | |
finisher: finisher, | |
extras: extras | |
}; | |
} | |
function _fromClassDescriptor(elements) { | |
var obj = { | |
kind: "class", | |
elements: elements.map(_fromElementDescriptor) | |
}; | |
var desc = { | |
value: "Descriptor", | |
configurable: true | |
}; | |
Object.defineProperty(obj, Symbol.toStringTag, desc); | |
return obj; | |
} | |
function _toClassDescriptor(obj) { | |
var kind = String(obj.kind); | |
if (kind !== "class") { | |
throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator' + ' created a class descriptor with .kind "' + kind + '"'); | |
} | |
_disallowProperty(obj, "key", "A class descriptor"); | |
_disallowProperty(obj, "placement", "A class descriptor"); | |
_disallowProperty(obj, "descriptor", "A class descriptor"); | |
_disallowProperty(obj, "initializer", "A class descriptor"); | |
_disallowProperty(obj, "extras", "A class descriptor"); | |
var finisher = _optionalCallableProperty(obj, "finisher"); | |
var elements = _toElementDescriptors(obj.elements); | |
return { | |
elements: elements, | |
finisher: finisher | |
}; | |
} | |
function _disallowProperty(obj, name, objectType) { | |
if (obj[name] !== undefined) { | |
throw new TypeError(objectType + " can't have a ." + name + " property."); | |
} | |
} | |
function _optionalCallableProperty(obj, name) { | |
var value = obj[name]; | |
if (value !== undefined && typeof value !== "function") { | |
throw new TypeError("Expected '" + name + "' to be a function"); | |
} | |
return value; | |
} | |
function _runClassFinishers(constructor, finishers) { | |
for(var i = 0; i < finishers.length; i++){ | |
var newConstructor = (0, finishers[i])(constructor); | |
if (newConstructor !== undefined) { | |
if (typeof newConstructor !== "function") { | |
throw new TypeError("Finishers must return a constructor."); | |
} | |
constructor = newConstructor; | |
} | |
} | |
return constructor; | |
} | |
},{"./_to_array":75,"./_to_property_key":78}],38:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _defaults; | |
function _defaults(obj, defaults) { | |
var keys = Object.getOwnPropertyNames(defaults); | |
for(var i = 0; i < keys.length; i++){ | |
var key = keys[i]; | |
var value = Object.getOwnPropertyDescriptor(defaults, key); | |
if (value && value.configurable && obj[key] === undefined) { | |
Object.defineProperty(obj, key, value); | |
} | |
} | |
return obj; | |
} | |
},{}],39:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _defineEnumerableProperties; | |
function _defineEnumerableProperties(obj, descs) { | |
for(var key in descs){ | |
var desc = descs[key]; | |
desc.configurable = desc.enumerable = true; | |
if ("value" in desc) desc.writable = true; | |
Object.defineProperty(obj, key, desc); | |
} | |
if (Object.getOwnPropertySymbols) { | |
var objectSymbols = Object.getOwnPropertySymbols(descs); | |
for(var i = 0; i < objectSymbols.length; i++){ | |
var sym = objectSymbols[i]; | |
var desc = descs[sym]; | |
desc.configurable = desc.enumerable = true; | |
if ("value" in desc) desc.writable = true; | |
Object.defineProperty(obj, sym, desc); | |
} | |
} | |
return obj; | |
} | |
},{}],40:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _defineProperty; | |
function _defineProperty(obj, key, value) { | |
if (key in obj) { | |
Object.defineProperty(obj, key, { | |
value: value, | |
enumerable: true, | |
configurable: true, | |
writable: true | |
}); | |
} else { | |
obj[key] = value; | |
} | |
return obj; | |
} | |
},{}],41:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _extends; | |
function _extends() { | |
return extends_.apply(this, arguments); | |
} | |
function extends_() { | |
extends_ = Object.assign || function(target) { | |
for(var i = 1; i < arguments.length; i++){ | |
var source = arguments[i]; | |
for(var key in source){ | |
if (Object.prototype.hasOwnProperty.call(source, key)) { | |
target[key] = source[key]; | |
} | |
} | |
} | |
return target; | |
}; | |
return extends_.apply(this, arguments); | |
} | |
},{}],42:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _get; | |
var _superPropBase = _interopRequireDefault(require("./_super_prop_base")); | |
function _get(target, property, receiver) { | |
return get(target, property, receiver); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
function get(target1, property1, receiver1) { | |
if (typeof Reflect !== "undefined" && Reflect.get) { | |
get = Reflect.get; | |
} else { | |
get = function get(target, property, receiver) { | |
var base = (0, _superPropBase).default(target, property); | |
if (!base) return; | |
var desc = Object.getOwnPropertyDescriptor(base, property); | |
if (desc.get) { | |
return desc.get.call(receiver || target); | |
} | |
return desc.value; | |
}; | |
} | |
return get(target1, property1, receiver1); | |
} | |
},{"./_super_prop_base":71}],43:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _getPrototypeOf; | |
function _getPrototypeOf(o) { | |
return getPrototypeOf(o); | |
} | |
function getPrototypeOf(o1) { | |
getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) { | |
return o.__proto__ || Object.getPrototypeOf(o); | |
}; | |
return getPrototypeOf(o1); | |
} | |
},{}],44:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _inherits; | |
var _setPrototypeOf = _interopRequireDefault(require("./_set_prototype_of")); | |
function _inherits(subClass, superClass) { | |
if (typeof superClass !== "function" && superClass !== null) { | |
throw new TypeError("Super expression must either be null or a function"); | |
} | |
subClass.prototype = Object.create(superClass && superClass.prototype, { | |
constructor: { | |
value: subClass, | |
writable: true, | |
configurable: true | |
} | |
}); | |
if (superClass) (0, _setPrototypeOf).default(subClass, superClass); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_set_prototype_of":67}],45:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _inheritsLoose; | |
function _inheritsLoose(subClass, superClass) { | |
subClass.prototype = Object.create(superClass.prototype); | |
subClass.prototype.constructor = subClass; | |
subClass.__proto__ = superClass; | |
} | |
},{}],46:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _initializerDefineProperty; | |
function _initializerDefineProperty(target, property, descriptor, context) { | |
if (!descriptor) return; | |
Object.defineProperty(target, property, { | |
enumerable: descriptor.enumerable, | |
configurable: descriptor.configurable, | |
writable: descriptor.writable, | |
value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 | |
}); | |
} | |
},{}],47:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _initializerWarningHelper; | |
function _initializerWarningHelper(descriptor, context) { | |
throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and set to use loose mode. ' + 'To use proposal-class-properties in spec mode with decorators, wait for ' + 'the next major version of decorators in stage 2.'); | |
} | |
},{}],48:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _instanceof; | |
function _instanceof(left, right) { | |
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) { | |
return !!right[Symbol.hasInstance](left); | |
} else { | |
return left instanceof right; | |
} | |
} | |
},{}],49:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _interopRequireDefault; | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{}],50:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _interopRequireWildcard; | |
function _interopRequireWildcard(obj) { | |
if (obj && obj.__esModule) { | |
return obj; | |
} | |
if (obj === null || typeof obj !== "object" && typeof obj !== "function") { | |
return { | |
default: obj | |
}; | |
} | |
var cache = _getRequireWildcardCache(); | |
if (cache && cache.has(obj)) { | |
return cache.get(obj); | |
} | |
var newObj = {}; | |
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; | |
for(var key in obj){ | |
if (Object.prototype.hasOwnProperty.call(obj, key)) { | |
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; | |
if (desc && (desc.get || desc.set)) { | |
Object.defineProperty(newObj, key, desc); | |
} else { | |
newObj[key] = obj[key]; | |
} | |
} | |
} | |
newObj.default = obj; | |
if (cache) { | |
cache.set(obj, newObj); | |
} | |
return newObj; | |
} | |
function _getRequireWildcardCache() { | |
if (typeof WeakMap !== "function") return null; | |
var cache = new WeakMap(); | |
_getRequireWildcardCache = function() { | |
return cache; | |
}; | |
return cache; | |
} | |
},{}],51:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _isNativeFunction; | |
function _isNativeFunction(fn) { | |
return Function.toString.call(fn).indexOf("[native code]") !== -1; | |
} | |
},{}],52:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _isNativeReflectConstruct; | |
function _isNativeReflectConstruct() { | |
if (typeof Reflect === "undefined" || !Reflect.construct) return false; | |
if (Reflect.construct.sham) return false; | |
if (typeof Proxy === "function") return true; | |
try { | |
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {})); | |
return true; | |
} catch (e) { | |
return false; | |
} | |
} | |
},{}],53:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _iterableToArray; | |
function _iterableToArray(iter) { | |
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); | |
} | |
},{}],54:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _iterableToArrayLimit; | |
function _iterableToArrayLimit(arr, i) { | |
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; | |
if (_i == null) return; | |
var _arr = []; | |
var _n = true; | |
var _d = false; | |
var _s, _e; | |
try { | |
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){ | |
_arr.push(_s.value); | |
if (i && _arr.length === i) break; | |
} | |
} catch (err) { | |
_d = true; | |
_e = err; | |
} finally{ | |
try { | |
if (!_n && _i["return"] != null) _i["return"](); | |
} finally{ | |
if (_d) throw _e; | |
} | |
} | |
return _arr; | |
} | |
},{}],55:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _iterableToArrayLimitLoose; | |
function _iterableToArrayLimitLoose(arr, i) { | |
var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); | |
if (_i == null) return; | |
var _arr = []; | |
for(_i = _i.call(arr), _step; !(_step = _i.next()).done;){ | |
_arr.push(_step.value); | |
if (i && _arr.length === i) break; | |
} | |
return _arr; | |
} | |
},{}],56:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _createRawReactElement; | |
function _createRawReactElement(type, props, key, children) { | |
if (!REACT_ELEMENT_TYPE) { | |
REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7; | |
} | |
var defaultProps = type && type.defaultProps; | |
var childrenLength = arguments.length - 3; | |
if (!props && childrenLength !== 0) { | |
props = { | |
children: void 0 | |
}; | |
} | |
if (props && defaultProps) { | |
for(var propName in defaultProps){ | |
if (props[propName] === void 0) { | |
props[propName] = defaultProps[propName]; | |
} | |
} | |
} else if (!props) { | |
props = defaultProps || {}; | |
} | |
if (childrenLength === 1) { | |
props.children = children; | |
} else if (childrenLength > 1) { | |
var childArray = new Array(childrenLength); | |
for(var i = 0; i < childrenLength; i++){ | |
childArray[i] = arguments[i + 3]; | |
} | |
props.children = childArray; | |
} | |
return { | |
$$typeof: REACT_ELEMENT_TYPE, | |
type: type, | |
key: key === undefined ? null : '' + key, | |
ref: null, | |
props: props, | |
_owner: null | |
}; | |
} | |
var REACT_ELEMENT_TYPE; | |
},{}],57:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _newArrowCheck; | |
function _newArrowCheck(innerThis, boundThis) { | |
if (innerThis !== boundThis) { | |
throw new TypeError("Cannot instantiate an arrow function"); | |
} | |
} | |
},{}],58:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _nonIterableRest; | |
function _nonIterableRest() { | |
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); | |
} | |
},{}],59:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _nonIterableSpread; | |
function _nonIterableSpread() { | |
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); | |
} | |
},{}],60:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _objectSpread; | |
var _defineProperty = _interopRequireDefault(require("./_define_property")); | |
function _objectSpread(target) { | |
for(var i = 1; i < arguments.length; i++){ | |
var source = arguments[i] != null ? arguments[i] : {}; | |
var ownKeys = Object.keys(source); | |
if (typeof Object.getOwnPropertySymbols === 'function') { | |
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) { | |
return Object.getOwnPropertyDescriptor(source, sym).enumerable; | |
})); | |
} | |
ownKeys.forEach(function(key) { | |
(0, _defineProperty).default(target, key, source[key]); | |
}); | |
} | |
return target; | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_define_property":40}],61:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _objectSpreadProps; | |
function _objectSpreadProps(target, source) { | |
source = source != null ? source : {}; | |
if (Object.getOwnPropertyDescriptors) { | |
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); | |
} else { | |
ownKeys(Object(source)).forEach(function(key) { | |
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); | |
}); | |
} | |
return target; | |
} | |
function ownKeys(object, enumerableOnly) { | |
var keys = Object.keys(object); | |
if (Object.getOwnPropertySymbols) { | |
var symbols = Object.getOwnPropertySymbols(object); | |
if (enumerableOnly) { | |
symbols = symbols.filter(function(sym) { | |
return Object.getOwnPropertyDescriptor(object, sym).enumerable; | |
}); | |
} | |
keys.push.apply(keys, symbols); | |
} | |
return keys; | |
} | |
},{}],62:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _objectWithoutProperties; | |
var _objectWithoutPropertiesLoose = _interopRequireDefault(require("./_object_without_properties_loose")); | |
function _objectWithoutProperties(source, excluded) { | |
if (source == null) return {}; | |
var target = (0, _objectWithoutPropertiesLoose).default(source, excluded); | |
var key, i; | |
if (Object.getOwnPropertySymbols) { | |
var sourceSymbolKeys = Object.getOwnPropertySymbols(source); | |
for(i = 0; i < sourceSymbolKeys.length; i++){ | |
key = sourceSymbolKeys[i]; | |
if (excluded.indexOf(key) >= 0) continue; | |
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; | |
target[key] = source[key]; | |
} | |
} | |
return target; | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_object_without_properties_loose":63}],63:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _objectWithoutPropertiesLoose; | |
function _objectWithoutPropertiesLoose(source, excluded) { | |
if (source == null) return {}; | |
var target = {}; | |
var sourceKeys = Object.keys(source); | |
var key, i; | |
for(i = 0; i < sourceKeys.length; i++){ | |
key = sourceKeys[i]; | |
if (excluded.indexOf(key) >= 0) continue; | |
target[key] = source[key]; | |
} | |
return target; | |
} | |
},{}],64:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _possibleConstructorReturn; | |
var _assertThisInitialized = _interopRequireDefault(require("./_assert_this_initialized")); | |
var _typeOf = _interopRequireDefault(require("./_type_of")); | |
function _possibleConstructorReturn(self, call) { | |
if (call && ((0, _typeOf).default(call) === "object" || typeof call === "function")) { | |
return call; | |
} | |
return (0, _assertThisInitialized).default(self); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_assert_this_initialized":6,"./_type_of":79}],65:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _readOnlyError; | |
function _readOnlyError(name) { | |
throw new Error("\"" + name + "\" is read-only"); | |
} | |
},{}],66:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _set; | |
var _defineProperty = _interopRequireDefault(require("./_define_property")); | |
var _superPropBase = _interopRequireDefault(require("./_super_prop_base")); | |
function _set(target, property, value, receiver, isStrict) { | |
var s = set(target, property, value, receiver || target); | |
if (!s && isStrict) { | |
throw new Error('failed to set property'); | |
} | |
return value; | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
function set(target1, property1, value1, receiver1) { | |
if (typeof Reflect !== "undefined" && Reflect.set) { | |
set = Reflect.set; | |
} else { | |
set = function set(target, property, value, receiver) { | |
var base = (0, _superPropBase).default(target, property); | |
var desc; | |
if (base) { | |
desc = Object.getOwnPropertyDescriptor(base, property); | |
if (desc.set) { | |
desc.set.call(receiver, value); | |
return true; | |
} else if (!desc.writable) { | |
return false; | |
} | |
} | |
desc = Object.getOwnPropertyDescriptor(receiver, property); | |
if (desc) { | |
if (!desc.writable) { | |
return false; | |
} | |
desc.value = value; | |
Object.defineProperty(receiver, property, desc); | |
} else { | |
(0, _defineProperty).default(receiver, property, value); | |
} | |
return true; | |
}; | |
} | |
return set(target1, property1, value1, receiver1); | |
} | |
},{"./_define_property":40,"./_super_prop_base":71}],67:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _setPrototypeOf; | |
function _setPrototypeOf(o, p) { | |
return setPrototypeOf(o, p); | |
} | |
function setPrototypeOf(o1, p1) { | |
setPrototypeOf = Object.setPrototypeOf || function setPrototypeOf(o, p) { | |
o.__proto__ = p; | |
return o; | |
}; | |
return setPrototypeOf(o1, p1); | |
} | |
},{}],68:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _skipFirstGeneratorNext; | |
function _skipFirstGeneratorNext(fn) { | |
return function() { | |
var it = fn.apply(this, arguments); | |
it.next(); | |
return it; | |
}; | |
} | |
},{}],69:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _slicedToArray; | |
var _arrayWithHoles = _interopRequireDefault(require("./_array_with_holes")); | |
var _iterableToArray = _interopRequireDefault(require("./_iterable_to_array")); | |
var _nonIterableRest = _interopRequireDefault(require("./_non_iterable_rest")); | |
var _unsupportedIterableToArray = _interopRequireDefault(require("./_unsupported_iterable_to_array")); | |
function _slicedToArray(arr, i) { | |
return (0, _arrayWithHoles).default(arr) || (0, _iterableToArray).default(arr, i) || (0, _unsupportedIterableToArray).default(arr, i) || (0, _nonIterableRest).default(); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_array_with_holes":4,"./_iterable_to_array":53,"./_non_iterable_rest":58,"./_unsupported_iterable_to_array":80}],70:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _slicedToArrayLoose; | |
var _arrayWithHoles = _interopRequireDefault(require("./_array_with_holes")); | |
var _iterableToArrayLimitLoose = _interopRequireDefault(require("./_iterable_to_array_limit_loose")); | |
var _nonIterableRest = _interopRequireDefault(require("./_non_iterable_rest")); | |
var _unsupportedIterableToArray = _interopRequireDefault(require("./_unsupported_iterable_to_array")); | |
function _slicedToArrayLoose(arr, i) { | |
return (0, _arrayWithHoles).default(arr) || (0, _iterableToArrayLimitLoose).default(arr, i) || (0, _unsupportedIterableToArray).default(arr, i) || (0, _nonIterableRest).default(); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_array_with_holes":4,"./_iterable_to_array_limit_loose":55,"./_non_iterable_rest":58,"./_unsupported_iterable_to_array":80}],71:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _superPropBase; | |
var _getPrototypeOf = _interopRequireDefault(require("./_get_prototype_of")); | |
function _superPropBase(object, property) { | |
while(!Object.prototype.hasOwnProperty.call(object, property)){ | |
object = (0, _getPrototypeOf).default(object); | |
if (object === null) break; | |
} | |
return object; | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_get_prototype_of":43}],72:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _taggedTemplateLiteral; | |
function _taggedTemplateLiteral(strings, raw) { | |
if (!raw) { | |
raw = strings.slice(0); | |
} | |
return Object.freeze(Object.defineProperties(strings, { | |
raw: { | |
value: Object.freeze(raw) | |
} | |
})); | |
} | |
},{}],73:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _taggedTemplateLiteralLoose; | |
function _taggedTemplateLiteralLoose(strings, raw) { | |
if (!raw) { | |
raw = strings.slice(0); | |
} | |
strings.raw = raw; | |
return strings; | |
} | |
},{}],74:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _throw; | |
function _throw(e) { | |
throw e; | |
} | |
},{}],75:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _toArray; | |
var _arrayWithHoles = _interopRequireDefault(require("./_array_with_holes")); | |
var _iterableToArray = _interopRequireDefault(require("./_iterable_to_array")); | |
var _nonIterableRest = _interopRequireDefault(require("./_non_iterable_rest")); | |
var _unsupportedIterableToArray = _interopRequireDefault(require("./_unsupported_iterable_to_array")); | |
function _toArray(arr) { | |
return (0, _arrayWithHoles).default(arr) || (0, _iterableToArray).default(arr) || (0, _unsupportedIterableToArray).default(arr, i) || (0, _nonIterableRest).default(); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_array_with_holes":4,"./_iterable_to_array":53,"./_non_iterable_rest":58,"./_unsupported_iterable_to_array":80}],76:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _toConsumableArray; | |
var _arrayWithoutHoles = _interopRequireDefault(require("./_array_without_holes")); | |
var _iterableToArray = _interopRequireDefault(require("./_iterable_to_array")); | |
var _nonIterableSpread = _interopRequireDefault(require("./_non_iterable_spread")); | |
var _unsupportedIterableToArray = _interopRequireDefault(require("./_unsupported_iterable_to_array")); | |
function _toConsumableArray(arr) { | |
return (0, _arrayWithoutHoles).default(arr) || (0, _iterableToArray).default(arr) || (0, _unsupportedIterableToArray).default(arr) || (0, _nonIterableSpread).default(); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_array_without_holes":5,"./_iterable_to_array":53,"./_non_iterable_spread":59,"./_unsupported_iterable_to_array":80}],77:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _toPrimitive; | |
var _typeOf = _interopRequireDefault(require("./_type_of")); | |
function _toPrimitive(input, hint) { | |
if ((0, _typeOf).default(input) !== "object" || input === null) return input; | |
var prim = input[Symbol.toPrimitive]; | |
if (prim !== undefined) { | |
var res = prim.call(input, hint || "default"); | |
if ((0, _typeOf).default(res) !== "object") return res; | |
throw new TypeError("@@toPrimitive must return a primitive value."); | |
} | |
return (hint === "string" ? String : Number)(input); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_type_of":79}],78:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _toPropertyKey; | |
var _typeOf = _interopRequireDefault(require("./_type_of")); | |
var _toPrimitive = _interopRequireDefault(require("./_to_primitive")); | |
function _toPropertyKey(arg) { | |
var key = (0, _toPrimitive).default(arg, "string"); | |
return (0, _typeOf).default(key) === "symbol" ? key : String(key); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_to_primitive":77,"./_type_of":79}],79:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _typeof; | |
function _typeof(obj) { | |
"@swc/helpers - typeof"; | |
return obj && obj.constructor === Symbol ? "symbol" : typeof obj; | |
} | |
; | |
},{}],80:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _unsupportedIterableToArray; | |
var _arrayLikeToArray = _interopRequireDefault(require("./_array_like_to_array")); | |
function _unsupportedIterableToArray(o, minLen) { | |
if (!o) return; | |
if (typeof o === "string") return (0, _arrayLikeToArray).default(o, minLen); | |
var n = Object.prototype.toString.call(o).slice(8, -1); | |
if (n === "Object" && o.constructor) n = o.constructor.name; | |
if (n === "Map" || n === "Set") return Array.from(n); | |
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return (0, _arrayLikeToArray).default(o, minLen); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_array_like_to_array":3}],81:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _wrapAsyncGenerator; | |
var _asyncGenerator = _interopRequireDefault(require("./_async_generator")); | |
function _wrapAsyncGenerator(fn) { | |
return function() { | |
return new _asyncGenerator.default(fn.apply(this, arguments)); | |
}; | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_async_generator":7}],82:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = _wrapNativeSuper; | |
var _construct = _interopRequireDefault(require("./_construct")); | |
var _isNativeFunction = _interopRequireDefault(require("./_is_native_function")); | |
var _getPrototypeOf = _interopRequireDefault(require("./_get_prototype_of")); | |
var _setPrototypeOf = _interopRequireDefault(require("./_set_prototype_of")); | |
function _wrapNativeSuper(Class) { | |
return wrapNativeSuper(Class); | |
} | |
function _interopRequireDefault(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
function wrapNativeSuper(Class1) { | |
var _cache = typeof Map === "function" ? new Map() : undefined; | |
wrapNativeSuper = function wrapNativeSuper(Class) { | |
if (Class === null || !(0, _isNativeFunction).default(Class)) return Class; | |
if (typeof Class !== "function") { | |
throw new TypeError("Super expression must either be null or a function"); | |
} | |
if (typeof _cache !== "undefined") { | |
if (_cache.has(Class)) return _cache.get(Class); | |
_cache.set(Class, Wrapper); | |
} | |
function Wrapper() { | |
return (0, _construct).default(Class, arguments, (0, _getPrototypeOf).default(this).constructor); | |
} | |
Wrapper.prototype = Object.create(Class.prototype, { | |
constructor: { | |
value: Wrapper, | |
enumerable: false, | |
writable: true, | |
configurable: true | |
} | |
}); | |
return (0, _setPrototypeOf).default(Wrapper, Class); | |
}; | |
return wrapNativeSuper(Class1); | |
} | |
},{"./_construct":34,"./_get_prototype_of":43,"./_is_native_function":51,"./_set_prototype_of":67}],83:[function(require,module,exports){ | |
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
Object.defineProperty(exports, "applyDecoratedDescriptor", { | |
enumerable: true, | |
get: function() { | |
return _applyDecoratedDescriptor.default; | |
} | |
}); | |
Object.defineProperty(exports, "arrayLikeToArray", { | |
enumerable: true, | |
get: function() { | |
return _arrayLikeToArray.default; | |
} | |
}); | |
Object.defineProperty(exports, "arrayWithHoles", { | |
enumerable: true, | |
get: function() { | |
return _arrayWithHoles.default; | |
} | |
}); | |
Object.defineProperty(exports, "arrayWithoutHoles", { | |
enumerable: true, | |
get: function() { | |
return _arrayWithoutHoles.default; | |
} | |
}); | |
Object.defineProperty(exports, "assertThisInitialized", { | |
enumerable: true, | |
get: function() { | |
return _assertThisInitialized.default; | |
} | |
}); | |
Object.defineProperty(exports, "asyncGenerator", { | |
enumerable: true, | |
get: function() { | |
return _asyncGenerator.default; | |
} | |
}); | |
Object.defineProperty(exports, "asyncGeneratorDelegate", { | |
enumerable: true, | |
get: function() { | |
return _asyncGeneratorDelegate.default; | |
} | |
}); | |
Object.defineProperty(exports, "asyncIterator", { | |
enumerable: true, | |
get: function() { | |
return _asyncIterator.default; | |
} | |
}); | |
Object.defineProperty(exports, "asyncToGenerator", { | |
enumerable: true, | |
get: function() { | |
return _asyncToGenerator.default; | |
} | |
}); | |
Object.defineProperty(exports, "awaitAsyncGenerator", { | |
enumerable: true, | |
get: function() { | |
return _awaitAsyncGenerator.default; | |
} | |
}); | |
Object.defineProperty(exports, "awaitValue", { | |
enumerable: true, | |
get: function() { | |
return _awaitValue.default; | |
} | |
}); | |
Object.defineProperty(exports, "checkPrivateRedeclaration", { | |
enumerable: true, | |
get: function() { | |
return _checkPrivateRedeclaration.default; | |
} | |
}); | |
Object.defineProperty(exports, "classApplyDescriptorDestructureSet", { | |
enumerable: true, | |
get: function() { | |
return _classApplyDescriptorDestructure.default; | |
} | |
}); | |
Object.defineProperty(exports, "classApplyDescriptorGet", { | |
enumerable: true, | |
get: function() { | |
return _classApplyDescriptorGet.default; | |
} | |
}); | |
Object.defineProperty(exports, "classApplyDescriptorSet", { | |
enumerable: true, | |
get: function() { | |
return _classApplyDescriptorSet.default; | |
} | |
}); | |
Object.defineProperty(exports, "classCallCheck", { | |
enumerable: true, | |
get: function() { | |
return _classCallCheck.default; | |
} | |
}); | |
Object.defineProperty(exports, "classCheckPrivateStaticFieldDescriptor", { | |
enumerable: true, | |
get: function() { | |
return _classCheckPrivateStaticFieldDescriptor.default; | |
} | |
}); | |
Object.defineProperty(exports, "classCheckPrivateStaticAccess", { | |
enumerable: true, | |
get: function() { | |
return _classCheckPrivateStaticAccess.default; | |
} | |
}); | |
Object.defineProperty(exports, "classNameTDZError", { | |
enumerable: true, | |
get: function() { | |
return _classNameTdzError.default; | |
} | |
}); | |
Object.defineProperty(exports, "classPrivateFieldDestructureSet", { | |
enumerable: true, | |
get: function() { | |
return _classPrivateFieldDestructure.default; | |
} | |
}); | |
Object.defineProperty(exports, "classPrivateFieldGet", { | |
enumerable: true, | |
get: function() { | |
return _classPrivateFieldGet.default; | |
} | |
}); | |
Object.defineProperty(exports, "classPrivateFieldInit", { | |
enumerable: true, | |
get: function() { | |
return _classPrivateFieldInit.default; | |
} | |
}); | |
Object.defineProperty(exports, "classPrivateFieldLooseBase", { | |
enumerable: true, | |
get: function() { | |
return _classPrivateFieldLooseBase.default; | |
} | |
}); | |
Object.defineProperty(exports, "classPrivateFieldLooseKey", { | |
enumerable: true, | |
get: function() { | |
return _classPrivateFieldLooseKey.default; | |
} | |
}); | |
Object.defineProperty(exports, "classPrivateFieldSet", { | |
enumerable: true, | |
get: function() { | |
return _classPrivateFieldSet.default; | |
} | |
}); | |
Object.defineProperty(exports, "classPrivateMethodGet", { | |
enumerable: true, | |
get: function() { | |
return _classPrivateMethodGet.default; | |
} | |
}); | |
Object.defineProperty(exports, "classPrivateMethodInit", { | |
enumerable: true, | |
get: function() { | |
return _classPrivateMethodInit.default; | |
} | |
}); | |
Object.defineProperty(exports, "classPrivateMethodSet", { | |
enumerable: true, | |
get: function() { | |
return _classPrivateMethodSet.default; | |
} | |
}); | |
Object.defineProperty(exports, "classStaticPrivateFieldDestructureSet", { | |
enumerable: true, | |
get: function() { | |
return _classStaticPrivateFieldDestructure.default; | |
} | |
}); | |
Object.defineProperty(exports, "classStaticPrivateFieldSpecGet", { | |
enumerable: true, | |
get: function() { | |
return _classStaticPrivateFieldSpecGet.default; | |
} | |
}); | |
Object.defineProperty(exports, "classStaticPrivateFieldSpecSet", { | |
enumerable: true, | |
get: function() { | |
return _classStaticPrivateFieldSpecSet.default; | |
} | |
}); | |
Object.defineProperty(exports, "construct", { | |
enumerable: true, | |
get: function() { | |
return _construct.default; | |
} | |
}); | |
Object.defineProperty(exports, "createClass", { | |
enumerable: true, | |
get: function() { | |
return _createClass.default; | |
} | |
}); | |
Object.defineProperty(exports, "createSuper", { | |
enumerable: true, | |
get: function() { | |
return _createSuper.default; | |
} | |
}); | |
Object.defineProperty(exports, "decorate", { | |
enumerable: true, | |
get: function() { | |
return _decorate.default; | |
} | |
}); | |
Object.defineProperty(exports, "defaults", { | |
enumerable: true, | |
get: function() { | |
return _defaults.default; | |
} | |
}); | |
Object.defineProperty(exports, "defineEnumerableProperties", { | |
enumerable: true, | |
get: function() { | |
return _defineEnumerableProperties.default; | |
} | |
}); | |
Object.defineProperty(exports, "defineProperty", { | |
enumerable: true, | |
get: function() { | |
return _defineProperty.default; | |
} | |
}); | |
Object.defineProperty(exports, "extends", { | |
enumerable: true, | |
get: function() { | |
return _extends.default; | |
} | |
}); | |
Object.defineProperty(exports, "get", { | |
enumerable: true, | |
get: function() { | |
return _get.default; | |
} | |
}); | |
Object.defineProperty(exports, "getPrototypeOf", { | |
enumerable: true, | |
get: function() { | |
return _getPrototypeOf.default; | |
} | |
}); | |
Object.defineProperty(exports, "inherits", { | |
enumerable: true, | |
get: function() { | |
return _inherits.default; | |
} | |
}); | |
Object.defineProperty(exports, "inheritsLoose", { | |
enumerable: true, | |
get: function() { | |
return _inheritsLoose.default; | |
} | |
}); | |
Object.defineProperty(exports, "initializerDefineProperty", { | |
enumerable: true, | |
get: function() { | |
return _initializerDefineProperty.default; | |
} | |
}); | |
Object.defineProperty(exports, "initializerWarningHelper", { | |
enumerable: true, | |
get: function() { | |
return _initializerWarningHelper.default; | |
} | |
}); | |
Object.defineProperty(exports, "_instanceof", { | |
enumerable: true, | |
get: function() { | |
return _instanceof.default; | |
} | |
}); | |
Object.defineProperty(exports, "interopRequireDefault", { | |
enumerable: true, | |
get: function() { | |
return _interopRequireDefault.default; | |
} | |
}); | |
Object.defineProperty(exports, "interopRequireWildcard", { | |
enumerable: true, | |
get: function() { | |
return _interopRequireWildcard.default; | |
} | |
}); | |
Object.defineProperty(exports, "isNativeFunction", { | |
enumerable: true, | |
get: function() { | |
return _isNativeFunction.default; | |
} | |
}); | |
Object.defineProperty(exports, "isNativeReflectConstruct", { | |
enumerable: true, | |
get: function() { | |
return _isNativeReflectConstruct.default; | |
} | |
}); | |
Object.defineProperty(exports, "iterableToArray", { | |
enumerable: true, | |
get: function() { | |
return _iterableToArray.default; | |
} | |
}); | |
Object.defineProperty(exports, "iterableToArrayLimit", { | |
enumerable: true, | |
get: function() { | |
return _iterableToArrayLimit.default; | |
} | |
}); | |
Object.defineProperty(exports, "iterableToArrayLimitLoose", { | |
enumerable: true, | |
get: function() { | |
return _iterableToArrayLimitLoose.default; | |
} | |
}); | |
Object.defineProperty(exports, "jsx", { | |
enumerable: true, | |
get: function() { | |
return _jsx.default; | |
} | |
}); | |
Object.defineProperty(exports, "newArrowCheck", { | |
enumerable: true, | |
get: function() { | |
return _newArrowCheck.default; | |
} | |
}); | |
Object.defineProperty(exports, "nonIterableRest", { | |
enumerable: true, | |
get: function() { | |
return _nonIterableRest.default; | |
} | |
}); | |
Object.defineProperty(exports, "nonIterableSpread", { | |
enumerable: true, | |
get: function() { | |
return _nonIterableSpread.default; | |
} | |
}); | |
Object.defineProperty(exports, "objectSpread", { | |
enumerable: true, | |
get: function() { | |
return _objectSpread.default; | |
} | |
}); | |
Object.defineProperty(exports, "objectSpreadProps", { | |
enumerable: true, | |
get: function() { | |
return _objectSpreadProps.default; | |
} | |
}); | |
Object.defineProperty(exports, "objectWithoutProperties", { | |
enumerable: true, | |
get: function() { | |
return _objectWithoutProperties.default; | |
} | |
}); | |
Object.defineProperty(exports, "objectWithoutPropertiesLoose", { | |
enumerable: true, | |
get: function() { | |
return _objectWithoutPropertiesLoose.default; | |
} | |
}); | |
Object.defineProperty(exports, "possibleConstructorReturn", { | |
enumerable: true, | |
get: function() { | |
return _possibleConstructorReturn.default; | |
} | |
}); | |
Object.defineProperty(exports, "readOnlyError", { | |
enumerable: true, | |
get: function() { | |
return _readOnlyError.default; | |
} | |
}); | |
Object.defineProperty(exports, "set", { | |
enumerable: true, | |
get: function() { | |
return _set.default; | |
} | |
}); | |
Object.defineProperty(exports, "setPrototypeOf", { | |
enumerable: true, | |
get: function() { | |
return _setPrototypeOf.default; | |
} | |
}); | |
Object.defineProperty(exports, "skipFirstGeneratorNext", { | |
enumerable: true, | |
get: function() { | |
return _skipFirstGeneratorNext.default; | |
} | |
}); | |
Object.defineProperty(exports, "slicedToArray", { | |
enumerable: true, | |
get: function() { | |
return _slicedToArray.default; | |
} | |
}); | |
Object.defineProperty(exports, "slicedToArrayLoose", { | |
enumerable: true, | |
get: function() { | |
return _slicedToArrayLoose.default; | |
} | |
}); | |
Object.defineProperty(exports, "superPropBase", { | |
enumerable: true, | |
get: function() { | |
return _superPropBase.default; | |
} | |
}); | |
Object.defineProperty(exports, "taggedTemplateLiteral", { | |
enumerable: true, | |
get: function() { | |
return _taggedTemplateLiteral.default; | |
} | |
}); | |
Object.defineProperty(exports, "taggedTemplateLiteralLoose", { | |
enumerable: true, | |
get: function() { | |
return _taggedTemplateLiteralLoose.default; | |
} | |
}); | |
Object.defineProperty(exports, "_throw", { | |
enumerable: true, | |
get: function() { | |
return _throw.default; | |
} | |
}); | |
Object.defineProperty(exports, "toArray", { | |
enumerable: true, | |
get: function() { | |
return _toArray.default; | |
} | |
}); | |
Object.defineProperty(exports, "toConsumableArray", { | |
enumerable: true, | |
get: function() { | |
return _toConsumableArray.default; | |
} | |
}); | |
Object.defineProperty(exports, "toPrimitive", { | |
enumerable: true, | |
get: function() { | |
return _toPrimitive.default; | |
} | |
}); | |
Object.defineProperty(exports, "toPropertyKey", { | |
enumerable: true, | |
get: function() { | |
return _toPropertyKey.default; | |
} | |
}); | |
Object.defineProperty(exports, "typeOf", { | |
enumerable: true, | |
get: function() { | |
return _typeOf.default; | |
} | |
}); | |
Object.defineProperty(exports, "unsupportedIterableToArray", { | |
enumerable: true, | |
get: function() { | |
return _unsupportedIterableToArray.default; | |
} | |
}); | |
Object.defineProperty(exports, "wrapAsyncGenerator", { | |
enumerable: true, | |
get: function() { | |
return _wrapAsyncGenerator.default; | |
} | |
}); | |
Object.defineProperty(exports, "wrapNativeSuper", { | |
enumerable: true, | |
get: function() { | |
return _wrapNativeSuper.default; | |
} | |
}); | |
Object.defineProperty(exports, "__decorate", { | |
enumerable: true, | |
get: function() { | |
return _tslib.__decorate; | |
} | |
}); | |
Object.defineProperty(exports, "__metadata", { | |
enumerable: true, | |
get: function() { | |
return _tslib.__metadata; | |
} | |
}); | |
Object.defineProperty(exports, "__param", { | |
enumerable: true, | |
get: function() { | |
return _tslib.__param; | |
} | |
}); | |
var _applyDecoratedDescriptor = _interopRequireDefault1(require("./_apply_decorated_descriptor")); | |
var _arrayLikeToArray = _interopRequireDefault1(require("./_array_like_to_array")); | |
var _arrayWithHoles = _interopRequireDefault1(require("./_array_with_holes")); | |
var _arrayWithoutHoles = _interopRequireDefault1(require("./_array_without_holes")); | |
var _assertThisInitialized = _interopRequireDefault1(require("./_assert_this_initialized")); | |
var _asyncGenerator = _interopRequireDefault1(require("./_async_generator")); | |
var _asyncGeneratorDelegate = _interopRequireDefault1(require("./_async_generator_delegate")); | |
var _asyncIterator = _interopRequireDefault1(require("./_async_iterator")); | |
var _asyncToGenerator = _interopRequireDefault1(require("./_async_to_generator")); | |
var _awaitAsyncGenerator = _interopRequireDefault1(require("./_await_async_generator")); | |
var _awaitValue = _interopRequireDefault1(require("./_await_value")); | |
var _checkPrivateRedeclaration = _interopRequireDefault1(require("./_check_private_redeclaration")); | |
var _classApplyDescriptorDestructure = _interopRequireDefault1(require("./_class_apply_descriptor_destructure")); | |
var _classApplyDescriptorGet = _interopRequireDefault1(require("./_class_apply_descriptor_get")); | |
var _classApplyDescriptorSet = _interopRequireDefault1(require("./_class_apply_descriptor_set")); | |
var _classCallCheck = _interopRequireDefault1(require("./_class_call_check")); | |
var _classCheckPrivateStaticFieldDescriptor = _interopRequireDefault1(require("./_class_check_private_static_field_descriptor")); | |
var _classCheckPrivateStaticAccess = _interopRequireDefault1(require("./_class_check_private_static_access")); | |
var _classNameTdzError = _interopRequireDefault1(require("./_class_name_tdz_error")); | |
var _classPrivateFieldDestructure = _interopRequireDefault1(require("./_class_private_field_destructure")); | |
var _classPrivateFieldGet = _interopRequireDefault1(require("./_class_private_field_get")); | |
var _classPrivateFieldInit = _interopRequireDefault1(require("./_class_private_field_init")); | |
var _classPrivateFieldLooseBase = _interopRequireDefault1(require("./_class_private_field_loose_base")); | |
var _classPrivateFieldLooseKey = _interopRequireDefault1(require("./_class_private_field_loose_key")); | |
var _classPrivateFieldSet = _interopRequireDefault1(require("./_class_private_field_set")); | |
var _classPrivateMethodGet = _interopRequireDefault1(require("./_class_private_method_get")); | |
var _classPrivateMethodInit = _interopRequireDefault1(require("./_class_private_method_init")); | |
var _classPrivateMethodSet = _interopRequireDefault1(require("./_class_private_method_set")); | |
var _classStaticPrivateFieldDestructure = _interopRequireDefault1(require("./_class_static_private_field_destructure")); | |
var _classStaticPrivateFieldSpecGet = _interopRequireDefault1(require("./_class_static_private_field_spec_get")); | |
var _classStaticPrivateFieldSpecSet = _interopRequireDefault1(require("./_class_static_private_field_spec_set")); | |
var _construct = _interopRequireDefault1(require("./_construct")); | |
var _createClass = _interopRequireDefault1(require("./_create_class")); | |
var _createSuper = _interopRequireDefault1(require("./_create_super")); | |
var _decorate = _interopRequireDefault1(require("./_decorate")); | |
var _defaults = _interopRequireDefault1(require("./_defaults")); | |
var _defineEnumerableProperties = _interopRequireDefault1(require("./_define_enumerable_properties")); | |
var _defineProperty = _interopRequireDefault1(require("./_define_property")); | |
var _extends = _interopRequireDefault1(require("./_extends")); | |
var _get = _interopRequireDefault1(require("./_get")); | |
var _getPrototypeOf = _interopRequireDefault1(require("./_get_prototype_of")); | |
var _inherits = _interopRequireDefault1(require("./_inherits")); | |
var _inheritsLoose = _interopRequireDefault1(require("./_inherits_loose")); | |
var _initializerDefineProperty = _interopRequireDefault1(require("./_initializer_define_property")); | |
var _initializerWarningHelper = _interopRequireDefault1(require("./_initializer_warning_helper")); | |
var _instanceof = _interopRequireDefault1(require("./_instanceof")); | |
var _interopRequireDefault = _interopRequireDefault1(require("./_interop_require_default")); | |
var _interopRequireWildcard = _interopRequireDefault1(require("./_interop_require_wildcard")); | |
var _isNativeFunction = _interopRequireDefault1(require("./_is_native_function")); | |
var _isNativeReflectConstruct = _interopRequireDefault1(require("./_is_native_reflect_construct")); | |
var _iterableToArray = _interopRequireDefault1(require("./_iterable_to_array")); | |
var _iterableToArrayLimit = _interopRequireDefault1(require("./_iterable_to_array_limit")); | |
var _iterableToArrayLimitLoose = _interopRequireDefault1(require("./_iterable_to_array_limit_loose")); | |
var _jsx = _interopRequireDefault1(require("./_jsx")); | |
var _newArrowCheck = _interopRequireDefault1(require("./_new_arrow_check")); | |
var _nonIterableRest = _interopRequireDefault1(require("./_non_iterable_rest")); | |
var _nonIterableSpread = _interopRequireDefault1(require("./_non_iterable_spread")); | |
var _objectSpread = _interopRequireDefault1(require("./_object_spread")); | |
var _objectSpreadProps = _interopRequireDefault1(require("./_object_spread_props")); | |
var _objectWithoutProperties = _interopRequireDefault1(require("./_object_without_properties")); | |
var _objectWithoutPropertiesLoose = _interopRequireDefault1(require("./_object_without_properties_loose")); | |
var _possibleConstructorReturn = _interopRequireDefault1(require("./_possible_constructor_return")); | |
var _readOnlyError = _interopRequireDefault1(require("./_read_only_error")); | |
var _set = _interopRequireDefault1(require("./_set")); | |
var _setPrototypeOf = _interopRequireDefault1(require("./_set_prototype_of")); | |
var _skipFirstGeneratorNext = _interopRequireDefault1(require("./_skip_first_generator_next")); | |
var _slicedToArray = _interopRequireDefault1(require("./_sliced_to_array")); | |
var _slicedToArrayLoose = _interopRequireDefault1(require("./_sliced_to_array_loose")); | |
var _superPropBase = _interopRequireDefault1(require("./_super_prop_base")); | |
var _taggedTemplateLiteral = _interopRequireDefault1(require("./_tagged_template_literal")); | |
var _taggedTemplateLiteralLoose = _interopRequireDefault1(require("./_tagged_template_literal_loose")); | |
var _throw = _interopRequireDefault1(require("./_throw")); | |
var _toArray = _interopRequireDefault1(require("./_to_array")); | |
var _toConsumableArray = _interopRequireDefault1(require("./_to_consumable_array")); | |
var _toPrimitive = _interopRequireDefault1(require("./_to_primitive")); | |
var _toPropertyKey = _interopRequireDefault1(require("./_to_property_key")); | |
var _typeOf = _interopRequireDefault1(require("./_type_of")); | |
var _unsupportedIterableToArray = _interopRequireDefault1(require("./_unsupported_iterable_to_array")); | |
var _wrapAsyncGenerator = _interopRequireDefault1(require("./_wrap_async_generator")); | |
var _wrapNativeSuper = _interopRequireDefault1(require("./_wrap_native_super")); | |
var _tslib = require("tslib"); | |
function _interopRequireDefault1(obj) { | |
return obj && obj.__esModule ? obj : { | |
default: obj | |
}; | |
} | |
},{"./_apply_decorated_descriptor":2,"./_array_like_to_array":3,"./_array_with_holes":4,"./_array_without_holes":5,"./_assert_this_initialized":6,"./_async_generator":7,"./_async_generator_delegate":8,"./_async_iterator":9,"./_async_to_generator":10,"./_await_async_generator":11,"./_await_value":12,"./_check_private_redeclaration":13,"./_class_apply_descriptor_destructure":14,"./_class_apply_descriptor_get":15,"./_class_apply_descriptor_set":16,"./_class_call_check":17,"./_class_check_private_static_access":18,"./_class_check_private_static_field_descriptor":19,"./_class_name_tdz_error":21,"./_class_private_field_destructure":22,"./_class_private_field_get":23,"./_class_private_field_init":24,"./_class_private_field_loose_base":25,"./_class_private_field_loose_key":26,"./_class_private_field_set":27,"./_class_private_method_get":28,"./_class_private_method_init":29,"./_class_private_method_set":30,"./_class_static_private_field_destructure":31,"./_class_static_private_field_spec_get":32,"./_class_static_private_field_spec_set":33,"./_construct":34,"./_create_class":35,"./_create_super":36,"./_decorate":37,"./_defaults":38,"./_define_enumerable_properties":39,"./_define_property":40,"./_extends":41,"./_get":42,"./_get_prototype_of":43,"./_inherits":44,"./_inherits_loose":45,"./_initializer_define_property":46,"./_initializer_warning_helper":47,"./_instanceof":48,"./_interop_require_default":49,"./_interop_require_wildcard":50,"./_is_native_function":51,"./_is_native_reflect_construct":52,"./_iterable_to_array":53,"./_iterable_to_array_limit":54,"./_iterable_to_array_limit_loose":55,"./_jsx":56,"./_new_arrow_check":57,"./_non_iterable_rest":58,"./_non_iterable_spread":59,"./_object_spread":60,"./_object_spread_props":61,"./_object_without_properties":62,"./_object_without_properties_loose":63,"./_possible_constructor_return":64,"./_read_only_error":65,"./_set":66,"./_set_prototype_of":67,"./_skip_first_generator_next":68,"./_sliced_to_array":69,"./_sliced_to_array_loose":70,"./_super_prop_base":71,"./_tagged_template_literal":72,"./_tagged_template_literal_loose":73,"./_throw":74,"./_to_array":75,"./_to_consumable_array":76,"./_to_primitive":77,"./_to_property_key":78,"./_type_of":79,"./_unsupported_iterable_to_array":80,"./_wrap_async_generator":81,"./_wrap_native_super":82,"tslib":84}],84:[function(require,module,exports){ | |
(function (global){(function (){ | |
/****************************************************************************** | |
Copyright (c) Microsoft Corporation. | |
Permission to use, copy, modify, and/or distribute this software for any | |
purpose with or without fee is hereby granted. | |
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH | |
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY | |
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, | |
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM | |
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR | |
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR | |
PERFORMANCE OF THIS SOFTWARE. | |
***************************************************************************** */ | |
/* global global, define, Symbol, Reflect, Promise, SuppressedError */ | |
var __extends; | |
var __assign; | |
var __rest; | |
var __decorate; | |
var __param; | |
var __esDecorate; | |
var __runInitializers; | |
var __propKey; | |
var __setFunctionName; | |
var __metadata; | |
var __awaiter; | |
var __generator; | |
var __exportStar; | |
var __values; | |
var __read; | |
var __spread; | |
var __spreadArrays; | |
var __spreadArray; | |
var __await; | |
var __asyncGenerator; | |
var __asyncDelegator; | |
var __asyncValues; | |
var __makeTemplateObject; | |
var __importStar; | |
var __importDefault; | |
var __classPrivateFieldGet; | |
var __classPrivateFieldSet; | |
var __classPrivateFieldIn; | |
var __createBinding; | |
var __addDisposableResource; | |
var __disposeResources; | |
(function (factory) { | |
var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; | |
if (typeof define === "function" && define.amd) { | |
define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); }); | |
} | |
else if (typeof module === "object" && typeof module.exports === "object") { | |
factory(createExporter(root, createExporter(module.exports))); | |
} | |
else { | |
factory(createExporter(root)); | |
} | |
function createExporter(exports, previous) { | |
if (exports !== root) { | |
if (typeof Object.create === "function") { | |
Object.defineProperty(exports, "__esModule", { value: true }); | |
} | |
else { | |
exports.__esModule = true; | |
} | |
} | |
return function (id, v) { return exports[id] = previous ? previous(id, v) : v; }; | |
} | |
}) | |
(function (exporter) { | |
var extendStatics = Object.setPrototypeOf || | |
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || | |
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; | |
__extends = function (d, b) { | |
if (typeof b !== "function" && b !== null) | |
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); | |
extendStatics(d, b); | |
function __() { this.constructor = d; } | |
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | |
}; | |
__assign = Object.assign || function (t) { | |
for (var s, i = 1, n = arguments.length; i < n; i++) { | |
s = arguments[i]; | |
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; | |
} | |
return t; | |
}; | |
__rest = function (s, e) { | |
var t = {}; | |
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) | |
t[p] = s[p]; | |
if (s != null && typeof Object.getOwnPropertySymbols === "function") | |
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { | |
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) | |
t[p[i]] = s[p[i]]; | |
} | |
return t; | |
}; | |
__decorate = function (decorators, target, key, desc) { | |
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; | |
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); | |
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; | |
return c > 3 && r && Object.defineProperty(target, key, r), r; | |
}; | |
__param = function (paramIndex, decorator) { | |
return function (target, key) { decorator(target, key, paramIndex); } | |
}; | |
__esDecorate = function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { | |
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } | |
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; | |
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; | |
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); | |
var _, done = false; | |
for (var i = decorators.length - 1; i >= 0; i--) { | |
var context = {}; | |
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; | |
for (var p in contextIn.access) context.access[p] = contextIn.access[p]; | |
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; | |
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); | |
if (kind === "accessor") { | |
if (result === void 0) continue; | |
if (result === null || typeof result !== "object") throw new TypeError("Object expected"); | |
if (_ = accept(result.get)) descriptor.get = _; | |
if (_ = accept(result.set)) descriptor.set = _; | |
if (_ = accept(result.init)) initializers.unshift(_); | |
} | |
else if (_ = accept(result)) { | |
if (kind === "field") initializers.unshift(_); | |
else descriptor[key] = _; | |
} | |
} | |
if (target) Object.defineProperty(target, contextIn.name, descriptor); | |
done = true; | |
}; | |
__runInitializers = function (thisArg, initializers, value) { | |
var useValue = arguments.length > 2; | |
for (var i = 0; i < initializers.length; i++) { | |
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); | |
} | |
return useValue ? value : void 0; | |
}; | |
__propKey = function (x) { | |
return typeof x === "symbol" ? x : "".concat(x); | |
}; | |
__setFunctionName = function (f, name, prefix) { | |
if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; | |
return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); | |
}; | |
__metadata = function (metadataKey, metadataValue) { | |
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); | |
}; | |
__awaiter = function (thisArg, _arguments, P, generator) { | |
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | |
return new (P || (P = Promise))(function (resolve, reject) { | |
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | |
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | |
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | |
step((generator = generator.apply(thisArg, _arguments || [])).next()); | |
}); | |
}; | |
__generator = function (thisArg, body) { | |
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; | |
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; | |
function verb(n) { return function (v) { return step([n, v]); }; } | |
function step(op) { | |
if (f) throw new TypeError("Generator is already executing."); | |
while (g && (g = 0, op[0] && (_ = 0)), _) try { | |
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; | |
if (y = 0, t) op = [op[0] & 2, t.value]; | |
switch (op[0]) { | |
case 0: case 1: t = op; break; | |
case 4: _.label++; return { value: op[1], done: false }; | |
case 5: _.label++; y = op[1]; op = [0]; continue; | |
case 7: op = _.ops.pop(); _.trys.pop(); continue; | |
default: | |
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } | |
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } | |
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } | |
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } | |
if (t[2]) _.ops.pop(); | |
_.trys.pop(); continue; | |
} | |
op = body.call(thisArg, _); | |
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } | |
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; | |
} | |
}; | |
__exportStar = function(m, o) { | |
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); | |
}; | |
__createBinding = Object.create ? (function(o, m, k, k2) { | |
if (k2 === undefined) k2 = k; | |
var desc = Object.getOwnPropertyDescriptor(m, k); | |
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | |
desc = { enumerable: true, get: function() { return m[k]; } }; | |
} | |
Object.defineProperty(o, k2, desc); | |
}) : (function(o, m, k, k2) { | |
if (k2 === undefined) k2 = k; | |
o[k2] = m[k]; | |
}); | |
__values = function (o) { | |
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; | |
if (m) return m.call(o); | |
if (o && typeof o.length === "number") return { | |
next: function () { | |
if (o && i >= o.length) o = void 0; | |
return { value: o && o[i++], done: !o }; | |
} | |
}; | |
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); | |
}; | |
__read = function (o, n) { | |
var m = typeof Symbol === "function" && o[Symbol.iterator]; | |
if (!m) return o; | |
var i = m.call(o), r, ar = [], e; | |
try { | |
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); | |
} | |
catch (error) { e = { error: error }; } | |
finally { | |
try { | |
if (r && !r.done && (m = i["return"])) m.call(i); | |
} | |
finally { if (e) throw e.error; } | |
} | |
return ar; | |
}; | |
/** @deprecated */ | |
__spread = function () { | |
for (var ar = [], i = 0; i < arguments.length; i++) | |
ar = ar.concat(__read(arguments[i])); | |
return ar; | |
}; | |
/** @deprecated */ | |
__spreadArrays = function () { | |
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; | |
for (var r = Array(s), k = 0, i = 0; i < il; i++) | |
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) | |
r[k] = a[j]; | |
return r; | |
}; | |
__spreadArray = function (to, from, pack) { | |
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { | |
if (ar || !(i in from)) { | |
if (!ar) ar = Array.prototype.slice.call(from, 0, i); | |
ar[i] = from[i]; | |
} | |
} | |
return to.concat(ar || Array.prototype.slice.call(from)); | |
}; | |
__await = function (v) { | |
return this instanceof __await ? (this.v = v, this) : new __await(v); | |
}; | |
__asyncGenerator = function (thisArg, _arguments, generator) { | |
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); | |
var g = generator.apply(thisArg, _arguments || []), i, q = []; | |
return i = {}, verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; | |
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } | |
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } | |
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } | |
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } | |
function fulfill(value) { resume("next", value); } | |
function reject(value) { resume("throw", value); } | |
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } | |
}; | |
__asyncDelegator = function (o) { | |
var i, p; | |
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; | |
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } | |
}; | |
__asyncValues = function (o) { | |
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); | |
var m = o[Symbol.asyncIterator], i; | |
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); | |
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } | |
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } | |
}; | |
__makeTemplateObject = function (cooked, raw) { | |
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } | |
return cooked; | |
}; | |
var __setModuleDefault = Object.create ? (function(o, v) { | |
Object.defineProperty(o, "default", { enumerable: true, value: v }); | |
}) : function(o, v) { | |
o["default"] = v; | |
}; | |
__importStar = function (mod) { | |
if (mod && mod.__esModule) return mod; | |
var result = {}; | |
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | |
__setModuleDefault(result, mod); | |
return result; | |
}; | |
__importDefault = function (mod) { | |
return (mod && mod.__esModule) ? mod : { "default": mod }; | |
}; | |
__classPrivateFieldGet = function (receiver, state, kind, f) { | |
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); | |
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); | |
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); | |
}; | |
__classPrivateFieldSet = function (receiver, state, value, kind, f) { | |
if (kind === "m") throw new TypeError("Private method is not writable"); | |
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); | |
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); | |
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; | |
}; | |
__classPrivateFieldIn = function (state, receiver) { | |
if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object"); | |
return typeof state === "function" ? receiver === state : state.has(receiver); | |
}; | |
__addDisposableResource = function (env, value, async) { | |
if (value !== null && value !== void 0) { | |
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); | |
var dispose, inner; | |
if (async) { | |
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); | |
dispose = value[Symbol.asyncDispose]; | |
} | |
if (dispose === void 0) { | |
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); | |
dispose = value[Symbol.dispose]; | |
if (async) inner = dispose; | |
} | |
if (typeof dispose !== "function") throw new TypeError("Object not disposable."); | |
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; | |
env.stack.push({ value: value, dispose: dispose, async: async }); | |
} | |
else if (async) { | |
env.stack.push({ async: true }); | |
} | |
return value; | |
}; | |
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { | |
var e = new Error(message); | |
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; | |
}; | |
__disposeResources = function (env) { | |
function fail(e) { | |
env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; | |
env.hasError = true; | |
} | |
function next() { | |
while (env.stack.length) { | |
var rec = env.stack.pop(); | |
try { | |
var result = rec.dispose && rec.dispose.call(rec.value); | |
if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); | |
} | |
catch (e) { | |
fail(e); | |
} | |
} | |
if (env.hasError) throw env.error; | |
} | |
return next(); | |
}; | |
exporter("__extends", __extends); | |
exporter("__assign", __assign); | |
exporter("__rest", __rest); | |
exporter("__decorate", __decorate); | |
exporter("__param", __param); | |
exporter("__esDecorate", __esDecorate); | |
exporter("__runInitializers", __runInitializers); | |
exporter("__propKey", __propKey); | |
exporter("__setFunctionName", __setFunctionName); | |
exporter("__metadata", __metadata); | |
exporter("__awaiter", __awaiter); | |
exporter("__generator", __generator); | |
exporter("__exportStar", __exportStar); | |
exporter("__createBinding", __createBinding); | |
exporter("__values", __values); | |
exporter("__read", __read); | |
exporter("__spread", __spread); | |
exporter("__spreadArrays", __spreadArrays); | |
exporter("__spreadArray", __spreadArray); | |
exporter("__await", __await); | |
exporter("__asyncGenerator", __asyncGenerator); | |
exporter("__asyncDelegator", __asyncDelegator); | |
exporter("__asyncValues", __asyncValues); | |
exporter("__makeTemplateObject", __makeTemplateObject); | |
exporter("__importStar", __importStar); | |
exporter("__importDefault", __importDefault); | |
exporter("__classPrivateFieldGet", __classPrivateFieldGet); | |
exporter("__classPrivateFieldSet", __classPrivateFieldSet); | |
exporter("__classPrivateFieldIn", __classPrivateFieldIn); | |
exporter("__addDisposableResource", __addDisposableResource); | |
exporter("__disposeResources", __disposeResources); | |
}); | |
}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | |
},{}],85:[function(require,module,exports){ | |
'use strict'; | |
var callBound = require('call-bind/callBound'); | |
var $byteLength = callBound('ArrayBuffer.prototype.byteLength', true); | |
var isArrayBuffer = require('is-array-buffer'); | |
/** @type {import('.')} */ | |
module.exports = function byteLength(ab) { | |
if (!isArrayBuffer(ab)) { | |
return NaN; | |
} | |
return $byteLength ? $byteLength(ab) : ab.byteLength; | |
}; // in node < 0.11, byteLength is an own nonconfigurable property | |
},{"call-bind/callBound":99,"is-array-buffer":189}],86:[function(require,module,exports){ | |
(function (global){(function (){ | |
'use strict'; | |
var possibleNames = require('possible-typed-array-names'); | |
var g = typeof globalThis === 'undefined' ? global : globalThis; | |
/** @type {import('.')} */ | |
module.exports = function availableTypedArrays() { | |
var /** @type {ReturnType<typeof availableTypedArrays>} */ out = []; | |
for (var i = 0; i < possibleNames.length; i++) { | |
if (typeof g[possibleNames[i]] === 'function') { | |
// @ts-expect-error | |
out[out.length] = possibleNames[i]; | |
} | |
} | |
return out; | |
}; | |
}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | |
},{"possible-typed-array-names":223}],87:[function(require,module,exports){ | |
'use strict' | |
exports.byteLength = byteLength | |
exports.toByteArray = toByteArray | |
exports.fromByteArray = fromByteArray | |
var lookup = [] | |
var revLookup = [] | |
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array | |
var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' | |
for (var i = 0, len = code.length; i < len; ++i) { | |
lookup[i] = code[i] | |
revLookup[code.charCodeAt(i)] = i | |
} | |
// Support decoding URL-safe base64 strings, as Node.js does. | |
// See: https://en.wikipedia.org/wiki/Base64#URL_applications | |
revLookup['-'.charCodeAt(0)] = 62 | |
revLookup['_'.charCodeAt(0)] = 63 | |
function getLens (b64) { | |
var len = b64.length | |
if (len % 4 > 0) { | |
throw new Error('Invalid string. Length must be a multiple of 4') | |
} | |
// Trim off extra bytes after placeholder bytes are found | |
// See: https://github.com/beatgammit/base64-js/issues/42 | |
var validLen = b64.indexOf('=') | |
if (validLen === -1) validLen = len | |
var placeHoldersLen = validLen === len | |
? 0 | |
: 4 - (validLen % 4) | |
return [validLen, placeHoldersLen] | |
} | |
// base64 is 4/3 + up to two characters of the original data | |
function byteLength (b64) { | |
var lens = getLens(b64) | |
var validLen = lens[0] | |
var placeHoldersLen = lens[1] | |
return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen | |
} | |
function _byteLength (b64, validLen, placeHoldersLen) { | |
return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen | |
} | |
function toByteArray (b64) { | |
var tmp | |
var lens = getLens(b64) | |
var validLen = lens[0] | |
var placeHoldersLen = lens[1] | |
var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) | |
var curByte = 0 | |
// if there are placeholders, only get up to the last complete 4 chars | |
var len = placeHoldersLen > 0 | |
? validLen - 4 | |
: validLen | |
var i | |
for (i = 0; i < len; i += 4) { | |
tmp = | |
(revLookup[b64.charCodeAt(i)] << 18) | | |
(revLookup[b64.charCodeAt(i + 1)] << 12) | | |
(revLookup[b64.charCodeAt(i + 2)] << 6) | | |
revLookup[b64.charCodeAt(i + 3)] | |
arr[curByte++] = (tmp >> 16) & 0xFF | |
arr[curByte++] = (tmp >> 8) & 0xFF | |
arr[curByte++] = tmp & 0xFF | |
} | |
if (placeHoldersLen === 2) { | |
tmp = | |
(revLookup[b64.charCodeAt(i)] << 2) | | |
(revLookup[b64.charCodeAt(i + 1)] >> 4) | |
arr[curByte++] = tmp & 0xFF | |
} | |
if (placeHoldersLen === 1) { | |
tmp = | |
(revLookup[b64.charCodeAt(i)] << 10) | | |
(revLookup[b64.charCodeAt(i + 1)] << 4) | | |
(revLookup[b64.charCodeAt(i + 2)] >> 2) | |
arr[curByte++] = (tmp >> 8) & 0xFF | |
arr[curByte++] = tmp & 0xFF | |
} | |
return arr | |
} | |
function tripletToBase64 (num) { | |
return lookup[num >> 18 & 0x3F] + | |
lookup[num >> 12 & 0x3F] + | |
lookup[num >> 6 & 0x3F] + | |
lookup[num & 0x3F] | |
} | |
function encodeChunk (uint8, start, end) { | |
var tmp | |
var output = [] | |
for (var i = start; i < end; i += 3) { | |
tmp = | |
((uint8[i] << 16) & 0xFF0000) + | |
((uint8[i + 1] << 8) & 0xFF00) + | |
(uint8[i + 2] & 0xFF) | |
output.push(tripletToBase64(tmp)) | |
} | |
return output.join('') | |
} | |
function fromByteArray (uint8) { | |
var tmp | |
var len = uint8.length | |
var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes | |
var parts = [] | |
var maxChunkLength = 16383 // must be multiple of 3 | |
// go through the array every three bytes, we'll deal with trailing stuff later | |
for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { | |
parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) | |
} | |
// pad the end with zeros, but make sure to not forget the extra bytes | |
if (extraBytes === 1) { | |
tmp = uint8[len - 1] | |
parts.push( | |
lookup[tmp >> 2] + | |
lookup[(tmp << 4) & 0x3F] + | |
'==' | |
) | |
} else if (extraBytes === 2) { | |
tmp = (uint8[len - 2] << 8) + uint8[len - 1] | |
parts.push( | |
lookup[tmp >> 10] + | |
lookup[(tmp >> 4) & 0x3F] + | |
lookup[(tmp << 2) & 0x3F] + | |
'=' | |
) | |
} | |
return parts.join('') | |
} | |
},{}],88:[function(require,module,exports){ | |
/* Copyright 2013 Google Inc. All Rights Reserved. | |
Licensed under the Apache License, Version 2.0 (the "License"); | |
you may not use this file except in compliance with the License. | |
You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, software | |
distributed under the License is distributed on an "AS IS" BASIS, | |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
See the License for the specific language governing permissions and | |
limitations under the License. | |
Bit reading helpers | |
*/ | |
var BROTLI_READ_SIZE = 4096; | |
var BROTLI_IBUF_SIZE = (2 * BROTLI_READ_SIZE + 32); | |
var BROTLI_IBUF_MASK = (2 * BROTLI_READ_SIZE - 1); | |
var kBitMask = new Uint32Array([ | |
0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, | |
65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215 | |
]); | |
/* Input byte buffer, consist of a ringbuffer and a "slack" region where */ | |
/* bytes from the start of the ringbuffer are copied. */ | |
function BrotliBitReader(input) { | |
this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE); | |
this.input_ = input; /* input callback */ | |
this.reset(); | |
} | |
BrotliBitReader.READ_SIZE = BROTLI_READ_SIZE; | |
BrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK; | |
BrotliBitReader.prototype.reset = function() { | |
this.buf_ptr_ = 0; /* next input will write here */ | |
this.val_ = 0; /* pre-fetched bits */ | |
this.pos_ = 0; /* byte position in stream */ | |
this.bit_pos_ = 0; /* current bit-reading position in val_ */ | |
this.bit_end_pos_ = 0; /* bit-reading end position from LSB of val_ */ | |
this.eos_ = 0; /* input stream is finished */ | |
this.readMoreInput(); | |
for (var i = 0; i < 4; i++) { | |
this.val_ |= this.buf_[this.pos_] << (8 * i); | |
++this.pos_; | |
} | |
return this.bit_end_pos_ > 0; | |
}; | |
/* Fills up the input ringbuffer by calling the input callback. | |
Does nothing if there are at least 32 bytes present after current position. | |
Returns 0 if either: | |
- the input callback returned an error, or | |
- there is no more input and the position is past the end of the stream. | |
After encountering the end of the input stream, 32 additional zero bytes are | |
copied to the ringbuffer, therefore it is safe to call this function after | |
every 32 bytes of input is read. | |
*/ | |
BrotliBitReader.prototype.readMoreInput = function() { | |
if (this.bit_end_pos_ > 256) { | |
return; | |
} else if (this.eos_) { | |
if (this.bit_pos_ > this.bit_end_pos_) | |
throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_); | |
} else { | |
var dst = this.buf_ptr_; | |
var bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE); | |
if (bytes_read < 0) { | |
throw new Error('Unexpected end of input'); | |
} | |
if (bytes_read < BROTLI_READ_SIZE) { | |
this.eos_ = 1; | |
/* Store 32 bytes of zero after the stream end. */ | |
for (var p = 0; p < 32; p++) | |
this.buf_[dst + bytes_read + p] = 0; | |
} | |
if (dst === 0) { | |
/* Copy the head of the ringbuffer to the slack region. */ | |
for (var p = 0; p < 32; p++) | |
this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p]; | |
this.buf_ptr_ = BROTLI_READ_SIZE; | |
} else { | |
this.buf_ptr_ = 0; | |
} | |
this.bit_end_pos_ += bytes_read << 3; | |
} | |
}; | |
/* Guarantees that there are at least 24 bits in the buffer. */ | |
BrotliBitReader.prototype.fillBitWindow = function() { | |
while (this.bit_pos_ >= 8) { | |
this.val_ >>>= 8; | |
this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24; | |
++this.pos_; | |
this.bit_pos_ = this.bit_pos_ - 8 >>> 0; | |
this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0; | |
} | |
}; | |
/* Reads the specified number of bits from Read Buffer. */ | |
BrotliBitReader.prototype.readBits = function(n_bits) { | |
if (32 - this.bit_pos_ < n_bits) { | |
this.fillBitWindow(); | |
} | |
var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]); | |
this.bit_pos_ += n_bits; | |
return val; | |
}; | |
module.exports = BrotliBitReader; | |
},{}],89:[function(require,module,exports){ | |
/* Copyright 2013 Google Inc. All Rights Reserved. | |
Licensed under the Apache License, Version 2.0 (the "License"); | |
you may not use this file except in compliance with the License. | |
You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, software | |
distributed under the License is distributed on an "AS IS" BASIS, | |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
See the License for the specific language governing permissions and | |
limitations under the License. | |
Lookup table to map the previous two bytes to a context id. | |
There are four different context modeling modes defined here: | |
CONTEXT_LSB6: context id is the least significant 6 bits of the last byte, | |
CONTEXT_MSB6: context id is the most significant 6 bits of the last byte, | |
CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text, | |
CONTEXT_SIGNED: second-order context model tuned for signed integers. | |
The context id for the UTF8 context model is calculated as follows. If p1 | |
and p2 are the previous two bytes, we calcualte the context as | |
context = kContextLookup[p1] | kContextLookup[p2 + 256]. | |
If the previous two bytes are ASCII characters (i.e. < 128), this will be | |
equivalent to | |
context = 4 * context1(p1) + context2(p2), | |
where context1 is based on the previous byte in the following way: | |
0 : non-ASCII control | |
1 : \t, \n, \r | |
2 : space | |
3 : other punctuation | |
4 : " ' | |
5 : % | |
6 : ( < [ { | |
7 : ) > ] } | |
8 : , ; : | |
9 : . | |
10 : = | |
11 : number | |
12 : upper-case vowel | |
13 : upper-case consonant | |
14 : lower-case vowel | |
15 : lower-case consonant | |
and context2 is based on the second last byte: | |
0 : control, space | |
1 : punctuation | |
2 : upper-case letter, number | |
3 : lower-case letter | |
If the last byte is ASCII, and the second last byte is not (in a valid UTF8 | |
stream it will be a continuation byte, value between 128 and 191), the | |
context is the same as if the second last byte was an ASCII control or space. | |
If the last byte is a UTF8 lead byte (value >= 192), then the next byte will | |
be a continuation byte and the context id is 2 or 3 depending on the LSB of | |
the last byte and to a lesser extent on the second last byte if it is ASCII. | |
If the last byte is a UTF8 continuation byte, the second last byte can be: | |
- continuation byte: the next byte is probably ASCII or lead byte (assuming | |
4-byte UTF8 characters are rare) and the context id is 0 or 1. | |
- lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1 | |
- lead byte (208 - 255): next byte is continuation byte, context is 2 or 3 | |
The possible value combinations of the previous two bytes, the range of | |
context ids and the type of the next byte is summarized in the table below: | |
|--------\-----------------------------------------------------------------| | |
| \ Last byte | | |
| Second \---------------------------------------------------------------| | |
| last byte \ ASCII | cont. byte | lead byte | | |
| \ (0-127) | (128-191) | (192-) | | |
|=============|===================|=====================|==================| | |
| ASCII | next: ASCII/lead | not valid | next: cont. | | |
| (0-127) | context: 4 - 63 | | context: 2 - 3 | | |
|-------------|-------------------|---------------------|------------------| | |
| cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. | | |
| (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 | | |
|-------------|-------------------|---------------------|------------------| | |
| lead byte | not valid | next: ASCII/lead | not valid | | |
| (192-207) | | context: 0 - 1 | | | |
|-------------|-------------------|---------------------|------------------| | |
| lead byte | not valid | next: cont. | not valid | | |
| (208-) | | context: 2 - 3 | | | |
|-------------|-------------------|---------------------|------------------| | |
The context id for the signed context mode is calculated as: | |
context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2]. | |
For any context modeling modes, the context ids can be calculated by |-ing | |
together two lookups from one table using context model dependent offsets: | |
context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2]. | |
where offset1 and offset2 are dependent on the context mode. | |
*/ | |
var CONTEXT_LSB6 = 0; | |
var CONTEXT_MSB6 = 1; | |
var CONTEXT_UTF8 = 2; | |
var CONTEXT_SIGNED = 3; | |
/* Common context lookup table for all context modes. */ | |
exports.lookup = new Uint8Array([ | |
/* CONTEXT_UTF8, last byte. */ | |
/* ASCII range. */ | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, | |
44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12, | |
12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, | |
52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, | |
12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, | |
60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, | |
/* UTF8 continuation byte range. */ | |
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, | |
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, | |
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, | |
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, | |
/* UTF8 lead byte range. */ | |
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, | |
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, | |
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, | |
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, | |
/* CONTEXT_UTF8 second last byte. */ | |
/* ASCII range. */ | |
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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | |
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, | |
1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, | |
1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, | |
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, | |
/* UTF8 continuation byte range. */ | |
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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
/* UTF8 lead byte range. */ | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |
/* CONTEXT_SIGNED, second last byte. */ | |
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | |
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, | |
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, | |
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, | |
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, | |
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, | |
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, | |
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, | |
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, | |
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, | |
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, | |
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, | |
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, | |
/* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ | |
0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, | |
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, | |
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, | |
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, | |
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, | |
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, | |
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, | |
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, | |
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, | |
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, | |
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, | |
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, | |
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, | |
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, | |
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, | |
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, | |
/* CONTEXT_LSB6, last byte. */ | |
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, | |
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, | |
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, | |
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, | |
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, | |
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, | |
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, | |
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, | |
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, | |
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, | |
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, | |
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, | |
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, | |
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, | |
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, | |
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, | |
/* CONTEXT_MSB6, last byte. */ | |
0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, | |
4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, | |
8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, | |
12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, | |
16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, | |
20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, | |
24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, | |
28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, | |
32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, | |
36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, | |
40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, | |
44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, | |
48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, | |
52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, | |
56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, | |
60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, | |
/* CONTEXT_{M,L}SB6, second last byte, */ | |
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, 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, 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, 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, | |
]); | |
exports.lookupOffsets = new Uint16Array([ | |
/* CONTEXT_LSB6 */ | |
1024, 1536, | |
/* CONTEXT_MSB6 */ | |
1280, 1536, | |
/* CONTEXT_UTF8 */ | |
0, 256, | |
/* CONTEXT_SIGNED */ | |
768, 512, | |
]); | |
},{}],90:[function(require,module,exports){ | |
/* Copyright 2013 Google Inc. All Rights Reserved. | |
Licensed under the Apache License, Version 2.0 (the "License"); | |
you may not use this file except in compliance with the License. | |
You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, software | |
distributed under the License is distributed on an "AS IS" BASIS, | |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
See the License for the specific language governing permissions and | |
limitations under the License. | |
*/ | |
var BrotliInput = require('./streams').BrotliInput; | |
var BrotliOutput = require('./streams').BrotliOutput; | |
var BrotliBitReader = require('./bit_reader'); | |
var BrotliDictionary = require('./dictionary'); | |
var HuffmanCode = require('./huffman').HuffmanCode; | |
var BrotliBuildHuffmanTable = require('./huffman').BrotliBuildHuffmanTable; | |
var Context = require('./context'); | |
var Prefix = require('./prefix'); | |
var Transform = require('./transform'); | |
var kDefaultCodeLength = 8; | |
var kCodeLengthRepeatCode = 16; | |
var kNumLiteralCodes = 256; | |
var kNumInsertAndCopyCodes = 704; | |
var kNumBlockLengthCodes = 26; | |
var kLiteralContextBits = 6; | |
var kDistanceContextBits = 2; | |
var HUFFMAN_TABLE_BITS = 8; | |
var HUFFMAN_TABLE_MASK = 0xff; | |
/* Maximum possible Huffman table size for an alphabet size of 704, max code | |
* length 15 and root table bits 8. */ | |
var HUFFMAN_MAX_TABLE_SIZE = 1080; | |
var CODE_LENGTH_CODES = 18; | |
var kCodeLengthCodeOrder = new Uint8Array([ | |
1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15, | |
]); | |
var NUM_DISTANCE_SHORT_CODES = 16; | |
var kDistanceShortCodeIndexOffset = new Uint8Array([ | |
3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 | |
]); | |
var kDistanceShortCodeValueOffset = new Int8Array([ | |
0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3 | |
]); | |
var kMaxHuffmanTableSize = new Uint16Array([ | |
256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, | |
854, 886, 920, 952, 984, 1016, 1048, 1080 | |
]); | |
function DecodeWindowBits(br) { | |
var n; | |
if (br.readBits(1) === 0) { | |
return 16; | |
} | |
n = br.readBits(3); | |
if (n > 0) { | |
return 17 + n; | |
} | |
n = br.readBits(3); | |
if (n > 0) { | |
return 8 + n; | |
} | |
return 17; | |
} | |
/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */ | |
function DecodeVarLenUint8(br) { | |
if (br.readBits(1)) { | |
var nbits = br.readBits(3); | |
if (nbits === 0) { | |
return 1; | |
} else { | |
return br.readBits(nbits) + (1 << nbits); | |
} | |
} | |
return 0; | |
} | |
function MetaBlockLength() { | |
this.meta_block_length = 0; | |
this.input_end = 0; | |
this.is_uncompressed = 0; | |
this.is_metadata = false; | |
} | |
function DecodeMetaBlockLength(br) { | |
var out = new MetaBlockLength; | |
var size_nibbles; | |
var size_bytes; | |
var i; | |
out.input_end = br.readBits(1); | |
if (out.input_end && br.readBits(1)) { | |
return out; | |
} | |
size_nibbles = br.readBits(2) + 4; | |
if (size_nibbles === 7) { | |
out.is_metadata = true; | |
if (br.readBits(1) !== 0) | |
throw new Error('Invalid reserved bit'); | |
size_bytes = br.readBits(2); | |
if (size_bytes === 0) | |
return out; | |
for (i = 0; i < size_bytes; i++) { | |
var next_byte = br.readBits(8); | |
if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0) | |
throw new Error('Invalid size byte'); | |
out.meta_block_length |= next_byte << (i * 8); | |
} | |
} else { | |
for (i = 0; i < size_nibbles; ++i) { | |
var next_nibble = br.readBits(4); | |
if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0) | |
throw new Error('Invalid size nibble'); | |
out.meta_block_length |= next_nibble << (i * 4); | |
} | |
} | |
++out.meta_block_length; | |
if (!out.input_end && !out.is_metadata) { | |
out.is_uncompressed = br.readBits(1); | |
} | |
return out; | |
} | |
/* Decodes the next Huffman code from bit-stream. */ | |
function ReadSymbol(table, index, br) { | |
var start_index = index; | |
var nbits; | |
br.fillBitWindow(); | |
index += (br.val_ >>> br.bit_pos_) & HUFFMAN_TABLE_MASK; | |
nbits = table[index].bits - HUFFMAN_TABLE_BITS; | |
if (nbits > 0) { | |
br.bit_pos_ += HUFFMAN_TABLE_BITS; | |
index += table[index].value; | |
index += (br.val_ >>> br.bit_pos_) & ((1 << nbits) - 1); | |
} | |
br.bit_pos_ += table[index].bits; | |
return table[index].value; | |
} | |
function ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) { | |
var symbol = 0; | |
var prev_code_len = kDefaultCodeLength; | |
var repeat = 0; | |
var repeat_code_len = 0; | |
var space = 32768; | |
var table = []; | |
for (var i = 0; i < 32; i++) | |
table.push(new HuffmanCode(0, 0)); | |
BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES); | |
while (symbol < num_symbols && space > 0) { | |
var p = 0; | |
var code_len; | |
br.readMoreInput(); | |
br.fillBitWindow(); | |
p += (br.val_ >>> br.bit_pos_) & 31; | |
br.bit_pos_ += table[p].bits; | |
code_len = table[p].value & 0xff; | |
if (code_len < kCodeLengthRepeatCode) { | |
repeat = 0; | |
code_lengths[symbol++] = code_len; | |
if (code_len !== 0) { | |
prev_code_len = code_len; | |
space -= 32768 >> code_len; | |
} | |
} else { | |
var extra_bits = code_len - 14; | |
var old_repeat; | |
var repeat_delta; | |
var new_len = 0; | |
if (code_len === kCodeLengthRepeatCode) { | |
new_len = prev_code_len; | |
} | |
if (repeat_code_len !== new_len) { | |
repeat = 0; | |
repeat_code_len = new_len; | |
} | |
old_repeat = repeat; | |
if (repeat > 0) { | |
repeat -= 2; | |
repeat <<= extra_bits; | |
} | |
repeat += br.readBits(extra_bits) + 3; | |
repeat_delta = repeat - old_repeat; | |
if (symbol + repeat_delta > num_symbols) { | |
throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols'); | |
} | |
for (var x = 0; x < repeat_delta; x++) | |
code_lengths[symbol + x] = repeat_code_len; | |
symbol += repeat_delta; | |
if (repeat_code_len !== 0) { | |
space -= repeat_delta << (15 - repeat_code_len); | |
} | |
} | |
} | |
if (space !== 0) { | |
throw new Error("[ReadHuffmanCodeLengths] space = " + space); | |
} | |
for (; symbol < num_symbols; symbol++) | |
code_lengths[symbol] = 0; | |
} | |
function ReadHuffmanCode(alphabet_size, tables, table, br) { | |
var table_size = 0; | |
var simple_code_or_skip; | |
var code_lengths = new Uint8Array(alphabet_size); | |
br.readMoreInput(); | |
/* simple_code_or_skip is used as follows: | |
1 for simple code; | |
0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */ | |
simple_code_or_skip = br.readBits(2); | |
if (simple_code_or_skip === 1) { | |
/* Read symbols, codes & code lengths directly. */ | |
var i; | |
var max_bits_counter = alphabet_size - 1; | |
var max_bits = 0; | |
var symbols = new Int32Array(4); | |
var num_symbols = br.readBits(2) + 1; | |
while (max_bits_counter) { | |
max_bits_counter >>= 1; | |
++max_bits; | |
} | |
for (i = 0; i < num_symbols; ++i) { | |
symbols[i] = br.readBits(max_bits) % alphabet_size; | |
code_lengths[symbols[i]] = 2; | |
} | |
code_lengths[symbols[0]] = 1; | |
switch (num_symbols) { | |
case 1: | |
break; | |
case 3: | |
if ((symbols[0] === symbols[1]) || | |
(symbols[0] === symbols[2]) || | |
(symbols[1] === symbols[2])) { | |
throw new Error('[ReadHuffmanCode] invalid symbols'); | |
} | |
break; | |
case 2: | |
if (symbols[0] === symbols[1]) { | |
throw new Error('[ReadHuffmanCode] invalid symbols'); | |
} | |
code_lengths[symbols[1]] = 1; | |
break; | |
case 4: | |
if ((symbols[0] === symbols[1]) || | |
(symbols[0] === symbols[2]) || | |
(symbols[0] === symbols[3]) || | |
(symbols[1] === symbols[2]) || | |
(symbols[1] === symbols[3]) || | |
(symbols[2] === symbols[3])) { | |
throw new Error('[ReadHuffmanCode] invalid symbols'); | |
} | |
if (br.readBits(1)) { | |
code_lengths[symbols[2]] = 3; | |
code_lengths[symbols[3]] = 3; | |
} else { | |
code_lengths[symbols[0]] = 2; | |
} | |
break; | |
} | |
} else { /* Decode Huffman-coded code lengths. */ | |
var i; | |
var code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES); | |
var space = 32; | |
var num_codes = 0; | |
/* Static Huffman code for the code length code lengths */ | |
var huff = [ | |
new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), | |
new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1), | |
new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), | |
new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5) | |
]; | |
for (i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; ++i) { | |
var code_len_idx = kCodeLengthCodeOrder[i]; | |
var p = 0; | |
var v; | |
br.fillBitWindow(); | |
p += (br.val_ >>> br.bit_pos_) & 15; | |
br.bit_pos_ += huff[p].bits; | |
v = huff[p].value; | |
code_length_code_lengths[code_len_idx] = v; | |
if (v !== 0) { | |
space -= (32 >> v); | |
++num_codes; | |
} | |
} | |
if (!(num_codes === 1 || space === 0)) | |
throw new Error('[ReadHuffmanCode] invalid num_codes or space'); | |
ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br); | |
} | |
table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size); | |
if (table_size === 0) { | |
throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: "); | |
} | |
return table_size; | |
} | |
function ReadBlockLength(table, index, br) { | |
var code; | |
var nbits; | |
code = ReadSymbol(table, index, br); | |
nbits = Prefix.kBlockLengthPrefixCode[code].nbits; | |
return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits); | |
} | |
function TranslateShortCodes(code, ringbuffer, index) { | |
var val; | |
if (code < NUM_DISTANCE_SHORT_CODES) { | |
index += kDistanceShortCodeIndexOffset[code]; | |
index &= 3; | |
val = ringbuffer[index] + kDistanceShortCodeValueOffset[code]; | |
} else { | |
val = code - NUM_DISTANCE_SHORT_CODES + 1; | |
} | |
return val; | |
} | |
function MoveToFront(v, index) { | |
var value = v[index]; | |
var i = index; | |
for (; i; --i) v[i] = v[i - 1]; | |
v[0] = value; | |
} | |
function InverseMoveToFrontTransform(v, v_len) { | |
var mtf = new Uint8Array(256); | |
var i; | |
for (i = 0; i < 256; ++i) { | |
mtf[i] = i; | |
} | |
for (i = 0; i < v_len; ++i) { | |
var index = v[i]; | |
v[i] = mtf[index]; | |
if (index) MoveToFront(mtf, index); | |
} | |
} | |
/* Contains a collection of huffman trees with the same alphabet size. */ | |
function HuffmanTreeGroup(alphabet_size, num_htrees) { | |
this.alphabet_size = alphabet_size; | |
this.num_htrees = num_htrees; | |
this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]); | |
this.htrees = new Uint32Array(num_htrees); | |
} | |
HuffmanTreeGroup.prototype.decode = function(br) { | |
var i; | |
var table_size; | |
var next = 0; | |
for (i = 0; i < this.num_htrees; ++i) { | |
this.htrees[i] = next; | |
table_size = ReadHuffmanCode(this.alphabet_size, this.codes, next, br); | |
next += table_size; | |
} | |
}; | |
function DecodeContextMap(context_map_size, br) { | |
var out = { num_htrees: null, context_map: null }; | |
var use_rle_for_zeros; | |
var max_run_length_prefix = 0; | |
var table; | |
var i; | |
br.readMoreInput(); | |
var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1; | |
var context_map = out.context_map = new Uint8Array(context_map_size); | |
if (num_htrees <= 1) { | |
return out; | |
} | |
use_rle_for_zeros = br.readBits(1); | |
if (use_rle_for_zeros) { | |
max_run_length_prefix = br.readBits(4) + 1; | |
} | |
table = []; | |
for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) { | |
table[i] = new HuffmanCode(0, 0); | |
} | |
ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br); | |
for (i = 0; i < context_map_size;) { | |
var code; | |
br.readMoreInput(); | |
code = ReadSymbol(table, 0, br); | |
if (code === 0) { | |
context_map[i] = 0; | |
++i; | |
} else if (code <= max_run_length_prefix) { | |
var reps = 1 + (1 << code) + br.readBits(code); | |
while (--reps) { | |
if (i >= context_map_size) { | |
throw new Error("[DecodeContextMap] i >= context_map_size"); | |
} | |
context_map[i] = 0; | |
++i; | |
} | |
} else { | |
context_map[i] = code - max_run_length_prefix; | |
++i; | |
} | |
} | |
if (br.readBits(1)) { | |
InverseMoveToFrontTransform(context_map, context_map_size); | |
} | |
return out; | |
} | |
function DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) { | |
var ringbuffer = tree_type * 2; | |
var index = tree_type; | |
var type_code = ReadSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br); | |
var block_type; | |
if (type_code === 0) { | |
block_type = ringbuffers[ringbuffer + (indexes[index] & 1)]; | |
} else if (type_code === 1) { | |
block_type = ringbuffers[ringbuffer + ((indexes[index] - 1) & 1)] + 1; | |
} else { | |
block_type = type_code - 2; | |
} | |
if (block_type >= max_block_type) { | |
block_type -= max_block_type; | |
} | |
block_types[tree_type] = block_type; | |
ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type; | |
++indexes[index]; | |
} | |
function CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) { | |
var rb_size = ringbuffer_mask + 1; | |
var rb_pos = pos & ringbuffer_mask; | |
var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK; | |
var nbytes; | |
/* For short lengths copy byte-by-byte */ | |
if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) { | |
while (len-- > 0) { | |
br.readMoreInput(); | |
ringbuffer[rb_pos++] = br.readBits(8); | |
if (rb_pos === rb_size) { | |
output.write(ringbuffer, rb_size); | |
rb_pos = 0; | |
} | |
} | |
return; | |
} | |
if (br.bit_end_pos_ < 32) { | |
throw new Error('[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32'); | |
} | |
/* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */ | |
while (br.bit_pos_ < 32) { | |
ringbuffer[rb_pos] = (br.val_ >>> br.bit_pos_); | |
br.bit_pos_ += 8; | |
++rb_pos; | |
--len; | |
} | |
/* Copy remaining bytes from br.buf_ to ringbuffer. */ | |
nbytes = (br.bit_end_pos_ - br.bit_pos_) >> 3; | |
if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) { | |
var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos; | |
for (var x = 0; x < tail; x++) | |
ringbuffer[rb_pos + x] = br.buf_[br_pos + x]; | |
nbytes -= tail; | |
rb_pos += tail; | |
len -= tail; | |
br_pos = 0; | |
} | |
for (var x = 0; x < nbytes; x++) | |
ringbuffer[rb_pos + x] = br.buf_[br_pos + x]; | |
rb_pos += nbytes; | |
len -= nbytes; | |
/* If we wrote past the logical end of the ringbuffer, copy the tail of the | |
ringbuffer to its beginning and flush the ringbuffer to the output. */ | |
if (rb_pos >= rb_size) { | |
output.write(ringbuffer, rb_size); | |
rb_pos -= rb_size; | |
for (var x = 0; x < rb_pos; x++) | |
ringbuffer[x] = ringbuffer[rb_size + x]; | |
} | |
/* If we have more to copy than the remaining size of the ringbuffer, then we | |
first fill the ringbuffer from the input and then flush the ringbuffer to | |
the output */ | |
while (rb_pos + len >= rb_size) { | |
nbytes = rb_size - rb_pos; | |
if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) { | |
throw new Error('[CopyUncompressedBlockToOutput] not enough bytes'); | |
} | |
output.write(ringbuffer, rb_size); | |
len -= nbytes; | |
rb_pos = 0; | |
} | |
/* Copy straight from the input onto the ringbuffer. The ringbuffer will be | |
flushed to the output at a later time. */ | |
if (br.input_.read(ringbuffer, rb_pos, len) < len) { | |
throw new Error('[CopyUncompressedBlockToOutput] not enough bytes'); | |
} | |
/* Restore the state of the bit reader. */ | |
br.reset(); | |
} | |
/* Advances the bit reader position to the next byte boundary and verifies | |
that any skipped bits are set to zero. */ | |
function JumpToByteBoundary(br) { | |
var new_bit_pos = (br.bit_pos_ + 7) & ~7; | |
var pad_bits = br.readBits(new_bit_pos - br.bit_pos_); | |
return pad_bits == 0; | |
} | |
function BrotliDecompressedSize(buffer) { | |
var input = new BrotliInput(buffer); | |
var br = new BrotliBitReader(input); | |
DecodeWindowBits(br); | |
var out = DecodeMetaBlockLength(br); | |
return out.meta_block_length; | |
} | |
exports.BrotliDecompressedSize = BrotliDecompressedSize; | |
function BrotliDecompressBuffer(buffer, output_size) { | |
var input = new BrotliInput(buffer); | |
if (output_size == null) { | |
output_size = BrotliDecompressedSize(buffer); | |
} | |
var output_buffer = new Uint8Array(output_size); | |
var output = new BrotliOutput(output_buffer); | |
BrotliDecompress(input, output); | |
if (output.pos < output.buffer.length) { | |
output.buffer = output.buffer.subarray(0, output.pos); | |
} | |
return output.buffer; | |
} | |
exports.BrotliDecompressBuffer = BrotliDecompressBuffer; | |
function BrotliDecompress(input, output) { | |
var i; | |
var pos = 0; | |
var input_end = 0; | |
var window_bits = 0; | |
var max_backward_distance; | |
var max_distance = 0; | |
var ringbuffer_size; | |
var ringbuffer_mask; | |
var ringbuffer; | |
var ringbuffer_end; | |
/* This ring buffer holds a few past copy distances that will be used by */ | |
/* some special distance codes. */ | |
var dist_rb = [ 16, 15, 11, 4 ]; | |
var dist_rb_idx = 0; | |
/* The previous 2 bytes used for context. */ | |
var prev_byte1 = 0; | |
var prev_byte2 = 0; | |
var hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)]; | |
var block_type_trees; | |
var block_len_trees; | |
var br; | |
/* We need the slack region for the following reasons: | |
- always doing two 8-byte copies for fast backward copying | |
- transforms | |
- flushing the input ringbuffer when decoding uncompressed blocks */ | |
var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE; | |
br = new BrotliBitReader(input); | |
/* Decode window size. */ | |
window_bits = DecodeWindowBits(br); | |
max_backward_distance = (1 << window_bits) - 16; | |
ringbuffer_size = 1 << window_bits; | |
ringbuffer_mask = ringbuffer_size - 1; | |
ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength); | |
ringbuffer_end = ringbuffer_size; | |
block_type_trees = []; | |
block_len_trees = []; | |
for (var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) { | |
block_type_trees[x] = new HuffmanCode(0, 0); | |
block_len_trees[x] = new HuffmanCode(0, 0); | |
} | |
while (!input_end) { | |
var meta_block_remaining_len = 0; | |
var is_uncompressed; | |
var block_length = [ 1 << 28, 1 << 28, 1 << 28 ]; | |
var block_type = [ 0 ]; | |
var num_block_types = [ 1, 1, 1 ]; | |
var block_type_rb = [ 0, 1, 0, 1, 0, 1 ]; | |
var block_type_rb_index = [ 0 ]; | |
var distance_postfix_bits; | |
var num_direct_distance_codes; | |
var distance_postfix_mask; | |
var num_distance_codes; | |
var context_map = null; | |
var context_modes = null; | |
var num_literal_htrees; | |
var dist_context_map = null; | |
var num_dist_htrees; | |
var context_offset = 0; | |
var context_map_slice = null; | |
var literal_htree_index = 0; | |
var dist_context_offset = 0; | |
var dist_context_map_slice = null; | |
var dist_htree_index = 0; | |
var context_lookup_offset1 = 0; | |
var context_lookup_offset2 = 0; | |
var context_mode; | |
var htree_command; | |
for (i = 0; i < 3; ++i) { | |
hgroup[i].codes = null; | |
hgroup[i].htrees = null; | |
} | |
br.readMoreInput(); | |
var _out = DecodeMetaBlockLength(br); | |
meta_block_remaining_len = _out.meta_block_length; | |
if (pos + meta_block_remaining_len > output.buffer.length) { | |
/* We need to grow the output buffer to fit the additional data. */ | |
var tmp = new Uint8Array( pos + meta_block_remaining_len ); | |
tmp.set( output.buffer ); | |
output.buffer = tmp; | |
} | |
input_end = _out.input_end; | |
is_uncompressed = _out.is_uncompressed; | |
if (_out.is_metadata) { | |
JumpToByteBoundary(br); | |
for (; meta_block_remaining_len > 0; --meta_block_remaining_len) { | |
br.readMoreInput(); | |
/* Read one byte and ignore it. */ | |
br.readBits(8); | |
} | |
continue; | |
} | |
if (meta_block_remaining_len === 0) { | |
continue; | |
} | |
if (is_uncompressed) { | |
br.bit_pos_ = (br.bit_pos_ + 7) & ~7; | |
CopyUncompressedBlockToOutput(output, meta_block_remaining_len, pos, | |
ringbuffer, ringbuffer_mask, br); | |
pos += meta_block_remaining_len; | |
continue; | |
} | |
for (i = 0; i < 3; ++i) { | |
num_block_types[i] = DecodeVarLenUint8(br) + 1; | |
if (num_block_types[i] >= 2) { | |
ReadHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br); | |
ReadHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br); | |
block_length[i] = ReadBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br); | |
block_type_rb_index[i] = 1; | |
} | |
} | |
br.readMoreInput(); | |
distance_postfix_bits = br.readBits(2); | |
num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits); | |
distance_postfix_mask = (1 << distance_postfix_bits) - 1; | |
num_distance_codes = (num_direct_distance_codes + (48 << distance_postfix_bits)); | |
context_modes = new Uint8Array(num_block_types[0]); | |
for (i = 0; i < num_block_types[0]; ++i) { | |
br.readMoreInput(); | |
context_modes[i] = (br.readBits(2) << 1); | |
} | |
var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br); | |
num_literal_htrees = _o1.num_htrees; | |
context_map = _o1.context_map; | |
var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br); | |
num_dist_htrees = _o2.num_htrees; | |
dist_context_map = _o2.context_map; | |
hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees); | |
hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]); | |
hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees); | |
for (i = 0; i < 3; ++i) { | |
hgroup[i].decode(br); | |
} | |
context_map_slice = 0; | |
dist_context_map_slice = 0; | |
context_mode = context_modes[block_type[0]]; | |
context_lookup_offset1 = Context.lookupOffsets[context_mode]; | |
context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; | |
htree_command = hgroup[1].htrees[0]; | |
while (meta_block_remaining_len > 0) { | |
var cmd_code; | |
var range_idx; | |
var insert_code; | |
var copy_code; | |
var insert_length; | |
var copy_length; | |
var distance_code; | |
var distance; | |
var context; | |
var j; | |
var copy_dst; | |
br.readMoreInput(); | |
if (block_length[1] === 0) { | |
DecodeBlockType(num_block_types[1], | |
block_type_trees, 1, block_type, block_type_rb, | |
block_type_rb_index, br); | |
block_length[1] = ReadBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br); | |
htree_command = hgroup[1].htrees[block_type[1]]; | |
} | |
--block_length[1]; | |
cmd_code = ReadSymbol(hgroup[1].codes, htree_command, br); | |
range_idx = cmd_code >> 6; | |
if (range_idx >= 2) { | |
range_idx -= 2; | |
distance_code = -1; | |
} else { | |
distance_code = 0; | |
} | |
insert_code = Prefix.kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7); | |
copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7); | |
insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset + | |
br.readBits(Prefix.kInsertLengthPrefixCode[insert_code].nbits); | |
copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset + | |
br.readBits(Prefix.kCopyLengthPrefixCode[copy_code].nbits); | |
prev_byte1 = ringbuffer[pos-1 & ringbuffer_mask]; | |
prev_byte2 = ringbuffer[pos-2 & ringbuffer_mask]; | |
for (j = 0; j < insert_length; ++j) { | |
br.readMoreInput(); | |
if (block_length[0] === 0) { | |
DecodeBlockType(num_block_types[0], | |
block_type_trees, 0, block_type, block_type_rb, | |
block_type_rb_index, br); | |
block_length[0] = ReadBlockLength(block_len_trees, 0, br); | |
context_offset = block_type[0] << kLiteralContextBits; | |
context_map_slice = context_offset; | |
context_mode = context_modes[block_type[0]]; | |
context_lookup_offset1 = Context.lookupOffsets[context_mode]; | |
context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; | |
} | |
context = (Context.lookup[context_lookup_offset1 + prev_byte1] | | |
Context.lookup[context_lookup_offset2 + prev_byte2]); | |
literal_htree_index = context_map[context_map_slice + context]; | |
--block_length[0]; | |
prev_byte2 = prev_byte1; | |
prev_byte1 = ReadSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br); | |
ringbuffer[pos & ringbuffer_mask] = prev_byte1; | |
if ((pos & ringbuffer_mask) === ringbuffer_mask) { | |
output.write(ringbuffer, ringbuffer_size); | |
} | |
++pos; | |
} | |
meta_block_remaining_len -= insert_length; | |
if (meta_block_remaining_len <= 0) break; | |
if (distance_code < 0) { | |
var context; | |
br.readMoreInput(); | |
if (block_length[2] === 0) { | |
DecodeBlockType(num_block_types[2], | |
block_type_trees, 2, block_type, block_type_rb, | |
block_type_rb_index, br); | |
block_length[2] = ReadBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br); | |
dist_context_offset = block_type[2] << kDistanceContextBits; | |
dist_context_map_slice = dist_context_offset; | |
} | |
--block_length[2]; | |
context = (copy_length > 4 ? 3 : copy_length - 2) & 0xff; | |
dist_htree_index = dist_context_map[dist_context_map_slice + context]; | |
distance_code = ReadSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br); | |
if (distance_code >= num_direct_distance_codes) { | |
var nbits; | |
var postfix; | |
var offset; | |
distance_code -= num_direct_distance_codes; | |
postfix = distance_code & distance_postfix_mask; | |
distance_code >>= distance_postfix_bits; | |
nbits = (distance_code >> 1) + 1; | |
offset = ((2 + (distance_code & 1)) << nbits) - 4; | |
distance_code = num_direct_distance_codes + | |
((offset + br.readBits(nbits)) << | |
distance_postfix_bits) + postfix; | |
} | |
} | |
/* Convert the distance code to the actual distance by possibly looking */ | |
/* up past distnaces from the ringbuffer. */ | |
distance = TranslateShortCodes(distance_code, dist_rb, dist_rb_idx); | |
if (distance < 0) { | |
throw new Error('[BrotliDecompress] invalid distance'); | |
} | |
if (pos < max_backward_distance && | |
max_distance !== max_backward_distance) { | |
max_distance = pos; | |
} else { | |
max_distance = max_backward_distance; | |
} | |
copy_dst = pos & ringbuffer_mask; | |
if (distance > max_distance) { | |
if (copy_length >= BrotliDictionary.minDictionaryWordLength && | |
copy_length <= BrotliDictionary.maxDictionaryWordLength) { | |
var offset = BrotliDictionary.offsetsByLength[copy_length]; | |
var word_id = distance - max_distance - 1; | |
var shift = BrotliDictionary.sizeBitsByLength[copy_length]; | |
var mask = (1 << shift) - 1; | |
var word_idx = word_id & mask; | |
var transform_idx = word_id >> shift; | |
offset += word_idx * copy_length; | |
if (transform_idx < Transform.kNumTransforms) { | |
var len = Transform.transformDictionaryWord(ringbuffer, copy_dst, offset, copy_length, transform_idx); | |
copy_dst += len; | |
pos += len; | |
meta_block_remaining_len -= len; | |
if (copy_dst >= ringbuffer_end) { | |
output.write(ringbuffer, ringbuffer_size); | |
for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++) | |
ringbuffer[_x] = ringbuffer[ringbuffer_end + _x]; | |
} | |
} else { | |
throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance + | |
" len: " + copy_length + " bytes left: " + meta_block_remaining_len); | |
} | |
} else { | |
throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance + | |
" len: " + copy_length + " bytes left: " + meta_block_remaining_len); | |
} | |
} else { | |
if (distance_code > 0) { | |
dist_rb[dist_rb_idx & 3] = distance; | |
++dist_rb_idx; | |
} | |
if (copy_length > meta_block_remaining_len) { | |
throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance + | |
" len: " + copy_length + " bytes left: " + meta_block_remaining_len); | |
} | |
for (j = 0; j < copy_length; ++j) { | |
ringbuffer[pos & ringbuffer_mask] = ringbuffer[(pos - distance) & ringbuffer_mask]; | |
if ((pos & ringbuffer_mask) === ringbuffer_mask) { | |
output.write(ringbuffer, ringbuffer_size); | |
} | |
++pos; | |
--meta_block_remaining_len; | |
} | |
} | |
/* When we get here, we must have inserted at least one literal and */ | |
/* made a copy of at least length two, therefore accessing the last 2 */ | |
/* bytes is valid. */ | |
prev_byte1 = ringbuffer[(pos - 1) & ringbuffer_mask]; | |
prev_byte2 = ringbuffer[(pos - 2) & ringbuffer_mask]; | |
} | |
/* Protect pos from overflow, wrap it around at every GB of input data */ | |
pos &= 0x3fffffff; | |
} | |
output.write(ringbuffer, pos & ringbuffer_mask); | |
} | |
exports.BrotliDecompress = BrotliDecompress; | |
BrotliDictionary.init(); | |
},{"./bit_reader":88,"./context":89,"./dictionary":93,"./huffman":94,"./prefix":95,"./streams":96,"./transform":97}],91:[function(require,module,exports){ | |
var base64 = require('base64-js'); | |
/** | |
* The normal dictionary-data.js is quite large, which makes it | |
* unsuitable for browser usage. In order to make it smaller, | |
* we read dictionary.bin, which is a compressed version of | |
* the dictionary, and on initial load, Brotli decompresses | |
* it's own dictionary. 😜 | |
*/ | |
exports.init = function() { | |
var BrotliDecompressBuffer = require('./decode').BrotliDecompressBuffer; | |
var compressed = base64.toByteArray(require('./dictionary.bin.js')); | |
return BrotliDecompressBuffer(compressed); | |
}; | |
},{"./decode":90,"./dictionary.bin.js":92,"base64-js":87}],92:[function(require,module,exports){ | |
module.exports="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"; | |
},{}],93:[function(require,module,exports){ | |
/* Copyright 2013 Google Inc. All Rights Reserved. | |
Licensed under the Apache License, Version 2.0 (the "License"); | |
you may not use this file except in compliance with the License. | |
You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, software | |
distributed under the License is distributed on an "AS IS" BASIS, | |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
See the License for the specific language governing permissions and | |
limitations under the License. | |
Collection of static dictionary words. | |
*/ | |
var data = require('./dictionary-data'); | |
exports.init = function() { | |
exports.dictionary = data.init(); | |
}; | |
exports.offsetsByLength = new Uint32Array([ | |
0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, | |
53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536, | |
115968, 118528, 119872, 121280, 122016, | |
]); | |
exports.sizeBitsByLength = new Uint8Array([ | |
0, 0, 0, 0, 10, 10, 11, 11, 10, 10, | |
10, 10, 10, 9, 9, 8, 7, 7, 8, 7, | |
7, 6, 6, 5, 5, | |
]); | |
exports.minDictionaryWordLength = 4; | |
exports.maxDictionaryWordLength = 24; | |
},{"./dictionary-data":91}],94:[function(require,module,exports){ | |
function HuffmanCode(bits, value) { | |
this.bits = bits; /* number of bits used for this symbol */ | |
this.value = value; /* symbol value or table offset */ | |
} | |
exports.HuffmanCode = HuffmanCode; | |
var MAX_LENGTH = 15; | |
/* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the | |
bit-wise reversal of the len least significant bits of key. */ | |
function GetNextKey(key, len) { | |
var step = 1 << (len - 1); | |
while (key & step) { | |
step >>= 1; | |
} | |
return (key & (step - 1)) + step; | |
} | |
/* Stores code in table[0], table[step], table[2*step], ..., table[end] */ | |
/* Assumes that end is an integer multiple of step */ | |
function ReplicateValue(table, i, step, end, code) { | |
do { | |
end -= step; | |
table[i + end] = new HuffmanCode(code.bits, code.value); | |
} while (end > 0); | |
} | |
/* Returns the table width of the next 2nd level table. count is the histogram | |
of bit lengths for the remaining symbols, len is the code length of the next | |
processed symbol */ | |
function NextTableBitSize(count, len, root_bits) { | |
var left = 1 << (len - root_bits); | |
while (len < MAX_LENGTH) { | |
left -= count[len]; | |
if (left <= 0) break; | |
++len; | |
left <<= 1; | |
} | |
return len - root_bits; | |
} | |
exports.BrotliBuildHuffmanTable = function(root_table, table, root_bits, code_lengths, code_lengths_size) { | |
var start_table = table; | |
var code; /* current table entry */ | |
var len; /* current code length */ | |
var symbol; /* symbol index in original or sorted table */ | |
var key; /* reversed prefix code */ | |
var step; /* step size to replicate values in current table */ | |
var low; /* low bits for current root entry */ | |
var mask; /* mask for low bits */ | |
var table_bits; /* key length of current table */ | |
var table_size; /* size of current table */ | |
var total_size; /* sum of root table size and 2nd level table sizes */ | |
var sorted; /* symbols sorted by code length */ | |
var count = new Int32Array(MAX_LENGTH + 1); /* number of codes of each length */ | |
var offset = new Int32Array(MAX_LENGTH + 1); /* offsets in sorted table for each length */ | |
sorted = new Int32Array(code_lengths_size); | |
/* build histogram of code lengths */ | |
for (symbol = 0; symbol < code_lengths_size; symbol++) { | |
count[code_lengths[symbol]]++; | |
} | |
/* generate offsets into sorted symbol table by code length */ | |
offset[1] = 0; | |
for (len = 1; len < MAX_LENGTH; len++) { | |
offset[len + 1] = offset[len] + count[len]; | |
} | |
/* sort symbols by length, by symbol order within each length */ | |
for (symbol = 0; symbol < code_lengths_size; symbol++) { | |
if (code_lengths[symbol] !== 0) { | |
sorted[offset[code_lengths[symbol]]++] = symbol; | |
} | |
} | |
table_bits = root_bits; | |
table_size = 1 << table_bits; | |
total_size = table_size; | |
/* special case code with only one value */ | |
if (offset[MAX_LENGTH] === 1) { | |
for (key = 0; key < total_size; ++key) { | |
root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff); | |
} | |
return total_size; | |
} | |
/* fill in root table */ | |
key = 0; | |
symbol = 0; | |
for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) { | |
for (; count[len] > 0; --count[len]) { | |
code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff); | |
ReplicateValue(root_table, table + key, step, table_size, code); | |
key = GetNextKey(key, len); | |
} | |
} | |
/* fill in 2nd level tables and add pointers to root table */ | |
mask = total_size - 1; | |
low = -1; | |
for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) { | |
for (; count[len] > 0; --count[len]) { | |
if ((key & mask) !== low) { | |
table += table_size; | |
table_bits = NextTableBitSize(count, len, root_bits); | |
table_size = 1 << table_bits; | |
total_size += table_size; | |
low = key & mask; | |
root_table[start_table + low] = new HuffmanCode((table_bits + root_bits) & 0xff, ((table - start_table) - low) & 0xffff); | |
} | |
code = new HuffmanCode((len - root_bits) & 0xff, sorted[symbol++] & 0xffff); | |
ReplicateValue(root_table, table + (key >> root_bits), step, table_size, code); | |
key = GetNextKey(key, len); | |
} | |
} | |
return total_size; | |
} | |
},{}],95:[function(require,module,exports){ | |
/* Copyright 2013 Google Inc. All Rights Reserved. | |
Licensed under the Apache License, Version 2.0 (the "License"); | |
you may not use this file except in compliance with the License. | |
You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, software | |
distributed under the License is distributed on an "AS IS" BASIS, | |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
See the License for the specific language governing permissions and | |
limitations under the License. | |
Lookup tables to map prefix codes to value ranges. This is used during | |
decoding of the block lengths, literal insertion lengths and copy lengths. | |
*/ | |
/* Represents the range of values belonging to a prefix code: */ | |
/* [offset, offset + 2^nbits) */ | |
function PrefixCodeRange(offset, nbits) { | |
this.offset = offset; | |
this.nbits = nbits; | |
} | |
exports.kBlockLengthPrefixCode = [ | |
new PrefixCodeRange(1, 2), new PrefixCodeRange(5, 2), new PrefixCodeRange(9, 2), new PrefixCodeRange(13, 2), | |
new PrefixCodeRange(17, 3), new PrefixCodeRange(25, 3), new PrefixCodeRange(33, 3), new PrefixCodeRange(41, 3), | |
new PrefixCodeRange(49, 4), new PrefixCodeRange(65, 4), new PrefixCodeRange(81, 4), new PrefixCodeRange(97, 4), | |
new PrefixCodeRange(113, 5), new PrefixCodeRange(145, 5), new PrefixCodeRange(177, 5), new PrefixCodeRange(209, 5), | |
new PrefixCodeRange(241, 6), new PrefixCodeRange(305, 6), new PrefixCodeRange(369, 7), new PrefixCodeRange(497, 8), | |
new PrefixCodeRange(753, 9), new PrefixCodeRange(1265, 10), new PrefixCodeRange(2289, 11), new PrefixCodeRange(4337, 12), | |
new PrefixCodeRange(8433, 13), new PrefixCodeRange(16625, 24) | |
]; | |
exports.kInsertLengthPrefixCode = [ | |
new PrefixCodeRange(0, 0), new PrefixCodeRange(1, 0), new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), | |
new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), new PrefixCodeRange(6, 1), new PrefixCodeRange(8, 1), | |
new PrefixCodeRange(10, 2), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 3), new PrefixCodeRange(26, 3), | |
new PrefixCodeRange(34, 4), new PrefixCodeRange(50, 4), new PrefixCodeRange(66, 5), new PrefixCodeRange(98, 5), | |
new PrefixCodeRange(130, 6), new PrefixCodeRange(194, 7), new PrefixCodeRange(322, 8), new PrefixCodeRange(578, 9), | |
new PrefixCodeRange(1090, 10), new PrefixCodeRange(2114, 12), new PrefixCodeRange(6210, 14), new PrefixCodeRange(22594, 24), | |
]; | |
exports.kCopyLengthPrefixCode = [ | |
new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), | |
new PrefixCodeRange(6, 0), new PrefixCodeRange(7, 0), new PrefixCodeRange(8, 0), new PrefixCodeRange(9, 0), | |
new PrefixCodeRange(10, 1), new PrefixCodeRange(12, 1), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 2), | |
new PrefixCodeRange(22, 3), new PrefixCodeRange(30, 3), new PrefixCodeRange(38, 4), new PrefixCodeRange(54, 4), | |
new PrefixCodeRange(70, 5), new PrefixCodeRange(102, 5), new PrefixCodeRange(134, 6), new PrefixCodeRange(198, 7), | |
new PrefixCodeRange(326, 8), new PrefixCodeRange(582, 9), new PrefixCodeRange(1094, 10), new PrefixCodeRange(2118, 24), | |
]; | |
exports.kInsertRangeLut = [ | |
0, 0, 8, 8, 0, 16, 8, 16, 16, | |
]; | |
exports.kCopyRangeLut = [ | |
0, 8, 0, 8, 16, 0, 16, 8, 16, | |
]; | |
},{}],96:[function(require,module,exports){ | |
function BrotliInput(buffer) { | |
this.buffer = buffer; | |
this.pos = 0; | |
} | |
BrotliInput.prototype.read = function(buf, i, count) { | |
if (this.pos + count > this.buffer.length) { | |
count = this.buffer.length - this.pos; | |
} | |
for (var p = 0; p < count; p++) | |
buf[i + p] = this.buffer[this.pos + p]; | |
this.pos += count; | |
return count; | |
} | |
exports.BrotliInput = BrotliInput; | |
function BrotliOutput(buf) { | |
this.buffer = buf; | |
this.pos = 0; | |
} | |
BrotliOutput.prototype.write = function(buf, count) { | |
if (this.pos + count > this.buffer.length) | |
throw new Error('Output buffer is not large enough'); | |
this.buffer.set(buf.subarray(0, count), this.pos); | |
this.pos += count; | |
return count; | |
}; | |
exports.BrotliOutput = BrotliOutput; | |
},{}],97:[function(require,module,exports){ | |
/* Copyright 2013 Google Inc. All Rights Reserved. | |
Licensed under the Apache License, Version 2.0 (the "License"); | |
you may not use this file except in compliance with the License. | |
You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, software | |
distributed under the License is distributed on an "AS IS" BASIS, | |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
See the License for the specific language governing permissions and | |
limitations under the License. | |
Transformations on dictionary words. | |
*/ | |
var BrotliDictionary = require('./dictionary'); | |
var kIdentity = 0; | |
var kOmitLast1 = 1; | |
var kOmitLast2 = 2; | |
var kOmitLast3 = 3; | |
var kOmitLast4 = 4; | |
var kOmitLast5 = 5; | |
var kOmitLast6 = 6; | |
var kOmitLast7 = 7; | |
var kOmitLast8 = 8; | |
var kOmitLast9 = 9; | |
var kUppercaseFirst = 10; | |
var kUppercaseAll = 11; | |
var kOmitFirst1 = 12; | |
var kOmitFirst2 = 13; | |
var kOmitFirst3 = 14; | |
var kOmitFirst4 = 15; | |
var kOmitFirst5 = 16; | |
var kOmitFirst6 = 17; | |
var kOmitFirst7 = 18; | |
var kOmitFirst8 = 19; | |
var kOmitFirst9 = 20; | |
function Transform(prefix, transform, suffix) { | |
this.prefix = new Uint8Array(prefix.length); | |
this.transform = transform; | |
this.suffix = new Uint8Array(suffix.length); | |
for (var i = 0; i < prefix.length; i++) | |
this.prefix[i] = prefix.charCodeAt(i); | |
for (var i = 0; i < suffix.length; i++) | |
this.suffix[i] = suffix.charCodeAt(i); | |
} | |
var kTransforms = [ | |
new Transform( "", kIdentity, "" ), | |
new Transform( "", kIdentity, " " ), | |
new Transform( " ", kIdentity, " " ), | |
new Transform( "", kOmitFirst1, "" ), | |
new Transform( "", kUppercaseFirst, " " ), | |
new Transform( "", kIdentity, " the " ), | |
new Transform( " ", kIdentity, "" ), | |
new Transform( "s ", kIdentity, " " ), | |
new Transform( "", kIdentity, " of " ), | |
new Transform( "", kUppercaseFirst, "" ), | |
new Transform( "", kIdentity, " and " ), | |
new Transform( "", kOmitFirst2, "" ), | |
new Transform( "", kOmitLast1, "" ), | |
new Transform( ", ", kIdentity, " " ), | |
new Transform( "", kIdentity, ", " ), | |
new Transform( " ", kUppercaseFirst, " " ), | |
new Transform( "", kIdentity, " in " ), | |
new Transform( "", kIdentity, " to " ), | |
new Transform( "e ", kIdentity, " " ), | |
new Transform( "", kIdentity, "\"" ), | |
new Transform( "", kIdentity, "." ), | |
new Transform( "", kIdentity, "\">" ), | |
new Transform( "", kIdentity, "\n" ), | |
new Transform( "", kOmitLast3, "" ), | |
new Transform( "", kIdentity, "]" ), | |
new Transform( "", kIdentity, " for " ), | |
new Transform( "", kOmitFirst3, "" ), | |
new Transform( "", kOmitLast2, "" ), | |
new Transform( "", kIdentity, " a " ), | |
new Transform( "", kIdentity, " that " ), | |
new Transform( " ", kUppercaseFirst, "" ), | |
new Transform( "", kIdentity, ". " ), | |
new Transform( ".", kIdentity, "" ), | |
new Transform( " ", kIdentity, ", " ), | |
new Transform( "", kOmitFirst4, "" ), | |
new Transform( "", kIdentity, " with " ), | |
new Transform( "", kIdentity, "'" ), | |
new Transform( "", kIdentity, " from " ), | |
new Transform( "", kIdentity, " by " ), | |
new Transform( "", kOmitFirst5, "" ), | |
new Transform( "", kOmitFirst6, "" ), | |
new Transform( " the ", kIdentity, "" ), | |
new Transform( "", kOmitLast4, "" ), | |
new Transform( "", kIdentity, ". The " ), | |
new Transform( "", kUppercaseAll, "" ), | |
new Transform( "", kIdentity, " on " ), | |
new Transform( "", kIdentity, " as " ), | |
new Transform( "", kIdentity, " is " ), | |
new Transform( "", kOmitLast7, "" ), | |
new Transform( "", kOmitLast1, "ing " ), | |
new Transform( "", kIdentity, "\n\t" ), | |
new Transform( "", kIdentity, ":" ), | |
new Transform( " ", kIdentity, ". " ), | |
new Transform( "", kIdentity, "ed " ), | |
new Transform( "", kOmitFirst9, "" ), | |
new Transform( "", kOmitFirst7, "" ), | |
new Transform( "", kOmitLast6, "" ), | |
new Transform( "", kIdentity, "(" ), | |
new Transform( "", kUppercaseFirst, ", " ), | |
new Transform( "", kOmitLast8, "" ), | |
new Transform( "", kIdentity, " at " ), | |
new Transform( "", kIdentity, "ly " ), | |
new Transform( " the ", kIdentity, " of " ), | |
new Transform( "", kOmitLast5, "" ), | |
new Transform( "", kOmitLast9, "" ), | |
new Transform( " ", kUppercaseFirst, ", " ), | |
new Transform( "", kUppercaseFirst, "\"" ), | |
new Transform( ".", kIdentity, "(" ), | |
new Transform( "", kUppercaseAll, " " ), | |
new Transform( "", kUppercaseFirst, "\">" ), | |
new Transform( "", kIdentity, "=\"" ), | |
new Transform( " ", kIdentity, "." ), | |
new Transform( ".com/", kIdentity, "" ), | |
new Transform( " the ", kIdentity, " of the " ), | |
new Transform( "", kUppercaseFirst, "'" ), | |
new Transform( "", kIdentity, ". This " ), | |
new Transform( "", kIdentity, "," ), | |
new Transform( ".", kIdentity, " " ), | |
new Transform( "", kUppercaseFirst, "(" ), | |
new Transform( "", kUppercaseFirst, "." ), | |
new Transform( "", kIdentity, " not " ), | |
new Transform( " ", kIdentity, "=\"" ), | |
new Transform( "", kIdentity, "er " ), | |
new Transform( " ", kUppercaseAll, " " ), | |
new Transform( "", kIdentity, "al " ), | |
new Transform( " ", kUppercaseAll, "" ), | |
new Transform( "", kIdentity, "='" ), | |
new Transform( "", kUppercaseAll, "\"" ), | |
new Transform( "", kUppercaseFirst, ". " ), | |
new Transform( " ", kIdentity, "(" ), | |
new Transform( "", kIdentity, "ful " ), | |
new Transform( " ", kUppercaseFirst, ". " ), | |
new Transform( "", kIdentity, "ive " ), | |
new Transform( "", kIdentity, "less " ), | |
new Transform( "", kUppercaseAll, "'" ), | |
new Transform( "", kIdentity, "est " ), | |
new Transform( " ", kUppercaseFirst, "." ), | |
new Transform( "", kUppercaseAll, "\">" ), | |
new Transform( " ", kIdentity, "='" ), | |
new Transform( "", kUppercaseFirst, "," ), | |
new Transform( "", kIdentity, "ize " ), | |
new Transform( "", kUppercaseAll, "." ), | |
new Transform( "\xc2\xa0", kIdentity, "" ), | |
new Transform( " ", kIdentity, "," ), | |
new Transform( "", kUppercaseFirst, "=\"" ), | |
new Transform( "", kUppercaseAll, "=\"" ), | |
new Transform( "", kIdentity, "ous " ), | |
new Transform( "", kUppercaseAll, ", " ), | |
new Transform( "", kUppercaseFirst, "='" ), | |
new Transform( " ", kUppercaseFirst, "," ), | |
new Transform( " ", kUppercaseAll, "=\"" ), | |
new Transform( " ", kUppercaseAll, ", " ), | |
new Transform( "", kUppercaseAll, "," ), | |
new Transform( "", kUppercaseAll, "(" ), | |
new Transform( "", kUppercaseAll, ". " ), | |
new Transform( " ", kUppercaseAll, "." ), | |
new Transform( "", kUppercaseAll, "='" ), | |
new Transform( " ", kUppercaseAll, ". " ), | |
new Transform( " ", kUppercaseFirst, "=\"" ), | |
new Transform( " ", kUppercaseAll, "='" ), | |
new Transform( " ", kUppercaseFirst, "='" ) | |
]; | |
exports.kTransforms = kTransforms; | |
exports.kNumTransforms = kTransforms.length; | |
function ToUpperCase(p, i) { | |
if (p[i] < 0xc0) { | |
if (p[i] >= 97 && p[i] <= 122) { | |
p[i] ^= 32; | |
} | |
return 1; | |
} | |
/* An overly simplified uppercasing model for utf-8. */ | |
if (p[i] < 0xe0) { | |
p[i + 1] ^= 32; | |
return 2; | |
} | |
/* An arbitrary transform for three byte characters. */ | |
p[i + 2] ^= 5; | |
return 3; | |
} | |
exports.transformDictionaryWord = function(dst, idx, word, len, transform) { | |
var prefix = kTransforms[transform].prefix; | |
var suffix = kTransforms[transform].suffix; | |
var t = kTransforms[transform].transform; | |
var skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1); | |
var i = 0; | |
var start_idx = idx; | |
var uppercase; | |
if (skip > len) { | |
skip = len; | |
} | |
var prefix_pos = 0; | |
while (prefix_pos < prefix.length) { | |
dst[idx++] = prefix[prefix_pos++]; | |
} | |
word += skip; | |
len -= skip; | |
if (t <= kOmitLast9) { | |
len -= t; | |
} | |
for (i = 0; i < len; i++) { | |
dst[idx++] = BrotliDictionary.dictionary[word + i]; | |
} | |
uppercase = idx - len; | |
if (t === kUppercaseFirst) { | |
ToUpperCase(dst, uppercase); | |
} else if (t === kUppercaseAll) { | |
while (len > 0) { | |
var step = ToUpperCase(dst, uppercase); | |
uppercase += step; | |
len -= step; | |
} | |
} | |
var suffix_pos = 0; | |
while (suffix_pos < suffix.length) { | |
dst[idx++] = suffix[suffix_pos++]; | |
} | |
return idx - start_idx; | |
} | |
},{"./dictionary":93}],98:[function(require,module,exports){ | |
module.exports = require('./dec/decode').BrotliDecompressBuffer; | |
},{"./dec/decode":90}],99:[function(require,module,exports){ | |
'use strict'; | |
var GetIntrinsic = require('get-intrinsic'); | |
var callBind = require('./'); | |
var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf')); | |
module.exports = function callBoundIntrinsic(name, allowMissing) { | |
var intrinsic = GetIntrinsic(name, !!allowMissing); | |
if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { | |
return callBind(intrinsic); | |
} | |
return intrinsic; | |
}; | |
},{"./":100,"get-intrinsic":157}],100:[function(require,module,exports){ | |
'use strict'; | |
var bind = require('function-bind'); | |
var GetIntrinsic = require('get-intrinsic'); | |
var setFunctionLength = require('set-function-length'); | |
var $TypeError = require('es-errors/type'); | |
var $apply = GetIntrinsic('%Function.prototype.apply%'); | |
var $call = GetIntrinsic('%Function.prototype.call%'); | |
var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); | |
var $defineProperty = require('es-define-property'); | |
var $max = GetIntrinsic('%Math.max%'); | |
module.exports = function callBind(originalFunction) { | |
if (typeof originalFunction !== 'function') { | |
throw new $TypeError('a function is required'); | |
} | |
var func = $reflectApply(bind, $call, arguments); | |
return setFunctionLength( | |
func, | |
1 + $max(0, originalFunction.length - (arguments.length - 1)), | |
true | |
); | |
}; | |
var applyBind = function applyBind() { | |
return $reflectApply(bind, $apply, arguments); | |
}; | |
if ($defineProperty) { | |
$defineProperty(module.exports, 'apply', { value: applyBind }); | |
} else { | |
module.exports.apply = applyBind; | |
} | |
},{"es-define-property":142,"es-errors/type":148,"function-bind":155,"get-intrinsic":157,"set-function-length":246}],101:[function(require,module,exports){ | |
(function (Buffer){(function (){ | |
var clone = (function() { | |
'use strict'; | |
function _instanceof(obj, type) { | |
return type != null && obj instanceof type; | |
} | |
var nativeMap; | |
try { | |
nativeMap = Map; | |
} catch(_) { | |
// maybe a reference error because no `Map`. Give it a dummy value that no | |
// value will ever be an instanceof. | |
nativeMap = function() {}; | |
} | |
var nativeSet; | |
try { | |
nativeSet = Set; | |
} catch(_) { | |
nativeSet = function() {}; | |
} | |
var nativePromise; | |
try { | |
nativePromise = Promise; | |
} catch(_) { | |
nativePromise = function() {}; | |
} | |
/** | |
* Clones (copies) an Object using deep copying. | |
* | |
* This function supports circular references by default, but if you are certain | |
* there are no circular references in your object, you can save some CPU time | |
* by calling clone(obj, false). | |
* | |
* Caution: if `circular` is false and `parent` contains circular references, | |
* your program may enter an infinite loop and crash. | |
* | |
* @param `parent` - the object to be cloned | |
* @param `circular` - set to true if the object to be cloned may contain | |
* circular references. (optional - true by default) | |
* @param `depth` - set to a number if the object is only to be cloned to | |
* a particular depth. (optional - defaults to Infinity) | |
* @param `prototype` - sets the prototype to be used when cloning an object. | |
* (optional - defaults to parent prototype). | |
* @param `includeNonEnumerable` - set to true if the non-enumerable properties | |
* should be cloned as well. Non-enumerable properties on the prototype | |
* chain will be ignored. (optional - false by default) | |
*/ | |
function clone(parent, circular, depth, prototype, includeNonEnumerable) { | |
if (typeof circular === 'object') { | |
depth = circular.depth; | |
prototype = circular.prototype; | |
includeNonEnumerable = circular.includeNonEnumerable; | |
circular = circular.circular; | |
} | |
// maintain two arrays for circular references, where corresponding parents | |
// and children have the same index | |
var allParents = []; | |
var allChildren = []; | |
var useBuffer = typeof Buffer != 'undefined'; | |
if (typeof circular == 'undefined') | |
circular = true; | |
if (typeof depth == 'undefined') | |
depth = Infinity; | |
// recurse this function so we don't reset allParents and allChildren | |
function _clone(parent, depth) { | |
// cloning null always returns null | |
if (parent === null) | |
return null; | |
if (depth === 0) | |
return parent; | |
var child; | |
var proto; | |
if (typeof parent != 'object') { | |
return parent; | |
} | |
if (_instanceof(parent, nativeMap)) { | |
child = new nativeMap(); | |
} else if (_instanceof(parent, nativeSet)) { | |
child = new nativeSet(); | |
} else if (_instanceof(parent, nativePromise)) { | |
child = new nativePromise(function (resolve, reject) { | |
parent.then(function(value) { | |
resolve(_clone(value, depth - 1)); | |
}, function(err) { | |
reject(_clone(err, depth - 1)); | |
}); | |
}); | |
} else if (clone.__isArray(parent)) { | |
child = []; | |
} else if (clone.__isRegExp(parent)) { | |
child = new RegExp(parent.source, __getRegExpFlags(parent)); | |
if (parent.lastIndex) child.lastIndex = parent.lastIndex; | |
} else if (clone.__isDate(parent)) { | |
child = new Date(parent.getTime()); | |
} else if (useBuffer && Buffer.isBuffer(parent)) { | |
if (Buffer.allocUnsafe) { | |
// Node.js >= 4.5.0 | |
child = Buffer.allocUnsafe(parent.length); | |
} else { | |
// Older Node.js versions | |
child = new Buffer(parent.length); | |
} | |
parent.copy(child); | |
return child; | |
} else if (_instanceof(parent, Error)) { | |
child = Object.create(parent); | |
} else { | |
if (typeof prototype == 'undefined') { | |
proto = Object.getPrototypeOf(parent); | |
child = Object.create(proto); | |
} | |
else { | |
child = Object.create(prototype); | |
proto = prototype; | |
} | |
} | |
if (circular) { | |
var index = allParents.indexOf(parent); | |
if (index != -1) { | |
return allChildren[index]; | |
} | |
allParents.push(parent); | |
allChildren.push(child); | |
} | |
if (_instanceof(parent, nativeMap)) { | |
parent.forEach(function(value, key) { | |
var keyChild = _clone(key, depth - 1); | |
var valueChild = _clone(value, depth - 1); | |
child.set(keyChild, valueChild); | |
}); | |
} | |
if (_instanceof(parent, nativeSet)) { | |
parent.forEach(function(value) { | |
var entryChild = _clone(value, depth - 1); | |
child.add(entryChild); | |
}); | |
} | |
for (var i in parent) { | |
var attrs; | |
if (proto) { | |
attrs = Object.getOwnPropertyDescriptor(proto, i); | |
} | |
if (attrs && attrs.set == null) { | |
continue; | |
} | |
child[i] = _clone(parent[i], depth - 1); | |
} | |
if (Object.getOwnPropertySymbols) { | |
var symbols = Object.getOwnPropertySymbols(parent); | |
for (var i = 0; i < symbols.length; i++) { | |
// Don't need to worry about cloning a symbol because it is a primitive, | |
// like a number or string. | |
var symbol = symbols[i]; | |
var descriptor = Object.getOwnPropertyDescriptor(parent, symbol); | |
if (descriptor && !descriptor.enumerable && !includeNonEnumerable) { | |
continue; | |
} | |
child[symbol] = _clone(parent[symbol], depth - 1); | |
if (!descriptor.enumerable) { | |
Object.defineProperty(child, symbol, { | |
enumerable: false | |
}); | |
} | |
} | |
} | |
if (includeNonEnumerable) { | |
var allPropertyNames = Object.getOwnPropertyNames(parent); | |
for (var i = 0; i < allPropertyNames.length; i++) { | |
var propertyName = allPropertyNames[i]; | |
var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName); | |
if (descriptor && descriptor.enumerable) { | |
continue; | |
} | |
child[propertyName] = _clone(parent[propertyName], depth - 1); | |
Object.defineProperty(child, propertyName, { | |
enumerable: false | |
}); | |
} | |
} | |
return child; | |
} | |
return _clone(parent, depth); | |
} | |
/** | |
* Simple flat clone using prototype, accepts only objects, usefull for property | |
* override on FLAT configuration object (no nested props). | |
* | |
* USE WITH CAUTION! This may not behave as you wish if you do not know how this | |
* works. | |
*/ | |
clone.clonePrototype = function clonePrototype(parent) { | |
if (parent === null) | |
return null; | |
var c = function () {}; | |
c.prototype = parent; | |
return new c(); | |
}; | |
// private utility functions | |
function __objToStr(o) { | |
return Object.prototype.toString.call(o); | |
} | |
clone.__objToStr = __objToStr; | |
function __isDate(o) { | |
return typeof o === 'object' && __objToStr(o) === '[object Date]'; | |
} | |
clone.__isDate = __isDate; | |
function __isArray(o) { | |
return typeof o === 'object' && __objToStr(o) === '[object Array]'; | |
} | |
clone.__isArray = __isArray; | |
function __isRegExp(o) { | |
return typeof o === 'object' && __objToStr(o) === '[object RegExp]'; | |
} | |
clone.__isRegExp = __isRegExp; | |
function __getRegExpFlags(re) { | |
var flags = ''; | |
if (re.global) flags += 'g'; | |
if (re.ignoreCase) flags += 'i'; | |
if (re.multiline) flags += 'm'; | |
return flags; | |
} | |
clone.__getRegExpFlags = __getRegExpFlags; | |
return clone; | |
})(); | |
if (typeof module === 'object' && module.exports) { | |
module.exports = clone; | |
} | |
}).call(this)}).call(this,require("buffer").Buffer) | |
},{"buffer":267}],102:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var BlockCipher = C_lib.BlockCipher; | |
var C_algo = C.algo; | |
// Lookup tables | |
var SBOX = []; | |
var INV_SBOX = []; | |
var SUB_MIX_0 = []; | |
var SUB_MIX_1 = []; | |
var SUB_MIX_2 = []; | |
var SUB_MIX_3 = []; | |
var INV_SUB_MIX_0 = []; | |
var INV_SUB_MIX_1 = []; | |
var INV_SUB_MIX_2 = []; | |
var INV_SUB_MIX_3 = []; | |
// Compute lookup tables | |
(function () { | |
// Compute double table | |
var d = []; | |
for (var i = 0; i < 256; i++) { | |
if (i < 128) { | |
d[i] = i << 1; | |
} else { | |
d[i] = (i << 1) ^ 0x11b; | |
} | |
} | |
// Walk GF(2^8) | |
var x = 0; | |
var xi = 0; | |
for (var i = 0; i < 256; i++) { | |
// Compute sbox | |
var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); | |
sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; | |
SBOX[x] = sx; | |
INV_SBOX[sx] = x; | |
// Compute multiplication | |
var x2 = d[x]; | |
var x4 = d[x2]; | |
var x8 = d[x4]; | |
// Compute sub bytes, mix columns tables | |
var t = (d[sx] * 0x101) ^ (sx * 0x1010100); | |
SUB_MIX_0[x] = (t << 24) | (t >>> 8); | |
SUB_MIX_1[x] = (t << 16) | (t >>> 16); | |
SUB_MIX_2[x] = (t << 8) | (t >>> 24); | |
SUB_MIX_3[x] = t; | |
// Compute inv sub bytes, inv mix columns tables | |
var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); | |
INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); | |
INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); | |
INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); | |
INV_SUB_MIX_3[sx] = t; | |
// Compute next counter | |
if (!x) { | |
x = xi = 1; | |
} else { | |
x = x2 ^ d[d[d[x8 ^ x2]]]; | |
xi ^= d[d[xi]]; | |
} | |
} | |
}()); | |
// Precomputed Rcon lookup | |
var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; | |
/** | |
* AES block cipher algorithm. | |
*/ | |
var AES = C_algo.AES = BlockCipher.extend({ | |
_doReset: function () { | |
var t; | |
// Skip reset of nRounds has been set before and key did not change | |
if (this._nRounds && this._keyPriorReset === this._key) { | |
return; | |
} | |
// Shortcuts | |
var key = this._keyPriorReset = this._key; | |
var keyWords = key.words; | |
var keySize = key.sigBytes / 4; | |
// Compute number of rounds | |
var nRounds = this._nRounds = keySize + 6; | |
// Compute number of key schedule rows | |
var ksRows = (nRounds + 1) * 4; | |
// Compute key schedule | |
var keySchedule = this._keySchedule = []; | |
for (var ksRow = 0; ksRow < ksRows; ksRow++) { | |
if (ksRow < keySize) { | |
keySchedule[ksRow] = keyWords[ksRow]; | |
} else { | |
t = keySchedule[ksRow - 1]; | |
if (!(ksRow % keySize)) { | |
// Rot word | |
t = (t << 8) | (t >>> 24); | |
// Sub word | |
t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; | |
// Mix Rcon | |
t ^= RCON[(ksRow / keySize) | 0] << 24; | |
} else if (keySize > 6 && ksRow % keySize == 4) { | |
// Sub word | |
t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; | |
} | |
keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; | |
} | |
} | |
// Compute inv key schedule | |
var invKeySchedule = this._invKeySchedule = []; | |
for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { | |
var ksRow = ksRows - invKsRow; | |
if (invKsRow % 4) { | |
var t = keySchedule[ksRow]; | |
} else { | |
var t = keySchedule[ksRow - 4]; | |
} | |
if (invKsRow < 4 || ksRow <= 4) { | |
invKeySchedule[invKsRow] = t; | |
} else { | |
invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ | |
INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; | |
} | |
} | |
}, | |
encryptBlock: function (M, offset) { | |
this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); | |
}, | |
decryptBlock: function (M, offset) { | |
// Swap 2nd and 4th rows | |
var t = M[offset + 1]; | |
M[offset + 1] = M[offset + 3]; | |
M[offset + 3] = t; | |
this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); | |
// Inv swap 2nd and 4th rows | |
var t = M[offset + 1]; | |
M[offset + 1] = M[offset + 3]; | |
M[offset + 3] = t; | |
}, | |
_doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { | |
// Shortcut | |
var nRounds = this._nRounds; | |
// Get input, add round key | |
var s0 = M[offset] ^ keySchedule[0]; | |
var s1 = M[offset + 1] ^ keySchedule[1]; | |
var s2 = M[offset + 2] ^ keySchedule[2]; | |
var s3 = M[offset + 3] ^ keySchedule[3]; | |
// Key schedule row counter | |
var ksRow = 4; | |
// Rounds | |
for (var round = 1; round < nRounds; round++) { | |
// Shift rows, sub bytes, mix columns, add round key | |
var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; | |
var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; | |
var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; | |
var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; | |
// Update state | |
s0 = t0; | |
s1 = t1; | |
s2 = t2; | |
s3 = t3; | |
} | |
// Shift rows, sub bytes, add round key | |
var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; | |
var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; | |
var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; | |
var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; | |
// Set output | |
M[offset] = t0; | |
M[offset + 1] = t1; | |
M[offset + 2] = t2; | |
M[offset + 3] = t3; | |
}, | |
keySize: 256/32 | |
}); | |
/** | |
* Shortcut functions to the cipher's object interface. | |
* | |
* @example | |
* | |
* var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); | |
* var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); | |
*/ | |
C.AES = BlockCipher._createHelper(AES); | |
}()); | |
return CryptoJS.AES; | |
})); | |
},{"./cipher-core":104,"./core":105,"./enc-base64":106,"./evpkdf":109,"./md5":114}],103:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var BlockCipher = C_lib.BlockCipher; | |
var C_algo = C.algo; | |
const N = 16; | |
//Origin pbox and sbox, derived from PI | |
const ORIG_P = [ | |
0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, | |
0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, | |
0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, | |
0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, | |
0x9216D5D9, 0x8979FB1B | |
]; | |
const ORIG_S = [ | |
[ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, | |
0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, | |
0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, | |
0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, | |
0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, | |
0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, | |
0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, | |
0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, | |
0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, | |
0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, | |
0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, | |
0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, | |
0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, | |
0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, | |
0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, | |
0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, | |
0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, | |
0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, | |
0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, | |
0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, | |
0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, | |
0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, | |
0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, | |
0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, | |
0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, | |
0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, | |
0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, | |
0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, | |
0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, | |
0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, | |
0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, | |
0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, | |
0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, | |
0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, | |
0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, | |
0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, | |
0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, | |
0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, | |
0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, | |
0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, | |
0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, | |
0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, | |
0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, | |
0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, | |
0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, | |
0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, | |
0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, | |
0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, | |
0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, | |
0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, | |
0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, | |
0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, | |
0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, | |
0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, | |
0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, | |
0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, | |
0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, | |
0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, | |
0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, | |
0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, | |
0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, | |
0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, | |
0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, | |
0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ], | |
[ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, | |
0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, | |
0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, | |
0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, | |
0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, | |
0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, | |
0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, | |
0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, | |
0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, | |
0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, | |
0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, | |
0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, | |
0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, | |
0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, | |
0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, | |
0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, | |
0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, | |
0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, | |
0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, | |
0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, | |
0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, | |
0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, | |
0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, | |
0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, | |
0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, | |
0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, | |
0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, | |
0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, | |
0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, | |
0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, | |
0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, | |
0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, | |
0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, | |
0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, | |
0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, | |
0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, | |
0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, | |
0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, | |
0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, | |
0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, | |
0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, | |
0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, | |
0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, | |
0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, | |
0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, | |
0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, | |
0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, | |
0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, | |
0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, | |
0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, | |
0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, | |
0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, | |
0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, | |
0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, | |
0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, | |
0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, | |
0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, | |
0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, | |
0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, | |
0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, | |
0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, | |
0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, | |
0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, | |
0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ], | |
[ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, | |
0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, | |
0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, | |
0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, | |
0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, | |
0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, | |
0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, | |
0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, | |
0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, | |
0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, | |
0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, | |
0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, | |
0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, | |
0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, | |
0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, | |
0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, | |
0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, | |
0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, | |
0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, | |
0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, | |
0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, | |
0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, | |
0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, | |
0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, | |
0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, | |
0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, | |
0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, | |
0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, | |
0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, | |
0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, | |
0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, | |
0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, | |
0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, | |
0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, | |
0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, | |
0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, | |
0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, | |
0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, | |
0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, | |
0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, | |
0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, | |
0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, | |
0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, | |
0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, | |
0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, | |
0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, | |
0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, | |
0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, | |
0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, | |
0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, | |
0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, | |
0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, | |
0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, | |
0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, | |
0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, | |
0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, | |
0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, | |
0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, | |
0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, | |
0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, | |
0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, | |
0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, | |
0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, | |
0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ], | |
[ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, | |
0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, | |
0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, | |
0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, | |
0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, | |
0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, | |
0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, | |
0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, | |
0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, | |
0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, | |
0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, | |
0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, | |
0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, | |
0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, | |
0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, | |
0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, | |
0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, | |
0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, | |
0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, | |
0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, | |
0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, | |
0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, | |
0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, | |
0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, | |
0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, | |
0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, | |
0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, | |
0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, | |
0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, | |
0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, | |
0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, | |
0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, | |
0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, | |
0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, | |
0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, | |
0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, | |
0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, | |
0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, | |
0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, | |
0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, | |
0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, | |
0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, | |
0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, | |
0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, | |
0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, | |
0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, | |
0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, | |
0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, | |
0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, | |
0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, | |
0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, | |
0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, | |
0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, | |
0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, | |
0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, | |
0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, | |
0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, | |
0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, | |
0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, | |
0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, | |
0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, | |
0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, | |
0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, | |
0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ] | |
]; | |
var BLOWFISH_CTX = { | |
pbox: [], | |
sbox: [] | |
} | |
function F(ctx, x){ | |
let a = (x >> 24) & 0xFF; | |
let b = (x >> 16) & 0xFF; | |
let c = (x >> 8) & 0xFF; | |
let d = x & 0xFF; | |
let y = ctx.sbox[0][a] + ctx.sbox[1][b]; | |
y = y ^ ctx.sbox[2][c]; | |
y = y + ctx.sbox[3][d]; | |
return y; | |
} | |
function BlowFish_Encrypt(ctx, left, right){ | |
let Xl = left; | |
let Xr = right; | |
let temp; | |
for(let i = 0; i < N; ++i){ | |
Xl = Xl ^ ctx.pbox[i]; | |
Xr = F(ctx, Xl) ^ Xr; | |
temp = Xl; | |
Xl = Xr; | |
Xr = temp; | |
} | |
temp = Xl; | |
Xl = Xr; | |
Xr = temp; | |
Xr = Xr ^ ctx.pbox[N]; | |
Xl = Xl ^ ctx.pbox[N + 1]; | |
return {left: Xl, right: Xr}; | |
} | |
function BlowFish_Decrypt(ctx, left, right){ | |
let Xl = left; | |
let Xr = right; | |
let temp; | |
for(let i = N + 1; i > 1; --i){ | |
Xl = Xl ^ ctx.pbox[i]; | |
Xr = F(ctx, Xl) ^ Xr; | |
temp = Xl; | |
Xl = Xr; | |
Xr = temp; | |
} | |
temp = Xl; | |
Xl = Xr; | |
Xr = temp; | |
Xr = Xr ^ ctx.pbox[1]; | |
Xl = Xl ^ ctx.pbox[0]; | |
return {left: Xl, right: Xr}; | |
} | |
/** | |
* Initialization ctx's pbox and sbox. | |
* | |
* @param {Object} ctx The object has pbox and sbox. | |
* @param {Array} key An array of 32-bit words. | |
* @param {int} keysize The length of the key. | |
* | |
* @example | |
* | |
* BlowFishInit(BLOWFISH_CTX, key, 128/32); | |
*/ | |
function BlowFishInit(ctx, key, keysize) | |
{ | |
for(let Row = 0; Row < 4; Row++) | |
{ | |
ctx.sbox[Row] = []; | |
for(let Col = 0; Col < 256; Col++) | |
{ | |
ctx.sbox[Row][Col] = ORIG_S[Row][Col]; | |
} | |
} | |
let keyIndex = 0; | |
for(let index = 0; index < N + 2; index++) | |
{ | |
ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex]; | |
keyIndex++; | |
if(keyIndex >= keysize) | |
{ | |
keyIndex = 0; | |
} | |
} | |
let Data1 = 0; | |
let Data2 = 0; | |
let res = 0; | |
for(let i = 0; i < N + 2; i += 2) | |
{ | |
res = BlowFish_Encrypt(ctx, Data1, Data2); | |
Data1 = res.left; | |
Data2 = res.right; | |
ctx.pbox[i] = Data1; | |
ctx.pbox[i + 1] = Data2; | |
} | |
for(let i = 0; i < 4; i++) | |
{ | |
for(let j = 0; j < 256; j += 2) | |
{ | |
res = BlowFish_Encrypt(ctx, Data1, Data2); | |
Data1 = res.left; | |
Data2 = res.right; | |
ctx.sbox[i][j] = Data1; | |
ctx.sbox[i][j + 1] = Data2; | |
} | |
} | |
return true; | |
} | |
/** | |
* Blowfish block cipher algorithm. | |
*/ | |
var Blowfish = C_algo.Blowfish = BlockCipher.extend({ | |
_doReset: function () { | |
// Skip reset of nRounds has been set before and key did not change | |
if (this._keyPriorReset === this._key) { | |
return; | |
} | |
// Shortcuts | |
var key = this._keyPriorReset = this._key; | |
var keyWords = key.words; | |
var keySize = key.sigBytes / 4; | |
//Initialization pbox and sbox | |
BlowFishInit(BLOWFISH_CTX, keyWords, keySize); | |
}, | |
encryptBlock: function (M, offset) { | |
var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]); | |
M[offset] = res.left; | |
M[offset + 1] = res.right; | |
}, | |
decryptBlock: function (M, offset) { | |
var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]); | |
M[offset] = res.left; | |
M[offset + 1] = res.right; | |
}, | |
blockSize: 64/32, | |
keySize: 128/32, | |
ivSize: 64/32 | |
}); | |
/** | |
* Shortcut functions to the cipher's object interface. | |
* | |
* @example | |
* | |
* var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg); | |
* var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg); | |
*/ | |
C.Blowfish = BlockCipher._createHelper(Blowfish); | |
}()); | |
return CryptoJS.Blowfish; | |
})); | |
},{"./cipher-core":104,"./core":105,"./enc-base64":106,"./evpkdf":109,"./md5":114}],104:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./evpkdf")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./evpkdf"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** | |
* Cipher core components. | |
*/ | |
CryptoJS.lib.Cipher || (function (undefined) { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var Base = C_lib.Base; | |
var WordArray = C_lib.WordArray; | |
var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; | |
var C_enc = C.enc; | |
var Utf8 = C_enc.Utf8; | |
var Base64 = C_enc.Base64; | |
var C_algo = C.algo; | |
var EvpKDF = C_algo.EvpKDF; | |
/** | |
* Abstract base cipher template. | |
* | |
* @property {number} keySize This cipher's key size. Default: 4 (128 bits) | |
* @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) | |
* @property {number} _ENC_XFORM_MODE A constant representing encryption mode. | |
* @property {number} _DEC_XFORM_MODE A constant representing decryption mode. | |
*/ | |
var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ | |
/** | |
* Configuration options. | |
* | |
* @property {WordArray} iv The IV to use for this operation. | |
*/ | |
cfg: Base.extend(), | |
/** | |
* Creates this cipher in encryption mode. | |
* | |
* @param {WordArray} key The key. | |
* @param {Object} cfg (Optional) The configuration options to use for this operation. | |
* | |
* @return {Cipher} A cipher instance. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); | |
*/ | |
createEncryptor: function (key, cfg) { | |
return this.create(this._ENC_XFORM_MODE, key, cfg); | |
}, | |
/** | |
* Creates this cipher in decryption mode. | |
* | |
* @param {WordArray} key The key. | |
* @param {Object} cfg (Optional) The configuration options to use for this operation. | |
* | |
* @return {Cipher} A cipher instance. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); | |
*/ | |
createDecryptor: function (key, cfg) { | |
return this.create(this._DEC_XFORM_MODE, key, cfg); | |
}, | |
/** | |
* Initializes a newly created cipher. | |
* | |
* @param {number} xformMode Either the encryption or decryption transormation mode constant. | |
* @param {WordArray} key The key. | |
* @param {Object} cfg (Optional) The configuration options to use for this operation. | |
* | |
* @example | |
* | |
* var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); | |
*/ | |
init: function (xformMode, key, cfg) { | |
// Apply config defaults | |
this.cfg = this.cfg.extend(cfg); | |
// Store transform mode and key | |
this._xformMode = xformMode; | |
this._key = key; | |
// Set initial values | |
this.reset(); | |
}, | |
/** | |
* Resets this cipher to its initial state. | |
* | |
* @example | |
* | |
* cipher.reset(); | |
*/ | |
reset: function () { | |
// Reset data buffer | |
BufferedBlockAlgorithm.reset.call(this); | |
// Perform concrete-cipher logic | |
this._doReset(); | |
}, | |
/** | |
* Adds data to be encrypted or decrypted. | |
* | |
* @param {WordArray|string} dataUpdate The data to encrypt or decrypt. | |
* | |
* @return {WordArray} The data after processing. | |
* | |
* @example | |
* | |
* var encrypted = cipher.process('data'); | |
* var encrypted = cipher.process(wordArray); | |
*/ | |
process: function (dataUpdate) { | |
// Append | |
this._append(dataUpdate); | |
// Process available blocks | |
return this._process(); | |
}, | |
/** | |
* Finalizes the encryption or decryption process. | |
* Note that the finalize operation is effectively a destructive, read-once operation. | |
* | |
* @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. | |
* | |
* @return {WordArray} The data after final processing. | |
* | |
* @example | |
* | |
* var encrypted = cipher.finalize(); | |
* var encrypted = cipher.finalize('data'); | |
* var encrypted = cipher.finalize(wordArray); | |
*/ | |
finalize: function (dataUpdate) { | |
// Final data update | |
if (dataUpdate) { | |
this._append(dataUpdate); | |
} | |
// Perform concrete-cipher logic | |
var finalProcessedData = this._doFinalize(); | |
return finalProcessedData; | |
}, | |
keySize: 128/32, | |
ivSize: 128/32, | |
_ENC_XFORM_MODE: 1, | |
_DEC_XFORM_MODE: 2, | |
/** | |
* Creates shortcut functions to a cipher's object interface. | |
* | |
* @param {Cipher} cipher The cipher to create a helper for. | |
* | |
* @return {Object} An object with encrypt and decrypt shortcut functions. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); | |
*/ | |
_createHelper: (function () { | |
function selectCipherStrategy(key) { | |
if (typeof key == 'string') { | |
return PasswordBasedCipher; | |
} else { | |
return SerializableCipher; | |
} | |
} | |
return function (cipher) { | |
return { | |
encrypt: function (message, key, cfg) { | |
return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); | |
}, | |
decrypt: function (ciphertext, key, cfg) { | |
return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); | |
} | |
}; | |
}; | |
}()) | |
}); | |
/** | |
* Abstract base stream cipher template. | |
* | |
* @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) | |
*/ | |
var StreamCipher = C_lib.StreamCipher = Cipher.extend({ | |
_doFinalize: function () { | |
// Process partial blocks | |
var finalProcessedBlocks = this._process(!!'flush'); | |
return finalProcessedBlocks; | |
}, | |
blockSize: 1 | |
}); | |
/** | |
* Mode namespace. | |
*/ | |
var C_mode = C.mode = {}; | |
/** | |
* Abstract base block cipher mode template. | |
*/ | |
var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ | |
/** | |
* Creates this mode for encryption. | |
* | |
* @param {Cipher} cipher A block cipher instance. | |
* @param {Array} iv The IV words. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); | |
*/ | |
createEncryptor: function (cipher, iv) { | |
return this.Encryptor.create(cipher, iv); | |
}, | |
/** | |
* Creates this mode for decryption. | |
* | |
* @param {Cipher} cipher A block cipher instance. | |
* @param {Array} iv The IV words. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); | |
*/ | |
createDecryptor: function (cipher, iv) { | |
return this.Decryptor.create(cipher, iv); | |
}, | |
/** | |
* Initializes a newly created mode. | |
* | |
* @param {Cipher} cipher A block cipher instance. | |
* @param {Array} iv The IV words. | |
* | |
* @example | |
* | |
* var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); | |
*/ | |
init: function (cipher, iv) { | |
this._cipher = cipher; | |
this._iv = iv; | |
} | |
}); | |
/** | |
* Cipher Block Chaining mode. | |
*/ | |
var CBC = C_mode.CBC = (function () { | |
/** | |
* Abstract base CBC mode. | |
*/ | |
var CBC = BlockCipherMode.extend(); | |
/** | |
* CBC encryptor. | |
*/ | |
CBC.Encryptor = CBC.extend({ | |
/** | |
* Processes the data block at offset. | |
* | |
* @param {Array} words The data words to operate on. | |
* @param {number} offset The offset where the block starts. | |
* | |
* @example | |
* | |
* mode.processBlock(data.words, offset); | |
*/ | |
processBlock: function (words, offset) { | |
// Shortcuts | |
var cipher = this._cipher; | |
var blockSize = cipher.blockSize; | |
// XOR and encrypt | |
xorBlock.call(this, words, offset, blockSize); | |
cipher.encryptBlock(words, offset); | |
// Remember this block to use with next block | |
this._prevBlock = words.slice(offset, offset + blockSize); | |
} | |
}); | |
/** | |
* CBC decryptor. | |
*/ | |
CBC.Decryptor = CBC.extend({ | |
/** | |
* Processes the data block at offset. | |
* | |
* @param {Array} words The data words to operate on. | |
* @param {number} offset The offset where the block starts. | |
* | |
* @example | |
* | |
* mode.processBlock(data.words, offset); | |
*/ | |
processBlock: function (words, offset) { | |
// Shortcuts | |
var cipher = this._cipher; | |
var blockSize = cipher.blockSize; | |
// Remember this block to use with next block | |
var thisBlock = words.slice(offset, offset + blockSize); | |
// Decrypt and XOR | |
cipher.decryptBlock(words, offset); | |
xorBlock.call(this, words, offset, blockSize); | |
// This block becomes the previous block | |
this._prevBlock = thisBlock; | |
} | |
}); | |
function xorBlock(words, offset, blockSize) { | |
var block; | |
// Shortcut | |
var iv = this._iv; | |
// Choose mixing block | |
if (iv) { | |
block = iv; | |
// Remove IV for subsequent blocks | |
this._iv = undefined; | |
} else { | |
block = this._prevBlock; | |
} | |
// XOR blocks | |
for (var i = 0; i < blockSize; i++) { | |
words[offset + i] ^= block[i]; | |
} | |
} | |
return CBC; | |
}()); | |
/** | |
* Padding namespace. | |
*/ | |
var C_pad = C.pad = {}; | |
/** | |
* PKCS #5/7 padding strategy. | |
*/ | |
var Pkcs7 = C_pad.Pkcs7 = { | |
/** | |
* Pads data using the algorithm defined in PKCS #5/7. | |
* | |
* @param {WordArray} data The data to pad. | |
* @param {number} blockSize The multiple that the data should be padded to. | |
* | |
* @static | |
* | |
* @example | |
* | |
* CryptoJS.pad.Pkcs7.pad(wordArray, 4); | |
*/ | |
pad: function (data, blockSize) { | |
// Shortcut | |
var blockSizeBytes = blockSize * 4; | |
// Count padding bytes | |
var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; | |
// Create padding word | |
var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; | |
// Create padding | |
var paddingWords = []; | |
for (var i = 0; i < nPaddingBytes; i += 4) { | |
paddingWords.push(paddingWord); | |
} | |
var padding = WordArray.create(paddingWords, nPaddingBytes); | |
// Add padding | |
data.concat(padding); | |
}, | |
/** | |
* Unpads data that had been padded using the algorithm defined in PKCS #5/7. | |
* | |
* @param {WordArray} data The data to unpad. | |
* | |
* @static | |
* | |
* @example | |
* | |
* CryptoJS.pad.Pkcs7.unpad(wordArray); | |
*/ | |
unpad: function (data) { | |
// Get number of padding bytes from last byte | |
var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; | |
// Remove padding | |
data.sigBytes -= nPaddingBytes; | |
} | |
}; | |
/** | |
* Abstract base block cipher template. | |
* | |
* @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) | |
*/ | |
var BlockCipher = C_lib.BlockCipher = Cipher.extend({ | |
/** | |
* Configuration options. | |
* | |
* @property {Mode} mode The block mode to use. Default: CBC | |
* @property {Padding} padding The padding strategy to use. Default: Pkcs7 | |
*/ | |
cfg: Cipher.cfg.extend({ | |
mode: CBC, | |
padding: Pkcs7 | |
}), | |
reset: function () { | |
var modeCreator; | |
// Reset cipher | |
Cipher.reset.call(this); | |
// Shortcuts | |
var cfg = this.cfg; | |
var iv = cfg.iv; | |
var mode = cfg.mode; | |
// Reset block mode | |
if (this._xformMode == this._ENC_XFORM_MODE) { | |
modeCreator = mode.createEncryptor; | |
} else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { | |
modeCreator = mode.createDecryptor; | |
// Keep at least one block in the buffer for unpadding | |
this._minBufferSize = 1; | |
} | |
if (this._mode && this._mode.__creator == modeCreator) { | |
this._mode.init(this, iv && iv.words); | |
} else { | |
this._mode = modeCreator.call(mode, this, iv && iv.words); | |
this._mode.__creator = modeCreator; | |
} | |
}, | |
_doProcessBlock: function (words, offset) { | |
this._mode.processBlock(words, offset); | |
}, | |
_doFinalize: function () { | |
var finalProcessedBlocks; | |
// Shortcut | |
var padding = this.cfg.padding; | |
// Finalize | |
if (this._xformMode == this._ENC_XFORM_MODE) { | |
// Pad data | |
padding.pad(this._data, this.blockSize); | |
// Process final blocks | |
finalProcessedBlocks = this._process(!!'flush'); | |
} else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { | |
// Process final blocks | |
finalProcessedBlocks = this._process(!!'flush'); | |
// Unpad data | |
padding.unpad(finalProcessedBlocks); | |
} | |
return finalProcessedBlocks; | |
}, | |
blockSize: 128/32 | |
}); | |
/** | |
* A collection of cipher parameters. | |
* | |
* @property {WordArray} ciphertext The raw ciphertext. | |
* @property {WordArray} key The key to this ciphertext. | |
* @property {WordArray} iv The IV used in the ciphering operation. | |
* @property {WordArray} salt The salt used with a key derivation function. | |
* @property {Cipher} algorithm The cipher algorithm. | |
* @property {Mode} mode The block mode used in the ciphering operation. | |
* @property {Padding} padding The padding scheme used in the ciphering operation. | |
* @property {number} blockSize The block size of the cipher. | |
* @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. | |
*/ | |
var CipherParams = C_lib.CipherParams = Base.extend({ | |
/** | |
* Initializes a newly created cipher params object. | |
* | |
* @param {Object} cipherParams An object with any of the possible cipher parameters. | |
* | |
* @example | |
* | |
* var cipherParams = CryptoJS.lib.CipherParams.create({ | |
* ciphertext: ciphertextWordArray, | |
* key: keyWordArray, | |
* iv: ivWordArray, | |
* salt: saltWordArray, | |
* algorithm: CryptoJS.algo.AES, | |
* mode: CryptoJS.mode.CBC, | |
* padding: CryptoJS.pad.PKCS7, | |
* blockSize: 4, | |
* formatter: CryptoJS.format.OpenSSL | |
* }); | |
*/ | |
init: function (cipherParams) { | |
this.mixIn(cipherParams); | |
}, | |
/** | |
* Converts this cipher params object to a string. | |
* | |
* @param {Format} formatter (Optional) The formatting strategy to use. | |
* | |
* @return {string} The stringified cipher params. | |
* | |
* @throws Error If neither the formatter nor the default formatter is set. | |
* | |
* @example | |
* | |
* var string = cipherParams + ''; | |
* var string = cipherParams.toString(); | |
* var string = cipherParams.toString(CryptoJS.format.OpenSSL); | |
*/ | |
toString: function (formatter) { | |
return (formatter || this.formatter).stringify(this); | |
} | |
}); | |
/** | |
* Format namespace. | |
*/ | |
var C_format = C.format = {}; | |
/** | |
* OpenSSL formatting strategy. | |
*/ | |
var OpenSSLFormatter = C_format.OpenSSL = { | |
/** | |
* Converts a cipher params object to an OpenSSL-compatible string. | |
* | |
* @param {CipherParams} cipherParams The cipher params object. | |
* | |
* @return {string} The OpenSSL-compatible string. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); | |
*/ | |
stringify: function (cipherParams) { | |
var wordArray; | |
// Shortcuts | |
var ciphertext = cipherParams.ciphertext; | |
var salt = cipherParams.salt; | |
// Format | |
if (salt) { | |
wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); | |
} else { | |
wordArray = ciphertext; | |
} | |
return wordArray.toString(Base64); | |
}, | |
/** | |
* Converts an OpenSSL-compatible string to a cipher params object. | |
* | |
* @param {string} openSSLStr The OpenSSL-compatible string. | |
* | |
* @return {CipherParams} The cipher params object. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); | |
*/ | |
parse: function (openSSLStr) { | |
var salt; | |
// Parse base64 | |
var ciphertext = Base64.parse(openSSLStr); | |
// Shortcut | |
var ciphertextWords = ciphertext.words; | |
// Test for salt | |
if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { | |
// Extract salt | |
salt = WordArray.create(ciphertextWords.slice(2, 4)); | |
// Remove salt from ciphertext | |
ciphertextWords.splice(0, 4); | |
ciphertext.sigBytes -= 16; | |
} | |
return CipherParams.create({ ciphertext: ciphertext, salt: salt }); | |
} | |
}; | |
/** | |
* A cipher wrapper that returns ciphertext as a serializable cipher params object. | |
*/ | |
var SerializableCipher = C_lib.SerializableCipher = Base.extend({ | |
/** | |
* Configuration options. | |
* | |
* @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL | |
*/ | |
cfg: Base.extend({ | |
format: OpenSSLFormatter | |
}), | |
/** | |
* Encrypts a message. | |
* | |
* @param {Cipher} cipher The cipher algorithm to use. | |
* @param {WordArray|string} message The message to encrypt. | |
* @param {WordArray} key The key. | |
* @param {Object} cfg (Optional) The configuration options to use for this operation. | |
* | |
* @return {CipherParams} A cipher params object. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); | |
* var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); | |
* var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); | |
*/ | |
encrypt: function (cipher, message, key, cfg) { | |
// Apply config defaults | |
cfg = this.cfg.extend(cfg); | |
// Encrypt | |
var encryptor = cipher.createEncryptor(key, cfg); | |
var ciphertext = encryptor.finalize(message); | |
// Shortcut | |
var cipherCfg = encryptor.cfg; | |
// Create and return serializable cipher params | |
return CipherParams.create({ | |
ciphertext: ciphertext, | |
key: key, | |
iv: cipherCfg.iv, | |
algorithm: cipher, | |
mode: cipherCfg.mode, | |
padding: cipherCfg.padding, | |
blockSize: cipher.blockSize, | |
formatter: cfg.format | |
}); | |
}, | |
/** | |
* Decrypts serialized ciphertext. | |
* | |
* @param {Cipher} cipher The cipher algorithm to use. | |
* @param {CipherParams|string} ciphertext The ciphertext to decrypt. | |
* @param {WordArray} key The key. | |
* @param {Object} cfg (Optional) The configuration options to use for this operation. | |
* | |
* @return {WordArray} The plaintext. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); | |
* var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); | |
*/ | |
decrypt: function (cipher, ciphertext, key, cfg) { | |
// Apply config defaults | |
cfg = this.cfg.extend(cfg); | |
// Convert string to CipherParams | |
ciphertext = this._parse(ciphertext, cfg.format); | |
// Decrypt | |
var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); | |
return plaintext; | |
}, | |
/** | |
* Converts serialized ciphertext to CipherParams, | |
* else assumed CipherParams already and returns ciphertext unchanged. | |
* | |
* @param {CipherParams|string} ciphertext The ciphertext. | |
* @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. | |
* | |
* @return {CipherParams} The unserialized ciphertext. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); | |
*/ | |
_parse: function (ciphertext, format) { | |
if (typeof ciphertext == 'string') { | |
return format.parse(ciphertext, this); | |
} else { | |
return ciphertext; | |
} | |
} | |
}); | |
/** | |
* Key derivation function namespace. | |
*/ | |
var C_kdf = C.kdf = {}; | |
/** | |
* OpenSSL key derivation function. | |
*/ | |
var OpenSSLKdf = C_kdf.OpenSSL = { | |
/** | |
* Derives a key and IV from a password. | |
* | |
* @param {string} password The password to derive from. | |
* @param {number} keySize The size in words of the key to generate. | |
* @param {number} ivSize The size in words of the IV to generate. | |
* @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. | |
* | |
* @return {CipherParams} A cipher params object with the key, IV, and salt. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); | |
* var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); | |
*/ | |
execute: function (password, keySize, ivSize, salt, hasher) { | |
// Generate random salt | |
if (!salt) { | |
salt = WordArray.random(64/8); | |
} | |
// Derive key and IV | |
if (!hasher) { | |
var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); | |
} else { | |
var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt); | |
} | |
// Separate key and IV | |
var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); | |
key.sigBytes = keySize * 4; | |
// Return params | |
return CipherParams.create({ key: key, iv: iv, salt: salt }); | |
} | |
}; | |
/** | |
* A serializable cipher wrapper that derives the key from a password, | |
* and returns ciphertext as a serializable cipher params object. | |
*/ | |
var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ | |
/** | |
* Configuration options. | |
* | |
* @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL | |
*/ | |
cfg: SerializableCipher.cfg.extend({ | |
kdf: OpenSSLKdf | |
}), | |
/** | |
* Encrypts a message using a password. | |
* | |
* @param {Cipher} cipher The cipher algorithm to use. | |
* @param {WordArray|string} message The message to encrypt. | |
* @param {string} password The password. | |
* @param {Object} cfg (Optional) The configuration options to use for this operation. | |
* | |
* @return {CipherParams} A cipher params object. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); | |
* var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); | |
*/ | |
encrypt: function (cipher, message, password, cfg) { | |
// Apply config defaults | |
cfg = this.cfg.extend(cfg); | |
// Derive key and other params | |
var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher); | |
// Add IV to config | |
cfg.iv = derivedParams.iv; | |
// Encrypt | |
var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); | |
// Mix in derived params | |
ciphertext.mixIn(derivedParams); | |
return ciphertext; | |
}, | |
/** | |
* Decrypts serialized ciphertext using a password. | |
* | |
* @param {Cipher} cipher The cipher algorithm to use. | |
* @param {CipherParams|string} ciphertext The ciphertext to decrypt. | |
* @param {string} password The password. | |
* @param {Object} cfg (Optional) The configuration options to use for this operation. | |
* | |
* @return {WordArray} The plaintext. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); | |
* var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); | |
*/ | |
decrypt: function (cipher, ciphertext, password, cfg) { | |
// Apply config defaults | |
cfg = this.cfg.extend(cfg); | |
// Convert string to CipherParams | |
ciphertext = this._parse(ciphertext, cfg.format); | |
// Derive key and other params | |
var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher); | |
// Add IV to config | |
cfg.iv = derivedParams.iv; | |
// Decrypt | |
var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); | |
return plaintext; | |
} | |
}); | |
}()); | |
})); | |
},{"./core":105,"./evpkdf":109}],105:[function(require,module,exports){ | |
(function (global){(function (){ | |
;(function (root, factory) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define([], factory); | |
} | |
else { | |
// Global (browser) | |
root.CryptoJS = factory(); | |
} | |
}(this, function () { | |
/*globals window, global, require*/ | |
/** | |
* CryptoJS core components. | |
*/ | |
var CryptoJS = CryptoJS || (function (Math, undefined) { | |
var crypto; | |
// Native crypto from window (Browser) | |
if (typeof window !== 'undefined' && window.crypto) { | |
crypto = window.crypto; | |
} | |
// Native crypto in web worker (Browser) | |
if (typeof self !== 'undefined' && self.crypto) { | |
crypto = self.crypto; | |
} | |
// Native crypto from worker | |
if (typeof globalThis !== 'undefined' && globalThis.crypto) { | |
crypto = globalThis.crypto; | |
} | |
// Native (experimental IE 11) crypto from window (Browser) | |
if (!crypto && typeof window !== 'undefined' && window.msCrypto) { | |
crypto = window.msCrypto; | |
} | |
// Native crypto from global (NodeJS) | |
if (!crypto && typeof global !== 'undefined' && global.crypto) { | |
crypto = global.crypto; | |
} | |
// Native crypto import via require (NodeJS) | |
if (!crypto && typeof require === 'function') { | |
try { | |
crypto = require('crypto'); | |
} catch (err) {} | |
} | |
/* | |
* Cryptographically secure pseudorandom number generator | |
* | |
* As Math.random() is cryptographically not safe to use | |
*/ | |
var cryptoSecureRandomInt = function () { | |
if (crypto) { | |
// Use getRandomValues method (Browser) | |
if (typeof crypto.getRandomValues === 'function') { | |
try { | |
return crypto.getRandomValues(new Uint32Array(1))[0]; | |
} catch (err) {} | |
} | |
// Use randomBytes method (NodeJS) | |
if (typeof crypto.randomBytes === 'function') { | |
try { | |
return crypto.randomBytes(4).readInt32LE(); | |
} catch (err) {} | |
} | |
} | |
throw new Error('Native crypto module could not be used to get secure random number.'); | |
}; | |
/* | |
* Local polyfill of Object.create | |
*/ | |
var create = Object.create || (function () { | |
function F() {} | |
return function (obj) { | |
var subtype; | |
F.prototype = obj; | |
subtype = new F(); | |
F.prototype = null; | |
return subtype; | |
}; | |
}()); | |
/** | |
* CryptoJS namespace. | |
*/ | |
var C = {}; | |
/** | |
* Library namespace. | |
*/ | |
var C_lib = C.lib = {}; | |
/** | |
* Base object for prototypal inheritance. | |
*/ | |
var Base = C_lib.Base = (function () { | |
return { | |
/** | |
* Creates a new object that inherits from this object. | |
* | |
* @param {Object} overrides Properties to copy into the new object. | |
* | |
* @return {Object} The new object. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var MyType = CryptoJS.lib.Base.extend({ | |
* field: 'value', | |
* | |
* method: function () { | |
* } | |
* }); | |
*/ | |
extend: function (overrides) { | |
// Spawn | |
var subtype = create(this); | |
// Augment | |
if (overrides) { | |
subtype.mixIn(overrides); | |
} | |
// Create default initializer | |
if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { | |
subtype.init = function () { | |
subtype.$super.init.apply(this, arguments); | |
}; | |
} | |
// Initializer's prototype is the subtype object | |
subtype.init.prototype = subtype; | |
// Reference supertype | |
subtype.$super = this; | |
return subtype; | |
}, | |
/** | |
* Extends this object and runs the init method. | |
* Arguments to create() will be passed to init(). | |
* | |
* @return {Object} The new object. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var instance = MyType.create(); | |
*/ | |
create: function () { | |
var instance = this.extend(); | |
instance.init.apply(instance, arguments); | |
return instance; | |
}, | |
/** | |
* Initializes a newly created object. | |
* Override this method to add some logic when your objects are created. | |
* | |
* @example | |
* | |
* var MyType = CryptoJS.lib.Base.extend({ | |
* init: function () { | |
* // ... | |
* } | |
* }); | |
*/ | |
init: function () { | |
}, | |
/** | |
* Copies properties into this object. | |
* | |
* @param {Object} properties The properties to mix in. | |
* | |
* @example | |
* | |
* MyType.mixIn({ | |
* field: 'value' | |
* }); | |
*/ | |
mixIn: function (properties) { | |
for (var propertyName in properties) { | |
if (properties.hasOwnProperty(propertyName)) { | |
this[propertyName] = properties[propertyName]; | |
} | |
} | |
// IE won't copy toString using the loop above | |
if (properties.hasOwnProperty('toString')) { | |
this.toString = properties.toString; | |
} | |
}, | |
/** | |
* Creates a copy of this object. | |
* | |
* @return {Object} The clone. | |
* | |
* @example | |
* | |
* var clone = instance.clone(); | |
*/ | |
clone: function () { | |
return this.init.prototype.extend(this); | |
} | |
}; | |
}()); | |
/** | |
* An array of 32-bit words. | |
* | |
* @property {Array} words The array of 32-bit words. | |
* @property {number} sigBytes The number of significant bytes in this word array. | |
*/ | |
var WordArray = C_lib.WordArray = Base.extend({ | |
/** | |
* Initializes a newly created word array. | |
* | |
* @param {Array} words (Optional) An array of 32-bit words. | |
* @param {number} sigBytes (Optional) The number of significant bytes in the words. | |
* | |
* @example | |
* | |
* var wordArray = CryptoJS.lib.WordArray.create(); | |
* var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); | |
* var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); | |
*/ | |
init: function (words, sigBytes) { | |
words = this.words = words || []; | |
if (sigBytes != undefined) { | |
this.sigBytes = sigBytes; | |
} else { | |
this.sigBytes = words.length * 4; | |
} | |
}, | |
/** | |
* Converts this word array to a string. | |
* | |
* @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex | |
* | |
* @return {string} The stringified word array. | |
* | |
* @example | |
* | |
* var string = wordArray + ''; | |
* var string = wordArray.toString(); | |
* var string = wordArray.toString(CryptoJS.enc.Utf8); | |
*/ | |
toString: function (encoder) { | |
return (encoder || Hex).stringify(this); | |
}, | |
/** | |
* Concatenates a word array to this word array. | |
* | |
* @param {WordArray} wordArray The word array to append. | |
* | |
* @return {WordArray} This word array. | |
* | |
* @example | |
* | |
* wordArray1.concat(wordArray2); | |
*/ | |
concat: function (wordArray) { | |
// Shortcuts | |
var thisWords = this.words; | |
var thatWords = wordArray.words; | |
var thisSigBytes = this.sigBytes; | |
var thatSigBytes = wordArray.sigBytes; | |
// Clamp excess bits | |
this.clamp(); | |
// Concat | |
if (thisSigBytes % 4) { | |
// Copy one byte at a time | |
for (var i = 0; i < thatSigBytes; i++) { | |
var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; | |
thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); | |
} | |
} else { | |
// Copy one word at a time | |
for (var j = 0; j < thatSigBytes; j += 4) { | |
thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2]; | |
} | |
} | |
this.sigBytes += thatSigBytes; | |
// Chainable | |
return this; | |
}, | |
/** | |
* Removes insignificant bits. | |
* | |
* @example | |
* | |
* wordArray.clamp(); | |
*/ | |
clamp: function () { | |
// Shortcuts | |
var words = this.words; | |
var sigBytes = this.sigBytes; | |
// Clamp | |
words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); | |
words.length = Math.ceil(sigBytes / 4); | |
}, | |
/** | |
* Creates a copy of this word array. | |
* | |
* @return {WordArray} The clone. | |
* | |
* @example | |
* | |
* var clone = wordArray.clone(); | |
*/ | |
clone: function () { | |
var clone = Base.clone.call(this); | |
clone.words = this.words.slice(0); | |
return clone; | |
}, | |
/** | |
* Creates a word array filled with random bytes. | |
* | |
* @param {number} nBytes The number of random bytes to generate. | |
* | |
* @return {WordArray} The random word array. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var wordArray = CryptoJS.lib.WordArray.random(16); | |
*/ | |
random: function (nBytes) { | |
var words = []; | |
for (var i = 0; i < nBytes; i += 4) { | |
words.push(cryptoSecureRandomInt()); | |
} | |
return new WordArray.init(words, nBytes); | |
} | |
}); | |
/** | |
* Encoder namespace. | |
*/ | |
var C_enc = C.enc = {}; | |
/** | |
* Hex encoding strategy. | |
*/ | |
var Hex = C_enc.Hex = { | |
/** | |
* Converts a word array to a hex string. | |
* | |
* @param {WordArray} wordArray The word array. | |
* | |
* @return {string} The hex string. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hexString = CryptoJS.enc.Hex.stringify(wordArray); | |
*/ | |
stringify: function (wordArray) { | |
// Shortcuts | |
var words = wordArray.words; | |
var sigBytes = wordArray.sigBytes; | |
// Convert | |
var hexChars = []; | |
for (var i = 0; i < sigBytes; i++) { | |
var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; | |
hexChars.push((bite >>> 4).toString(16)); | |
hexChars.push((bite & 0x0f).toString(16)); | |
} | |
return hexChars.join(''); | |
}, | |
/** | |
* Converts a hex string to a word array. | |
* | |
* @param {string} hexStr The hex string. | |
* | |
* @return {WordArray} The word array. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var wordArray = CryptoJS.enc.Hex.parse(hexString); | |
*/ | |
parse: function (hexStr) { | |
// Shortcut | |
var hexStrLength = hexStr.length; | |
// Convert | |
var words = []; | |
for (var i = 0; i < hexStrLength; i += 2) { | |
words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); | |
} | |
return new WordArray.init(words, hexStrLength / 2); | |
} | |
}; | |
/** | |
* Latin1 encoding strategy. | |
*/ | |
var Latin1 = C_enc.Latin1 = { | |
/** | |
* Converts a word array to a Latin1 string. | |
* | |
* @param {WordArray} wordArray The word array. | |
* | |
* @return {string} The Latin1 string. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); | |
*/ | |
stringify: function (wordArray) { | |
// Shortcuts | |
var words = wordArray.words; | |
var sigBytes = wordArray.sigBytes; | |
// Convert | |
var latin1Chars = []; | |
for (var i = 0; i < sigBytes; i++) { | |
var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; | |
latin1Chars.push(String.fromCharCode(bite)); | |
} | |
return latin1Chars.join(''); | |
}, | |
/** | |
* Converts a Latin1 string to a word array. | |
* | |
* @param {string} latin1Str The Latin1 string. | |
* | |
* @return {WordArray} The word array. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var wordArray = CryptoJS.enc.Latin1.parse(latin1String); | |
*/ | |
parse: function (latin1Str) { | |
// Shortcut | |
var latin1StrLength = latin1Str.length; | |
// Convert | |
var words = []; | |
for (var i = 0; i < latin1StrLength; i++) { | |
words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); | |
} | |
return new WordArray.init(words, latin1StrLength); | |
} | |
}; | |
/** | |
* UTF-8 encoding strategy. | |
*/ | |
var Utf8 = C_enc.Utf8 = { | |
/** | |
* Converts a word array to a UTF-8 string. | |
* | |
* @param {WordArray} wordArray The word array. | |
* | |
* @return {string} The UTF-8 string. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); | |
*/ | |
stringify: function (wordArray) { | |
try { | |
return decodeURIComponent(escape(Latin1.stringify(wordArray))); | |
} catch (e) { | |
throw new Error('Malformed UTF-8 data'); | |
} | |
}, | |
/** | |
* Converts a UTF-8 string to a word array. | |
* | |
* @param {string} utf8Str The UTF-8 string. | |
* | |
* @return {WordArray} The word array. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var wordArray = CryptoJS.enc.Utf8.parse(utf8String); | |
*/ | |
parse: function (utf8Str) { | |
return Latin1.parse(unescape(encodeURIComponent(utf8Str))); | |
} | |
}; | |
/** | |
* Abstract buffered block algorithm template. | |
* | |
* The property blockSize must be implemented in a concrete subtype. | |
* | |
* @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 | |
*/ | |
var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ | |
/** | |
* Resets this block algorithm's data buffer to its initial state. | |
* | |
* @example | |
* | |
* bufferedBlockAlgorithm.reset(); | |
*/ | |
reset: function () { | |
// Initial values | |
this._data = new WordArray.init(); | |
this._nDataBytes = 0; | |
}, | |
/** | |
* Adds new data to this block algorithm's buffer. | |
* | |
* @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. | |
* | |
* @example | |
* | |
* bufferedBlockAlgorithm._append('data'); | |
* bufferedBlockAlgorithm._append(wordArray); | |
*/ | |
_append: function (data) { | |
// Convert string to WordArray, else assume WordArray already | |
if (typeof data == 'string') { | |
data = Utf8.parse(data); | |
} | |
// Append | |
this._data.concat(data); | |
this._nDataBytes += data.sigBytes; | |
}, | |
/** | |
* Processes available data blocks. | |
* | |
* This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. | |
* | |
* @param {boolean} doFlush Whether all blocks and partial blocks should be processed. | |
* | |
* @return {WordArray} The processed data. | |
* | |
* @example | |
* | |
* var processedData = bufferedBlockAlgorithm._process(); | |
* var processedData = bufferedBlockAlgorithm._process(!!'flush'); | |
*/ | |
_process: function (doFlush) { | |
var processedWords; | |
// Shortcuts | |
var data = this._data; | |
var dataWords = data.words; | |
var dataSigBytes = data.sigBytes; | |
var blockSize = this.blockSize; | |
var blockSizeBytes = blockSize * 4; | |
// Count blocks ready | |
var nBlocksReady = dataSigBytes / blockSizeBytes; | |
if (doFlush) { | |
// Round up to include partial blocks | |
nBlocksReady = Math.ceil(nBlocksReady); | |
} else { | |
// Round down to include only full blocks, | |
// less the number of blocks that must remain in the buffer | |
nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); | |
} | |
// Count words ready | |
var nWordsReady = nBlocksReady * blockSize; | |
// Count bytes ready | |
var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); | |
// Process blocks | |
if (nWordsReady) { | |
for (var offset = 0; offset < nWordsReady; offset += blockSize) { | |
// Perform concrete-algorithm logic | |
this._doProcessBlock(dataWords, offset); | |
} | |
// Remove processed words | |
processedWords = dataWords.splice(0, nWordsReady); | |
data.sigBytes -= nBytesReady; | |
} | |
// Return processed words | |
return new WordArray.init(processedWords, nBytesReady); | |
}, | |
/** | |
* Creates a copy of this object. | |
* | |
* @return {Object} The clone. | |
* | |
* @example | |
* | |
* var clone = bufferedBlockAlgorithm.clone(); | |
*/ | |
clone: function () { | |
var clone = Base.clone.call(this); | |
clone._data = this._data.clone(); | |
return clone; | |
}, | |
_minBufferSize: 0 | |
}); | |
/** | |
* Abstract hasher template. | |
* | |
* @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) | |
*/ | |
var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ | |
/** | |
* Configuration options. | |
*/ | |
cfg: Base.extend(), | |
/** | |
* Initializes a newly created hasher. | |
* | |
* @param {Object} cfg (Optional) The configuration options to use for this hash computation. | |
* | |
* @example | |
* | |
* var hasher = CryptoJS.algo.SHA256.create(); | |
*/ | |
init: function (cfg) { | |
// Apply config defaults | |
this.cfg = this.cfg.extend(cfg); | |
// Set initial values | |
this.reset(); | |
}, | |
/** | |
* Resets this hasher to its initial state. | |
* | |
* @example | |
* | |
* hasher.reset(); | |
*/ | |
reset: function () { | |
// Reset data buffer | |
BufferedBlockAlgorithm.reset.call(this); | |
// Perform concrete-hasher logic | |
this._doReset(); | |
}, | |
/** | |
* Updates this hasher with a message. | |
* | |
* @param {WordArray|string} messageUpdate The message to append. | |
* | |
* @return {Hasher} This hasher. | |
* | |
* @example | |
* | |
* hasher.update('message'); | |
* hasher.update(wordArray); | |
*/ | |
update: function (messageUpdate) { | |
// Append | |
this._append(messageUpdate); | |
// Update the hash | |
this._process(); | |
// Chainable | |
return this; | |
}, | |
/** | |
* Finalizes the hash computation. | |
* Note that the finalize operation is effectively a destructive, read-once operation. | |
* | |
* @param {WordArray|string} messageUpdate (Optional) A final message update. | |
* | |
* @return {WordArray} The hash. | |
* | |
* @example | |
* | |
* var hash = hasher.finalize(); | |
* var hash = hasher.finalize('message'); | |
* var hash = hasher.finalize(wordArray); | |
*/ | |
finalize: function (messageUpdate) { | |
// Final message update | |
if (messageUpdate) { | |
this._append(messageUpdate); | |
} | |
// Perform concrete-hasher logic | |
var hash = this._doFinalize(); | |
return hash; | |
}, | |
blockSize: 512/32, | |
/** | |
* Creates a shortcut function to a hasher's object interface. | |
* | |
* @param {Hasher} hasher The hasher to create a helper for. | |
* | |
* @return {Function} The shortcut function. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); | |
*/ | |
_createHelper: function (hasher) { | |
return function (message, cfg) { | |
return new hasher.init(cfg).finalize(message); | |
}; | |
}, | |
/** | |
* Creates a shortcut function to the HMAC's object interface. | |
* | |
* @param {Hasher} hasher The hasher to use in this HMAC helper. | |
* | |
* @return {Function} The shortcut function. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); | |
*/ | |
_createHmacHelper: function (hasher) { | |
return function (message, key) { | |
return new C_algo.HMAC.init(hasher, key).finalize(message); | |
}; | |
} | |
}); | |
/** | |
* Algorithm namespace. | |
*/ | |
var C_algo = C.algo = {}; | |
return C; | |
}(Math)); | |
return CryptoJS; | |
})); | |
}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | |
},{"crypto":264}],106:[function(require,module,exports){ | |
;(function (root, factory) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var WordArray = C_lib.WordArray; | |
var C_enc = C.enc; | |
/** | |
* Base64 encoding strategy. | |
*/ | |
var Base64 = C_enc.Base64 = { | |
/** | |
* Converts a word array to a Base64 string. | |
* | |
* @param {WordArray} wordArray The word array. | |
* | |
* @return {string} The Base64 string. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var base64String = CryptoJS.enc.Base64.stringify(wordArray); | |
*/ | |
stringify: function (wordArray) { | |
// Shortcuts | |
var words = wordArray.words; | |
var sigBytes = wordArray.sigBytes; | |
var map = this._map; | |
// Clamp excess bits | |
wordArray.clamp(); | |
// Convert | |
var base64Chars = []; | |
for (var i = 0; i < sigBytes; i += 3) { | |
var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; | |
var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; | |
var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; | |
var triplet = (byte1 << 16) | (byte2 << 8) | byte3; | |
for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { | |
base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); | |
} | |
} | |
// Add padding | |
var paddingChar = map.charAt(64); | |
if (paddingChar) { | |
while (base64Chars.length % 4) { | |
base64Chars.push(paddingChar); | |
} | |
} | |
return base64Chars.join(''); | |
}, | |
/** | |
* Converts a Base64 string to a word array. | |
* | |
* @param {string} base64Str The Base64 string. | |
* | |
* @return {WordArray} The word array. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var wordArray = CryptoJS.enc.Base64.parse(base64String); | |
*/ | |
parse: function (base64Str) { | |
// Shortcuts | |
var base64StrLength = base64Str.length; | |
var map = this._map; | |
var reverseMap = this._reverseMap; | |
if (!reverseMap) { | |
reverseMap = this._reverseMap = []; | |
for (var j = 0; j < map.length; j++) { | |
reverseMap[map.charCodeAt(j)] = j; | |
} | |
} | |
// Ignore padding | |
var paddingChar = map.charAt(64); | |
if (paddingChar) { | |
var paddingIndex = base64Str.indexOf(paddingChar); | |
if (paddingIndex !== -1) { | |
base64StrLength = paddingIndex; | |
} | |
} | |
// Convert | |
return parseLoop(base64Str, base64StrLength, reverseMap); | |
}, | |
_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' | |
}; | |
function parseLoop(base64Str, base64StrLength, reverseMap) { | |
var words = []; | |
var nBytes = 0; | |
for (var i = 0; i < base64StrLength; i++) { | |
if (i % 4) { | |
var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); | |
var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); | |
var bitsCombined = bits1 | bits2; | |
words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); | |
nBytes++; | |
} | |
} | |
return WordArray.create(words, nBytes); | |
} | |
}()); | |
return CryptoJS.enc.Base64; | |
})); | |
},{"./core":105}],107:[function(require,module,exports){ | |
;(function (root, factory) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var WordArray = C_lib.WordArray; | |
var C_enc = C.enc; | |
/** | |
* Base64url encoding strategy. | |
*/ | |
var Base64url = C_enc.Base64url = { | |
/** | |
* Converts a word array to a Base64url string. | |
* | |
* @param {WordArray} wordArray The word array. | |
* | |
* @param {boolean} urlSafe Whether to use url safe | |
* | |
* @return {string} The Base64url string. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var base64String = CryptoJS.enc.Base64url.stringify(wordArray); | |
*/ | |
stringify: function (wordArray, urlSafe) { | |
if (urlSafe === undefined) { | |
urlSafe = true | |
} | |
// Shortcuts | |
var words = wordArray.words; | |
var sigBytes = wordArray.sigBytes; | |
var map = urlSafe ? this._safe_map : this._map; | |
// Clamp excess bits | |
wordArray.clamp(); | |
// Convert | |
var base64Chars = []; | |
for (var i = 0; i < sigBytes; i += 3) { | |
var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; | |
var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; | |
var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; | |
var triplet = (byte1 << 16) | (byte2 << 8) | byte3; | |
for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { | |
base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); | |
} | |
} | |
// Add padding | |
var paddingChar = map.charAt(64); | |
if (paddingChar) { | |
while (base64Chars.length % 4) { | |
base64Chars.push(paddingChar); | |
} | |
} | |
return base64Chars.join(''); | |
}, | |
/** | |
* Converts a Base64url string to a word array. | |
* | |
* @param {string} base64Str The Base64url string. | |
* | |
* @param {boolean} urlSafe Whether to use url safe | |
* | |
* @return {WordArray} The word array. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var wordArray = CryptoJS.enc.Base64url.parse(base64String); | |
*/ | |
parse: function (base64Str, urlSafe) { | |
if (urlSafe === undefined) { | |
urlSafe = true | |
} | |
// Shortcuts | |
var base64StrLength = base64Str.length; | |
var map = urlSafe ? this._safe_map : this._map; | |
var reverseMap = this._reverseMap; | |
if (!reverseMap) { | |
reverseMap = this._reverseMap = []; | |
for (var j = 0; j < map.length; j++) { | |
reverseMap[map.charCodeAt(j)] = j; | |
} | |
} | |
// Ignore padding | |
var paddingChar = map.charAt(64); | |
if (paddingChar) { | |
var paddingIndex = base64Str.indexOf(paddingChar); | |
if (paddingIndex !== -1) { | |
base64StrLength = paddingIndex; | |
} | |
} | |
// Convert | |
return parseLoop(base64Str, base64StrLength, reverseMap); | |
}, | |
_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', | |
_safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', | |
}; | |
function parseLoop(base64Str, base64StrLength, reverseMap) { | |
var words = []; | |
var nBytes = 0; | |
for (var i = 0; i < base64StrLength; i++) { | |
if (i % 4) { | |
var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); | |
var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); | |
var bitsCombined = bits1 | bits2; | |
words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); | |
nBytes++; | |
} | |
} | |
return WordArray.create(words, nBytes); | |
} | |
}()); | |
return CryptoJS.enc.Base64url; | |
})); | |
},{"./core":105}],108:[function(require,module,exports){ | |
;(function (root, factory) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var WordArray = C_lib.WordArray; | |
var C_enc = C.enc; | |
/** | |
* UTF-16 BE encoding strategy. | |
*/ | |
var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { | |
/** | |
* Converts a word array to a UTF-16 BE string. | |
* | |
* @param {WordArray} wordArray The word array. | |
* | |
* @return {string} The UTF-16 BE string. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); | |
*/ | |
stringify: function (wordArray) { | |
// Shortcuts | |
var words = wordArray.words; | |
var sigBytes = wordArray.sigBytes; | |
// Convert | |
var utf16Chars = []; | |
for (var i = 0; i < sigBytes; i += 2) { | |
var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; | |
utf16Chars.push(String.fromCharCode(codePoint)); | |
} | |
return utf16Chars.join(''); | |
}, | |
/** | |
* Converts a UTF-16 BE string to a word array. | |
* | |
* @param {string} utf16Str The UTF-16 BE string. | |
* | |
* @return {WordArray} The word array. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var wordArray = CryptoJS.enc.Utf16.parse(utf16String); | |
*/ | |
parse: function (utf16Str) { | |
// Shortcut | |
var utf16StrLength = utf16Str.length; | |
// Convert | |
var words = []; | |
for (var i = 0; i < utf16StrLength; i++) { | |
words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); | |
} | |
return WordArray.create(words, utf16StrLength * 2); | |
} | |
}; | |
/** | |
* UTF-16 LE encoding strategy. | |
*/ | |
C_enc.Utf16LE = { | |
/** | |
* Converts a word array to a UTF-16 LE string. | |
* | |
* @param {WordArray} wordArray The word array. | |
* | |
* @return {string} The UTF-16 LE string. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); | |
*/ | |
stringify: function (wordArray) { | |
// Shortcuts | |
var words = wordArray.words; | |
var sigBytes = wordArray.sigBytes; | |
// Convert | |
var utf16Chars = []; | |
for (var i = 0; i < sigBytes; i += 2) { | |
var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); | |
utf16Chars.push(String.fromCharCode(codePoint)); | |
} | |
return utf16Chars.join(''); | |
}, | |
/** | |
* Converts a UTF-16 LE string to a word array. | |
* | |
* @param {string} utf16Str The UTF-16 LE string. | |
* | |
* @return {WordArray} The word array. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); | |
*/ | |
parse: function (utf16Str) { | |
// Shortcut | |
var utf16StrLength = utf16Str.length; | |
// Convert | |
var words = []; | |
for (var i = 0; i < utf16StrLength; i++) { | |
words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); | |
} | |
return WordArray.create(words, utf16StrLength * 2); | |
} | |
}; | |
function swapEndian(word) { | |
return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); | |
} | |
}()); | |
return CryptoJS.enc.Utf16; | |
})); | |
},{"./core":105}],109:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./sha1", "./hmac"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var Base = C_lib.Base; | |
var WordArray = C_lib.WordArray; | |
var C_algo = C.algo; | |
var MD5 = C_algo.MD5; | |
/** | |
* This key derivation function is meant to conform with EVP_BytesToKey. | |
* www.openssl.org/docs/crypto/EVP_BytesToKey.html | |
*/ | |
var EvpKDF = C_algo.EvpKDF = Base.extend({ | |
/** | |
* Configuration options. | |
* | |
* @property {number} keySize The key size in words to generate. Default: 4 (128 bits) | |
* @property {Hasher} hasher The hash algorithm to use. Default: MD5 | |
* @property {number} iterations The number of iterations to perform. Default: 1 | |
*/ | |
cfg: Base.extend({ | |
keySize: 128/32, | |
hasher: MD5, | |
iterations: 1 | |
}), | |
/** | |
* Initializes a newly created key derivation function. | |
* | |
* @param {Object} cfg (Optional) The configuration options to use for the derivation. | |
* | |
* @example | |
* | |
* var kdf = CryptoJS.algo.EvpKDF.create(); | |
* var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); | |
* var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); | |
*/ | |
init: function (cfg) { | |
this.cfg = this.cfg.extend(cfg); | |
}, | |
/** | |
* Derives a key from a password. | |
* | |
* @param {WordArray|string} password The password. | |
* @param {WordArray|string} salt A salt. | |
* | |
* @return {WordArray} The derived key. | |
* | |
* @example | |
* | |
* var key = kdf.compute(password, salt); | |
*/ | |
compute: function (password, salt) { | |
var block; | |
// Shortcut | |
var cfg = this.cfg; | |
// Init hasher | |
var hasher = cfg.hasher.create(); | |
// Initial values | |
var derivedKey = WordArray.create(); | |
// Shortcuts | |
var derivedKeyWords = derivedKey.words; | |
var keySize = cfg.keySize; | |
var iterations = cfg.iterations; | |
// Generate key | |
while (derivedKeyWords.length < keySize) { | |
if (block) { | |
hasher.update(block); | |
} | |
block = hasher.update(password).finalize(salt); | |
hasher.reset(); | |
// Iterations | |
for (var i = 1; i < iterations; i++) { | |
block = hasher.finalize(block); | |
hasher.reset(); | |
} | |
derivedKey.concat(block); | |
} | |
derivedKey.sigBytes = keySize * 4; | |
return derivedKey; | |
} | |
}); | |
/** | |
* Derives a key from a password. | |
* | |
* @param {WordArray|string} password The password. | |
* @param {WordArray|string} salt A salt. | |
* @param {Object} cfg (Optional) The configuration options to use for this computation. | |
* | |
* @return {WordArray} The derived key. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var key = CryptoJS.EvpKDF(password, salt); | |
* var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); | |
* var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); | |
*/ | |
C.EvpKDF = function (password, salt, cfg) { | |
return EvpKDF.create(cfg).compute(password, salt); | |
}; | |
}()); | |
return CryptoJS.EvpKDF; | |
})); | |
},{"./core":105,"./hmac":111,"./sha1":130}],110:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function (undefined) { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var CipherParams = C_lib.CipherParams; | |
var C_enc = C.enc; | |
var Hex = C_enc.Hex; | |
var C_format = C.format; | |
var HexFormatter = C_format.Hex = { | |
/** | |
* Converts the ciphertext of a cipher params object to a hexadecimally encoded string. | |
* | |
* @param {CipherParams} cipherParams The cipher params object. | |
* | |
* @return {string} The hexadecimally encoded string. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hexString = CryptoJS.format.Hex.stringify(cipherParams); | |
*/ | |
stringify: function (cipherParams) { | |
return cipherParams.ciphertext.toString(Hex); | |
}, | |
/** | |
* Converts a hexadecimally encoded ciphertext string to a cipher params object. | |
* | |
* @param {string} input The hexadecimally encoded string. | |
* | |
* @return {CipherParams} The cipher params object. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var cipherParams = CryptoJS.format.Hex.parse(hexString); | |
*/ | |
parse: function (input) { | |
var ciphertext = Hex.parse(input); | |
return CipherParams.create({ ciphertext: ciphertext }); | |
} | |
}; | |
}()); | |
return CryptoJS.format.Hex; | |
})); | |
},{"./cipher-core":104,"./core":105}],111:[function(require,module,exports){ | |
;(function (root, factory) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var Base = C_lib.Base; | |
var C_enc = C.enc; | |
var Utf8 = C_enc.Utf8; | |
var C_algo = C.algo; | |
/** | |
* HMAC algorithm. | |
*/ | |
var HMAC = C_algo.HMAC = Base.extend({ | |
/** | |
* Initializes a newly created HMAC. | |
* | |
* @param {Hasher} hasher The hash algorithm to use. | |
* @param {WordArray|string} key The secret key. | |
* | |
* @example | |
* | |
* var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); | |
*/ | |
init: function (hasher, key) { | |
// Init hasher | |
hasher = this._hasher = new hasher.init(); | |
// Convert string to WordArray, else assume WordArray already | |
if (typeof key == 'string') { | |
key = Utf8.parse(key); | |
} | |
// Shortcuts | |
var hasherBlockSize = hasher.blockSize; | |
var hasherBlockSizeBytes = hasherBlockSize * 4; | |
// Allow arbitrary length keys | |
if (key.sigBytes > hasherBlockSizeBytes) { | |
key = hasher.finalize(key); | |
} | |
// Clamp excess bits | |
key.clamp(); | |
// Clone key for inner and outer pads | |
var oKey = this._oKey = key.clone(); | |
var iKey = this._iKey = key.clone(); | |
// Shortcuts | |
var oKeyWords = oKey.words; | |
var iKeyWords = iKey.words; | |
// XOR keys with pad constants | |
for (var i = 0; i < hasherBlockSize; i++) { | |
oKeyWords[i] ^= 0x5c5c5c5c; | |
iKeyWords[i] ^= 0x36363636; | |
} | |
oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; | |
// Set initial values | |
this.reset(); | |
}, | |
/** | |
* Resets this HMAC to its initial state. | |
* | |
* @example | |
* | |
* hmacHasher.reset(); | |
*/ | |
reset: function () { | |
// Shortcut | |
var hasher = this._hasher; | |
// Reset | |
hasher.reset(); | |
hasher.update(this._iKey); | |
}, | |
/** | |
* Updates this HMAC with a message. | |
* | |
* @param {WordArray|string} messageUpdate The message to append. | |
* | |
* @return {HMAC} This HMAC instance. | |
* | |
* @example | |
* | |
* hmacHasher.update('message'); | |
* hmacHasher.update(wordArray); | |
*/ | |
update: function (messageUpdate) { | |
this._hasher.update(messageUpdate); | |
// Chainable | |
return this; | |
}, | |
/** | |
* Finalizes the HMAC computation. | |
* Note that the finalize operation is effectively a destructive, read-once operation. | |
* | |
* @param {WordArray|string} messageUpdate (Optional) A final message update. | |
* | |
* @return {WordArray} The HMAC. | |
* | |
* @example | |
* | |
* var hmac = hmacHasher.finalize(); | |
* var hmac = hmacHasher.finalize('message'); | |
* var hmac = hmacHasher.finalize(wordArray); | |
*/ | |
finalize: function (messageUpdate) { | |
// Shortcut | |
var hasher = this._hasher; | |
// Compute HMAC | |
var innerHash = hasher.finalize(messageUpdate); | |
hasher.reset(); | |
var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); | |
return hmac; | |
} | |
}); | |
}()); | |
})); | |
},{"./core":105}],112:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./enc-base64url"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy"), require("./blowfish")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./enc-base64url", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy", "./blowfish"], factory); | |
} | |
else { | |
// Global (browser) | |
root.CryptoJS = factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
return CryptoJS; | |
})); | |
},{"./aes":102,"./blowfish":103,"./cipher-core":104,"./core":105,"./enc-base64":106,"./enc-base64url":107,"./enc-utf16":108,"./evpkdf":109,"./format-hex":110,"./hmac":111,"./lib-typedarrays":113,"./md5":114,"./mode-cfb":115,"./mode-ctr":117,"./mode-ctr-gladman":116,"./mode-ecb":118,"./mode-ofb":119,"./pad-ansix923":120,"./pad-iso10126":121,"./pad-iso97971":122,"./pad-nopadding":123,"./pad-zeropadding":124,"./pbkdf2":125,"./rabbit":127,"./rabbit-legacy":126,"./rc4":128,"./ripemd160":129,"./sha1":130,"./sha224":131,"./sha256":132,"./sha3":133,"./sha384":134,"./sha512":135,"./tripledes":136,"./x64-core":137}],113:[function(require,module,exports){ | |
;(function (root, factory) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Check if typed arrays are supported | |
if (typeof ArrayBuffer != 'function') { | |
return; | |
} | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var WordArray = C_lib.WordArray; | |
// Reference original init | |
var superInit = WordArray.init; | |
// Augment WordArray.init to handle typed arrays | |
var subInit = WordArray.init = function (typedArray) { | |
// Convert buffers to uint8 | |
if (typedArray instanceof ArrayBuffer) { | |
typedArray = new Uint8Array(typedArray); | |
} | |
// Convert other array views to uint8 | |
if ( | |
typedArray instanceof Int8Array || | |
(typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || | |
typedArray instanceof Int16Array || | |
typedArray instanceof Uint16Array || | |
typedArray instanceof Int32Array || | |
typedArray instanceof Uint32Array || | |
typedArray instanceof Float32Array || | |
typedArray instanceof Float64Array | |
) { | |
typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); | |
} | |
// Handle Uint8Array | |
if (typedArray instanceof Uint8Array) { | |
// Shortcut | |
var typedArrayByteLength = typedArray.byteLength; | |
// Extract bytes | |
var words = []; | |
for (var i = 0; i < typedArrayByteLength; i++) { | |
words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); | |
} | |
// Initialize this word array | |
superInit.call(this, words, typedArrayByteLength); | |
} else { | |
// Else call normal init | |
superInit.apply(this, arguments); | |
} | |
}; | |
subInit.prototype = WordArray; | |
}()); | |
return CryptoJS.lib.WordArray; | |
})); | |
},{"./core":105}],114:[function(require,module,exports){ | |
;(function (root, factory) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function (Math) { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var WordArray = C_lib.WordArray; | |
var Hasher = C_lib.Hasher; | |
var C_algo = C.algo; | |
// Constants table | |
var T = []; | |
// Compute constants | |
(function () { | |
for (var i = 0; i < 64; i++) { | |
T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; | |
} | |
}()); | |
/** | |
* MD5 hash algorithm. | |
*/ | |
var MD5 = C_algo.MD5 = Hasher.extend({ | |
_doReset: function () { | |
this._hash = new WordArray.init([ | |
0x67452301, 0xefcdab89, | |
0x98badcfe, 0x10325476 | |
]); | |
}, | |
_doProcessBlock: function (M, offset) { | |
// Swap endian | |
for (var i = 0; i < 16; i++) { | |
// Shortcuts | |
var offset_i = offset + i; | |
var M_offset_i = M[offset_i]; | |
M[offset_i] = ( | |
(((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | | |
(((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) | |
); | |
} | |
// Shortcuts | |
var H = this._hash.words; | |
var M_offset_0 = M[offset + 0]; | |
var M_offset_1 = M[offset + 1]; | |
var M_offset_2 = M[offset + 2]; | |
var M_offset_3 = M[offset + 3]; | |
var M_offset_4 = M[offset + 4]; | |
var M_offset_5 = M[offset + 5]; | |
var M_offset_6 = M[offset + 6]; | |
var M_offset_7 = M[offset + 7]; | |
var M_offset_8 = M[offset + 8]; | |
var M_offset_9 = M[offset + 9]; | |
var M_offset_10 = M[offset + 10]; | |
var M_offset_11 = M[offset + 11]; | |
var M_offset_12 = M[offset + 12]; | |
var M_offset_13 = M[offset + 13]; | |
var M_offset_14 = M[offset + 14]; | |
var M_offset_15 = M[offset + 15]; | |
// Working variables | |
var a = H[0]; | |
var b = H[1]; | |
var c = H[2]; | |
var d = H[3]; | |
// Computation | |
a = FF(a, b, c, d, M_offset_0, 7, T[0]); | |
d = FF(d, a, b, c, M_offset_1, 12, T[1]); | |
c = FF(c, d, a, b, M_offset_2, 17, T[2]); | |
b = FF(b, c, d, a, M_offset_3, 22, T[3]); | |
a = FF(a, b, c, d, M_offset_4, 7, T[4]); | |
d = FF(d, a, b, c, M_offset_5, 12, T[5]); | |
c = FF(c, d, a, b, M_offset_6, 17, T[6]); | |
b = FF(b, c, d, a, M_offset_7, 22, T[7]); | |
a = FF(a, b, c, d, M_offset_8, 7, T[8]); | |
d = FF(d, a, b, c, M_offset_9, 12, T[9]); | |
c = FF(c, d, a, b, M_offset_10, 17, T[10]); | |
b = FF(b, c, d, a, M_offset_11, 22, T[11]); | |
a = FF(a, b, c, d, M_offset_12, 7, T[12]); | |
d = FF(d, a, b, c, M_offset_13, 12, T[13]); | |
c = FF(c, d, a, b, M_offset_14, 17, T[14]); | |
b = FF(b, c, d, a, M_offset_15, 22, T[15]); | |
a = GG(a, b, c, d, M_offset_1, 5, T[16]); | |
d = GG(d, a, b, c, M_offset_6, 9, T[17]); | |
c = GG(c, d, a, b, M_offset_11, 14, T[18]); | |
b = GG(b, c, d, a, M_offset_0, 20, T[19]); | |
a = GG(a, b, c, d, M_offset_5, 5, T[20]); | |
d = GG(d, a, b, c, M_offset_10, 9, T[21]); | |
c = GG(c, d, a, b, M_offset_15, 14, T[22]); | |
b = GG(b, c, d, a, M_offset_4, 20, T[23]); | |
a = GG(a, b, c, d, M_offset_9, 5, T[24]); | |
d = GG(d, a, b, c, M_offset_14, 9, T[25]); | |
c = GG(c, d, a, b, M_offset_3, 14, T[26]); | |
b = GG(b, c, d, a, M_offset_8, 20, T[27]); | |
a = GG(a, b, c, d, M_offset_13, 5, T[28]); | |
d = GG(d, a, b, c, M_offset_2, 9, T[29]); | |
c = GG(c, d, a, b, M_offset_7, 14, T[30]); | |
b = GG(b, c, d, a, M_offset_12, 20, T[31]); | |
a = HH(a, b, c, d, M_offset_5, 4, T[32]); | |
d = HH(d, a, b, c, M_offset_8, 11, T[33]); | |
c = HH(c, d, a, b, M_offset_11, 16, T[34]); | |
b = HH(b, c, d, a, M_offset_14, 23, T[35]); | |
a = HH(a, b, c, d, M_offset_1, 4, T[36]); | |
d = HH(d, a, b, c, M_offset_4, 11, T[37]); | |
c = HH(c, d, a, b, M_offset_7, 16, T[38]); | |
b = HH(b, c, d, a, M_offset_10, 23, T[39]); | |
a = HH(a, b, c, d, M_offset_13, 4, T[40]); | |
d = HH(d, a, b, c, M_offset_0, 11, T[41]); | |
c = HH(c, d, a, b, M_offset_3, 16, T[42]); | |
b = HH(b, c, d, a, M_offset_6, 23, T[43]); | |
a = HH(a, b, c, d, M_offset_9, 4, T[44]); | |
d = HH(d, a, b, c, M_offset_12, 11, T[45]); | |
c = HH(c, d, a, b, M_offset_15, 16, T[46]); | |
b = HH(b, c, d, a, M_offset_2, 23, T[47]); | |
a = II(a, b, c, d, M_offset_0, 6, T[48]); | |
d = II(d, a, b, c, M_offset_7, 10, T[49]); | |
c = II(c, d, a, b, M_offset_14, 15, T[50]); | |
b = II(b, c, d, a, M_offset_5, 21, T[51]); | |
a = II(a, b, c, d, M_offset_12, 6, T[52]); | |
d = II(d, a, b, c, M_offset_3, 10, T[53]); | |
c = II(c, d, a, b, M_offset_10, 15, T[54]); | |
b = II(b, c, d, a, M_offset_1, 21, T[55]); | |
a = II(a, b, c, d, M_offset_8, 6, T[56]); | |
d = II(d, a, b, c, M_offset_15, 10, T[57]); | |
c = II(c, d, a, b, M_offset_6, 15, T[58]); | |
b = II(b, c, d, a, M_offset_13, 21, T[59]); | |
a = II(a, b, c, d, M_offset_4, 6, T[60]); | |
d = II(d, a, b, c, M_offset_11, 10, T[61]); | |
c = II(c, d, a, b, M_offset_2, 15, T[62]); | |
b = II(b, c, d, a, M_offset_9, 21, T[63]); | |
// Intermediate hash value | |
H[0] = (H[0] + a) | 0; | |
H[1] = (H[1] + b) | 0; | |
H[2] = (H[2] + c) | 0; | |
H[3] = (H[3] + d) | 0; | |
}, | |
_doFinalize: function () { | |
// Shortcuts | |
var data = this._data; | |
var dataWords = data.words; | |
var nBitsTotal = this._nDataBytes * 8; | |
var nBitsLeft = data.sigBytes * 8; | |
// Add padding | |
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); | |
var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); | |
var nBitsTotalL = nBitsTotal; | |
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( | |
(((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | | |
(((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) | |
); | |
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( | |
(((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | | |
(((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) | |
); | |
data.sigBytes = (dataWords.length + 1) * 4; | |
// Hash final blocks | |
this._process(); | |
// Shortcuts | |
var hash = this._hash; | |
var H = hash.words; | |
// Swap endian | |
for (var i = 0; i < 4; i++) { | |
// Shortcut | |
var H_i = H[i]; | |
H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | | |
(((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); | |
} | |
// Return final computed hash | |
return hash; | |
}, | |
clone: function () { | |
var clone = Hasher.clone.call(this); | |
clone._hash = this._hash.clone(); | |
return clone; | |
} | |
}); | |
function FF(a, b, c, d, x, s, t) { | |
var n = a + ((b & c) | (~b & d)) + x + t; | |
return ((n << s) | (n >>> (32 - s))) + b; | |
} | |
function GG(a, b, c, d, x, s, t) { | |
var n = a + ((b & d) | (c & ~d)) + x + t; | |
return ((n << s) | (n >>> (32 - s))) + b; | |
} | |
function HH(a, b, c, d, x, s, t) { | |
var n = a + (b ^ c ^ d) + x + t; | |
return ((n << s) | (n >>> (32 - s))) + b; | |
} | |
function II(a, b, c, d, x, s, t) { | |
var n = a + (c ^ (b | ~d)) + x + t; | |
return ((n << s) | (n >>> (32 - s))) + b; | |
} | |
/** | |
* Shortcut function to the hasher's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* | |
* @return {WordArray} The hash. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hash = CryptoJS.MD5('message'); | |
* var hash = CryptoJS.MD5(wordArray); | |
*/ | |
C.MD5 = Hasher._createHelper(MD5); | |
/** | |
* Shortcut function to the HMAC's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* @param {WordArray|string} key The secret key. | |
* | |
* @return {WordArray} The HMAC. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hmac = CryptoJS.HmacMD5(message, key); | |
*/ | |
C.HmacMD5 = Hasher._createHmacHelper(MD5); | |
}(Math)); | |
return CryptoJS.MD5; | |
})); | |
},{"./core":105}],115:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** | |
* Cipher Feedback block mode. | |
*/ | |
CryptoJS.mode.CFB = (function () { | |
var CFB = CryptoJS.lib.BlockCipherMode.extend(); | |
CFB.Encryptor = CFB.extend({ | |
processBlock: function (words, offset) { | |
// Shortcuts | |
var cipher = this._cipher; | |
var blockSize = cipher.blockSize; | |
generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); | |
// Remember this block to use with next block | |
this._prevBlock = words.slice(offset, offset + blockSize); | |
} | |
}); | |
CFB.Decryptor = CFB.extend({ | |
processBlock: function (words, offset) { | |
// Shortcuts | |
var cipher = this._cipher; | |
var blockSize = cipher.blockSize; | |
// Remember this block to use with next block | |
var thisBlock = words.slice(offset, offset + blockSize); | |
generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); | |
// This block becomes the previous block | |
this._prevBlock = thisBlock; | |
} | |
}); | |
function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { | |
var keystream; | |
// Shortcut | |
var iv = this._iv; | |
// Generate keystream | |
if (iv) { | |
keystream = iv.slice(0); | |
// Remove IV for subsequent blocks | |
this._iv = undefined; | |
} else { | |
keystream = this._prevBlock; | |
} | |
cipher.encryptBlock(keystream, 0); | |
// Encrypt | |
for (var i = 0; i < blockSize; i++) { | |
words[offset + i] ^= keystream[i]; | |
} | |
} | |
return CFB; | |
}()); | |
return CryptoJS.mode.CFB; | |
})); | |
},{"./cipher-core":104,"./core":105}],116:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** @preserve | |
* Counter block mode compatible with Dr Brian Gladman fileenc.c | |
* derived from CryptoJS.mode.CTR | |
* Jan Hruby [email protected] | |
*/ | |
CryptoJS.mode.CTRGladman = (function () { | |
var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); | |
function incWord(word) | |
{ | |
if (((word >> 24) & 0xff) === 0xff) { //overflow | |
var b1 = (word >> 16)&0xff; | |
var b2 = (word >> 8)&0xff; | |
var b3 = word & 0xff; | |
if (b1 === 0xff) // overflow b1 | |
{ | |
b1 = 0; | |
if (b2 === 0xff) | |
{ | |
b2 = 0; | |
if (b3 === 0xff) | |
{ | |
b3 = 0; | |
} | |
else | |
{ | |
++b3; | |
} | |
} | |
else | |
{ | |
++b2; | |
} | |
} | |
else | |
{ | |
++b1; | |
} | |
word = 0; | |
word += (b1 << 16); | |
word += (b2 << 8); | |
word += b3; | |
} | |
else | |
{ | |
word += (0x01 << 24); | |
} | |
return word; | |
} | |
function incCounter(counter) | |
{ | |
if ((counter[0] = incWord(counter[0])) === 0) | |
{ | |
// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 | |
counter[1] = incWord(counter[1]); | |
} | |
return counter; | |
} | |
var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ | |
processBlock: function (words, offset) { | |
// Shortcuts | |
var cipher = this._cipher | |
var blockSize = cipher.blockSize; | |
var iv = this._iv; | |
var counter = this._counter; | |
// Generate keystream | |
if (iv) { | |
counter = this._counter = iv.slice(0); | |
// Remove IV for subsequent blocks | |
this._iv = undefined; | |
} | |
incCounter(counter); | |
var keystream = counter.slice(0); | |
cipher.encryptBlock(keystream, 0); | |
// Encrypt | |
for (var i = 0; i < blockSize; i++) { | |
words[offset + i] ^= keystream[i]; | |
} | |
} | |
}); | |
CTRGladman.Decryptor = Encryptor; | |
return CTRGladman; | |
}()); | |
return CryptoJS.mode.CTRGladman; | |
})); | |
},{"./cipher-core":104,"./core":105}],117:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** | |
* Counter block mode. | |
*/ | |
CryptoJS.mode.CTR = (function () { | |
var CTR = CryptoJS.lib.BlockCipherMode.extend(); | |
var Encryptor = CTR.Encryptor = CTR.extend({ | |
processBlock: function (words, offset) { | |
// Shortcuts | |
var cipher = this._cipher | |
var blockSize = cipher.blockSize; | |
var iv = this._iv; | |
var counter = this._counter; | |
// Generate keystream | |
if (iv) { | |
counter = this._counter = iv.slice(0); | |
// Remove IV for subsequent blocks | |
this._iv = undefined; | |
} | |
var keystream = counter.slice(0); | |
cipher.encryptBlock(keystream, 0); | |
// Increment counter | |
counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 | |
// Encrypt | |
for (var i = 0; i < blockSize; i++) { | |
words[offset + i] ^= keystream[i]; | |
} | |
} | |
}); | |
CTR.Decryptor = Encryptor; | |
return CTR; | |
}()); | |
return CryptoJS.mode.CTR; | |
})); | |
},{"./cipher-core":104,"./core":105}],118:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** | |
* Electronic Codebook block mode. | |
*/ | |
CryptoJS.mode.ECB = (function () { | |
var ECB = CryptoJS.lib.BlockCipherMode.extend(); | |
ECB.Encryptor = ECB.extend({ | |
processBlock: function (words, offset) { | |
this._cipher.encryptBlock(words, offset); | |
} | |
}); | |
ECB.Decryptor = ECB.extend({ | |
processBlock: function (words, offset) { | |
this._cipher.decryptBlock(words, offset); | |
} | |
}); | |
return ECB; | |
}()); | |
return CryptoJS.mode.ECB; | |
})); | |
},{"./cipher-core":104,"./core":105}],119:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** | |
* Output Feedback block mode. | |
*/ | |
CryptoJS.mode.OFB = (function () { | |
var OFB = CryptoJS.lib.BlockCipherMode.extend(); | |
var Encryptor = OFB.Encryptor = OFB.extend({ | |
processBlock: function (words, offset) { | |
// Shortcuts | |
var cipher = this._cipher | |
var blockSize = cipher.blockSize; | |
var iv = this._iv; | |
var keystream = this._keystream; | |
// Generate keystream | |
if (iv) { | |
keystream = this._keystream = iv.slice(0); | |
// Remove IV for subsequent blocks | |
this._iv = undefined; | |
} | |
cipher.encryptBlock(keystream, 0); | |
// Encrypt | |
for (var i = 0; i < blockSize; i++) { | |
words[offset + i] ^= keystream[i]; | |
} | |
} | |
}); | |
OFB.Decryptor = Encryptor; | |
return OFB; | |
}()); | |
return CryptoJS.mode.OFB; | |
})); | |
},{"./cipher-core":104,"./core":105}],120:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** | |
* ANSI X.923 padding strategy. | |
*/ | |
CryptoJS.pad.AnsiX923 = { | |
pad: function (data, blockSize) { | |
// Shortcuts | |
var dataSigBytes = data.sigBytes; | |
var blockSizeBytes = blockSize * 4; | |
// Count padding bytes | |
var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; | |
// Compute last byte position | |
var lastBytePos = dataSigBytes + nPaddingBytes - 1; | |
// Pad | |
data.clamp(); | |
data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); | |
data.sigBytes += nPaddingBytes; | |
}, | |
unpad: function (data) { | |
// Get number of padding bytes from last byte | |
var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; | |
// Remove padding | |
data.sigBytes -= nPaddingBytes; | |
} | |
}; | |
return CryptoJS.pad.Ansix923; | |
})); | |
},{"./cipher-core":104,"./core":105}],121:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** | |
* ISO 10126 padding strategy. | |
*/ | |
CryptoJS.pad.Iso10126 = { | |
pad: function (data, blockSize) { | |
// Shortcut | |
var blockSizeBytes = blockSize * 4; | |
// Count padding bytes | |
var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; | |
// Pad | |
data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). | |
concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); | |
}, | |
unpad: function (data) { | |
// Get number of padding bytes from last byte | |
var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; | |
// Remove padding | |
data.sigBytes -= nPaddingBytes; | |
} | |
}; | |
return CryptoJS.pad.Iso10126; | |
})); | |
},{"./cipher-core":104,"./core":105}],122:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** | |
* ISO/IEC 9797-1 Padding Method 2. | |
*/ | |
CryptoJS.pad.Iso97971 = { | |
pad: function (data, blockSize) { | |
// Add 0x80 byte | |
data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); | |
// Zero pad the rest | |
CryptoJS.pad.ZeroPadding.pad(data, blockSize); | |
}, | |
unpad: function (data) { | |
// Remove zero padding | |
CryptoJS.pad.ZeroPadding.unpad(data); | |
// Remove one more byte -- the 0x80 byte | |
data.sigBytes--; | |
} | |
}; | |
return CryptoJS.pad.Iso97971; | |
})); | |
},{"./cipher-core":104,"./core":105}],123:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** | |
* A noop padding strategy. | |
*/ | |
CryptoJS.pad.NoPadding = { | |
pad: function () { | |
}, | |
unpad: function () { | |
} | |
}; | |
return CryptoJS.pad.NoPadding; | |
})); | |
},{"./cipher-core":104,"./core":105}],124:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** | |
* Zero padding strategy. | |
*/ | |
CryptoJS.pad.ZeroPadding = { | |
pad: function (data, blockSize) { | |
// Shortcut | |
var blockSizeBytes = blockSize * 4; | |
// Pad | |
data.clamp(); | |
data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); | |
}, | |
unpad: function (data) { | |
// Shortcut | |
var dataWords = data.words; | |
// Unpad | |
var i = data.sigBytes - 1; | |
for (var i = data.sigBytes - 1; i >= 0; i--) { | |
if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { | |
data.sigBytes = i + 1; | |
break; | |
} | |
} | |
} | |
}; | |
return CryptoJS.pad.ZeroPadding; | |
})); | |
},{"./cipher-core":104,"./core":105}],125:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./sha256"), require("./hmac")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./sha256", "./hmac"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var Base = C_lib.Base; | |
var WordArray = C_lib.WordArray; | |
var C_algo = C.algo; | |
var SHA256 = C_algo.SHA256; | |
var HMAC = C_algo.HMAC; | |
/** | |
* Password-Based Key Derivation Function 2 algorithm. | |
*/ | |
var PBKDF2 = C_algo.PBKDF2 = Base.extend({ | |
/** | |
* Configuration options. | |
* | |
* @property {number} keySize The key size in words to generate. Default: 4 (128 bits) | |
* @property {Hasher} hasher The hasher to use. Default: SHA256 | |
* @property {number} iterations The number of iterations to perform. Default: 250000 | |
*/ | |
cfg: Base.extend({ | |
keySize: 128/32, | |
hasher: SHA256, | |
iterations: 250000 | |
}), | |
/** | |
* Initializes a newly created key derivation function. | |
* | |
* @param {Object} cfg (Optional) The configuration options to use for the derivation. | |
* | |
* @example | |
* | |
* var kdf = CryptoJS.algo.PBKDF2.create(); | |
* var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); | |
* var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); | |
*/ | |
init: function (cfg) { | |
this.cfg = this.cfg.extend(cfg); | |
}, | |
/** | |
* Computes the Password-Based Key Derivation Function 2. | |
* | |
* @param {WordArray|string} password The password. | |
* @param {WordArray|string} salt A salt. | |
* | |
* @return {WordArray} The derived key. | |
* | |
* @example | |
* | |
* var key = kdf.compute(password, salt); | |
*/ | |
compute: function (password, salt) { | |
// Shortcut | |
var cfg = this.cfg; | |
// Init HMAC | |
var hmac = HMAC.create(cfg.hasher, password); | |
// Initial values | |
var derivedKey = WordArray.create(); | |
var blockIndex = WordArray.create([0x00000001]); | |
// Shortcuts | |
var derivedKeyWords = derivedKey.words; | |
var blockIndexWords = blockIndex.words; | |
var keySize = cfg.keySize; | |
var iterations = cfg.iterations; | |
// Generate key | |
while (derivedKeyWords.length < keySize) { | |
var block = hmac.update(salt).finalize(blockIndex); | |
hmac.reset(); | |
// Shortcuts | |
var blockWords = block.words; | |
var blockWordsLength = blockWords.length; | |
// Iterations | |
var intermediate = block; | |
for (var i = 1; i < iterations; i++) { | |
intermediate = hmac.finalize(intermediate); | |
hmac.reset(); | |
// Shortcut | |
var intermediateWords = intermediate.words; | |
// XOR intermediate with block | |
for (var j = 0; j < blockWordsLength; j++) { | |
blockWords[j] ^= intermediateWords[j]; | |
} | |
} | |
derivedKey.concat(block); | |
blockIndexWords[0]++; | |
} | |
derivedKey.sigBytes = keySize * 4; | |
return derivedKey; | |
} | |
}); | |
/** | |
* Computes the Password-Based Key Derivation Function 2. | |
* | |
* @param {WordArray|string} password The password. | |
* @param {WordArray|string} salt A salt. | |
* @param {Object} cfg (Optional) The configuration options to use for this computation. | |
* | |
* @return {WordArray} The derived key. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var key = CryptoJS.PBKDF2(password, salt); | |
* var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); | |
* var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); | |
*/ | |
C.PBKDF2 = function (password, salt, cfg) { | |
return PBKDF2.create(cfg).compute(password, salt); | |
}; | |
}()); | |
return CryptoJS.PBKDF2; | |
})); | |
},{"./core":105,"./hmac":111,"./sha256":132}],126:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var StreamCipher = C_lib.StreamCipher; | |
var C_algo = C.algo; | |
// Reusable objects | |
var S = []; | |
var C_ = []; | |
var G = []; | |
/** | |
* Rabbit stream cipher algorithm. | |
* | |
* This is a legacy version that neglected to convert the key to little-endian. | |
* This error doesn't affect the cipher's security, | |
* but it does affect its compatibility with other implementations. | |
*/ | |
var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ | |
_doReset: function () { | |
// Shortcuts | |
var K = this._key.words; | |
var iv = this.cfg.iv; | |
// Generate initial state values | |
var X = this._X = [ | |
K[0], (K[3] << 16) | (K[2] >>> 16), | |
K[1], (K[0] << 16) | (K[3] >>> 16), | |
K[2], (K[1] << 16) | (K[0] >>> 16), | |
K[3], (K[2] << 16) | (K[1] >>> 16) | |
]; | |
// Generate initial counter values | |
var C = this._C = [ | |
(K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), | |
(K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), | |
(K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), | |
(K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) | |
]; | |
// Carry bit | |
this._b = 0; | |
// Iterate the system four times | |
for (var i = 0; i < 4; i++) { | |
nextState.call(this); | |
} | |
// Modify the counters | |
for (var i = 0; i < 8; i++) { | |
C[i] ^= X[(i + 4) & 7]; | |
} | |
// IV setup | |
if (iv) { | |
// Shortcuts | |
var IV = iv.words; | |
var IV_0 = IV[0]; | |
var IV_1 = IV[1]; | |
// Generate four subvectors | |
var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); | |
var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); | |
var i1 = (i0 >>> 16) | (i2 & 0xffff0000); | |
var i3 = (i2 << 16) | (i0 & 0x0000ffff); | |
// Modify counter values | |
C[0] ^= i0; | |
C[1] ^= i1; | |
C[2] ^= i2; | |
C[3] ^= i3; | |
C[4] ^= i0; | |
C[5] ^= i1; | |
C[6] ^= i2; | |
C[7] ^= i3; | |
// Iterate the system four times | |
for (var i = 0; i < 4; i++) { | |
nextState.call(this); | |
} | |
} | |
}, | |
_doProcessBlock: function (M, offset) { | |
// Shortcut | |
var X = this._X; | |
// Iterate the system | |
nextState.call(this); | |
// Generate four keystream words | |
S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); | |
S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); | |
S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); | |
S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); | |
for (var i = 0; i < 4; i++) { | |
// Swap endian | |
S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | | |
(((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); | |
// Encrypt | |
M[offset + i] ^= S[i]; | |
} | |
}, | |
blockSize: 128/32, | |
ivSize: 64/32 | |
}); | |
function nextState() { | |
// Shortcuts | |
var X = this._X; | |
var C = this._C; | |
// Save old counter values | |
for (var i = 0; i < 8; i++) { | |
C_[i] = C[i]; | |
} | |
// Calculate new counter values | |
C[0] = (C[0] + 0x4d34d34d + this._b) | 0; | |
C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; | |
C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; | |
C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; | |
C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; | |
C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; | |
C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; | |
C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; | |
this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; | |
// Calculate the g-values | |
for (var i = 0; i < 8; i++) { | |
var gx = X[i] + C[i]; | |
// Construct high and low argument for squaring | |
var ga = gx & 0xffff; | |
var gb = gx >>> 16; | |
// Calculate high and low result of squaring | |
var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; | |
var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); | |
// High XOR low | |
G[i] = gh ^ gl; | |
} | |
// Calculate new state values | |
X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; | |
X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; | |
X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; | |
X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; | |
X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; | |
X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; | |
X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; | |
X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; | |
} | |
/** | |
* Shortcut functions to the cipher's object interface. | |
* | |
* @example | |
* | |
* var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); | |
* var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); | |
*/ | |
C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); | |
}()); | |
return CryptoJS.RabbitLegacy; | |
})); | |
},{"./cipher-core":104,"./core":105,"./enc-base64":106,"./evpkdf":109,"./md5":114}],127:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var StreamCipher = C_lib.StreamCipher; | |
var C_algo = C.algo; | |
// Reusable objects | |
var S = []; | |
var C_ = []; | |
var G = []; | |
/** | |
* Rabbit stream cipher algorithm | |
*/ | |
var Rabbit = C_algo.Rabbit = StreamCipher.extend({ | |
_doReset: function () { | |
// Shortcuts | |
var K = this._key.words; | |
var iv = this.cfg.iv; | |
// Swap endian | |
for (var i = 0; i < 4; i++) { | |
K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | | |
(((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); | |
} | |
// Generate initial state values | |
var X = this._X = [ | |
K[0], (K[3] << 16) | (K[2] >>> 16), | |
K[1], (K[0] << 16) | (K[3] >>> 16), | |
K[2], (K[1] << 16) | (K[0] >>> 16), | |
K[3], (K[2] << 16) | (K[1] >>> 16) | |
]; | |
// Generate initial counter values | |
var C = this._C = [ | |
(K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), | |
(K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), | |
(K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), | |
(K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) | |
]; | |
// Carry bit | |
this._b = 0; | |
// Iterate the system four times | |
for (var i = 0; i < 4; i++) { | |
nextState.call(this); | |
} | |
// Modify the counters | |
for (var i = 0; i < 8; i++) { | |
C[i] ^= X[(i + 4) & 7]; | |
} | |
// IV setup | |
if (iv) { | |
// Shortcuts | |
var IV = iv.words; | |
var IV_0 = IV[0]; | |
var IV_1 = IV[1]; | |
// Generate four subvectors | |
var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); | |
var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); | |
var i1 = (i0 >>> 16) | (i2 & 0xffff0000); | |
var i3 = (i2 << 16) | (i0 & 0x0000ffff); | |
// Modify counter values | |
C[0] ^= i0; | |
C[1] ^= i1; | |
C[2] ^= i2; | |
C[3] ^= i3; | |
C[4] ^= i0; | |
C[5] ^= i1; | |
C[6] ^= i2; | |
C[7] ^= i3; | |
// Iterate the system four times | |
for (var i = 0; i < 4; i++) { | |
nextState.call(this); | |
} | |
} | |
}, | |
_doProcessBlock: function (M, offset) { | |
// Shortcut | |
var X = this._X; | |
// Iterate the system | |
nextState.call(this); | |
// Generate four keystream words | |
S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); | |
S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); | |
S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); | |
S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); | |
for (var i = 0; i < 4; i++) { | |
// Swap endian | |
S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | | |
(((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); | |
// Encrypt | |
M[offset + i] ^= S[i]; | |
} | |
}, | |
blockSize: 128/32, | |
ivSize: 64/32 | |
}); | |
function nextState() { | |
// Shortcuts | |
var X = this._X; | |
var C = this._C; | |
// Save old counter values | |
for (var i = 0; i < 8; i++) { | |
C_[i] = C[i]; | |
} | |
// Calculate new counter values | |
C[0] = (C[0] + 0x4d34d34d + this._b) | 0; | |
C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; | |
C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; | |
C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; | |
C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; | |
C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; | |
C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; | |
C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; | |
this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; | |
// Calculate the g-values | |
for (var i = 0; i < 8; i++) { | |
var gx = X[i] + C[i]; | |
// Construct high and low argument for squaring | |
var ga = gx & 0xffff; | |
var gb = gx >>> 16; | |
// Calculate high and low result of squaring | |
var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; | |
var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); | |
// High XOR low | |
G[i] = gh ^ gl; | |
} | |
// Calculate new state values | |
X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; | |
X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; | |
X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; | |
X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; | |
X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; | |
X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; | |
X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; | |
X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; | |
} | |
/** | |
* Shortcut functions to the cipher's object interface. | |
* | |
* @example | |
* | |
* var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); | |
* var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); | |
*/ | |
C.Rabbit = StreamCipher._createHelper(Rabbit); | |
}()); | |
return CryptoJS.Rabbit; | |
})); | |
},{"./cipher-core":104,"./core":105,"./enc-base64":106,"./evpkdf":109,"./md5":114}],128:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var StreamCipher = C_lib.StreamCipher; | |
var C_algo = C.algo; | |
/** | |
* RC4 stream cipher algorithm. | |
*/ | |
var RC4 = C_algo.RC4 = StreamCipher.extend({ | |
_doReset: function () { | |
// Shortcuts | |
var key = this._key; | |
var keyWords = key.words; | |
var keySigBytes = key.sigBytes; | |
// Init sbox | |
var S = this._S = []; | |
for (var i = 0; i < 256; i++) { | |
S[i] = i; | |
} | |
// Key setup | |
for (var i = 0, j = 0; i < 256; i++) { | |
var keyByteIndex = i % keySigBytes; | |
var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; | |
j = (j + S[i] + keyByte) % 256; | |
// Swap | |
var t = S[i]; | |
S[i] = S[j]; | |
S[j] = t; | |
} | |
// Counters | |
this._i = this._j = 0; | |
}, | |
_doProcessBlock: function (M, offset) { | |
M[offset] ^= generateKeystreamWord.call(this); | |
}, | |
keySize: 256/32, | |
ivSize: 0 | |
}); | |
function generateKeystreamWord() { | |
// Shortcuts | |
var S = this._S; | |
var i = this._i; | |
var j = this._j; | |
// Generate keystream word | |
var keystreamWord = 0; | |
for (var n = 0; n < 4; n++) { | |
i = (i + 1) % 256; | |
j = (j + S[i]) % 256; | |
// Swap | |
var t = S[i]; | |
S[i] = S[j]; | |
S[j] = t; | |
keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); | |
} | |
// Update counters | |
this._i = i; | |
this._j = j; | |
return keystreamWord; | |
} | |
/** | |
* Shortcut functions to the cipher's object interface. | |
* | |
* @example | |
* | |
* var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); | |
* var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); | |
*/ | |
C.RC4 = StreamCipher._createHelper(RC4); | |
/** | |
* Modified RC4 stream cipher algorithm. | |
*/ | |
var RC4Drop = C_algo.RC4Drop = RC4.extend({ | |
/** | |
* Configuration options. | |
* | |
* @property {number} drop The number of keystream words to drop. Default 192 | |
*/ | |
cfg: RC4.cfg.extend({ | |
drop: 192 | |
}), | |
_doReset: function () { | |
RC4._doReset.call(this); | |
// Drop | |
for (var i = this.cfg.drop; i > 0; i--) { | |
generateKeystreamWord.call(this); | |
} | |
} | |
}); | |
/** | |
* Shortcut functions to the cipher's object interface. | |
* | |
* @example | |
* | |
* var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); | |
* var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); | |
*/ | |
C.RC4Drop = StreamCipher._createHelper(RC4Drop); | |
}()); | |
return CryptoJS.RC4; | |
})); | |
},{"./cipher-core":104,"./core":105,"./enc-base64":106,"./evpkdf":109,"./md5":114}],129:[function(require,module,exports){ | |
;(function (root, factory) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
/** @preserve | |
(c) 2012 by Cédric Mesnil. All rights reserved. | |
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: | |
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. | |
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. | |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
*/ | |
(function (Math) { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var WordArray = C_lib.WordArray; | |
var Hasher = C_lib.Hasher; | |
var C_algo = C.algo; | |
// Constants table | |
var _zl = WordArray.create([ | |
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, | |
7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, | |
3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, | |
1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, | |
4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); | |
var _zr = WordArray.create([ | |
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, | |
6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, | |
15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, | |
8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, | |
12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); | |
var _sl = WordArray.create([ | |
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, | |
7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, | |
11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, | |
11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, | |
9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); | |
var _sr = WordArray.create([ | |
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, | |
9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, | |
9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, | |
15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, | |
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); | |
var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); | |
var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); | |
/** | |
* RIPEMD160 hash algorithm. | |
*/ | |
var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ | |
_doReset: function () { | |
this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); | |
}, | |
_doProcessBlock: function (M, offset) { | |
// Swap endian | |
for (var i = 0; i < 16; i++) { | |
// Shortcuts | |
var offset_i = offset + i; | |
var M_offset_i = M[offset_i]; | |
// Swap | |
M[offset_i] = ( | |
(((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | | |
(((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) | |
); | |
} | |
// Shortcut | |
var H = this._hash.words; | |
var hl = _hl.words; | |
var hr = _hr.words; | |
var zl = _zl.words; | |
var zr = _zr.words; | |
var sl = _sl.words; | |
var sr = _sr.words; | |
// Working variables | |
var al, bl, cl, dl, el; | |
var ar, br, cr, dr, er; | |
ar = al = H[0]; | |
br = bl = H[1]; | |
cr = cl = H[2]; | |
dr = dl = H[3]; | |
er = el = H[4]; | |
// Computation | |
var t; | |
for (var i = 0; i < 80; i += 1) { | |
t = (al + M[offset+zl[i]])|0; | |
if (i<16){ | |
t += f1(bl,cl,dl) + hl[0]; | |
} else if (i<32) { | |
t += f2(bl,cl,dl) + hl[1]; | |
} else if (i<48) { | |
t += f3(bl,cl,dl) + hl[2]; | |
} else if (i<64) { | |
t += f4(bl,cl,dl) + hl[3]; | |
} else {// if (i<80) { | |
t += f5(bl,cl,dl) + hl[4]; | |
} | |
t = t|0; | |
t = rotl(t,sl[i]); | |
t = (t+el)|0; | |
al = el; | |
el = dl; | |
dl = rotl(cl, 10); | |
cl = bl; | |
bl = t; | |
t = (ar + M[offset+zr[i]])|0; | |
if (i<16){ | |
t += f5(br,cr,dr) + hr[0]; | |
} else if (i<32) { | |
t += f4(br,cr,dr) + hr[1]; | |
} else if (i<48) { | |
t += f3(br,cr,dr) + hr[2]; | |
} else if (i<64) { | |
t += f2(br,cr,dr) + hr[3]; | |
} else {// if (i<80) { | |
t += f1(br,cr,dr) + hr[4]; | |
} | |
t = t|0; | |
t = rotl(t,sr[i]) ; | |
t = (t+er)|0; | |
ar = er; | |
er = dr; | |
dr = rotl(cr, 10); | |
cr = br; | |
br = t; | |
} | |
// Intermediate hash value | |
t = (H[1] + cl + dr)|0; | |
H[1] = (H[2] + dl + er)|0; | |
H[2] = (H[3] + el + ar)|0; | |
H[3] = (H[4] + al + br)|0; | |
H[4] = (H[0] + bl + cr)|0; | |
H[0] = t; | |
}, | |
_doFinalize: function () { | |
// Shortcuts | |
var data = this._data; | |
var dataWords = data.words; | |
var nBitsTotal = this._nDataBytes * 8; | |
var nBitsLeft = data.sigBytes * 8; | |
// Add padding | |
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); | |
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( | |
(((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | | |
(((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) | |
); | |
data.sigBytes = (dataWords.length + 1) * 4; | |
// Hash final blocks | |
this._process(); | |
// Shortcuts | |
var hash = this._hash; | |
var H = hash.words; | |
// Swap endian | |
for (var i = 0; i < 5; i++) { | |
// Shortcut | |
var H_i = H[i]; | |
// Swap | |
H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | | |
(((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); | |
} | |
// Return final computed hash | |
return hash; | |
}, | |
clone: function () { | |
var clone = Hasher.clone.call(this); | |
clone._hash = this._hash.clone(); | |
return clone; | |
} | |
}); | |
function f1(x, y, z) { | |
return ((x) ^ (y) ^ (z)); | |
} | |
function f2(x, y, z) { | |
return (((x)&(y)) | ((~x)&(z))); | |
} | |
function f3(x, y, z) { | |
return (((x) | (~(y))) ^ (z)); | |
} | |
function f4(x, y, z) { | |
return (((x) & (z)) | ((y)&(~(z)))); | |
} | |
function f5(x, y, z) { | |
return ((x) ^ ((y) |(~(z)))); | |
} | |
function rotl(x,n) { | |
return (x<<n) | (x>>>(32-n)); | |
} | |
/** | |
* Shortcut function to the hasher's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* | |
* @return {WordArray} The hash. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hash = CryptoJS.RIPEMD160('message'); | |
* var hash = CryptoJS.RIPEMD160(wordArray); | |
*/ | |
C.RIPEMD160 = Hasher._createHelper(RIPEMD160); | |
/** | |
* Shortcut function to the HMAC's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* @param {WordArray|string} key The secret key. | |
* | |
* @return {WordArray} The HMAC. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hmac = CryptoJS.HmacRIPEMD160(message, key); | |
*/ | |
C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); | |
}(Math)); | |
return CryptoJS.RIPEMD160; | |
})); | |
},{"./core":105}],130:[function(require,module,exports){ | |
;(function (root, factory) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var WordArray = C_lib.WordArray; | |
var Hasher = C_lib.Hasher; | |
var C_algo = C.algo; | |
// Reusable object | |
var W = []; | |
/** | |
* SHA-1 hash algorithm. | |
*/ | |
var SHA1 = C_algo.SHA1 = Hasher.extend({ | |
_doReset: function () { | |
this._hash = new WordArray.init([ | |
0x67452301, 0xefcdab89, | |
0x98badcfe, 0x10325476, | |
0xc3d2e1f0 | |
]); | |
}, | |
_doProcessBlock: function (M, offset) { | |
// Shortcut | |
var H = this._hash.words; | |
// Working variables | |
var a = H[0]; | |
var b = H[1]; | |
var c = H[2]; | |
var d = H[3]; | |
var e = H[4]; | |
// Computation | |
for (var i = 0; i < 80; i++) { | |
if (i < 16) { | |
W[i] = M[offset + i] | 0; | |
} else { | |
var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; | |
W[i] = (n << 1) | (n >>> 31); | |
} | |
var t = ((a << 5) | (a >>> 27)) + e + W[i]; | |
if (i < 20) { | |
t += ((b & c) | (~b & d)) + 0x5a827999; | |
} else if (i < 40) { | |
t += (b ^ c ^ d) + 0x6ed9eba1; | |
} else if (i < 60) { | |
t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; | |
} else /* if (i < 80) */ { | |
t += (b ^ c ^ d) - 0x359d3e2a; | |
} | |
e = d; | |
d = c; | |
c = (b << 30) | (b >>> 2); | |
b = a; | |
a = t; | |
} | |
// Intermediate hash value | |
H[0] = (H[0] + a) | 0; | |
H[1] = (H[1] + b) | 0; | |
H[2] = (H[2] + c) | 0; | |
H[3] = (H[3] + d) | 0; | |
H[4] = (H[4] + e) | 0; | |
}, | |
_doFinalize: function () { | |
// Shortcuts | |
var data = this._data; | |
var dataWords = data.words; | |
var nBitsTotal = this._nDataBytes * 8; | |
var nBitsLeft = data.sigBytes * 8; | |
// Add padding | |
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); | |
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); | |
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; | |
data.sigBytes = dataWords.length * 4; | |
// Hash final blocks | |
this._process(); | |
// Return final computed hash | |
return this._hash; | |
}, | |
clone: function () { | |
var clone = Hasher.clone.call(this); | |
clone._hash = this._hash.clone(); | |
return clone; | |
} | |
}); | |
/** | |
* Shortcut function to the hasher's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* | |
* @return {WordArray} The hash. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hash = CryptoJS.SHA1('message'); | |
* var hash = CryptoJS.SHA1(wordArray); | |
*/ | |
C.SHA1 = Hasher._createHelper(SHA1); | |
/** | |
* Shortcut function to the HMAC's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* @param {WordArray|string} key The secret key. | |
* | |
* @return {WordArray} The HMAC. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hmac = CryptoJS.HmacSHA1(message, key); | |
*/ | |
C.HmacSHA1 = Hasher._createHmacHelper(SHA1); | |
}()); | |
return CryptoJS.SHA1; | |
})); | |
},{"./core":105}],131:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./sha256")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./sha256"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var WordArray = C_lib.WordArray; | |
var C_algo = C.algo; | |
var SHA256 = C_algo.SHA256; | |
/** | |
* SHA-224 hash algorithm. | |
*/ | |
var SHA224 = C_algo.SHA224 = SHA256.extend({ | |
_doReset: function () { | |
this._hash = new WordArray.init([ | |
0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, | |
0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 | |
]); | |
}, | |
_doFinalize: function () { | |
var hash = SHA256._doFinalize.call(this); | |
hash.sigBytes -= 4; | |
return hash; | |
} | |
}); | |
/** | |
* Shortcut function to the hasher's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* | |
* @return {WordArray} The hash. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hash = CryptoJS.SHA224('message'); | |
* var hash = CryptoJS.SHA224(wordArray); | |
*/ | |
C.SHA224 = SHA256._createHelper(SHA224); | |
/** | |
* Shortcut function to the HMAC's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* @param {WordArray|string} key The secret key. | |
* | |
* @return {WordArray} The HMAC. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hmac = CryptoJS.HmacSHA224(message, key); | |
*/ | |
C.HmacSHA224 = SHA256._createHmacHelper(SHA224); | |
}()); | |
return CryptoJS.SHA224; | |
})); | |
},{"./core":105,"./sha256":132}],132:[function(require,module,exports){ | |
;(function (root, factory) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function (Math) { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var WordArray = C_lib.WordArray; | |
var Hasher = C_lib.Hasher; | |
var C_algo = C.algo; | |
// Initialization and round constants tables | |
var H = []; | |
var K = []; | |
// Compute constants | |
(function () { | |
function isPrime(n) { | |
var sqrtN = Math.sqrt(n); | |
for (var factor = 2; factor <= sqrtN; factor++) { | |
if (!(n % factor)) { | |
return false; | |
} | |
} | |
return true; | |
} | |
function getFractionalBits(n) { | |
return ((n - (n | 0)) * 0x100000000) | 0; | |
} | |
var n = 2; | |
var nPrime = 0; | |
while (nPrime < 64) { | |
if (isPrime(n)) { | |
if (nPrime < 8) { | |
H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); | |
} | |
K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); | |
nPrime++; | |
} | |
n++; | |
} | |
}()); | |
// Reusable object | |
var W = []; | |
/** | |
* SHA-256 hash algorithm. | |
*/ | |
var SHA256 = C_algo.SHA256 = Hasher.extend({ | |
_doReset: function () { | |
this._hash = new WordArray.init(H.slice(0)); | |
}, | |
_doProcessBlock: function (M, offset) { | |
// Shortcut | |
var H = this._hash.words; | |
// Working variables | |
var a = H[0]; | |
var b = H[1]; | |
var c = H[2]; | |
var d = H[3]; | |
var e = H[4]; | |
var f = H[5]; | |
var g = H[6]; | |
var h = H[7]; | |
// Computation | |
for (var i = 0; i < 64; i++) { | |
if (i < 16) { | |
W[i] = M[offset + i] | 0; | |
} else { | |
var gamma0x = W[i - 15]; | |
var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ | |
((gamma0x << 14) | (gamma0x >>> 18)) ^ | |
(gamma0x >>> 3); | |
var gamma1x = W[i - 2]; | |
var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ | |
((gamma1x << 13) | (gamma1x >>> 19)) ^ | |
(gamma1x >>> 10); | |
W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; | |
} | |
var ch = (e & f) ^ (~e & g); | |
var maj = (a & b) ^ (a & c) ^ (b & c); | |
var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); | |
var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); | |
var t1 = h + sigma1 + ch + K[i] + W[i]; | |
var t2 = sigma0 + maj; | |
h = g; | |
g = f; | |
f = e; | |
e = (d + t1) | 0; | |
d = c; | |
c = b; | |
b = a; | |
a = (t1 + t2) | 0; | |
} | |
// Intermediate hash value | |
H[0] = (H[0] + a) | 0; | |
H[1] = (H[1] + b) | 0; | |
H[2] = (H[2] + c) | 0; | |
H[3] = (H[3] + d) | 0; | |
H[4] = (H[4] + e) | 0; | |
H[5] = (H[5] + f) | 0; | |
H[6] = (H[6] + g) | 0; | |
H[7] = (H[7] + h) | 0; | |
}, | |
_doFinalize: function () { | |
// Shortcuts | |
var data = this._data; | |
var dataWords = data.words; | |
var nBitsTotal = this._nDataBytes * 8; | |
var nBitsLeft = data.sigBytes * 8; | |
// Add padding | |
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); | |
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); | |
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; | |
data.sigBytes = dataWords.length * 4; | |
// Hash final blocks | |
this._process(); | |
// Return final computed hash | |
return this._hash; | |
}, | |
clone: function () { | |
var clone = Hasher.clone.call(this); | |
clone._hash = this._hash.clone(); | |
return clone; | |
} | |
}); | |
/** | |
* Shortcut function to the hasher's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* | |
* @return {WordArray} The hash. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hash = CryptoJS.SHA256('message'); | |
* var hash = CryptoJS.SHA256(wordArray); | |
*/ | |
C.SHA256 = Hasher._createHelper(SHA256); | |
/** | |
* Shortcut function to the HMAC's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* @param {WordArray|string} key The secret key. | |
* | |
* @return {WordArray} The HMAC. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hmac = CryptoJS.HmacSHA256(message, key); | |
*/ | |
C.HmacSHA256 = Hasher._createHmacHelper(SHA256); | |
}(Math)); | |
return CryptoJS.SHA256; | |
})); | |
},{"./core":105}],133:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./x64-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./x64-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function (Math) { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var WordArray = C_lib.WordArray; | |
var Hasher = C_lib.Hasher; | |
var C_x64 = C.x64; | |
var X64Word = C_x64.Word; | |
var C_algo = C.algo; | |
// Constants tables | |
var RHO_OFFSETS = []; | |
var PI_INDEXES = []; | |
var ROUND_CONSTANTS = []; | |
// Compute Constants | |
(function () { | |
// Compute rho offset constants | |
var x = 1, y = 0; | |
for (var t = 0; t < 24; t++) { | |
RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; | |
var newX = y % 5; | |
var newY = (2 * x + 3 * y) % 5; | |
x = newX; | |
y = newY; | |
} | |
// Compute pi index constants | |
for (var x = 0; x < 5; x++) { | |
for (var y = 0; y < 5; y++) { | |
PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; | |
} | |
} | |
// Compute round constants | |
var LFSR = 0x01; | |
for (var i = 0; i < 24; i++) { | |
var roundConstantMsw = 0; | |
var roundConstantLsw = 0; | |
for (var j = 0; j < 7; j++) { | |
if (LFSR & 0x01) { | |
var bitPosition = (1 << j) - 1; | |
if (bitPosition < 32) { | |
roundConstantLsw ^= 1 << bitPosition; | |
} else /* if (bitPosition >= 32) */ { | |
roundConstantMsw ^= 1 << (bitPosition - 32); | |
} | |
} | |
// Compute next LFSR | |
if (LFSR & 0x80) { | |
// Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 | |
LFSR = (LFSR << 1) ^ 0x71; | |
} else { | |
LFSR <<= 1; | |
} | |
} | |
ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); | |
} | |
}()); | |
// Reusable objects for temporary values | |
var T = []; | |
(function () { | |
for (var i = 0; i < 25; i++) { | |
T[i] = X64Word.create(); | |
} | |
}()); | |
/** | |
* SHA-3 hash algorithm. | |
*/ | |
var SHA3 = C_algo.SHA3 = Hasher.extend({ | |
/** | |
* Configuration options. | |
* | |
* @property {number} outputLength | |
* The desired number of bits in the output hash. | |
* Only values permitted are: 224, 256, 384, 512. | |
* Default: 512 | |
*/ | |
cfg: Hasher.cfg.extend({ | |
outputLength: 512 | |
}), | |
_doReset: function () { | |
var state = this._state = [] | |
for (var i = 0; i < 25; i++) { | |
state[i] = new X64Word.init(); | |
} | |
this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; | |
}, | |
_doProcessBlock: function (M, offset) { | |
// Shortcuts | |
var state = this._state; | |
var nBlockSizeLanes = this.blockSize / 2; | |
// Absorb | |
for (var i = 0; i < nBlockSizeLanes; i++) { | |
// Shortcuts | |
var M2i = M[offset + 2 * i]; | |
var M2i1 = M[offset + 2 * i + 1]; | |
// Swap endian | |
M2i = ( | |
(((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | | |
(((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) | |
); | |
M2i1 = ( | |
(((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | | |
(((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) | |
); | |
// Absorb message into state | |
var lane = state[i]; | |
lane.high ^= M2i1; | |
lane.low ^= M2i; | |
} | |
// Rounds | |
for (var round = 0; round < 24; round++) { | |
// Theta | |
for (var x = 0; x < 5; x++) { | |
// Mix column lanes | |
var tMsw = 0, tLsw = 0; | |
for (var y = 0; y < 5; y++) { | |
var lane = state[x + 5 * y]; | |
tMsw ^= lane.high; | |
tLsw ^= lane.low; | |
} | |
// Temporary values | |
var Tx = T[x]; | |
Tx.high = tMsw; | |
Tx.low = tLsw; | |
} | |
for (var x = 0; x < 5; x++) { | |
// Shortcuts | |
var Tx4 = T[(x + 4) % 5]; | |
var Tx1 = T[(x + 1) % 5]; | |
var Tx1Msw = Tx1.high; | |
var Tx1Lsw = Tx1.low; | |
// Mix surrounding columns | |
var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); | |
var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); | |
for (var y = 0; y < 5; y++) { | |
var lane = state[x + 5 * y]; | |
lane.high ^= tMsw; | |
lane.low ^= tLsw; | |
} | |
} | |
// Rho Pi | |
for (var laneIndex = 1; laneIndex < 25; laneIndex++) { | |
var tMsw; | |
var tLsw; | |
// Shortcuts | |
var lane = state[laneIndex]; | |
var laneMsw = lane.high; | |
var laneLsw = lane.low; | |
var rhoOffset = RHO_OFFSETS[laneIndex]; | |
// Rotate lanes | |
if (rhoOffset < 32) { | |
tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); | |
tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); | |
} else /* if (rhoOffset >= 32) */ { | |
tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); | |
tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); | |
} | |
// Transpose lanes | |
var TPiLane = T[PI_INDEXES[laneIndex]]; | |
TPiLane.high = tMsw; | |
TPiLane.low = tLsw; | |
} | |
// Rho pi at x = y = 0 | |
var T0 = T[0]; | |
var state0 = state[0]; | |
T0.high = state0.high; | |
T0.low = state0.low; | |
// Chi | |
for (var x = 0; x < 5; x++) { | |
for (var y = 0; y < 5; y++) { | |
// Shortcuts | |
var laneIndex = x + 5 * y; | |
var lane = state[laneIndex]; | |
var TLane = T[laneIndex]; | |
var Tx1Lane = T[((x + 1) % 5) + 5 * y]; | |
var Tx2Lane = T[((x + 2) % 5) + 5 * y]; | |
// Mix rows | |
lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); | |
lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); | |
} | |
} | |
// Iota | |
var lane = state[0]; | |
var roundConstant = ROUND_CONSTANTS[round]; | |
lane.high ^= roundConstant.high; | |
lane.low ^= roundConstant.low; | |
} | |
}, | |
_doFinalize: function () { | |
// Shortcuts | |
var data = this._data; | |
var dataWords = data.words; | |
var nBitsTotal = this._nDataBytes * 8; | |
var nBitsLeft = data.sigBytes * 8; | |
var blockSizeBits = this.blockSize * 32; | |
// Add padding | |
dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); | |
dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; | |
data.sigBytes = dataWords.length * 4; | |
// Hash final blocks | |
this._process(); | |
// Shortcuts | |
var state = this._state; | |
var outputLengthBytes = this.cfg.outputLength / 8; | |
var outputLengthLanes = outputLengthBytes / 8; | |
// Squeeze | |
var hashWords = []; | |
for (var i = 0; i < outputLengthLanes; i++) { | |
// Shortcuts | |
var lane = state[i]; | |
var laneMsw = lane.high; | |
var laneLsw = lane.low; | |
// Swap endian | |
laneMsw = ( | |
(((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | | |
(((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) | |
); | |
laneLsw = ( | |
(((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | | |
(((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) | |
); | |
// Squeeze state to retrieve hash | |
hashWords.push(laneLsw); | |
hashWords.push(laneMsw); | |
} | |
// Return final computed hash | |
return new WordArray.init(hashWords, outputLengthBytes); | |
}, | |
clone: function () { | |
var clone = Hasher.clone.call(this); | |
var state = clone._state = this._state.slice(0); | |
for (var i = 0; i < 25; i++) { | |
state[i] = state[i].clone(); | |
} | |
return clone; | |
} | |
}); | |
/** | |
* Shortcut function to the hasher's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* | |
* @return {WordArray} The hash. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hash = CryptoJS.SHA3('message'); | |
* var hash = CryptoJS.SHA3(wordArray); | |
*/ | |
C.SHA3 = Hasher._createHelper(SHA3); | |
/** | |
* Shortcut function to the HMAC's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* @param {WordArray|string} key The secret key. | |
* | |
* @return {WordArray} The HMAC. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hmac = CryptoJS.HmacSHA3(message, key); | |
*/ | |
C.HmacSHA3 = Hasher._createHmacHelper(SHA3); | |
}(Math)); | |
return CryptoJS.SHA3; | |
})); | |
},{"./core":105,"./x64-core":137}],134:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./x64-core", "./sha512"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_x64 = C.x64; | |
var X64Word = C_x64.Word; | |
var X64WordArray = C_x64.WordArray; | |
var C_algo = C.algo; | |
var SHA512 = C_algo.SHA512; | |
/** | |
* SHA-384 hash algorithm. | |
*/ | |
var SHA384 = C_algo.SHA384 = SHA512.extend({ | |
_doReset: function () { | |
this._hash = new X64WordArray.init([ | |
new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), | |
new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), | |
new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), | |
new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) | |
]); | |
}, | |
_doFinalize: function () { | |
var hash = SHA512._doFinalize.call(this); | |
hash.sigBytes -= 16; | |
return hash; | |
} | |
}); | |
/** | |
* Shortcut function to the hasher's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* | |
* @return {WordArray} The hash. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hash = CryptoJS.SHA384('message'); | |
* var hash = CryptoJS.SHA384(wordArray); | |
*/ | |
C.SHA384 = SHA512._createHelper(SHA384); | |
/** | |
* Shortcut function to the HMAC's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* @param {WordArray|string} key The secret key. | |
* | |
* @return {WordArray} The HMAC. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hmac = CryptoJS.HmacSHA384(message, key); | |
*/ | |
C.HmacSHA384 = SHA512._createHmacHelper(SHA384); | |
}()); | |
return CryptoJS.SHA384; | |
})); | |
},{"./core":105,"./sha512":135,"./x64-core":137}],135:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./x64-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./x64-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var Hasher = C_lib.Hasher; | |
var C_x64 = C.x64; | |
var X64Word = C_x64.Word; | |
var X64WordArray = C_x64.WordArray; | |
var C_algo = C.algo; | |
function X64Word_create() { | |
return X64Word.create.apply(X64Word, arguments); | |
} | |
// Constants | |
var K = [ | |
X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), | |
X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), | |
X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), | |
X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), | |
X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), | |
X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), | |
X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), | |
X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), | |
X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), | |
X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), | |
X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), | |
X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), | |
X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), | |
X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), | |
X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), | |
X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), | |
X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), | |
X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), | |
X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), | |
X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), | |
X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), | |
X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), | |
X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), | |
X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), | |
X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), | |
X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), | |
X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), | |
X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), | |
X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), | |
X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), | |
X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), | |
X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), | |
X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), | |
X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), | |
X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), | |
X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), | |
X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), | |
X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), | |
X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), | |
X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) | |
]; | |
// Reusable objects | |
var W = []; | |
(function () { | |
for (var i = 0; i < 80; i++) { | |
W[i] = X64Word_create(); | |
} | |
}()); | |
/** | |
* SHA-512 hash algorithm. | |
*/ | |
var SHA512 = C_algo.SHA512 = Hasher.extend({ | |
_doReset: function () { | |
this._hash = new X64WordArray.init([ | |
new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), | |
new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), | |
new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), | |
new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) | |
]); | |
}, | |
_doProcessBlock: function (M, offset) { | |
// Shortcuts | |
var H = this._hash.words; | |
var H0 = H[0]; | |
var H1 = H[1]; | |
var H2 = H[2]; | |
var H3 = H[3]; | |
var H4 = H[4]; | |
var H5 = H[5]; | |
var H6 = H[6]; | |
var H7 = H[7]; | |
var H0h = H0.high; | |
var H0l = H0.low; | |
var H1h = H1.high; | |
var H1l = H1.low; | |
var H2h = H2.high; | |
var H2l = H2.low; | |
var H3h = H3.high; | |
var H3l = H3.low; | |
var H4h = H4.high; | |
var H4l = H4.low; | |
var H5h = H5.high; | |
var H5l = H5.low; | |
var H6h = H6.high; | |
var H6l = H6.low; | |
var H7h = H7.high; | |
var H7l = H7.low; | |
// Working variables | |
var ah = H0h; | |
var al = H0l; | |
var bh = H1h; | |
var bl = H1l; | |
var ch = H2h; | |
var cl = H2l; | |
var dh = H3h; | |
var dl = H3l; | |
var eh = H4h; | |
var el = H4l; | |
var fh = H5h; | |
var fl = H5l; | |
var gh = H6h; | |
var gl = H6l; | |
var hh = H7h; | |
var hl = H7l; | |
// Rounds | |
for (var i = 0; i < 80; i++) { | |
var Wil; | |
var Wih; | |
// Shortcut | |
var Wi = W[i]; | |
// Extend message | |
if (i < 16) { | |
Wih = Wi.high = M[offset + i * 2] | 0; | |
Wil = Wi.low = M[offset + i * 2 + 1] | 0; | |
} else { | |
// Gamma0 | |
var gamma0x = W[i - 15]; | |
var gamma0xh = gamma0x.high; | |
var gamma0xl = gamma0x.low; | |
var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); | |
var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); | |
// Gamma1 | |
var gamma1x = W[i - 2]; | |
var gamma1xh = gamma1x.high; | |
var gamma1xl = gamma1x.low; | |
var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); | |
var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); | |
// W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] | |
var Wi7 = W[i - 7]; | |
var Wi7h = Wi7.high; | |
var Wi7l = Wi7.low; | |
var Wi16 = W[i - 16]; | |
var Wi16h = Wi16.high; | |
var Wi16l = Wi16.low; | |
Wil = gamma0l + Wi7l; | |
Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); | |
Wil = Wil + gamma1l; | |
Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); | |
Wil = Wil + Wi16l; | |
Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); | |
Wi.high = Wih; | |
Wi.low = Wil; | |
} | |
var chh = (eh & fh) ^ (~eh & gh); | |
var chl = (el & fl) ^ (~el & gl); | |
var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); | |
var majl = (al & bl) ^ (al & cl) ^ (bl & cl); | |
var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); | |
var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); | |
var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); | |
var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); | |
// t1 = h + sigma1 + ch + K[i] + W[i] | |
var Ki = K[i]; | |
var Kih = Ki.high; | |
var Kil = Ki.low; | |
var t1l = hl + sigma1l; | |
var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); | |
var t1l = t1l + chl; | |
var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); | |
var t1l = t1l + Kil; | |
var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); | |
var t1l = t1l + Wil; | |
var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); | |
// t2 = sigma0 + maj | |
var t2l = sigma0l + majl; | |
var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); | |
// Update working variables | |
hh = gh; | |
hl = gl; | |
gh = fh; | |
gl = fl; | |
fh = eh; | |
fl = el; | |
el = (dl + t1l) | 0; | |
eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; | |
dh = ch; | |
dl = cl; | |
ch = bh; | |
cl = bl; | |
bh = ah; | |
bl = al; | |
al = (t1l + t2l) | 0; | |
ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; | |
} | |
// Intermediate hash value | |
H0l = H0.low = (H0l + al); | |
H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); | |
H1l = H1.low = (H1l + bl); | |
H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); | |
H2l = H2.low = (H2l + cl); | |
H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); | |
H3l = H3.low = (H3l + dl); | |
H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); | |
H4l = H4.low = (H4l + el); | |
H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); | |
H5l = H5.low = (H5l + fl); | |
H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); | |
H6l = H6.low = (H6l + gl); | |
H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); | |
H7l = H7.low = (H7l + hl); | |
H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); | |
}, | |
_doFinalize: function () { | |
// Shortcuts | |
var data = this._data; | |
var dataWords = data.words; | |
var nBitsTotal = this._nDataBytes * 8; | |
var nBitsLeft = data.sigBytes * 8; | |
// Add padding | |
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); | |
dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); | |
dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; | |
data.sigBytes = dataWords.length * 4; | |
// Hash final blocks | |
this._process(); | |
// Convert hash to 32-bit word array before returning | |
var hash = this._hash.toX32(); | |
// Return final computed hash | |
return hash; | |
}, | |
clone: function () { | |
var clone = Hasher.clone.call(this); | |
clone._hash = this._hash.clone(); | |
return clone; | |
}, | |
blockSize: 1024/32 | |
}); | |
/** | |
* Shortcut function to the hasher's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* | |
* @return {WordArray} The hash. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hash = CryptoJS.SHA512('message'); | |
* var hash = CryptoJS.SHA512(wordArray); | |
*/ | |
C.SHA512 = Hasher._createHelper(SHA512); | |
/** | |
* Shortcut function to the HMAC's object interface. | |
* | |
* @param {WordArray|string} message The message to hash. | |
* @param {WordArray|string} key The secret key. | |
* | |
* @return {WordArray} The HMAC. | |
* | |
* @static | |
* | |
* @example | |
* | |
* var hmac = CryptoJS.HmacSHA512(message, key); | |
*/ | |
C.HmacSHA512 = Hasher._createHmacHelper(SHA512); | |
}()); | |
return CryptoJS.SHA512; | |
})); | |
},{"./core":105,"./x64-core":137}],136:[function(require,module,exports){ | |
;(function (root, factory, undef) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function () { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var WordArray = C_lib.WordArray; | |
var BlockCipher = C_lib.BlockCipher; | |
var C_algo = C.algo; | |
// Permuted Choice 1 constants | |
var PC1 = [ | |
57, 49, 41, 33, 25, 17, 9, 1, | |
58, 50, 42, 34, 26, 18, 10, 2, | |
59, 51, 43, 35, 27, 19, 11, 3, | |
60, 52, 44, 36, 63, 55, 47, 39, | |
31, 23, 15, 7, 62, 54, 46, 38, | |
30, 22, 14, 6, 61, 53, 45, 37, | |
29, 21, 13, 5, 28, 20, 12, 4 | |
]; | |
// Permuted Choice 2 constants | |
var PC2 = [ | |
14, 17, 11, 24, 1, 5, | |
3, 28, 15, 6, 21, 10, | |
23, 19, 12, 4, 26, 8, | |
16, 7, 27, 20, 13, 2, | |
41, 52, 31, 37, 47, 55, | |
30, 40, 51, 45, 33, 48, | |
44, 49, 39, 56, 34, 53, | |
46, 42, 50, 36, 29, 32 | |
]; | |
// Cumulative bit shift constants | |
var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; | |
// SBOXes and round permutation constants | |
var SBOX_P = [ | |
{ | |
0x0: 0x808200, | |
0x10000000: 0x8000, | |
0x20000000: 0x808002, | |
0x30000000: 0x2, | |
0x40000000: 0x200, | |
0x50000000: 0x808202, | |
0x60000000: 0x800202, | |
0x70000000: 0x800000, | |
0x80000000: 0x202, | |
0x90000000: 0x800200, | |
0xa0000000: 0x8200, | |
0xb0000000: 0x808000, | |
0xc0000000: 0x8002, | |
0xd0000000: 0x800002, | |
0xe0000000: 0x0, | |
0xf0000000: 0x8202, | |
0x8000000: 0x0, | |
0x18000000: 0x808202, | |
0x28000000: 0x8202, | |
0x38000000: 0x8000, | |
0x48000000: 0x808200, | |
0x58000000: 0x200, | |
0x68000000: 0x808002, | |
0x78000000: 0x2, | |
0x88000000: 0x800200, | |
0x98000000: 0x8200, | |
0xa8000000: 0x808000, | |
0xb8000000: 0x800202, | |
0xc8000000: 0x800002, | |
0xd8000000: 0x8002, | |
0xe8000000: 0x202, | |
0xf8000000: 0x800000, | |
0x1: 0x8000, | |
0x10000001: 0x2, | |
0x20000001: 0x808200, | |
0x30000001: 0x800000, | |
0x40000001: 0x808002, | |
0x50000001: 0x8200, | |
0x60000001: 0x200, | |
0x70000001: 0x800202, | |
0x80000001: 0x808202, | |
0x90000001: 0x808000, | |
0xa0000001: 0x800002, | |
0xb0000001: 0x8202, | |
0xc0000001: 0x202, | |
0xd0000001: 0x800200, | |
0xe0000001: 0x8002, | |
0xf0000001: 0x0, | |
0x8000001: 0x808202, | |
0x18000001: 0x808000, | |
0x28000001: 0x800000, | |
0x38000001: 0x200, | |
0x48000001: 0x8000, | |
0x58000001: 0x800002, | |
0x68000001: 0x2, | |
0x78000001: 0x8202, | |
0x88000001: 0x8002, | |
0x98000001: 0x800202, | |
0xa8000001: 0x202, | |
0xb8000001: 0x808200, | |
0xc8000001: 0x800200, | |
0xd8000001: 0x0, | |
0xe8000001: 0x8200, | |
0xf8000001: 0x808002 | |
}, | |
{ | |
0x0: 0x40084010, | |
0x1000000: 0x4000, | |
0x2000000: 0x80000, | |
0x3000000: 0x40080010, | |
0x4000000: 0x40000010, | |
0x5000000: 0x40084000, | |
0x6000000: 0x40004000, | |
0x7000000: 0x10, | |
0x8000000: 0x84000, | |
0x9000000: 0x40004010, | |
0xa000000: 0x40000000, | |
0xb000000: 0x84010, | |
0xc000000: 0x80010, | |
0xd000000: 0x0, | |
0xe000000: 0x4010, | |
0xf000000: 0x40080000, | |
0x800000: 0x40004000, | |
0x1800000: 0x84010, | |
0x2800000: 0x10, | |
0x3800000: 0x40004010, | |
0x4800000: 0x40084010, | |
0x5800000: 0x40000000, | |
0x6800000: 0x80000, | |
0x7800000: 0x40080010, | |
0x8800000: 0x80010, | |
0x9800000: 0x0, | |
0xa800000: 0x4000, | |
0xb800000: 0x40080000, | |
0xc800000: 0x40000010, | |
0xd800000: 0x84000, | |
0xe800000: 0x40084000, | |
0xf800000: 0x4010, | |
0x10000000: 0x0, | |
0x11000000: 0x40080010, | |
0x12000000: 0x40004010, | |
0x13000000: 0x40084000, | |
0x14000000: 0x40080000, | |
0x15000000: 0x10, | |
0x16000000: 0x84010, | |
0x17000000: 0x4000, | |
0x18000000: 0x4010, | |
0x19000000: 0x80000, | |
0x1a000000: 0x80010, | |
0x1b000000: 0x40000010, | |
0x1c000000: 0x84000, | |
0x1d000000: 0x40004000, | |
0x1e000000: 0x40000000, | |
0x1f000000: 0x40084010, | |
0x10800000: 0x84010, | |
0x11800000: 0x80000, | |
0x12800000: 0x40080000, | |
0x13800000: 0x4000, | |
0x14800000: 0x40004000, | |
0x15800000: 0x40084010, | |
0x16800000: 0x10, | |
0x17800000: 0x40000000, | |
0x18800000: 0x40084000, | |
0x19800000: 0x40000010, | |
0x1a800000: 0x40004010, | |
0x1b800000: 0x80010, | |
0x1c800000: 0x0, | |
0x1d800000: 0x4010, | |
0x1e800000: 0x40080010, | |
0x1f800000: 0x84000 | |
}, | |
{ | |
0x0: 0x104, | |
0x100000: 0x0, | |
0x200000: 0x4000100, | |
0x300000: 0x10104, | |
0x400000: 0x10004, | |
0x500000: 0x4000004, | |
0x600000: 0x4010104, | |
0x700000: 0x4010000, | |
0x800000: 0x4000000, | |
0x900000: 0x4010100, | |
0xa00000: 0x10100, | |
0xb00000: 0x4010004, | |
0xc00000: 0x4000104, | |
0xd00000: 0x10000, | |
0xe00000: 0x4, | |
0xf00000: 0x100, | |
0x80000: 0x4010100, | |
0x180000: 0x4010004, | |
0x280000: 0x0, | |
0x380000: 0x4000100, | |
0x480000: 0x4000004, | |
0x580000: 0x10000, | |
0x680000: 0x10004, | |
0x780000: 0x104, | |
0x880000: 0x4, | |
0x980000: 0x100, | |
0xa80000: 0x4010000, | |
0xb80000: 0x10104, | |
0xc80000: 0x10100, | |
0xd80000: 0x4000104, | |
0xe80000: 0x4010104, | |
0xf80000: 0x4000000, | |
0x1000000: 0x4010100, | |
0x1100000: 0x10004, | |
0x1200000: 0x10000, | |
0x1300000: 0x4000100, | |
0x1400000: 0x100, | |
0x1500000: 0x4010104, | |
0x1600000: 0x4000004, | |
0x1700000: 0x0, | |
0x1800000: 0x4000104, | |
0x1900000: 0x4000000, | |
0x1a00000: 0x4, | |
0x1b00000: 0x10100, | |
0x1c00000: 0x4010000, | |
0x1d00000: 0x104, | |
0x1e00000: 0x10104, | |
0x1f00000: 0x4010004, | |
0x1080000: 0x4000000, | |
0x1180000: 0x104, | |
0x1280000: 0x4010100, | |
0x1380000: 0x0, | |
0x1480000: 0x10004, | |
0x1580000: 0x4000100, | |
0x1680000: 0x100, | |
0x1780000: 0x4010004, | |
0x1880000: 0x10000, | |
0x1980000: 0x4010104, | |
0x1a80000: 0x10104, | |
0x1b80000: 0x4000004, | |
0x1c80000: 0x4000104, | |
0x1d80000: 0x4010000, | |
0x1e80000: 0x4, | |
0x1f80000: 0x10100 | |
}, | |
{ | |
0x0: 0x80401000, | |
0x10000: 0x80001040, | |
0x20000: 0x401040, | |
0x30000: 0x80400000, | |
0x40000: 0x0, | |
0x50000: 0x401000, | |
0x60000: 0x80000040, | |
0x70000: 0x400040, | |
0x80000: 0x80000000, | |
0x90000: 0x400000, | |
0xa0000: 0x40, | |
0xb0000: 0x80001000, | |
0xc0000: 0x80400040, | |
0xd0000: 0x1040, | |
0xe0000: 0x1000, | |
0xf0000: 0x80401040, | |
0x8000: 0x80001040, | |
0x18000: 0x40, | |
0x28000: 0x80400040, | |
0x38000: 0x80001000, | |
0x48000: 0x401000, | |
0x58000: 0x80401040, | |
0x68000: 0x0, | |
0x78000: 0x80400000, | |
0x88000: 0x1000, | |
0x98000: 0x80401000, | |
0xa8000: 0x400000, | |
0xb8000: 0x1040, | |
0xc8000: 0x80000000, | |
0xd8000: 0x400040, | |
0xe8000: 0x401040, | |
0xf8000: 0x80000040, | |
0x100000: 0x400040, | |
0x110000: 0x401000, | |
0x120000: 0x80000040, | |
0x130000: 0x0, | |
0x140000: 0x1040, | |
0x150000: 0x80400040, | |
0x160000: 0x80401000, | |
0x170000: 0x80001040, | |
0x180000: 0x80401040, | |
0x190000: 0x80000000, | |
0x1a0000: 0x80400000, | |
0x1b0000: 0x401040, | |
0x1c0000: 0x80001000, | |
0x1d0000: 0x400000, | |
0x1e0000: 0x40, | |
0x1f0000: 0x1000, | |
0x108000: 0x80400000, | |
0x118000: 0x80401040, | |
0x128000: 0x0, | |
0x138000: 0x401000, | |
0x148000: 0x400040, | |
0x158000: 0x80000000, | |
0x168000: 0x80001040, | |
0x178000: 0x40, | |
0x188000: 0x80000040, | |
0x198000: 0x1000, | |
0x1a8000: 0x80001000, | |
0x1b8000: 0x80400040, | |
0x1c8000: 0x1040, | |
0x1d8000: 0x80401000, | |
0x1e8000: 0x400000, | |
0x1f8000: 0x401040 | |
}, | |
{ | |
0x0: 0x80, | |
0x1000: 0x1040000, | |
0x2000: 0x40000, | |
0x3000: 0x20000000, | |
0x4000: 0x20040080, | |
0x5000: 0x1000080, | |
0x6000: 0x21000080, | |
0x7000: 0x40080, | |
0x8000: 0x1000000, | |
0x9000: 0x20040000, | |
0xa000: 0x20000080, | |
0xb000: 0x21040080, | |
0xc000: 0x21040000, | |
0xd000: 0x0, | |
0xe000: 0x1040080, | |
0xf000: 0x21000000, | |
0x800: 0x1040080, | |
0x1800: 0x21000080, | |
0x2800: 0x80, | |
0x3800: 0x1040000, | |
0x4800: 0x40000, | |
0x5800: 0x20040080, | |
0x6800: 0x21040000, | |
0x7800: 0x20000000, | |
0x8800: 0x20040000, | |
0x9800: 0x0, | |
0xa800: 0x21040080, | |
0xb800: 0x1000080, | |
0xc800: 0x20000080, | |
0xd800: 0x21000000, | |
0xe800: 0x1000000, | |
0xf800: 0x40080, | |
0x10000: 0x40000, | |
0x11000: 0x80, | |
0x12000: 0x20000000, | |
0x13000: 0x21000080, | |
0x14000: 0x1000080, | |
0x15000: 0x21040000, | |
0x16000: 0x20040080, | |
0x17000: 0x1000000, | |
0x18000: 0x21040080, | |
0x19000: 0x21000000, | |
0x1a000: 0x1040000, | |
0x1b000: 0x20040000, | |
0x1c000: 0x40080, | |
0x1d000: 0x20000080, | |
0x1e000: 0x0, | |
0x1f000: 0x1040080, | |
0x10800: 0x21000080, | |
0x11800: 0x1000000, | |
0x12800: 0x1040000, | |
0x13800: 0x20040080, | |
0x14800: 0x20000000, | |
0x15800: 0x1040080, | |
0x16800: 0x80, | |
0x17800: 0x21040000, | |
0x18800: 0x40080, | |
0x19800: 0x21040080, | |
0x1a800: 0x0, | |
0x1b800: 0x21000000, | |
0x1c800: 0x1000080, | |
0x1d800: 0x40000, | |
0x1e800: 0x20040000, | |
0x1f800: 0x20000080 | |
}, | |
{ | |
0x0: 0x10000008, | |
0x100: 0x2000, | |
0x200: 0x10200000, | |
0x300: 0x10202008, | |
0x400: 0x10002000, | |
0x500: 0x200000, | |
0x600: 0x200008, | |
0x700: 0x10000000, | |
0x800: 0x0, | |
0x900: 0x10002008, | |
0xa00: 0x202000, | |
0xb00: 0x8, | |
0xc00: 0x10200008, | |
0xd00: 0x202008, | |
0xe00: 0x2008, | |
0xf00: 0x10202000, | |
0x80: 0x10200000, | |
0x180: 0x10202008, | |
0x280: 0x8, | |
0x380: 0x200000, | |
0x480: 0x202008, | |
0x580: 0x10000008, | |
0x680: 0x10002000, | |
0x780: 0x2008, | |
0x880: 0x200008, | |
0x980: 0x2000, | |
0xa80: 0x10002008, | |
0xb80: 0x10200008, | |
0xc80: 0x0, | |
0xd80: 0x10202000, | |
0xe80: 0x202000, | |
0xf80: 0x10000000, | |
0x1000: 0x10002000, | |
0x1100: 0x10200008, | |
0x1200: 0x10202008, | |
0x1300: 0x2008, | |
0x1400: 0x200000, | |
0x1500: 0x10000000, | |
0x1600: 0x10000008, | |
0x1700: 0x202000, | |
0x1800: 0x202008, | |
0x1900: 0x0, | |
0x1a00: 0x8, | |
0x1b00: 0x10200000, | |
0x1c00: 0x2000, | |
0x1d00: 0x10002008, | |
0x1e00: 0x10202000, | |
0x1f00: 0x200008, | |
0x1080: 0x8, | |
0x1180: 0x202000, | |
0x1280: 0x200000, | |
0x1380: 0x10000008, | |
0x1480: 0x10002000, | |
0x1580: 0x2008, | |
0x1680: 0x10202008, | |
0x1780: 0x10200000, | |
0x1880: 0x10202000, | |
0x1980: 0x10200008, | |
0x1a80: 0x2000, | |
0x1b80: 0x202008, | |
0x1c80: 0x200008, | |
0x1d80: 0x0, | |
0x1e80: 0x10000000, | |
0x1f80: 0x10002008 | |
}, | |
{ | |
0x0: 0x100000, | |
0x10: 0x2000401, | |
0x20: 0x400, | |
0x30: 0x100401, | |
0x40: 0x2100401, | |
0x50: 0x0, | |
0x60: 0x1, | |
0x70: 0x2100001, | |
0x80: 0x2000400, | |
0x90: 0x100001, | |
0xa0: 0x2000001, | |
0xb0: 0x2100400, | |
0xc0: 0x2100000, | |
0xd0: 0x401, | |
0xe0: 0x100400, | |
0xf0: 0x2000000, | |
0x8: 0x2100001, | |
0x18: 0x0, | |
0x28: 0x2000401, | |
0x38: 0x2100400, | |
0x48: 0x100000, | |
0x58: 0x2000001, | |
0x68: 0x2000000, | |
0x78: 0x401, | |
0x88: 0x100401, | |
0x98: 0x2000400, | |
0xa8: 0x2100000, | |
0xb8: 0x100001, | |
0xc8: 0x400, | |
0xd8: 0x2100401, | |
0xe8: 0x1, | |
0xf8: 0x100400, | |
0x100: 0x2000000, | |
0x110: 0x100000, | |
0x120: 0x2000401, | |
0x130: 0x2100001, | |
0x140: 0x100001, | |
0x150: 0x2000400, | |
0x160: 0x2100400, | |
0x170: 0x100401, | |
0x180: 0x401, | |
0x190: 0x2100401, | |
0x1a0: 0x100400, | |
0x1b0: 0x1, | |
0x1c0: 0x0, | |
0x1d0: 0x2100000, | |
0x1e0: 0x2000001, | |
0x1f0: 0x400, | |
0x108: 0x100400, | |
0x118: 0x2000401, | |
0x128: 0x2100001, | |
0x138: 0x1, | |
0x148: 0x2000000, | |
0x158: 0x100000, | |
0x168: 0x401, | |
0x178: 0x2100400, | |
0x188: 0x2000001, | |
0x198: 0x2100000, | |
0x1a8: 0x0, | |
0x1b8: 0x2100401, | |
0x1c8: 0x100401, | |
0x1d8: 0x400, | |
0x1e8: 0x2000400, | |
0x1f8: 0x100001 | |
}, | |
{ | |
0x0: 0x8000820, | |
0x1: 0x20000, | |
0x2: 0x8000000, | |
0x3: 0x20, | |
0x4: 0x20020, | |
0x5: 0x8020820, | |
0x6: 0x8020800, | |
0x7: 0x800, | |
0x8: 0x8020000, | |
0x9: 0x8000800, | |
0xa: 0x20800, | |
0xb: 0x8020020, | |
0xc: 0x820, | |
0xd: 0x0, | |
0xe: 0x8000020, | |
0xf: 0x20820, | |
0x80000000: 0x800, | |
0x80000001: 0x8020820, | |
0x80000002: 0x8000820, | |
0x80000003: 0x8000000, | |
0x80000004: 0x8020000, | |
0x80000005: 0x20800, | |
0x80000006: 0x20820, | |
0x80000007: 0x20, | |
0x80000008: 0x8000020, | |
0x80000009: 0x820, | |
0x8000000a: 0x20020, | |
0x8000000b: 0x8020800, | |
0x8000000c: 0x0, | |
0x8000000d: 0x8020020, | |
0x8000000e: 0x8000800, | |
0x8000000f: 0x20000, | |
0x10: 0x20820, | |
0x11: 0x8020800, | |
0x12: 0x20, | |
0x13: 0x800, | |
0x14: 0x8000800, | |
0x15: 0x8000020, | |
0x16: 0x8020020, | |
0x17: 0x20000, | |
0x18: 0x0, | |
0x19: 0x20020, | |
0x1a: 0x8020000, | |
0x1b: 0x8000820, | |
0x1c: 0x8020820, | |
0x1d: 0x20800, | |
0x1e: 0x820, | |
0x1f: 0x8000000, | |
0x80000010: 0x20000, | |
0x80000011: 0x800, | |
0x80000012: 0x8020020, | |
0x80000013: 0x20820, | |
0x80000014: 0x20, | |
0x80000015: 0x8020000, | |
0x80000016: 0x8000000, | |
0x80000017: 0x8000820, | |
0x80000018: 0x8020820, | |
0x80000019: 0x8000020, | |
0x8000001a: 0x8000800, | |
0x8000001b: 0x0, | |
0x8000001c: 0x20800, | |
0x8000001d: 0x820, | |
0x8000001e: 0x20020, | |
0x8000001f: 0x8020800 | |
} | |
]; | |
// Masks that select the SBOX input | |
var SBOX_MASK = [ | |
0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, | |
0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f | |
]; | |
/** | |
* DES block cipher algorithm. | |
*/ | |
var DES = C_algo.DES = BlockCipher.extend({ | |
_doReset: function () { | |
// Shortcuts | |
var key = this._key; | |
var keyWords = key.words; | |
// Select 56 bits according to PC1 | |
var keyBits = []; | |
for (var i = 0; i < 56; i++) { | |
var keyBitPos = PC1[i] - 1; | |
keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; | |
} | |
// Assemble 16 subkeys | |
var subKeys = this._subKeys = []; | |
for (var nSubKey = 0; nSubKey < 16; nSubKey++) { | |
// Create subkey | |
var subKey = subKeys[nSubKey] = []; | |
// Shortcut | |
var bitShift = BIT_SHIFTS[nSubKey]; | |
// Select 48 bits according to PC2 | |
for (var i = 0; i < 24; i++) { | |
// Select from the left 28 key bits | |
subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); | |
// Select from the right 28 key bits | |
subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); | |
} | |
// Since each subkey is applied to an expanded 32-bit input, | |
// the subkey can be broken into 8 values scaled to 32-bits, | |
// which allows the key to be used without expansion | |
subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); | |
for (var i = 1; i < 7; i++) { | |
subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); | |
} | |
subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); | |
} | |
// Compute inverse subkeys | |
var invSubKeys = this._invSubKeys = []; | |
for (var i = 0; i < 16; i++) { | |
invSubKeys[i] = subKeys[15 - i]; | |
} | |
}, | |
encryptBlock: function (M, offset) { | |
this._doCryptBlock(M, offset, this._subKeys); | |
}, | |
decryptBlock: function (M, offset) { | |
this._doCryptBlock(M, offset, this._invSubKeys); | |
}, | |
_doCryptBlock: function (M, offset, subKeys) { | |
// Get input | |
this._lBlock = M[offset]; | |
this._rBlock = M[offset + 1]; | |
// Initial permutation | |
exchangeLR.call(this, 4, 0x0f0f0f0f); | |
exchangeLR.call(this, 16, 0x0000ffff); | |
exchangeRL.call(this, 2, 0x33333333); | |
exchangeRL.call(this, 8, 0x00ff00ff); | |
exchangeLR.call(this, 1, 0x55555555); | |
// Rounds | |
for (var round = 0; round < 16; round++) { | |
// Shortcuts | |
var subKey = subKeys[round]; | |
var lBlock = this._lBlock; | |
var rBlock = this._rBlock; | |
// Feistel function | |
var f = 0; | |
for (var i = 0; i < 8; i++) { | |
f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; | |
} | |
this._lBlock = rBlock; | |
this._rBlock = lBlock ^ f; | |
} | |
// Undo swap from last round | |
var t = this._lBlock; | |
this._lBlock = this._rBlock; | |
this._rBlock = t; | |
// Final permutation | |
exchangeLR.call(this, 1, 0x55555555); | |
exchangeRL.call(this, 8, 0x00ff00ff); | |
exchangeRL.call(this, 2, 0x33333333); | |
exchangeLR.call(this, 16, 0x0000ffff); | |
exchangeLR.call(this, 4, 0x0f0f0f0f); | |
// Set output | |
M[offset] = this._lBlock; | |
M[offset + 1] = this._rBlock; | |
}, | |
keySize: 64/32, | |
ivSize: 64/32, | |
blockSize: 64/32 | |
}); | |
// Swap bits across the left and right words | |
function exchangeLR(offset, mask) { | |
var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; | |
this._rBlock ^= t; | |
this._lBlock ^= t << offset; | |
} | |
function exchangeRL(offset, mask) { | |
var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; | |
this._lBlock ^= t; | |
this._rBlock ^= t << offset; | |
} | |
/** | |
* Shortcut functions to the cipher's object interface. | |
* | |
* @example | |
* | |
* var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); | |
* var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); | |
*/ | |
C.DES = BlockCipher._createHelper(DES); | |
/** | |
* Triple-DES block cipher algorithm. | |
*/ | |
var TripleDES = C_algo.TripleDES = BlockCipher.extend({ | |
_doReset: function () { | |
// Shortcuts | |
var key = this._key; | |
var keyWords = key.words; | |
// Make sure the key length is valid (64, 128 or >= 192 bit) | |
if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) { | |
throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.'); | |
} | |
// Extend the key according to the keying options defined in 3DES standard | |
var key1 = keyWords.slice(0, 2); | |
var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4); | |
var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6); | |
// Create DES instances | |
this._des1 = DES.createEncryptor(WordArray.create(key1)); | |
this._des2 = DES.createEncryptor(WordArray.create(key2)); | |
this._des3 = DES.createEncryptor(WordArray.create(key3)); | |
}, | |
encryptBlock: function (M, offset) { | |
this._des1.encryptBlock(M, offset); | |
this._des2.decryptBlock(M, offset); | |
this._des3.encryptBlock(M, offset); | |
}, | |
decryptBlock: function (M, offset) { | |
this._des3.decryptBlock(M, offset); | |
this._des2.encryptBlock(M, offset); | |
this._des1.decryptBlock(M, offset); | |
}, | |
keySize: 192/32, | |
ivSize: 64/32, | |
blockSize: 64/32 | |
}); | |
/** | |
* Shortcut functions to the cipher's object interface. | |
* | |
* @example | |
* | |
* var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); | |
* var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); | |
*/ | |
C.TripleDES = BlockCipher._createHelper(TripleDES); | |
}()); | |
return CryptoJS.TripleDES; | |
})); | |
},{"./cipher-core":104,"./core":105,"./enc-base64":106,"./evpkdf":109,"./md5":114}],137:[function(require,module,exports){ | |
;(function (root, factory) { | |
if (typeof exports === "object") { | |
// CommonJS | |
module.exports = exports = factory(require("./core")); | |
} | |
else if (typeof define === "function" && define.amd) { | |
// AMD | |
define(["./core"], factory); | |
} | |
else { | |
// Global (browser) | |
factory(root.CryptoJS); | |
} | |
}(this, function (CryptoJS) { | |
(function (undefined) { | |
// Shortcuts | |
var C = CryptoJS; | |
var C_lib = C.lib; | |
var Base = C_lib.Base; | |
var X32WordArray = C_lib.WordArray; | |
/** | |
* x64 namespace. | |
*/ | |
var C_x64 = C.x64 = {}; | |
/** | |
* A 64-bit word. | |
*/ | |
var X64Word = C_x64.Word = Base.extend({ | |
/** | |
* Initializes a newly created 64-bit word. | |
* | |
* @param {number} high The high 32 bits. | |
* @param {number} low The low 32 bits. | |
* | |
* @example | |
* | |
* var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); | |
*/ | |
init: function (high, low) { | |
this.high = high; | |
this.low = low; | |
} | |
/** | |
* Bitwise NOTs this word. | |
* | |
* @return {X64Word} A new x64-Word object after negating. | |
* | |
* @example | |
* | |
* var negated = x64Word.not(); | |
*/ | |
// not: function () { | |
// var high = ~this.high; | |
// var low = ~this.low; | |
// return X64Word.create(high, low); | |
// }, | |
/** | |
* Bitwise ANDs this word with the passed word. | |
* | |
* @param {X64Word} word The x64-Word to AND with this word. | |
* | |
* @return {X64Word} A new x64-Word object after ANDing. | |
* | |
* @example | |
* | |
* var anded = x64Word.and(anotherX64Word); | |
*/ | |
// and: function (word) { | |
// var high = this.high & word.high; | |
// var low = this.low & word.low; | |
// return X64Word.create(high, low); | |
// }, | |
/** | |
* Bitwise ORs this word with the passed word. | |
* | |
* @param {X64Word} word The x64-Word to OR with this word. | |
* | |
* @return {X64Word} A new x64-Word object after ORing. | |
* | |
* @example | |
* | |
* var ored = x64Word.or(anotherX64Word); | |
*/ | |
// or: function (word) { | |
// var high = this.high | word.high; | |
// var low = this.low | word.low; | |
// return X64Word.create(high, low); | |
// }, | |
/** | |
* Bitwise XORs this word with the passed word. | |
* | |
* @param {X64Word} word The x64-Word to XOR with this word. | |
* | |
* @return {X64Word} A new x64-Word object after XORing. | |
* | |
* @example | |
* | |
* var xored = x64Word.xor(anotherX64Word); | |
*/ | |
// xor: function (word) { | |
// var high = this.high ^ word.high; | |
// var low = this.low ^ word.low; | |
// return X64Word.create(high, low); | |
// }, | |
/** | |
* Shifts this word n bits to the left. | |
* | |
* @param {number} n The number of bits to shift. | |
* | |
* @return {X64Word} A new x64-Word object after shifting. | |
* | |
* @example | |
* | |
* var shifted = x64Word.shiftL(25); | |
*/ | |
// shiftL: function (n) { | |
// if (n < 32) { | |
// var high = (this.high << n) | (this.low >>> (32 - n)); | |
// var low = this.low << n; | |
// } else { | |
// var high = this.low << (n - 32); | |
// var low = 0; | |
// } | |
// return X64Word.create(high, low); | |
// }, | |
/** | |
* Shifts this word n bits to the right. | |
* | |
* @param {number} n The number of bits to shift. | |
* | |
* @return {X64Word} A new x64-Word object after shifting. | |
* | |
* @example | |
* | |
* var shifted = x64Word.shiftR(7); | |
*/ | |
// shiftR: function (n) { | |
// if (n < 32) { | |
// var low = (this.low >>> n) | (this.high << (32 - n)); | |
// var high = this.high >>> n; | |
// } else { | |
// var low = this.high >>> (n - 32); | |
// var high = 0; | |
// } | |
// return X64Word.create(high, low); | |
// }, | |
/** | |
* Rotates this word n bits to the left. | |
* | |
* @param {number} n The number of bits to rotate. | |
* | |
* @return {X64Word} A new x64-Word object after rotating. | |
* | |
* @example | |
* | |
* var rotated = x64Word.rotL(25); | |
*/ | |
// rotL: function (n) { | |
// return this.shiftL(n).or(this.shiftR(64 - n)); | |
// }, | |
/** | |
* Rotates this word n bits to the right. | |
* | |
* @param {number} n The number of bits to rotate. | |
* | |
* @return {X64Word} A new x64-Word object after rotating. | |
* | |
* @example | |
* | |
* var rotated = x64Word.rotR(7); | |
*/ | |
// rotR: function (n) { | |
// return this.shiftR(n).or(this.shiftL(64 - n)); | |
// }, | |
/** | |
* Adds this word with the passed word. | |
* | |
* @param {X64Word} word The x64-Word to add with this word. | |
* | |
* @return {X64Word} A new x64-Word object after adding. | |
* | |
* @example | |
* | |
* var added = x64Word.add(anotherX64Word); | |
*/ | |
// add: function (word) { | |
// var low = (this.low + word.low) | 0; | |
// var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; | |
// var high = (this.high + word.high + carry) | 0; | |
// return X64Word.create(high, low); | |
// } | |
}); | |
/** | |
* An array of 64-bit words. | |
* | |
* @property {Array} words The array of CryptoJS.x64.Word objects. | |
* @property {number} sigBytes The number of significant bytes in this word array. | |
*/ | |
var X64WordArray = C_x64.WordArray = Base.extend({ | |
/** | |
* Initializes a newly created word array. | |
* | |
* @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. | |
* @param {number} sigBytes (Optional) The number of significant bytes in the words. | |
* | |
* @example | |
* | |
* var wordArray = CryptoJS.x64.WordArray.create(); | |
* | |
* var wordArray = CryptoJS.x64.WordArray.create([ | |
* CryptoJS.x64.Word.create(0x00010203, 0x04050607), | |
* CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) | |
* ]); | |
* | |
* var wordArray = CryptoJS.x64.WordArray.create([ | |
* CryptoJS.x64.Word.create(0x00010203, 0x04050607), | |
* CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) | |
* ], 10); | |
*/ | |
init: function (words, sigBytes) { | |
words = this.words = words || []; | |
if (sigBytes != undefined) { | |
this.sigBytes = sigBytes; | |
} else { | |
this.sigBytes = words.length * 8; | |
} | |
}, | |
/** | |
* Converts this 64-bit word array to a 32-bit word array. | |
* | |
* @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. | |
* | |
* @example | |
* | |
* var x32WordArray = x64WordArray.toX32(); | |
*/ | |
toX32: function () { | |
// Shortcuts | |
var x64Words = this.words; | |
var x64WordsLength = x64Words.length; | |
// Convert | |
var x32Words = []; | |
for (var i = 0; i < x64WordsLength; i++) { | |
var x64Word = x64Words[i]; | |
x32Words.push(x64Word.high); | |
x32Words.push(x64Word.low); | |
} | |
return X32WordArray.create(x32Words, this.sigBytes); | |
}, | |
/** | |
* Creates a copy of this word array. | |
* | |
* @return {X64WordArray} The clone. | |
* | |
* @example | |
* | |
* var clone = x64WordArray.clone(); | |
*/ | |
clone: function () { | |
var clone = Base.clone.call(this); | |
// Clone "words" array | |
var words = clone.words = this.words.slice(0); | |
// Clone each X64Word object | |
var wordsLength = words.length; | |
for (var i = 0; i < wordsLength; i++) { | |
words[i] = words[i].clone(); | |
} | |
return clone; | |
} | |
}); | |
}()); | |
return CryptoJS; | |
})); | |
},{"./core":105}],138:[function(require,module,exports){ | |
'use strict'; | |
var assign = require('object.assign'); | |
var callBound = require('call-bind/callBound'); | |
var flags = require('regexp.prototype.flags'); | |
var GetIntrinsic = require('get-intrinsic'); | |
var getIterator = require('es-get-iterator'); | |
var getSideChannel = require('side-channel'); | |
var is = require('object-is'); | |
var isArguments = require('is-arguments'); | |
var isArray = require('isarray'); | |
var isArrayBuffer = require('is-array-buffer'); | |
var isDate = require('is-date-object'); | |
var isRegex = require('is-regex'); | |
var isSharedArrayBuffer = require('is-shared-array-buffer'); | |
var objectKeys = require('object-keys'); | |
var whichBoxedPrimitive = require('which-boxed-primitive'); | |
var whichCollection = require('which-collection'); | |
var whichTypedArray = require('which-typed-array'); | |
var byteLength = require('array-buffer-byte-length'); | |
var sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); | |
var $getTime = callBound('Date.prototype.getTime'); | |
var gPO = Object.getPrototypeOf; | |
var $objToString = callBound('Object.prototype.toString'); | |
var $Set = GetIntrinsic('%Set%', true); | |
var $mapHas = callBound('Map.prototype.has', true); | |
var $mapGet = callBound('Map.prototype.get', true); | |
var $mapSize = callBound('Map.prototype.size', true); | |
var $setAdd = callBound('Set.prototype.add', true); | |
var $setDelete = callBound('Set.prototype.delete', true); | |
var $setHas = callBound('Set.prototype.has', true); | |
var $setSize = callBound('Set.prototype.size', true); | |
// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L401-L414 | |
function setHasEqualElement(set, val1, opts, channel) { | |
var i = getIterator(set); | |
var result; | |
while ((result = i.next()) && !result.done) { | |
if (internalDeepEqual(val1, result.value, opts, channel)) { // eslint-disable-line no-use-before-define | |
// Remove the matching element to make sure we do not check that again. | |
$setDelete(set, result.value); | |
return true; | |
} | |
} | |
return false; | |
} | |
// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L416-L439 | |
function findLooseMatchingPrimitives(prim) { | |
if (typeof prim === 'undefined') { | |
return null; | |
} | |
if (typeof prim === 'object') { // Only pass in null as object! | |
return void 0; | |
} | |
if (typeof prim === 'symbol') { | |
return false; | |
} | |
if (typeof prim === 'string' || typeof prim === 'number') { | |
// Loose equal entries exist only if the string is possible to convert to a regular number and not NaN. | |
return +prim === +prim; // eslint-disable-line no-implicit-coercion | |
} | |
return true; | |
} | |
// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L449-L460 | |
function mapMightHaveLoosePrim(a, b, prim, item, opts, channel) { | |
var altValue = findLooseMatchingPrimitives(prim); | |
if (altValue != null) { | |
return altValue; | |
} | |
var curB = $mapGet(b, altValue); | |
var looseOpts = assign({}, opts, { strict: false }); | |
if ( | |
(typeof curB === 'undefined' && !$mapHas(b, altValue)) | |
// eslint-disable-next-line no-use-before-define | |
|| !internalDeepEqual(item, curB, looseOpts, channel) | |
) { | |
return false; | |
} | |
// eslint-disable-next-line no-use-before-define | |
return !$mapHas(a, altValue) && internalDeepEqual(item, curB, looseOpts, channel); | |
} | |
// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L441-L447 | |
function setMightHaveLoosePrim(a, b, prim) { | |
var altValue = findLooseMatchingPrimitives(prim); | |
if (altValue != null) { | |
return altValue; | |
} | |
return $setHas(b, altValue) && !$setHas(a, altValue); | |
} | |
// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L518-L533 | |
function mapHasEqualEntry(set, map, key1, item1, opts, channel) { | |
var i = getIterator(set); | |
var result; | |
var key2; | |
while ((result = i.next()) && !result.done) { | |
key2 = result.value; | |
if ( | |
// eslint-disable-next-line no-use-before-define | |
internalDeepEqual(key1, key2, opts, channel) | |
// eslint-disable-next-line no-use-before-define | |
&& internalDeepEqual(item1, $mapGet(map, key2), opts, channel) | |
) { | |
$setDelete(set, key2); | |
return true; | |
} | |
} | |
return false; | |
} | |
function internalDeepEqual(actual, expected, options, channel) { | |
var opts = options || {}; | |
// 7.1. All identical values are equivalent, as determined by ===. | |
if (opts.strict ? is(actual, expected) : actual === expected) { | |
return true; | |
} | |
var actualBoxed = whichBoxedPrimitive(actual); | |
var expectedBoxed = whichBoxedPrimitive(expected); | |
if (actualBoxed !== expectedBoxed) { | |
return false; | |
} | |
// 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==. | |
if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) { | |
return opts.strict ? is(actual, expected) : actual == expected; // eslint-disable-line eqeqeq | |
} | |
/* | |
* 7.4. For all other Object pairs, including Array objects, equivalence is | |
* determined by having the same number of owned properties (as verified | |
* with Object.prototype.hasOwnProperty.call), the same set of keys | |
* (although not necessarily the same order), equivalent values for every | |
* corresponding key, and an identical 'prototype' property. Note: this | |
* accounts for both named and indexed properties on Arrays. | |
*/ | |
// see https://github.com/nodejs/node/commit/d3aafd02efd3a403d646a3044adcf14e63a88d32 for memos/channel inspiration | |
var hasActual = channel.has(actual); | |
var hasExpected = channel.has(expected); | |
var sentinel; | |
if (hasActual && hasExpected) { | |
if (channel.get(actual) === channel.get(expected)) { | |
return true; | |
} | |
} else { | |
sentinel = {}; | |
} | |
if (!hasActual) { channel.set(actual, sentinel); } | |
if (!hasExpected) { channel.set(expected, sentinel); } | |
// eslint-disable-next-line no-use-before-define | |
return objEquiv(actual, expected, opts, channel); | |
} | |
function isBuffer(x) { | |
if (!x || typeof x !== 'object' || typeof x.length !== 'number') { | |
return false; | |
} | |
if (typeof x.copy !== 'function' || typeof x.slice !== 'function') { | |
return false; | |
} | |
if (x.length > 0 && typeof x[0] !== 'number') { | |
return false; | |
} | |
return !!(x.constructor && x.constructor.isBuffer && x.constructor.isBuffer(x)); | |
} | |
function setEquiv(a, b, opts, channel) { | |
if ($setSize(a) !== $setSize(b)) { | |
return false; | |
} | |
var iA = getIterator(a); | |
var iB = getIterator(b); | |
var resultA; | |
var resultB; | |
var set; | |
while ((resultA = iA.next()) && !resultA.done) { | |
if (resultA.value && typeof resultA.value === 'object') { | |
if (!set) { set = new $Set(); } | |
$setAdd(set, resultA.value); | |
} else if (!$setHas(b, resultA.value)) { | |
if (opts.strict) { return false; } | |
if (!setMightHaveLoosePrim(a, b, resultA.value)) { | |
return false; | |
} | |
if (!set) { set = new $Set(); } | |
$setAdd(set, resultA.value); | |
} | |
} | |
if (set) { | |
while ((resultB = iB.next()) && !resultB.done) { | |
// We have to check if a primitive value is already matching and only if it's not, go hunting for it. | |
if (resultB.value && typeof resultB.value === 'object') { | |
if (!setHasEqualElement(set, resultB.value, opts.strict, channel)) { | |
return false; | |
} | |
} else if ( | |
!opts.strict | |
&& !$setHas(a, resultB.value) | |
&& !setHasEqualElement(set, resultB.value, opts.strict, channel) | |
) { | |
return false; | |
} | |
} | |
return $setSize(set) === 0; | |
} | |
return true; | |
} | |
function mapEquiv(a, b, opts, channel) { | |
if ($mapSize(a) !== $mapSize(b)) { | |
return false; | |
} | |
var iA = getIterator(a); | |
var iB = getIterator(b); | |
var resultA; | |
var resultB; | |
var set; | |
var key; | |
var item1; | |
var item2; | |
while ((resultA = iA.next()) && !resultA.done) { | |
key = resultA.value[0]; | |
item1 = resultA.value[1]; | |
if (key && typeof key === 'object') { | |
if (!set) { set = new $Set(); } | |
$setAdd(set, key); | |
} else { | |
item2 = $mapGet(b, key); | |
if ((typeof item2 === 'undefined' && !$mapHas(b, key)) || !internalDeepEqual(item1, item2, opts, channel)) { | |
if (opts.strict) { | |
return false; | |
} | |
if (!mapMightHaveLoosePrim(a, b, key, item1, opts, channel)) { | |
return false; | |
} | |
if (!set) { set = new $Set(); } | |
$setAdd(set, key); | |
} | |
} | |
} | |
if (set) { | |
while ((resultB = iB.next()) && !resultB.done) { | |
key = resultB.value[0]; | |
item2 = resultB.value[1]; | |
if (key && typeof key === 'object') { | |
if (!mapHasEqualEntry(set, a, key, item2, opts, channel)) { | |
return false; | |
} | |
} else if ( | |
!opts.strict | |
&& (!a.has(key) || !internalDeepEqual($mapGet(a, key), item2, opts, channel)) | |
&& !mapHasEqualEntry(set, a, key, item2, assign({}, opts, { strict: false }), channel) | |
) { | |
return false; | |
} | |
} | |
return $setSize(set) === 0; | |
} | |
return true; | |
} | |
function objEquiv(a, b, opts, channel) { | |
/* eslint max-statements: [2, 100], max-lines-per-function: [2, 120], max-depth: [2, 5], max-lines: [2, 400] */ | |
var i, key; | |
if (typeof a !== typeof b) { return false; } | |
if (a == null || b == null) { return false; } | |
if ($objToString(a) !== $objToString(b)) { return false; } | |
if (isArguments(a) !== isArguments(b)) { return false; } | |
var aIsArray = isArray(a); | |
var bIsArray = isArray(b); | |
if (aIsArray !== bIsArray) { return false; } | |
// TODO: replace when a cross-realm brand check is available | |
var aIsError = a instanceof Error; | |
var bIsError = b instanceof Error; | |
if (aIsError !== bIsError) { return false; } | |
if (aIsError || bIsError) { | |
if (a.name !== b.name || a.message !== b.message) { return false; } | |
} | |
var aIsRegex = isRegex(a); | |
var bIsRegex = isRegex(b); | |
if (aIsRegex !== bIsRegex) { return false; } | |
if ((aIsRegex || bIsRegex) && (a.source !== b.source || flags(a) !== flags(b))) { | |
return false; | |
} | |
var aIsDate = isDate(a); | |
var bIsDate = isDate(b); | |
if (aIsDate !== bIsDate) { return false; } | |
if (aIsDate || bIsDate) { // && would work too, because both are true or both false here | |
if ($getTime(a) !== $getTime(b)) { return false; } | |
} | |
if (opts.strict && gPO && gPO(a) !== gPO(b)) { return false; } | |
var aWhich = whichTypedArray(a); | |
var bWhich = whichTypedArray(b); | |
if (aWhich !== bWhich) { | |
return false; | |
} | |
if (aWhich || bWhich) { // && would work too, because both are true or both false here | |
if (a.length !== b.length) { return false; } | |
for (i = 0; i < a.length; i++) { | |
if (a[i] !== b[i]) { return false; } | |
} | |
return true; | |
} | |
var aIsBuffer = isBuffer(a); | |
var bIsBuffer = isBuffer(b); | |
if (aIsBuffer !== bIsBuffer) { return false; } | |
if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here | |
if (a.length !== b.length) { return false; } | |
for (i = 0; i < a.length; i++) { | |
if (a[i] !== b[i]) { return false; } | |
} | |
return true; | |
} | |
var aIsArrayBuffer = isArrayBuffer(a); | |
var bIsArrayBuffer = isArrayBuffer(b); | |
if (aIsArrayBuffer !== bIsArrayBuffer) { return false; } | |
if (aIsArrayBuffer || bIsArrayBuffer) { // && would work too, because both are true or both false here | |
if (byteLength(a) !== byteLength(b)) { return false; } | |
return typeof Uint8Array === 'function' && internalDeepEqual(new Uint8Array(a), new Uint8Array(b), opts, channel); | |
} | |
var aIsSAB = isSharedArrayBuffer(a); | |
var bIsSAB = isSharedArrayBuffer(b); | |
if (aIsSAB !== bIsSAB) { return false; } | |
if (aIsSAB || bIsSAB) { // && would work too, because both are true or both false here | |
if (sabByteLength(a) !== sabByteLength(b)) { return false; } | |
return typeof Uint8Array === 'function' && internalDeepEqual(new Uint8Array(a), new Uint8Array(b), opts, channel); | |
} | |
if (typeof a !== typeof b) { return false; } | |
var ka = objectKeys(a); | |
var kb = objectKeys(b); | |
// having the same number of owned properties (keys incorporates hasOwnProperty) | |
if (ka.length !== kb.length) { return false; } | |
// the same set of keys (although not necessarily the same order), | |
ka.sort(); | |
kb.sort(); | |
// ~~~cheap key test | |
for (i = ka.length - 1; i >= 0; i--) { | |
if (ka[i] != kb[i]) { return false; } // eslint-disable-line eqeqeq | |
} | |
// equivalent values for every corresponding key, and ~~~possibly expensive deep test | |
for (i = ka.length - 1; i >= 0; i--) { | |
key = ka[i]; | |
if (!internalDeepEqual(a[key], b[key], opts, channel)) { return false; } | |
} | |
var aCollection = whichCollection(a); | |
var bCollection = whichCollection(b); | |
if (aCollection !== bCollection) { | |
return false; | |
} | |
if (aCollection === 'Set' || bCollection === 'Set') { // aCollection === bCollection | |
return setEquiv(a, b, opts, channel); | |
} | |
if (aCollection === 'Map') { // aCollection === bCollection | |
return mapEquiv(a, b, opts, channel); | |
} | |
return true; | |
} | |
module.exports = function deepEqual(a, b, opts) { | |
return internalDeepEqual(a, b, opts, getSideChannel()); | |
}; | |
},{"array-buffer-byte-length":85,"call-bind/callBound":99,"es-get-iterator":150,"get-intrinsic":157,"is-arguments":188,"is-array-buffer":189,"is-date-object":193,"is-regex":196,"is-shared-array-buffer":198,"isarray":203,"object-is":210,"object-keys":214,"object.assign":217,"regexp.prototype.flags":225,"side-channel":248,"which-boxed-primitive":254,"which-collection":255,"which-typed-array":256}],139:[function(require,module,exports){ | |
'use strict'; | |
var $defineProperty = require('es-define-property'); | |
var $SyntaxError = require('es-errors/syntax'); | |
var $TypeError = require('es-errors/type'); | |
var gopd = require('gopd'); | |
/** @type {import('.')} */ | |
module.exports = function defineDataProperty( | |
obj, | |
property, | |
value | |
) { | |
if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { | |
throw new $TypeError('`obj` must be an object or a function`'); | |
} | |
if (typeof property !== 'string' && typeof property !== 'symbol') { | |
throw new $TypeError('`property` must be a string or a symbol`'); | |
} | |
if (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) { | |
throw new $TypeError('`nonEnumerable`, if provided, must be a boolean or null'); | |
} | |
if (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) { | |
throw new $TypeError('`nonWritable`, if provided, must be a boolean or null'); | |
} | |
if (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) { | |
throw new $TypeError('`nonConfigurable`, if provided, must be a boolean or null'); | |
} | |
if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { | |
throw new $TypeError('`loose`, if provided, must be a boolean'); | |
} | |
var nonEnumerable = arguments.length > 3 ? arguments[3] : null; | |
var nonWritable = arguments.length > 4 ? arguments[4] : null; | |
var nonConfigurable = arguments.length > 5 ? arguments[5] : null; | |
var loose = arguments.length > 6 ? arguments[6] : false; | |
/* @type {false | TypedPropertyDescriptor<unknown>} */ | |
var desc = !!gopd && gopd(obj, property); | |
if ($defineProperty) { | |
$defineProperty(obj, property, { | |
configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable, | |
enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable, | |
value: value, | |
writable: nonWritable === null && desc ? desc.writable : !nonWritable | |
}); | |
} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) { | |
// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable | |
obj[property] = value; // eslint-disable-line no-param-reassign | |
} else { | |
throw new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.'); | |
} | |
}; | |
},{"es-define-property":142,"es-errors/syntax":147,"es-errors/type":148,"gopd":158}],140:[function(require,module,exports){ | |
'use strict'; | |
var keys = require('object-keys'); | |
var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol'; | |
var toStr = Object.prototype.toString; | |
var concat = Array.prototype.concat; | |
var defineDataProperty = require('define-data-property'); | |
var isFunction = function (fn) { | |
return typeof fn === 'function' && toStr.call(fn) === '[object Function]'; | |
}; | |
var supportsDescriptors = require('has-property-descriptors')(); | |
var defineProperty = function (object, name, value, predicate) { | |
if (name in object) { | |
if (predicate === true) { | |
if (object[name] === value) { | |
return; | |
} | |
} else if (!isFunction(predicate) || !predicate()) { | |
return; | |
} | |
} | |
if (supportsDescriptors) { | |
defineDataProperty(object, name, value, true); | |
} else { | |
defineDataProperty(object, name, value); | |
} | |
}; | |
var defineProperties = function (object, map) { | |
var predicates = arguments.length > 2 ? arguments[2] : {}; | |
var props = keys(map); | |
if (hasSymbols) { | |
props = concat.call(props, Object.getOwnPropertySymbols(map)); | |
} | |
for (var i = 0; i < props.length; i += 1) { | |
defineProperty(object, props[i], map[props[i]], predicates[props[i]]); | |
} | |
}; | |
defineProperties.supportsDescriptors = !!supportsDescriptors; | |
module.exports = defineProperties; | |
},{"define-data-property":139,"has-property-descriptors":160,"object-keys":214}],141:[function(require,module,exports){ | |
'use strict'; | |
var INITIAL_STATE = 1; | |
var FAIL_STATE = 0; | |
/** | |
* A StateMachine represents a deterministic finite automaton. | |
* It can perform matches over a sequence of values, similar to a regular expression. | |
*/ | |
class StateMachine { | |
constructor(dfa) { | |
this.stateTable = dfa.stateTable; | |
this.accepting = dfa.accepting; | |
this.tags = dfa.tags; | |
} | |
/** | |
* Returns an iterable object that yields pattern matches over the input sequence. | |
* Matches are of the form [startIndex, endIndex, tags]. | |
*/ | |
match(str) { | |
var self = this; | |
return { | |
*[Symbol.iterator]() { | |
var state = INITIAL_STATE; | |
var startRun = null; | |
var lastAccepting = null; | |
var lastState = null; | |
for (var p = 0; p < str.length; p++) { | |
var c = str[p]; | |
lastState = state; | |
state = self.stateTable[state][c]; | |
if (state === FAIL_STATE) { | |
// yield the last match if any | |
if (startRun != null && lastAccepting != null && lastAccepting >= startRun) { | |
yield [startRun, lastAccepting, self.tags[lastState]]; | |
} // reset the state as if we started over from the initial state | |
state = self.stateTable[INITIAL_STATE][c]; | |
startRun = null; | |
} // start a run if not in the failure state | |
if (state !== FAIL_STATE && startRun == null) { | |
startRun = p; | |
} // if accepting, mark the potential match end | |
if (self.accepting[state]) { | |
lastAccepting = p; | |
} // reset the state to the initial state if we get into the failure state | |
if (state === FAIL_STATE) { | |
state = INITIAL_STATE; | |
} | |
} // yield the last match if any | |
if (startRun != null && lastAccepting != null && lastAccepting >= startRun) { | |
yield [startRun, lastAccepting, self.tags[state]]; | |
} | |
} | |
}; | |
} | |
/** | |
* For each match over the input sequence, action functions matching | |
* the tag definitions in the input pattern are called with the startIndex, | |
* endIndex, and sub-match sequence. | |
*/ | |
apply(str, actions) { | |
for (var [start, end, tags] of this.match(str)) { | |
for (var tag of tags) { | |
if (typeof actions[tag] === 'function') { | |
actions[tag](start, end, str.slice(start, end + 1)); | |
} | |
} | |
} | |
} | |
} | |
module.exports = StateMachine; | |
},{}],142:[function(require,module,exports){ | |
'use strict'; | |
var GetIntrinsic = require('get-intrinsic'); | |
/** @type {import('.')} */ | |
var $defineProperty = GetIntrinsic('%Object.defineProperty%', true) || false; | |
if ($defineProperty) { | |
try { | |
$defineProperty({}, 'a', { value: 1 }); | |
} catch (e) { | |
// IE 8 has a broken defineProperty | |
$defineProperty = false; | |
} | |
} | |
module.exports = $defineProperty; | |
},{"get-intrinsic":157}],143:[function(require,module,exports){ | |
'use strict'; | |
/** @type {import('./eval')} */ | |
module.exports = EvalError; | |
},{}],144:[function(require,module,exports){ | |
'use strict'; | |
/** @type {import('.')} */ | |
module.exports = Error; | |
},{}],145:[function(require,module,exports){ | |
'use strict'; | |
/** @type {import('./range')} */ | |
module.exports = RangeError; | |
},{}],146:[function(require,module,exports){ | |
'use strict'; | |
/** @type {import('./ref')} */ | |
module.exports = ReferenceError; | |
},{}],147:[function(require,module,exports){ | |
'use strict'; | |
/** @type {import('./syntax')} */ | |
module.exports = SyntaxError; | |
},{}],148:[function(require,module,exports){ | |
'use strict'; | |
/** @type {import('./type')} */ | |
module.exports = TypeError; | |
},{}],149:[function(require,module,exports){ | |
'use strict'; | |
/** @type {import('./uri')} */ | |
module.exports = URIError; | |
},{}],150:[function(require,module,exports){ | |
(function (process){(function (){ | |
'use strict'; | |
/* eslint global-require: 0 */ | |
// the code is structured this way so that bundlers can | |
// alias out `has-symbols` to `() => true` or `() => false` if your target | |
// environments' Symbol capabilities are known, and then use | |
// dead code elimination on the rest of this module. | |
// | |
// Similarly, `isarray` can be aliased to `Array.isArray` if | |
// available in all target environments. | |
var isArguments = require('is-arguments'); | |
var getStopIterationIterator = require('stop-iteration-iterator'); | |
if (require('has-symbols')() || require('has-symbols/shams')()) { | |
var $iterator = Symbol.iterator; | |
// Symbol is available natively or shammed | |
// natively: | |
// - Chrome >= 38 | |
// - Edge 12-14?, Edge >= 15 for sure | |
// - FF >= 36 | |
// - Safari >= 9 | |
// - node >= 0.12 | |
module.exports = function getIterator(iterable) { | |
// alternatively, `iterable[$iterator]?.()` | |
if (iterable != null && typeof iterable[$iterator] !== 'undefined') { | |
return iterable[$iterator](); | |
} | |
if (isArguments(iterable)) { | |
// arguments objects lack Symbol.iterator | |
// - node 0.12 | |
return Array.prototype[$iterator].call(iterable); | |
} | |
}; | |
} else { | |
// Symbol is not available, native or shammed | |
var isArray = require('isarray'); | |
var isString = require('is-string'); | |
var GetIntrinsic = require('get-intrinsic'); | |
var $Map = GetIntrinsic('%Map%', true); | |
var $Set = GetIntrinsic('%Set%', true); | |
var callBound = require('call-bind/callBound'); | |
var $arrayPush = callBound('Array.prototype.push'); | |
var $charCodeAt = callBound('String.prototype.charCodeAt'); | |
var $stringSlice = callBound('String.prototype.slice'); | |
var advanceStringIndex = function advanceStringIndex(S, index) { | |
var length = S.length; | |
if ((index + 1) >= length) { | |
return index + 1; | |
} | |
var first = $charCodeAt(S, index); | |
if (first < 0xD800 || first > 0xDBFF) { | |
return index + 1; | |
} | |
var second = $charCodeAt(S, index + 1); | |
if (second < 0xDC00 || second > 0xDFFF) { | |
return index + 1; | |
} | |
return index + 2; | |
}; | |
var getArrayIterator = function getArrayIterator(arraylike) { | |
var i = 0; | |
return { | |
next: function next() { | |
var done = i >= arraylike.length; | |
var value; | |
if (!done) { | |
value = arraylike[i]; | |
i += 1; | |
} | |
return { | |
done: done, | |
value: value | |
}; | |
} | |
}; | |
}; | |
var getNonCollectionIterator = function getNonCollectionIterator(iterable, noPrimordialCollections) { | |
if (isArray(iterable) || isArguments(iterable)) { | |
return getArrayIterator(iterable); | |
} | |
if (isString(iterable)) { | |
var i = 0; | |
return { | |
next: function next() { | |
var nextIndex = advanceStringIndex(iterable, i); | |
var value = $stringSlice(iterable, i, nextIndex); | |
i = nextIndex; | |
return { | |
done: nextIndex > iterable.length, | |
value: value | |
}; | |
} | |
}; | |
} | |
// es6-shim and es-shims' es-map use a string "_es6-shim iterator_" property on different iterables, such as MapIterator. | |
if (noPrimordialCollections && typeof iterable['_es6-shim iterator_'] !== 'undefined') { | |
return iterable['_es6-shim iterator_'](); | |
} | |
}; | |
if (!$Map && !$Set) { | |
// the only language iterables are Array, String, arguments | |
// - Safari <= 6.0 | |
// - Chrome < 38 | |
// - node < 0.12 | |
// - FF < 13 | |
// - IE < 11 | |
// - Edge < 11 | |
module.exports = function getIterator(iterable) { | |
if (iterable != null) { | |
return getNonCollectionIterator(iterable, true); | |
} | |
}; | |
} else { | |
// either Map or Set are available, but Symbol is not | |
// - es6-shim on an ES5 browser | |
// - Safari 6.2 (maybe 6.1?) | |
// - FF v[13, 36) | |
// - IE 11 | |
// - Edge 11 | |
// - Safari v[6, 9) | |
var isMap = require('is-map'); | |
var isSet = require('is-set'); | |
// Firefox >= 27, IE 11, Safari 6.2 - 9, Edge 11, es6-shim in older envs, all have forEach | |
var $mapForEach = callBound('Map.prototype.forEach', true); | |
var $setForEach = callBound('Set.prototype.forEach', true); | |
if (typeof process === 'undefined' || !process.versions || !process.versions.node) { // "if is not node" | |
// Firefox 17 - 26 has `.iterator()`, whose iterator `.next()` either | |
// returns a value, or throws a StopIteration object. These browsers | |
// do not have any other mechanism for iteration. | |
var $mapIterator = callBound('Map.prototype.iterator', true); | |
var $setIterator = callBound('Set.prototype.iterator', true); | |
} | |
// Firefox 27-35, and some older es6-shim versions, use a string "@@iterator" property | |
// this returns a proper iterator object, so we should use it instead of forEach. | |
// newer es6-shim versions use a string "_es6-shim iterator_" property. | |
var $mapAtAtIterator = callBound('Map.prototype.@@iterator', true) || callBound('Map.prototype._es6-shim iterator_', true); | |
var $setAtAtIterator = callBound('Set.prototype.@@iterator', true) || callBound('Set.prototype._es6-shim iterator_', true); | |
var getCollectionIterator = function getCollectionIterator(iterable) { | |
if (isMap(iterable)) { | |
if ($mapIterator) { | |
return getStopIterationIterator($mapIterator(iterable)); | |
} | |
if ($mapAtAtIterator) { | |
return $mapAtAtIterator(iterable); | |
} | |
if ($mapForEach) { | |
var entries = []; | |
$mapForEach(iterable, function (v, k) { | |
$arrayPush(entries, [k, v]); | |
}); | |
return getArrayIterator(entries); | |
} | |
} | |
if (isSet(iterable)) { | |
if ($setIterator) { | |
return getStopIterationIterator($setIterator(iterable)); | |
} | |
if ($setAtAtIterator) { | |
return $setAtAtIterator(iterable); | |
} | |
if ($setForEach) { | |
var values = []; | |
$setForEach(iterable, function (v) { | |
$arrayPush(values, v); | |
}); | |
return getArrayIterator(values); | |
} | |
} | |
}; | |
module.exports = function getIterator(iterable) { | |
return getCollectionIterator(iterable) || getNonCollectionIterator(iterable); | |
}; | |
} | |
} | |
}).call(this)}).call(this,require('_process')) | |
},{"_process":314,"call-bind/callBound":99,"get-intrinsic":157,"has-symbols":162,"has-symbols/shams":163,"is-arguments":188,"is-map":194,"is-set":197,"is-string":199,"isarray":203,"stop-iteration-iterator":249}],151:[function(require,module,exports){ | |
(function (global){(function (){ | |
var $lzfo4$restructure = require("restructure"); | |
var $lzfo4$fs = require("fs"); | |
var $lzfo4$swchelpers = require("@swc/helpers"); | |
var $lzfo4$buffer = require("buffer"); | |
var $lzfo4$restructuresrcutilsjs = require("restructure/src/utils.js"); | |
var $lzfo4$deepequal = require("deep-equal"); | |
var $lzfo4$iconvlitecjs = require("../iconv-lite.cjs"); | |
var $lzfo4$unicodeproperties = require("unicode-properties"); | |
var $lzfo4$unicodetrie = require("unicode-trie"); | |
var $lzfo4$dfa = require("dfa"); | |
var $lzfo4$clone = require("clone"); | |
var $lzfo4$tinyinflate = require("tiny-inflate"); | |
var $lzfo4$brotlidecompressjs = require("brotli/decompress.js"); | |
function $parcel$defineInteropFlag(a) { | |
Object.defineProperty(a, '__esModule', {value: true, configurable: true}); | |
} | |
function $parcel$export(e, n, v, s) { | |
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); | |
} | |
function $parcel$exportWildcard(dest, source) { | |
Object.keys(source).forEach(function(key) { | |
if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) { | |
return; | |
} | |
Object.defineProperty(dest, key, { | |
enumerable: true, | |
get: function get() { | |
return source[key]; | |
} | |
}); | |
}); | |
return dest; | |
} | |
function $parcel$interopDefault(a) { | |
return a && a.__esModule ? a.default : a; | |
} | |
$parcel$defineInteropFlag(module.exports); | |
$parcel$export(module.exports, "default", () => $7b813caac4971c4b$export$2e2bcd8739ae039); | |
var $a35dad4d16c8d1df$exports = {}; | |
$parcel$export($a35dad4d16c8d1df$exports, "logErrors", () => $a35dad4d16c8d1df$export$bd5c5d8b8dcafd78); | |
$parcel$export($a35dad4d16c8d1df$exports, "registerFormat", () => $a35dad4d16c8d1df$export$36b2f24e97d43be); | |
$parcel$export($a35dad4d16c8d1df$exports, "openSync", () => $a35dad4d16c8d1df$export$fa5499edb1ab414a); | |
$parcel$export($a35dad4d16c8d1df$exports, "create", () => $a35dad4d16c8d1df$export$185802fd694ee1f5); | |
$parcel$export($a35dad4d16c8d1df$exports, "open", () => $a35dad4d16c8d1df$export$3ce6949f20cea765); | |
$parcel$export($a35dad4d16c8d1df$exports, "defaultLanguage", () => $a35dad4d16c8d1df$export$42940898df819940); | |
$parcel$export($a35dad4d16c8d1df$exports, "setDefaultLanguage", () => $a35dad4d16c8d1df$export$5157e7780d44cc36); | |
let $a35dad4d16c8d1df$export$bd5c5d8b8dcafd78 = false; | |
let $a35dad4d16c8d1df$var$formats = []; | |
function $a35dad4d16c8d1df$export$36b2f24e97d43be(format) { | |
$a35dad4d16c8d1df$var$formats.push(format); | |
} | |
function $a35dad4d16c8d1df$export$fa5499edb1ab414a(filename, postscriptName) { | |
let buffer = $lzfo4$fs.readFileSync(filename); | |
return $a35dad4d16c8d1df$export$185802fd694ee1f5(buffer, postscriptName); | |
} | |
function $a35dad4d16c8d1df$export$3ce6949f20cea765(filename, postscriptName, callback) { | |
if (typeof postscriptName === 'function') { | |
callback = postscriptName; | |
postscriptName = null; | |
} | |
$lzfo4$fs.readFile(filename, function(err, buffer) { | |
if (err) return callback(err); | |
try { | |
var font = $a35dad4d16c8d1df$export$185802fd694ee1f5(buffer, postscriptName); | |
} catch (e) { | |
return callback(e); | |
} | |
return callback(null, font); | |
}); | |
return; | |
} | |
function $a35dad4d16c8d1df$export$185802fd694ee1f5(buffer, postscriptName) { | |
for(let i = 0; i < $a35dad4d16c8d1df$var$formats.length; i++){ | |
let format = $a35dad4d16c8d1df$var$formats[i]; | |
if (format.probe(buffer)) { | |
let font = new format(new ($parcel$interopDefault($lzfo4$restructure)).DecodeStream(buffer)); | |
if (postscriptName) return font.getFont(postscriptName); | |
return font; | |
} | |
} | |
throw new Error('Unknown font format'); | |
} | |
let $a35dad4d16c8d1df$export$42940898df819940 = 'en'; | |
function $a35dad4d16c8d1df$export$5157e7780d44cc36(lang = 'en') { | |
$a35dad4d16c8d1df$export$42940898df819940 = lang; | |
} | |
function $9ea776e3198edd2e$export$69a3209f1a06c04d(target, key1, descriptor) { | |
if (descriptor.get) { | |
let get = descriptor.get; | |
descriptor.get = function() { | |
let value = get.call(this); | |
Object.defineProperty(this, key1, { | |
value: value | |
}); | |
return value; | |
}; | |
} else if (typeof descriptor.value === 'function') { | |
let fn = descriptor.value; | |
return { | |
get () { | |
let $9ea776e3198edd2e$export$69a3209f1a06c04d = new Map; | |
function memoized(...args) { | |
let key = args.length > 0 ? args[0] : 'value'; | |
if ($9ea776e3198edd2e$export$69a3209f1a06c04d.has(key)) return $9ea776e3198edd2e$export$69a3209f1a06c04d.get(key); | |
let result = fn.apply(this, args); | |
$9ea776e3198edd2e$export$69a3209f1a06c04d.set(key, result); | |
return result; | |
} | |
Object.defineProperty(this, key1, { | |
value: memoized | |
}); | |
return memoized; | |
} | |
}; | |
} | |
} | |
let $f6569fe31dc9e2a4$var$SubHeader = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
firstCode: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
entryCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
idDelta: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
idRangeOffset: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
let $f6569fe31dc9e2a4$var$CmapGroup = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
startCharCode: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
endCharCode: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
glyphID: ($parcel$interopDefault($lzfo4$restructure)).uint32 | |
}); | |
let $f6569fe31dc9e2a4$var$UnicodeValueRange = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
startUnicodeValue: ($parcel$interopDefault($lzfo4$restructure)).uint24, | |
additionalCount: ($parcel$interopDefault($lzfo4$restructure)).uint8 | |
}); | |
let $f6569fe31dc9e2a4$var$UVSMapping = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
unicodeValue: ($parcel$interopDefault($lzfo4$restructure)).uint24, | |
glyphID: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
let $f6569fe31dc9e2a4$var$DefaultUVS = new ($parcel$interopDefault($lzfo4$restructure)).Array($f6569fe31dc9e2a4$var$UnicodeValueRange, ($parcel$interopDefault($lzfo4$restructure)).uint32); | |
let $f6569fe31dc9e2a4$var$NonDefaultUVS = new ($parcel$interopDefault($lzfo4$restructure)).Array($f6569fe31dc9e2a4$var$UVSMapping, ($parcel$interopDefault($lzfo4$restructure)).uint32); | |
let $f6569fe31dc9e2a4$var$VarSelectorRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
varSelector: ($parcel$interopDefault($lzfo4$restructure)).uint24, | |
defaultUVS: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f6569fe31dc9e2a4$var$DefaultUVS, { | |
type: 'parent' | |
}), | |
nonDefaultUVS: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f6569fe31dc9e2a4$var$NonDefaultUVS, { | |
type: 'parent' | |
}) | |
}); | |
let $f6569fe31dc9e2a4$var$CmapSubtable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
0: { | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
language: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
codeMap: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint8, 256) | |
}, | |
2: { | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
language: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
subHeaderKeys: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 256), | |
subHeaderCount: (t)=>Math.max.apply(Math, t.subHeaderKeys) | |
, | |
subHeaders: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($f6569fe31dc9e2a4$var$SubHeader, 'subHeaderCount'), | |
glyphIndexArray: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'subHeaderCount') | |
}, | |
4: { | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
language: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
segCountX2: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
segCount: (t)=>t.segCountX2 >> 1 | |
, | |
searchRange: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
entrySelector: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
rangeShift: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
endCode: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'segCount'), | |
reservedPad: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16), | |
startCode: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'segCount'), | |
idDelta: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).int16, 'segCount'), | |
idRangeOffset: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'segCount'), | |
glyphIndexArray: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>(t.length - t._currentOffset) / 2 | |
) | |
}, | |
6: { | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
language: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
firstCode: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
entryCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
glyphIndices: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'entryCount') | |
}, | |
8: { | |
reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16), | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
language: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
is32: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint8, 8192), | |
nGroups: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
groups: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($f6569fe31dc9e2a4$var$CmapGroup, 'nGroups') | |
}, | |
10: { | |
reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16), | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
language: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
firstCode: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
entryCount: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
glyphIndices: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numChars') | |
}, | |
12: { | |
reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16), | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
language: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
nGroups: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
groups: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($f6569fe31dc9e2a4$var$CmapGroup, 'nGroups') | |
}, | |
13: { | |
reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16), | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
language: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
nGroups: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
groups: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($f6569fe31dc9e2a4$var$CmapGroup, 'nGroups') | |
}, | |
14: { | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
numRecords: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
varSelectors: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($f6569fe31dc9e2a4$var$VarSelectorRecord, 'numRecords') | |
} | |
}); | |
let $f6569fe31dc9e2a4$var$CmapEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
platformID: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
encodingID: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
table: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f6569fe31dc9e2a4$var$CmapSubtable, { | |
type: 'parent', | |
lazy: true | |
}) | |
}); | |
var // character to glyph mapping | |
$f6569fe31dc9e2a4$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
numSubtables: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
tables: new ($parcel$interopDefault($lzfo4$restructure)).Array($f6569fe31dc9e2a4$var$CmapEntry, 'numSubtables') | |
}); | |
var // font header | |
$e1b51afd73796719$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).int32, | |
revision: ($parcel$interopDefault($lzfo4$restructure)).int32, | |
checkSumAdjustment: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
magicNumber: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
flags: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
unitsPerEm: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
created: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int32, 2), | |
modified: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int32, 2), | |
xMin: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
yMin: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
xMax: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
yMax: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
macStyle: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint16, [ | |
'bold', | |
'italic', | |
'underline', | |
'outline', | |
'shadow', | |
'condensed', | |
'extended' | |
]), | |
lowestRecPPEM: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
fontDirectionHint: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
indexToLocFormat: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
glyphDataFormat: ($parcel$interopDefault($lzfo4$restructure)).int16 // 0 for current format | |
}); | |
var // horizontal header | |
$af15e8c2ca202685$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).int32, | |
ascent: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
descent: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
lineGap: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
advanceWidthMax: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
minLeftSideBearing: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
minRightSideBearing: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
xMaxExtent: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
caretSlopeRise: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
caretSlopeRun: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
caretOffset: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).int16, 4), | |
metricDataFormat: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
numberOfMetrics: ($parcel$interopDefault($lzfo4$restructure)).uint16 // Number of advance widths in 'hmtx' table | |
}); | |
let $cbee70d452c87a2f$var$HmtxEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
advance: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
bearing: ($parcel$interopDefault($lzfo4$restructure)).int16 | |
}); | |
var $cbee70d452c87a2f$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
metrics: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($cbee70d452c87a2f$var$HmtxEntry, (t)=>t.parent.hhea.numberOfMetrics | |
), | |
bearings: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).int16, (t)=>t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics | |
) | |
}); | |
var // maxiumum profile | |
$62b43947ebb31537$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).int32, | |
numGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxPoints: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxContours: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxComponentPoints: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxComponentContours: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxZones: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxTwilightPoints: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxStorage: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxFunctionDefs: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxInstructionDefs: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxStackElements: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxSizeOfInstructions: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxComponentElements: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxComponentDepth: ($parcel$interopDefault($lzfo4$restructure)).uint16 // Maximum levels of recursion; 1 for simple components | |
}); | |
function $d8b54c41212776fe$export$badc544e0651b6b1(platformID, encodingID, languageID = 0) { | |
if (platformID === 1 && $d8b54c41212776fe$export$479e671907f486d1[languageID]) return $d8b54c41212776fe$export$479e671907f486d1[languageID]; | |
return $d8b54c41212776fe$export$6fef87b7618bdf0b[platformID][encodingID]; | |
} | |
const $d8b54c41212776fe$export$6fef87b7618bdf0b = [ | |
// unicode | |
[ | |
'utf16be', | |
'utf16be', | |
'utf16be', | |
'utf16be', | |
'utf16be', | |
'utf16be' | |
], | |
// macintosh | |
// Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ | |
// 0 Roman 17 Malayalam | |
// 1 Japanese 18 Sinhalese | |
// 2 Traditional Chinese 19 Burmese | |
// 3 Korean 20 Khmer | |
// 4 Arabic 21 Thai | |
// 5 Hebrew 22 Laotian | |
// 6 Greek 23 Georgian | |
// 7 Russian 24 Armenian | |
// 8 RSymbol 25 Simplified Chinese | |
// 9 Devanagari 26 Tibetan | |
// 10 Gurmukhi 27 Mongolian | |
// 11 Gujarati 28 Geez | |
// 12 Oriya 29 Slavic | |
// 13 Bengali 30 Vietnamese | |
// 14 Tamil 31 Sindhi | |
// 15 Telugu 32 (Uninterpreted) | |
// 16 Kannada | |
[ | |
'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' | |
], | |
// ISO (deprecated) | |
[ | |
'ascii' | |
], | |
// windows | |
// Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx | |
[ | |
'symbol', | |
'utf16be', | |
'shift-jis', | |
'gb18030', | |
'big5', | |
'wansung', | |
'johab', | |
null, | |
null, | |
null, | |
'utf16be' | |
] | |
]; | |
const $d8b54c41212776fe$export$479e671907f486d1 = { | |
15: 'maciceland', | |
17: 'macturkish', | |
18: 'maccroatian', | |
24: 'maccenteuro', | |
25: 'maccenteuro', | |
26: 'maccenteuro', | |
27: 'maccenteuro', | |
28: 'maccenteuro', | |
30: 'maciceland', | |
37: 'macromania', | |
38: 'maccenteuro', | |
39: 'maccenteuro', | |
40: 'maccenteuro', | |
143: 'macinuit', | |
146: 'macgaelic' // Unsupported by iconv-lite | |
}; | |
const $d8b54c41212776fe$export$2092376fd002e13 = [ | |
// unicode | |
[], | |
{ | |
0: 'en', | |
30: 'fo', | |
60: 'ks', | |
90: 'rw', | |
1: 'fr', | |
31: 'fa', | |
61: 'ku', | |
91: 'rn', | |
2: 'de', | |
32: 'ru', | |
62: 'sd', | |
92: 'ny', | |
3: 'it', | |
33: 'zh', | |
63: 'bo', | |
93: 'mg', | |
4: 'nl', | |
34: 'nl-BE', | |
64: 'ne', | |
94: 'eo', | |
5: 'sv', | |
35: 'ga', | |
65: 'sa', | |
128: 'cy', | |
6: 'es', | |
36: 'sq', | |
66: 'mr', | |
129: 'eu', | |
7: 'da', | |
37: 'ro', | |
67: 'bn', | |
130: 'ca', | |
8: 'pt', | |
38: 'cz', | |
68: 'as', | |
131: 'la', | |
9: 'no', | |
39: 'sk', | |
69: 'gu', | |
132: 'qu', | |
10: 'he', | |
40: 'si', | |
70: 'pa', | |
133: 'gn', | |
11: 'ja', | |
41: 'yi', | |
71: 'or', | |
134: 'ay', | |
12: 'ar', | |
42: 'sr', | |
72: 'ml', | |
135: 'tt', | |
13: 'fi', | |
43: 'mk', | |
73: 'kn', | |
136: 'ug', | |
14: 'el', | |
44: 'bg', | |
74: 'ta', | |
137: 'dz', | |
15: 'is', | |
45: 'uk', | |
75: 'te', | |
138: 'jv', | |
16: 'mt', | |
46: 'be', | |
76: 'si', | |
139: 'su', | |
17: 'tr', | |
47: 'uz', | |
77: 'my', | |
140: 'gl', | |
18: 'hr', | |
48: 'kk', | |
78: 'km', | |
141: 'af', | |
19: 'zh-Hant', | |
49: 'az-Cyrl', | |
79: 'lo', | |
142: 'br', | |
20: 'ur', | |
50: 'az-Arab', | |
80: 'vi', | |
143: 'iu', | |
21: 'hi', | |
51: 'hy', | |
81: 'id', | |
144: 'gd', | |
22: 'th', | |
52: 'ka', | |
82: 'tl', | |
145: 'gv', | |
23: 'ko', | |
53: 'mo', | |
83: 'ms', | |
146: 'ga', | |
24: 'lt', | |
54: 'ky', | |
84: 'ms-Arab', | |
147: 'to', | |
25: 'pl', | |
55: 'tg', | |
85: 'am', | |
148: 'el-polyton', | |
26: 'hu', | |
56: 'tk', | |
86: 'ti', | |
149: 'kl', | |
27: 'es', | |
57: 'mn-CN', | |
87: 'om', | |
150: 'az', | |
28: 'lv', | |
58: 'mn', | |
88: 'so', | |
151: 'nn', | |
29: 'se', | |
59: 'ps', | |
89: 'sw' | |
}, | |
// ISO (deprecated) | |
[], | |
{ | |
0x0436: 'af', | |
0x4009: 'en-IN', | |
0x0487: 'rw', | |
0x0432: 'tn', | |
0x041C: 'sq', | |
0x1809: 'en-IE', | |
0x0441: 'sw', | |
0x045B: 'si', | |
0x0484: 'gsw', | |
0x2009: 'en-JM', | |
0x0457: 'kok', | |
0x041B: 'sk', | |
0x045E: 'am', | |
0x4409: 'en-MY', | |
0x0412: 'ko', | |
0x0424: 'sl', | |
0x1401: 'ar-DZ', | |
0x1409: 'en-NZ', | |
0x0440: 'ky', | |
0x2C0A: 'es-AR', | |
0x3C01: 'ar-BH', | |
0x3409: 'en-PH', | |
0x0454: 'lo', | |
0x400A: 'es-BO', | |
0x0C01: 'ar', | |
0x4809: 'en-SG', | |
0x0426: 'lv', | |
0x340A: 'es-CL', | |
0x0801: 'ar-IQ', | |
0x1C09: 'en-ZA', | |
0x0427: 'lt', | |
0x240A: 'es-CO', | |
0x2C01: 'ar-JO', | |
0x2C09: 'en-TT', | |
0x082E: 'dsb', | |
0x140A: 'es-CR', | |
0x3401: 'ar-KW', | |
0x0809: 'en-GB', | |
0x046E: 'lb', | |
0x1C0A: 'es-DO', | |
0x3001: 'ar-LB', | |
0x0409: 'en', | |
0x042F: 'mk', | |
0x300A: 'es-EC', | |
0x1001: 'ar-LY', | |
0x3009: 'en-ZW', | |
0x083E: 'ms-BN', | |
0x440A: 'es-SV', | |
0x1801: 'ary', | |
0x0425: 'et', | |
0x043E: 'ms', | |
0x100A: 'es-GT', | |
0x2001: 'ar-OM', | |
0x0438: 'fo', | |
0x044C: 'ml', | |
0x480A: 'es-HN', | |
0x4001: 'ar-QA', | |
0x0464: 'fil', | |
0x043A: 'mt', | |
0x080A: 'es-MX', | |
0x0401: 'ar-SA', | |
0x040B: 'fi', | |
0x0481: 'mi', | |
0x4C0A: 'es-NI', | |
0x2801: 'ar-SY', | |
0x080C: 'fr-BE', | |
0x047A: 'arn', | |
0x180A: 'es-PA', | |
0x1C01: 'aeb', | |
0x0C0C: 'fr-CA', | |
0x044E: 'mr', | |
0x3C0A: 'es-PY', | |
0x3801: 'ar-AE', | |
0x040C: 'fr', | |
0x047C: 'moh', | |
0x280A: 'es-PE', | |
0x2401: 'ar-YE', | |
0x140C: 'fr-LU', | |
0x0450: 'mn', | |
0x500A: 'es-PR', | |
0x042B: 'hy', | |
0x180C: 'fr-MC', | |
0x0850: 'mn-CN', | |
0x0C0A: 'es', | |
0x044D: 'as', | |
0x100C: 'fr-CH', | |
0x0461: 'ne', | |
0x040A: 'es', | |
0x082C: 'az-Cyrl', | |
0x0462: 'fy', | |
0x0414: 'nb', | |
0x540A: 'es-US', | |
0x042C: 'az', | |
0x0456: 'gl', | |
0x0814: 'nn', | |
0x380A: 'es-UY', | |
0x046D: 'ba', | |
0x0437: 'ka', | |
0x0482: 'oc', | |
0x200A: 'es-VE', | |
0x042D: 'eu', | |
0x0C07: 'de-AT', | |
0x0448: 'or', | |
0x081D: 'sv-FI', | |
0x0423: 'be', | |
0x0407: 'de', | |
0x0463: 'ps', | |
0x041D: 'sv', | |
0x0845: 'bn', | |
0x1407: 'de-LI', | |
0x0415: 'pl', | |
0x045A: 'syr', | |
0x0445: 'bn-IN', | |
0x1007: 'de-LU', | |
0x0416: 'pt', | |
0x0428: 'tg', | |
0x201A: 'bs-Cyrl', | |
0x0807: 'de-CH', | |
0x0816: 'pt-PT', | |
0x085F: 'tzm', | |
0x141A: 'bs', | |
0x0408: 'el', | |
0x0446: 'pa', | |
0x0449: 'ta', | |
0x047E: 'br', | |
0x046F: 'kl', | |
0x046B: 'qu-BO', | |
0x0444: 'tt', | |
0x0402: 'bg', | |
0x0447: 'gu', | |
0x086B: 'qu-EC', | |
0x044A: 'te', | |
0x0403: 'ca', | |
0x0468: 'ha', | |
0x0C6B: 'qu', | |
0x041E: 'th', | |
0x0C04: 'zh-HK', | |
0x040D: 'he', | |
0x0418: 'ro', | |
0x0451: 'bo', | |
0x1404: 'zh-MO', | |
0x0439: 'hi', | |
0x0417: 'rm', | |
0x041F: 'tr', | |
0x0804: 'zh', | |
0x040E: 'hu', | |
0x0419: 'ru', | |
0x0442: 'tk', | |
0x1004: 'zh-SG', | |
0x040F: 'is', | |
0x243B: 'smn', | |
0x0480: 'ug', | |
0x0404: 'zh-TW', | |
0x0470: 'ig', | |
0x103B: 'smj-NO', | |
0x0422: 'uk', | |
0x0483: 'co', | |
0x0421: 'id', | |
0x143B: 'smj', | |
0x042E: 'hsb', | |
0x041A: 'hr', | |
0x045D: 'iu', | |
0x0C3B: 'se-FI', | |
0x0420: 'ur', | |
0x101A: 'hr-BA', | |
0x085D: 'iu-Latn', | |
0x043B: 'se', | |
0x0843: 'uz-Cyrl', | |
0x0405: 'cs', | |
0x083C: 'ga', | |
0x083B: 'se-SE', | |
0x0443: 'uz', | |
0x0406: 'da', | |
0x0434: 'xh', | |
0x203B: 'sms', | |
0x042A: 'vi', | |
0x048C: 'prs', | |
0x0435: 'zu', | |
0x183B: 'sma-NO', | |
0x0452: 'cy', | |
0x0465: 'dv', | |
0x0410: 'it', | |
0x1C3B: 'sms', | |
0x0488: 'wo', | |
0x0813: 'nl-BE', | |
0x0810: 'it-CH', | |
0x044F: 'sa', | |
0x0485: 'sah', | |
0x0413: 'nl', | |
0x0411: 'ja', | |
0x1C1A: 'sr-Cyrl-BA', | |
0x0478: 'ii', | |
0x0C09: 'en-AU', | |
0x044B: 'kn', | |
0x0C1A: 'sr', | |
0x046A: 'yo', | |
0x2809: 'en-BZ', | |
0x043F: 'kk', | |
0x181A: 'sr-Latn-BA', | |
0x1009: 'en-CA', | |
0x0453: 'km', | |
0x081A: 'sr-Latn', | |
0x2409: 'en-029', | |
0x0486: 'quc', | |
0x046C: 'nso' | |
} | |
]; | |
var $7cfee716e27b503e$require$Buffer = $lzfo4$buffer.Buffer; | |
let $7cfee716e27b503e$var$NameRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
platformID: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
encodingID: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
languageID: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
nameID: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
string: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new ($parcel$interopDefault($lzfo4$restructure)).String('length', (t)=>$d8b54c41212776fe$export$badc544e0651b6b1(t.platformID, t.encodingID, t.languageID) | |
), { | |
type: 'parent', | |
relativeTo: (ctx)=>ctx.parent.stringOffset | |
, | |
allowNull: false | |
}) | |
}); | |
let $7cfee716e27b503e$var$LangTagRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
tag: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new ($parcel$interopDefault($lzfo4$restructure)).String('length', 'utf16be'), { | |
type: 'parent', | |
relativeTo: (ctx)=>ctx.stringOffset | |
}) | |
}); | |
var $7cfee716e27b503e$var$NameTable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
0: { | |
count: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
stringOffset: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
records: new ($parcel$interopDefault($lzfo4$restructure)).Array($7cfee716e27b503e$var$NameRecord, 'count') | |
}, | |
1: { | |
count: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
stringOffset: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
records: new ($parcel$interopDefault($lzfo4$restructure)).Array($7cfee716e27b503e$var$NameRecord, 'count'), | |
langTagCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
langTags: new ($parcel$interopDefault($lzfo4$restructure)).Array($7cfee716e27b503e$var$LangTagRecord, 'langTagCount') | |
} | |
}); | |
var $7cfee716e27b503e$export$2e2bcd8739ae039 = $7cfee716e27b503e$var$NameTable; | |
const $7cfee716e27b503e$var$NAMES = [ | |
'copyright', | |
'fontFamily', | |
'fontSubfamily', | |
'uniqueSubfamily', | |
'fullName', | |
'version', | |
'postscriptName', | |
'trademark', | |
'manufacturer', | |
'designer', | |
'description', | |
'vendorURL', | |
'designerURL', | |
'license', | |
'licenseURL', | |
null, | |
'preferredFamily', | |
'preferredSubfamily', | |
'compatibleFull', | |
'sampleText', | |
'postscriptCIDFontName', | |
'wwsFamilyName', | |
'wwsSubfamilyName' | |
]; | |
$7cfee716e27b503e$var$NameTable.process = function(stream) { | |
var records = {}; | |
for (let record of this.records){ | |
// find out what language this is for | |
let language = $d8b54c41212776fe$export$2092376fd002e13[record.platformID][record.languageID]; | |
if (language == null && this.langTags != null && record.languageID >= 0x8000) language = this.langTags[record.languageID - 0x8000].tag; | |
if (language == null) language = record.platformID + '-' + record.languageID; | |
// if the nameID is >= 256, it is a font feature record (AAT) | |
let key = record.nameID >= 256 ? 'fontFeatures' : $7cfee716e27b503e$var$NAMES[record.nameID] || record.nameID; | |
if (records[key] == null) records[key] = {}; | |
let obj = records[key]; | |
if (record.nameID >= 256) obj = obj[record.nameID] || (obj[record.nameID] = {}); | |
if (typeof record.string === 'string' || typeof obj[language] !== 'string') obj[language] = record.string; | |
} | |
this.records = records; | |
}; | |
$7cfee716e27b503e$var$NameTable.preEncode = function() { | |
if (Array.isArray(this.records)) return; | |
this.version = 0; | |
let records = []; | |
for(let key in this.records){ | |
let val = this.records[key]; | |
if (key === 'fontFeatures') continue; | |
records.push({ | |
platformID: 3, | |
encodingID: 1, | |
languageID: 0x409, | |
nameID: $7cfee716e27b503e$var$NAMES.indexOf(key), | |
length: $7cfee716e27b503e$require$Buffer.byteLength(val.en, 'utf16le'), | |
string: val.en | |
}); | |
if (key === 'postscriptName') records.push({ | |
platformID: 1, | |
encodingID: 0, | |
languageID: 0, | |
nameID: $7cfee716e27b503e$var$NAMES.indexOf(key), | |
length: val.en.length, | |
string: val.en | |
}); | |
} | |
this.records = records; | |
this.count = records.length; | |
this.stringOffset = $7cfee716e27b503e$var$NameTable.size(this, null, false); | |
}; | |
var $5e9fda50085d9beb$var$OS2 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
header: { | |
xAvgCharWidth: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
usWeightClass: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
usWidthClass: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
fsType: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint16, [ | |
null, | |
'noEmbedding', | |
'viewOnly', | |
'editable', | |
null, | |
null, | |
null, | |
null, | |
'noSubsetting', | |
'bitmapOnly' | |
]), | |
ySubscriptXSize: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
ySubscriptYSize: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
ySubscriptXOffset: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
ySubscriptYOffset: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
ySuperscriptXSize: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
ySuperscriptYSize: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
ySuperscriptXOffset: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
ySuperscriptYOffset: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
yStrikeoutSize: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
yStrikeoutPosition: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
sFamilyClass: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
panose: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 10), | |
ulCharRange: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, 4), | |
vendorID: new ($parcel$interopDefault($lzfo4$restructure)).String(4), | |
fsSelection: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint16, [ | |
'italic', | |
'underscore', | |
'negative', | |
'outlined', | |
'strikeout', | |
'bold', | |
'regular', | |
'useTypoMetrics', | |
'wws', | |
'oblique' | |
]), | |
usFirstCharIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
usLastCharIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16 // The maximum Unicode index in this font | |
}, | |
// The Apple version of this table ends here, but the Microsoft one continues on... | |
0: {}, | |
1: { | |
typoAscender: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
typoDescender: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
typoLineGap: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
winAscent: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
winDescent: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
codePageRange: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, 2) | |
}, | |
2: { | |
// these should be common with version 1 somehow | |
typoAscender: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
typoDescender: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
typoLineGap: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
winAscent: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
winDescent: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
codePageRange: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, 2), | |
xHeight: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
capHeight: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
defaultChar: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
breakChar: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxContent: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}, | |
5: { | |
typoAscender: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
typoDescender: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
typoLineGap: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
winAscent: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
winDescent: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
codePageRange: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, 2), | |
xHeight: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
capHeight: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
defaultChar: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
breakChar: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
maxContent: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
usLowerOpticalPointSize: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
usUpperOpticalPointSize: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
} | |
}); | |
let $5e9fda50085d9beb$var$versions = $5e9fda50085d9beb$var$OS2.versions; | |
$5e9fda50085d9beb$var$versions[3] = $5e9fda50085d9beb$var$versions[4] = $5e9fda50085d9beb$var$versions[2]; | |
var $5e9fda50085d9beb$export$2e2bcd8739ae039 = $5e9fda50085d9beb$var$OS2; | |
var // PostScript information | |
$8fb96ffb3c5b1cd6$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).fixed32, { | |
header: { | |
italicAngle: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
underlinePosition: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
underlineThickness: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
isFixedPitch: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
minMemType42: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
maxMemType42: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
minMemType1: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
maxMemType1: ($parcel$interopDefault($lzfo4$restructure)).uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font | |
}, | |
1: {}, | |
2: { | |
numberOfGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
glyphNameIndex: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numberOfGlyphs'), | |
names: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).String(($parcel$interopDefault($lzfo4$restructure)).uint8)) | |
}, | |
2.5: { | |
numberOfGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 'numberOfGlyphs') | |
}, | |
3: {}, | |
4: { | |
map: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, (t)=>t.parent.maxp.numGlyphs | |
) | |
} | |
}); | |
var // An array of predefined values accessible by instructions | |
$e85635aafda425ab$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
controlValues: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int16) | |
}); | |
var // A list of instructions that are executed once when a font is first used. | |
// These instructions are known as the font program. The main use of this table | |
// is for the definition of functions that are used in many different glyph programs. | |
$2b37abe4b96e3c42$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
instructions: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8) | |
}); | |
let $8cebe4fe43d5c208$var$loca = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('head.indexToLocFormat', { | |
0: { | |
offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16) | |
}, | |
1: { | |
offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32) | |
} | |
}); | |
$8cebe4fe43d5c208$var$loca.process = function() { | |
if (this.version === 0) for(let i = 0; i < this.offsets.length; i++)this.offsets[i] <<= 1; | |
}; | |
$8cebe4fe43d5c208$var$loca.preEncode = function() { | |
if (this.version === 0) for(let i = 0; i < this.offsets.length; i++)this.offsets[i] >>>= 1; | |
}; | |
var $8cebe4fe43d5c208$export$2e2bcd8739ae039 = $8cebe4fe43d5c208$var$loca; | |
var // Set of instructions executed whenever the point size or font transformation change | |
$75c86c4a9179fd24$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
controlValueProgram: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8) | |
}); | |
var // only used for encoding | |
$1edb604f0b10eb6a$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Buffer); | |
class $52a9289da21106c8$export$2e2bcd8739ae039 { | |
getCFFVersion(ctx) { | |
while(ctx && !ctx.hdrSize)ctx = ctx.parent; | |
return ctx ? ctx.version : -1; | |
} | |
decode(stream, parent) { | |
let version = this.getCFFVersion(parent); | |
let count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE(); | |
if (count === 0) return []; | |
let offSize = stream.readUInt8(); | |
let offsetType; | |
if (offSize === 1) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint8; | |
else if (offSize === 2) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint16; | |
else if (offSize === 3) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint24; | |
else if (offSize === 4) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint32; | |
else throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`); | |
let ret = []; | |
let startPos = stream.pos + (count + 1) * offSize - 1; | |
let start = offsetType.decode(stream); | |
for(let i = 0; i < count; i++){ | |
let end = offsetType.decode(stream); | |
if (this.type != null) { | |
let pos = stream.pos; | |
stream.pos = startPos + start; | |
parent.length = end - start; | |
ret.push(this.type.decode(stream, parent)); | |
stream.pos = pos; | |
} else ret.push({ | |
offset: startPos + start, | |
length: end - start | |
}); | |
start = end; | |
} | |
stream.pos = startPos + start; | |
return ret; | |
} | |
size(arr, parent) { | |
let size = 2; | |
if (arr.length === 0) return size; | |
let type = this.type || new ($parcel$interopDefault($lzfo4$restructure)).Buffer; | |
// find maximum offset to detminine offset type | |
let offset = 1; | |
for(let i = 0; i < arr.length; i++){ | |
let item = arr[i]; | |
offset += type.size(item, parent); | |
} | |
let offsetType; | |
if (offset <= 0xff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint8; | |
else if (offset <= 0xffff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint16; | |
else if (offset <= 0xffffff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint24; | |
else if (offset <= 0xffffffff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint32; | |
else throw new Error("Bad offset in CFFIndex"); | |
size += 1 + offsetType.size() * (arr.length + 1); | |
size += offset - 1; | |
return size; | |
} | |
encode(stream, arr, parent) { | |
stream.writeUInt16BE(arr.length); | |
if (arr.length === 0) return; | |
let type = this.type || new ($parcel$interopDefault($lzfo4$restructure)).Buffer; | |
// find maximum offset to detminine offset type | |
let sizes = []; | |
let offset = 1; | |
for (let item of arr){ | |
let s = type.size(item, parent); | |
sizes.push(s); | |
offset += s; | |
} | |
let offsetType; | |
if (offset <= 0xff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint8; | |
else if (offset <= 0xffff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint16; | |
else if (offset <= 0xffffff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint24; | |
else if (offset <= 0xffffffff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint32; | |
else throw new Error("Bad offset in CFFIndex"); | |
// write offset size | |
stream.writeUInt8(offsetType.size()); | |
// write elements | |
offset = 1; | |
offsetType.encode(stream, offset); | |
for (let size of sizes){ | |
offset += size; | |
offsetType.encode(stream, offset); | |
} | |
for (let item1 of arr)type.encode(stream, item1, parent); | |
return; | |
} | |
constructor(type){ | |
this.type = type; | |
} | |
} | |
const $7331b8461b34fafd$var$FLOAT_EOF = 0xf; | |
const $7331b8461b34fafd$var$FLOAT_LOOKUP = [ | |
'0', | |
'1', | |
'2', | |
'3', | |
'4', | |
'5', | |
'6', | |
'7', | |
'8', | |
'9', | |
'.', | |
'E', | |
'E-', | |
null, | |
'-' | |
]; | |
const $7331b8461b34fafd$var$FLOAT_ENCODE_LOOKUP = { | |
'.': 10, | |
'E': 11, | |
'E-': 12, | |
'-': 14 | |
}; | |
class $7331b8461b34fafd$export$2e2bcd8739ae039 { | |
static decode(stream, value) { | |
if (32 <= value && value <= 246) return value - 139; | |
if (247 <= value && value <= 250) return (value - 247) * 256 + stream.readUInt8() + 108; | |
if (251 <= value && value <= 254) return -(value - 251) * 256 - stream.readUInt8() - 108; | |
if (value === 28) return stream.readInt16BE(); | |
if (value === 29) return stream.readInt32BE(); | |
if (value === 30) { | |
let str = ''; | |
while(true){ | |
let b = stream.readUInt8(); | |
let n1 = b >> 4; | |
if (n1 === $7331b8461b34fafd$var$FLOAT_EOF) break; | |
str += $7331b8461b34fafd$var$FLOAT_LOOKUP[n1]; | |
let n2 = b & 15; | |
if (n2 === $7331b8461b34fafd$var$FLOAT_EOF) break; | |
str += $7331b8461b34fafd$var$FLOAT_LOOKUP[n2]; | |
} | |
return parseFloat(str); | |
} | |
return null; | |
} | |
static size(value) { | |
// if the value needs to be forced to the largest size (32 bit) | |
// e.g. for unknown pointers, set to 32768 | |
if (value.forceLarge) value = 32768; | |
if ((value | 0) !== value) { | |
let str = '' + value; | |
return 1 + Math.ceil((str.length + 1) / 2); | |
} else if (-107 <= value && value <= 107) return 1; | |
else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) return 2; | |
else if (-32768 <= value && value <= 32767) return 3; | |
else return 5; | |
} | |
static encode(stream, value) { | |
// if the value needs to be forced to the largest size (32 bit) | |
// e.g. for unknown pointers, save the old value and set to 32768 | |
let val = Number(value); | |
if (value.forceLarge) { | |
stream.writeUInt8(29); | |
return stream.writeInt32BE(val); | |
} else if ((val | 0) !== val) { | |
stream.writeUInt8(30); | |
let str = '' + val; | |
for(let i = 0; i < str.length; i += 2){ | |
let c1 = str[i]; | |
let n1 = $7331b8461b34fafd$var$FLOAT_ENCODE_LOOKUP[c1] || +c1; | |
if (i === str.length - 1) var n2 = $7331b8461b34fafd$var$FLOAT_EOF; | |
else { | |
let c2 = str[i + 1]; | |
var n2 = $7331b8461b34fafd$var$FLOAT_ENCODE_LOOKUP[c2] || +c2; | |
} | |
stream.writeUInt8(n1 << 4 | n2 & 15); | |
} | |
if (n2 !== $7331b8461b34fafd$var$FLOAT_EOF) return stream.writeUInt8($7331b8461b34fafd$var$FLOAT_EOF << 4); | |
} else if (-107 <= val && val <= 107) return stream.writeUInt8(val + 139); | |
else if (108 <= val && val <= 1131) { | |
val -= 108; | |
stream.writeUInt8((val >> 8) + 247); | |
return stream.writeUInt8(val & 0xff); | |
} else if (-1131 <= val && val <= -108) { | |
val = -val - 108; | |
stream.writeUInt8((val >> 8) + 251); | |
return stream.writeUInt8(val & 0xff); | |
} else if (-32768 <= val && val <= 32767) { | |
stream.writeUInt8(28); | |
return stream.writeInt16BE(val); | |
} else { | |
stream.writeUInt8(29); | |
return stream.writeInt32BE(val); | |
} | |
} | |
} | |
class $e73dde9fb8a50748$export$2e2bcd8739ae039 { | |
decodeOperands(type, stream, ret, operands) { | |
if (Array.isArray(type)) return operands.map((op, i)=>this.decodeOperands(type[i], stream, ret, [ | |
op | |
]) | |
); | |
else if (type.decode != null) return type.decode(stream, ret, operands); | |
else switch(type){ | |
case 'number': | |
case 'offset': | |
case 'sid': | |
return operands[0]; | |
case 'boolean': | |
return !!operands[0]; | |
default: | |
return operands; | |
} | |
} | |
encodeOperands(type, stream, ctx, operands) { | |
if (Array.isArray(type)) return operands.map((op, i)=>this.encodeOperands(type[i], stream, ctx, op)[0] | |
); | |
else if (type.encode != null) return type.encode(stream, operands, ctx); | |
else if (typeof operands === 'number') return [ | |
operands | |
]; | |
else if (typeof operands === 'boolean') return [ | |
+operands | |
]; | |
else if (Array.isArray(operands)) return operands; | |
else return [ | |
operands | |
]; | |
} | |
decode(stream, parent) { | |
let end = stream.pos + parent.length; | |
let ret = {}; | |
let operands = []; | |
// define hidden properties | |
Object.defineProperties(ret, { | |
parent: { | |
value: parent | |
}, | |
_startOffset: { | |
value: stream.pos | |
} | |
}); | |
// fill in defaults | |
for(let key in this.fields){ | |
let field = this.fields[key]; | |
ret[field[1]] = field[3]; | |
} | |
while(stream.pos < end){ | |
let b = stream.readUInt8(); | |
if (b < 28) { | |
if (b === 12) b = b << 8 | stream.readUInt8(); | |
let field = this.fields[b]; | |
if (!field) throw new Error(`Unknown operator ${b}`); | |
let val = this.decodeOperands(field[2], stream, ret, operands); | |
if (val != null) { | |
if (val instanceof $lzfo4$restructuresrcutilsjs.PropertyDescriptor) Object.defineProperty(ret, field[1], val); | |
else ret[field[1]] = val; | |
} | |
operands = []; | |
} else operands.push($7331b8461b34fafd$export$2e2bcd8739ae039.decode(stream, b)); | |
} | |
return ret; | |
} | |
size(dict, parent, includePointers = true) { | |
let ctx = { | |
parent: parent, | |
val: dict, | |
pointerSize: 0, | |
startOffset: parent.startOffset || 0 | |
}; | |
let len = 0; | |
for(let k in this.fields){ | |
let field = this.fields[k]; | |
let val = dict[field[1]]; | |
if (val == null || ($parcel$interopDefault($lzfo4$deepequal))(val, field[3])) continue; | |
let operands = this.encodeOperands(field[2], null, ctx, val); | |
for (let op of operands)len += $7331b8461b34fafd$export$2e2bcd8739ae039.size(op); | |
let key = Array.isArray(field[0]) ? field[0] : [ | |
field[0] | |
]; | |
len += key.length; | |
} | |
if (includePointers) len += ctx.pointerSize; | |
return len; | |
} | |
encode(stream, dict, parent) { | |
let ctx = { | |
pointers: [], | |
startOffset: stream.pos, | |
parent: parent, | |
val: dict, | |
pointerSize: 0 | |
}; | |
ctx.pointerOffset = stream.pos + this.size(dict, ctx, false); | |
for (let field of this.ops){ | |
let val = dict[field[1]]; | |
if (val == null || ($parcel$interopDefault($lzfo4$deepequal))(val, field[3])) continue; | |
let operands = this.encodeOperands(field[2], stream, ctx, val); | |
for (let op of operands)$7331b8461b34fafd$export$2e2bcd8739ae039.encode(stream, op); | |
let key = Array.isArray(field[0]) ? field[0] : [ | |
field[0] | |
]; | |
for (let op1 of key)stream.writeUInt8(op1); | |
} | |
let i = 0; | |
while(i < ctx.pointers.length){ | |
let ptr = ctx.pointers[i++]; | |
ptr.type.encode(stream, ptr.val, ptr.parent); | |
} | |
return; | |
} | |
constructor(ops = []){ | |
this.ops = ops; | |
this.fields = {}; | |
for (let field of ops){ | |
let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0]; | |
this.fields[key] = field; | |
} | |
} | |
} | |
class $1bd98896423435ca$export$2e2bcd8739ae039 extends ($parcel$interopDefault($lzfo4$restructure)).Pointer { | |
decode(stream, parent, operands) { | |
this.offsetType = { | |
decode: ()=>operands[0] | |
}; | |
return super.decode(stream, parent, operands); | |
} | |
encode(stream, value, ctx) { | |
if (!stream) { | |
// compute the size (so ctx.pointerSize is correct) | |
this.offsetType = { | |
size: ()=>0 | |
}; | |
this.size(value, ctx); | |
return [ | |
new $1bd98896423435ca$var$Ptr(0) | |
]; | |
} | |
let ptr = null; | |
this.offsetType = { | |
encode: (stream, val)=>ptr = val | |
}; | |
super.encode(stream, value, ctx); | |
return [ | |
new $1bd98896423435ca$var$Ptr(ptr) | |
]; | |
} | |
constructor(type, options = {}){ | |
if (options.type == null) options.type = 'global'; | |
super(null, type, options); | |
} | |
} | |
class $1bd98896423435ca$var$Ptr { | |
valueOf() { | |
return this.val; | |
} | |
constructor(val){ | |
this.val = val; | |
this.forceLarge = true; | |
} | |
} | |
class $f099ec1eecfbbfe4$var$CFFBlendOp { | |
static decode(stream, parent, operands) { | |
let numBlends = operands.pop(); | |
// TODO: actually blend. For now just consume the deltas | |
// since we don't use any of the values anyway. | |
while(operands.length > numBlends)operands.pop(); | |
} | |
} | |
var $f099ec1eecfbbfe4$export$2e2bcd8739ae039 = new $e73dde9fb8a50748$export$2e2bcd8739ae039([ | |
// key name type default | |
[ | |
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', | |
$f099ec1eecfbbfe4$var$CFFBlendOp, | |
null | |
], | |
[ | |
19, | |
'Subrs', | |
new $1bd98896423435ca$export$2e2bcd8739ae039(new $52a9289da21106c8$export$2e2bcd8739ae039, { | |
type: 'local' | |
}), | |
null | |
] | |
]); | |
var // Automatically generated from Appendix A of the CFF specification; do | |
// not edit. Length should be 391. | |
$4292bb2f086bd070$export$2e2bcd8739ae039 = [ | |
".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", | |
"periodcentered", | |
"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" | |
]; | |
let $64905f2680ca92ce$export$dee0027060fa13bd = [ | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'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', | |
'periodcentered', | |
'', | |
'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' | |
]; | |
let $64905f2680ca92ce$export$4f58f497e14a53c3 = [ | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'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' | |
]; | |
let $d3c587cfeb0b2fa7$export$c33b50336c234f16 = [ | |
'.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', | |
'periodcentered', | |
'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' | |
]; | |
let $d3c587cfeb0b2fa7$export$3ed0f9e1fee8d489 = [ | |
'.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' | |
]; | |
let $d3c587cfeb0b2fa7$export$dc28be11139d4120 = [ | |
'.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' | |
]; | |
//######################## | |
// Scripts and Languages # | |
//######################## | |
let $02fa1fdbd31163f6$var$LangSysTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16), | |
reqFeatureIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
featureCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
featureIndexes: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'featureCount') | |
}); | |
let $02fa1fdbd31163f6$var$LangSysRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4), | |
langSys: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$LangSysTable, { | |
type: 'parent' | |
}) | |
}); | |
let $02fa1fdbd31163f6$var$Script = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
defaultLangSys: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$LangSysTable), | |
count: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
langSysRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$LangSysRecord, 'count') | |
}); | |
let $02fa1fdbd31163f6$var$ScriptRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4), | |
script: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$Script, { | |
type: 'parent' | |
}) | |
}); | |
let $02fa1fdbd31163f6$export$3e15fc05ce864229 = new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$ScriptRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
//####################### | |
// Features and Lookups # | |
//####################### | |
let $02fa1fdbd31163f6$var$FeatureParams = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
nameID: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
let $02fa1fdbd31163f6$export$6e91cf7616333d5 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
featureParams: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$FeatureParams), | |
lookupCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookupListIndexes: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'lookupCount') | |
}); | |
let $02fa1fdbd31163f6$var$FeatureRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4), | |
feature: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$6e91cf7616333d5, { | |
type: 'parent' | |
}) | |
}); | |
let $02fa1fdbd31163f6$export$aa18130def4b6cb4 = new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$FeatureRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $02fa1fdbd31163f6$var$LookupFlags = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
markAttachmentType: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
flags: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint8, [ | |
'rightToLeft', | |
'ignoreBaseGlyphs', | |
'ignoreLigatures', | |
'ignoreMarks', | |
'useMarkFilteringSet' | |
]) | |
}); | |
function $02fa1fdbd31163f6$export$df0008c6ff2da22a(SubTable) { | |
let Lookup = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
lookupType: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
flags: $02fa1fdbd31163f6$var$LookupFlags, | |
subTableCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
subTables: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, SubTable), 'subTableCount'), | |
markFilteringSet: new ($parcel$interopDefault($lzfo4$restructure)).Optional(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.flags.flags.useMarkFilteringSet | |
) | |
}); | |
return new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, Lookup), ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
} | |
//################# | |
// Coverage Table # | |
//################# | |
let $02fa1fdbd31163f6$var$RangeRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
start: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
end: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
startCoverageIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
let $02fa1fdbd31163f6$export$17608c3f81a6111 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
1: { | |
glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
glyphs: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'glyphCount') | |
}, | |
2: { | |
rangeCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
rangeRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$RangeRecord, 'rangeCount') | |
} | |
}); | |
//######################### | |
// Class Definition Table # | |
//######################### | |
let $02fa1fdbd31163f6$var$ClassRangeRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
start: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
end: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
class: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
let $02fa1fdbd31163f6$export$843d551fbbafef71 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
1: { | |
startGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
classValueArray: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'glyphCount') | |
}, | |
2: { | |
classRangeCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
classRangeRecord: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$ClassRangeRecord, 'classRangeCount') | |
} | |
}); | |
let $02fa1fdbd31163f6$export$8215d14a63d9fb10 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
a: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
b: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
deltaFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
//############################################# | |
// Contextual Substitution/Positioning Tables # | |
//############################################# | |
let $02fa1fdbd31163f6$var$LookupRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
sequenceIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookupListIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
let $02fa1fdbd31163f6$var$Rule = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookupCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
input: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.glyphCount - 1 | |
), | |
lookupRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$LookupRecord, 'lookupCount') | |
}); | |
let $02fa1fdbd31163f6$var$RuleSet = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$Rule), ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $02fa1fdbd31163f6$var$ClassRule = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookupCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
classes: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.glyphCount - 1 | |
), | |
lookupRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$LookupRecord, 'lookupCount') | |
}); | |
let $02fa1fdbd31163f6$var$ClassSet = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$ClassRule), ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $02fa1fdbd31163f6$export$841858b892ce1f4c = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
1: { | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
ruleSetCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
ruleSets: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$RuleSet), 'ruleSetCount') | |
}, | |
2: { | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
classDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71), | |
classSetCnt: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
classSet: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$ClassSet), 'classSetCnt') | |
}, | |
3: { | |
glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookupCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
coverages: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), 'glyphCount'), | |
lookupRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$LookupRecord, 'lookupCount') | |
} | |
}); | |
//###################################################### | |
// Chaining Contextual Substitution/Positioning Tables # | |
//###################################################### | |
let $02fa1fdbd31163f6$var$ChainRule = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
backtrackGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
backtrack: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'backtrackGlyphCount'), | |
inputGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
input: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.inputGlyphCount - 1 | |
), | |
lookaheadGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookahead: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'lookaheadGlyphCount'), | |
lookupCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookupRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$LookupRecord, 'lookupCount') | |
}); | |
let $02fa1fdbd31163f6$var$ChainRuleSet = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$ChainRule), ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $02fa1fdbd31163f6$export$5e6d09e6861162f6 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
1: { | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
chainCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
chainRuleSets: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$ChainRuleSet), 'chainCount') | |
}, | |
2: { | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
backtrackClassDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71), | |
inputClassDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71), | |
lookaheadClassDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71), | |
chainCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
chainClassSet: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$ChainRuleSet), 'chainCount') | |
}, | |
3: { | |
backtrackGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
backtrackCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), 'backtrackGlyphCount'), | |
inputGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
inputCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), 'inputGlyphCount'), | |
lookaheadGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookaheadCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), 'lookaheadGlyphCount'), | |
lookupCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookupRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$LookupRecord, 'lookupCount') | |
} | |
}); | |
/******************* | |
* Variation Store * | |
*******************/ let $f7d48077c0582beb$var$F2DOT14 = new ($parcel$interopDefault($lzfo4$restructure)).Fixed(16, 'BE', 14); | |
let $f7d48077c0582beb$var$RegionAxisCoordinates = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
startCoord: $f7d48077c0582beb$var$F2DOT14, | |
peakCoord: $f7d48077c0582beb$var$F2DOT14, | |
endCoord: $f7d48077c0582beb$var$F2DOT14 | |
}); | |
let $f7d48077c0582beb$var$VariationRegionList = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
axisCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
regionCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
variationRegions: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Array($f7d48077c0582beb$var$RegionAxisCoordinates, 'axisCount'), 'regionCount') | |
}); | |
let $f7d48077c0582beb$var$DeltaSet = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
shortDeltas: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int16, (t)=>t.parent.shortDeltaCount | |
), | |
regionDeltas: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int8, (t)=>t.parent.regionIndexCount - t.parent.shortDeltaCount | |
), | |
deltas: (t)=>t.shortDeltas.concat(t.regionDeltas) | |
}); | |
let $f7d48077c0582beb$var$ItemVariationData = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
itemCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
shortDeltaCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
regionIndexCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
regionIndexes: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'regionIndexCount'), | |
deltaSets: new ($parcel$interopDefault($lzfo4$restructure)).Array($f7d48077c0582beb$var$DeltaSet, 'itemCount') | |
}); | |
let $f7d48077c0582beb$export$fe1b122a2710f241 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
format: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
variationRegionList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$var$VariationRegionList), | |
variationDataCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
itemVariationData: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$var$ItemVariationData), 'variationDataCount') | |
}); | |
/********************** | |
* Feature Variations * | |
**********************/ let $f7d48077c0582beb$var$ConditionTable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
1: { | |
axisIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
axisIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
filterRangeMinValue: $f7d48077c0582beb$var$F2DOT14, | |
filterRangeMaxValue: $f7d48077c0582beb$var$F2DOT14 | |
} | |
}); | |
let $f7d48077c0582beb$var$ConditionSet = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
conditionCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
conditionTable: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$var$ConditionTable), 'conditionCount') | |
}); | |
let $f7d48077c0582beb$var$FeatureTableSubstitutionRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
featureIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
alternateFeatureTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $02fa1fdbd31163f6$export$6e91cf7616333d5, { | |
type: 'parent' | |
}) | |
}); | |
let $f7d48077c0582beb$var$FeatureTableSubstitution = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
substitutionCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
substitutions: new ($parcel$interopDefault($lzfo4$restructure)).Array($f7d48077c0582beb$var$FeatureTableSubstitutionRecord, 'substitutionCount') | |
}); | |
let $f7d48077c0582beb$var$FeatureVariationRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
conditionSet: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$var$ConditionSet, { | |
type: 'parent' | |
}), | |
featureTableSubstitution: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$var$FeatureTableSubstitution, { | |
type: 'parent' | |
}) | |
}); | |
let $f7d48077c0582beb$export$441b70b7971dd419 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
majorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
minorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
featureVariationRecordCount: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
featureVariationRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($f7d48077c0582beb$var$FeatureVariationRecord, 'featureVariationRecordCount') | |
}); | |
// Checks if an operand is an index of a predefined value, | |
// otherwise delegates to the provided type. | |
class $5d220daacf51f8dc$var$PredefinedOp { | |
decode(stream, parent, operands) { | |
if (this.predefinedOps[operands[0]]) return this.predefinedOps[operands[0]]; | |
return this.type.decode(stream, parent, operands); | |
} | |
size(value, ctx) { | |
return this.type.size(value, ctx); | |
} | |
encode(stream, value, ctx) { | |
let index = this.predefinedOps.indexOf(value); | |
if (index !== -1) return index; | |
return this.type.encode(stream, value, ctx); | |
} | |
constructor(predefinedOps, type){ | |
this.predefinedOps = predefinedOps; | |
this.type = type; | |
} | |
} | |
class $5d220daacf51f8dc$var$CFFEncodingVersion extends ($parcel$interopDefault($lzfo4$restructure)).Number { | |
decode(stream) { | |
return ($parcel$interopDefault($lzfo4$restructure)).uint8.decode(stream) & 0x7f; | |
} | |
constructor(){ | |
super('UInt8'); | |
} | |
} | |
let $5d220daacf51f8dc$var$Range1 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
first: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
nLeft: ($parcel$interopDefault($lzfo4$restructure)).uint8 | |
}); | |
let $5d220daacf51f8dc$var$Range2 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
first: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
nLeft: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
let $5d220daacf51f8dc$var$CFFCustomEncoding = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(new $5d220daacf51f8dc$var$CFFEncodingVersion(), { | |
0: { | |
nCodes: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
codes: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 'nCodes') | |
}, | |
1: { | |
nRanges: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
ranges: new ($parcel$interopDefault($lzfo4$restructure)).Array($5d220daacf51f8dc$var$Range1, 'nRanges') | |
} | |
}); | |
let $5d220daacf51f8dc$var$CFFEncoding = new $5d220daacf51f8dc$var$PredefinedOp([ | |
$64905f2680ca92ce$export$dee0027060fa13bd, | |
$64905f2680ca92ce$export$4f58f497e14a53c3 | |
], new $1bd98896423435ca$export$2e2bcd8739ae039($5d220daacf51f8dc$var$CFFCustomEncoding, { | |
lazy: true | |
})); | |
// Decodes an array of ranges until the total | |
// length is equal to the provided length. | |
class $5d220daacf51f8dc$var$RangeArray extends ($parcel$interopDefault($lzfo4$restructure)).Array { | |
decode(stream, parent) { | |
let length = $lzfo4$restructuresrcutilsjs.resolveLength(this.length, stream, parent); | |
let count = 0; | |
let res = []; | |
while(count < length){ | |
let range = this.type.decode(stream, parent); | |
range.offset = count; | |
count += range.nLeft + 1; | |
res.push(range); | |
} | |
return res; | |
} | |
} | |
let $5d220daacf51f8dc$var$CFFCustomCharset = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint8, { | |
0: { | |
glyphs: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.parent.CharStrings.length - 1 | |
) | |
}, | |
1: { | |
ranges: new $5d220daacf51f8dc$var$RangeArray($5d220daacf51f8dc$var$Range1, (t)=>t.parent.CharStrings.length - 1 | |
) | |
}, | |
2: { | |
ranges: new $5d220daacf51f8dc$var$RangeArray($5d220daacf51f8dc$var$Range2, (t)=>t.parent.CharStrings.length - 1 | |
) | |
} | |
}); | |
let $5d220daacf51f8dc$var$CFFCharset = new $5d220daacf51f8dc$var$PredefinedOp([ | |
$d3c587cfeb0b2fa7$export$c33b50336c234f16, | |
$d3c587cfeb0b2fa7$export$3ed0f9e1fee8d489, | |
$d3c587cfeb0b2fa7$export$dc28be11139d4120 | |
], new $1bd98896423435ca$export$2e2bcd8739ae039($5d220daacf51f8dc$var$CFFCustomCharset, { | |
lazy: true | |
})); | |
let $5d220daacf51f8dc$var$FDRange3 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
first: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
fd: ($parcel$interopDefault($lzfo4$restructure)).uint8 | |
}); | |
let $5d220daacf51f8dc$var$FDRange4 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
first: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
fd: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
let $5d220daacf51f8dc$var$FDSelect = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint8, { | |
0: { | |
fds: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.parent.CharStrings.length | |
) | |
}, | |
3: { | |
nRanges: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
ranges: new ($parcel$interopDefault($lzfo4$restructure)).Array($5d220daacf51f8dc$var$FDRange3, 'nRanges'), | |
sentinel: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}, | |
4: { | |
nRanges: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
ranges: new ($parcel$interopDefault($lzfo4$restructure)).Array($5d220daacf51f8dc$var$FDRange4, 'nRanges'), | |
sentinel: ($parcel$interopDefault($lzfo4$restructure)).uint32 | |
} | |
}); | |
let $5d220daacf51f8dc$var$ptr = new $1bd98896423435ca$export$2e2bcd8739ae039($f099ec1eecfbbfe4$export$2e2bcd8739ae039); | |
class $5d220daacf51f8dc$var$CFFPrivateOp { | |
decode(stream, parent, operands) { | |
parent.length = operands[0]; | |
return $5d220daacf51f8dc$var$ptr.decode(stream, parent, [ | |
operands[1] | |
]); | |
} | |
size(dict, ctx) { | |
return [ | |
$f099ec1eecfbbfe4$export$2e2bcd8739ae039.size(dict, ctx, false), | |
$5d220daacf51f8dc$var$ptr.size(dict, ctx)[0] | |
]; | |
} | |
encode(stream, dict, ctx) { | |
return [ | |
$f099ec1eecfbbfe4$export$2e2bcd8739ae039.size(dict, ctx, false), | |
$5d220daacf51f8dc$var$ptr.encode(stream, dict, ctx)[0] | |
]; | |
} | |
} | |
let $5d220daacf51f8dc$var$FontDict = new $e73dde9fb8a50748$export$2e2bcd8739ae039([ | |
// key name type(s) default | |
[ | |
18, | |
'Private', | |
new $5d220daacf51f8dc$var$CFFPrivateOp, | |
null | |
], | |
[ | |
[ | |
12, | |
38 | |
], | |
'FontName', | |
'sid', | |
null | |
], | |
[ | |
[ | |
12, | |
7 | |
], | |
'FontMatrix', | |
'array', | |
[ | |
0.001, | |
0, | |
0, | |
0.001, | |
0, | |
0 | |
] | |
], | |
[ | |
[ | |
12, | |
5 | |
], | |
'PaintType', | |
'number', | |
0 | |
], | |
]); | |
let $5d220daacf51f8dc$var$CFFTopDict = new $e73dde9fb8a50748$export$2e2bcd8739ae039([ | |
// key name type(s) default | |
[ | |
[ | |
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', | |
$5d220daacf51f8dc$var$CFFCharset, | |
$d3c587cfeb0b2fa7$export$c33b50336c234f16 | |
], | |
[ | |
16, | |
'Encoding', | |
$5d220daacf51f8dc$var$CFFEncoding, | |
$64905f2680ca92ce$export$dee0027060fa13bd | |
], | |
[ | |
17, | |
'CharStrings', | |
new $1bd98896423435ca$export$2e2bcd8739ae039(new $52a9289da21106c8$export$2e2bcd8739ae039), | |
null | |
], | |
[ | |
18, | |
'Private', | |
new $5d220daacf51f8dc$var$CFFPrivateOp, | |
null | |
], | |
[ | |
[ | |
12, | |
20 | |
], | |
'SyntheticBase', | |
'number', | |
null | |
], | |
[ | |
[ | |
12, | |
21 | |
], | |
'PostScript', | |
'sid', | |
null | |
], | |
[ | |
[ | |
12, | |
22 | |
], | |
'BaseFontName', | |
'sid', | |
null | |
], | |
[ | |
[ | |
12, | |
23 | |
], | |
'BaseFontBlend', | |
'delta', | |
null | |
], | |
// CID font specific | |
[ | |
[ | |
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 $1bd98896423435ca$export$2e2bcd8739ae039($5d220daacf51f8dc$var$FDSelect), | |
null | |
], | |
[ | |
[ | |
12, | |
36 | |
], | |
'FDArray', | |
new $1bd98896423435ca$export$2e2bcd8739ae039(new $52a9289da21106c8$export$2e2bcd8739ae039($5d220daacf51f8dc$var$FontDict)), | |
null | |
], | |
[ | |
[ | |
12, | |
38 | |
], | |
'FontName', | |
'sid', | |
null | |
] | |
]); | |
let $5d220daacf51f8dc$var$VariationStore = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
itemVariationStore: $f7d48077c0582beb$export$fe1b122a2710f241 | |
}); | |
let $5d220daacf51f8dc$var$CFF2TopDict = new $e73dde9fb8a50748$export$2e2bcd8739ae039([ | |
[ | |
[ | |
12, | |
7 | |
], | |
'FontMatrix', | |
'array', | |
[ | |
0.001, | |
0, | |
0, | |
0.001, | |
0, | |
0 | |
] | |
], | |
[ | |
17, | |
'CharStrings', | |
new $1bd98896423435ca$export$2e2bcd8739ae039(new $52a9289da21106c8$export$2e2bcd8739ae039), | |
null | |
], | |
[ | |
[ | |
12, | |
37 | |
], | |
'FDSelect', | |
new $1bd98896423435ca$export$2e2bcd8739ae039($5d220daacf51f8dc$var$FDSelect), | |
null | |
], | |
[ | |
[ | |
12, | |
36 | |
], | |
'FDArray', | |
new $1bd98896423435ca$export$2e2bcd8739ae039(new $52a9289da21106c8$export$2e2bcd8739ae039($5d220daacf51f8dc$var$FontDict)), | |
null | |
], | |
[ | |
24, | |
'vstore', | |
new $1bd98896423435ca$export$2e2bcd8739ae039($5d220daacf51f8dc$var$VariationStore), | |
null | |
], | |
[ | |
25, | |
'maxstack', | |
'number', | |
193 | |
] | |
]); | |
let $5d220daacf51f8dc$var$CFFTop = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).fixed16, { | |
1: { | |
hdrSize: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
offSize: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
nameIndex: new $52a9289da21106c8$export$2e2bcd8739ae039(new ($parcel$interopDefault($lzfo4$restructure)).String('length')), | |
topDictIndex: new $52a9289da21106c8$export$2e2bcd8739ae039($5d220daacf51f8dc$var$CFFTopDict), | |
stringIndex: new $52a9289da21106c8$export$2e2bcd8739ae039(new ($parcel$interopDefault($lzfo4$restructure)).String('length')), | |
globalSubrIndex: new $52a9289da21106c8$export$2e2bcd8739ae039 | |
}, | |
2: { | |
hdrSize: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
topDict: $5d220daacf51f8dc$var$CFF2TopDict, | |
globalSubrIndex: new $52a9289da21106c8$export$2e2bcd8739ae039 | |
} | |
}); | |
var $5d220daacf51f8dc$export$2e2bcd8739ae039 = $5d220daacf51f8dc$var$CFFTop; | |
class $af4e76a81d73e13e$var$CFFFont { | |
static decode(stream) { | |
return new $af4e76a81d73e13e$var$CFFFont(stream); | |
} | |
decode() { | |
let start = this.stream.pos; | |
let top = $5d220daacf51f8dc$export$2e2bcd8739ae039.decode(this.stream); | |
for(let key in top){ | |
let val = top[key]; | |
this[key] = val; | |
} | |
if (this.version < 2) { | |
if (this.topDictIndex.length !== 1) throw new Error("Only a single font is allowed in CFF"); | |
this.topDict = this.topDictIndex[0]; | |
} | |
this.isCIDFont = this.topDict.ROS != null; | |
return this; | |
} | |
string(sid) { | |
if (this.version >= 2) return null; | |
if (sid < $4292bb2f086bd070$export$2e2bcd8739ae039.length) return $4292bb2f086bd070$export$2e2bcd8739ae039[sid]; | |
return this.stringIndex[sid - $4292bb2f086bd070$export$2e2bcd8739ae039.length]; | |
} | |
get postscriptName() { | |
if (this.version < 2) return this.nameIndex[0]; | |
return null; | |
} | |
get fullName() { | |
return this.string(this.topDict.FullName); | |
} | |
get familyName() { | |
return this.string(this.topDict.FamilyName); | |
} | |
getCharString(glyph) { | |
this.stream.pos = this.topDict.CharStrings[glyph].offset; | |
return this.stream.readBuffer(this.topDict.CharStrings[glyph].length); | |
} | |
getGlyphName(gid) { | |
// CFF2 glyph names are in the post table. | |
if (this.version >= 2) return null; | |
// CID-keyed fonts don't have glyph names | |
if (this.isCIDFont) return null; | |
let { charset: charset } = this.topDict; | |
if (Array.isArray(charset)) return charset[gid]; | |
if (gid === 0) return '.notdef'; | |
gid -= 1; | |
switch(charset.version){ | |
case 0: | |
return this.string(charset.glyphs[gid]); | |
case 1: | |
case 2: | |
for(let i = 0; i < charset.ranges.length; i++){ | |
let range = charset.ranges[i]; | |
if (range.offset <= gid && gid <= range.offset + range.nLeft) return this.string(range.first + (gid - range.offset)); | |
} | |
break; | |
} | |
return null; | |
} | |
fdForGlyph(gid) { | |
if (!this.topDict.FDSelect) return null; | |
switch(this.topDict.FDSelect.version){ | |
case 0: | |
return this.topDict.FDSelect.fds[gid]; | |
case 3: | |
case 4: | |
let { ranges: ranges } = this.topDict.FDSelect; | |
let low = 0; | |
let high = ranges.length - 1; | |
while(low <= high){ | |
let mid = low + high >> 1; | |
if (gid < ranges[mid].first) high = mid - 1; | |
else if (mid < high && gid >= ranges[mid + 1].first) low = mid + 1; | |
else return ranges[mid].fd; | |
} | |
default: | |
throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`); | |
} | |
} | |
privateDictForGlyph(gid) { | |
if (this.topDict.FDSelect) { | |
let fd = this.fdForGlyph(gid); | |
if (this.topDict.FDArray[fd]) return this.topDict.FDArray[fd].Private; | |
return null; | |
} | |
if (this.version < 2) return this.topDict.Private; | |
return this.topDict.FDArray[0].Private; | |
} | |
constructor(stream){ | |
this.stream = stream; | |
this.decode(); | |
} | |
} | |
var $af4e76a81d73e13e$export$2e2bcd8739ae039 = $af4e76a81d73e13e$var$CFFFont; | |
let $a037a9ab8e35d2e2$var$VerticalOrigin = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
glyphIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
vertOriginY: ($parcel$interopDefault($lzfo4$restructure)).int16 | |
}); | |
var $a037a9ab8e35d2e2$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
majorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
minorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
defaultVertOriginY: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
numVertOriginYMetrics: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
metrics: new ($parcel$interopDefault($lzfo4$restructure)).Array($a037a9ab8e35d2e2$var$VerticalOrigin, 'numVertOriginYMetrics') | |
}); | |
let $57be5e4dbfc12b37$export$16b227cb15d716a0 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
height: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
width: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
horiBearingX: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
horiBearingY: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
horiAdvance: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
vertBearingX: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
vertBearingY: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
vertAdvance: ($parcel$interopDefault($lzfo4$restructure)).uint8 | |
}); | |
let $57be5e4dbfc12b37$export$62c53e75f69bfe12 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
height: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
width: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
bearingX: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
bearingY: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
advance: ($parcel$interopDefault($lzfo4$restructure)).uint8 | |
}); | |
let $57be5e4dbfc12b37$var$EBDTComponent = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
glyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
xOffset: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
yOffset: ($parcel$interopDefault($lzfo4$restructure)).int8 | |
}); | |
class $57be5e4dbfc12b37$var$ByteAligned { | |
} | |
class $57be5e4dbfc12b37$var$BitAligned { | |
} | |
let $57be5e4dbfc12b37$export$f1f5ddeb20d14f = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('version', { | |
1: { | |
metrics: $57be5e4dbfc12b37$export$62c53e75f69bfe12, | |
data: $57be5e4dbfc12b37$var$ByteAligned | |
}, | |
2: { | |
metrics: $57be5e4dbfc12b37$export$62c53e75f69bfe12, | |
data: $57be5e4dbfc12b37$var$BitAligned | |
}, | |
// format 3 is deprecated | |
// format 4 is not supported by Microsoft | |
5: { | |
data: $57be5e4dbfc12b37$var$BitAligned | |
}, | |
6: { | |
metrics: $57be5e4dbfc12b37$export$16b227cb15d716a0, | |
data: $57be5e4dbfc12b37$var$ByteAligned | |
}, | |
7: { | |
metrics: $57be5e4dbfc12b37$export$16b227cb15d716a0, | |
data: $57be5e4dbfc12b37$var$BitAligned | |
}, | |
8: { | |
metrics: $57be5e4dbfc12b37$export$62c53e75f69bfe12, | |
pad: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8), | |
numComponents: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
components: new ($parcel$interopDefault($lzfo4$restructure)).Array($57be5e4dbfc12b37$var$EBDTComponent, 'numComponents') | |
}, | |
9: { | |
metrics: $57be5e4dbfc12b37$export$16b227cb15d716a0, | |
pad: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8), | |
numComponents: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
components: new ($parcel$interopDefault($lzfo4$restructure)).Array($57be5e4dbfc12b37$var$EBDTComponent, 'numComponents') | |
}, | |
17: { | |
metrics: $57be5e4dbfc12b37$export$62c53e75f69bfe12, | |
dataLen: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
data: new ($parcel$interopDefault($lzfo4$restructure)).Buffer('dataLen') | |
}, | |
18: { | |
metrics: $57be5e4dbfc12b37$export$16b227cb15d716a0, | |
dataLen: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
data: new ($parcel$interopDefault($lzfo4$restructure)).Buffer('dataLen') | |
}, | |
19: { | |
dataLen: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
data: new ($parcel$interopDefault($lzfo4$restructure)).Buffer('dataLen') | |
} | |
}); | |
let $415d3f0073d22090$var$SBitLineMetrics = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
ascender: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
descender: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
widthMax: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
caretSlopeNumerator: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
caretSlopeDenominator: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
caretOffset: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
minOriginSB: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
minAdvanceSB: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
maxBeforeBL: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
minAfterBL: ($parcel$interopDefault($lzfo4$restructure)).int8, | |
pad: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).int8, 2) | |
}); | |
let $415d3f0073d22090$var$CodeOffsetPair = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
glyphCode: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
offset: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
let $415d3f0073d22090$var$IndexSubtable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
header: { | |
imageFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
imageDataOffset: ($parcel$interopDefault($lzfo4$restructure)).uint32 | |
}, | |
1: { | |
offsetArray: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1 | |
) | |
}, | |
2: { | |
imageSize: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
bigMetrics: $57be5e4dbfc12b37$export$16b227cb15d716a0 | |
}, | |
3: { | |
offsetArray: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1 | |
) | |
}, | |
4: { | |
numGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
glyphArray: new ($parcel$interopDefault($lzfo4$restructure)).Array($415d3f0073d22090$var$CodeOffsetPair, (t)=>t.numGlyphs + 1 | |
) | |
}, | |
5: { | |
imageSize: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
bigMetrics: $57be5e4dbfc12b37$export$16b227cb15d716a0, | |
numGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
glyphCodeArray: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numGlyphs') | |
} | |
}); | |
let $415d3f0073d22090$var$IndexSubtableArray = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
firstGlyphIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lastGlyphIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
subtable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $415d3f0073d22090$var$IndexSubtable) | |
}); | |
let $415d3f0073d22090$var$BitmapSizeTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
indexSubTableArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array($415d3f0073d22090$var$IndexSubtableArray, 1), { | |
type: 'parent' | |
}), | |
indexTablesSize: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
numberOfIndexSubTables: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
colorRef: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
hori: $415d3f0073d22090$var$SBitLineMetrics, | |
vert: $415d3f0073d22090$var$SBitLineMetrics, | |
startGlyphIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
endGlyphIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
ppemX: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
ppemY: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
bitDepth: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
flags: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint8, [ | |
'horizontal', | |
'vertical' | |
]) | |
}); | |
var $415d3f0073d22090$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
numSizes: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
sizes: new ($parcel$interopDefault($lzfo4$restructure)).Array($415d3f0073d22090$var$BitmapSizeTable, 'numSizes') | |
}); | |
let $95fc167908565fc1$var$ImageTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
ppem: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
resolution: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
imageOffsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, 'void'), (t)=>t.parent.parent.maxp.numGlyphs + 1 | |
) | |
}); | |
var // This is the Apple sbix table, used by the "Apple Color Emoji" font. | |
// It includes several image tables with images for each bitmap glyph | |
// of several different sizes. | |
$95fc167908565fc1$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
flags: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint16, [ | |
'renderOutlines' | |
]), | |
numImgTables: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
imageTables: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $95fc167908565fc1$var$ImageTable), 'numImgTables') | |
}); | |
let $ee5a058727c0db64$var$LayerRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
gid: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
paletteIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16 // Index value to use in the appropriate palette. This value must | |
}); // be less than numPaletteEntries in the CPAL table, except for | |
// the special case noted below. Each palette entry is 16 bits. | |
// A palette index of 0xFFFF is a special case indicating that | |
// the text foreground color should be used. | |
let $ee5a058727c0db64$var$BaseGlyphRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
gid: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
// and is not rendered for color. | |
firstLayerIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
// There will be numLayers consecutive entries for this base glyph. | |
numLayers: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
var $ee5a058727c0db64$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
numBaseGlyphRecords: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
baseGlyphRecord: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array($ee5a058727c0db64$var$BaseGlyphRecord, 'numBaseGlyphRecords')), | |
layerRecords: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array($ee5a058727c0db64$var$LayerRecord, 'numLayerRecords'), { | |
lazy: true | |
}), | |
numLayerRecords: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
let $23ee004c2c56be61$var$ColorRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
blue: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
green: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
red: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
alpha: ($parcel$interopDefault($lzfo4$restructure)).uint8 | |
}); | |
var $23ee004c2c56be61$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
header: { | |
numPaletteEntries: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
numPalettes: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
numColorRecords: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
colorRecords: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array($23ee004c2c56be61$var$ColorRecord, 'numColorRecords')), | |
colorRecordIndices: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numPalettes') | |
}, | |
0: {}, | |
1: { | |
offsetPaletteTypeArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, 'numPalettes')), | |
offsetPaletteLabelArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numPalettes')), | |
offsetPaletteEntryLabelArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numPaletteEntries')) | |
} | |
}); | |
let $4745757aab3ee679$var$BaseCoord = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
1: { | |
coordinate: ($parcel$interopDefault($lzfo4$restructure)).int16 // X or Y value, in design units | |
}, | |
2: { | |
coordinate: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
referenceGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
baseCoordPoint: ($parcel$interopDefault($lzfo4$restructure)).uint16 // Index of contour point on the referenceGlyph | |
}, | |
3: { | |
coordinate: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
deviceTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10) // Device table for X or Y value | |
} | |
}); | |
let $4745757aab3ee679$var$BaseValues = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
defaultIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
baseCoordCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
baseCoords: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseCoord), 'baseCoordCount') | |
}); | |
let $4745757aab3ee679$var$FeatMinMaxRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4), | |
minCoord: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseCoord, { | |
type: 'parent' | |
}), | |
maxCoord: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseCoord, { | |
type: 'parent' | |
}) // May be NULL | |
}); | |
let $4745757aab3ee679$var$MinMax = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
minCoord: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseCoord), | |
maxCoord: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseCoord), | |
featMinMaxCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
featMinMaxRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($4745757aab3ee679$var$FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order | |
}); | |
let $4745757aab3ee679$var$BaseLangSysRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4), | |
minMax: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$MinMax, { | |
type: 'parent' | |
}) | |
}); | |
let $4745757aab3ee679$var$BaseScript = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
baseValues: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseValues), | |
defaultMinMax: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$MinMax), | |
baseLangSysCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
baseLangSysRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($4745757aab3ee679$var$BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag | |
}); | |
let $4745757aab3ee679$var$BaseScriptRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4), | |
script: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseScript, { | |
type: 'parent' | |
}) | |
}); | |
let $4745757aab3ee679$var$BaseScriptList = new ($parcel$interopDefault($lzfo4$restructure)).Array($4745757aab3ee679$var$BaseScriptRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
// Array of 4-byte baseline identification tags-must be in alphabetical order | |
let $4745757aab3ee679$var$BaseTagList = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).String(4), ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $4745757aab3ee679$var$Axis = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
baseTagList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseTagList), | |
baseScriptList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseScriptList) | |
}); | |
var $4745757aab3ee679$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint32, { | |
header: { | |
horizAxis: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$Axis), | |
vertAxis: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$Axis) // May be NULL | |
}, | |
0x00010000: {}, | |
0x00010001: { | |
itemVariationStore: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$export$fe1b122a2710f241) | |
} | |
}); | |
let $e587dbe605efb582$var$AttachPoint = new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $e587dbe605efb582$var$AttachList = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
attachPoints: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$AttachPoint), 'glyphCount') | |
}); | |
let $e587dbe605efb582$var$CaretValue = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
1: { | |
coordinate: ($parcel$interopDefault($lzfo4$restructure)).int16 | |
}, | |
2: { | |
caretValuePoint: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}, | |
3: { | |
coordinate: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
deviceTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10) | |
} | |
}); | |
let $e587dbe605efb582$var$LigGlyph = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$CaretValue), ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $e587dbe605efb582$var$LigCaretList = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
ligGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
ligGlyphs: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$LigGlyph), 'ligGlyphCount') | |
}); | |
let $e587dbe605efb582$var$MarkGlyphSetsDef = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
markSetTableFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
markSetCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $02fa1fdbd31163f6$export$17608c3f81a6111), 'markSetCount') | |
}); | |
var $e587dbe605efb582$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint32, { | |
header: { | |
glyphClassDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71), | |
attachList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$AttachList), | |
ligCaretList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$LigCaretList), | |
markAttachClassDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71) | |
}, | |
0x00010000: {}, | |
0x00010002: { | |
markGlyphSetsDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$MarkGlyphSetsDef) | |
}, | |
0x00010003: { | |
markGlyphSetsDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$MarkGlyphSetsDef), | |
itemVariationStore: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$export$fe1b122a2710f241) | |
} | |
}); | |
let $68e365289aac05c8$var$ValueFormat = new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint16, [ | |
'xPlacement', | |
'yPlacement', | |
'xAdvance', | |
'yAdvance', | |
'xPlaDevice', | |
'yPlaDevice', | |
'xAdvDevice', | |
'yAdvDevice' | |
]); | |
let $68e365289aac05c8$var$types = { | |
xPlacement: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
yPlacement: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
xAdvance: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
yAdvance: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
xPlaDevice: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10, { | |
type: 'global', | |
relativeTo: (ctx)=>ctx.rel | |
}), | |
yPlaDevice: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10, { | |
type: 'global', | |
relativeTo: (ctx)=>ctx.rel | |
}), | |
xAdvDevice: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10, { | |
type: 'global', | |
relativeTo: (ctx)=>ctx.rel | |
}), | |
yAdvDevice: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10, { | |
type: 'global', | |
relativeTo: (ctx)=>ctx.rel | |
}) | |
}; | |
class $68e365289aac05c8$var$ValueRecord { | |
buildStruct(parent) { | |
let struct = parent; | |
while(!struct[this.key] && struct.parent)struct = struct.parent; | |
if (!struct[this.key]) return; | |
let fields = {}; | |
fields.rel = ()=>struct._startOffset | |
; | |
let format = struct[this.key]; | |
for(let key in format)if (format[key]) fields[key] = $68e365289aac05c8$var$types[key]; | |
return new ($parcel$interopDefault($lzfo4$restructure)).Struct(fields); | |
} | |
size(val, ctx) { | |
return this.buildStruct(ctx).size(val, ctx); | |
} | |
decode(stream, parent) { | |
let res = this.buildStruct(parent).decode(stream, parent); | |
delete res.rel; | |
return res; | |
} | |
constructor(key = 'valueFormat'){ | |
this.key = key; | |
} | |
} | |
let $68e365289aac05c8$var$PairValueRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
secondGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
value1: new $68e365289aac05c8$var$ValueRecord('valueFormat1'), | |
value2: new $68e365289aac05c8$var$ValueRecord('valueFormat2') | |
}); | |
let $68e365289aac05c8$var$PairSet = new ($parcel$interopDefault($lzfo4$restructure)).Array($68e365289aac05c8$var$PairValueRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $68e365289aac05c8$var$Class2Record = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
value1: new $68e365289aac05c8$var$ValueRecord('valueFormat1'), | |
value2: new $68e365289aac05c8$var$ValueRecord('valueFormat2') | |
}); | |
let $68e365289aac05c8$var$Anchor = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
1: { | |
xCoordinate: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
yCoordinate: ($parcel$interopDefault($lzfo4$restructure)).int16 | |
}, | |
2: { | |
xCoordinate: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
yCoordinate: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
anchorPoint: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}, | |
3: { | |
xCoordinate: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
yCoordinate: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
xDeviceTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10), | |
yDeviceTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10) | |
} | |
}); | |
let $68e365289aac05c8$var$EntryExitRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
entryAnchor: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$Anchor, { | |
type: 'parent' | |
}), | |
exitAnchor: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$Anchor, { | |
type: 'parent' | |
}) | |
}); | |
let $68e365289aac05c8$var$MarkRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
class: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
markAnchor: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$Anchor, { | |
type: 'parent' | |
}) | |
}); | |
let $68e365289aac05c8$var$MarkArray = new ($parcel$interopDefault($lzfo4$restructure)).Array($68e365289aac05c8$var$MarkRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $68e365289aac05c8$var$BaseRecord = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$Anchor), (t)=>t.parent.classCount | |
); | |
let $68e365289aac05c8$var$BaseArray = new ($parcel$interopDefault($lzfo4$restructure)).Array($68e365289aac05c8$var$BaseRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $68e365289aac05c8$var$ComponentRecord = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$Anchor), (t)=>t.parent.parent.classCount | |
); | |
let $68e365289aac05c8$var$LigatureAttach = new ($parcel$interopDefault($lzfo4$restructure)).Array($68e365289aac05c8$var$ComponentRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $68e365289aac05c8$var$LigatureArray = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$LigatureAttach), ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $68e365289aac05c8$export$73a8cfb19cd43a0f = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('lookupType', { | |
1: new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
1: { | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
valueFormat: $68e365289aac05c8$var$ValueFormat, | |
value: new $68e365289aac05c8$var$ValueRecord() | |
}, | |
2: { | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
valueFormat: $68e365289aac05c8$var$ValueFormat, | |
valueCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
values: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new $68e365289aac05c8$var$ValueRecord(), 'valueCount') | |
} | |
}), | |
2: new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
1: { | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
valueFormat1: $68e365289aac05c8$var$ValueFormat, | |
valueFormat2: $68e365289aac05c8$var$ValueFormat, | |
pairSetCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
pairSets: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$PairSet), 'pairSetCount') | |
}, | |
2: { | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
valueFormat1: $68e365289aac05c8$var$ValueFormat, | |
valueFormat2: $68e365289aac05c8$var$ValueFormat, | |
classDef1: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71), | |
classDef2: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71), | |
class1Count: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
class2Count: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
classRecords: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($68e365289aac05c8$var$Class2Record, 'class2Count'), 'class1Count') | |
} | |
}), | |
3: { | |
format: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
entryExitCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
entryExitRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($68e365289aac05c8$var$EntryExitRecord, 'entryExitCount') | |
}, | |
4: { | |
format: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
markCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
baseCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
classCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
markArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$MarkArray), | |
baseArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$BaseArray) | |
}, | |
5: { | |
format: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
markCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
ligatureCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
classCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
markArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$MarkArray), | |
ligatureArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$LigatureArray) | |
}, | |
6: { | |
format: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
mark1Coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
mark2Coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
classCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
mark1Array: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$MarkArray), | |
mark2Array: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$BaseArray) | |
}, | |
7: $02fa1fdbd31163f6$export$841858b892ce1f4c, | |
8: $02fa1fdbd31163f6$export$5e6d09e6861162f6, | |
9: { | |
posFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookupType: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
extension: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, null) | |
} | |
}); | |
// Fix circular reference | |
$68e365289aac05c8$export$73a8cfb19cd43a0f.versions[9].extension.type = $68e365289aac05c8$export$73a8cfb19cd43a0f; | |
var $68e365289aac05c8$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint32, { | |
header: { | |
scriptList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$3e15fc05ce864229), | |
featureList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$aa18130def4b6cb4), | |
lookupList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new $02fa1fdbd31163f6$export$df0008c6ff2da22a($68e365289aac05c8$export$73a8cfb19cd43a0f)) | |
}, | |
0x00010000: {}, | |
0x00010001: { | |
featureVariations: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$export$441b70b7971dd419) | |
} | |
}); | |
let $1303c4861d36d148$var$Sequence = new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $1303c4861d36d148$var$AlternateSet = $1303c4861d36d148$var$Sequence; | |
let $1303c4861d36d148$var$Ligature = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
glyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
compCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
components: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.compCount - 1 | |
) | |
}); | |
let $1303c4861d36d148$var$LigatureSet = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $1303c4861d36d148$var$Ligature), ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $1303c4861d36d148$var$GSUBLookup = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('lookupType', { | |
1: new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
1: { | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
deltaGlyphID: ($parcel$interopDefault($lzfo4$restructure)).int16 | |
}, | |
2: { | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
substitute: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'glyphCount') | |
} | |
}), | |
2: { | |
substFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
count: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
sequences: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $1303c4861d36d148$var$Sequence), 'count') | |
}, | |
3: { | |
substFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
count: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
alternateSet: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $1303c4861d36d148$var$AlternateSet), 'count') | |
}, | |
4: { | |
substFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
count: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
ligatureSets: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $1303c4861d36d148$var$LigatureSet), 'count') | |
}, | |
5: $02fa1fdbd31163f6$export$841858b892ce1f4c, | |
6: $02fa1fdbd31163f6$export$5e6d09e6861162f6, | |
7: { | |
substFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookupType: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
extension: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, null) | |
}, | |
8: { | |
substFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), | |
backtrackCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), 'backtrackGlyphCount'), | |
lookaheadGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookaheadCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), 'lookaheadGlyphCount'), | |
glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
substitutes: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'glyphCount') | |
} | |
}); | |
// Fix circular reference | |
$1303c4861d36d148$var$GSUBLookup.versions[7].extension.type = $1303c4861d36d148$var$GSUBLookup; | |
var $1303c4861d36d148$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint32, { | |
header: { | |
scriptList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$3e15fc05ce864229), | |
featureList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$aa18130def4b6cb4), | |
lookupList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new $02fa1fdbd31163f6$export$df0008c6ff2da22a($1303c4861d36d148$var$GSUBLookup)) | |
}, | |
0x00010000: {}, | |
0x00010001: { | |
featureVariations: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$export$441b70b7971dd419) | |
} | |
}); | |
let $a27d24eee1e03991$var$JstfGSUBModList = new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $a27d24eee1e03991$var$JstfPriority = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
shrinkageEnableGSUB: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList), | |
shrinkageDisableGSUB: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList), | |
shrinkageEnableGPOS: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList), | |
shrinkageDisableGPOS: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList), | |
shrinkageJstfMax: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new $02fa1fdbd31163f6$export$df0008c6ff2da22a($68e365289aac05c8$export$73a8cfb19cd43a0f)), | |
extensionEnableGSUB: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList), | |
extensionDisableGSUB: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList), | |
extensionEnableGPOS: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList), | |
extensionDisableGPOS: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList), | |
extensionJstfMax: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new $02fa1fdbd31163f6$export$df0008c6ff2da22a($68e365289aac05c8$export$73a8cfb19cd43a0f)) | |
}); | |
let $a27d24eee1e03991$var$JstfLangSys = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfPriority), ($parcel$interopDefault($lzfo4$restructure)).uint16); | |
let $a27d24eee1e03991$var$JstfLangSysRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4), | |
jstfLangSys: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfLangSys) | |
}); | |
let $a27d24eee1e03991$var$JstfScript = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
extenderGlyphs: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, ($parcel$interopDefault($lzfo4$restructure)).uint16)), | |
defaultLangSys: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfLangSys), | |
langSysCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
langSysRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($a27d24eee1e03991$var$JstfLangSysRecord, 'langSysCount') | |
}); | |
let $a27d24eee1e03991$var$JstfScriptRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4), | |
script: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfScript, { | |
type: 'parent' | |
}) | |
}); | |
var $a27d24eee1e03991$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
scriptCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
scriptList: new ($parcel$interopDefault($lzfo4$restructure)).Array($a27d24eee1e03991$var$JstfScriptRecord, 'scriptCount') | |
}); | |
// TODO: add this to restructure | |
class $2d882978d51e3645$var$VariableSizeNumber { | |
decode(stream, parent) { | |
switch(this.size(0, parent)){ | |
case 1: | |
return stream.readUInt8(); | |
case 2: | |
return stream.readUInt16BE(); | |
case 3: | |
return stream.readUInt24BE(); | |
case 4: | |
return stream.readUInt32BE(); | |
} | |
} | |
size(val, parent) { | |
return $lzfo4$restructuresrcutilsjs.resolveLength(this._size, null, parent); | |
} | |
constructor(size){ | |
this._size = size; | |
} | |
} | |
let $2d882978d51e3645$var$MapDataEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
entry: new $2d882978d51e3645$var$VariableSizeNumber((t)=>((t.parent.entryFormat & 0x0030) >> 4) + 1 | |
), | |
outerIndex: (t)=>t.entry >> (t.parent.entryFormat & 0x000F) + 1 | |
, | |
innerIndex: (t)=>t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1 | |
}); | |
let $2d882978d51e3645$var$DeltaSetIndexMap = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
entryFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
mapCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
mapData: new ($parcel$interopDefault($lzfo4$restructure)).Array($2d882978d51e3645$var$MapDataEntry, 'mapCount') | |
}); | |
var $2d882978d51e3645$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
majorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
minorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
itemVariationStore: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$export$fe1b122a2710f241), | |
advanceWidthMapping: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $2d882978d51e3645$var$DeltaSetIndexMap), | |
LSBMapping: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $2d882978d51e3645$var$DeltaSetIndexMap), | |
RSBMapping: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $2d882978d51e3645$var$DeltaSetIndexMap) | |
}); | |
let $116b2de32b06b858$var$Signature = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
format: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
offset: ($parcel$interopDefault($lzfo4$restructure)).uint32 | |
}); | |
let $116b2de32b06b858$var$SignatureBlock = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16, 2), | |
cbSignature: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
signature: new ($parcel$interopDefault($lzfo4$restructure)).Buffer('cbSignature') | |
}); | |
var $116b2de32b06b858$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
ulVersion: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
usNumSigs: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
usFlag: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
signatures: new ($parcel$interopDefault($lzfo4$restructure)).Array($116b2de32b06b858$var$Signature, 'usNumSigs'), | |
signatureBlocks: new ($parcel$interopDefault($lzfo4$restructure)).Array($116b2de32b06b858$var$SignatureBlock, 'usNumSigs') | |
}); | |
let $7dc81c3b51e4c43a$var$GaspRange = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
rangeMaxPPEM: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
rangeGaspBehavior: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint16, [ | |
'grayscale', | |
'gridfit', | |
'symmetricSmoothing', | |
'symmetricGridfit' // only in version 1, for ClearType | |
]) | |
}); | |
var $7dc81c3b51e4c43a$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
numRanges: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
gaspRanges: new ($parcel$interopDefault($lzfo4$restructure)).Array($7dc81c3b51e4c43a$var$GaspRange, 'numRanges') // Sorted by ppem | |
}); | |
let $5bcc7800bd7e22c5$var$DeviceRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
pixelSize: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
maximumWidth: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
widths: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.parent.parent.maxp.numGlyphs | |
) | |
}); | |
var // The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes | |
$5bcc7800bd7e22c5$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
numRecords: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
sizeDeviceRecord: ($parcel$interopDefault($lzfo4$restructure)).int32, | |
records: new ($parcel$interopDefault($lzfo4$restructure)).Array($5bcc7800bd7e22c5$var$DeviceRecord, 'numRecords') | |
}); | |
let $21356b986524a925$var$KernPair = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
left: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
right: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
value: ($parcel$interopDefault($lzfo4$restructure)).int16 | |
}); | |
let $21356b986524a925$var$ClassTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
firstGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
nGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'nGlyphs'), | |
max: (t)=>t.offsets.length && Math.max.apply(Math, t.offsets) | |
}); | |
let $21356b986524a925$var$Kern2Array = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
off: (t)=>t._startOffset - t.parent.parent._startOffset | |
, | |
len: (t)=>((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2) | |
, | |
values: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).int16, 'len') | |
}); | |
let $21356b986524a925$var$KernSubtable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('format', { | |
0: { | |
nPairs: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
searchRange: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
entrySelector: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
rangeShift: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
pairs: new ($parcel$interopDefault($lzfo4$restructure)).Array($21356b986524a925$var$KernPair, 'nPairs') | |
}, | |
2: { | |
rowWidth: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
leftTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $21356b986524a925$var$ClassTable, { | |
type: 'parent' | |
}), | |
rightTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $21356b986524a925$var$ClassTable, { | |
type: 'parent' | |
}), | |
array: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $21356b986524a925$var$Kern2Array, { | |
type: 'parent' | |
}) | |
}, | |
3: { | |
glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
kernValueCount: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
leftClassCount: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
rightClassCount: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
flags: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
kernValue: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int16, 'kernValueCount'), | |
leftClass: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 'glyphCount'), | |
rightClass: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 'glyphCount'), | |
kernIndex: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.leftClassCount * t.rightClassCount | |
) | |
} | |
}); | |
let $21356b986524a925$var$KernTable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('version', { | |
0: { | |
subVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
format: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint8, [ | |
'horizontal', | |
'minimum', | |
'crossStream', | |
'override' // If set to 1 the value in this table replaces the accumulated value | |
]), | |
subtable: $21356b986524a925$var$KernSubtable, | |
padding: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.length - t._currentOffset | |
) | |
}, | |
1: { | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
coverage: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint8, [ | |
null, | |
null, | |
null, | |
null, | |
null, | |
'variation', | |
'crossStream', | |
'vertical' // Set if table has vertical kerning values | |
]), | |
format: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
tupleIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
subtable: $21356b986524a925$var$KernSubtable, | |
padding: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.length - t._currentOffset | |
) | |
} | |
}); | |
var $21356b986524a925$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
0: { | |
nTables: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
tables: new ($parcel$interopDefault($lzfo4$restructure)).Array($21356b986524a925$var$KernTable, 'nTables') | |
}, | |
1: { | |
reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16), | |
nTables: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
tables: new ($parcel$interopDefault($lzfo4$restructure)).Array($21356b986524a925$var$KernTable, 'nTables') | |
} | |
}); | |
var // Linear Threshold table | |
// Records the ppem for each glyph at which the scaling becomes linear again, | |
// despite instructions effecting the advance width | |
$c7bc0d0d5cc6d685$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
numGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
yPels: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 'numGlyphs') | |
}); | |
var // PCL 5 Table | |
// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines | |
$8bee01cf059cb725$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
fontNumber: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
pitch: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
xHeight: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
style: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
typeFamily: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
capHeight: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
symbolSet: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
typeface: new ($parcel$interopDefault($lzfo4$restructure)).String(16), | |
characterComplement: new ($parcel$interopDefault($lzfo4$restructure)).String(8), | |
fileName: new ($parcel$interopDefault($lzfo4$restructure)).String(6), | |
strokeWeight: new ($parcel$interopDefault($lzfo4$restructure)).String(1), | |
widthType: new ($parcel$interopDefault($lzfo4$restructure)).String(1), | |
serifStyle: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8) | |
}); | |
// VDMX tables contain ascender/descender overrides for certain (usually small) | |
// sizes. This is needed in order to match font metrics on Windows. | |
let $fcf1a0f1b278e42d$var$Ratio = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
bCharSet: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
xRatio: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
yStartRatio: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
yEndRatio: ($parcel$interopDefault($lzfo4$restructure)).uint8 // Ending y-Ratio value | |
}); | |
let $fcf1a0f1b278e42d$var$vTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
yPelHeight: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
yMax: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
yMin: ($parcel$interopDefault($lzfo4$restructure)).int16 // Minimum value (in pels) for this yPelHeight | |
}); | |
let $fcf1a0f1b278e42d$var$VdmxGroup = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
recs: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
startsz: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
endsz: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
entries: new ($parcel$interopDefault($lzfo4$restructure)).Array($fcf1a0f1b278e42d$var$vTable, 'recs') // The VDMX records | |
}); | |
var $fcf1a0f1b278e42d$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
numRecs: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
numRatios: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
ratioRanges: new ($parcel$interopDefault($lzfo4$restructure)).Array($fcf1a0f1b278e42d$var$Ratio, 'numRatios'), | |
offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numRatios'), | |
groups: new ($parcel$interopDefault($lzfo4$restructure)).Array($fcf1a0f1b278e42d$var$VdmxGroup, 'numRecs') // The actual VDMX groupings | |
}); | |
var // Vertical Header Table | |
$6b7dea390387f6ff$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
ascent: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
descent: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
lineGap: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
advanceHeightMax: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
minTopSideBearing: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
minBottomSideBearing: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
yMaxExtent: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
caretSlopeRise: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
caretSlopeRun: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
caretOffset: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).int16, 4), | |
metricDataFormat: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
numberOfMetrics: ($parcel$interopDefault($lzfo4$restructure)).uint16 // Number of advance heights in the Vertical Metrics table | |
}); | |
let $1cd1ccbdfeff8d2f$var$VmtxEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
advance: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
bearing: ($parcel$interopDefault($lzfo4$restructure)).int16 // The top sidebearing of the glyph | |
}); | |
var // Vertical Metrics Table | |
$1cd1ccbdfeff8d2f$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
metrics: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($1cd1ccbdfeff8d2f$var$VmtxEntry, (t)=>t.parent.vhea.numberOfMetrics | |
), | |
bearings: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).int16, (t)=>t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics | |
) | |
}); | |
let $2b61ce22494b8a7d$var$shortFrac = new ($parcel$interopDefault($lzfo4$restructure)).Fixed(16, 'BE', 14); | |
let $2b61ce22494b8a7d$var$Correspondence = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
fromCoord: $2b61ce22494b8a7d$var$shortFrac, | |
toCoord: $2b61ce22494b8a7d$var$shortFrac | |
}); | |
let $2b61ce22494b8a7d$var$Segment = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
pairCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
correspondence: new ($parcel$interopDefault($lzfo4$restructure)).Array($2b61ce22494b8a7d$var$Correspondence, 'pairCount') | |
}); | |
var $2b61ce22494b8a7d$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
axisCount: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
segment: new ($parcel$interopDefault($lzfo4$restructure)).Array($2b61ce22494b8a7d$var$Segment, 'axisCount') | |
}); | |
class $ad5453f9e5579f22$var$UnboundedArrayAccessor { | |
getItem(index) { | |
if (this._items[index] == null) { | |
let pos = this.stream.pos; | |
this.stream.pos = this.base + this.type.size(null, this.parent) * index; | |
this._items[index] = this.type.decode(this.stream, this.parent); | |
this.stream.pos = pos; | |
} | |
return this._items[index]; | |
} | |
inspect() { | |
return `[UnboundedArray ${this.type.constructor.name}]`; | |
} | |
constructor(type, stream, parent){ | |
this.type = type; | |
this.stream = stream; | |
this.parent = parent; | |
this.base = this.stream.pos; | |
this._items = []; | |
} | |
} | |
class $ad5453f9e5579f22$export$c5af1eebc882e39a extends ($parcel$interopDefault($lzfo4$restructure)).Array { | |
decode(stream, parent) { | |
return new $ad5453f9e5579f22$var$UnboundedArrayAccessor(this.type, stream, parent); | |
} | |
constructor(type){ | |
super(type, 0); | |
} | |
} | |
let $ad5453f9e5579f22$export$8351f8c2ae2f103c = function(ValueType = ($parcel$interopDefault($lzfo4$restructure)).uint16) { | |
// Helper class that makes internal structures invisible to pointers | |
class Shadow { | |
decode(stream, ctx) { | |
ctx = ctx.parent.parent; | |
return this.type.decode(stream, ctx); | |
} | |
size(val, ctx) { | |
ctx = ctx.parent.parent; | |
return this.type.size(val, ctx); | |
} | |
encode(stream, val, ctx) { | |
ctx = ctx.parent.parent; | |
return this.type.encode(stream, val, ctx); | |
} | |
constructor(type){ | |
this.type = type; | |
} | |
} | |
ValueType = new Shadow(ValueType); | |
let BinarySearchHeader = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
unitSize: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
nUnits: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
searchRange: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
entrySelector: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
rangeShift: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
let LookupSegmentSingle = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
lastGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
firstGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
value: ValueType | |
}); | |
let LookupSegmentArray = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
lastGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
firstGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
values: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new ($parcel$interopDefault($lzfo4$restructure)).Array(ValueType, (t)=>t.lastGlyph - t.firstGlyph + 1 | |
), { | |
type: 'parent' | |
}) | |
}); | |
let LookupSingle = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
glyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
value: ValueType | |
}); | |
return new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, { | |
0: { | |
values: new $ad5453f9e5579f22$export$c5af1eebc882e39a(ValueType) // length == number of glyphs maybe? | |
}, | |
2: { | |
binarySearchHeader: BinarySearchHeader, | |
segments: new ($parcel$interopDefault($lzfo4$restructure)).Array(LookupSegmentSingle, (t)=>t.binarySearchHeader.nUnits | |
) | |
}, | |
4: { | |
binarySearchHeader: BinarySearchHeader, | |
segments: new ($parcel$interopDefault($lzfo4$restructure)).Array(LookupSegmentArray, (t)=>t.binarySearchHeader.nUnits | |
) | |
}, | |
6: { | |
binarySearchHeader: BinarySearchHeader, | |
segments: new ($parcel$interopDefault($lzfo4$restructure)).Array(LookupSingle, (t)=>t.binarySearchHeader.nUnits | |
) | |
}, | |
8: { | |
firstGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
count: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
values: new ($parcel$interopDefault($lzfo4$restructure)).Array(ValueType, 'count') | |
} | |
}); | |
}; | |
function $ad5453f9e5579f22$export$79f7d93d790934ba(entryData = {}, lookupType = ($parcel$interopDefault($lzfo4$restructure)).uint16) { | |
let entry = Object.assign({ | |
newState: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
flags: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}, entryData); | |
let Entry = new ($parcel$interopDefault($lzfo4$restructure)).Struct(entry); | |
let StateArray = new $ad5453f9e5579f22$export$c5af1eebc882e39a(new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.nClasses | |
)); | |
let StateHeader = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
nClasses: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
classTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$8351f8c2ae2f103c(lookupType)), | |
stateArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, StateArray), | |
entryTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$c5af1eebc882e39a(Entry)) | |
}); | |
return StateHeader; | |
} | |
function $ad5453f9e5579f22$export$105027425199cc51(entryData = {}, lookupType = ($parcel$interopDefault($lzfo4$restructure)).uint16) { | |
let ClassLookupTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version () { | |
return 8; | |
}, | |
firstGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
values: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, ($parcel$interopDefault($lzfo4$restructure)).uint16) | |
}); | |
let entry = Object.assign({ | |
newStateOffset: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
// convert offset to stateArray index | |
newState: (t)=>(t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses | |
, | |
flags: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}, entryData); | |
let Entry = new ($parcel$interopDefault($lzfo4$restructure)).Struct(entry); | |
let StateArray = new $ad5453f9e5579f22$export$c5af1eebc882e39a(new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.nClasses | |
)); | |
let StateHeader1 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
nClasses: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
classTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, ClassLookupTable), | |
stateArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, StateArray), | |
entryTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new $ad5453f9e5579f22$export$c5af1eebc882e39a(Entry)) | |
}); | |
return StateHeader1; | |
} | |
let $d96812815f65600e$var$BslnSubtable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('format', { | |
0: { | |
deltas: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int16, 32) | |
}, | |
1: { | |
deltas: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int16, 32), | |
mappingData: new $ad5453f9e5579f22$export$8351f8c2ae2f103c(($parcel$interopDefault($lzfo4$restructure)).uint16) | |
}, | |
2: { | |
standardGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
controlPoints: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 32) | |
}, | |
3: { | |
standardGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
controlPoints: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 32), | |
mappingData: new $ad5453f9e5579f22$export$8351f8c2ae2f103c(($parcel$interopDefault($lzfo4$restructure)).uint16) | |
} | |
}); | |
var $d96812815f65600e$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
format: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
defaultBaseline: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
subtable: $d96812815f65600e$var$BslnSubtable | |
}); | |
let $03d9c1eb48643b7a$var$Setting = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
setting: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
nameIndex: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
name: (t)=>t.parent.parent.parent.name.records.fontFeatures[t.nameIndex] | |
}); | |
let $03d9c1eb48643b7a$var$FeatureName = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
feature: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
nSettings: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
settingTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array($03d9c1eb48643b7a$var$Setting, 'nSettings'), { | |
type: 'parent' | |
}), | |
featureFlags: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint8, [ | |
null, | |
null, | |
null, | |
null, | |
null, | |
null, | |
'hasDefault', | |
'exclusive' | |
]), | |
defaultSetting: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
nameIndex: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameIndex] | |
}); | |
var $03d9c1eb48643b7a$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
featureNameCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
reserved1: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16), | |
reserved2: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint32), | |
featureNames: new ($parcel$interopDefault($lzfo4$restructure)).Array($03d9c1eb48643b7a$var$FeatureName, 'featureNameCount') | |
}); | |
let $2db446770962f79d$var$Axis = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
axisTag: new ($parcel$interopDefault($lzfo4$restructure)).String(4), | |
minValue: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
defaultValue: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
maxValue: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
flags: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
nameID: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID] | |
}); | |
let $2db446770962f79d$var$Instance = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
nameID: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID] | |
, | |
flags: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
coord: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).fixed32, (t)=>t.parent.axisCount | |
), | |
postscriptNameID: new ($parcel$interopDefault($lzfo4$restructure)).Optional(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.parent.instanceSize - t._currentOffset > 0 | |
) | |
}); | |
var $2db446770962f79d$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
offsetToData: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
countSizePairs: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
axisCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
axisSize: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
instanceCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
instanceSize: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
axis: new ($parcel$interopDefault($lzfo4$restructure)).Array($2db446770962f79d$var$Axis, 'axisCount'), | |
instance: new ($parcel$interopDefault($lzfo4$restructure)).Array($2db446770962f79d$var$Instance, 'instanceCount') | |
}); | |
let $9b2a13e02edeea86$var$shortFrac = new ($parcel$interopDefault($lzfo4$restructure)).Fixed(16, 'BE', 14); | |
class $9b2a13e02edeea86$var$Offset { | |
static decode(stream, parent) { | |
// In short format, offsets are multiplied by 2. | |
// This doesn't seem to be documented by Apple, but it | |
// is implemented this way in Freetype. | |
return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2; | |
} | |
} | |
let $9b2a13e02edeea86$var$gvar = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16), | |
axisCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
globalCoordCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
globalCoords: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Array($9b2a13e02edeea86$var$shortFrac, 'axisCount'), 'globalCoordCount')), | |
glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
flags: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
offsetToData: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer($9b2a13e02edeea86$var$Offset, 'void', { | |
relativeTo: (ctx)=>ctx.offsetToData | |
, | |
allowNull: false | |
}), (t)=>t.glyphCount + 1 | |
) | |
}); | |
var $9b2a13e02edeea86$export$2e2bcd8739ae039 = $9b2a13e02edeea86$var$gvar; | |
let $e59e1b842b4890cf$var$ClassTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
coverage: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
subFeatureFlags: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
stateTable: new $ad5453f9e5579f22$export$105027425199cc51 | |
}); | |
let $e59e1b842b4890cf$var$WidthDeltaRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
justClass: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
beforeGrowLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
beforeShrinkLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
afterGrowLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
afterShrinkLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
growFlags: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
shrinkFlags: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}); | |
let $e59e1b842b4890cf$var$WidthDeltaCluster = new ($parcel$interopDefault($lzfo4$restructure)).Array($e59e1b842b4890cf$var$WidthDeltaRecord, ($parcel$interopDefault($lzfo4$restructure)).uint32); | |
let $e59e1b842b4890cf$var$ActionData = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('actionType', { | |
0: { | |
lowerLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
upperLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
order: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
glyphs: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, ($parcel$interopDefault($lzfo4$restructure)).uint16) | |
}, | |
1: { | |
addGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}, | |
2: { | |
substThreshold: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
addGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
substGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}, | |
3: {}, | |
4: { | |
variationAxis: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
minimumLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
noStretchValue: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
maximumLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32 | |
}, | |
5: { | |
flags: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
glyph: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
} | |
}); | |
let $e59e1b842b4890cf$var$Action = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
actionClass: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
actionType: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
actionLength: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
actionData: $e59e1b842b4890cf$var$ActionData, | |
padding: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.actionLength - t._currentOffset | |
) | |
}); | |
let $e59e1b842b4890cf$var$PostcompensationAction = new ($parcel$interopDefault($lzfo4$restructure)).Array($e59e1b842b4890cf$var$Action, ($parcel$interopDefault($lzfo4$restructure)).uint32); | |
let $e59e1b842b4890cf$var$PostCompensationTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
lookupTable: new $ad5453f9e5579f22$export$8351f8c2ae2f103c(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e59e1b842b4890cf$var$PostcompensationAction)) | |
}); | |
let $e59e1b842b4890cf$var$JustificationTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
classTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e59e1b842b4890cf$var$ClassTable, { | |
type: 'parent' | |
}), | |
wdcOffset: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
postCompensationTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e59e1b842b4890cf$var$PostCompensationTable, { | |
type: 'parent' | |
}), | |
widthDeltaClusters: new $ad5453f9e5579f22$export$8351f8c2ae2f103c(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e59e1b842b4890cf$var$WidthDeltaCluster, { | |
type: 'parent', | |
relativeTo: (ctx)=>ctx.wdcOffset | |
})) | |
}); | |
var $e59e1b842b4890cf$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
format: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
horizontal: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e59e1b842b4890cf$var$JustificationTable), | |
vertical: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e59e1b842b4890cf$var$JustificationTable) | |
}); | |
let $06adb7326c86c9e4$var$LigatureData = { | |
action: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}; | |
let $06adb7326c86c9e4$var$ContextualData = { | |
markIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
currentIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}; | |
let $06adb7326c86c9e4$var$InsertionData = { | |
currentInsertIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
markedInsertIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16 | |
}; | |
let $06adb7326c86c9e4$var$SubstitutionTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
items: new $ad5453f9e5579f22$export$c5af1eebc882e39a(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$8351f8c2ae2f103c)) | |
}); | |
let $06adb7326c86c9e4$var$SubtableData = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('type', { | |
0: { | |
stateTable: new $ad5453f9e5579f22$export$79f7d93d790934ba | |
}, | |
1: { | |
stateTable: new $ad5453f9e5579f22$export$79f7d93d790934ba($06adb7326c86c9e4$var$ContextualData), | |
substitutionTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $06adb7326c86c9e4$var$SubstitutionTable) | |
}, | |
2: { | |
stateTable: new $ad5453f9e5579f22$export$79f7d93d790934ba($06adb7326c86c9e4$var$LigatureData), | |
ligatureActions: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$c5af1eebc882e39a(($parcel$interopDefault($lzfo4$restructure)).uint32)), | |
components: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$c5af1eebc882e39a(($parcel$interopDefault($lzfo4$restructure)).uint16)), | |
ligatureList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$c5af1eebc882e39a(($parcel$interopDefault($lzfo4$restructure)).uint16)) | |
}, | |
4: { | |
lookupTable: new $ad5453f9e5579f22$export$8351f8c2ae2f103c | |
}, | |
5: { | |
stateTable: new $ad5453f9e5579f22$export$79f7d93d790934ba($06adb7326c86c9e4$var$InsertionData), | |
insertionActions: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$c5af1eebc882e39a(($parcel$interopDefault($lzfo4$restructure)).uint16)) | |
} | |
}); | |
let $06adb7326c86c9e4$var$Subtable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
coverage: ($parcel$interopDefault($lzfo4$restructure)).uint24, | |
type: ($parcel$interopDefault($lzfo4$restructure)).uint8, | |
subFeatureFlags: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
table: $06adb7326c86c9e4$var$SubtableData, | |
padding: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.length - t._currentOffset | |
) | |
}); | |
let $06adb7326c86c9e4$var$FeatureEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
featureType: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
featureSetting: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
enableFlags: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
disableFlags: ($parcel$interopDefault($lzfo4$restructure)).uint32 | |
}); | |
let $06adb7326c86c9e4$var$MorxChain = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
defaultFlags: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
chainLength: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
nFeatureEntries: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
nSubtables: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
features: new ($parcel$interopDefault($lzfo4$restructure)).Array($06adb7326c86c9e4$var$FeatureEntry, 'nFeatureEntries'), | |
subtables: new ($parcel$interopDefault($lzfo4$restructure)).Array($06adb7326c86c9e4$var$Subtable, 'nSubtables') | |
}); | |
var $06adb7326c86c9e4$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
unused: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16), | |
nChains: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
chains: new ($parcel$interopDefault($lzfo4$restructure)).Array($06adb7326c86c9e4$var$MorxChain, 'nChains') | |
}); | |
let $7c2349d24ed9a62f$var$OpticalBounds = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
left: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
top: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
right: ($parcel$interopDefault($lzfo4$restructure)).int16, | |
bottom: ($parcel$interopDefault($lzfo4$restructure)).int16 | |
}); | |
var $7c2349d24ed9a62f$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
version: ($parcel$interopDefault($lzfo4$restructure)).fixed32, | |
format: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
lookupTable: new $ad5453f9e5579f22$export$8351f8c2ae2f103c($7c2349d24ed9a62f$var$OpticalBounds) | |
}); | |
let $6cd727f8bf15b50a$var$tables = {}; | |
var $6cd727f8bf15b50a$export$2e2bcd8739ae039 = $6cd727f8bf15b50a$var$tables; | |
$6cd727f8bf15b50a$var$tables.cmap = $f6569fe31dc9e2a4$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.head = $e1b51afd73796719$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.hhea = $af15e8c2ca202685$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.hmtx = $cbee70d452c87a2f$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.maxp = $62b43947ebb31537$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.name = $7cfee716e27b503e$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables['OS/2'] = $5e9fda50085d9beb$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.post = $8fb96ffb3c5b1cd6$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.fpgm = $2b37abe4b96e3c42$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.loca = $8cebe4fe43d5c208$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.prep = $75c86c4a9179fd24$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables['cvt '] = $e85635aafda425ab$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.glyf = $1edb604f0b10eb6a$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables['CFF '] = $af4e76a81d73e13e$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables['CFF2'] = $af4e76a81d73e13e$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.VORG = $a037a9ab8e35d2e2$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.EBLC = $415d3f0073d22090$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.CBLC = $6cd727f8bf15b50a$var$tables.EBLC; | |
$6cd727f8bf15b50a$var$tables.sbix = $95fc167908565fc1$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.COLR = $ee5a058727c0db64$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.CPAL = $23ee004c2c56be61$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.BASE = $4745757aab3ee679$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.GDEF = $e587dbe605efb582$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.GPOS = $68e365289aac05c8$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.GSUB = $1303c4861d36d148$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.JSTF = $a27d24eee1e03991$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.HVAR = $2d882978d51e3645$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.DSIG = $116b2de32b06b858$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.gasp = $7dc81c3b51e4c43a$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.hdmx = $5bcc7800bd7e22c5$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.kern = $21356b986524a925$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.LTSH = $c7bc0d0d5cc6d685$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.PCLT = $8bee01cf059cb725$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.VDMX = $fcf1a0f1b278e42d$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.vhea = $6b7dea390387f6ff$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.vmtx = $1cd1ccbdfeff8d2f$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.avar = $2b61ce22494b8a7d$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.bsln = $d96812815f65600e$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.feat = $03d9c1eb48643b7a$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.fvar = $2db446770962f79d$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.gvar = $9b2a13e02edeea86$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.just = $e59e1b842b4890cf$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.morx = $06adb7326c86c9e4$export$2e2bcd8739ae039; | |
$6cd727f8bf15b50a$var$tables.opbd = $7c2349d24ed9a62f$export$2e2bcd8739ae039; | |
let $58b5e8ab8241ced9$var$TableEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4), | |
checkSum: ($parcel$interopDefault($lzfo4$restructure)).uint32, | |
offset: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, 'void', { | |
type: 'global' | |
}), | |
length: ($parcel$interopDefault($lzfo4$restructure)).uint32 | |
}); | |
let $58b5e8ab8241ced9$var$Directory = new ($parcel$interopDefault($lzfo4$restructure)).Struct({ | |
tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4), | |
numTables: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
searchRange: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
entrySelector: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
rangeShift: ($parcel$interopDefault($lzfo4$restructure)).uint16, | |
tables: new ($parcel$interopDefault($lzfo4$restructure)).Array($58b5e8ab8241ced9$var$TableEntry, 'numTables') | |
}); | |
$58b5e8ab8241ced9$var$Directory.process = function() { | |
let tables = {}; | |
for (let table of this.tables)tables[table.tag] = table; | |
this.tables = tables; | |
}; | |
$58b5e8ab8241ced9$var$Directory.preEncode = function(stream) { | |
let tables = []; | |
for(let tag in this.tables){ | |
let table = this.tables[tag]; | |
if (table) tables.push({ | |
tag: tag, | |
checkSum: 0, | |
offset: new ($parcel$interopDefault($lzfo4$restructure)).VoidPointer($6cd727f8bf15b50a$export$2e2bcd8739ae039[tag], table), | |
length: $6cd727f8bf15b50a$export$2e2bcd8739ae039[tag].size(table) | |
}); | |
} | |
this.tag = 'true'; | |
this.numTables = tables.length; | |
this.tables = tables; | |
let maxExponentFor2 = Math.floor(Math.log(this.numTables) / Math.LN2); | |
let maxPowerOf2 = Math.pow(2, maxExponentFor2); | |
this.searchRange = maxPowerOf2 * 16; | |
this.entrySelector = Math.log(maxPowerOf2) / Math.LN2; | |
this.rangeShift = this.numTables * 16 - this.searchRange; | |
}; | |
var $58b5e8ab8241ced9$export$2e2bcd8739ae039 = $58b5e8ab8241ced9$var$Directory; | |
function $c07919491d3366c0$export$2e0ae67339d5f1ac(arr, cmp) { | |
let min = 0; | |
let max = arr.length - 1; | |
while(min <= max){ | |
let mid = min + max >> 1; | |
let res = cmp(arr[mid]); | |
if (res < 0) max = mid - 1; | |
else if (res > 0) min = mid + 1; | |
else return mid; | |
} | |
return -1; | |
} | |
function $c07919491d3366c0$export$d02631cccf789723(index, end) { | |
let $c07919491d3366c0$export$d02631cccf789723 = []; | |
while(index < end)$c07919491d3366c0$export$d02631cccf789723.push(index++); | |
return $c07919491d3366c0$export$d02631cccf789723; | |
} | |
var _class; | |
let $1be0370b015c0ead$export$2e2bcd8739ae039 = (_class = class $1be0370b015c0ead$export$2e2bcd8739ae039 { | |
findSubtable(cmapTable, pairs) { | |
for (let [platformID, encodingID] of pairs)for (let cmap of cmapTable.tables){ | |
if (cmap.platformID === platformID && cmap.encodingID === encodingID) return cmap.table; | |
} | |
return null; | |
} | |
lookup(codepoint, variationSelector) { | |
// If there is no Unicode cmap in this font, we need to re-encode | |
// the codepoint in the encoding that the cmap supports. | |
if (this.encoding) { | |
let buf = ($parcel$interopDefault($lzfo4$iconvlitecjs)).encode(String.fromCodePoint(codepoint), this.encoding); | |
codepoint = 0; | |
for(let i = 0; i < buf.length; i++)codepoint = codepoint << 8 | buf[i]; | |
// Otherwise, try to get a Unicode variation selector for this codepoint if one is provided. | |
} else if (variationSelector) { | |
let gid = this.getVariationSelector(codepoint, variationSelector); | |
if (gid) return gid; | |
} | |
let cmap = this.cmap; | |
switch(cmap.version){ | |
case 0: | |
return cmap.codeMap.get(codepoint) || 0; | |
case 4: | |
{ | |
let min = 0; | |
let max = cmap.segCount - 1; | |
while(min <= max){ | |
let mid = min + max >> 1; | |
if (codepoint < cmap.startCode.get(mid)) max = mid - 1; | |
else if (codepoint > cmap.endCode.get(mid)) min = mid + 1; | |
else { | |
let rangeOffset = cmap.idRangeOffset.get(mid); | |
let gid; | |
if (rangeOffset === 0) gid = codepoint + cmap.idDelta.get(mid); | |
else { | |
let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid); | |
gid = cmap.glyphIndexArray.get(index) || 0; | |
if (gid !== 0) gid += cmap.idDelta.get(mid); | |
} | |
return gid & 0xffff; | |
} | |
} | |
return 0; | |
} | |
case 8: | |
throw new Error('TODO: cmap format 8'); | |
case 6: | |
case 10: | |
return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0; | |
case 12: | |
case 13: | |
{ | |
let min = 0; | |
let max = cmap.nGroups - 1; | |
while(min <= max){ | |
let mid = min + max >> 1; | |
let group = cmap.groups.get(mid); | |
if (codepoint < group.startCharCode) max = mid - 1; | |
else if (codepoint > group.endCharCode) min = mid + 1; | |
else { | |
if (cmap.version === 12) return group.glyphID + (codepoint - group.startCharCode); | |
else return group.glyphID; | |
} | |
} | |
return 0; | |
} | |
case 14: | |
throw new Error('TODO: cmap format 14'); | |
default: | |
throw new Error(`Unknown cmap format ${cmap.version}`); | |
} | |
} | |
getVariationSelector(codepoint, variationSelector) { | |
if (!this.uvs) return 0; | |
let selectors = this.uvs.varSelectors.toArray(); | |
let i = $c07919491d3366c0$export$2e0ae67339d5f1ac(selectors, (x)=>variationSelector - x.varSelector | |
); | |
let sel = selectors[i]; | |
if (i !== -1 && sel.defaultUVS) i = $c07919491d3366c0$export$2e0ae67339d5f1ac(sel.defaultUVS, (x)=>codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? 1 : 0 | |
); | |
if (i !== -1 && sel.nonDefaultUVS) { | |
i = $c07919491d3366c0$export$2e0ae67339d5f1ac(sel.nonDefaultUVS, (x)=>codepoint - x.unicodeValue | |
); | |
if (i !== -1) return sel.nonDefaultUVS[i].glyphID; | |
} | |
return 0; | |
} | |
getCharacterSet() { | |
let cmap = this.cmap; | |
switch(cmap.version){ | |
case 0: | |
return $c07919491d3366c0$export$d02631cccf789723(0, cmap.codeMap.length); | |
case 4: | |
{ | |
let res = []; | |
let endCodes = cmap.endCode.toArray(); | |
for(let i = 0; i < endCodes.length; i++){ | |
let tail = endCodes[i] + 1; | |
let start = cmap.startCode.get(i); | |
res.push(...$c07919491d3366c0$export$d02631cccf789723(start, tail)); | |
} | |
return res; | |
} | |
case 8: | |
throw new Error('TODO: cmap format 8'); | |
case 6: | |
case 10: | |
return $c07919491d3366c0$export$d02631cccf789723(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length); | |
case 12: | |
case 13: | |
{ | |
let res = []; | |
for (let group of cmap.groups.toArray())res.push(...$c07919491d3366c0$export$d02631cccf789723(group.startCharCode, group.endCharCode + 1)); | |
return res; | |
} | |
case 14: | |
throw new Error('TODO: cmap format 14'); | |
default: | |
throw new Error(`Unknown cmap format ${cmap.version}`); | |
} | |
} | |
codePointsForGlyph(gid) { | |
let cmap = this.cmap; | |
switch(cmap.version){ | |
case 0: | |
{ | |
let res = []; | |
for(let i = 0; i < 256; i++)if (cmap.codeMap.get(i) === gid) res.push(i); | |
return res; | |
} | |
case 4: | |
{ | |
let res = []; | |
for(let i = 0; i < cmap.segCount; i++){ | |
let end = cmap.endCode.get(i); | |
let start = cmap.startCode.get(i); | |
let rangeOffset = cmap.idRangeOffset.get(i); | |
let delta = cmap.idDelta.get(i); | |
for(var c = start; c <= end; c++){ | |
let g = 0; | |
if (rangeOffset === 0) g = c + delta; | |
else { | |
let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i); | |
g = cmap.glyphIndexArray.get(index) || 0; | |
if (g !== 0) g += delta; | |
} | |
if (g === gid) res.push(c); | |
} | |
} | |
return res; | |
} | |
case 12: | |
{ | |
let res = []; | |
for (let group of cmap.groups.toArray())if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) res.push(group.startCharCode + (gid - group.glyphID)); | |
return res; | |
} | |
case 13: | |
{ | |
let res = []; | |
for (let group of cmap.groups.toArray())if (gid === group.glyphID) res.push(...$c07919491d3366c0$export$d02631cccf789723(group.startCharCode, group.endCharCode + 1)); | |
return res; | |
} | |
default: | |
throw new Error(`Unknown cmap format ${cmap.version}`); | |
} | |
} | |
constructor(cmapTable){ | |
// Attempt to find a Unicode cmap first | |
this.encoding = null; | |
this.cmap = this.findSubtable(cmapTable, [ | |
// 32-bit subtables | |
[ | |
3, | |
10 | |
], | |
[ | |
0, | |
6 | |
], | |
[ | |
0, | |
4 | |
], | |
// 16-bit subtables | |
[ | |
3, | |
1 | |
], | |
[ | |
0, | |
3 | |
], | |
[ | |
0, | |
2 | |
], | |
[ | |
0, | |
1 | |
], | |
[ | |
0, | |
0 | |
] | |
]); | |
// If not unicode cmap was found, and iconv-lite is installed, | |
// take the first table with a supported encoding. | |
if (!this.cmap && ($parcel$interopDefault($lzfo4$iconvlitecjs))) for (let cmap of cmapTable.tables){ | |
let encoding = $d8b54c41212776fe$export$badc544e0651b6b1(cmap.platformID, cmap.encodingID, cmap.table.language - 1); | |
if (($parcel$interopDefault($lzfo4$iconvlitecjs)).encodingExists(encoding)) { | |
this.cmap = cmap.table; | |
this.encoding = encoding; | |
} | |
} | |
if (!this.cmap) throw new Error("Could not find a supported cmap table"); | |
this.uvs = this.findSubtable(cmapTable, [ | |
[ | |
0, | |
5 | |
] | |
]); | |
if (this.uvs && this.uvs.version !== 14) this.uvs = null; | |
} | |
}, $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "getCharacterSet", [ | |
$9ea776e3198edd2e$export$69a3209f1a06c04d | |
], Object.getOwnPropertyDescriptor(_class.prototype, "getCharacterSet"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "codePointsForGlyph", [ | |
$9ea776e3198edd2e$export$69a3209f1a06c04d | |
], Object.getOwnPropertyDescriptor(_class.prototype, "codePointsForGlyph"), _class.prototype), _class); | |
class $392dfa2b44d72edd$export$2e2bcd8739ae039 { | |
process(glyphs, positions) { | |
for(let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++){ | |
let left = glyphs[glyphIndex].id; | |
let right = glyphs[glyphIndex + 1].id; | |
positions[glyphIndex].xAdvance += this.getKerning(left, right); | |
} | |
} | |
getKerning(left, right) { | |
let res = 0; | |
for (let table of this.kern.tables){ | |
if (table.coverage.crossStream) continue; | |
switch(table.version){ | |
case 0: | |
if (!table.coverage.horizontal) continue; | |
break; | |
case 1: | |
if (table.coverage.vertical || table.coverage.variation) continue; | |
break; | |
default: | |
throw new Error(`Unsupported kerning table version ${table.version}`); | |
} | |
let val = 0; | |
let s = table.subtable; | |
switch(table.format){ | |
case 0: | |
let pairIdx = $c07919491d3366c0$export$2e0ae67339d5f1ac(s.pairs, function(pair) { | |
return left - pair.left || right - pair.right; | |
}); | |
if (pairIdx >= 0) val = s.pairs[pairIdx].value; | |
break; | |
case 2: | |
let leftOffset = 0, rightOffset = 0; | |
if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph]; | |
else leftOffset = s.array.off; | |
if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph]; | |
let index = (leftOffset + rightOffset - s.array.off) / 2; | |
val = s.array.values.get(index); | |
break; | |
case 3: | |
if (left >= s.glyphCount || right >= s.glyphCount) return 0; | |
val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]]; | |
break; | |
default: | |
throw new Error(`Unsupported kerning sub-table format ${table.format}`); | |
} | |
// Microsoft supports the override flag, which resets the result | |
// Otherwise, the sum of the results from all subtables is returned | |
if (table.coverage.override) res = val; | |
else res += val; | |
} | |
return res; | |
} | |
constructor(font){ | |
this.kern = font.kern; | |
} | |
} | |
class $c2c165353b6a2650$export$2e2bcd8739ae039 { | |
positionGlyphs(glyphs, positions) { | |
// find each base + mark cluster, and position the marks relative to the base | |
let clusterStart = 0; | |
let clusterEnd = 0; | |
for(let index = 0; index < glyphs.length; index++){ | |
let glyph = glyphs[index]; | |
if (glyph.isMark) clusterEnd = index; | |
else { | |
if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd); | |
clusterStart = clusterEnd = index; | |
} | |
} | |
if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd); | |
return positions; | |
} | |
positionCluster(glyphs, positions, clusterStart, clusterEnd) { | |
let base = glyphs[clusterStart]; | |
let baseBox = base.cbox.copy(); | |
// adjust bounding box for ligature glyphs | |
if (base.codePoints.length > 1) // LTR. TODO: RTL support. | |
baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length; | |
let xOffset = -positions[clusterStart].xAdvance; | |
let yOffset = 0; | |
let yGap = this.font.unitsPerEm / 16; | |
// position each of the mark glyphs relative to the base glyph | |
for(let index = clusterStart + 1; index <= clusterEnd; index++){ | |
let mark = glyphs[index]; | |
let markBox = mark.cbox; | |
let position = positions[index]; | |
let combiningClass = this.getCombiningClass(mark.codePoints[0]); | |
if (combiningClass !== 'Not_Reordered') { | |
position.xOffset = position.yOffset = 0; | |
// x positioning | |
switch(combiningClass){ | |
case 'Double_Above': | |
case 'Double_Below': | |
// LTR. TODO: RTL support. | |
position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX; | |
break; | |
case 'Attached_Below_Left': | |
case 'Below_Left': | |
case 'Above_Left': | |
// left align | |
position.xOffset += baseBox.minX - markBox.minX; | |
break; | |
case 'Attached_Above_Right': | |
case 'Below_Right': | |
case 'Above_Right': | |
// right align | |
position.xOffset += baseBox.maxX - markBox.width - markBox.minX; | |
break; | |
default: | |
// center align | |
position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX; | |
} | |
// y positioning | |
switch(combiningClass){ | |
case 'Double_Below': | |
case 'Below_Left': | |
case 'Below': | |
case 'Below_Right': | |
case 'Attached_Below_Left': | |
case 'Attached_Below': | |
// add a small gap between the glyphs if they are not attached | |
if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') baseBox.minY += yGap; | |
position.yOffset = -baseBox.minY - markBox.maxY; | |
baseBox.minY += markBox.height; | |
break; | |
case 'Double_Above': | |
case 'Above_Left': | |
case 'Above': | |
case 'Above_Right': | |
case 'Attached_Above': | |
case 'Attached_Above_Right': | |
// add a small gap between the glyphs if they are not attached | |
if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') baseBox.maxY += yGap; | |
position.yOffset = baseBox.maxY - markBox.minY; | |
baseBox.maxY += markBox.height; | |
break; | |
} | |
position.xAdvance = position.yAdvance = 0; | |
position.xOffset += xOffset; | |
position.yOffset += yOffset; | |
} else { | |
xOffset -= position.xAdvance; | |
yOffset -= position.yAdvance; | |
} | |
} | |
return; | |
} | |
getCombiningClass(codePoint) { | |
let combiningClass = ($parcel$interopDefault($lzfo4$unicodeproperties)).getCombiningClass(codePoint); | |
// Thai / Lao need some per-character work | |
if ((codePoint & -256) === 0x0e00) { | |
if (combiningClass === 'Not_Reordered') switch(codePoint){ | |
case 0x0e31: | |
case 0x0e34: | |
case 0x0e35: | |
case 0x0e36: | |
case 0x0e37: | |
case 0x0e47: | |
case 0x0e4c: | |
case 0x0e3d: | |
case 0x0e4e: | |
return 'Above_Right'; | |
case 0x0eb1: | |
case 0x0eb4: | |
case 0x0eb5: | |
case 0x0eb6: | |
case 0x0eb7: | |
case 0x0ebb: | |
case 0x0ecc: | |
case 0x0ecd: | |
return 'Above'; | |
case 0x0ebc: | |
return 'Below'; | |
} | |
else if (codePoint === 0x0e3a) return 'Below_Right'; | |
} | |
switch(combiningClass){ | |
// Hebrew | |
case 'CCC10': | |
case 'CCC11': | |
case 'CCC12': | |
case 'CCC13': | |
case 'CCC14': | |
case 'CCC15': | |
case 'CCC16': | |
case 'CCC17': | |
case 'CCC18': | |
case 'CCC20': | |
case 'CCC22': | |
return 'Below'; | |
case 'CCC23': | |
return 'Attached_Above'; | |
case 'CCC24': | |
return 'Above_Right'; | |
case 'CCC25': | |
case 'CCC19': | |
return 'Above_Left'; | |
case 'CCC26': | |
return 'Above'; | |
case 'CCC21': | |
break; | |
// Arabic and Syriac | |
case 'CCC27': | |
case 'CCC28': | |
case 'CCC30': | |
case 'CCC31': | |
case 'CCC33': | |
case 'CCC34': | |
case 'CCC35': | |
case 'CCC36': | |
return 'Above'; | |
case 'CCC29': | |
case 'CCC32': | |
return 'Below'; | |
// Thai | |
case 'CCC103': | |
return 'Below_Right'; | |
case 'CCC107': | |
return 'Above_Right'; | |
// Lao | |
case 'CCC118': | |
return 'Below'; | |
case 'CCC122': | |
return 'Above'; | |
// Tibetan | |
case 'CCC129': | |
case 'CCC132': | |
return 'Below'; | |
case 'CCC130': | |
return 'Above'; | |
} | |
return combiningClass; | |
} | |
constructor(font){ | |
this.font = font; | |
} | |
} | |
class $6d619c173ebabb82$export$2e2bcd8739ae039 { | |
/** | |
* The width of the bounding box | |
* @type {number} | |
*/ get width() { | |
return this.maxX - this.minX; | |
} | |
/** | |
* The height of the bounding box | |
* @type {number} | |
*/ get height() { | |
return this.maxY - this.minY; | |
} | |
addPoint(x, y) { | |
if (Math.abs(x) !== Infinity) { | |
if (x < this.minX) this.minX = x; | |
if (x > this.maxX) this.maxX = x; | |
} | |
if (Math.abs(y) !== Infinity) { | |
if (y < this.minY) this.minY = y; | |
if (y > this.maxY) this.maxY = y; | |
} | |
} | |
copy() { | |
return new $6d619c173ebabb82$export$2e2bcd8739ae039(this.minX, this.minY, this.maxX, this.maxY); | |
} | |
constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity){ | |
/** | |
* The minimum X position in the bounding box | |
* @type {number} | |
*/ this.minX = minX; | |
/** | |
* The minimum Y position in the bounding box | |
* @type {number} | |
*/ this.minY = minY; | |
/** | |
* The maxmimum X position in the bounding box | |
* @type {number} | |
*/ this.maxX = maxX; | |
/** | |
* The maxmimum Y position in the bounding box | |
* @type {number} | |
*/ this.maxY = maxY; | |
} | |
} | |
// This maps the Unicode Script property to an OpenType script tag | |
// Data from http://www.microsoft.com/typography/otspec/scripttags.htm | |
// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt. | |
const $2e3a795a88d7e002$var$UNICODE_SCRIPTS = { | |
Caucasian_Albanian: 'aghb', | |
Arabic: 'arab', | |
Imperial_Aramaic: 'armi', | |
Armenian: 'armn', | |
Avestan: 'avst', | |
Balinese: 'bali', | |
Bamum: 'bamu', | |
Bassa_Vah: 'bass', | |
Batak: 'batk', | |
Bengali: [ | |
'bng2', | |
'beng' | |
], | |
Bopomofo: 'bopo', | |
Brahmi: 'brah', | |
Braille: 'brai', | |
Buginese: 'bugi', | |
Buhid: 'buhd', | |
Chakma: 'cakm', | |
Canadian_Aboriginal: 'cans', | |
Carian: 'cari', | |
Cham: 'cham', | |
Cherokee: 'cher', | |
Coptic: 'copt', | |
Cypriot: 'cprt', | |
Cyrillic: 'cyrl', | |
Devanagari: [ | |
'dev2', | |
'deva' | |
], | |
Deseret: 'dsrt', | |
Duployan: 'dupl', | |
Egyptian_Hieroglyphs: 'egyp', | |
Elbasan: 'elba', | |
Ethiopic: 'ethi', | |
Georgian: 'geor', | |
Glagolitic: 'glag', | |
Gothic: 'goth', | |
Grantha: 'gran', | |
Greek: 'grek', | |
Gujarati: [ | |
'gjr2', | |
'gujr' | |
], | |
Gurmukhi: [ | |
'gur2', | |
'guru' | |
], | |
Hangul: 'hang', | |
Han: 'hani', | |
Hanunoo: 'hano', | |
Hebrew: 'hebr', | |
Hiragana: 'hira', | |
Pahawh_Hmong: 'hmng', | |
Katakana_Or_Hiragana: 'hrkt', | |
Old_Italic: 'ital', | |
Javanese: 'java', | |
Kayah_Li: 'kali', | |
Katakana: 'kana', | |
Kharoshthi: 'khar', | |
Khmer: 'khmr', | |
Khojki: 'khoj', | |
Kannada: [ | |
'knd2', | |
'knda' | |
], | |
Kaithi: 'kthi', | |
Tai_Tham: 'lana', | |
Lao: 'lao ', | |
Latin: 'latn', | |
Lepcha: 'lepc', | |
Limbu: 'limb', | |
Linear_A: 'lina', | |
Linear_B: 'linb', | |
Lisu: 'lisu', | |
Lycian: 'lyci', | |
Lydian: 'lydi', | |
Mahajani: 'mahj', | |
Mandaic: 'mand', | |
Manichaean: 'mani', | |
Mende_Kikakui: 'mend', | |
Meroitic_Cursive: 'merc', | |
Meroitic_Hieroglyphs: 'mero', | |
Malayalam: [ | |
'mlm2', | |
'mlym' | |
], | |
Modi: 'modi', | |
Mongolian: 'mong', | |
Mro: 'mroo', | |
Meetei_Mayek: 'mtei', | |
Myanmar: [ | |
'mym2', | |
'mymr' | |
], | |
Old_North_Arabian: 'narb', | |
Nabataean: 'nbat', | |
Nko: 'nko ', | |
Ogham: 'ogam', | |
Ol_Chiki: 'olck', | |
Old_Turkic: 'orkh', | |
Oriya: [ | |
'ory2', | |
'orya' | |
], | |
Osmanya: 'osma', | |
Palmyrene: 'palm', | |
Pau_Cin_Hau: 'pauc', | |
Old_Permic: 'perm', | |
Phags_Pa: 'phag', | |
Inscriptional_Pahlavi: 'phli', | |
Psalter_Pahlavi: 'phlp', | |
Phoenician: 'phnx', | |
Miao: 'plrd', | |
Inscriptional_Parthian: 'prti', | |
Rejang: 'rjng', | |
Runic: 'runr', | |
Samaritan: 'samr', | |
Old_South_Arabian: 'sarb', | |
Saurashtra: 'saur', | |
Shavian: 'shaw', | |
Sharada: 'shrd', | |
Siddham: 'sidd', | |
Khudawadi: 'sind', | |
Sinhala: 'sinh', | |
Sora_Sompeng: 'sora', | |
Sundanese: 'sund', | |
Syloti_Nagri: 'sylo', | |
Syriac: 'syrc', | |
Tagbanwa: 'tagb', | |
Takri: 'takr', | |
Tai_Le: 'tale', | |
New_Tai_Lue: 'talu', | |
Tamil: [ | |
'tml2', | |
'taml' | |
], | |
Tai_Viet: 'tavt', | |
Telugu: [ | |
'tel2', | |
'telu' | |
], | |
Tifinagh: 'tfng', | |
Tagalog: 'tglg', | |
Thaana: 'thaa', | |
Thai: 'thai', | |
Tibetan: 'tibt', | |
Tirhuta: 'tirh', | |
Ugaritic: 'ugar', | |
Vai: 'vai ', | |
Warang_Citi: 'wara', | |
Old_Persian: 'xpeo', | |
Cuneiform: 'xsux', | |
Yi: 'yi ', | |
Inherited: 'zinh', | |
Common: 'zyyy', | |
Unknown: 'zzzz' | |
}; | |
const $2e3a795a88d7e002$var$OPENTYPE_SCRIPTS = {}; | |
for(let script in $2e3a795a88d7e002$var$UNICODE_SCRIPTS){ | |
let tag = $2e3a795a88d7e002$var$UNICODE_SCRIPTS[script]; | |
if (Array.isArray(tag)) for (let t of tag)$2e3a795a88d7e002$var$OPENTYPE_SCRIPTS[t] = script; | |
else $2e3a795a88d7e002$var$OPENTYPE_SCRIPTS[tag] = script; | |
} | |
function $2e3a795a88d7e002$export$b32f0b5f69d65e51(script1) { | |
return $2e3a795a88d7e002$var$UNICODE_SCRIPTS[script1]; | |
} | |
function $2e3a795a88d7e002$export$ce50e82f12a827a4(tag) { | |
return $2e3a795a88d7e002$var$OPENTYPE_SCRIPTS[tag]; | |
} | |
function $2e3a795a88d7e002$export$e5cb25e204fb8450(string) { | |
let len = string.length; | |
let idx = 0; | |
while(idx < len){ | |
let code = string.charCodeAt(idx++); | |
// Check if this is a high surrogate | |
if (0xd800 <= code && code <= 0xdbff && idx < len) { | |
let next = string.charCodeAt(idx); | |
// Check if this is a low surrogate | |
if (0xdc00 <= next && next <= 0xdfff) { | |
idx++; | |
code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000; | |
} | |
} | |
let script2 = ($parcel$interopDefault($lzfo4$unicodeproperties)).getScript(code); | |
if (script2 !== 'Common' && script2 !== 'Inherited' && script2 !== 'Unknown') return $2e3a795a88d7e002$var$UNICODE_SCRIPTS[script2]; | |
} | |
return $2e3a795a88d7e002$var$UNICODE_SCRIPTS.Unknown; | |
} | |
function $2e3a795a88d7e002$export$16fab0757cfc223d(codePoints) { | |
for(let i = 0; i < codePoints.length; i++){ | |
let codePoint = codePoints[i]; | |
let script3 = ($parcel$interopDefault($lzfo4$unicodeproperties)).getScript(codePoint); | |
if (script3 !== 'Common' && script3 !== 'Inherited' && script3 !== 'Unknown') return $2e3a795a88d7e002$var$UNICODE_SCRIPTS[script3]; | |
} | |
return $2e3a795a88d7e002$var$UNICODE_SCRIPTS.Unknown; | |
} | |
// The scripts in this map are written from right to left | |
const $2e3a795a88d7e002$var$RTL = { | |
arab: true, | |
hebr: true, | |
syrc: true, | |
thaa: true, | |
cprt: true, | |
khar: true, | |
phnx: true, | |
'nko ': true, | |
lydi: true, | |
avst: true, | |
armi: true, | |
phli: true, | |
prti: true, | |
sarb: true, | |
orkh: true, | |
samr: true, | |
mand: true, | |
merc: true, | |
mero: true, | |
// Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm) | |
mani: true, | |
mend: true, | |
nbat: true, | |
narb: true, | |
palm: true, | |
phlp: true // Psalter Pahlavi | |
}; | |
function $2e3a795a88d7e002$export$9fddb9d0dd7d8a54(script4) { | |
if ($2e3a795a88d7e002$var$RTL[script4]) return 'rtl'; | |
return 'ltr'; | |
} | |
class $9ee490eecf5a30a9$export$2e2bcd8739ae039 { | |
/** | |
* The total advance width of the run. | |
* @type {number} | |
*/ get advanceWidth() { | |
let width = 0; | |
for (let position of this.positions)width += position.xAdvance; | |
return width; | |
} | |
/** | |
* The total advance height of the run. | |
* @type {number} | |
*/ get advanceHeight() { | |
let height = 0; | |
for (let position of this.positions)height += position.yAdvance; | |
return height; | |
} | |
/** | |
* The bounding box containing all glyphs in the run. | |
* @type {BBox} | |
*/ get bbox() { | |
let bbox = new $6d619c173ebabb82$export$2e2bcd8739ae039; | |
let x = 0; | |
let y = 0; | |
for(let index = 0; index < this.glyphs.length; index++){ | |
let glyph = this.glyphs[index]; | |
let p = this.positions[index]; | |
let b = glyph.bbox; | |
bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset); | |
bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset); | |
x += p.xAdvance; | |
y += p.yAdvance; | |
} | |
return bbox; | |
} | |
constructor(glyphs, features, script, language, direction){ | |
/** | |
* An array of Glyph objects in the run | |
* @type {Glyph[]} | |
*/ this.glyphs = glyphs; | |
/** | |
* An array of GlyphPosition objects for each glyph in the run | |
* @type {GlyphPosition[]} | |
*/ this.positions = null; | |
/** | |
* The script that was requested for shaping. This was either passed in or detected automatically. | |
* @type {string} | |
*/ this.script = script; | |
/** | |
* The language requested for shaping, as passed in. If `null`, the default language for the | |
* script was used. | |
* @type {string} | |
*/ this.language = language || null; | |
/** | |
* The direction requested for shaping, as passed in (either ltr or rtl). | |
* If `null`, the default direction of the script is used. | |
* @type {string} | |
*/ this.direction = direction || $2e3a795a88d7e002$export$9fddb9d0dd7d8a54(script); | |
/** | |
* The features requested during shaping. This is a combination of user | |
* specified features and features chosen by the shaper. | |
* @type {object} | |
*/ this.features = {}; | |
// Convert features to an object | |
if (Array.isArray(features)) for (let tag of features)this.features[tag] = true; | |
else if (typeof features === 'object') this.features = features; | |
} | |
} | |
class $745bead61c15c3c9$export$2e2bcd8739ae039 { | |
constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0){ | |
/** | |
* The amount to move the virtual pen in the X direction after rendering this glyph. | |
* @type {number} | |
*/ this.xAdvance = xAdvance; | |
/** | |
* The amount to move the virtual pen in the Y direction after rendering this glyph. | |
* @type {number} | |
*/ this.yAdvance = yAdvance; | |
/** | |
* The offset from the pen position in the X direction at which to render this glyph. | |
* @type {number} | |
*/ this.xOffset = xOffset; | |
/** | |
* The offset from the pen position in the Y direction at which to render this glyph. | |
* @type {number} | |
*/ this.yOffset = yOffset; | |
} | |
} | |
// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html | |
// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac | |
const $38911a2c3f8fd728$var$features = { | |
allTypographicFeatures: { | |
code: 0, | |
exclusive: false, | |
allTypeFeatures: 0 | |
}, | |
ligatures: { | |
code: 1, | |
exclusive: false, | |
requiredLigatures: 0, | |
commonLigatures: 2, | |
rareLigatures: 4, | |
// logos: 6 | |
rebusPictures: 8, | |
diphthongLigatures: 10, | |
squaredLigatures: 12, | |
abbrevSquaredLigatures: 14, | |
symbolLigatures: 16, | |
contextualLigatures: 18, | |
historicalLigatures: 20 | |
}, | |
cursiveConnection: { | |
code: 2, | |
exclusive: true, | |
unconnected: 0, | |
partiallyConnected: 1, | |
cursive: 2 | |
}, | |
letterCase: { | |
code: 3, | |
exclusive: true | |
}, | |
// upperAndLowerCase: 0 # deprecated | |
// allCaps: 1 # deprecated | |
// allLowerCase: 2 # deprecated | |
// smallCaps: 3 # deprecated | |
// initialCaps: 4 # deprecated | |
// initialCapsAndSmallCaps: 5 # deprecated | |
verticalSubstitution: { | |
code: 4, | |
exclusive: false, | |
substituteVerticalForms: 0 | |
}, | |
linguisticRearrangement: { | |
code: 5, | |
exclusive: false, | |
linguisticRearrangement: 0 | |
}, | |
numberSpacing: { | |
code: 6, | |
exclusive: true, | |
monospacedNumbers: 0, | |
proportionalNumbers: 1, | |
thirdWidthNumbers: 2, | |
quarterWidthNumbers: 3 | |
}, | |
smartSwash: { | |
code: 8, | |
exclusive: false, | |
wordInitialSwashes: 0, | |
wordFinalSwashes: 2, | |
// lineInitialSwashes: 4 | |
// lineFinalSwashes: 6 | |
nonFinalSwashes: 8 | |
}, | |
diacritics: { | |
code: 9, | |
exclusive: true, | |
showDiacritics: 0, | |
hideDiacritics: 1, | |
decomposeDiacritics: 2 | |
}, | |
verticalPosition: { | |
code: 10, | |
exclusive: true, | |
normalPosition: 0, | |
superiors: 1, | |
inferiors: 2, | |
ordinals: 3, | |
scientificInferiors: 4 | |
}, | |
fractions: { | |
code: 11, | |
exclusive: true, | |
noFractions: 0, | |
verticalFractions: 1, | |
diagonalFractions: 2 | |
}, | |
overlappingCharacters: { | |
code: 13, | |
exclusive: false, | |
preventOverlap: 0 | |
}, | |
typographicExtras: { | |
code: 14, | |
exclusive: false, | |
// hyphensToEmDash: 0 | |
// hyphenToEnDash: 2 | |
slashedZero: 4 | |
}, | |
// formInterrobang: 6 | |
// smartQuotes: 8 | |
// periodsToEllipsis: 10 | |
mathematicalExtras: { | |
code: 15, | |
exclusive: false, | |
// hyphenToMinus: 0 | |
// asteristoMultiply: 2 | |
// slashToDivide: 4 | |
// inequalityLigatures: 6 | |
// exponents: 8 | |
mathematicalGreek: 10 | |
}, | |
ornamentSets: { | |
code: 16, | |
exclusive: true, | |
noOrnaments: 0, | |
dingbats: 1, | |
piCharacters: 2, | |
fleurons: 3, | |
decorativeBorders: 4, | |
internationalSymbols: 5, | |
mathSymbols: 6 | |
}, | |
characterAlternatives: { | |
code: 17, | |
exclusive: true, | |
noAlternates: 0 | |
}, | |
// user defined options | |
designComplexity: { | |
code: 18, | |
exclusive: true, | |
designLevel1: 0, | |
designLevel2: 1, | |
designLevel3: 2, | |
designLevel4: 3, | |
designLevel5: 4 | |
}, | |
styleOptions: { | |
code: 19, | |
exclusive: true, | |
noStyleOptions: 0, | |
displayText: 1, | |
engravedText: 2, | |
illuminatedCaps: 3, | |
titlingCaps: 4, | |
tallCaps: 5 | |
}, | |
characterShape: { | |
code: 20, | |
exclusive: true, | |
traditionalCharacters: 0, | |
simplifiedCharacters: 1, | |
JIS1978Characters: 2, | |
JIS1983Characters: 3, | |
JIS1990Characters: 4, | |
traditionalAltOne: 5, | |
traditionalAltTwo: 6, | |
traditionalAltThree: 7, | |
traditionalAltFour: 8, | |
traditionalAltFive: 9, | |
expertCharacters: 10, | |
JIS2004Characters: 11, | |
hojoCharacters: 12, | |
NLCCharacters: 13, | |
traditionalNamesCharacters: 14 | |
}, | |
numberCase: { | |
code: 21, | |
exclusive: true, | |
lowerCaseNumbers: 0, | |
upperCaseNumbers: 1 | |
}, | |
textSpacing: { | |
code: 22, | |
exclusive: true, | |
proportionalText: 0, | |
monospacedText: 1, | |
halfWidthText: 2, | |
thirdWidthText: 3, | |
quarterWidthText: 4, | |
altProportionalText: 5, | |
altHalfWidthText: 6 | |
}, | |
transliteration: { | |
code: 23, | |
exclusive: true, | |
noTransliteration: 0 | |
}, | |
// hanjaToHangul: 1 | |
// hiraganaToKatakana: 2 | |
// katakanaToHiragana: 3 | |
// kanaToRomanization: 4 | |
// romanizationToHiragana: 5 | |
// romanizationToKatakana: 6 | |
// hanjaToHangulAltOne: 7 | |
// hanjaToHangulAltTwo: 8 | |
// hanjaToHangulAltThree: 9 | |
annotation: { | |
code: 24, | |
exclusive: true, | |
noAnnotation: 0, | |
boxAnnotation: 1, | |
roundedBoxAnnotation: 2, | |
circleAnnotation: 3, | |
invertedCircleAnnotation: 4, | |
parenthesisAnnotation: 5, | |
periodAnnotation: 6, | |
romanNumeralAnnotation: 7, | |
diamondAnnotation: 8, | |
invertedBoxAnnotation: 9, | |
invertedRoundedBoxAnnotation: 10 | |
}, | |
kanaSpacing: { | |
code: 25, | |
exclusive: true, | |
fullWidthKana: 0, | |
proportionalKana: 1 | |
}, | |
ideographicSpacing: { | |
code: 26, | |
exclusive: true, | |
fullWidthIdeographs: 0, | |
proportionalIdeographs: 1, | |
halfWidthIdeographs: 2 | |
}, | |
unicodeDecomposition: { | |
code: 27, | |
exclusive: false, | |
canonicalComposition: 0, | |
compatibilityComposition: 2, | |
transcodingComposition: 4 | |
}, | |
rubyKana: { | |
code: 28, | |
exclusive: false, | |
// noRubyKana: 0 # deprecated - use rubyKanaOff instead | |
// rubyKana: 1 # deprecated - use rubyKanaOn instead | |
rubyKana: 2 | |
}, | |
CJKSymbolAlternatives: { | |
code: 29, | |
exclusive: true, | |
noCJKSymbolAlternatives: 0, | |
CJKSymbolAltOne: 1, | |
CJKSymbolAltTwo: 2, | |
CJKSymbolAltThree: 3, | |
CJKSymbolAltFour: 4, | |
CJKSymbolAltFive: 5 | |
}, | |
ideographicAlternatives: { | |
code: 30, | |
exclusive: true, | |
noIdeographicAlternatives: 0, | |
ideographicAltOne: 1, | |
ideographicAltTwo: 2, | |
ideographicAltThree: 3, | |
ideographicAltFour: 4, | |
ideographicAltFive: 5 | |
}, | |
CJKVerticalRomanPlacement: { | |
code: 31, | |
exclusive: true, | |
CJKVerticalRomanCentered: 0, | |
CJKVerticalRomanHBaseline: 1 | |
}, | |
italicCJKRoman: { | |
code: 32, | |
exclusive: false, | |
// noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead | |
// CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead | |
CJKItalicRoman: 2 | |
}, | |
caseSensitiveLayout: { | |
code: 33, | |
exclusive: false, | |
caseSensitiveLayout: 0, | |
caseSensitiveSpacing: 2 | |
}, | |
alternateKana: { | |
code: 34, | |
exclusive: false, | |
alternateHorizKana: 0, | |
alternateVertKana: 2 | |
}, | |
stylisticAlternatives: { | |
code: 35, | |
exclusive: false, | |
noStylisticAlternates: 0, | |
stylisticAltOne: 2, | |
stylisticAltTwo: 4, | |
stylisticAltThree: 6, | |
stylisticAltFour: 8, | |
stylisticAltFive: 10, | |
stylisticAltSix: 12, | |
stylisticAltSeven: 14, | |
stylisticAltEight: 16, | |
stylisticAltNine: 18, | |
stylisticAltTen: 20, | |
stylisticAltEleven: 22, | |
stylisticAltTwelve: 24, | |
stylisticAltThirteen: 26, | |
stylisticAltFourteen: 28, | |
stylisticAltFifteen: 30, | |
stylisticAltSixteen: 32, | |
stylisticAltSeventeen: 34, | |
stylisticAltEighteen: 36, | |
stylisticAltNineteen: 38, | |
stylisticAltTwenty: 40 | |
}, | |
contextualAlternates: { | |
code: 36, | |
exclusive: false, | |
contextualAlternates: 0, | |
swashAlternates: 2, | |
contextualSwashAlternates: 4 | |
}, | |
lowerCase: { | |
code: 37, | |
exclusive: true, | |
defaultLowerCase: 0, | |
lowerCaseSmallCaps: 1, | |
lowerCasePetiteCaps: 2 | |
}, | |
upperCase: { | |
code: 38, | |
exclusive: true, | |
defaultUpperCase: 0, | |
upperCaseSmallCaps: 1, | |
upperCasePetiteCaps: 2 | |
}, | |
languageTag: { | |
code: 39, | |
exclusive: true | |
}, | |
CJKRomanSpacing: { | |
code: 103, | |
exclusive: true, | |
halfWidthCJKRoman: 0, | |
proportionalCJKRoman: 1, | |
defaultCJKRoman: 2, | |
fullWidthCJKRoman: 3 | |
} | |
}; | |
const $38911a2c3f8fd728$var$feature = (name, selector)=>[ | |
$38911a2c3f8fd728$var$features[name].code, | |
$38911a2c3f8fd728$var$features[name][selector] | |
] | |
; | |
const $38911a2c3f8fd728$var$OTMapping = { | |
rlig: $38911a2c3f8fd728$var$feature('ligatures', 'requiredLigatures'), | |
clig: $38911a2c3f8fd728$var$feature('ligatures', 'contextualLigatures'), | |
dlig: $38911a2c3f8fd728$var$feature('ligatures', 'rareLigatures'), | |
hlig: $38911a2c3f8fd728$var$feature('ligatures', 'historicalLigatures'), | |
liga: $38911a2c3f8fd728$var$feature('ligatures', 'commonLigatures'), | |
hist: $38911a2c3f8fd728$var$feature('ligatures', 'historicalLigatures'), | |
smcp: $38911a2c3f8fd728$var$feature('lowerCase', 'lowerCaseSmallCaps'), | |
pcap: $38911a2c3f8fd728$var$feature('lowerCase', 'lowerCasePetiteCaps'), | |
frac: $38911a2c3f8fd728$var$feature('fractions', 'diagonalFractions'), | |
dnom: $38911a2c3f8fd728$var$feature('fractions', 'diagonalFractions'), | |
numr: $38911a2c3f8fd728$var$feature('fractions', 'diagonalFractions'), | |
afrc: $38911a2c3f8fd728$var$feature('fractions', 'verticalFractions'), | |
// aalt | |
// abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset? | |
// ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum? | |
// unic, vatu, vhal, vjmo, vpal, vrt2 | |
// dist -> trak table? | |
// kern, vkrn -> kern table | |
// lfbd + opbd + rtbd -> opbd table? | |
// mark, mkmk -> acnt table? | |
// locl -> languageTag + ltag table | |
case: $38911a2c3f8fd728$var$feature('caseSensitiveLayout', 'caseSensitiveLayout'), | |
ccmp: $38911a2c3f8fd728$var$feature('unicodeDecomposition', 'canonicalComposition'), | |
cpct: $38911a2c3f8fd728$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), | |
valt: $38911a2c3f8fd728$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), | |
swsh: $38911a2c3f8fd728$var$feature('contextualAlternates', 'swashAlternates'), | |
cswh: $38911a2c3f8fd728$var$feature('contextualAlternates', 'contextualSwashAlternates'), | |
curs: $38911a2c3f8fd728$var$feature('cursiveConnection', 'cursive'), | |
c2pc: $38911a2c3f8fd728$var$feature('upperCase', 'upperCasePetiteCaps'), | |
c2sc: $38911a2c3f8fd728$var$feature('upperCase', 'upperCaseSmallCaps'), | |
init: $38911a2c3f8fd728$var$feature('smartSwash', 'wordInitialSwashes'), | |
fin2: $38911a2c3f8fd728$var$feature('smartSwash', 'wordFinalSwashes'), | |
medi: $38911a2c3f8fd728$var$feature('smartSwash', 'nonFinalSwashes'), | |
med2: $38911a2c3f8fd728$var$feature('smartSwash', 'nonFinalSwashes'), | |
fin3: $38911a2c3f8fd728$var$feature('smartSwash', 'wordFinalSwashes'), | |
fina: $38911a2c3f8fd728$var$feature('smartSwash', 'wordFinalSwashes'), | |
pkna: $38911a2c3f8fd728$var$feature('kanaSpacing', 'proportionalKana'), | |
half: $38911a2c3f8fd728$var$feature('textSpacing', 'halfWidthText'), | |
halt: $38911a2c3f8fd728$var$feature('textSpacing', 'altHalfWidthText'), | |
hkna: $38911a2c3f8fd728$var$feature('alternateKana', 'alternateHorizKana'), | |
vkna: $38911a2c3f8fd728$var$feature('alternateKana', 'alternateVertKana'), | |
// hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated | |
ital: $38911a2c3f8fd728$var$feature('italicCJKRoman', 'CJKItalicRoman'), | |
lnum: $38911a2c3f8fd728$var$feature('numberCase', 'upperCaseNumbers'), | |
onum: $38911a2c3f8fd728$var$feature('numberCase', 'lowerCaseNumbers'), | |
mgrk: $38911a2c3f8fd728$var$feature('mathematicalExtras', 'mathematicalGreek'), | |
// nalt: not enough info. what type of annotation? | |
// ornm: ditto, which ornament style? | |
calt: $38911a2c3f8fd728$var$feature('contextualAlternates', 'contextualAlternates'), | |
vrt2: $38911a2c3f8fd728$var$feature('verticalSubstitution', 'substituteVerticalForms'), | |
vert: $38911a2c3f8fd728$var$feature('verticalSubstitution', 'substituteVerticalForms'), | |
tnum: $38911a2c3f8fd728$var$feature('numberSpacing', 'monospacedNumbers'), | |
pnum: $38911a2c3f8fd728$var$feature('numberSpacing', 'proportionalNumbers'), | |
sups: $38911a2c3f8fd728$var$feature('verticalPosition', 'superiors'), | |
subs: $38911a2c3f8fd728$var$feature('verticalPosition', 'inferiors'), | |
ordn: $38911a2c3f8fd728$var$feature('verticalPosition', 'ordinals'), | |
pwid: $38911a2c3f8fd728$var$feature('textSpacing', 'proportionalText'), | |
hwid: $38911a2c3f8fd728$var$feature('textSpacing', 'halfWidthText'), | |
qwid: $38911a2c3f8fd728$var$feature('textSpacing', 'quarterWidthText'), | |
twid: $38911a2c3f8fd728$var$feature('textSpacing', 'thirdWidthText'), | |
fwid: $38911a2c3f8fd728$var$feature('textSpacing', 'proportionalText'), | |
palt: $38911a2c3f8fd728$var$feature('textSpacing', 'altProportionalText'), | |
trad: $38911a2c3f8fd728$var$feature('characterShape', 'traditionalCharacters'), | |
smpl: $38911a2c3f8fd728$var$feature('characterShape', 'simplifiedCharacters'), | |
jp78: $38911a2c3f8fd728$var$feature('characterShape', 'JIS1978Characters'), | |
jp83: $38911a2c3f8fd728$var$feature('characterShape', 'JIS1983Characters'), | |
jp90: $38911a2c3f8fd728$var$feature('characterShape', 'JIS1990Characters'), | |
jp04: $38911a2c3f8fd728$var$feature('characterShape', 'JIS2004Characters'), | |
expt: $38911a2c3f8fd728$var$feature('characterShape', 'expertCharacters'), | |
hojo: $38911a2c3f8fd728$var$feature('characterShape', 'hojoCharacters'), | |
nlck: $38911a2c3f8fd728$var$feature('characterShape', 'NLCCharacters'), | |
tnam: $38911a2c3f8fd728$var$feature('characterShape', 'traditionalNamesCharacters'), | |
ruby: $38911a2c3f8fd728$var$feature('rubyKana', 'rubyKana'), | |
titl: $38911a2c3f8fd728$var$feature('styleOptions', 'titlingCaps'), | |
zero: $38911a2c3f8fd728$var$feature('typographicExtras', 'slashedZero'), | |
ss01: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltOne'), | |
ss02: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltTwo'), | |
ss03: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltThree'), | |
ss04: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltFour'), | |
ss05: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltFive'), | |
ss06: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltSix'), | |
ss07: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltSeven'), | |
ss08: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltEight'), | |
ss09: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltNine'), | |
ss10: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltTen'), | |
ss11: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltEleven'), | |
ss12: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltTwelve'), | |
ss13: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltThirteen'), | |
ss14: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltFourteen'), | |
ss15: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltFifteen'), | |
ss16: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltSixteen'), | |
ss17: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltSeventeen'), | |
ss18: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltEighteen'), | |
ss19: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltNineteen'), | |
ss20: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltTwenty') | |
}; | |
// salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose | |
// Add cv01-cv99 features | |
for(let i = 1; i <= 99; i++)$38911a2c3f8fd728$var$OTMapping[`cv${`00${i}`.slice(-2)}`] = [ | |
$38911a2c3f8fd728$var$features.characterAlternatives.code, | |
i | |
]; | |
// create inverse mapping | |
let $38911a2c3f8fd728$var$AATMapping = {}; | |
for(let ot in $38911a2c3f8fd728$var$OTMapping){ | |
let aat = $38911a2c3f8fd728$var$OTMapping[ot]; | |
if ($38911a2c3f8fd728$var$AATMapping[aat[0]] == null) $38911a2c3f8fd728$var$AATMapping[aat[0]] = {}; | |
$38911a2c3f8fd728$var$AATMapping[aat[0]][aat[1]] = ot; | |
} | |
function $38911a2c3f8fd728$export$b813f7d2a1677c16(features) { | |
let res = {}; | |
for(let k in features){ | |
let r; | |
if (r = $38911a2c3f8fd728$var$OTMapping[k]) { | |
if (res[r[0]] == null) res[r[0]] = {}; | |
res[r[0]][r[1]] = features[k]; | |
} | |
} | |
return res; | |
} | |
// Maps strings in a [featureType, featureSetting] | |
// to their equivalent number codes | |
function $38911a2c3f8fd728$var$mapFeatureStrings(f) { | |
let [type, setting] = f; | |
if (isNaN(type)) var typeCode = $38911a2c3f8fd728$var$features[type] && $38911a2c3f8fd728$var$features[type].code; | |
else var typeCode = type; | |
if (isNaN(setting)) var settingCode = $38911a2c3f8fd728$var$features[type] && $38911a2c3f8fd728$var$features[type][setting]; | |
else var settingCode = setting; | |
return [ | |
typeCode, | |
settingCode | |
]; | |
} | |
function $38911a2c3f8fd728$export$bd6df347a4f391c4(features) { | |
let res = {}; | |
if (Array.isArray(features)) for(let k = 0; k < features.length; k++){ | |
let r; | |
let f = $38911a2c3f8fd728$var$mapFeatureStrings(features[k]); | |
if (r = $38911a2c3f8fd728$var$AATMapping[f[0]] && $38911a2c3f8fd728$var$AATMapping[f[0]][f[1]]) res[r] = true; | |
} | |
else if (typeof features === 'object') for(let type in features){ | |
let feature = features[type]; | |
for(let setting in feature){ | |
let r; | |
let f = $38911a2c3f8fd728$var$mapFeatureStrings([ | |
type, | |
setting | |
]); | |
if (feature[setting] && (r = $38911a2c3f8fd728$var$AATMapping[f[0]] && $38911a2c3f8fd728$var$AATMapping[f[0]][f[1]])) res[r] = true; | |
} | |
} | |
return Object.keys(res); | |
} | |
var _class; | |
let $c2212a1e30c3e5e2$export$2e2bcd8739ae039 = (_class = class $c2212a1e30c3e5e2$export$2e2bcd8739ae039 { | |
lookup(glyph) { | |
switch(this.table.version){ | |
case 0: | |
return this.table.values.getItem(glyph); | |
case 2: | |
case 4: | |
{ | |
let min = 0; | |
let max = this.table.binarySearchHeader.nUnits - 1; | |
while(min <= max){ | |
var mid = min + max >> 1; | |
var seg = this.table.segments[mid]; | |
// special end of search value | |
if (seg.firstGlyph === 0xffff) return null; | |
if (glyph < seg.firstGlyph) max = mid - 1; | |
else if (glyph > seg.lastGlyph) min = mid + 1; | |
else { | |
if (this.table.version === 2) return seg.value; | |
else return seg.values[glyph - seg.firstGlyph]; | |
} | |
} | |
return null; | |
} | |
case 6: | |
{ | |
let min = 0; | |
let max = this.table.binarySearchHeader.nUnits - 1; | |
while(min <= max){ | |
var mid = min + max >> 1; | |
var seg = this.table.segments[mid]; | |
// special end of search value | |
if (seg.glyph === 0xffff) return null; | |
if (glyph < seg.glyph) max = mid - 1; | |
else if (glyph > seg.glyph) min = mid + 1; | |
else return seg.value; | |
} | |
return null; | |
} | |
case 8: | |
return this.table.values[glyph - this.table.firstGlyph]; | |
default: | |
throw new Error(`Unknown lookup table format: ${this.table.version}`); | |
} | |
} | |
glyphsForValue(classValue) { | |
let res = []; | |
switch(this.table.version){ | |
case 2: | |
case 4: | |
for (let segment of this.table.segments)if (this.table.version === 2 && segment.value === classValue) res.push(...$c07919491d3366c0$export$d02631cccf789723(segment.firstGlyph, segment.lastGlyph + 1)); | |
else { | |
for(let index = 0; index < segment.values.length; index++)if (segment.values[index] === classValue) res.push(segment.firstGlyph + index); | |
} | |
break; | |
case 6: | |
for (let segment1 of this.table.segments)if (segment1.value === classValue) res.push(segment1.glyph); | |
break; | |
case 8: | |
for(let i = 0; i < this.table.values.length; i++)if (this.table.values[i] === classValue) res.push(this.table.firstGlyph + i); | |
break; | |
default: | |
throw new Error(`Unknown lookup table format: ${this.table.version}`); | |
} | |
return res; | |
} | |
constructor(table){ | |
this.table = table; | |
} | |
}, $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "glyphsForValue", [ | |
$9ea776e3198edd2e$export$69a3209f1a06c04d | |
], Object.getOwnPropertyDescriptor(_class.prototype, "glyphsForValue"), _class.prototype), _class); | |
const $301debcb54a1563f$var$START_OF_TEXT_STATE = 0; | |
const $301debcb54a1563f$var$START_OF_LINE_STATE = 1; | |
const $301debcb54a1563f$var$END_OF_TEXT_CLASS = 0; | |
const $301debcb54a1563f$var$OUT_OF_BOUNDS_CLASS = 1; | |
const $301debcb54a1563f$var$DELETED_GLYPH_CLASS = 2; | |
const $301debcb54a1563f$var$END_OF_LINE_CLASS = 3; | |
const $301debcb54a1563f$var$DONT_ADVANCE = 0x4000; | |
class $301debcb54a1563f$export$2e2bcd8739ae039 { | |
process(glyphs, reverse, processEntry) { | |
let currentState = $301debcb54a1563f$var$START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think? | |
let index = reverse ? glyphs.length - 1 : 0; | |
let dir = reverse ? -1 : 1; | |
while(dir === 1 && index <= glyphs.length || dir === -1 && index >= -1){ | |
let glyph = null; | |
let classCode = $301debcb54a1563f$var$OUT_OF_BOUNDS_CLASS; | |
let shouldAdvance = true; | |
if (index === glyphs.length || index === -1) classCode = $301debcb54a1563f$var$END_OF_TEXT_CLASS; | |
else { | |
glyph = glyphs[index]; | |
if (glyph.id === 0xffff) classCode = $301debcb54a1563f$var$DELETED_GLYPH_CLASS; | |
else { | |
classCode = this.lookupTable.lookup(glyph.id); | |
if (classCode == null) classCode = $301debcb54a1563f$var$OUT_OF_BOUNDS_CLASS; | |
} | |
} | |
let row = this.stateTable.stateArray.getItem(currentState); | |
let entryIndex = row[classCode]; | |
let entry = this.stateTable.entryTable.getItem(entryIndex); | |
if (classCode !== $301debcb54a1563f$var$END_OF_TEXT_CLASS && classCode !== $301debcb54a1563f$var$DELETED_GLYPH_CLASS) { | |
processEntry(glyph, entry, index); | |
shouldAdvance = !(entry.flags & $301debcb54a1563f$var$DONT_ADVANCE); | |
} | |
currentState = entry.newState; | |
if (shouldAdvance) index += dir; | |
} | |
return glyphs; | |
} | |
/** | |
* Performs a depth-first traversal of the glyph strings | |
* represented by the state machine. | |
*/ traverse(opts, state = 0, visited = new Set) { | |
if (visited.has(state)) return; | |
visited.add(state); | |
let { nClasses: nClasses , stateArray: stateArray , entryTable: entryTable } = this.stateTable; | |
let row = stateArray.getItem(state); | |
// Skip predefined classes | |
for(let classCode = 4; classCode < nClasses; classCode++){ | |
let entryIndex = row[classCode]; | |
let entry = entryTable.getItem(entryIndex); | |
// Try all glyphs in the class | |
for (let glyph of this.lookupTable.glyphsForValue(classCode)){ | |
if (opts.enter) opts.enter(glyph, entry); | |
if (entry.newState !== 0) this.traverse(opts, entry.newState, visited); | |
if (opts.exit) opts.exit(glyph, entry); | |
} | |
} | |
} | |
constructor(stateTable){ | |
this.stateTable = stateTable; | |
this.lookupTable = new $c2212a1e30c3e5e2$export$2e2bcd8739ae039(stateTable.classTable); | |
} | |
} | |
var _class; | |
// indic replacement flags | |
const $2dec272f88a4e9d9$var$MARK_FIRST = 0x8000; | |
const $2dec272f88a4e9d9$var$MARK_LAST = 0x2000; | |
const $2dec272f88a4e9d9$var$VERB = 0x000F; | |
// contextual substitution and glyph insertion flag | |
const $2dec272f88a4e9d9$var$SET_MARK = 0x8000; | |
// ligature entry flags | |
const $2dec272f88a4e9d9$var$SET_COMPONENT = 0x8000; | |
const $2dec272f88a4e9d9$var$PERFORM_ACTION = 0x2000; | |
// ligature action masks | |
const $2dec272f88a4e9d9$var$LAST_MASK = 0x80000000; | |
const $2dec272f88a4e9d9$var$STORE_MASK = 0x40000000; | |
const $2dec272f88a4e9d9$var$OFFSET_MASK = 0x3FFFFFFF; | |
const $2dec272f88a4e9d9$var$VERTICAL_ONLY = 0x800000; | |
const $2dec272f88a4e9d9$var$REVERSE_DIRECTION = 0x400000; | |
const $2dec272f88a4e9d9$var$HORIZONTAL_AND_VERTICAL = 0x200000; | |
// glyph insertion flags | |
const $2dec272f88a4e9d9$var$CURRENT_IS_KASHIDA_LIKE = 0x2000; | |
const $2dec272f88a4e9d9$var$MARKED_IS_KASHIDA_LIKE = 0x1000; | |
const $2dec272f88a4e9d9$var$CURRENT_INSERT_BEFORE = 0x0800; | |
const $2dec272f88a4e9d9$var$MARKED_INSERT_BEFORE = 0x0400; | |
const $2dec272f88a4e9d9$var$CURRENT_INSERT_COUNT = 0x03E0; | |
const $2dec272f88a4e9d9$var$MARKED_INSERT_COUNT = 0x001F; | |
let $2dec272f88a4e9d9$export$2e2bcd8739ae039 = (_class = class $2dec272f88a4e9d9$export$2e2bcd8739ae039 { | |
// Processes an array of glyphs and applies the specified features | |
// Features should be in the form of {featureType:{featureSetting:boolean}} | |
process(glyphs, features = {}) { | |
for (let chain of this.morx.chains){ | |
let flags = chain.defaultFlags; | |
// enable/disable the requested features | |
for (let feature of chain.features){ | |
let f; | |
if (f = features[feature.featureType]) { | |
if (f[feature.featureSetting]) { | |
flags &= feature.disableFlags; | |
flags |= feature.enableFlags; | |
} else if (f[feature.featureSetting] === false) { | |
flags |= ~feature.disableFlags; | |
flags &= ~feature.enableFlags; | |
} | |
} | |
} | |
for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.processSubtable(subtable, glyphs); | |
} | |
// remove deleted glyphs | |
let index = glyphs.length - 1; | |
while(index >= 0){ | |
if (glyphs[index].id === 0xffff) glyphs.splice(index, 1); | |
index--; | |
} | |
return glyphs; | |
} | |
processSubtable(subtable, glyphs) { | |
this.subtable = subtable; | |
this.glyphs = glyphs; | |
if (this.subtable.type === 4) { | |
this.processNoncontextualSubstitutions(this.subtable, this.glyphs); | |
return; | |
} | |
this.ligatureStack = []; | |
this.markedGlyph = null; | |
this.firstGlyph = null; | |
this.lastGlyph = null; | |
this.markedIndex = null; | |
let stateMachine = this.getStateMachine(subtable); | |
let process = this.getProcessor(); | |
let reverse = !!(this.subtable.coverage & $2dec272f88a4e9d9$var$REVERSE_DIRECTION); | |
return stateMachine.process(this.glyphs, reverse, process); | |
} | |
getStateMachine(subtable) { | |
return new $301debcb54a1563f$export$2e2bcd8739ae039(subtable.table.stateTable); | |
} | |
getProcessor() { | |
switch(this.subtable.type){ | |
case 0: | |
return this.processIndicRearragement; | |
case 1: | |
return this.processContextualSubstitution; | |
case 2: | |
return this.processLigature; | |
case 4: | |
return this.processNoncontextualSubstitutions; | |
case 5: | |
return this.processGlyphInsertion; | |
default: | |
throw new Error(`Invalid morx subtable type: ${this.subtable.type}`); | |
} | |
} | |
processIndicRearragement(glyph, entry, index) { | |
if (entry.flags & $2dec272f88a4e9d9$var$MARK_FIRST) this.firstGlyph = index; | |
if (entry.flags & $2dec272f88a4e9d9$var$MARK_LAST) this.lastGlyph = index; | |
$2dec272f88a4e9d9$var$reorderGlyphs(this.glyphs, entry.flags & $2dec272f88a4e9d9$var$VERB, this.firstGlyph, this.lastGlyph); | |
} | |
processContextualSubstitution(glyph, entry, index) { | |
let subsitutions = this.subtable.table.substitutionTable.items; | |
if (entry.markIndex !== 0xffff) { | |
let lookup = subsitutions.getItem(entry.markIndex); | |
let lookupTable = new $c2212a1e30c3e5e2$export$2e2bcd8739ae039(lookup); | |
glyph = this.glyphs[this.markedGlyph]; | |
var gid = lookupTable.lookup(glyph.id); | |
if (gid) this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints); | |
} | |
if (entry.currentIndex !== 0xffff) { | |
let lookup = subsitutions.getItem(entry.currentIndex); | |
let lookupTable = new $c2212a1e30c3e5e2$export$2e2bcd8739ae039(lookup); | |
glyph = this.glyphs[index]; | |
var gid = lookupTable.lookup(glyph.id); | |
if (gid) this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); | |
} | |
if (entry.flags & $2dec272f88a4e9d9$var$SET_MARK) this.markedGlyph = index; | |
} | |
processLigature(glyph, entry, index) { | |
if (entry.flags & $2dec272f88a4e9d9$var$SET_COMPONENT) this.ligatureStack.push(index); | |
if (entry.flags & $2dec272f88a4e9d9$var$PERFORM_ACTION) { | |
let actions = this.subtable.table.ligatureActions; | |
let components = this.subtable.table.components; | |
let ligatureList = this.subtable.table.ligatureList; | |
let actionIndex = entry.action; | |
let last = false; | |
let ligatureIndex = 0; | |
let codePoints = []; | |
let ligatureGlyphs = []; | |
while(!last){ | |
let componentGlyph = this.ligatureStack.pop(); | |
codePoints.unshift(...this.glyphs[componentGlyph].codePoints); | |
let action = actions.getItem(actionIndex++); | |
last = !!(action & $2dec272f88a4e9d9$var$LAST_MASK); | |
let store = !!(action & $2dec272f88a4e9d9$var$STORE_MASK); | |
let offset = (action & $2dec272f88a4e9d9$var$OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits | |
offset += this.glyphs[componentGlyph].id; | |
let component = components.getItem(offset); | |
ligatureIndex += component; | |
if (last || store) { | |
let ligatureEntry = ligatureList.getItem(ligatureIndex); | |
this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints); | |
ligatureGlyphs.push(componentGlyph); | |
ligatureIndex = 0; | |
codePoints = []; | |
} else this.glyphs[componentGlyph] = this.font.getGlyph(0xffff); | |
} | |
// Put ligature glyph indexes back on the stack | |
this.ligatureStack.push(...ligatureGlyphs); | |
} | |
} | |
processNoncontextualSubstitutions(subtable, glyphs, index) { | |
let lookupTable = new $c2212a1e30c3e5e2$export$2e2bcd8739ae039(subtable.table.lookupTable); | |
for(index = 0; index < glyphs.length; index++){ | |
let glyph = glyphs[index]; | |
if (glyph.id !== 0xffff) { | |
let gid = lookupTable.lookup(glyph.id); | |
if (gid) glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); | |
} | |
} | |
} | |
_insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) { | |
let insertions = []; | |
while(count--){ | |
let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++); | |
insertions.push(this.font.getGlyph(gid)); | |
} | |
if (!isBefore) glyphIndex++; | |
this.glyphs.splice(glyphIndex, 0, ...insertions); | |
} | |
processGlyphInsertion(glyph, entry, index) { | |
if (entry.flags & $2dec272f88a4e9d9$var$SET_MARK) this.markedIndex = index; | |
if (entry.markedInsertIndex !== 0xffff) { | |
let count = (entry.flags & $2dec272f88a4e9d9$var$MARKED_INSERT_COUNT) >>> 5; | |
let isBefore = !!(entry.flags & $2dec272f88a4e9d9$var$MARKED_INSERT_BEFORE); | |
this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore); | |
} | |
if (entry.currentInsertIndex !== 0xffff) { | |
let count = (entry.flags & $2dec272f88a4e9d9$var$CURRENT_INSERT_COUNT) >>> 5; | |
let isBefore = !!(entry.flags & $2dec272f88a4e9d9$var$CURRENT_INSERT_BEFORE); | |
this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore); | |
} | |
} | |
getSupportedFeatures() { | |
let features = []; | |
for (let chain of this.morx.chains)for (let feature of chain.features)features.push([ | |
feature.featureType, | |
feature.featureSetting | |
]); | |
return features; | |
} | |
generateInputs(gid) { | |
if (!this.inputCache) this.generateInputCache(); | |
return this.inputCache[gid] || []; | |
} | |
generateInputCache() { | |
this.inputCache = {}; | |
for (let chain of this.morx.chains){ | |
let flags = chain.defaultFlags; | |
for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.generateInputsForSubtable(subtable); | |
} | |
} | |
generateInputsForSubtable(subtable) { | |
// Currently, only supporting ligature subtables. | |
if (subtable.type !== 2) return; | |
let reverse = !!(subtable.coverage & $2dec272f88a4e9d9$var$REVERSE_DIRECTION); | |
if (reverse) throw new Error('Reverse subtable, not supported.'); | |
this.subtable = subtable; | |
this.ligatureStack = []; | |
let stateMachine = this.getStateMachine(subtable); | |
let process = this.getProcessor(); | |
let input = []; | |
let stack = []; | |
this.glyphs = []; | |
stateMachine.traverse({ | |
enter: (glyph, entry)=>{ | |
let glyphs = this.glyphs; | |
stack.push({ | |
glyphs: glyphs.slice(), | |
ligatureStack: this.ligatureStack.slice() | |
}); | |
// Add glyph to input and glyphs to process. | |
let g1 = this.font.getGlyph(glyph); | |
input.push(g1); | |
glyphs.push(input[input.length - 1]); | |
// Process ligature substitution | |
process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); | |
// Add input to result if only one matching (non-deleted) glyph remains. | |
let count = 0; | |
let found = 0; | |
for(let i = 0; i < glyphs.length && count <= 1; i++)if (glyphs[i].id !== 0xffff) { | |
count++; | |
found = glyphs[i].id; | |
} | |
if (count === 1) { | |
let result = input.map((g)=>g.id | |
); | |
let cache = this.inputCache[found]; | |
if (cache) cache.push(result); | |
else this.inputCache[found] = [ | |
result | |
]; | |
} | |
}, | |
exit: ()=>{ | |
({ glyphs: this.glyphs , ligatureStack: this.ligatureStack } = stack.pop()); | |
input.pop(); | |
} | |
}); | |
} | |
constructor(font){ | |
this.processIndicRearragement = this.processIndicRearragement.bind(this); | |
this.processContextualSubstitution = this.processContextualSubstitution.bind(this); | |
this.processLigature = this.processLigature.bind(this); | |
this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this); | |
this.processGlyphInsertion = this.processGlyphInsertion.bind(this); | |
this.font = font; | |
this.morx = font.morx; | |
this.inputCache = null; | |
} | |
}, $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "getStateMachine", [ | |
$9ea776e3198edd2e$export$69a3209f1a06c04d | |
], Object.getOwnPropertyDescriptor(_class.prototype, "getStateMachine"), _class.prototype), _class); | |
// swaps the glyphs in rangeA with those in rangeB | |
// reverse the glyphs inside those ranges if specified | |
// ranges are in [offset, length] format | |
function $2dec272f88a4e9d9$var$swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) { | |
let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]); | |
if (reverseB) end.reverse(); | |
let start = glyphs.splice(rangeA[0], rangeA[1], ...end); | |
if (reverseA) start.reverse(); | |
glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start); | |
return glyphs; | |
} | |
function $2dec272f88a4e9d9$var$reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) { | |
let length = lastGlyph - firstGlyph + 1; | |
switch(verb){ | |
case 0: | |
return glyphs; | |
case 1: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
1 | |
], [ | |
lastGlyph, | |
0 | |
]); | |
case 2: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
0 | |
], [ | |
lastGlyph, | |
1 | |
]); | |
case 3: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
1 | |
], [ | |
lastGlyph, | |
1 | |
]); | |
case 4: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
2 | |
], [ | |
lastGlyph, | |
0 | |
]); | |
case 5: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
2 | |
], [ | |
lastGlyph, | |
0 | |
], true, false); | |
case 6: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
0 | |
], [ | |
lastGlyph, | |
2 | |
]); | |
case 7: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
0 | |
], [ | |
lastGlyph, | |
2 | |
], false, true); | |
case 8: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
1 | |
], [ | |
lastGlyph, | |
2 | |
]); | |
case 9: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
1 | |
], [ | |
lastGlyph, | |
2 | |
], false, true); | |
case 10: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
2 | |
], [ | |
lastGlyph, | |
1 | |
]); | |
case 11: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
2 | |
], [ | |
lastGlyph, | |
1 | |
], true, false); | |
case 12: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
2 | |
], [ | |
lastGlyph, | |
2 | |
]); | |
case 13: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
2 | |
], [ | |
lastGlyph, | |
2 | |
], true, false); | |
case 14: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
2 | |
], [ | |
lastGlyph, | |
2 | |
], false, true); | |
case 15: | |
return $2dec272f88a4e9d9$var$swap(glyphs, [ | |
firstGlyph, | |
2 | |
], [ | |
lastGlyph, | |
2 | |
], true, true); | |
default: | |
throw new Error(`Unknown verb: ${verb}`); | |
} | |
} | |
class $7cff22d3cf7aa55a$export$2e2bcd8739ae039 { | |
substitute(glyphRun) { | |
// AAT expects the glyphs to be in visual order prior to morx processing, | |
// so reverse the glyphs if the script is right-to-left. | |
if (glyphRun.direction === 'rtl') glyphRun.glyphs.reverse(); | |
this.morxProcessor.process(glyphRun.glyphs, $38911a2c3f8fd728$export$b813f7d2a1677c16(glyphRun.features)); | |
} | |
getAvailableFeatures(script, language) { | |
return $38911a2c3f8fd728$export$bd6df347a4f391c4(this.morxProcessor.getSupportedFeatures()); | |
} | |
stringsForGlyph(gid) { | |
let glyphStrings = this.morxProcessor.generateInputs(gid); | |
let result = new Set; | |
for (let glyphs of glyphStrings)this._addStrings(glyphs, 0, result, ''); | |
return result; | |
} | |
_addStrings(glyphs, index, strings, string) { | |
let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]); | |
for (let codePoint of codePoints){ | |
let s = string + String.fromCodePoint(codePoint); | |
if (index < glyphs.length - 1) this._addStrings(glyphs, index + 1, strings, s); | |
else strings.add(s); | |
} | |
} | |
constructor(font){ | |
this.font = font; | |
this.morxProcessor = new $2dec272f88a4e9d9$export$2e2bcd8739ae039(font); | |
this.fallbackPosition = false; | |
} | |
} | |
class $6703eaa61400de19$export$2e2bcd8739ae039 { | |
/** | |
* Adds the given features to the last stage. | |
* Ignores features that have already been applied. | |
*/ _addFeatures(features, global) { | |
let stageIndex = this.stages.length - 1; | |
let stage = this.stages[stageIndex]; | |
for (let feature of features)if (this.allFeatures[feature] == null) { | |
stage.push(feature); | |
this.allFeatures[feature] = stageIndex; | |
if (global) this.globalFeatures[feature] = true; | |
} | |
} | |
/** | |
* Add features to the last stage | |
*/ add(arg, global = true) { | |
if (this.stages.length === 0) this.stages.push([]); | |
if (typeof arg === 'string') arg = [ | |
arg | |
]; | |
if (Array.isArray(arg)) this._addFeatures(arg, global); | |
else if (typeof arg === 'object') { | |
this._addFeatures(arg.global || [], true); | |
this._addFeatures(arg.local || [], false); | |
} else throw new Error("Unsupported argument to ShapingPlan#add"); | |
} | |
/** | |
* Add a new stage | |
*/ addStage(arg, global) { | |
if (typeof arg === 'function') this.stages.push(arg, []); | |
else { | |
this.stages.push([]); | |
this.add(arg, global); | |
} | |
} | |
setFeatureOverrides(features) { | |
if (Array.isArray(features)) this.add(features); | |
else if (typeof features === 'object') for(let tag in features){ | |
if (features[tag]) this.add(tag); | |
else if (this.allFeatures[tag] != null) { | |
let stage = this.stages[this.allFeatures[tag]]; | |
stage.splice(stage.indexOf(tag), 1); | |
delete this.allFeatures[tag]; | |
delete this.globalFeatures[tag]; | |
} | |
} | |
} | |
/** | |
* Assigns the global features to the given glyphs | |
*/ assignGlobalFeatures(glyphs) { | |
for (let glyph of glyphs)for(let feature in this.globalFeatures)glyph.features[feature] = true; | |
} | |
/** | |
* Executes the planned stages using the given OTProcessor | |
*/ process(processor, glyphs, positions) { | |
for (let stage of this.stages){ | |
if (typeof stage === 'function') { | |
if (!positions) stage(this.font, glyphs, this); | |
} else if (stage.length > 0) processor.applyFeatures(stage, glyphs, positions); | |
} | |
} | |
constructor(font, script, direction){ | |
this.font = font; | |
this.script = script; | |
this.direction = direction; | |
this.stages = []; | |
this.globalFeatures = {}; | |
this.allFeatures = {}; | |
} | |
} | |
const $4f61fb8204be1a7c$var$VARIATION_FEATURES = [ | |
'rvrn' | |
]; | |
const $4f61fb8204be1a7c$var$COMMON_FEATURES = [ | |
'ccmp', | |
'locl', | |
'rlig', | |
'mark', | |
'mkmk' | |
]; | |
const $4f61fb8204be1a7c$var$FRACTIONAL_FEATURES = [ | |
'frac', | |
'numr', | |
'dnom' | |
]; | |
const $4f61fb8204be1a7c$var$HORIZONTAL_FEATURES = [ | |
'calt', | |
'clig', | |
'liga', | |
'rclt', | |
'curs', | |
'kern' | |
]; | |
const $4f61fb8204be1a7c$var$VERTICAL_FEATURES = [ | |
'vert' | |
]; | |
const $4f61fb8204be1a7c$var$DIRECTIONAL_FEATURES = { | |
ltr: [ | |
'ltra', | |
'ltrm' | |
], | |
rtl: [ | |
'rtla', | |
'rtlm' | |
] | |
}; | |
class $4f61fb8204be1a7c$export$2e2bcd8739ae039 { | |
static plan(plan, glyphs, features) { | |
// Plan the features we want to apply | |
this.planPreprocessing(plan); | |
this.planFeatures(plan); | |
this.planPostprocessing(plan, features); | |
// Assign the global features to all the glyphs | |
plan.assignGlobalFeatures(glyphs); | |
// Assign local features to glyphs | |
this.assignFeatures(plan, glyphs); | |
} | |
static planPreprocessing(plan) { | |
plan.add({ | |
global: [ | |
...$4f61fb8204be1a7c$var$VARIATION_FEATURES, | |
...$4f61fb8204be1a7c$var$DIRECTIONAL_FEATURES[plan.direction] | |
], | |
local: $4f61fb8204be1a7c$var$FRACTIONAL_FEATURES | |
}); | |
} | |
static planFeatures(plan) { | |
// Do nothing by default. Let subclasses override this. | |
} | |
static planPostprocessing(plan, userFeatures) { | |
plan.add([ | |
...$4f61fb8204be1a7c$var$COMMON_FEATURES, | |
...$4f61fb8204be1a7c$var$HORIZONTAL_FEATURES | |
]); | |
plan.setFeatureOverrides(userFeatures); | |
} | |
static assignFeatures(plan, glyphs) { | |
// Enable contextual fractions | |
for(let i = 0; i < glyphs.length; i++){ | |
let glyph = glyphs[i]; | |
if (glyph.codePoints[0] === 0x2044) { | |
let start = i; | |
let end = i + 1; | |
// Apply numerator | |
while(start > 0 && ($parcel$interopDefault($lzfo4$unicodeproperties)).isDigit(glyphs[start - 1].codePoints[0])){ | |
glyphs[start - 1].features.numr = true; | |
glyphs[start - 1].features.frac = true; | |
start--; | |
} | |
// Apply denominator | |
while(end < glyphs.length && ($parcel$interopDefault($lzfo4$unicodeproperties)).isDigit(glyphs[end].codePoints[0])){ | |
glyphs[end].features.dnom = true; | |
glyphs[end].features.frac = true; | |
end++; | |
} | |
// Apply fraction slash | |
glyph.features.frac = true; | |
i = end - 1; | |
} | |
} | |
} | |
} | |
$lzfo4$swchelpers.defineProperty($4f61fb8204be1a7c$export$2e2bcd8739ae039, "zeroMarkWidths", 'AFTER_GPOS'); | |
var $38a185bbdd6946f1$require$Buffer = $lzfo4$buffer.Buffer; | |
const $38a185bbdd6946f1$var$trie = new ($parcel$interopDefault($lzfo4$unicodetrie))($38a185bbdd6946f1$require$Buffer.from("ABABAAAAAACgMQAAAZUBav7t2CtPA0EUBeDZB00pin9AJZIEgyUEj0QhweDAgQOJxCBRBElQSBwSicLgkOAwnNKZ5GaY2c7uzj4o5yZfZrrbefbuIx2nSq3CGmzAWH/+K+UO7MIe7MMhHMMpnMMFXMIVXIt2t3CnP088iPqjqNN8e4Ij7Rle4LUH82rLm6i/92A+RERERERERERNmfz/89GDeRARERERzbN8ceps2Iwt9H0C9/AJ6yOlDkbTczcot5VSm8Pm1vcFWfb7+BKOLTuOd2UlTX4wGP85Eg953lWPFbnuN7PkjtLmalOWbNenkHOSa7T3KmR9MVTZ2zZkVj1kHa68MueVKH0R4zqQ44WEXLM8VjcWHP0PtKLfPzQnMtGn3W4QYf6qxFxceVI394r2xnV+1rih0fV1Vzf3fO1n3evL5J78ruvZ5ptX2Rwy92Tfb1wlEqut3U+sZ3HXOeJ7/zDrbyuP6+Zz0fqa6Nv3vhY7Yu1xWnGevmsvsUpTT/RYIe8waUH/rvHMWKFzLfN8L+rTfp645mfX7ftlnfDtYxN59w0=", "base64")); | |
const $38a185bbdd6946f1$var$FEATURES = [ | |
'isol', | |
'fina', | |
'fin2', | |
'fin3', | |
'medi', | |
'med2', | |
'init' | |
]; | |
const $38a185bbdd6946f1$var$ShapingClasses = { | |
Non_Joining: 0, | |
Left_Joining: 1, | |
Right_Joining: 2, | |
Dual_Joining: 3, | |
Join_Causing: 3, | |
ALAPH: 4, | |
'DALATH RISH': 5, | |
Transparent: 6 | |
}; | |
const $38a185bbdd6946f1$var$ISOL = 'isol'; | |
const $38a185bbdd6946f1$var$FINA = 'fina'; | |
const $38a185bbdd6946f1$var$FIN2 = 'fin2'; | |
const $38a185bbdd6946f1$var$FIN3 = 'fin3'; | |
const $38a185bbdd6946f1$var$MEDI = 'medi'; | |
const $38a185bbdd6946f1$var$MED2 = 'med2'; | |
const $38a185bbdd6946f1$var$INIT = 'init'; | |
const $38a185bbdd6946f1$var$NONE = null; | |
// Each entry is [prevAction, curAction, nextState] | |
const $38a185bbdd6946f1$var$STATE_TABLE = [ | |
// Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH | |
// State 0: prev was U, not willing to join. | |
[ | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$NONE, | |
0 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
2 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
1 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
2 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
1 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
6 | |
] | |
], | |
// State 1: prev was R or ISOL/ALAPH, not willing to join. | |
[ | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$NONE, | |
0 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
2 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
1 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
2 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$FIN2, | |
5 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
6 | |
] | |
], | |
// State 2: prev was D/L in ISOL form, willing to join. | |
[ | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$NONE, | |
0 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
2 | |
], | |
[ | |
$38a185bbdd6946f1$var$INIT, | |
$38a185bbdd6946f1$var$FINA, | |
1 | |
], | |
[ | |
$38a185bbdd6946f1$var$INIT, | |
$38a185bbdd6946f1$var$FINA, | |
3 | |
], | |
[ | |
$38a185bbdd6946f1$var$INIT, | |
$38a185bbdd6946f1$var$FINA, | |
4 | |
], | |
[ | |
$38a185bbdd6946f1$var$INIT, | |
$38a185bbdd6946f1$var$FINA, | |
6 | |
] | |
], | |
// State 3: prev was D in FINA form, willing to join. | |
[ | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$NONE, | |
0 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
2 | |
], | |
[ | |
$38a185bbdd6946f1$var$MEDI, | |
$38a185bbdd6946f1$var$FINA, | |
1 | |
], | |
[ | |
$38a185bbdd6946f1$var$MEDI, | |
$38a185bbdd6946f1$var$FINA, | |
3 | |
], | |
[ | |
$38a185bbdd6946f1$var$MEDI, | |
$38a185bbdd6946f1$var$FINA, | |
4 | |
], | |
[ | |
$38a185bbdd6946f1$var$MEDI, | |
$38a185bbdd6946f1$var$FINA, | |
6 | |
] | |
], | |
// State 4: prev was FINA ALAPH, not willing to join. | |
[ | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$NONE, | |
0 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
2 | |
], | |
[ | |
$38a185bbdd6946f1$var$MED2, | |
$38a185bbdd6946f1$var$ISOL, | |
1 | |
], | |
[ | |
$38a185bbdd6946f1$var$MED2, | |
$38a185bbdd6946f1$var$ISOL, | |
2 | |
], | |
[ | |
$38a185bbdd6946f1$var$MED2, | |
$38a185bbdd6946f1$var$FIN2, | |
5 | |
], | |
[ | |
$38a185bbdd6946f1$var$MED2, | |
$38a185bbdd6946f1$var$ISOL, | |
6 | |
] | |
], | |
// State 5: prev was FIN2/FIN3 ALAPH, not willing to join. | |
[ | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$NONE, | |
0 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
2 | |
], | |
[ | |
$38a185bbdd6946f1$var$ISOL, | |
$38a185bbdd6946f1$var$ISOL, | |
1 | |
], | |
[ | |
$38a185bbdd6946f1$var$ISOL, | |
$38a185bbdd6946f1$var$ISOL, | |
2 | |
], | |
[ | |
$38a185bbdd6946f1$var$ISOL, | |
$38a185bbdd6946f1$var$FIN2, | |
5 | |
], | |
[ | |
$38a185bbdd6946f1$var$ISOL, | |
$38a185bbdd6946f1$var$ISOL, | |
6 | |
] | |
], | |
// State 6: prev was DALATH/RISH, not willing to join. | |
[ | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$NONE, | |
0 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
2 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
1 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
2 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$FIN3, | |
5 | |
], | |
[ | |
$38a185bbdd6946f1$var$NONE, | |
$38a185bbdd6946f1$var$ISOL, | |
6 | |
] | |
] | |
]; | |
class $38a185bbdd6946f1$export$2e2bcd8739ae039 extends $4f61fb8204be1a7c$export$2e2bcd8739ae039 { | |
static planFeatures(plan) { | |
plan.add([ | |
'ccmp', | |
'locl' | |
]); | |
for(let i = 0; i < $38a185bbdd6946f1$var$FEATURES.length; i++){ | |
let feature = $38a185bbdd6946f1$var$FEATURES[i]; | |
plan.addStage(feature, false); | |
} | |
plan.addStage('mset'); | |
} | |
static assignFeatures(plan, glyphs) { | |
super.assignFeatures(plan, glyphs); | |
let prev = -1; | |
let state = 0; | |
let actions = []; | |
// Apply the state machine to map glyphs to features | |
for(let i = 0; i < glyphs.length; i++){ | |
let curAction, prevAction; | |
var glyph = glyphs[i]; | |
let type = $38a185bbdd6946f1$var$getShapingClass(glyph.codePoints[0]); | |
if (type === $38a185bbdd6946f1$var$ShapingClasses.Transparent) { | |
actions[i] = $38a185bbdd6946f1$var$NONE; | |
continue; | |
} | |
[prevAction, curAction, state] = $38a185bbdd6946f1$var$STATE_TABLE[state][type]; | |
if (prevAction !== $38a185bbdd6946f1$var$NONE && prev !== -1) actions[prev] = prevAction; | |
actions[i] = curAction; | |
prev = i; | |
} | |
// Apply the chosen features to their respective glyphs | |
for(let index = 0; index < glyphs.length; index++){ | |
let feature; | |
var glyph = glyphs[index]; | |
if (feature = actions[index]) glyph.features[feature] = true; | |
} | |
} | |
} | |
function $38a185bbdd6946f1$var$getShapingClass(codePoint) { | |
let res = $38a185bbdd6946f1$var$trie.get(codePoint); | |
if (res) return res - 1; | |
let category = ($parcel$interopDefault($lzfo4$unicodeproperties)).getCategory(codePoint); | |
if (category === 'Mn' || category === 'Me' || category === 'Cf') return $38a185bbdd6946f1$var$ShapingClasses.Transparent; | |
return $38a185bbdd6946f1$var$ShapingClasses.Non_Joining; | |
} | |
class $9b0d9f7995eda7b8$export$2e2bcd8739ae039 { | |
reset(options = {}, index = 0) { | |
this.options = options; | |
this.flags = options.flags || {}; | |
this.markAttachmentType = options.markAttachmentType || 0; | |
this.index = index; | |
} | |
get cur() { | |
return this.glyphs[this.index] || null; | |
} | |
shouldIgnore(glyph) { | |
return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType; | |
} | |
move(dir) { | |
this.index += dir; | |
while(0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index]))this.index += dir; | |
if (0 > this.index || this.index >= this.glyphs.length) return null; | |
return this.glyphs[this.index]; | |
} | |
next() { | |
return this.move(1); | |
} | |
prev() { | |
return this.move(-1); | |
} | |
peek(count = 1) { | |
let idx = this.index; | |
let res = this.increment(count); | |
this.index = idx; | |
return res; | |
} | |
peekIndex(count = 1) { | |
let idx = this.index; | |
this.increment(count); | |
let res = this.index; | |
this.index = idx; | |
return res; | |
} | |
increment(count = 1) { | |
let dir = count < 0 ? -1 : 1; | |
count = Math.abs(count); | |
while(count--)this.move(dir); | |
return this.glyphs[this.index]; | |
} | |
constructor(glyphs, options){ | |
this.glyphs = glyphs; | |
this.reset(options); | |
} | |
} | |
const $cca6af4639973976$var$DEFAULT_SCRIPTS = [ | |
'DFLT', | |
'dflt', | |
'latn' | |
]; | |
class $cca6af4639973976$export$2e2bcd8739ae039 { | |
findScript(script) { | |
if (this.table.scriptList == null) return null; | |
if (!Array.isArray(script)) script = [ | |
script | |
]; | |
for (let s of script)for (let entry of this.table.scriptList){ | |
if (entry.tag === s) return entry; | |
} | |
return null; | |
} | |
selectScript(script, language, direction) { | |
let changed = false; | |
let entry; | |
if (!this.script || script !== this.scriptTag) { | |
entry = this.findScript(script); | |
if (!entry) entry = this.findScript($cca6af4639973976$var$DEFAULT_SCRIPTS); | |
if (!entry) return this.scriptTag; | |
this.scriptTag = entry.tag; | |
this.script = entry.script; | |
this.language = null; | |
this.languageTag = null; | |
changed = true; | |
} | |
if (!direction || direction !== this.direction) this.direction = direction || $2e3a795a88d7e002$export$9fddb9d0dd7d8a54(script); | |
if (language && language.length < 4) language += ' '.repeat(4 - language.length); | |
if (!language || language !== this.languageTag) { | |
this.language = null; | |
for (let lang of this.script.langSysRecords)if (lang.tag === language) { | |
this.language = lang.langSys; | |
this.languageTag = lang.tag; | |
break; | |
} | |
if (!this.language) { | |
this.language = this.script.defaultLangSys; | |
this.languageTag = null; | |
} | |
changed = true; | |
} | |
// Build a feature lookup table | |
if (changed) { | |
this.features = {}; | |
if (this.language) for (let featureIndex of this.language.featureIndexes){ | |
let record = this.table.featureList[featureIndex]; | |
let substituteFeature = this.substituteFeatureForVariations(featureIndex); | |
this.features[record.tag] = substituteFeature || record.feature; | |
} | |
} | |
return this.scriptTag; | |
} | |
lookupsForFeatures(userFeatures = [], exclude) { | |
let lookups = []; | |
for (let tag of userFeatures){ | |
let feature = this.features[tag]; | |
if (!feature) continue; | |
for (let lookupIndex of feature.lookupListIndexes){ | |
if (exclude && exclude.indexOf(lookupIndex) !== -1) continue; | |
lookups.push({ | |
feature: tag, | |
index: lookupIndex, | |
lookup: this.table.lookupList.get(lookupIndex) | |
}); | |
} | |
} | |
lookups.sort((a, b)=>a.index - b.index | |
); | |
return lookups; | |
} | |
substituteFeatureForVariations(featureIndex) { | |
if (this.variationsIndex === -1) return null; | |
let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex]; | |
let substitutions = record.featureTableSubstitution.substitutions; | |
for (let substitution of substitutions){ | |
if (substitution.featureIndex === featureIndex) return substitution.alternateFeatureTable; | |
} | |
return null; | |
} | |
findVariationsIndex(coords) { | |
let variations = this.table.featureVariations; | |
if (!variations) return -1; | |
let records = variations.featureVariationRecords; | |
for(let i = 0; i < records.length; i++){ | |
let conditions = records[i].conditionSet.conditionTable; | |
if (this.variationConditionsMatch(conditions, coords)) return i; | |
} | |
return -1; | |
} | |
variationConditionsMatch(conditions, coords) { | |
return conditions.every((condition)=>{ | |
let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0; | |
return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue; | |
}); | |
} | |
applyFeatures(userFeatures, glyphs, advances) { | |
let lookups = this.lookupsForFeatures(userFeatures); | |
this.applyLookups(lookups, glyphs, advances); | |
} | |
applyLookups(lookups, glyphs, positions) { | |
this.glyphs = glyphs; | |
this.positions = positions; | |
this.glyphIterator = new $9b0d9f7995eda7b8$export$2e2bcd8739ae039(glyphs); | |
for (let { feature: feature , lookup: lookup } of lookups){ | |
this.currentFeature = feature; | |
this.glyphIterator.reset(lookup.flags); | |
while(this.glyphIterator.index < glyphs.length){ | |
if (!(feature in this.glyphIterator.cur.features)) { | |
this.glyphIterator.next(); | |
continue; | |
} | |
for (let table of lookup.subTables){ | |
let res = this.applyLookup(lookup.lookupType, table); | |
if (res) break; | |
} | |
this.glyphIterator.next(); | |
} | |
} | |
} | |
applyLookup(lookup, table) { | |
throw new Error("applyLookup must be implemented by subclasses"); | |
} | |
applyLookupList(lookupRecords) { | |
let options = this.glyphIterator.options; | |
let glyphIndex = this.glyphIterator.index; | |
for (let lookupRecord of lookupRecords){ | |
// Reset flags and find glyph index for this lookup record | |
this.glyphIterator.reset(options, glyphIndex); | |
this.glyphIterator.increment(lookupRecord.sequenceIndex); | |
// Get the lookup and setup flags for subtables | |
let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex); | |
this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); | |
// Apply lookup subtables until one matches | |
for (let table of lookup.subTables){ | |
if (this.applyLookup(lookup.lookupType, table)) break; | |
} | |
} | |
this.glyphIterator.reset(options, glyphIndex); | |
return true; | |
} | |
coverageIndex(coverage, glyph) { | |
if (glyph == null) glyph = this.glyphIterator.cur.id; | |
switch(coverage.version){ | |
case 1: | |
return coverage.glyphs.indexOf(glyph); | |
case 2: | |
for (let range of coverage.rangeRecords){ | |
if (range.start <= glyph && glyph <= range.end) return range.startCoverageIndex + glyph - range.start; | |
} | |
break; | |
} | |
return -1; | |
} | |
match(sequenceIndex, sequence, fn, matched) { | |
let pos = this.glyphIterator.index; | |
let glyph = this.glyphIterator.increment(sequenceIndex); | |
let idx = 0; | |
while(idx < sequence.length && glyph && fn(sequence[idx], glyph)){ | |
if (matched) matched.push(this.glyphIterator.index); | |
idx++; | |
glyph = this.glyphIterator.next(); | |
} | |
this.glyphIterator.index = pos; | |
if (idx < sequence.length) return false; | |
return matched || true; | |
} | |
sequenceMatches(sequenceIndex, sequence) { | |
return this.match(sequenceIndex, sequence, (component, glyph)=>component === glyph.id | |
); | |
} | |
sequenceMatchIndices(sequenceIndex, sequence) { | |
return this.match(sequenceIndex, sequence, (component, glyph)=>{ | |
// If the current feature doesn't apply to this glyph, | |
if (!(this.currentFeature in glyph.features)) return false; | |
return component === glyph.id; | |
}, []); | |
} | |
coverageSequenceMatches(sequenceIndex, sequence) { | |
return this.match(sequenceIndex, sequence, (coverage, glyph)=>this.coverageIndex(coverage, glyph.id) >= 0 | |
); | |
} | |
getClassID(glyph, classDef) { | |
switch(classDef.version){ | |
case 1: | |
let i = glyph - classDef.startGlyph; | |
if (i >= 0 && i < classDef.classValueArray.length) return classDef.classValueArray[i]; | |
break; | |
case 2: | |
for (let range of classDef.classRangeRecord){ | |
if (range.start <= glyph && glyph <= range.end) return range.class; | |
} | |
break; | |
} | |
return 0; | |
} | |
classSequenceMatches(sequenceIndex, sequence, classDef) { | |
return this.match(sequenceIndex, sequence, (classID, glyph)=>classID === this.getClassID(glyph.id, classDef) | |
); | |
} | |
applyContext(table) { | |
let index, set; | |
switch(table.version){ | |
case 1: | |
index = this.coverageIndex(table.coverage); | |
if (index === -1) return false; | |
set = table.ruleSets[index]; | |
for (let rule of set){ | |
if (this.sequenceMatches(1, rule.input)) return this.applyLookupList(rule.lookupRecords); | |
} | |
break; | |
case 2: | |
if (this.coverageIndex(table.coverage) === -1) return false; | |
index = this.getClassID(this.glyphIterator.cur.id, table.classDef); | |
if (index === -1) return false; | |
set = table.classSet[index]; | |
for (let rule1 of set){ | |
if (this.classSequenceMatches(1, rule1.classes, table.classDef)) return this.applyLookupList(rule1.lookupRecords); | |
} | |
break; | |
case 3: | |
if (this.coverageSequenceMatches(0, table.coverages)) return this.applyLookupList(table.lookupRecords); | |
break; | |
} | |
return false; | |
} | |
applyChainingContext(table) { | |
let index; | |
switch(table.version){ | |
case 1: | |
index = this.coverageIndex(table.coverage); | |
if (index === -1) return false; | |
let set = table.chainRuleSets[index]; | |
for (let rule of set){ | |
if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) return this.applyLookupList(rule.lookupRecords); | |
} | |
break; | |
case 2: | |
if (this.coverageIndex(table.coverage) === -1) return false; | |
index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef); | |
let rules = table.chainClassSet[index]; | |
if (!rules) return false; | |
for (let rule2 of rules){ | |
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)) return this.applyLookupList(rule2.lookupRecords); | |
} | |
break; | |
case 3: | |
if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) return this.applyLookupList(table.lookupRecords); | |
break; | |
} | |
return false; | |
} | |
constructor(font, table){ | |
this.font = font; | |
this.table = table; | |
this.script = null; | |
this.scriptTag = null; | |
this.language = null; | |
this.languageTag = null; | |
this.features = {}; | |
this.lookups = {}; | |
// Setup variation substitutions | |
this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1; | |
// initialize to default script + language | |
this.selectScript(); | |
// current context (set by applyFeatures) | |
this.glyphs = []; | |
this.positions = []; // only used by GPOS | |
this.ligatureID = 1; | |
this.currentFeature = null; | |
} | |
} | |
class $535fa31b81f74b90$export$2e2bcd8739ae039 { | |
get id() { | |
return this._id; | |
} | |
set id(id) { | |
this._id = id; | |
this.substituted = true; | |
let GDEF = this._font.GDEF; | |
if (GDEF && GDEF.glyphClassDef) { | |
// TODO: clean this up | |
let classID = $cca6af4639973976$export$2e2bcd8739ae039.prototype.getClassID(id, GDEF.glyphClassDef); | |
this.isBase = classID === 1; | |
this.isLigature = classID === 2; | |
this.isMark = classID === 3; | |
this.markAttachmentType = GDEF.markAttachClassDef ? $cca6af4639973976$export$2e2bcd8739ae039.prototype.getClassID(id, GDEF.markAttachClassDef) : 0; | |
} else { | |
this.isMark = this.codePoints.length > 0 && this.codePoints.every(($parcel$interopDefault($lzfo4$unicodeproperties)).isMark); | |
this.isBase = !this.isMark; | |
this.isLigature = this.codePoints.length > 1; | |
this.markAttachmentType = 0; | |
} | |
} | |
copy() { | |
return new $535fa31b81f74b90$export$2e2bcd8739ae039(this._font, this.id, this.codePoints, this.features); | |
} | |
constructor(font, id, codePoints = [], features){ | |
this._font = font; | |
this.codePoints = codePoints; | |
this.id = id; | |
this.features = {}; | |
if (Array.isArray(features)) for(let i = 0; i < features.length; i++){ | |
let feature = features[i]; | |
this.features[feature] = true; | |
} | |
else if (typeof features === 'object') Object.assign(this.features, features); | |
this.ligatureID = null; | |
this.ligatureComponent = null; | |
this.isLigated = false; | |
this.cursiveAttachment = null; | |
this.markAttachment = null; | |
this.shaperInfo = null; | |
this.substituted = false; | |
this.isMultiplied = false; | |
} | |
} | |
class $643b4d234d3e305f$export$2e2bcd8739ae039 extends $4f61fb8204be1a7c$export$2e2bcd8739ae039 { | |
static planFeatures(plan) { | |
plan.add([ | |
'ljmo', | |
'vjmo', | |
'tjmo' | |
], false); | |
} | |
static assignFeatures(plan, glyphs) { | |
let state = 0; | |
let i = 0; | |
while(i < glyphs.length){ | |
let action; | |
let glyph = glyphs[i]; | |
let code = glyph.codePoints[0]; | |
let type = $643b4d234d3e305f$var$getType(code); | |
[action, state] = $643b4d234d3e305f$var$STATE_TABLE[state][type]; | |
switch(action){ | |
case $643b4d234d3e305f$var$DECOMPOSE: | |
// Decompose the composed syllable if it is not supported by the font. | |
if (!plan.font.hasGlyphForCodePoint(code)) i = $643b4d234d3e305f$var$decompose(glyphs, i, plan.font); | |
break; | |
case $643b4d234d3e305f$var$COMPOSE: | |
// Found a decomposed syllable. Try to compose if supported by the font. | |
i = $643b4d234d3e305f$var$compose(glyphs, i, plan.font); | |
break; | |
case $643b4d234d3e305f$var$TONE_MARK: | |
// Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable. | |
$643b4d234d3e305f$var$reorderToneMark(glyphs, i, plan.font); | |
break; | |
case $643b4d234d3e305f$var$INVALID: | |
// Tone mark has no valid syllable to attach to, so insert a dotted circle | |
i = $643b4d234d3e305f$var$insertDottedCircle(glyphs, i, plan.font); | |
break; | |
} | |
i++; | |
} | |
} | |
} | |
$lzfo4$swchelpers.defineProperty($643b4d234d3e305f$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE'); | |
const $643b4d234d3e305f$var$HANGUL_BASE = 0xac00; | |
const $643b4d234d3e305f$var$HANGUL_END = 0xd7a4; | |
const $643b4d234d3e305f$var$HANGUL_COUNT = $643b4d234d3e305f$var$HANGUL_END - $643b4d234d3e305f$var$HANGUL_BASE + 1; | |
const $643b4d234d3e305f$var$L_BASE = 0x1100; // lead | |
const $643b4d234d3e305f$var$V_BASE = 0x1161; // vowel | |
const $643b4d234d3e305f$var$T_BASE = 0x11a7; // trail | |
const $643b4d234d3e305f$var$L_COUNT = 19; | |
const $643b4d234d3e305f$var$V_COUNT = 21; | |
const $643b4d234d3e305f$var$T_COUNT = 28; | |
const $643b4d234d3e305f$var$L_END = $643b4d234d3e305f$var$L_BASE + $643b4d234d3e305f$var$L_COUNT - 1; | |
const $643b4d234d3e305f$var$V_END = $643b4d234d3e305f$var$V_BASE + $643b4d234d3e305f$var$V_COUNT - 1; | |
const $643b4d234d3e305f$var$T_END = $643b4d234d3e305f$var$T_BASE + $643b4d234d3e305f$var$T_COUNT - 1; | |
const $643b4d234d3e305f$var$DOTTED_CIRCLE = 0x25cc; | |
const $643b4d234d3e305f$var$isL = (code)=>0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c | |
; | |
const $643b4d234d3e305f$var$isV = (code)=>0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6 | |
; | |
const $643b4d234d3e305f$var$isT = (code)=>0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb | |
; | |
const $643b4d234d3e305f$var$isTone = (code)=>0x302e <= code && code <= 0x302f | |
; | |
const $643b4d234d3e305f$var$isLVT = (code)=>$643b4d234d3e305f$var$HANGUL_BASE <= code && code <= $643b4d234d3e305f$var$HANGUL_END | |
; | |
const $643b4d234d3e305f$var$isLV = (code)=>code - $643b4d234d3e305f$var$HANGUL_BASE < $643b4d234d3e305f$var$HANGUL_COUNT && (code - $643b4d234d3e305f$var$HANGUL_BASE) % $643b4d234d3e305f$var$T_COUNT === 0 | |
; | |
const $643b4d234d3e305f$var$isCombiningL = (code)=>$643b4d234d3e305f$var$L_BASE <= code && code <= $643b4d234d3e305f$var$L_END | |
; | |
const $643b4d234d3e305f$var$isCombiningV = (code)=>$643b4d234d3e305f$var$V_BASE <= code && code <= $643b4d234d3e305f$var$V_END | |
; | |
const $643b4d234d3e305f$var$isCombiningT = (code)=>$643b4d234d3e305f$var$T_BASE + 1 && 1 <= code && code <= $643b4d234d3e305f$var$T_END | |
; | |
// Character categories | |
const $643b4d234d3e305f$var$X = 0; // Other character | |
const $643b4d234d3e305f$var$L = 1; // Leading consonant | |
const $643b4d234d3e305f$var$V = 2; // Medial vowel | |
const $643b4d234d3e305f$var$T = 3; // Trailing consonant | |
const $643b4d234d3e305f$var$LV = 4; // Composed <LV> syllable | |
const $643b4d234d3e305f$var$LVT = 5; // Composed <LVT> syllable | |
const $643b4d234d3e305f$var$M = 6; // Tone mark | |
// This function classifies a character using the above categories. | |
function $643b4d234d3e305f$var$getType(code) { | |
if ($643b4d234d3e305f$var$isL(code)) return $643b4d234d3e305f$var$L; | |
if ($643b4d234d3e305f$var$isV(code)) return $643b4d234d3e305f$var$V; | |
if ($643b4d234d3e305f$var$isT(code)) return $643b4d234d3e305f$var$T; | |
if ($643b4d234d3e305f$var$isLV(code)) return $643b4d234d3e305f$var$LV; | |
if ($643b4d234d3e305f$var$isLVT(code)) return $643b4d234d3e305f$var$LVT; | |
if ($643b4d234d3e305f$var$isTone(code)) return $643b4d234d3e305f$var$M; | |
return $643b4d234d3e305f$var$X; | |
} | |
// State machine actions | |
const $643b4d234d3e305f$var$NO_ACTION = 0; | |
const $643b4d234d3e305f$var$DECOMPOSE = 1; | |
const $643b4d234d3e305f$var$COMPOSE = 2; | |
const $643b4d234d3e305f$var$TONE_MARK = 4; | |
const $643b4d234d3e305f$var$INVALID = 5; | |
// Build a state machine that accepts valid syllables, and applies actions along the way. | |
// The logic this is implementing is documented at the top of the file. | |
const $643b4d234d3e305f$var$STATE_TABLE = [ | |
// X L V T LV LVT M | |
// State 0: start state | |
[ | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
0 | |
], | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
1 | |
], | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
0 | |
], | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
0 | |
], | |
[ | |
$643b4d234d3e305f$var$DECOMPOSE, | |
2 | |
], | |
[ | |
$643b4d234d3e305f$var$DECOMPOSE, | |
3 | |
], | |
[ | |
$643b4d234d3e305f$var$INVALID, | |
0 | |
] | |
], | |
// State 1: <L> | |
[ | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
0 | |
], | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
1 | |
], | |
[ | |
$643b4d234d3e305f$var$COMPOSE, | |
2 | |
], | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
0 | |
], | |
[ | |
$643b4d234d3e305f$var$DECOMPOSE, | |
2 | |
], | |
[ | |
$643b4d234d3e305f$var$DECOMPOSE, | |
3 | |
], | |
[ | |
$643b4d234d3e305f$var$INVALID, | |
0 | |
] | |
], | |
// State 2: <L,V> or <LV> | |
[ | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
0 | |
], | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
1 | |
], | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
0 | |
], | |
[ | |
$643b4d234d3e305f$var$COMPOSE, | |
3 | |
], | |
[ | |
$643b4d234d3e305f$var$DECOMPOSE, | |
2 | |
], | |
[ | |
$643b4d234d3e305f$var$DECOMPOSE, | |
3 | |
], | |
[ | |
$643b4d234d3e305f$var$TONE_MARK, | |
0 | |
] | |
], | |
// State 3: <L,V,T> or <LVT> | |
[ | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
0 | |
], | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
1 | |
], | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
0 | |
], | |
[ | |
$643b4d234d3e305f$var$NO_ACTION, | |
0 | |
], | |
[ | |
$643b4d234d3e305f$var$DECOMPOSE, | |
2 | |
], | |
[ | |
$643b4d234d3e305f$var$DECOMPOSE, | |
3 | |
], | |
[ | |
$643b4d234d3e305f$var$TONE_MARK, | |
0 | |
] | |
] | |
]; | |
function $643b4d234d3e305f$var$getGlyph(font, code, features) { | |
return new $535fa31b81f74b90$export$2e2bcd8739ae039(font, font.glyphForCodePoint(code).id, [ | |
code | |
], features); | |
} | |
function $643b4d234d3e305f$var$decompose(glyphs, i, font) { | |
let glyph = glyphs[i]; | |
let code = glyph.codePoints[0]; | |
let s = code - $643b4d234d3e305f$var$HANGUL_BASE; | |
let t = $643b4d234d3e305f$var$T_BASE + s % $643b4d234d3e305f$var$T_COUNT; | |
s = s / $643b4d234d3e305f$var$T_COUNT | 0; | |
let l = $643b4d234d3e305f$var$L_BASE + s / $643b4d234d3e305f$var$V_COUNT | 0; | |
let v = $643b4d234d3e305f$var$V_BASE + s % $643b4d234d3e305f$var$V_COUNT; | |
// Don't decompose if all of the components are not available | |
if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== $643b4d234d3e305f$var$T_BASE && !font.hasGlyphForCodePoint(t)) return i; | |
// Replace the current glyph with decomposed L, V, and T glyphs, | |
// and apply the proper OpenType features to each component. | |
let ljmo = $643b4d234d3e305f$var$getGlyph(font, l, glyph.features); | |
ljmo.features.ljmo = true; | |
let vjmo = $643b4d234d3e305f$var$getGlyph(font, v, glyph.features); | |
vjmo.features.vjmo = true; | |
let insert = [ | |
ljmo, | |
vjmo | |
]; | |
if (t > $643b4d234d3e305f$var$T_BASE) { | |
let tjmo = $643b4d234d3e305f$var$getGlyph(font, t, glyph.features); | |
tjmo.features.tjmo = true; | |
insert.push(tjmo); | |
} | |
glyphs.splice(i, 1, ...insert); | |
return i + insert.length - 1; | |
} | |
function $643b4d234d3e305f$var$compose(glyphs, i, font) { | |
let glyph = glyphs[i]; | |
let code = glyphs[i].codePoints[0]; | |
let type = $643b4d234d3e305f$var$getType(code); | |
let prev = glyphs[i - 1].codePoints[0]; | |
let prevType = $643b4d234d3e305f$var$getType(prev); | |
// Figure out what type of syllable we're dealing with | |
let lv, ljmo, vjmo, tjmo; | |
if (prevType === $643b4d234d3e305f$var$LV && type === $643b4d234d3e305f$var$T) { | |
// <LV,T> | |
lv = prev; | |
tjmo = glyph; | |
} else { | |
if (type === $643b4d234d3e305f$var$V) { | |
// <L,V> | |
ljmo = glyphs[i - 1]; | |
vjmo = glyph; | |
} else { | |
// <L,V,T> | |
ljmo = glyphs[i - 2]; | |
vjmo = glyphs[i - 1]; | |
tjmo = glyph; | |
} | |
let l = ljmo.codePoints[0]; | |
let v = vjmo.codePoints[0]; | |
// Make sure L and V are combining characters | |
if ($643b4d234d3e305f$var$isCombiningL(l) && $643b4d234d3e305f$var$isCombiningV(v)) lv = $643b4d234d3e305f$var$HANGUL_BASE + ((l - $643b4d234d3e305f$var$L_BASE) * $643b4d234d3e305f$var$V_COUNT + (v - $643b4d234d3e305f$var$V_BASE)) * $643b4d234d3e305f$var$T_COUNT; | |
} | |
let t = tjmo && tjmo.codePoints[0] || $643b4d234d3e305f$var$T_BASE; | |
if (lv != null && (t === $643b4d234d3e305f$var$T_BASE || $643b4d234d3e305f$var$isCombiningT(t))) { | |
let s = lv + (t - $643b4d234d3e305f$var$T_BASE); | |
// Replace with a composed glyph if supported by the font, | |
// otherwise apply the proper OpenType features to each component. | |
if (font.hasGlyphForCodePoint(s)) { | |
let del = prevType === $643b4d234d3e305f$var$V ? 3 : 2; | |
glyphs.splice(i - del + 1, del, $643b4d234d3e305f$var$getGlyph(font, s, glyph.features)); | |
return i - del + 1; | |
} | |
} | |
// Didn't compose (either a non-combining component or unsupported by font). | |
if (ljmo) ljmo.features.ljmo = true; | |
if (vjmo) vjmo.features.vjmo = true; | |
if (tjmo) tjmo.features.tjmo = true; | |
if (prevType === $643b4d234d3e305f$var$LV) { | |
// Sequence was originally <L,V>, which got combined earlier. | |
// Either the T was non-combining, or the LVT glyph wasn't supported. | |
// Decompose the glyph again and apply OT features. | |
$643b4d234d3e305f$var$decompose(glyphs, i - 1, font); | |
return i + 1; | |
} | |
return i; | |
} | |
function $643b4d234d3e305f$var$getLength(code) { | |
switch($643b4d234d3e305f$var$getType(code)){ | |
case $643b4d234d3e305f$var$LV: | |
case $643b4d234d3e305f$var$LVT: | |
return 1; | |
case $643b4d234d3e305f$var$V: | |
return 2; | |
case $643b4d234d3e305f$var$T: | |
return 3; | |
} | |
} | |
function $643b4d234d3e305f$var$reorderToneMark(glyphs, i, font) { | |
let glyph = glyphs[i]; | |
let code = glyphs[i].codePoints[0]; | |
// Move tone mark to the beginning of the previous syllable, unless it is zero width | |
if (font.glyphForCodePoint(code).advanceWidth === 0) return; | |
let prev = glyphs[i - 1].codePoints[0]; | |
let len = $643b4d234d3e305f$var$getLength(prev); | |
glyphs.splice(i, 1); | |
return glyphs.splice(i - len, 0, glyph); | |
} | |
function $643b4d234d3e305f$var$insertDottedCircle(glyphs, i, font) { | |
let glyph = glyphs[i]; | |
let code = glyphs[i].codePoints[0]; | |
if (font.hasGlyphForCodePoint($643b4d234d3e305f$var$DOTTED_CIRCLE)) { | |
let dottedCircle = $643b4d234d3e305f$var$getGlyph(font, $643b4d234d3e305f$var$DOTTED_CIRCLE, glyph.features); | |
// If the tone mark is zero width, insert the dotted circle before, otherwise after | |
let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1; | |
glyphs.splice(idx, 0, dottedCircle); | |
i++; | |
} | |
return i; | |
} | |
var $e319ffc9285ff10a$exports = {}; | |
$e319ffc9285ff10a$exports = JSON.parse("{\"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,133,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,133,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,0,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,396,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,396,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,112,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]],\"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],\"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_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\"],[],[\"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\"]]}"); | |
var $440f7c22deab646c$exports = {}; | |
$440f7c22deab646c$exports = JSON.parse("{\"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\"],\"decompositions\":{\"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]},\"stateTable\":[[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]],\"accepting\":[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],\"tags\":[[],[\"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\"]]}"); | |
const $76a40fa3f66cc629$export$a513ea61a7bee91c = { | |
X: 1, | |
C: 2, | |
V: 4, | |
N: 8, | |
H: 16, | |
ZWNJ: 32, | |
ZWJ: 64, | |
M: 128, | |
SM: 256, | |
VD: 512, | |
A: 1024, | |
Placeholder: 2048, | |
Dotted_Circle: 4096, | |
RS: 8192, | |
Coeng: 16384, | |
Repha: 32768, | |
Ra: 65536, | |
CM: 131072, | |
Symbol: 262144 // Avagraha, etc that take marks (SM,A,VD). | |
}; | |
const $76a40fa3f66cc629$export$1a1f61c9c4dd9df0 = { | |
Start: 1, | |
Ra_To_Become_Reph: 2, | |
Pre_M: 4, | |
Pre_C: 8, | |
Base_C: 16, | |
After_Main: 32, | |
Above_C: 64, | |
Before_Sub: 128, | |
Below_C: 256, | |
After_Sub: 512, | |
Before_Post: 1024, | |
Post_C: 2048, | |
After_Post: 4096, | |
Final_C: 8192, | |
SMVD: 16384, | |
End: 32768 | |
}; | |
const $76a40fa3f66cc629$export$8519deaa7de2b07 = $76a40fa3f66cc629$export$a513ea61a7bee91c.C | $76a40fa3f66cc629$export$a513ea61a7bee91c.Ra | $76a40fa3f66cc629$export$a513ea61a7bee91c.CM | $76a40fa3f66cc629$export$a513ea61a7bee91c.V | $76a40fa3f66cc629$export$a513ea61a7bee91c.Placeholder | $76a40fa3f66cc629$export$a513ea61a7bee91c.Dotted_Circle; | |
const $76a40fa3f66cc629$export$bbcd928767338e0d = $76a40fa3f66cc629$export$a513ea61a7bee91c.ZWJ | $76a40fa3f66cc629$export$a513ea61a7bee91c.ZWNJ; | |
const $76a40fa3f66cc629$export$ca9599b2a300afc = $76a40fa3f66cc629$export$a513ea61a7bee91c.H | $76a40fa3f66cc629$export$a513ea61a7bee91c.Coeng; | |
const $76a40fa3f66cc629$export$e99d119da76a0fc5 = { | |
Default: { | |
hasOldSpec: false, | |
virama: 0, | |
basePos: 'Last', | |
rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Before_Post, | |
rephMode: 'Implicit', | |
blwfMode: 'Pre_And_Post' | |
}, | |
Devanagari: { | |
hasOldSpec: true, | |
virama: 0x094D, | |
basePos: 'Last', | |
rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Before_Post, | |
rephMode: 'Implicit', | |
blwfMode: 'Pre_And_Post' | |
}, | |
Bengali: { | |
hasOldSpec: true, | |
virama: 0x09CD, | |
basePos: 'Last', | |
rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Sub, | |
rephMode: 'Implicit', | |
blwfMode: 'Pre_And_Post' | |
}, | |
Gurmukhi: { | |
hasOldSpec: true, | |
virama: 0x0A4D, | |
basePos: 'Last', | |
rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Before_Sub, | |
rephMode: 'Implicit', | |
blwfMode: 'Pre_And_Post' | |
}, | |
Gujarati: { | |
hasOldSpec: true, | |
virama: 0x0ACD, | |
basePos: 'Last', | |
rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Before_Post, | |
rephMode: 'Implicit', | |
blwfMode: 'Pre_And_Post' | |
}, | |
Oriya: { | |
hasOldSpec: true, | |
virama: 0x0B4D, | |
basePos: 'Last', | |
rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Main, | |
rephMode: 'Implicit', | |
blwfMode: 'Pre_And_Post' | |
}, | |
Tamil: { | |
hasOldSpec: true, | |
virama: 0x0BCD, | |
basePos: 'Last', | |
rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Post, | |
rephMode: 'Implicit', | |
blwfMode: 'Pre_And_Post' | |
}, | |
Telugu: { | |
hasOldSpec: true, | |
virama: 0x0C4D, | |
basePos: 'Last', | |
rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Post, | |
rephMode: 'Explicit', | |
blwfMode: 'Post_Only' | |
}, | |
Kannada: { | |
hasOldSpec: true, | |
virama: 0x0CCD, | |
basePos: 'Last', | |
rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Post, | |
rephMode: 'Implicit', | |
blwfMode: 'Post_Only' | |
}, | |
Malayalam: { | |
hasOldSpec: true, | |
virama: 0x0D4D, | |
basePos: 'Last', | |
rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Main, | |
rephMode: 'Log_Repha', | |
blwfMode: 'Pre_And_Post' | |
}, | |
// Handled by UniversalShaper | |
// Sinhala: { | |
// hasOldSpec: false, | |
// virama: 0x0DCA, | |
// basePos: 'Last_Sinhala', | |
// rephPos: POSITIONS.After_Main, | |
// rephMode: 'Explicit', | |
// blwfMode: 'Pre_And_Post' | |
// }, | |
Khmer: { | |
hasOldSpec: false, | |
virama: 0x17D2, | |
basePos: 'First', | |
rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Ra_To_Become_Reph, | |
rephMode: 'Vis_Repha', | |
blwfMode: 'Pre_And_Post' | |
} | |
}; | |
const $76a40fa3f66cc629$export$f647c9cfdd77d95a = { | |
// Khmer | |
0x17BE: [ | |
0x17C1, | |
0x17BE | |
], | |
0x17BF: [ | |
0x17C1, | |
0x17BF | |
], | |
0x17C0: [ | |
0x17C1, | |
0x17C0 | |
], | |
0x17C4: [ | |
0x17C1, | |
0x17C4 | |
], | |
0x17C5: [ | |
0x17C1, | |
0x17C5 | |
] | |
}; | |
var $88aa30158a161372$require$Buffer = $lzfo4$buffer.Buffer; | |
const { decompositions: $88aa30158a161372$var$decompositions } = (/*@__PURE__*/$parcel$interopDefault($440f7c22deab646c$exports)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment