@angular/localize 13.0.0-next.9 → 13.0.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/esm2020/init/index.mjs +12 -0
- package/{esm2015/localize.js → esm2020/localize.mjs} +0 -0
- package/{esm2015/private.js → esm2020/private.mjs} +0 -0
- package/{esm2015/src/localize/index.js → esm2020/src/localize/index.mjs} +0 -0
- package/{esm2015/src/localize/src/global.js → esm2020/src/localize/src/global.mjs} +0 -0
- package/{esm2015/src/localize/src/localize.js → esm2020/src/localize/src/localize.mjs} +2 -2
- package/{esm2015/src/translate.js → esm2020/src/translate.mjs} +0 -0
- package/{esm2015/src/utils/index.js → esm2020/src/utils/index.mjs} +0 -0
- package/{esm2015/src/utils/src/constants.js → esm2020/src/utils/src/constants.mjs} +0 -0
- package/esm2020/src/utils/src/messages.mjs +159 -0
- package/{esm2015/src/utils/src/translations.js → esm2020/src/utils/src/translations.mjs} +0 -0
- package/fesm2015/{init.js → init.mjs} +3 -3
- package/fesm2015/init.mjs.map +1 -0
- package/fesm2015/{localize.js → localize.mjs} +7 -7
- package/fesm2015/localize.mjs.map +1 -0
- package/fesm2020/init.mjs +204 -0
- package/fesm2020/init.mjs.map +1 -0
- package/fesm2020/localize.mjs +449 -0
- package/fesm2020/localize.mjs.map +1 -0
- package/init/index.d.ts +1 -1
- package/init/package.json +5 -5
- package/package.json +43 -18
- package/schematics/ng-add/index.js +1 -1
- package/src/localize/src/localize.d.ts +1 -1
- package/src/utils/src/messages.d.ts +1 -1
- package/tools/README.md +4 -0
- package/tools/bundles/index.js +1929 -0
- package/tools/bundles/index.js.map +6 -0
- package/tools/bundles/src/extract/cli.js +1278 -0
- package/tools/bundles/src/extract/cli.js.map +6 -0
- package/tools/bundles/src/migrate/cli.js +77 -0
- package/tools/bundles/src/migrate/cli.js.map +6 -0
- package/tools/bundles/src/translate/cli.js +1340 -0
- package/tools/bundles/src/translate/cli.js.map +6 -0
- package/tools/bundles_metadata.json +1 -0
- package/tools/index.d.ts +26 -0
- package/tools/src/babel_core.d.ts +38 -0
- package/{src/tools → tools}/src/diagnostics.d.ts +1 -1
- package/tools/src/extract/cli.d.ts +10 -0
- package/{src/tools → tools}/src/extract/duplicates.d.ts +2 -2
- package/{src/tools → tools}/src/extract/extraction.d.ts +2 -3
- package/{src/tools/src/extract/main.d.ts → tools/src/extract/index.d.ts} +2 -4
- package/{src/tools → tools}/src/extract/source_files/es2015_extract_plugin.d.ts +3 -3
- package/{src/tools → tools}/src/extract/source_files/es5_extract_plugin.d.ts +3 -3
- package/{src/tools → tools}/src/extract/translation_files/arb_translation_serializer.d.ts +2 -2
- package/{src/tools → tools}/src/extract/translation_files/format_options.d.ts +1 -1
- package/{src/tools → tools}/src/extract/translation_files/icu_parsing.d.ts +1 -1
- package/{src/tools → tools}/src/extract/translation_files/json_translation_serializer.d.ts +1 -1
- package/{src/tools → tools}/src/extract/translation_files/legacy_message_id_migration_serializer.d.ts +1 -1
- package/{src/tools → tools}/src/extract/translation_files/translation_serializer.d.ts +1 -1
- package/{src/tools → tools}/src/extract/translation_files/utils.d.ts +1 -1
- package/{src/tools → tools}/src/extract/translation_files/xliff1_translation_serializer.d.ts +2 -2
- package/{src/tools → tools}/src/extract/translation_files/xliff2_translation_serializer.d.ts +2 -2
- package/{src/tools → tools}/src/extract/translation_files/xmb_translation_serializer.d.ts +2 -2
- package/{src/tools → tools}/src/extract/translation_files/xml_file.d.ts +1 -1
- package/tools/src/migrate/cli.d.ts +10 -0
- package/{src/tools/src/migrate/main.d.ts → tools/src/migrate/index.d.ts} +9 -3
- package/{src/tools → tools}/src/migrate/migrate.d.ts +1 -1
- package/{src/tools → tools}/src/source_file_utils.d.ts +3 -3
- package/{src/tools → tools}/src/translate/asset_files/asset_translation_handler.d.ts +2 -2
- package/tools/src/translate/cli.d.ts +3 -0
- package/{src/tools/src/translate/main.d.ts → tools/src/translate/index.d.ts} +1 -2
- package/{src/tools → tools}/src/translate/output_path.d.ts +2 -2
- package/{src/tools → tools}/src/translate/source_files/es2015_translate_plugin.d.ts +3 -3
- package/{src/tools → tools}/src/translate/source_files/es5_translate_plugin.d.ts +3 -3
- package/{src/tools → tools}/src/translate/source_files/locale_plugin.d.ts +2 -2
- package/{src/tools → tools}/src/translate/source_files/source_file_translation_handler.d.ts +2 -2
- package/{src/tools → tools}/src/translate/translation_files/base_visitor.d.ts +1 -1
- package/{src/tools → tools}/src/translate/translation_files/message_serialization/message_renderer.d.ts +1 -1
- package/{src/tools → tools}/src/translate/translation_files/message_serialization/message_serializer.d.ts +1 -1
- package/{src/tools → tools}/src/translate/translation_files/message_serialization/target_message_renderer.d.ts +1 -1
- package/{src/tools → tools}/src/translate/translation_files/translation_loader.d.ts +2 -2
- package/{src/tools → tools}/src/translate/translation_files/translation_parsers/arb_translation_parser.d.ts +1 -1
- package/{src/tools → tools}/src/translate/translation_files/translation_parsers/serialize_translation_message.d.ts +1 -1
- package/{src/tools → tools}/src/translate/translation_files/translation_parsers/simple_json_translation_parser.d.ts +1 -1
- package/{src/tools → tools}/src/translate/translation_files/translation_parsers/translation_parse_error.d.ts +1 -1
- package/{src/tools → tools}/src/translate/translation_files/translation_parsers/translation_parser.d.ts +2 -2
- package/{src/tools → tools}/src/translate/translation_files/translation_parsers/translation_utils.d.ts +1 -1
- package/{src/tools → tools}/src/translate/translation_files/translation_parsers/xliff1_translation_parser.d.ts +1 -1
- package/{src/tools → tools}/src/translate/translation_files/translation_parsers/xliff2_translation_parser.d.ts +1 -1
- package/{src/tools → tools}/src/translate/translation_files/translation_parsers/xtb_translation_parser.d.ts +1 -1
- package/{src/tools → tools}/src/translate/translator.d.ts +2 -2
- package/bundles/localize-init.umd.js +0 -218
- package/bundles/localize-init.umd.js.map +0 -1
- package/bundles/localize.umd.js +0 -782
- package/bundles/localize.umd.js.map +0 -1
- package/esm2015/init/index.js +0 -12
- package/esm2015/init/init.externs.js +0 -0
- package/esm2015/localize.externs.js +0 -0
- package/esm2015/src/localize/localize.externs.js +0 -0
- package/esm2015/src/utils/src/messages.js +0 -159
- package/esm2015/src/utils/utils.externs.js +0 -0
- package/fesm2015/init.js.map +0 -1
- package/fesm2015/localize.js.map +0 -1
- package/init.d.ts +0 -7
- package/src/tools/src/diagnostics.js +0 -68
- package/src/tools/src/extract/duplicates.js +0 -84
- package/src/tools/src/extract/extraction.js +0 -134
- package/src/tools/src/extract/main.js +0 -184
- package/src/tools/src/extract/source_files/es2015_extract_plugin.js +0 -36
- package/src/tools/src/extract/source_files/es5_extract_plugin.js +0 -49
- package/src/tools/src/extract/translation_files/arb_translation_serializer.js +0 -107
- package/src/tools/src/extract/translation_files/format_options.js +0 -52
- package/src/tools/src/extract/translation_files/icu_parsing.js +0 -224
- package/src/tools/src/extract/translation_files/json_translation_serializer.js +0 -47
- package/src/tools/src/extract/translation_files/legacy_message_id_migration_serializer.js +0 -63
- package/src/tools/src/extract/translation_files/translation_serializer.js +0 -13
- package/src/tools/src/extract/translation_files/utils.js +0 -102
- package/src/tools/src/extract/translation_files/xliff1_translation_serializer.js +0 -242
- package/src/tools/src/extract/translation_files/xliff2_translation_serializer.js +0 -231
- package/src/tools/src/extract/translation_files/xmb_translation_serializer.js +0 -139
- package/src/tools/src/extract/translation_files/xml_file.js +0 -117
- package/src/tools/src/migrate/main.js +0 -79
- package/src/tools/src/migrate/migrate.js +0 -48
- package/src/tools/src/source_file_utils.js +0 -443
- package/src/tools/src/translate/asset_files/asset_translation_handler.js +0 -65
- package/src/tools/src/translate/main.js +0 -157
- package/src/tools/src/translate/output_path.js +0 -28
- package/src/tools/src/translate/source_files/es2015_translate_plugin.js +0 -60
- package/src/tools/src/translate/source_files/es5_translate_plugin.js +0 -58
- package/src/tools/src/translate/source_files/locale_plugin.js +0 -95
- package/src/tools/src/translate/source_files/source_file_translation_handler.js +0 -127
- package/src/tools/src/translate/translation_files/base_visitor.js +0 -31
- package/src/tools/src/translate/translation_files/message_serialization/message_renderer.js +0 -20
- package/src/tools/src/translate/translation_files/message_serialization/message_serializer.js +0 -100
- package/src/tools/src/translate/translation_files/message_serialization/target_message_renderer.js +0 -84
- package/src/tools/src/translate/translation_files/translation_loader.js +0 -148
- package/src/tools/src/translate/translation_files/translation_parsers/arb_translation_parser.js +0 -111
- package/src/tools/src/translate/translation_files/translation_parsers/serialize_translation_message.js +0 -32
- package/src/tools/src/translate/translation_files/translation_parsers/simple_json_translation_parser.js +0 -96
- package/src/tools/src/translate/translation_files/translation_parsers/translation_parse_error.js +0 -47
- package/src/tools/src/translate/translation_files/translation_parsers/translation_parser.js +0 -13
- package/src/tools/src/translate/translation_files/translation_parsers/translation_utils.js +0 -175
- package/src/tools/src/translate/translation_files/translation_parsers/xliff1_translation_parser.js +0 -175
- package/src/tools/src/translate/translation_files/translation_parsers/xliff2_translation_parser.js +0 -166
- package/src/tools/src/translate/translation_files/translation_parsers/xtb_translation_parser.js +0 -133
- package/src/tools/src/translate/translator.js +0 -53
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
(function (factory) {
|
|
2
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
-
var v = factory(require, exports);
|
|
4
|
-
if (v !== undefined) module.exports = v;
|
|
5
|
-
}
|
|
6
|
-
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define("@angular/localize/src/tools/src/extract/translation_files/utils", ["require", "exports", "tslib"], factory);
|
|
8
|
-
}
|
|
9
|
-
})(function (require, exports) {
|
|
10
|
-
"use strict";
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.compareLocations = exports.hasLocation = exports.consolidateMessages = void 0;
|
|
13
|
-
var tslib_1 = require("tslib");
|
|
14
|
-
/**
|
|
15
|
-
* Consolidate messages into groups that have the same id.
|
|
16
|
-
*
|
|
17
|
-
* Messages with the same id are grouped together so that we can quickly deduplicate messages when
|
|
18
|
-
* rendering into translation files.
|
|
19
|
-
*
|
|
20
|
-
* To ensure that messages are rendered in a deterministic order:
|
|
21
|
-
* - the messages within a group are sorted by location (file path, then start position)
|
|
22
|
-
* - the groups are sorted by the location of the first message in the group
|
|
23
|
-
*
|
|
24
|
-
* @param messages the messages to consolidate.
|
|
25
|
-
* @param getMessageId a function that will compute the message id of a message.
|
|
26
|
-
* @returns an array of message groups, where each group is an array of messages that have the same
|
|
27
|
-
* id.
|
|
28
|
-
*/
|
|
29
|
-
function consolidateMessages(messages, getMessageId) {
|
|
30
|
-
var e_1, _a, e_2, _b;
|
|
31
|
-
var messageGroups = new Map();
|
|
32
|
-
try {
|
|
33
|
-
for (var messages_1 = (0, tslib_1.__values)(messages), messages_1_1 = messages_1.next(); !messages_1_1.done; messages_1_1 = messages_1.next()) {
|
|
34
|
-
var message = messages_1_1.value;
|
|
35
|
-
var id = getMessageId(message);
|
|
36
|
-
if (!messageGroups.has(id)) {
|
|
37
|
-
messageGroups.set(id, [message]);
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
messageGroups.get(id).push(message);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
45
|
-
finally {
|
|
46
|
-
try {
|
|
47
|
-
if (messages_1_1 && !messages_1_1.done && (_a = messages_1.return)) _a.call(messages_1);
|
|
48
|
-
}
|
|
49
|
-
finally { if (e_1) throw e_1.error; }
|
|
50
|
-
}
|
|
51
|
-
try {
|
|
52
|
-
// Here we sort the messages within a group into location order.
|
|
53
|
-
// Note that `Array.sort()` will mutate the array in-place.
|
|
54
|
-
for (var _c = (0, tslib_1.__values)(messageGroups.values()), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
55
|
-
var messages_2 = _d.value;
|
|
56
|
-
messages_2.sort(compareLocations);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
60
|
-
finally {
|
|
61
|
-
try {
|
|
62
|
-
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
|
|
63
|
-
}
|
|
64
|
-
finally { if (e_2) throw e_2.error; }
|
|
65
|
-
}
|
|
66
|
-
// Now we sort the groups by location of the first message in the group.
|
|
67
|
-
return Array.from(messageGroups.values()).sort(function (a1, a2) { return compareLocations(a1[0], a2[0]); });
|
|
68
|
-
}
|
|
69
|
-
exports.consolidateMessages = consolidateMessages;
|
|
70
|
-
/**
|
|
71
|
-
* Does the given message have a location property?
|
|
72
|
-
*/
|
|
73
|
-
function hasLocation(message) {
|
|
74
|
-
return message.location !== undefined;
|
|
75
|
-
}
|
|
76
|
-
exports.hasLocation = hasLocation;
|
|
77
|
-
function compareLocations(_a, _b) {
|
|
78
|
-
var location1 = _a.location;
|
|
79
|
-
var location2 = _b.location;
|
|
80
|
-
if (location1 === location2) {
|
|
81
|
-
return 0;
|
|
82
|
-
}
|
|
83
|
-
if (location1 === undefined) {
|
|
84
|
-
return -1;
|
|
85
|
-
}
|
|
86
|
-
if (location2 === undefined) {
|
|
87
|
-
return 1;
|
|
88
|
-
}
|
|
89
|
-
if (location1.file !== location2.file) {
|
|
90
|
-
return location1.file < location2.file ? -1 : 1;
|
|
91
|
-
}
|
|
92
|
-
if (location1.start.line !== location2.start.line) {
|
|
93
|
-
return location1.start.line < location2.start.line ? -1 : 1;
|
|
94
|
-
}
|
|
95
|
-
if (location1.start.column !== location2.start.column) {
|
|
96
|
-
return location1.start.column < location2.start.column ? -1 : 1;
|
|
97
|
-
}
|
|
98
|
-
return 0;
|
|
99
|
-
}
|
|
100
|
-
exports.compareLocations = compareLocations;
|
|
101
|
-
});
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sb2NhbGl6ZS9zcmMvdG9vbHMvc3JjL2V4dHJhY3QvdHJhbnNsYXRpb25fZmlsZXMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztJQVNBOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsU0FBZ0IsbUJBQW1CLENBQy9CLFFBQTBCLEVBQzFCLFlBQWlEOztRQUNuRCxJQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQzs7WUFDOUQsS0FBc0IsSUFBQSxhQUFBLHNCQUFBLFFBQVEsQ0FBQSxrQ0FBQSx3REFBRTtnQkFBM0IsSUFBTSxPQUFPLHFCQUFBO2dCQUNoQixJQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUMxQixhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ2xDO3FCQUFNO29CQUNMLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN0QzthQUNGOzs7Ozs7Ozs7O1lBRUQsZ0VBQWdFO1lBQ2hFLDJEQUEyRDtZQUMzRCxLQUF1QixJQUFBLEtBQUEsc0JBQUEsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFBLGdCQUFBLDRCQUFFO2dCQUExQyxJQUFNLFVBQVEsV0FBQTtnQkFDakIsVUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQ2pDOzs7Ozs7Ozs7UUFDRCx3RUFBd0U7UUFDeEUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEVBQUUsRUFBRSxFQUFFLElBQUssT0FBQSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQTlCLENBQThCLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBcEJELGtEQW9CQztJQUVEOztPQUVHO0lBQ0gsU0FBZ0IsV0FBVyxDQUFDLE9BQXVCO1FBRWpELE9BQU8sT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUM7SUFDeEMsQ0FBQztJQUhELGtDQUdDO0lBRUQsU0FBZ0IsZ0JBQWdCLENBQzVCLEVBQXFDLEVBQUUsRUFBcUM7WUFBakUsU0FBUyxjQUFBO1lBQThCLFNBQVMsY0FBQTtRQUM3RCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDM0IsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUNELElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUMzQixPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ1g7UUFDRCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDM0IsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUNELElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3JDLE9BQU8sU0FBUyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNqRCxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdEO1FBQ0QsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNyRCxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBckJELDRDQXFCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHvJtU1lc3NhZ2VJZCwgybVQYXJzZWRNZXNzYWdlLCDJtVNvdXJjZUxvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9sb2NhbGl6ZSc7XG5cbi8qKlxuICogQ29uc29saWRhdGUgbWVzc2FnZXMgaW50byBncm91cHMgdGhhdCBoYXZlIHRoZSBzYW1lIGlkLlxuICpcbiAqIE1lc3NhZ2VzIHdpdGggdGhlIHNhbWUgaWQgYXJlIGdyb3VwZWQgdG9nZXRoZXIgc28gdGhhdCB3ZSBjYW4gcXVpY2tseSBkZWR1cGxpY2F0ZSBtZXNzYWdlcyB3aGVuXG4gKiByZW5kZXJpbmcgaW50byB0cmFuc2xhdGlvbiBmaWxlcy5cbiAqXG4gKiBUbyBlbnN1cmUgdGhhdCBtZXNzYWdlcyBhcmUgcmVuZGVyZWQgaW4gYSBkZXRlcm1pbmlzdGljIG9yZGVyOlxuICogIC0gdGhlIG1lc3NhZ2VzIHdpdGhpbiBhIGdyb3VwIGFyZSBzb3J0ZWQgYnkgbG9jYXRpb24gKGZpbGUgcGF0aCwgdGhlbiBzdGFydCBwb3NpdGlvbilcbiAqICAtIHRoZSBncm91cHMgYXJlIHNvcnRlZCBieSB0aGUgbG9jYXRpb24gb2YgdGhlIGZpcnN0IG1lc3NhZ2UgaW4gdGhlIGdyb3VwXG4gKlxuICogQHBhcmFtIG1lc3NhZ2VzIHRoZSBtZXNzYWdlcyB0byBjb25zb2xpZGF0ZS5cbiAqIEBwYXJhbSBnZXRNZXNzYWdlSWQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgbWVzc2FnZSBpZCBvZiBhIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBtZXNzYWdlIGdyb3Vwcywgd2hlcmUgZWFjaCBncm91cCBpcyBhbiBhcnJheSBvZiBtZXNzYWdlcyB0aGF0IGhhdmUgdGhlIHNhbWVcbiAqICAgICBpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGlkYXRlTWVzc2FnZXMoXG4gICAgbWVzc2FnZXM6IMm1UGFyc2VkTWVzc2FnZVtdLFxuICAgIGdldE1lc3NhZ2VJZDogKG1lc3NhZ2U6IMm1UGFyc2VkTWVzc2FnZSkgPT4gc3RyaW5nKTogybVQYXJzZWRNZXNzYWdlW11bXSB7XG4gIGNvbnN0IG1lc3NhZ2VHcm91cHMgPSBuZXcgTWFwPMm1TWVzc2FnZUlkLCDJtVBhcnNlZE1lc3NhZ2VbXT4oKTtcbiAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG4gICAgY29uc3QgaWQgPSBnZXRNZXNzYWdlSWQobWVzc2FnZSk7XG4gICAgaWYgKCFtZXNzYWdlR3JvdXBzLmhhcyhpZCkpIHtcbiAgICAgIG1lc3NhZ2VHcm91cHMuc2V0KGlkLCBbbWVzc2FnZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlR3JvdXBzLmdldChpZCkhLnB1c2gobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gSGVyZSB3ZSBzb3J0IHRoZSBtZXNzYWdlcyB3aXRoaW4gYSBncm91cCBpbnRvIGxvY2F0aW9uIG9yZGVyLlxuICAvLyBOb3RlIHRoYXQgYEFycmF5LnNvcnQoKWAgd2lsbCBtdXRhdGUgdGhlIGFycmF5IGluLXBsYWNlLlxuICBmb3IgKGNvbnN0IG1lc3NhZ2VzIG9mIG1lc3NhZ2VHcm91cHMudmFsdWVzKCkpIHtcbiAgICBtZXNzYWdlcy5zb3J0KGNvbXBhcmVMb2NhdGlvbnMpO1xuICB9XG4gIC8vIE5vdyB3ZSBzb3J0IHRoZSBncm91cHMgYnkgbG9jYXRpb24gb2YgdGhlIGZpcnN0IG1lc3NhZ2UgaW4gdGhlIGdyb3VwLlxuICByZXR1cm4gQXJyYXkuZnJvbShtZXNzYWdlR3JvdXBzLnZhbHVlcygpKS5zb3J0KChhMSwgYTIpID0+IGNvbXBhcmVMb2NhdGlvbnMoYTFbMF0sIGEyWzBdKSk7XG59XG5cbi8qKlxuICogRG9lcyB0aGUgZ2l2ZW4gbWVzc2FnZSBoYXZlIGEgbG9jYXRpb24gcHJvcGVydHk/XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNMb2NhdGlvbihtZXNzYWdlOiDJtVBhcnNlZE1lc3NhZ2UpOiBtZXNzYWdlIGlzIMm1UGFyc2VkTWVzc2FnZSZcbiAgICB7bG9jYXRpb246IMm1U291cmNlTG9jYXRpb259IHtcbiAgcmV0dXJuIG1lc3NhZ2UubG9jYXRpb24gIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVMb2NhdGlvbnMoXG4gICAge2xvY2F0aW9uOiBsb2NhdGlvbjF9OiDJtVBhcnNlZE1lc3NhZ2UsIHtsb2NhdGlvbjogbG9jYXRpb24yfTogybVQYXJzZWRNZXNzYWdlKTogbnVtYmVyIHtcbiAgaWYgKGxvY2F0aW9uMSA9PT0gbG9jYXRpb24yKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKGxvY2F0aW9uMSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChsb2NhdGlvbjIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmIChsb2NhdGlvbjEuZmlsZSAhPT0gbG9jYXRpb24yLmZpbGUpIHtcbiAgICByZXR1cm4gbG9jYXRpb24xLmZpbGUgPCBsb2NhdGlvbjIuZmlsZSA/IC0xIDogMTtcbiAgfVxuICBpZiAobG9jYXRpb24xLnN0YXJ0LmxpbmUgIT09IGxvY2F0aW9uMi5zdGFydC5saW5lKSB7XG4gICAgcmV0dXJuIGxvY2F0aW9uMS5zdGFydC5saW5lIDwgbG9jYXRpb24yLnN0YXJ0LmxpbmUgPyAtMSA6IDE7XG4gIH1cbiAgaWYgKGxvY2F0aW9uMS5zdGFydC5jb2x1bW4gIT09IGxvY2F0aW9uMi5zdGFydC5jb2x1bW4pIHtcbiAgICByZXR1cm4gbG9jYXRpb24xLnN0YXJ0LmNvbHVtbiA8IGxvY2F0aW9uMi5zdGFydC5jb2x1bW4gPyAtMSA6IDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG4iXX0=
|
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
(function (factory) {
|
|
2
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
-
var v = factory(require, exports);
|
|
4
|
-
if (v !== undefined) module.exports = v;
|
|
5
|
-
}
|
|
6
|
-
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define("@angular/localize/src/tools/src/extract/translation_files/xliff1_translation_serializer", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngtsc/file_system", "@angular/localize/src/tools/src/extract/translation_files/format_options", "@angular/localize/src/tools/src/extract/translation_files/icu_parsing", "@angular/localize/src/tools/src/extract/translation_files/utils", "@angular/localize/src/tools/src/extract/translation_files/xml_file"], factory);
|
|
8
|
-
}
|
|
9
|
-
})(function (require, exports) {
|
|
10
|
-
"use strict";
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.Xliff1TranslationSerializer = void 0;
|
|
13
|
-
var tslib_1 = require("tslib");
|
|
14
|
-
/**
|
|
15
|
-
* @license
|
|
16
|
-
* Copyright Google LLC All Rights Reserved.
|
|
17
|
-
*
|
|
18
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
19
|
-
* found in the LICENSE file at https://angular.io/license
|
|
20
|
-
*/
|
|
21
|
-
var file_system_1 = require("@angular/compiler-cli/src/ngtsc/file_system");
|
|
22
|
-
var format_options_1 = require("@angular/localize/src/tools/src/extract/translation_files/format_options");
|
|
23
|
-
var icu_parsing_1 = require("@angular/localize/src/tools/src/extract/translation_files/icu_parsing");
|
|
24
|
-
var utils_1 = require("@angular/localize/src/tools/src/extract/translation_files/utils");
|
|
25
|
-
var xml_file_1 = require("@angular/localize/src/tools/src/extract/translation_files/xml_file");
|
|
26
|
-
/** This is the number of characters that a legacy Xliff 1.2 message id has. */
|
|
27
|
-
var LEGACY_XLIFF_MESSAGE_LENGTH = 40;
|
|
28
|
-
/**
|
|
29
|
-
* A translation serializer that can write XLIFF 1.2 formatted files.
|
|
30
|
-
*
|
|
31
|
-
* https://docs.oasis-open.org/xliff/v1.2/os/xliff-core.html
|
|
32
|
-
* https://docs.oasis-open.org/xliff/v1.2/xliff-profile-html/xliff-profile-html-1.2.html
|
|
33
|
-
*
|
|
34
|
-
* @see Xliff1TranslationParser
|
|
35
|
-
* @publicApi used by CLI
|
|
36
|
-
*/
|
|
37
|
-
var Xliff1TranslationSerializer = /** @class */ (function () {
|
|
38
|
-
function Xliff1TranslationSerializer(sourceLocale, basePath, useLegacyIds, formatOptions, fs) {
|
|
39
|
-
if (formatOptions === void 0) { formatOptions = {}; }
|
|
40
|
-
if (fs === void 0) { fs = (0, file_system_1.getFileSystem)(); }
|
|
41
|
-
this.sourceLocale = sourceLocale;
|
|
42
|
-
this.basePath = basePath;
|
|
43
|
-
this.useLegacyIds = useLegacyIds;
|
|
44
|
-
this.formatOptions = formatOptions;
|
|
45
|
-
this.fs = fs;
|
|
46
|
-
(0, format_options_1.validateOptions)('Xliff1TranslationSerializer', [['xml:space', ['preserve']]], formatOptions);
|
|
47
|
-
}
|
|
48
|
-
Xliff1TranslationSerializer.prototype.serialize = function (messages) {
|
|
49
|
-
var e_1, _a, e_2, _b;
|
|
50
|
-
var _this = this;
|
|
51
|
-
var messageGroups = (0, utils_1.consolidateMessages)(messages, function (message) { return _this.getMessageId(message); });
|
|
52
|
-
var xml = new xml_file_1.XmlFile();
|
|
53
|
-
xml.startTag('xliff', { 'version': '1.2', 'xmlns': 'urn:oasis:names:tc:xliff:document:1.2' });
|
|
54
|
-
// NOTE: the `original` property is set to the legacy `ng2.template` value for backward
|
|
55
|
-
// compatibility.
|
|
56
|
-
// We could compute the file from the `message.location` property, but there could
|
|
57
|
-
// be multiple values for this in the collection of `messages`. In that case we would probably
|
|
58
|
-
// need to change the serializer to output a new `<file>` element for each collection of
|
|
59
|
-
// messages that come from a particular original file, and the translation file parsers may not
|
|
60
|
-
// be able to cope with this.
|
|
61
|
-
xml.startTag('file', (0, tslib_1.__assign)({ 'source-language': this.sourceLocale, 'datatype': 'plaintext', 'original': 'ng2.template' }, this.formatOptions));
|
|
62
|
-
xml.startTag('body');
|
|
63
|
-
try {
|
|
64
|
-
for (var messageGroups_1 = (0, tslib_1.__values)(messageGroups), messageGroups_1_1 = messageGroups_1.next(); !messageGroups_1_1.done; messageGroups_1_1 = messageGroups_1.next()) {
|
|
65
|
-
var duplicateMessages = messageGroups_1_1.value;
|
|
66
|
-
var message = duplicateMessages[0];
|
|
67
|
-
var id = this.getMessageId(message);
|
|
68
|
-
xml.startTag('trans-unit', { id: id, datatype: 'html' });
|
|
69
|
-
xml.startTag('source', {}, { preserveWhitespace: true });
|
|
70
|
-
this.serializeMessage(xml, message);
|
|
71
|
-
xml.endTag('source', { preserveWhitespace: false });
|
|
72
|
-
try {
|
|
73
|
-
// Write all the locations
|
|
74
|
-
for (var _c = (e_2 = void 0, (0, tslib_1.__values)(duplicateMessages.filter(utils_1.hasLocation))), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
75
|
-
var location = _d.value.location;
|
|
76
|
-
this.serializeLocation(xml, location);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
80
|
-
finally {
|
|
81
|
-
try {
|
|
82
|
-
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
|
|
83
|
-
}
|
|
84
|
-
finally { if (e_2) throw e_2.error; }
|
|
85
|
-
}
|
|
86
|
-
if (message.description) {
|
|
87
|
-
this.serializeNote(xml, 'description', message.description);
|
|
88
|
-
}
|
|
89
|
-
if (message.meaning) {
|
|
90
|
-
this.serializeNote(xml, 'meaning', message.meaning);
|
|
91
|
-
}
|
|
92
|
-
xml.endTag('trans-unit');
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
96
|
-
finally {
|
|
97
|
-
try {
|
|
98
|
-
if (messageGroups_1_1 && !messageGroups_1_1.done && (_a = messageGroups_1.return)) _a.call(messageGroups_1);
|
|
99
|
-
}
|
|
100
|
-
finally { if (e_1) throw e_1.error; }
|
|
101
|
-
}
|
|
102
|
-
xml.endTag('body');
|
|
103
|
-
xml.endTag('file');
|
|
104
|
-
xml.endTag('xliff');
|
|
105
|
-
return xml.toString();
|
|
106
|
-
};
|
|
107
|
-
Xliff1TranslationSerializer.prototype.serializeMessage = function (xml, message) {
|
|
108
|
-
var _a;
|
|
109
|
-
var length = message.messageParts.length - 1;
|
|
110
|
-
for (var i = 0; i < length; i++) {
|
|
111
|
-
this.serializeTextPart(xml, message.messageParts[i]);
|
|
112
|
-
var location = (_a = message.substitutionLocations) === null || _a === void 0 ? void 0 : _a[message.placeholderNames[i]];
|
|
113
|
-
this.serializePlaceholder(xml, message.placeholderNames[i], location === null || location === void 0 ? void 0 : location.text);
|
|
114
|
-
}
|
|
115
|
-
this.serializeTextPart(xml, message.messageParts[length]);
|
|
116
|
-
};
|
|
117
|
-
Xliff1TranslationSerializer.prototype.serializeTextPart = function (xml, text) {
|
|
118
|
-
var pieces = (0, icu_parsing_1.extractIcuPlaceholders)(text);
|
|
119
|
-
var length = pieces.length - 1;
|
|
120
|
-
for (var i = 0; i < length; i += 2) {
|
|
121
|
-
xml.text(pieces[i]);
|
|
122
|
-
this.serializePlaceholder(xml, pieces[i + 1], undefined);
|
|
123
|
-
}
|
|
124
|
-
xml.text(pieces[length]);
|
|
125
|
-
};
|
|
126
|
-
Xliff1TranslationSerializer.prototype.serializePlaceholder = function (xml, id, text) {
|
|
127
|
-
var attrs = { id: id };
|
|
128
|
-
var ctype = getCtypeForPlaceholder(id);
|
|
129
|
-
if (ctype !== null) {
|
|
130
|
-
attrs.ctype = ctype;
|
|
131
|
-
}
|
|
132
|
-
if (text !== undefined) {
|
|
133
|
-
attrs['equiv-text'] = text;
|
|
134
|
-
}
|
|
135
|
-
xml.startTag('x', attrs, { selfClosing: true });
|
|
136
|
-
};
|
|
137
|
-
Xliff1TranslationSerializer.prototype.serializeNote = function (xml, name, value) {
|
|
138
|
-
xml.startTag('note', { priority: '1', from: name }, { preserveWhitespace: true });
|
|
139
|
-
xml.text(value);
|
|
140
|
-
xml.endTag('note', { preserveWhitespace: false });
|
|
141
|
-
};
|
|
142
|
-
Xliff1TranslationSerializer.prototype.serializeLocation = function (xml, location) {
|
|
143
|
-
xml.startTag('context-group', { purpose: 'location' });
|
|
144
|
-
this.renderContext(xml, 'sourcefile', this.fs.relative(this.basePath, location.file));
|
|
145
|
-
var endLineString = location.end !== undefined && location.end.line !== location.start.line ?
|
|
146
|
-
"," + (location.end.line + 1) :
|
|
147
|
-
'';
|
|
148
|
-
this.renderContext(xml, 'linenumber', "" + (location.start.line + 1) + endLineString);
|
|
149
|
-
xml.endTag('context-group');
|
|
150
|
-
};
|
|
151
|
-
Xliff1TranslationSerializer.prototype.renderContext = function (xml, type, value) {
|
|
152
|
-
xml.startTag('context', { 'context-type': type }, { preserveWhitespace: true });
|
|
153
|
-
xml.text(value);
|
|
154
|
-
xml.endTag('context', { preserveWhitespace: false });
|
|
155
|
-
};
|
|
156
|
-
/**
|
|
157
|
-
* Get the id for the given `message`.
|
|
158
|
-
*
|
|
159
|
-
* If there was a custom id provided, use that.
|
|
160
|
-
*
|
|
161
|
-
* If we have requested legacy message ids, then try to return the appropriate id
|
|
162
|
-
* from the list of legacy ids that were extracted.
|
|
163
|
-
*
|
|
164
|
-
* Otherwise return the canonical message id.
|
|
165
|
-
*
|
|
166
|
-
* An Xliff 1.2 legacy message id is a hex encoded SHA-1 string, which is 40 characters long. See
|
|
167
|
-
* https://csrc.nist.gov/csrc/media/publications/fips/180/4/final/documents/fips180-4-draft-aug2014.pdf
|
|
168
|
-
*/
|
|
169
|
-
Xliff1TranslationSerializer.prototype.getMessageId = function (message) {
|
|
170
|
-
return message.customId ||
|
|
171
|
-
this.useLegacyIds && message.legacyIds !== undefined &&
|
|
172
|
-
message.legacyIds.find(function (id) { return id.length === LEGACY_XLIFF_MESSAGE_LENGTH; }) ||
|
|
173
|
-
message.id;
|
|
174
|
-
};
|
|
175
|
-
return Xliff1TranslationSerializer;
|
|
176
|
-
}());
|
|
177
|
-
exports.Xliff1TranslationSerializer = Xliff1TranslationSerializer;
|
|
178
|
-
/**
|
|
179
|
-
* Compute the value of the `ctype` attribute from the `placeholder` name.
|
|
180
|
-
*
|
|
181
|
-
* The placeholder can take the following forms:
|
|
182
|
-
*
|
|
183
|
-
* - `START_BOLD_TEXT`/`END_BOLD_TEXT`
|
|
184
|
-
* - `TAG_<ELEMENT_NAME>`
|
|
185
|
-
* - `START_TAG_<ELEMENT_NAME>`
|
|
186
|
-
* - `CLOSE_TAG_<ELEMENT_NAME>`
|
|
187
|
-
*
|
|
188
|
-
* In these cases the element name of the tag is extracted from the placeholder name and returned as
|
|
189
|
-
* `x-<element_name>`.
|
|
190
|
-
*
|
|
191
|
-
* Line breaks and images are special cases.
|
|
192
|
-
*/
|
|
193
|
-
function getCtypeForPlaceholder(placeholder) {
|
|
194
|
-
var tag = placeholder.replace(/^(START_|CLOSE_)/, '');
|
|
195
|
-
switch (tag) {
|
|
196
|
-
case 'LINE_BREAK':
|
|
197
|
-
return 'lb';
|
|
198
|
-
case 'TAG_IMG':
|
|
199
|
-
return 'image';
|
|
200
|
-
default:
|
|
201
|
-
var element = tag.startsWith('TAG_') ?
|
|
202
|
-
tag.replace(/^TAG_(.+)/, function (_, tagName) { return tagName.toLowerCase(); }) :
|
|
203
|
-
TAG_MAP[tag];
|
|
204
|
-
if (element === undefined) {
|
|
205
|
-
return null;
|
|
206
|
-
}
|
|
207
|
-
return "x-" + element;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
var TAG_MAP = {
|
|
211
|
-
'LINK': 'a',
|
|
212
|
-
'BOLD_TEXT': 'b',
|
|
213
|
-
'EMPHASISED_TEXT': 'em',
|
|
214
|
-
'HEADING_LEVEL1': 'h1',
|
|
215
|
-
'HEADING_LEVEL2': 'h2',
|
|
216
|
-
'HEADING_LEVEL3': 'h3',
|
|
217
|
-
'HEADING_LEVEL4': 'h4',
|
|
218
|
-
'HEADING_LEVEL5': 'h5',
|
|
219
|
-
'HEADING_LEVEL6': 'h6',
|
|
220
|
-
'HORIZONTAL_RULE': 'hr',
|
|
221
|
-
'ITALIC_TEXT': 'i',
|
|
222
|
-
'LIST_ITEM': 'li',
|
|
223
|
-
'MEDIA_LINK': 'link',
|
|
224
|
-
'ORDERED_LIST': 'ol',
|
|
225
|
-
'PARAGRAPH': 'p',
|
|
226
|
-
'QUOTATION': 'q',
|
|
227
|
-
'STRIKETHROUGH_TEXT': 's',
|
|
228
|
-
'SMALL_TEXT': 'small',
|
|
229
|
-
'SUBSTRIPT': 'sub',
|
|
230
|
-
'SUPERSCRIPT': 'sup',
|
|
231
|
-
'TABLE_BODY': 'tbody',
|
|
232
|
-
'TABLE_CELL': 'td',
|
|
233
|
-
'TABLE_FOOTER': 'tfoot',
|
|
234
|
-
'TABLE_HEADER_CELL': 'th',
|
|
235
|
-
'TABLE_HEADER': 'thead',
|
|
236
|
-
'TABLE_ROW': 'tr',
|
|
237
|
-
'MONOSPACED_TEXT': 'tt',
|
|
238
|
-
'UNDERLINED_TEXT': 'u',
|
|
239
|
-
'UNORDERED_LIST': 'ul',
|
|
240
|
-
};
|
|
241
|
-
});
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGxpZmYxX3RyYW5zbGF0aW9uX3NlcmlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sb2NhbGl6ZS9zcmMvdG9vbHMvc3JjL2V4dHJhY3QvdHJhbnNsYXRpb25fZmlsZXMveGxpZmYxX3RyYW5zbGF0aW9uX3NlcmlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztJQUFBOzs7Ozs7T0FNRztJQUNILDJFQUE0RztJQUc1RywyR0FBZ0U7SUFDaEUscUdBQXFEO0lBRXJELHlGQUF5RDtJQUN6RCwrRkFBbUM7SUFFbkMsK0VBQStFO0lBQy9FLElBQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0lBRXZDOzs7Ozs7OztPQVFHO0lBQ0g7UUFDRSxxQ0FDWSxZQUFvQixFQUFVLFFBQXdCLEVBQVUsWUFBcUIsRUFDckYsYUFBaUMsRUFBVSxFQUFzQztZQUFqRiw4QkFBQSxFQUFBLGtCQUFpQztZQUFVLG1CQUFBLEVBQUEsU0FBdUIsMkJBQWEsR0FBRTtZQURqRixpQkFBWSxHQUFaLFlBQVksQ0FBUTtZQUFVLGFBQVEsR0FBUixRQUFRLENBQWdCO1lBQVUsaUJBQVksR0FBWixZQUFZLENBQVM7WUFDckYsa0JBQWEsR0FBYixhQUFhLENBQW9CO1lBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBb0M7WUFDM0YsSUFBQSxnQ0FBZSxFQUFDLDZCQUE2QixFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUVELCtDQUFTLEdBQVQsVUFBVSxRQUEwQjs7WUFBcEMsaUJBNENDO1lBM0NDLElBQU0sYUFBYSxHQUFHLElBQUEsMkJBQW1CLEVBQUMsUUFBUSxFQUFFLFVBQUEsT0FBTyxJQUFJLE9BQUEsS0FBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBMUIsQ0FBMEIsQ0FBQyxDQUFDO1lBQzNGLElBQU0sR0FBRyxHQUFHLElBQUksa0JBQU8sRUFBRSxDQUFDO1lBQzFCLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsdUNBQXVDLEVBQUMsQ0FBQyxDQUFDO1lBQzVGLHVGQUF1RjtZQUN2RixpQkFBaUI7WUFDakIsa0ZBQWtGO1lBQ2xGLDhGQUE4RjtZQUM5Rix3RkFBd0Y7WUFDeEYsK0ZBQStGO1lBQy9GLDZCQUE2QjtZQUM3QixHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sMEJBQ2pCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZLEVBQ3BDLFVBQVUsRUFBRSxXQUFXLEVBQ3ZCLFVBQVUsRUFBRSxjQUFjLElBQ3ZCLElBQUksQ0FBQyxhQUFhLEVBQ3JCLENBQUM7WUFDSCxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztnQkFDckIsS0FBZ0MsSUFBQSxrQkFBQSxzQkFBQSxhQUFhLENBQUEsNENBQUEsdUVBQUU7b0JBQTFDLElBQU0saUJBQWlCLDBCQUFBO29CQUMxQixJQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckMsSUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFFdEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBQyxFQUFFLElBQUEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztvQkFDbkQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztvQkFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDcEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDOzt3QkFFbEQsMEJBQTBCO3dCQUMxQixLQUF5QixJQUFBLG9CQUFBLHNCQUFBLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxtQkFBVyxDQUFDLENBQUEsQ0FBQSxnQkFBQSw0QkFBRTs0QkFBcEQsSUFBQSxRQUFRLG9CQUFBOzRCQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO3lCQUN2Qzs7Ozs7Ozs7O29CQUVELElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTt3QkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztxQkFDN0Q7b0JBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO3dCQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUNyRDtvQkFDRCxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUMxQjs7Ozs7Ozs7O1lBQ0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQixHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25CLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEIsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUVPLHNEQUFnQixHQUF4QixVQUF5QixHQUFZLEVBQUUsT0FBdUI7O1lBQzVELElBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckQsSUFBTSxRQUFRLEdBQUcsTUFBQSxPQUFPLENBQUMscUJBQXFCLDBDQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsSUFBSSxDQUFDLENBQUM7YUFDN0U7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRU8sdURBQWlCLEdBQXpCLFVBQTBCLEdBQVksRUFBRSxJQUFZO1lBQ2xELElBQU0sTUFBTSxHQUFHLElBQUEsb0NBQXNCLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNsQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDMUQ7WUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFFTywwREFBb0IsR0FBNUIsVUFBNkIsR0FBWSxFQUFFLEVBQVUsRUFBRSxJQUFzQjtZQUMzRSxJQUFNLEtBQUssR0FBMkIsRUFBQyxFQUFFLElBQUEsRUFBQyxDQUFDO1lBQzNDLElBQU0sS0FBSyxHQUFHLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtnQkFDbEIsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7YUFDckI7WUFDRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQ3RCLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDNUI7WUFDRCxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRU8sbURBQWEsR0FBckIsVUFBc0IsR0FBWSxFQUFFLElBQVksRUFBRSxLQUFhO1lBQzdELEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLEVBQUUsRUFBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1lBQzlFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFTyx1REFBaUIsR0FBekIsVUFBMEIsR0FBWSxFQUFFLFFBQXlCO1lBQy9ELEdBQUcsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEYsSUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0YsT0FBSSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUUsQ0FBQyxDQUFDO2dCQUM3QixFQUFFLENBQUM7WUFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUcsYUFBZSxDQUFDLENBQUM7WUFDcEYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRU8sbURBQWEsR0FBckIsVUFBc0IsR0FBWSxFQUFFLElBQVksRUFBRSxLQUFhO1lBQzdELEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUMsY0FBYyxFQUFFLElBQUksRUFBQyxFQUFFLEVBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUM1RSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hCLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQ7Ozs7Ozs7Ozs7OztXQVlHO1FBQ0ssa0RBQVksR0FBcEIsVUFBcUIsT0FBdUI7WUFDMUMsT0FBTyxPQUFPLENBQUMsUUFBUTtnQkFDbkIsSUFBSSxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVM7b0JBQ3BELE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQUEsRUFBRSxJQUFJLE9BQUEsRUFBRSxDQUFDLE1BQU0sS0FBSywyQkFBMkIsRUFBekMsQ0FBeUMsQ0FBQztnQkFDdkUsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBQ0gsa0NBQUM7SUFBRCxDQUFDLEFBOUhELElBOEhDO0lBOUhZLGtFQUEyQjtJQWdJeEM7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxTQUFTLHNCQUFzQixDQUFDLFdBQW1CO1FBQ2pELElBQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEQsUUFBUSxHQUFHLEVBQUU7WUFDWCxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxPQUFPLENBQUM7WUFDakI7Z0JBQ0UsSUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxVQUFDLENBQUMsRUFBRSxPQUFlLElBQUssT0FBQSxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQXJCLENBQXFCLENBQUMsQ0FBQyxDQUFDO29CQUN6RSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtvQkFDekIsT0FBTyxJQUFJLENBQUM7aUJBQ2I7Z0JBQ0QsT0FBTyxPQUFLLE9BQVMsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxJQUFNLE9BQU8sR0FBMkI7UUFDdEMsTUFBTSxFQUFFLEdBQUc7UUFDWCxXQUFXLEVBQUUsR0FBRztRQUNoQixpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCLGdCQUFnQixFQUFFLElBQUk7UUFDdEIsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixnQkFBZ0IsRUFBRSxJQUFJO1FBQ3RCLGdCQUFnQixFQUFFLElBQUk7UUFDdEIsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixnQkFBZ0IsRUFBRSxJQUFJO1FBQ3RCLGlCQUFpQixFQUFFLElBQUk7UUFDdkIsYUFBYSxFQUFFLEdBQUc7UUFDbEIsV0FBVyxFQUFFLElBQUk7UUFDakIsWUFBWSxFQUFFLE1BQU07UUFDcEIsY0FBYyxFQUFFLElBQUk7UUFDcEIsV0FBVyxFQUFFLEdBQUc7UUFDaEIsV0FBVyxFQUFFLEdBQUc7UUFDaEIsb0JBQW9CLEVBQUUsR0FBRztRQUN6QixZQUFZLEVBQUUsT0FBTztRQUNyQixXQUFXLEVBQUUsS0FBSztRQUNsQixhQUFhLEVBQUUsS0FBSztRQUNwQixZQUFZLEVBQUUsT0FBTztRQUNyQixZQUFZLEVBQUUsSUFBSTtRQUNsQixjQUFjLEVBQUUsT0FBTztRQUN2QixtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLGNBQWMsRUFBRSxPQUFPO1FBQ3ZCLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLGlCQUFpQixFQUFFLElBQUk7UUFDdkIsaUJBQWlCLEVBQUUsR0FBRztRQUN0QixnQkFBZ0IsRUFBRSxJQUFJO0tBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7QWJzb2x1dGVGc1BhdGgsIGdldEZpbGVTeXN0ZW0sIFBhdGhNYW5pcHVsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHvJtVBhcnNlZE1lc3NhZ2UsIMm1U291cmNlTG9jYXRpb259IGZyb20gJ0Bhbmd1bGFyL2xvY2FsaXplJztcblxuaW1wb3J0IHtGb3JtYXRPcHRpb25zLCB2YWxpZGF0ZU9wdGlvbnN9IGZyb20gJy4vZm9ybWF0X29wdGlvbnMnO1xuaW1wb3J0IHtleHRyYWN0SWN1UGxhY2Vob2xkZXJzfSBmcm9tICcuL2ljdV9wYXJzaW5nJztcbmltcG9ydCB7VHJhbnNsYXRpb25TZXJpYWxpemVyfSBmcm9tICcuL3RyYW5zbGF0aW9uX3NlcmlhbGl6ZXInO1xuaW1wb3J0IHtjb25zb2xpZGF0ZU1lc3NhZ2VzLCBoYXNMb2NhdGlvbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1htbEZpbGV9IGZyb20gJy4veG1sX2ZpbGUnO1xuXG4vKiogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBhIGxlZ2FjeSBYbGlmZiAxLjIgbWVzc2FnZSBpZCBoYXMuICovXG5jb25zdCBMRUdBQ1lfWExJRkZfTUVTU0FHRV9MRU5HVEggPSA0MDtcblxuLyoqXG4gKiBBIHRyYW5zbGF0aW9uIHNlcmlhbGl6ZXIgdGhhdCBjYW4gd3JpdGUgWExJRkYgMS4yIGZvcm1hdHRlZCBmaWxlcy5cbiAqXG4gKiBodHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcveGxpZmYvdjEuMi9vcy94bGlmZi1jb3JlLmh0bWxcbiAqIGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy94bGlmZi92MS4yL3hsaWZmLXByb2ZpbGUtaHRtbC94bGlmZi1wcm9maWxlLWh0bWwtMS4yLmh0bWxcbiAqXG4gKiBAc2VlIFhsaWZmMVRyYW5zbGF0aW9uUGFyc2VyXG4gKiBAcHVibGljQXBpIHVzZWQgYnkgQ0xJXG4gKi9cbmV4cG9ydCBjbGFzcyBYbGlmZjFUcmFuc2xhdGlvblNlcmlhbGl6ZXIgaW1wbGVtZW50cyBUcmFuc2xhdGlvblNlcmlhbGl6ZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgc291cmNlTG9jYWxlOiBzdHJpbmcsIHByaXZhdGUgYmFzZVBhdGg6IEFic29sdXRlRnNQYXRoLCBwcml2YXRlIHVzZUxlZ2FjeUlkczogYm9vbGVhbixcbiAgICAgIHByaXZhdGUgZm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9ucyA9IHt9LCBwcml2YXRlIGZzOiBQYXRoTWFuaXB1bGF0aW9uID0gZ2V0RmlsZVN5c3RlbSgpKSB7XG4gICAgdmFsaWRhdGVPcHRpb25zKCdYbGlmZjFUcmFuc2xhdGlvblNlcmlhbGl6ZXInLCBbWyd4bWw6c3BhY2UnLCBbJ3ByZXNlcnZlJ11dXSwgZm9ybWF0T3B0aW9ucyk7XG4gIH1cblxuICBzZXJpYWxpemUobWVzc2FnZXM6IMm1UGFyc2VkTWVzc2FnZVtdKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXNzYWdlR3JvdXBzID0gY29uc29saWRhdGVNZXNzYWdlcyhtZXNzYWdlcywgbWVzc2FnZSA9PiB0aGlzLmdldE1lc3NhZ2VJZChtZXNzYWdlKSk7XG4gICAgY29uc3QgeG1sID0gbmV3IFhtbEZpbGUoKTtcbiAgICB4bWwuc3RhcnRUYWcoJ3hsaWZmJywgeyd2ZXJzaW9uJzogJzEuMicsICd4bWxucyc6ICd1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yJ30pO1xuICAgIC8vIE5PVEU6IHRoZSBgb3JpZ2luYWxgIHByb3BlcnR5IGlzIHNldCB0byB0aGUgbGVnYWN5IGBuZzIudGVtcGxhdGVgIHZhbHVlIGZvciBiYWNrd2FyZFxuICAgIC8vIGNvbXBhdGliaWxpdHkuXG4gICAgLy8gV2UgY291bGQgY29tcHV0ZSB0aGUgZmlsZSBmcm9tIHRoZSBgbWVzc2FnZS5sb2NhdGlvbmAgcHJvcGVydHksIGJ1dCB0aGVyZSBjb3VsZFxuICAgIC8vIGJlIG11bHRpcGxlIHZhbHVlcyBmb3IgdGhpcyBpbiB0aGUgY29sbGVjdGlvbiBvZiBgbWVzc2FnZXNgLiBJbiB0aGF0IGNhc2Ugd2Ugd291bGQgcHJvYmFibHlcbiAgICAvLyBuZWVkIHRvIGNoYW5nZSB0aGUgc2VyaWFsaXplciB0byBvdXRwdXQgYSBuZXcgYDxmaWxlPmAgZWxlbWVudCBmb3IgZWFjaCBjb2xsZWN0aW9uIG9mXG4gICAgLy8gbWVzc2FnZXMgdGhhdCBjb21lIGZyb20gYSBwYXJ0aWN1bGFyIG9yaWdpbmFsIGZpbGUsIGFuZCB0aGUgdHJhbnNsYXRpb24gZmlsZSBwYXJzZXJzIG1heSBub3RcbiAgICAvLyBiZSBhYmxlIHRvIGNvcGUgd2l0aCB0aGlzLlxuICAgIHhtbC5zdGFydFRhZygnZmlsZScsIHtcbiAgICAgICdzb3VyY2UtbGFuZ3VhZ2UnOiB0aGlzLnNvdXJjZUxvY2FsZSxcbiAgICAgICdkYXRhdHlwZSc6ICdwbGFpbnRleHQnLFxuICAgICAgJ29yaWdpbmFsJzogJ25nMi50ZW1wbGF0ZScsXG4gICAgICAuLi50aGlzLmZvcm1hdE9wdGlvbnMsXG4gICAgfSk7XG4gICAgeG1sLnN0YXJ0VGFnKCdib2R5Jyk7XG4gICAgZm9yIChjb25zdCBkdXBsaWNhdGVNZXNzYWdlcyBvZiBtZXNzYWdlR3JvdXBzKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZHVwbGljYXRlTWVzc2FnZXNbMF07XG4gICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0TWVzc2FnZUlkKG1lc3NhZ2UpO1xuXG4gICAgICB4bWwuc3RhcnRUYWcoJ3RyYW5zLXVuaXQnLCB7aWQsIGRhdGF0eXBlOiAnaHRtbCd9KTtcbiAgICAgIHhtbC5zdGFydFRhZygnc291cmNlJywge30sIHtwcmVzZXJ2ZVdoaXRlc3BhY2U6IHRydWV9KTtcbiAgICAgIHRoaXMuc2VyaWFsaXplTWVzc2FnZSh4bWwsIG1lc3NhZ2UpO1xuICAgICAgeG1sLmVuZFRhZygnc291cmNlJywge3ByZXNlcnZlV2hpdGVzcGFjZTogZmFsc2V9KTtcblxuICAgICAgLy8gV3JpdGUgYWxsIHRoZSBsb2NhdGlvbnNcbiAgICAgIGZvciAoY29uc3Qge2xvY2F0aW9ufSBvZiBkdXBsaWNhdGVNZXNzYWdlcy5maWx0ZXIoaGFzTG9jYXRpb24pKSB7XG4gICAgICAgIHRoaXMuc2VyaWFsaXplTG9jYXRpb24oeG1sLCBsb2NhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXNzYWdlLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VyaWFsaXplTm90ZSh4bWwsICdkZXNjcmlwdGlvbicsIG1lc3NhZ2UuZGVzY3JpcHRpb24pO1xuICAgICAgfVxuICAgICAgaWYgKG1lc3NhZ2UubWVhbmluZykge1xuICAgICAgICB0aGlzLnNlcmlhbGl6ZU5vdGUoeG1sLCAnbWVhbmluZycsIG1lc3NhZ2UubWVhbmluZyk7XG4gICAgICB9XG4gICAgICB4bWwuZW5kVGFnKCd0cmFucy11bml0Jyk7XG4gICAgfVxuICAgIHhtbC5lbmRUYWcoJ2JvZHknKTtcbiAgICB4bWwuZW5kVGFnKCdmaWxlJyk7XG4gICAgeG1sLmVuZFRhZygneGxpZmYnKTtcbiAgICByZXR1cm4geG1sLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZU1lc3NhZ2UoeG1sOiBYbWxGaWxlLCBtZXNzYWdlOiDJtVBhcnNlZE1lc3NhZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBsZW5ndGggPSBtZXNzYWdlLm1lc3NhZ2VQYXJ0cy5sZW5ndGggLSAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuc2VyaWFsaXplVGV4dFBhcnQoeG1sLCBtZXNzYWdlLm1lc3NhZ2VQYXJ0c1tpXSk7XG4gICAgICBjb25zdCBsb2NhdGlvbiA9IG1lc3NhZ2Uuc3Vic3RpdHV0aW9uTG9jYXRpb25zPy5bbWVzc2FnZS5wbGFjZWhvbGRlck5hbWVzW2ldXTtcbiAgICAgIHRoaXMuc2VyaWFsaXplUGxhY2Vob2xkZXIoeG1sLCBtZXNzYWdlLnBsYWNlaG9sZGVyTmFtZXNbaV0sIGxvY2F0aW9uPy50ZXh0KTtcbiAgICB9XG4gICAgdGhpcy5zZXJpYWxpemVUZXh0UGFydCh4bWwsIG1lc3NhZ2UubWVzc2FnZVBhcnRzW2xlbmd0aF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXJpYWxpemVUZXh0UGFydCh4bWw6IFhtbEZpbGUsIHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBpZWNlcyA9IGV4dHJhY3RJY3VQbGFjZWhvbGRlcnModGV4dCk7XG4gICAgY29uc3QgbGVuZ3RoID0gcGllY2VzLmxlbmd0aCAtIDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMikge1xuICAgICAgeG1sLnRleHQocGllY2VzW2ldKTtcbiAgICAgIHRoaXMuc2VyaWFsaXplUGxhY2Vob2xkZXIoeG1sLCBwaWVjZXNbaSArIDFdLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICB4bWwudGV4dChwaWVjZXNbbGVuZ3RoXSk7XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZVBsYWNlaG9sZGVyKHhtbDogWG1sRmlsZSwgaWQ6IHN0cmluZywgdGV4dDogc3RyaW5nfHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge2lkfTtcbiAgICBjb25zdCBjdHlwZSA9IGdldEN0eXBlRm9yUGxhY2Vob2xkZXIoaWQpO1xuICAgIGlmIChjdHlwZSAhPT0gbnVsbCkge1xuICAgICAgYXR0cnMuY3R5cGUgPSBjdHlwZTtcbiAgICB9XG4gICAgaWYgKHRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXR0cnNbJ2VxdWl2LXRleHQnXSA9IHRleHQ7XG4gICAgfVxuICAgIHhtbC5zdGFydFRhZygneCcsIGF0dHJzLCB7c2VsZkNsb3Npbmc6IHRydWV9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplTm90ZSh4bWw6IFhtbEZpbGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHhtbC5zdGFydFRhZygnbm90ZScsIHtwcmlvcml0eTogJzEnLCBmcm9tOiBuYW1lfSwge3ByZXNlcnZlV2hpdGVzcGFjZTogdHJ1ZX0pO1xuICAgIHhtbC50ZXh0KHZhbHVlKTtcbiAgICB4bWwuZW5kVGFnKCdub3RlJywge3ByZXNlcnZlV2hpdGVzcGFjZTogZmFsc2V9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplTG9jYXRpb24oeG1sOiBYbWxGaWxlLCBsb2NhdGlvbjogybVTb3VyY2VMb2NhdGlvbik6IHZvaWQge1xuICAgIHhtbC5zdGFydFRhZygnY29udGV4dC1ncm91cCcsIHtwdXJwb3NlOiAnbG9jYXRpb24nfSk7XG4gICAgdGhpcy5yZW5kZXJDb250ZXh0KHhtbCwgJ3NvdXJjZWZpbGUnLCB0aGlzLmZzLnJlbGF0aXZlKHRoaXMuYmFzZVBhdGgsIGxvY2F0aW9uLmZpbGUpKTtcbiAgICBjb25zdCBlbmRMaW5lU3RyaW5nID0gbG9jYXRpb24uZW5kICE9PSB1bmRlZmluZWQgJiYgbG9jYXRpb24uZW5kLmxpbmUgIT09IGxvY2F0aW9uLnN0YXJ0LmxpbmUgP1xuICAgICAgICBgLCR7bG9jYXRpb24uZW5kLmxpbmUgKyAxfWAgOlxuICAgICAgICAnJztcbiAgICB0aGlzLnJlbmRlckNvbnRleHQoeG1sLCAnbGluZW51bWJlcicsIGAke2xvY2F0aW9uLnN0YXJ0LmxpbmUgKyAxfSR7ZW5kTGluZVN0cmluZ31gKTtcbiAgICB4bWwuZW5kVGFnKCdjb250ZXh0LWdyb3VwJyk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNvbnRleHQoeG1sOiBYbWxGaWxlLCB0eXBlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB4bWwuc3RhcnRUYWcoJ2NvbnRleHQnLCB7J2NvbnRleHQtdHlwZSc6IHR5cGV9LCB7cHJlc2VydmVXaGl0ZXNwYWNlOiB0cnVlfSk7XG4gICAgeG1sLnRleHQodmFsdWUpO1xuICAgIHhtbC5lbmRUYWcoJ2NvbnRleHQnLCB7cHJlc2VydmVXaGl0ZXNwYWNlOiBmYWxzZX0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaWQgZm9yIHRoZSBnaXZlbiBgbWVzc2FnZWAuXG4gICAqXG4gICAqIElmIHRoZXJlIHdhcyBhIGN1c3RvbSBpZCBwcm92aWRlZCwgdXNlIHRoYXQuXG4gICAqXG4gICAqIElmIHdlIGhhdmUgcmVxdWVzdGVkIGxlZ2FjeSBtZXNzYWdlIGlkcywgdGhlbiB0cnkgdG8gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBpZFxuICAgKiBmcm9tIHRoZSBsaXN0IG9mIGxlZ2FjeSBpZHMgdGhhdCB3ZXJlIGV4dHJhY3RlZC5cbiAgICpcbiAgICogT3RoZXJ3aXNlIHJldHVybiB0aGUgY2Fub25pY2FsIG1lc3NhZ2UgaWQuXG4gICAqXG4gICAqIEFuIFhsaWZmIDEuMiBsZWdhY3kgbWVzc2FnZSBpZCBpcyBhIGhleCBlbmNvZGVkIFNIQS0xIHN0cmluZywgd2hpY2ggaXMgNDAgY2hhcmFjdGVycyBsb25nLiBTZWVcbiAgICogaHR0cHM6Ly9jc3JjLm5pc3QuZ292L2NzcmMvbWVkaWEvcHVibGljYXRpb25zL2ZpcHMvMTgwLzQvZmluYWwvZG9jdW1lbnRzL2ZpcHMxODAtNC1kcmFmdC1hdWcyMDE0LnBkZlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRNZXNzYWdlSWQobWVzc2FnZTogybVQYXJzZWRNZXNzYWdlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbWVzc2FnZS5jdXN0b21JZCB8fFxuICAgICAgICB0aGlzLnVzZUxlZ2FjeUlkcyAmJiBtZXNzYWdlLmxlZ2FjeUlkcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIG1lc3NhZ2UubGVnYWN5SWRzLmZpbmQoaWQgPT4gaWQubGVuZ3RoID09PSBMRUdBQ1lfWExJRkZfTUVTU0FHRV9MRU5HVEgpIHx8XG4gICAgICAgIG1lc3NhZ2UuaWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSB2YWx1ZSBvZiB0aGUgYGN0eXBlYCBhdHRyaWJ1dGUgZnJvbSB0aGUgYHBsYWNlaG9sZGVyYCBuYW1lLlxuICpcbiAqIFRoZSBwbGFjZWhvbGRlciBjYW4gdGFrZSB0aGUgZm9sbG93aW5nIGZvcm1zOlxuICpcbiAqIC0gYFNUQVJUX0JPTERfVEVYVGAvYEVORF9CT0xEX1RFWFRgXG4gKiAtIGBUQUdfPEVMRU1FTlRfTkFNRT5gXG4gKiAtIGBTVEFSVF9UQUdfPEVMRU1FTlRfTkFNRT5gXG4gKiAtIGBDTE9TRV9UQUdfPEVMRU1FTlRfTkFNRT5gXG4gKlxuICogSW4gdGhlc2UgY2FzZXMgdGhlIGVsZW1lbnQgbmFtZSBvZiB0aGUgdGFnIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBwbGFjZWhvbGRlciBuYW1lIGFuZCByZXR1cm5lZCBhc1xuICogYHgtPGVsZW1lbnRfbmFtZT5gLlxuICpcbiAqIExpbmUgYnJlYWtzIGFuZCBpbWFnZXMgYXJlIHNwZWNpYWwgY2FzZXMuXG4gKi9cbmZ1bmN0aW9uIGdldEN0eXBlRm9yUGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZyk6IHN0cmluZ3xudWxsIHtcbiAgY29uc3QgdGFnID0gcGxhY2Vob2xkZXIucmVwbGFjZSgvXihTVEFSVF98Q0xPU0VfKS8sICcnKTtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdMSU5FX0JSRUFLJzpcbiAgICAgIHJldHVybiAnbGInO1xuICAgIGNhc2UgJ1RBR19JTUcnOlxuICAgICAgcmV0dXJuICdpbWFnZSc7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0YWcuc3RhcnRzV2l0aCgnVEFHXycpID9cbiAgICAgICAgICB0YWcucmVwbGFjZSgvXlRBR18oLispLywgKF8sIHRhZ05hbWU6IHN0cmluZykgPT4gdGFnTmFtZS50b0xvd2VyQ2FzZSgpKSA6XG4gICAgICAgICAgVEFHX01BUFt0YWddO1xuICAgICAgaWYgKGVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgeC0ke2VsZW1lbnR9YDtcbiAgfVxufVxuXG5jb25zdCBUQUdfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnTElOSyc6ICdhJyxcbiAgJ0JPTERfVEVYVCc6ICdiJyxcbiAgJ0VNUEhBU0lTRURfVEVYVCc6ICdlbScsXG4gICdIRUFESU5HX0xFVkVMMSc6ICdoMScsXG4gICdIRUFESU5HX0xFVkVMMic6ICdoMicsXG4gICdIRUFESU5HX0xFVkVMMyc6ICdoMycsXG4gICdIRUFESU5HX0xFVkVMNCc6ICdoNCcsXG4gICdIRUFESU5HX0xFVkVMNSc6ICdoNScsXG4gICdIRUFESU5HX0xFVkVMNic6ICdoNicsXG4gICdIT1JJWk9OVEFMX1JVTEUnOiAnaHInLFxuICAnSVRBTElDX1RFWFQnOiAnaScsXG4gICdMSVNUX0lURU0nOiAnbGknLFxuICAnTUVESUFfTElOSyc6ICdsaW5rJyxcbiAgJ09SREVSRURfTElTVCc6ICdvbCcsXG4gICdQQVJBR1JBUEgnOiAncCcsXG4gICdRVU9UQVRJT04nOiAncScsXG4gICdTVFJJS0VUSFJPVUdIX1RFWFQnOiAncycsXG4gICdTTUFMTF9URVhUJzogJ3NtYWxsJyxcbiAgJ1NVQlNUUklQVCc6ICdzdWInLFxuICAnU1VQRVJTQ1JJUFQnOiAnc3VwJyxcbiAgJ1RBQkxFX0JPRFknOiAndGJvZHknLFxuICAnVEFCTEVfQ0VMTCc6ICd0ZCcsXG4gICdUQUJMRV9GT09URVInOiAndGZvb3QnLFxuICAnVEFCTEVfSEVBREVSX0NFTEwnOiAndGgnLFxuICAnVEFCTEVfSEVBREVSJzogJ3RoZWFkJyxcbiAgJ1RBQkxFX1JPVyc6ICd0cicsXG4gICdNT05PU1BBQ0VEX1RFWFQnOiAndHQnLFxuICAnVU5ERVJMSU5FRF9URVhUJzogJ3UnLFxuICAnVU5PUkRFUkVEX0xJU1QnOiAndWwnLFxufTtcbiJdfQ==
|