@ema/js-base-library
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.
304 lines • 27.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { i18n } from '../i18n/index';
import { Util } from '../utils/util';
var Translate = /** @class */ (function () {
function Translate() {
var _this = this;
this.i18n = i18n;
this.defaultLanguage = 'en-US';
this.supportedLanguages = [
'en-US',
'nl-NL'
];
this.translations = {};
this.translationsLocation = 'assets/translations';
this.options = {
debug: false,
//[Boolean]: Logs missing translations to console and adds @@-markers around output.
namespaceSplitter: '::' //[String|RegExp]: You can customize the part which splits namespace and translationKeys.
};
this.initTranslateJs();
this.libTranslate = Util.getGlobal()['libTranslate']; // fixme: does not work in node.js
Object.keys(i18n).forEach((/**
* @param {?} k
* @return {?}
*/
function (k) {
_this.supportedLanguages.push(k);
}));
this.translations = Util.copy(i18n);
this.translations['nl-NL'] = Util.copy(this.translations['nl']);
this.translations['en-US'] = Util.copy(this.translations['en']);
this.translations['en-BE'] = Util.copy(this.translations['en']);
this.use(this.defaultLanguage);
}
/**
* Translates a string to the current language of the TranslateService.
* @param translationKey - The string to translate.
* @param params - The parameters to send to the translate function.
*/
/**
* Translates a string to the current language of the TranslateService.
* @param {?} translationKey - The string to translate.
* @param {...?} params - The parameters to send to the translate function.
* @return {?}
*/
Translate.prototype.get = /**
* Translates a string to the current language of the TranslateService.
* @param {?} translationKey - The string to translate.
* @param {...?} params - The parameters to send to the translate function.
* @return {?}
*/
function (translationKey) {
var params = [];
for (var _i = 1; _i < arguments.length; _i++) {
params[_i - 1] = arguments[_i];
}
return this.t.apply(this, tslib_1.__spread([translationKey], params));
};
/**
* Adds a translated string to the current language object.
* @param translationKey - The identifier of the translation.
* @param value - The value of the translation in the current selected language.
*/
/**
* Adds a translated string to the current language object.
* @param {?} translationKey - The identifier of the translation.
* @param {?} value - The value of the translation in the current selected language.
* @return {?}
*/
Translate.prototype.set = /**
* Adds a translated string to the current language object.
* @param {?} translationKey - The identifier of the translation.
* @param {?} value - The value of the translation in the current selected language.
* @return {?}
*/
function (translationKey, value) {
this.translations[this.language][translationKey] = value;
};
/**
* @param {?} translationsObject
* @return {?}
*/
Translate.prototype.add = /**
* @param {?} translationsObject
* @return {?}
*/
function (translationsObject) {
var _this = this;
Object.keys(translationsObject).forEach((/**
* @param {?} k
* @return {?}
*/
function (k) {
_this.set(k, translationsObject[k]);
}));
};
/**
* Switch the current language of the translateService.
* If the supplied language parameter is not yet present in the translations object,
* the service will try to load a json file in the location specified in translationsLocation property.
* example: use('fr'), will load 'assets/translations/fr.json' by default
* @param language - The language identifier.
* @param reloadRemote - Set this to true to reload the json translation file.
*/
/**
* Switch the current language of the translateService.
* If the supplied language parameter is not yet present in the translations object,
* the service will try to load a json file in the location specified in translationsLocation property.
* example: use('fr'), will load 'assets/translations/fr.json' by default
* @param {?} language - The language identifier.
* @param {?=} reloadRemote - Set this to true to reload the json translation file.
* @return {?}
*/
Translate.prototype.use = /**
* Switch the current language of the translateService.
* If the supplied language parameter is not yet present in the translations object,
* the service will try to load a json file in the location specified in translationsLocation property.
* example: use('fr'), will load 'assets/translations/fr.json' by default
* @param {?} language - The language identifier.
* @param {?=} reloadRemote - Set this to true to reload the json translation file.
* @return {?}
*/
function (language, reloadRemote) {
if (reloadRemote === void 0) { reloadRemote = false; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
this.language = language;
if (!(!this.translations[language] || reloadRemote)) return [3 /*break*/, 2];
return [4 /*yield*/, this.loadTranslation(language)];
case 1:
_a.sent();
_a.label = 2;
case 2:
this.t = this.libTranslate.getTranslationFunction(this.translations[language], [this.options]);
return [2 /*return*/];
}
});
});
};
/**
* @param {?} language
* @return {?}
*/
Translate.prototype.loadTranslation = /**
* @param {?} language
* @return {?}
*/
function (language) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var loadedTranslation;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.translations[language])
this.translations[language] = {};
return [4 /*yield*/, Util.fetchJson(this.translationsLocation + '/' + language + '.json')];
case 1:
loadedTranslation = _a.sent();
Object.keys(loadedTranslation).forEach((/**
* @param {?} k
* @return {?}
*/
function (k) {
_this.translations[language][k] = loadedTranslation[k];
}));
return [2 /*return*/];
}
});
});
};
/**
* @return {?}
*/
Translate.prototype.updateTranslateComponents = /**
* @return {?}
*/
function () {
/** @type {?} */
var components = Array.from(document.getElementsByTagName('ema-translate'));
components.forEach((/**
* @param {?} el
* @return {?}
*/
function (el) {
el['update']();
}));
};
/**
* @return {?}
*/
Translate.prototype.initTranslateJs = /**
* @return {?}
*/
function () {
/*! translate.js - v1.1.0 - 2015-06-16
* https://github.com/musterknabe/translate.js
* Copyright (c) 2015 Jonas Girnatis
* Licensed under MIT license
*/
// @ts-ignore
!(/**
* @return {?}
*/
function () {
"use strict";
/** @type {?} */
var a = (/**
* @param {?} a
* @return {?}
*/
function (a) { return !isNaN(parseFloat(a)) && isFinite(a); });
/** @type {?} */
var b = (/**
* @param {?} a
* @return {?}
*/
function (a) { return "object" == typeof a && null !== a; });
/** @type {?} */
var c = (/**
* @param {?} a
* @return {?}
*/
function (a) { return "[object String]" === Object.prototype.toString.call(a); });
Util.getGlobal()['libTranslate'] = { getTranslationFunction: (/**
* @param {?} d
* @param {?} e
* @return {?}
*/
function (d, e) { /**
* @param {?} a
* @return {?}
*/
function f(a) { if (d[a])
return d[a]; /** @type {?} */
var b = a.split(j); /** @type {?} */
var c = b[0]; /** @type {?} */
var e = b[1]; return d[c] && d[c][e] ? d[c][e] : null; } /**
* @param {?} a
* @param {?} c
* @return {?}
*/
function g(a, c) { if (b(a)) {
/** @type {?} */
var d;
/** @type {?} */
var e = Object.keys(a);
if (0 === e.length)
return i && console.log("[Translation] No plural forms found."), null;
for (var f = 0; f < e.length; f++)
0 === e[f].indexOf("gt") && (d = parseInt(e[f].replace("gt", ""), 10));
a[c] ? a = a[c] : c > d ? a = a["gt" + d] : a.n ? a = a.n : (i && console.log('[Translation] No plural forms found for count:"' + c + '" in', a), a = a[Object.keys(a).reverse()[0]]);
} return a; } /**
* @param {?} a
* @param {?} b
* @return {?}
*/
function h(a, b) { return c(a) ? a.replace(/\{(\w*)\}/g, (/**
* @param {?} a
* @param {?} c
* @return {?}
*/
function (a, c) { return b.hasOwnProperty(c) ? b.hasOwnProperty(c) ? b[c] : c : (i && console.log('Could not find replacement "' + c + '" in provided replacements object:', b), "{" + c + "}"); })) : a; } e = b(e) ? e : {}; /** @type {?} */
var i = e.debug; /** @type {?} */
var j = e.namespaceSplitter || "::"; return (/**
* @param {?} c
* @return {?}
*/
function (c) { /** @type {?} */
var d = b(arguments[1]) ? arguments[1] : b(arguments[2]) ? arguments[2] : {}; /** @type {?} */
var e = a(arguments[1]) ? arguments[1] : a(arguments[2]) ? arguments[2] : null; /** @type {?} */
var j = f(c); return null !== e && (d.n = d.n ? d.n : e, j = g(j, e)), j = h(j, d), null === j && (j = i ? "@@" + c + "@@" : c, i && console.log('Translation for "' + c + '" not found.')), j; }); }) };
})();
};
return Translate;
}());
export { Translate };
if (false) {
/** @type {?} */
Translate.prototype.t;
/** @type {?} */
Translate.prototype.i18n;
/** @type {?} */
Translate.prototype.libTranslate;
/** @type {?} */
Translate.prototype.defaultLanguage;
/** @type {?} */
Translate.prototype.supportedLanguages;
/** @type {?} */
Translate.prototype.translations;
/** @type {?} */
Translate.prototype.language;
/** @type {?} */
Translate.prototype.translationsLocation;
/** @type {?} */
Translate.prototype.options;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGVtYS9qcy1iYXNlLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvdHJhbnNsYXRlL3RyYW5zbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyQztJQWtCSTtRQUFBLGlCQVlDO1FBM0JELFNBQUksR0FBRyxJQUFJLENBQUM7UUFFWixvQkFBZSxHQUFHLE9BQU8sQ0FBQztRQUMxQix1QkFBa0IsR0FBRztZQUNqQixPQUFPO1lBQ1AsT0FBTztTQUNWLENBQUM7UUFDRixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUVYLHlCQUFvQixHQUFHLHFCQUFxQixDQUFDO1FBQzdDLFlBQU8sR0FBRztZQUNiLEtBQUssRUFBRSxLQUFLOztZQUNaLGlCQUFpQixFQUFFLElBQUksQ0FBQyx5RkFBeUY7U0FDcEgsQ0FBQztRQUdFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztRQUV4RixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU87Ozs7UUFBQyxVQUFDLENBQUM7WUFDeEIsS0FBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDLEVBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hF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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUEsQ0FBQSxDQUFDOzs7OztnQkFBQSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDOzt3QkFBSyxDQUFDOzt3QkFBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQUMsSUFBRyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE1BQU07d0JBQUMsT0FBTyxDQUFDLElBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFDLElBQUksQ0FBQztvQkFBQSxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUU7d0JBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLEdBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaURBQWlELEdBQUMsQ0FBQyxHQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FB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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBpMThufSBmcm9tICcuLi9pMThuL2luZGV4JztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi91dGlscy91dGlsJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZSB7XG5cbiAgICB0O1xuICAgIGkxOG4gPSBpMThuO1xuICAgIGxpYlRyYW5zbGF0ZTtcbiAgICBkZWZhdWx0TGFuZ3VhZ2UgPSAnZW4tVVMnO1xuICAgIHN1cHBvcnRlZExhbmd1YWdlcyA9IFtcbiAgICAgICAgJ2VuLVVTJyxcbiAgICAgICAgJ25sLU5MJ1xuICAgIF07XG4gICAgdHJhbnNsYXRpb25zID0ge307XG4gICAgcHVibGljIGxhbmd1YWdlOiBzdHJpbmc7XG4gICAgcHVibGljIHRyYW5zbGF0aW9uc0xvY2F0aW9uID0gJ2Fzc2V0cy90cmFuc2xhdGlvbnMnO1xuICAgIHB1YmxpYyBvcHRpb25zID0ge1xuICAgICAgICBkZWJ1ZzogZmFsc2UsIC8vW0Jvb2xlYW5dOiBMb2dzIG1pc3NpbmcgdHJhbnNsYXRpb25zIHRvIGNvbnNvbGUgYW5kIGFkZHMgQEAtbWFya2VycyBhcm91bmQgb3V0cHV0LlxuICAgICAgICBuYW1lc3BhY2VTcGxpdHRlcjogJzo6JyAvL1tTdHJpbmd8UmVnRXhwXTogWW91IGNhbiBjdXN0b21pemUgdGhlIHBhcnQgd2hpY2ggc3BsaXRzIG5hbWVzcGFjZSBhbmQgdHJhbnNsYXRpb25LZXlzLlxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbml0VHJhbnNsYXRlSnMoKTtcbiAgICAgICAgdGhpcy5saWJUcmFuc2xhdGUgPSBVdGlsLmdldEdsb2JhbCgpWydsaWJUcmFuc2xhdGUnXTsgLy8gZml4bWU6IGRvZXMgbm90IHdvcmsgaW4gbm9kZS5qc1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGkxOG4pLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VwcG9ydGVkTGFuZ3VhZ2VzLnB1c2goayk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRyYW5zbGF0aW9ucyA9IFV0aWwuY29weShpMThuKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbnNbJ25sLU5MJ10gPSBVdGlsLmNvcHkodGhpcy50cmFuc2xhdGlvbnNbJ25sJ10pO1xuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uc1snZW4tVVMnXSA9IFV0aWwuY29weSh0aGlzLnRyYW5zbGF0aW9uc1snZW4nXSk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25zWydlbi1CRSddID0gVXRpbC5jb3B5KHRoaXMudHJhbnNsYXRpb25zWydlbiddKTtcbiAgICAgICAgdGhpcy51c2UodGhpcy5kZWZhdWx0TGFuZ3VhZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zbGF0ZXMgYSBzdHJpbmcgdG8gdGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugb2YgdGhlIFRyYW5zbGF0ZVNlcnZpY2UuXG4gICAgICogQHBhcmFtIHRyYW5zbGF0aW9uS2V5IC0gVGhlIHN0cmluZyB0byB0cmFuc2xhdGUuXG4gICAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIHNlbmQgdG8gdGhlIHRyYW5zbGF0ZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBnZXQodHJhbnNsYXRpb25LZXksIC4uLnBhcmFtczogYW55W10pIDogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudCh0cmFuc2xhdGlvbktleSwgLi4ucGFyYW1zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgdHJhbnNsYXRlZCBzdHJpbmcgdG8gdGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB0cmFuc2xhdGlvbktleSAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSB0cmFuc2xhdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHRyYW5zbGF0aW9uIGluIHRoZSBjdXJyZW50IHNlbGVjdGVkIGxhbmd1YWdlLlxuICAgICAqL1xuICAgIHNldCh0cmFuc2xhdGlvbktleTogc3RyaW5nLCB2YWx1ZSApIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbnNbdGhpcy5sYW5ndWFnZV1bdHJhbnNsYXRpb25LZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgYWRkKHRyYW5zbGF0aW9uc09iamVjdDogYW55KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9uc09iamVjdCkuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICB0aGlzLnNldChrLHRyYW5zbGF0aW9uc09iamVjdFtrXSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3dpdGNoIHRoZSBjdXJyZW50IGxhbmd1YWdlIG9mIHRoZSB0cmFuc2xhdGVTZXJ2aWNlLlxuICAgICAqIElmIHRoZSBzdXBwbGllZCBsYW5ndWFnZSBwYXJhbWV0ZXIgaXMgbm90IHlldCBwcmVzZW50IGluIHRoZSB0cmFuc2xhdGlvbnMgb2JqZWN0LFxuICAgICAqIHRoZSBzZXJ2aWNlIHdpbGwgdHJ5IHRvIGxvYWQgYSBqc29uIGZpbGUgaW4gdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBpbiB0cmFuc2xhdGlvbnNMb2NhdGlvbiBwcm9wZXJ0eS5cbiAgICAgKiBleGFtcGxlOiB1c2UoJ2ZyJyksIHdpbGwgbG9hZCAnYXNzZXRzL3RyYW5zbGF0aW9ucy9mci5qc29uJyBieSBkZWZhdWx0XG4gICAgICogQHBhcmFtIGxhbmd1YWdlIC0gVGhlIGxhbmd1YWdlIGlkZW50aWZpZXIuXG4gICAgICogQHBhcmFtIHJlbG9hZFJlbW90ZSAtIFNldCB0aGlzIHRvIHRydWUgdG8gcmVsb2FkIHRoZSBqc29uIHRyYW5zbGF0aW9uIGZpbGUuXG4gICAgICovXG4gICAgYXN5bmMgdXNlKGxhbmd1YWdlOiBzdHJpbmcsIHJlbG9hZFJlbW90ZSA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgICAgICAgaWYoIXRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSB8fCByZWxvYWRSZW1vdGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFRyYW5zbGF0aW9uKGxhbmd1YWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnQgPSB0aGlzLmxpYlRyYW5zbGF0ZS5nZXRUcmFuc2xhdGlvbkZ1bmN0aW9uKHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSwgW3RoaXMub3B0aW9uc10pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZFRyYW5zbGF0aW9uKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYoIXRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSkgdGhpcy50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdID0ge307XG4gICAgICAgIGxldCBsb2FkZWRUcmFuc2xhdGlvbiA9IGF3YWl0IFV0aWwuZmV0Y2hKc29uKHRoaXMudHJhbnNsYXRpb25zTG9jYXRpb24gKyAnLycgKyBsYW5ndWFnZSArICcuanNvbicpO1xuICAgICAgICBPYmplY3Qua2V5cyhsb2FkZWRUcmFuc2xhdGlvbikuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdW2tdID0gbG9hZGVkVHJhbnNsYXRpb25ba107XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNsYXRlQ29tcG9uZW50cygpIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdlbWEtdHJhbnNsYXRlJykpO1xuICAgICAgICBjb21wb25lbnRzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICBlbFsndXBkYXRlJ10oKTtcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIGluaXRUcmFuc2xhdGVKcygpIHtcbiAgICAgICAgLyohIHRyYW5zbGF0ZS5qcyAtIHYxLjEuMCAtIDIwMTUtMDYtMTZcbiAgICAgICAgICogIGh0dHBzOi8vZ2l0aHViLmNvbS9tdXN0ZXJrbmFiZS90cmFuc2xhdGUuanNcbiAgICAgICAgICogIENvcHlyaWdodCAoYykgMjAxNSBKb25hcyBHaXJuYXRpc1xuICAgICAgICAgKiAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2VcbiAgICAgICAgICovXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgIWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9ZnVuY3Rpb24oYSl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYSkpJiZpc0Zpbml0ZShhKX0sYj1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgYSYmbnVsbCE9PWF9LGM9ZnVuY3Rpb24oYSl7cmV0dXJuXCJbb2JqZWN0IFN0cmluZ11cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX07VXRpbC5nZXRHbG9iYWwoKVsnbGliVHJhbnNsYXRlJ109e2dldFRyYW5zbGF0aW9uRnVuY3Rpb246ZnVuY3Rpb24oZCxlKXtmdW5jdGlvbiBmKGEpe2lmKGRbYV0pcmV0dXJuIGRbYV07dmFyIGI9YS5zcGxpdChqKSxjPWJbMF0sZT1iWzFdO3JldHVybiBkW2NdJiZkW2NdW2VdP2RbY11bZV06bnVsbH1mdW5jdGlvbiBnKGEsYyl7aWYoYihhKSl7dmFyIGQsZT1PYmplY3Qua2V5cyhhKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGkmJmNvbnNvbGUubG9nKFwiW1RyYW5zbGF0aW9uXSBObyBwbHVyYWwgZm9ybXMgZm91bmQuXCIpLG51bGw7Zm9yKHZhciBmPTA7ZjxlLmxlbmd0aDtmKyspMD09PWVbZl0uaW5kZXhPZihcImd0XCIpJiYoZD1wYXJzZUludChlW2ZdLnJlcGxhY2UoXCJndFwiLFwiXCIpLDEwKSk7YVtjXT9hPWFbY106Yz5kP2E9YVtcImd0XCIrZF06YS5uP2E9YS5uOihpJiZjb25zb2xlLmxvZygnW1RyYW5zbGF0aW9uXSBObyBwbHVyYWwgZm9ybXMgZm91bmQgZm9yIGNvdW50OlwiJytjKydcIiBpbicsYSksYT1hW09iamVjdC5rZXlzKGEpLnJldmVyc2UoKVswXV0pfXJldHVybiBhfWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYyhhKT9hLnJlcGxhY2UoL1xceyhcXHcqKVxcfS9nLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGIuaGFzT3duUHJvcGVydHkoYyk/Yi5oYXNPd25Qcm9wZXJ0eShjKT9iW2NdOmM6KGkmJmNvbnNvbGUubG9nKCdDb3VsZCBub3QgZmluZCByZXBsYWNlbWVudCBcIicrYysnXCIgaW4gcHJvdmlkZWQgcmVwbGFjZW1lbnRzIG9iamVjdDonLGIpLFwie1wiK2MrXCJ9XCIpfSk6YX1lPWIoZSk/ZTp7fTt2YXIgaT1lLmRlYnVnLGo9ZS5uYW1lc3BhY2VTcGxpdHRlcnx8XCI6OlwiO3JldHVybiBmdW5jdGlvbihjKXt2YXIgZD1iKGFyZ3VtZW50c1sxXSk/YXJndW1lbnRzWzFdOmIoYXJndW1lbnRzWzJdKT9hcmd1bWVudHNbMl06e30sZT1hKGFyZ3VtZW50c1sxXSk/YXJndW1lbnRzWzFdOmEoYXJndW1lbnRzWzJdKT9hcmd1bWVudHNbMl06bnVsbCxqPWYoYyk7cmV0dXJuIG51bGwhPT1lJiYoZC5uPWQubj9kLm46ZSxqPWcoaixlKSksaj1oKGosZCksbnVsbD09PWomJihqPWk/XCJAQFwiK2MrXCJAQFwiOmMsaSYmY29uc29sZS5sb2coJ1RyYW5zbGF0aW9uIGZvciBcIicrYysnXCIgbm90IGZvdW5kLicpKSxqfX19fSgpO1xuICAgIH1cblxuICAgIC8vIHQoJ3RyYW5zbGF0aW9uS2V5JylcbiAgICAvLyB0KCd0cmFuc2xhdGlvbktleScsIGNvdW50KVxuICAgIC8vIHQoJ3RyYW5zbGF0aW9uS2V5Jywge3JlcGxhY2VLZXk6ICdyZXBsYWNldmFsdWUnfSlcbiAgICAvLyB0KCd0cmFuc2xhdGlvbktleScsIGNvdW50LCB7cmVwbGFjZUtleTogJ3JlcGxhY2V2YWx1ZSd9KVxuICAgIC8vIHQoJ3RyYW5zbGF0aW9uS2V5Jywge3JlcGxhY2VLZXk6ICdyZXBsYWNldmFsdWUnfSwgY291bnQpXG4gICAgLy8gdCgnbW9kdWxlQTo6dHJhbnNsYXRpb25LZXknKVxuXG59XG4iXX0=