text-to-map 1.1.40 → 1.1.42
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/dist/db/address-points.js +2 -2
- package/dist/db/founders.d.ts +2 -2
- package/dist/db/founders.js +26 -17
- package/dist/db/schools.js +10 -2
- package/dist/street-markdown/municipality.d.ts +1 -1
- package/dist/street-markdown/municipality.js +5 -5
- package/dist/street-markdown/polygons.js +7 -2
- package/dist/street-markdown/smd-line-parser.js +1 -1
- package/dist/street-markdown/smd.js +4 -4
- package/package.json +1 -1
- package/dist/db/migrations/20240729211323_ordinance_city.js +0 -11
|
@@ -189,7 +189,7 @@ export const checkStreetExists = async (streetName, founder) => {
|
|
|
189
189
|
const knex = getKnexDb();
|
|
190
190
|
const errors = [];
|
|
191
191
|
// we check the whole city
|
|
192
|
-
const cityCode = await getFounderCityCode(founder);
|
|
192
|
+
const cityCode = await getFounderCityCode(founder.municipalityType, founder.municipalityCode);
|
|
193
193
|
const rowList = await rawQuery(`SELECT name AS street_name
|
|
194
194
|
FROM street
|
|
195
195
|
WHERE city_code = ? AND name = ? ${isSqlite(knex) ? "COLLATE NOCASE" : ""}`, [cityCode, streetName]);
|
|
@@ -396,4 +396,4 @@ const rowToAddressPoint = (row) => {
|
|
|
396
396
|
point.address = createSingleLineAddress(point);
|
|
397
397
|
return point;
|
|
398
398
|
};
|
|
399
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1wb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvYWRkcmVzcy1wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFLTCxVQUFVLEVBR1Ysb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxpQkFBaUIsR0FDbEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RSxPQUFPLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLE9BQU8sRUFDUCxRQUFRLEVBQ1IsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQXlCLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xFLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUVqQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7QUFFakMsTUFBTSxXQUFXLEdBQUc7SUFDbEIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO0lBQ3BCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO0NBQ3RCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUc7SUFDcEIsT0FBTyxFQUFFLENBQUM7SUFDVixRQUFRLEVBQUUsQ0FBQztJQUNYLFFBQVEsRUFBRSxDQUFDO0lBQ1gsWUFBWSxFQUFFLENBQUM7SUFDZixZQUFZLEVBQUUsQ0FBQztJQUNmLGtCQUFrQixFQUFFLENBQUM7SUFD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b0JBQW9CLEtBQUssSUFBSSxFQUFFO1FBQ3JDLEtBQUssQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixDQUFDO0tBQ2pEO0lBQ0QsS0FBSyxDQUFDLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3NQb2ludFR5cGUsIGNyZWF0ZVNpbmdsZUxpbmVBZGRyZXNzIH0gZnJvbSBcImN6ZWNoLWFkZHJlc3NcIjtcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzUG9pbnQsXHJcbiAgRnVsbFN0cmVldE51bWJlcixcclxuICBSYW5nZVNwZWMsXHJcbiAgU2VyaWVzU3BlYyxcclxuICBTZXJpZXNUeXBlLFxyXG4gIFNtZEVycm9yLFxyXG4gIFNtZExpbmUsXHJcbiAgaXNOZWdhdGl2ZVNlcmllc1NwZWMsXHJcbiAgaXNSYW5nZSxcclxuICBpc1Nlcmllc1NwZWNBcnJheSxcclxufSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3R5cGVzXCI7XHJcbmltcG9ydCB7IGZpbmRDbG9zZXN0U3RyaW5nLCByb3VuZFRvTkRlY2ltYWxQbGFjZXMgfSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQganRzazJ3Z3M4NCBmcm9tIFwiLi4vdXRpbHMvanRzazJ3Z3M4NFwiO1xyXG5pbXBvcnQge1xyXG4gIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyxcclxuICBnZW5lcmF0ZTJEUGxhY2Vob2xkZXJzLFxyXG4gIGdldEtuZXhEYixcclxuICBpbnNlcnRNdWx0aXBsZVJvd3MsXHJcbiAgaXNNeXNxbCxcclxuICBpc1NxbGl0ZSxcclxuICBub25FbXB0eU9yTnVsbCxcclxuICByYXdRdWVyeSxcclxufSBmcm9tIFwiLi9kYlwiO1xyXG5pbXBvcnQgeyBnZXRGb3VuZGVyQ2l0eUNvZGUgfSBmcm9tIFwiLi9mb3VuZGVyc1wiO1xyXG5pbXBvcnQgeyBGb3VuZGVyLCBNdW5pY2lwYWxpdHksIE11bmljaXBhbGl0eVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5pbXBvcnQgY2h1bmsgZnJvbSBcImxvZGFzaC9jaHVua1wiO1xyXG5cclxuY29uc3QgRGVzY3JpcHRpdmVUeXBlID0gXCLEjS5wLlwiO1xyXG5jb25zdCBSZWdpc3RyYXRpb25UeXBlID0gXCLEjS5ldi5cIjtcclxuXHJcbmNvbnN0IE9iamVjdFR5cGVzID0ge1xyXG4gIFtEZXNjcmlwdGl2ZVR5cGVdOiAxLFxyXG4gIFtSZWdpc3RyYXRpb25UeXBlXTogMixcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBDb2x1bW4gPSB7XHJcbiAgYWRtQ29kZTogMCxcclxuICBjaXR5Q29kZTogMSxcclxuICBjaXR5TmFtZTogMixcclxuICBkaXN0cmljdENvZGU6IDMsXHJcbiAgZGlzdHJpY3ROYW1lOiA0LFxyXG4gIHByYWd1ZURpc3RyaWN0Q29kZTogNSxcclxuICBwcmFndWVEaXN0cmljdE5hbWU6IDYsXHJcbiAgbXVuaWNpcGFsaXR5UGFydENvZGU6IDcsXHJcbiAgbXVuaWNpcGFsaXR5UGFydE5hbWU6IDgsXHJcbiAgc3RyZWV0Q29kZTogOSxcclxuICBzdHJlZXROYW1lOiAxMCxcclxuICBvYmplY3RUeXBlOiAxMSxcclxuICBob3VzZU51bWJlcjogMTIsXHJcbiAgb3JpZW50YXRpb25hbE51bWJlcjogMTMsXHJcbiAgb3JpZW50YXRpb25hbE51bWJlckxldHRlcjogMTQsXHJcbiAgcG9zdGFsQ29kZTogMTUsXHJcbiAgeUNvb3JkaW5hdGU6IDE2LFxyXG4gIHhDb29yZGluYXRlOiAxNyxcclxuICB2YWxpZEZyb206IDE4LFxyXG59O1xyXG5cclxuY29uc3QgY29sdW1uTmFtZXMgPSBbXHJcbiAgXCJpZFwiLFxyXG4gIFwic3RyZWV0X2NvZGVcIixcclxuICBcIm9iamVjdF90eXBlX2lkXCIsXHJcbiAgXCJkZXNjcmlwdGl2ZV9udW1iZXJcIixcclxuICBcIm9yaWVudGF0aW9uYWxfbnVtYmVyXCIsXHJcbiAgXCJvcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXJcIixcclxuICBcImNpdHlfY29kZVwiLFxyXG4gIFwiY2l0eV9kaXN0cmljdF9jb2RlXCIsXHJcbiAgXCJtdW5pY2lwYWxpdHlfcGFydF9jb2RlXCIsXHJcbiAgXCJwcmFndWVfZGlzdHJpY3RfY29kZVwiLFxyXG4gIFwicG9zdGFsX2NvZGVcIixcclxuICBcImp0c2tfeFwiLFxyXG4gIFwianRza195XCIsXHJcbiAgXCJ3Z3M4NF9sYXRpdHVkZVwiLFxyXG4gIFwid2dzODRfbG9uZ2l0dWRlXCIsXHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgY29tbWl0QWRkcmVzc1BvaW50cyA9IGFzeW5jIChcclxuICBidWZmZXI6IHN0cmluZ1tdW11cclxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG4gIGF3YWl0IGluc2VydENpdGllcyhidWZmZXIpO1xyXG4gIGF3YWl0IGluc2VydERpc3RyaWN0cyhidWZmZXIpO1xyXG4gIGF3YWl0IGluc2VydE11bmljaXBhbGl0eVBhcnRzKGJ1ZmZlcik7XHJcbiAgYXdhaXQgaW5zZXJ0U3RyZWV0cyhidWZmZXIpO1xyXG4gIGF3YWl0IGluc2VydFByYWd1ZURpc3RyaWN0cyhidWZmZXIpO1xyXG5cclxuICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIChzdHJpbmcgfCBudWxsKVtdPiA9IHt9O1xyXG4gIGJ1ZmZlci5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICBsZXQgbGF0T3JOdWxsOiBzdHJpbmcsIGxvbk9yTnVsbDogc3RyaW5nO1xyXG4gICAgbGF0T3JOdWxsID0gbnVsbDtcclxuICAgIGxvbk9yTnVsbCA9IG51bGw7XHJcbiAgICBpZiAoZGF0YVtDb2x1bW4ueENvb3JkaW5hdGVdICYmIGRhdGFbQ29sdW1uLnlDb29yZGluYXRlXSkge1xyXG4gICAgICBjb25zdCB7IGxhdCwgbG9uIH0gPSBqdHNrMndnczg0KFxyXG4gICAgICAgIHBhcnNlRmxvYXQoZGF0YVtDb2x1bW4ueENvb3JkaW5hdGVdKSxcclxuICAgICAgICBwYXJzZUZsb2F0KGRhdGFbQ29sdW1uLnlDb29yZGluYXRlXSlcclxuICAgICAgKTtcclxuICAgICAgW2xhdE9yTnVsbCwgbG9uT3JOdWxsXSA9IFtsYXQudG9TdHJpbmcoKSwgbG9uLnRvU3RyaW5nKCldO1xyXG4gICAgfVxyXG4gICAgcGFyYW1zW2RhdGFbQ29sdW1uLmFkbUNvZGVdXSA9IFtcclxuICAgICAgZGF0YVtDb2x1bW4uYWRtQ29kZV0sXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLnN0cmVldENvZGVdKSxcclxuICAgICAgT2JqZWN0VHlwZXNbZGF0YVtDb2x1bW4ub2JqZWN0VHlwZV1dLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5ob3VzZU51bWJlcl0pLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5vcmllbnRhdGlvbmFsTnVtYmVyXSksXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXJdKSxcclxuICAgICAgZGF0YVtDb2x1bW4uY2l0eUNvZGVdLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5kaXN0cmljdENvZGVdKSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ubXVuaWNpcGFsaXR5UGFydENvZGVdKSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ucHJhZ3VlRGlzdHJpY3RDb2RlXSksXHJcbiAgICAgIGRhdGFbQ29sdW1uLnBvc3RhbENvZGVdLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi54Q29vcmRpbmF0ZV0pLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi55Q29vcmRpbmF0ZV0pLFxyXG4gICAgICBsYXRPck51bGwsXHJcbiAgICAgIGxvbk9yTnVsbCxcclxuICAgIF07XHJcbiAgfSk7XHJcblxyXG4gIC8vIGZpbmQgYWxyZWFkeSBleGlzdGluZyByb3dzXHJcbiAgY29uc3QgZXhpc3RpbmdSb3dzID0gYXdhaXQgcmF3UXVlcnkoXHJcbiAgICBgU0VMRUNUICogRlJPTSBhZGRyZXNzX3BvaW50IFdIRVJFIGlkIElOICgke2J1ZmZlclxyXG4gICAgICAubWFwKChkYXRhKSA9PiBkYXRhW0NvbHVtbi5hZG1Db2RlXSlcclxuICAgICAgLmpvaW4oXCIsXCIpfSlgXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgcXVlcmllcyA9IFtdO1xyXG4gIGZvciAoY29uc3Qgcm93IG9mIGV4aXN0aW5nUm93cykge1xyXG4gICAgY29uc3QgdG9JbnNlcnQgPSBwYXJhbXNbcm93LmlkXTtcclxuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMocm93KTtcclxuICAgIGlmICghdG9JbnNlcnQuZXZlcnkoKHYsIGkpID0+IHZhbHVlc0VxdWFsKHYsIHZhbHVlc1tpXSkpKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSB0aG9zZSB3aG9zZSB2YWx1ZXMgZGlmZmVyXHJcbiAgICAgIHF1ZXJpZXMucHVzaChcclxuICAgICAgICByYXdRdWVyeShcclxuICAgICAgICAgIGBVUERBVEUgYWRkcmVzc19wb2ludCBTRVQgJHtjb2x1bW5OYW1lc1xyXG4gICAgICAgICAgICAubWFwKChjKSA9PiBgJHtjfSA9ID9gKVxyXG4gICAgICAgICAgICAuam9pbihcIiwgXCIpfSBXSEVSRSBpZCA9ID9gLFxyXG4gICAgICAgICAgWy4uLnRvSW5zZXJ0LCByb3cuaWRdXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXdhaXQgUHJvbWlzZS5hbGwocXVlcmllcyk7XHJcblxyXG4gIGNvbnN0IHBsYWNlSG9sZGVycyA9IGdlbmVyYXRlMkRQbGFjZWhvbGRlcnMoXHJcbiAgICBjb2x1bW5OYW1lcy5sZW5ndGgsXHJcbiAgICBidWZmZXIubGVuZ3RoXHJcbiAgKTtcclxuXHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG4gIGF3YWl0IHJhd1F1ZXJ5KFxyXG4gICAgYElOU0VSVCAke1xyXG4gICAgICBpc015c3FsKGtuZXgpID8gXCJJR05PUkVcIiA6IFwiXCJcclxuICAgIH0gSU5UTyBhZGRyZXNzX3BvaW50ICgke2NvbHVtbk5hbWVzLmpvaW4oXCIsXCIpfSkgVkFMVUVTICR7cGxhY2VIb2xkZXJzfSAke1xyXG4gICAgICAhaXNNeXNxbChrbmV4KSA/IFwiT04gQ09ORkxJQ1QgKGlkKSBETyBOT1RISU5HXCIgOiBcIlwiXHJcbiAgICB9YCxcclxuICAgIE9iamVjdC52YWx1ZXMocGFyYW1zKS5mbGF0KClcclxuICApO1xyXG5cclxuICByZXR1cm4gYnVmZmVyLmxlbmd0aDtcclxufTtcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1vdmVEZXByZWNhdGVkQWRkcmVzc1BvaW50cyhcclxuICBhbGxJZHM6IFNldDxudW1iZXI+XHJcbik6IFByb21pc2U8dm9pZD4ge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuICBjb25zdCBleGlzdGluZ0lkcyA9IGF3YWl0IGtuZXgucGx1Y2soXCJpZFwiKS5mcm9tKFwiYWRkcmVzc19wb2ludFwiKTtcclxuICBjb25zdCB0b1JlbW92ZSA9IGV4aXN0aW5nSWRzLmZpbHRlcigoaWQpID0+ICFhbGxJZHMuaGFzKGlkKSk7XHJcbiAgY29uc3QgY2h1bmtzID0gY2h1bmsodG9SZW1vdmUsIDEwMDApO1xyXG4gIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XHJcbiAgICBhd2FpdCBrbmV4KFwiYWRkcmVzc19wb2ludFwiKS53aGVyZUluKFwiaWRcIiwgY2h1bmspLmRlbGV0ZSgpO1xyXG4gIH1cclxuICBjb25zb2xlLmxvZyhgUmVtb3ZlZCAke3RvUmVtb3ZlLmxlbmd0aH0gZGVwcmVjYXRlZCBhZGRyZXNzIHBvaW50cy5gKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdmFsdWVzRXF1YWwoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gc2FuaXRpemVWYWx1ZShhKSA9PT0gc2FuaXRpemVWYWx1ZShiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2FuaXRpemVWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcclxuICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcblxyXG4gIGlmICgvXFxkK1xcLlxcZCsvLnRlc3QodmFsdWUpKSB7XHJcbiAgICByZXR1cm4gcm91bmRUb05EZWNpbWFsUGxhY2VzKHBhcnNlRmxvYXQodmFsdWUpLCA2KS50b1N0cmluZygpO1xyXG4gIH1cclxuICByZXR1cm4gdmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRDaXRpZXMgPSBhc3luYyAoYnVmZmVyOiBzdHJpbmdbXVtdKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLmNpdHlDb2RlLCBbQ29sdW1uLmNpdHlOYW1lXSksXHJcbiAgICBcImNpdHlcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnREaXN0cmljdHMgPSBhc3luYyAoYnVmZmVyOiBzdHJpbmdbXVtdKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLmRpc3RyaWN0Q29kZSwgW1xyXG4gICAgICBDb2x1bW4uY2l0eUNvZGUsXHJcbiAgICAgIENvbHVtbi5kaXN0cmljdE5hbWUsXHJcbiAgICBdKSxcclxuICAgIFwiY2l0eV9kaXN0cmljdFwiLFxyXG4gICAgW1wiY29kZVwiLCBcImNpdHlfY29kZVwiLCBcIm5hbWVcIl1cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydE11bmljaXBhbGl0eVBhcnRzID0gYXN5bmMgKFxyXG4gIGJ1ZmZlcjogc3RyaW5nW11bXVxyXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBleHRyYWN0S2V5VmFsdWVzUGFpcnMoYnVmZmVyLCBDb2x1bW4ubXVuaWNpcGFsaXR5UGFydENvZGUsIFtcclxuICAgICAgQ29sdW1uLm11bmljaXBhbGl0eVBhcnROYW1lLFxyXG4gICAgICBDb2x1bW4uY2l0eUNvZGUsXHJcbiAgICBdKSxcclxuICAgIFwibXVuaWNpcGFsaXR5X3BhcnRcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCIsIFwiY2l0eV9jb2RlXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRQcmFndWVEaXN0cmljdHMgPSBhc3luYyAoXHJcbiAgYnVmZmVyOiBzdHJpbmdbXVtdXHJcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyhidWZmZXIsIENvbHVtbi5wcmFndWVEaXN0cmljdENvZGUsIFtcclxuICAgICAgQ29sdW1uLnByYWd1ZURpc3RyaWN0TmFtZSxcclxuICAgIF0pLFxyXG4gICAgXCJwcmFndWVfZGlzdHJpY3RcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRTdHJlZXRzID0gYXN5bmMgKGJ1ZmZlcjogc3RyaW5nW11bXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyhidWZmZXIsIENvbHVtbi5zdHJlZXRDb2RlLCBbXHJcbiAgICAgIENvbHVtbi5jaXR5Q29kZSxcclxuICAgICAgQ29sdW1uLnN0cmVldE5hbWUsXHJcbiAgICBdKSxcclxuICAgIFwic3RyZWV0XCIsXHJcbiAgICBbXCJjb2RlXCIsIFwiY2l0eV9jb2RlXCIsIFwibmFtZVwiXVxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgYXJlQWRkcmVzc1BvaW50c1N5bmNlZCA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLmNvdW50KFwiKlwiLCB7IGFzOiBcImNvdW50QWxsXCIgfSlcclxuICAgIC5mcm9tKFwiYWRkcmVzc19wb2ludFwiKVxyXG4gICAgLmZpcnN0KCk7XHJcbiAgcmV0dXJuIE51bWJlcihyZXN1bHQuY291bnRBbGwpID49IDI5MDAwMDA7IC8vIHRvdGFsIGlzIGFsbW9zdCAzIG1pbGxpb25cclxufTtcclxuXHJcbmNvbnN0IGFkZHJlc3NQb2ludFNlbGVjdCA9IGBcclxuICBTRUxFQ1QgYS5pZCwgcy5uYW1lIEFTIHN0cmVldF9uYW1lLCBvLm5hbWUgQVMgb2JqZWN0X3R5cGVfbmFtZSwgYS5kZXNjcmlwdGl2ZV9udW1iZXIsXHJcbiAgICAgICAgYS5vcmllbnRhdGlvbmFsX251bWJlciwgYS5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIsIGMubmFtZSBBUyBjaXR5X25hbWUsXHJcbiAgICAgICAgbS5uYW1lIEFTIG11bmljaXBhbGl0eV9wYXJ0X25hbWUsIHAubmFtZSBBUyBwcmFndWVfZGlzdHJpY3RfbmFtZSxcclxuICAgICAgICBkLm5hbWUgQVMgZGlzdHJpY3RfbmFtZSwgYS5wb3N0YWxfY29kZSwgYS53Z3M4NF9sYXRpdHVkZSwgYS53Z3M4NF9sb25naXR1ZGVcclxuICBGUk9NIGFkZHJlc3NfcG9pbnQgYVxyXG4gIExFRlQgSk9JTiBzdHJlZXQgcyBPTiBhLnN0cmVldF9jb2RlID0gcy5jb2RlXHJcbiAgSU5ORVIgSk9JTiBvYmplY3RfdHlwZSBvIE9OIG8uaWQgPSBhLm9iamVjdF90eXBlX2lkXHJcbiAgSU5ORVIgSk9JTiBjaXR5IGMgT04gYy5jb2RlID0gYS5jaXR5X2NvZGVcclxuICBMRUZUIEpPSU4gY2l0eV9kaXN0cmljdCBkIE9OIGEuY2l0eV9kaXN0cmljdF9jb2RlID0gZC5jb2RlXHJcbiAgTEVGVCBKT0lOIHByYWd1ZV9kaXN0cmljdCBwIE9OIGEucHJhZ3VlX2Rpc3RyaWN0X2NvZGUgPSBwLmNvZGVcclxuICBMRUZUIEpPSU4gbXVuaWNpcGFsaXR5X3BhcnQgbSBPTiBhLm11bmljaXBhbGl0eV9wYXJ0X2NvZGUgPSBtLmNvZGVgO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEFkZHJlc3NQb2ludEJ5SWQgPSBhc3luYyAoXHJcbiAgYWRkcmVzc1BvaW50SWQ6IG51bWJlclxyXG4pOiBQcm9taXNlPEFkZHJlc3NQb2ludCB8IG51bGw+ID0+IHtcclxuICBjb25zdCByb3cgPSBhd2FpdCByYXdRdWVyeShcclxuICAgIGAke2FkZHJlc3NQb2ludFNlbGVjdH1cclxuICAgICAgV0hFUkUgYS5pZCA9ID9gLFxyXG4gICAgW2FkZHJlc3NQb2ludElkXVxyXG4gICk7XHJcbiAgaWYgKHJvdy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICByZXR1cm4gcm93VG9BZGRyZXNzUG9pbnQocm93WzBdKTtcclxufTtcclxuXHJcbmxldCBsYXN0Rm91bmRlcjogRm91bmRlciB8IG51bGwgPSBudWxsO1xyXG5sZXQgYWxsU3RyZWV0czogc3RyaW5nW10gPSBbXTtcclxuXHJcbmV4cG9ydCBjb25zdCBjaGVja1N0cmVldEV4aXN0cyA9IGFzeW5jIChcclxuICBzdHJlZXROYW1lOiBzdHJpbmcsXHJcbiAgZm91bmRlcjogRm91bmRlclxyXG4pOiBQcm9taXNlPHsgZXhpc3RzOiBib29sZWFuOyBlcnJvcnM6IFNtZEVycm9yW10gfT4gPT4ge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuICBjb25zdCBlcnJvcnM6IFNtZEVycm9yW10gPSBbXTtcclxuXHJcbiAgLy8gd2UgY2hlY2sgdGhlIHdob2xlIGNpdHlcclxuICBjb25zdCBjaXR5Q29kZSA9IGF3YWl0IGdldEZvdW5kZXJDaXR5Q29kZShmb3VuZGVyKTtcclxuICBjb25zdCByb3dMaXN0ID0gYXdhaXQgcmF3UXVlcnkoXHJcbiAgICBgU0VMRUNUIG5hbWUgQVMgc3RyZWV0X25hbWVcclxuICAgIEZST00gc3RyZWV0XHJcbiAgICBXSEVSRSBjaXR5X2NvZGUgPSA/IEFORCBuYW1lID0gPyAgJHtcclxuICAgICAgaXNTcWxpdGUoa25leCkgPyBcIkNPTExBVEUgTk9DQVNFXCIgOiBcIlwiXHJcbiAgICB9YCxcclxuICAgIFtjaXR5Q29kZSwgc3RyZWV0TmFtZV1cclxuICApO1xyXG5cclxuICBpZiAocm93TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCByb3cgPSByb3dMaXN0WzBdO1xyXG4gICAgaWYgKHJvdy5zdHJlZXRfbmFtZSAhPT0gc3RyZWV0TmFtZSkge1xyXG4gICAgICAvLyBlcnJvcnMucHVzaChcclxuICAgICAgLy8gICBgU3RyZWV0ICcke3N0cmVldE5hbWV9JyBoYXMgd3JvbmcgY2FzZSwgY29ycmVjdCBjYXNlOiAnJHtyb3cuc3RyZWV0X25hbWV9Jy5gXHJcbiAgICAgIC8vICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBleGlzdHM6IHRydWUsIGVycm9ycyB9O1xyXG4gIH1cclxuXHJcbiAgaWYgKGxhc3RGb3VuZGVyICE9PSBmb3VuZGVyKSB7XHJcbiAgICBhbGxTdHJlZXRzID0gYXdhaXQgZ2V0QWxsU3RyZWV0cyhjaXR5Q29kZSk7XHJcbiAgICBsYXN0Rm91bmRlciA9IGZvdW5kZXI7XHJcbiAgfVxyXG5cclxuICBjb25zdCBtYXRjaCA9IGFsbFN0cmVldHMuZmluZChcclxuICAgIChzKSA9PlxyXG4gICAgICBzLnRvTG9jYWxlTG93ZXJDYXNlKFwiY3MtQ1pcIikgPT09IHN0cmVldE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoXCJjcy1DWlwiKVxyXG4gICk7XHJcbiAgbGV0IGV4aXN0cyA9IGZhbHNlO1xyXG4gIGlmIChtYXRjaCkge1xyXG4gICAgZXhpc3RzID0gdHJ1ZTtcclxuICAgIGlmIChzdHJlZXROYW1lICE9PSBtYXRjaCkge1xyXG4gICAgICAvLyBlcnJvcnMucHVzaChcclxuICAgICAgLy8gICBgU3RyZWV0ICcke3N0cmVldE5hbWV9JyBoYXMgd3JvbmcgY2FzZSwgY29ycmVjdCBjYXNlOiAnJHttYXRjaH0nLmBcclxuICAgICAgLy8gKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgY2xvc2VzdCA9IGZpbmRDbG9zZXN0U3RyaW5nKHN0cmVldE5hbWUsIGFsbFN0cmVldHMpO1xyXG4gICAgZXJyb3JzLnB1c2goe1xyXG4gICAgICBtZXNzYWdlOiBgVWxpY2UgJyR7c3RyZWV0TmFtZX0nIHYgdMOpdG8gb2JjaSBuZWV4aXN0dWplLCBteXNsZWxpIGpzdGUgJyR7Y2xvc2VzdH0nP2AsXHJcbiAgICAgIHN0YXJ0T2Zmc2V0OiAwLFxyXG4gICAgICBlbmRPZmZzZXQ6IHN0cmVldE5hbWUubGVuZ3RoICsgMSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByZXR1cm4geyBleGlzdHM6IGZhbHNlLCBlcnJvcnMgfTtcclxufTtcclxuXHJcbmNvbnN0IGdldEFsbFN0cmVldHMgPSBhc3luYyAoY2l0eUNvZGU6IG51bWJlcik6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcclxuICBjb25zdCBrbmV4ID0gZ2V0S25leERiKCk7XHJcbiAgcmV0dXJuIGF3YWl0IGtuZXgucGx1Y2soXCJuYW1lXCIpLmZyb20oXCJzdHJlZXRcIikud2hlcmUoXCJjaXR5X2NvZGVcIiwgY2l0eUNvZGUpO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgRmluZEFkZHJlc3NQb2ludHNQYXJhbXMgPVxyXG4gIHwge1xyXG4gICAgICB0eXBlOiBcInNtZExpbmVcIjtcclxuICAgICAgc21kTGluZTogU21kTGluZTtcclxuICAgICAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHk7XHJcbiAgICAgIG11bmljaXBhbGl0eVBhcnRDb2RlPzogbnVtYmVyO1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiO1xyXG4gICAgICBtdW5pY2lwYWxpdHlQYXJ0Q29kZTogbnVtYmVyO1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5XCI7XHJcbiAgICAgIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5O1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5Tm9TdHJlZXROYW1lXCI7XHJcbiAgICAgIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5O1xyXG4gICAgfTtcclxuXHJcbmV4cG9ydCBjb25zdCBmaW5kQWRkcmVzc1BvaW50cyA9IGFzeW5jIChcclxuICBwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zXHJcbik6IFByb21pc2U8QWRkcmVzc1BvaW50W10+ID0+IHtcclxuICBjb25zdCBxdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zKHBhcmFtcyk7XHJcbiAgY29uc3Qgc3RyZWV0Sm9pbkNvbmRpdGlvbiA9IGdldFN0cmVldEpvaW5Db25kaXRpb24ocGFyYW1zKTtcclxuXHJcbiAgY29uc3Qgd2hlcmVDb25kaXRpb24gPSBnZXRXaGVyZUNvbmRpdGlvbihwYXJhbXMpO1xyXG5cclxuICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHJhd1F1ZXJ5KFxyXG4gICAgYFNFTEVDVCBhLmlkLCBzLm5hbWUgQVMgc3RyZWV0X25hbWUsIG8ubmFtZSBBUyBvYmplY3RfdHlwZV9uYW1lLCBhLmRlc2NyaXB0aXZlX251bWJlcixcclxuICAgICAgYS5vcmllbnRhdGlvbmFsX251bWJlciwgYS5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIsIGMubmFtZSBBUyBjaXR5X25hbWUsXHJcbiAgICAgIGQubmFtZSBBUyBkaXN0cmljdF9uYW1lLCBtLm5hbWUgQVMgbXVuaWNpcGFsaXR5X3BhcnRfbmFtZSwgcC5uYW1lIEFTIHByYWd1ZV9kaXN0cmljdF9uYW1lLFxyXG4gICAgICBhLnBvc3RhbF9jb2RlLCBhLndnczg0X2xhdGl0dWRlLCBhLndnczg0X2xvbmdpdHVkZVxyXG4gICAgRlJPTSBhZGRyZXNzX3BvaW50IGFcclxuICAgICR7c3RyZWV0Sm9pbkNvbmRpdGlvbn1cclxuICAgIElOTkVSIEpPSU4gb2JqZWN0X3R5cGUgbyBPTiBvLmlkID0gYS5vYmplY3RfdHlwZV9pZFxyXG4gICAgSU5ORVIgSk9JTiBjaXR5IGMgT04gYy5jb2RlID0gYS5jaXR5X2NvZGVcclxuICAgIExFRlQgSk9JTiBjaXR5X2Rpc3RyaWN0IGQgT04gYS5jaXR5X2Rpc3RyaWN0X2NvZGUgPSBkLmNvZGVcclxuICAgIExFRlQgSk9JTiBtdW5pY2lwYWxpdHlfcGFydCBtIE9OIGEubXVuaWNpcGFsaXR5X3BhcnRfY29kZSA9IG0uY29kZVxyXG4gICAgTEVGVCBKT0lOIHByYWd1ZV9kaXN0cmljdCBwIE9OIGEucHJhZ3VlX2Rpc3RyaWN0X2NvZGUgPSBwLmNvZGVcclxuICAgIFdIRVJFICR7d2hlcmVDb25kaXRpb259YCxcclxuICAgIHF1ZXJ5UGFyYW1zXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIGZpbHRlckFkZHJlc3NQb2ludHMocXVlcnlSZXN1bHQubWFwKHJvd1RvQWRkcmVzc1BvaW50KSwgcGFyYW1zKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBmaWx0ZXJBZGRyZXNzUG9pbnRzID0gKFxyXG4gIGFkZHJlc3NQb2ludHM6IEFkZHJlc3NQb2ludFtdLFxyXG4gIHBhcmFtczogRmluZEFkZHJlc3NQb2ludHNQYXJhbXNcclxuKTogQWRkcmVzc1BvaW50W10gPT4ge1xyXG4gIGlmIChcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5XCIgfHxcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5Tm9TdHJlZXROYW1lXCIgfHxcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gYWRkcmVzc1BvaW50cztcclxuICB9XHJcblxyXG4gIGNvbnN0IHJlc3VsdDogQWRkcmVzc1BvaW50W10gPSBbXTtcclxuICBjb25zdCBudW1iZXJTcGVjID0gcGFyYW1zLnNtZExpbmUubnVtYmVyU3BlYztcclxuICBpZiAoaXNTZXJpZXNTcGVjQXJyYXkobnVtYmVyU3BlYykpIHtcclxuICAgIG51bWJlclNwZWMuZm9yRWFjaCgoc2VyaWVzU3BlYykgPT4ge1xyXG4gICAgICByZXN1bHQucHVzaCguLi5maWx0ZXJBZGRyZXNzUG9pbnRzQnlSYW5nZXMoYWRkcmVzc1BvaW50cywgc2VyaWVzU3BlYykpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gd2hlbiBubyBudW1iZXIgc3BlY3MgYXJlIHByZXNlbnQsIHdlIHRha2UgZXZlcnl0aGluZ1xyXG4gICAgaWYgKG51bWJlclNwZWMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKC4uLmFkZHJlc3NQb2ludHMpO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoaXNOZWdhdGl2ZVNlcmllc1NwZWMobnVtYmVyU3BlYykpIHtcclxuICAgIC8vIG5lZ2F0aXZlIG51bWJlciBzcGVjIChlLmcuIG9kZCBudW1iZXJzIGV4Y2VwdCAxMy0xNylcclxuICAgIGNvbnN0IHRvRXhjbHVkZSA9IGZpbHRlckFkZHJlc3NQb2ludHNCeVJhbmdlcyhhZGRyZXNzUG9pbnRzLCBudW1iZXJTcGVjKTtcclxuICAgIHJlc3VsdC5wdXNoKFxyXG4gICAgICAuLi5hZGRyZXNzUG9pbnRzLmZpbHRlcihcclxuICAgICAgICAoYWRkcmVzc1BvaW50KSA9PiAhdG9FeGNsdWRlLmluY2x1ZGVzKGFkZHJlc3NQb2ludClcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5jb25zdCBmaWx0ZXJBZGRyZXNzUG9pbnRzQnlSYW5nZXMgPSAoXHJcbiAgYWRkcmVzc1BvaW50czogQWRkcmVzc1BvaW50W10sXHJcbiAgc2VyaWVzU3BlYzogU2VyaWVzU3BlY1xyXG4pOiBBZGRyZXNzUG9pbnRbXSA9PiB7XHJcbiAgY29uc3QgcmVzdWx0OiBBZGRyZXNzUG9pbnRbXSA9IFtdO1xyXG4gIHNlcmllc1NwZWMucmFuZ2VzLmZvckVhY2goKHJhbmdlKSA9PiB7XHJcbiAgICByZXN1bHQucHVzaChcclxuICAgICAgLi4uYWRkcmVzc1BvaW50cy5maWx0ZXIoKGFkZHJlc3NQb2ludCkgPT4ge1xyXG4gICAgICAgIGlmIChpc1JhbmdlKHJhbmdlKSkge1xyXG4gICAgICAgICAgY29uc3QgbnVtYmVyID0gZ2V0TnVtYmVyQnlUeXBlKHNlcmllc1NwZWMudHlwZSwgYWRkcmVzc1BvaW50KTtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGlzSW5SYW5nZShcclxuICAgICAgICAgICAgICBudW1iZXIsXHJcbiAgICAgICAgICAgICAgc2VyaWVzU3BlYy50eXBlICE9PSBTZXJpZXNUeXBlLkRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICA/IGFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyID8/IG51bGxcclxuICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgICAgICByYW5nZVxyXG4gICAgICAgICAgICApICYmIGZpdHNUeXBlKG51bWJlciwgc2VyaWVzU3BlYy50eXBlKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZnVsbFN0cmVldE51bWJlcjogRnVsbFN0cmVldE51bWJlciA9IHJhbmdlO1xyXG4gICAgICAgICAgcmV0dXJuIGVxdWFsc0Z1bGxTdHJlZXROdW1iZXIoZnVsbFN0cmVldE51bWJlciwgYWRkcmVzc1BvaW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH0pO1xyXG5cclxuICAvLyB3aGVuIG5vIHNlcmllcyBzcGVjcyBhcmUgcHJlc2VudCwgd2UgdGFrZSBldmVyeXRoaW5nIHRoYXQgZml0cyB0aGUgdHlwZVxyXG4gIGlmIChzZXJpZXNTcGVjLnJhbmdlcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJlc3VsdC5wdXNoKFxyXG4gICAgICAuLi5hZGRyZXNzUG9pbnRzLmZpbHRlcigoYWRkcmVzc1BvaW50KSA9PlxyXG4gICAgICAgIGZpdHNUeXBlKFxyXG4gICAgICAgICAgZ2V0TnVtYmVyQnlUeXBlKHNlcmllc1NwZWMudHlwZSwgYWRkcmVzc1BvaW50KSxcclxuICAgICAgICAgIHNlcmllc1NwZWMudHlwZVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlQYXJhbXMgPSAoXHJcbiAgcGFyYW1zOiBGaW5kQWRkcmVzc1BvaW50c1BhcmFtc1xyXG4pOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcclxuICBpZiAocGFyYW1zLnR5cGUgPT09IFwic21kTGluZVwiICYmIHBhcmFtcy5zbWRMaW5lLnR5cGUgPT09IFwic3RyZWV0XCIpIHtcclxuICAgIHJldHVybiBbcGFyYW1zLnNtZExpbmUuc3RyZWV0LCBwYXJhbXMubXVuaWNpcGFsaXR5LmNvZGVdO1xyXG4gIH1cclxuXHJcbiAgaWYgKFxyXG4gICAgKHBhcmFtcy50eXBlID09PSBcInNtZExpbmVcIiAmJiBwYXJhbXMuc21kTGluZS50eXBlID09PSBcIm11bmljaXBhbGl0eVBhcnRcIikgfHxcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gW3BhcmFtcy5tdW5pY2lwYWxpdHlQYXJ0Q29kZV07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gW3BhcmFtcy5tdW5pY2lwYWxpdHkuY29kZV07XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0U3RyZWV0Sm9pbkNvbmRpdGlvbiA9IChcclxuICBwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zXHJcbik6IHN0cmluZyA9PiB7XHJcbiAgaWYgKHBhcmFtcy50eXBlID09PSBcInNtZExpbmVcIiAmJiBwYXJhbXMuc21kTGluZS50eXBlID09PSBcInN0cmVldFwiKSB7XHJcbiAgICByZXR1cm4gYEpPSU4gc3RyZWV0IHMgT04gYS5zdHJlZXRfY29kZSA9IHMuY29kZSBBTkQgcy5uYW1lID0gPyAke1xyXG4gICAgICBpc1NxbGl0ZShnZXRLbmV4RGIoKSkgPyBcIkNPTExBVEUgTk9DQVNFXCIgOiBcIlwiXHJcbiAgICB9YDtcclxuICB9XHJcbiAgcmV0dXJuIFwiTEVGVCBKT0lOIHN0cmVldCBzIE9OIGEuc3RyZWV0X2NvZGUgPSBzLmNvZGVcIjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRXaGVyZUNvbmRpdGlvbiA9IChwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zKTogc3RyaW5nID0+IHtcclxuICBpZiAoXHJcbiAgICAocGFyYW1zLnR5cGUgPT09IFwic21kTGluZVwiICYmIHBhcmFtcy5zbWRMaW5lLnR5cGUgPT09IFwibXVuaWNpcGFsaXR5UGFydFwiKSB8fFxyXG4gICAgcGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlQYXJ0XCJcclxuICApIHtcclxuICAgIHJldHVybiBcImEubXVuaWNpcGFsaXR5X3BhcnRfY29kZSA9ID9cIjtcclxuICB9XHJcblxyXG4gIGlmIChwYXJhbXMudHlwZSA9PT0gXCJ3aG9sZU11bmljaXBhbGl0eU5vU3RyZWV0TmFtZVwiKSB7XHJcbiAgICByZXR1cm4gYCR7Z2V0TXVuaWNpcGFsaXR5V2hlcmUoXHJcbiAgICAgIFwiYVwiLFxyXG4gICAgICBwYXJhbXMubXVuaWNpcGFsaXR5XHJcbiAgICApfSBBTkQgYS5zdHJlZXRfY29kZSBJUyBOVUxMYDtcclxuICB9XHJcblxyXG4gIHJldHVybiBnZXRNdW5pY2lwYWxpdHlXaGVyZShcImFcIiwgcGFyYW1zLm11bmljaXBhbGl0eSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNJblJhbmdlID0gKFxyXG4gIG51bWJlcjogbnVtYmVyIHwgbnVsbCxcclxuICBsZXR0ZXI6IHN0cmluZyB8IG51bGwsXHJcbiAgcmFuZ2U6IFJhbmdlU3BlY1xyXG4pOiBib29sZWFuID0+IHtcclxuICBpZiAobnVtYmVyID09PSBudWxsKSB7XHJcbiAgICByZXR1cm4gIXJhbmdlLmZyb20gJiYgIXJhbmdlLnRvO1xyXG4gIH1cclxuXHJcbiAgLy8gZXhwbGFpbmVyOiBlaXRoZXIgdGhlIGxvd2VyIGJvdW5kIGlzIG5vdCBzZXQsIG9yIGl0IGlzIGxvd2VyIHRoYW4gdGhlIG51bWJlclxyXG4gIC8vIGlmIGl0J3MgZXF1YWwgdG8gdGhlIG51bWJlciwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBsZXR0ZXIgLSBpZiBpdCdzIG5vdCBzZXQsIHdlIGRvbid0IGNhcmVcclxuICAvLyBpZiBmcm9tLmxldHRlciBpcyBzZXQsIHdlIG5lZWQgdG8gaGF2ZSBhIGxldHRlciBzZXQgYW5kIGl0IGhhcyB0byBiZSBncmVhdGVyIG9yIGVxdWFsOlxyXG4gIC8vIG51bWJlciB3aXRob3V0IGxldHRlciBjb3VudHMgbG93ZXIgdGhhbiBudW1iZXIgd2l0aCBsZXR0ZXIgJ2EnIChlLmcuIDIzIDwgMjNhKVxyXG4gIGNvbnN0IHNhdGlzZmllc0Zyb20gPVxyXG4gICAgIXJhbmdlLmZyb20gfHxcclxuICAgIG51bWJlciA+IHJhbmdlLmZyb20ubnVtYmVyIHx8XHJcbiAgICAobnVtYmVyID09PSByYW5nZS5mcm9tLm51bWJlciAmJlxyXG4gICAgICAoIXJhbmdlLmZyb20ubGV0dGVyIHx8ICghIWxldHRlciAmJiBsZXR0ZXIgPj0gcmFuZ2UuZnJvbS5sZXR0ZXIpKSk7XHJcblxyXG4gIGNvbnN0IHNhdGlzZmllc1RvID1cclxuICAgICFyYW5nZS50byB8fFxyXG4gICAgbnVtYmVyIDwgcmFuZ2UudG8ubnVtYmVyIHx8XHJcbiAgICAobnVtYmVyID09PSByYW5nZS50by5udW1iZXIgJiZcclxuICAgICAgKCFsZXR0ZXIgfHxcclxuICAgICAgICAoISFyYW5nZS50by5sZXR0ZXIgJiYgISFsZXR0ZXIgJiYgbGV0dGVyIDw9IHJhbmdlLnRvLmxldHRlcikpKTtcclxuXHJcbiAgcmV0dXJuIHNhdGlzZmllc0Zyb20gJiYgc2F0aXNmaWVzVG87XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZml0c1R5cGUgPSAobnVtYmVyOiBudW1iZXIgfCBudWxsLCB0eXBlOiBTZXJpZXNUeXBlKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGUgPT09IFNlcmllc1R5cGUuRGVzY3JpcHRpb24gfHxcclxuICAgIHR5cGUgPT09IFNlcmllc1R5cGUuQWxsIHx8XHJcbiAgICAodHlwZSA9PT0gU2VyaWVzVHlwZS5PZGQgJiYgbnVtYmVyICUgMiA9PT0gMSkgfHxcclxuICAgICh0eXBlID09PSBTZXJpZXNUeXBlLkV2ZW4gJiYgbnVtYmVyICUgMiA9PT0gMClcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVxdWFsc0Z1bGxTdHJlZXROdW1iZXIgPSAoXHJcbiAgZnVsbFN0cmVldE51bWJlcjogRnVsbFN0cmVldE51bWJlcixcclxuICBhZGRyZXNzUG9pbnQ6IEFkZHJlc3NQb2ludFxyXG4pOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgZnVsbFN0cmVldE51bWJlci5kZXNjcmlwdGlvbk51bWJlci5udW1iZXIgPT09IGFkZHJlc3NQb2ludC5ob3VzZU51bWJlciAmJlxyXG4gICAgZnVsbFN0cmVldE51bWJlci5vcmllbnRhdGlvbmFsTnVtYmVyLm51bWJlciA9PT1cclxuICAgICAgYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXIgJiZcclxuICAgICgoIWZ1bGxTdHJlZXROdW1iZXIub3JpZW50YXRpb25hbE51bWJlci5sZXR0ZXIgJiZcclxuICAgICAgIWFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyKSB8fFxyXG4gICAgICBmdWxsU3RyZWV0TnVtYmVyLm9yaWVudGF0aW9uYWxOdW1iZXIubGV0dGVyID09PVxyXG4gICAgICAgIGFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyKVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBnZXROdW1iZXJCeVR5cGUgPSAoXHJcbiAgdHlwZTogU2VyaWVzVHlwZSxcclxuICBhZGRyZXNzUG9pbnQ6IEFkZHJlc3NQb2ludFxyXG4pOiBudW1iZXIgfCBudWxsID0+IHtcclxuICByZXR1cm4gdHlwZSA9PT0gU2VyaWVzVHlwZS5EZXNjcmlwdGlvblxyXG4gICAgPyBhZGRyZXNzUG9pbnQuaG91c2VOdW1iZXJcclxuICAgIDogYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXIgPz8gbnVsbDtcclxufTtcclxuXHJcbmNvbnN0IGdldE11bmljaXBhbGl0eVdoZXJlID0gKFxyXG4gIGFsaWFzOiBzdHJpbmcsXHJcbiAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHlcclxuKTogc3RyaW5nID0+IHtcclxuICByZXR1cm4gbXVuaWNpcGFsaXR5LnR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eVxyXG4gICAgPyBgJHthbGlhc30uY2l0eV9jb2RlID0gP2BcclxuICAgIDogYCR7YWxpYXN9LmNpdHlfZGlzdHJpY3RfY29kZSA9ID9gO1xyXG59O1xyXG5cclxuY29uc3Qgcm93VG9BZGRyZXNzUG9pbnQgPSAocm93OiBhbnkpOiBBZGRyZXNzUG9pbnQgPT4ge1xyXG4gIGNvbnN0IHBvaW50OiBBZGRyZXNzUG9pbnQgPSB7XHJcbiAgICBpZDogcm93LmlkLFxyXG4gICAgYWRkcmVzczogXCJcIixcclxuICAgIHR5cGU6XHJcbiAgICAgIHJvdy5vYmplY3RfdHlwZV9uYW1lID09PSBEZXNjcmlwdGl2ZVR5cGVcclxuICAgICAgICA/IEFkZHJlc3NQb2ludFR5cGUuRGVzY3JpcHRpb25cclxuICAgICAgICA6IEFkZHJlc3NQb2ludFR5cGUuUmVnaXN0cmF0aW9uLFxyXG4gICAgaG91c2VOdW1iZXI6IHJvdy5kZXNjcmlwdGl2ZV9udW1iZXIsXHJcbiAgICBjaXR5OiByb3cuY2l0eV9uYW1lLFxyXG4gICAgbXVuaWNpcGFsaXR5UGFydDogcm93Lm11bmljaXBhbGl0eV9wYXJ0X25hbWUsXHJcbiAgICBwb3N0YWxDb2RlOiByb3cucG9zdGFsX2NvZGUsXHJcbiAgICBsYXQ6IHJvdy53Z3M4NF9sYXRpdHVkZSxcclxuICAgIGxuZzogcm93Lndnczg0X2xvbmdpdHVkZSxcclxuICB9O1xyXG4gIGlmIChyb3cuc3RyZWV0X25hbWUgIT09IG51bGwpIHtcclxuICAgIHBvaW50LnN0cmVldCA9IHJvdy5zdHJlZXRfbmFtZTtcclxuICB9XHJcbiAgaWYgKHJvdy5vcmllbnRhdGlvbmFsX251bWJlciAhPT0gbnVsbCkge1xyXG4gICAgcG9pbnQub3JpZW50YXRpb25hbE51bWJlciA9IHJvdy5vcmllbnRhdGlvbmFsX251bWJlcjtcclxuICB9XHJcbiAgaWYgKHJvdy5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIgIT09IG51bGwpIHtcclxuICAgIHBvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXIgPSByb3cub3JpZW50YXRpb25hbF9udW1iZXJfbGV0dGVyO1xyXG4gIH1cclxuICBpZiAocm93LmRpc3RyaWN0X25hbWUgIT09IG51bGwpIHtcclxuICAgIHBvaW50LmRpc3RyaWN0ID0gcm93LmRpc3RyaWN0X25hbWU7XHJcbiAgfVxyXG4gIGlmIChyb3cucHJhZ3VlX2Rpc3RyaWN0X25hbWUgIT09IG51bGwpIHtcclxuICAgIHBvaW50LnByYWd1ZURpc3RyaWN0ID0gcm93LnByYWd1ZV9kaXN0cmljdF9uYW1lO1xyXG4gIH1cclxuICBwb2ludC5hZGRyZXNzID0gY3JlYXRlU2luZ2xlTGluZUFkZHJlc3MocG9pbnQpO1xyXG4gIHJldHVybiBwb2ludDtcclxufTtcclxuIl19
|
|
399
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1wb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvYWRkcmVzcy1wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFLTCxVQUFVLEVBR1Ysb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxpQkFBaUIsR0FDbEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RSxPQUFPLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLE9BQU8sRUFDUCxRQUFRLEVBQ1IsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQXlCLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xFLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUVqQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7QUFFakMsTUFBTSxXQUFXLEdBQUc7SUFDbEIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO0lBQ3BCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO0NBQ3RCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUc7SUFDcEIsT0FBTyxFQUFFLENBQUM7SUFDVixRQUFRLEVBQUUsQ0FBQztJQUNYLFFBQVEsRUFBRSxDQUFDO0lBQ1gsWUFBWSxFQUFFLENBQUM7SUFDZixZQUFZLEVBQUUsQ0FBQztJQUNmLGtCQUFrQixFQUFFLENBQUM7SUFD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YUFBYSxDQUFDO0tBQ3BDO0lBQ0QsSUFBSSxHQUFHLENBQUMsb0JBQW9CLEtBQUssSUFBSSxFQUFFO1FBQ3JDLEtBQUssQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixDQUFDO0tBQ2pEO0lBQ0QsS0FBSyxDQUFDLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3NQb2ludFR5cGUsIGNyZWF0ZVNpbmdsZUxpbmVBZGRyZXNzIH0gZnJvbSBcImN6ZWNoLWFkZHJlc3NcIjtcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzUG9pbnQsXHJcbiAgRnVsbFN0cmVldE51bWJlcixcclxuICBSYW5nZVNwZWMsXHJcbiAgU2VyaWVzU3BlYyxcclxuICBTZXJpZXNUeXBlLFxyXG4gIFNtZEVycm9yLFxyXG4gIFNtZExpbmUsXHJcbiAgaXNOZWdhdGl2ZVNlcmllc1NwZWMsXHJcbiAgaXNSYW5nZSxcclxuICBpc1Nlcmllc1NwZWNBcnJheSxcclxufSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3R5cGVzXCI7XHJcbmltcG9ydCB7IGZpbmRDbG9zZXN0U3RyaW5nLCByb3VuZFRvTkRlY2ltYWxQbGFjZXMgfSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQganRzazJ3Z3M4NCBmcm9tIFwiLi4vdXRpbHMvanRzazJ3Z3M4NFwiO1xyXG5pbXBvcnQge1xyXG4gIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyxcclxuICBnZW5lcmF0ZTJEUGxhY2Vob2xkZXJzLFxyXG4gIGdldEtuZXhEYixcclxuICBpbnNlcnRNdWx0aXBsZVJvd3MsXHJcbiAgaXNNeXNxbCxcclxuICBpc1NxbGl0ZSxcclxuICBub25FbXB0eU9yTnVsbCxcclxuICByYXdRdWVyeSxcclxufSBmcm9tIFwiLi9kYlwiO1xyXG5pbXBvcnQgeyBnZXRGb3VuZGVyQ2l0eUNvZGUgfSBmcm9tIFwiLi9mb3VuZGVyc1wiO1xyXG5pbXBvcnQgeyBGb3VuZGVyLCBNdW5pY2lwYWxpdHksIE11bmljaXBhbGl0eVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5pbXBvcnQgY2h1bmsgZnJvbSBcImxvZGFzaC9jaHVua1wiO1xyXG5cclxuY29uc3QgRGVzY3JpcHRpdmVUeXBlID0gXCLEjS5wLlwiO1xyXG5jb25zdCBSZWdpc3RyYXRpb25UeXBlID0gXCLEjS5ldi5cIjtcclxuXHJcbmNvbnN0IE9iamVjdFR5cGVzID0ge1xyXG4gIFtEZXNjcmlwdGl2ZVR5cGVdOiAxLFxyXG4gIFtSZWdpc3RyYXRpb25UeXBlXTogMixcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBDb2x1bW4gPSB7XHJcbiAgYWRtQ29kZTogMCxcclxuICBjaXR5Q29kZTogMSxcclxuICBjaXR5TmFtZTogMixcclxuICBkaXN0cmljdENvZGU6IDMsXHJcbiAgZGlzdHJpY3ROYW1lOiA0LFxyXG4gIHByYWd1ZURpc3RyaWN0Q29kZTogNSxcclxuICBwcmFndWVEaXN0cmljdE5hbWU6IDYsXHJcbiAgbXVuaWNpcGFsaXR5UGFydENvZGU6IDcsXHJcbiAgbXVuaWNpcGFsaXR5UGFydE5hbWU6IDgsXHJcbiAgc3RyZWV0Q29kZTogOSxcclxuICBzdHJlZXROYW1lOiAxMCxcclxuICBvYmplY3RUeXBlOiAxMSxcclxuICBob3VzZU51bWJlcjogMTIsXHJcbiAgb3JpZW50YXRpb25hbE51bWJlcjogMTMsXHJcbiAgb3JpZW50YXRpb25hbE51bWJlckxldHRlcjogMTQsXHJcbiAgcG9zdGFsQ29kZTogMTUsXHJcbiAgeUNvb3JkaW5hdGU6IDE2LFxyXG4gIHhDb29yZGluYXRlOiAxNyxcclxuICB2YWxpZEZyb206IDE4LFxyXG59O1xyXG5cclxuY29uc3QgY29sdW1uTmFtZXMgPSBbXHJcbiAgXCJpZFwiLFxyXG4gIFwic3RyZWV0X2NvZGVcIixcclxuICBcIm9iamVjdF90eXBlX2lkXCIsXHJcbiAgXCJkZXNjcmlwdGl2ZV9udW1iZXJcIixcclxuICBcIm9yaWVudGF0aW9uYWxfbnVtYmVyXCIsXHJcbiAgXCJvcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXJcIixcclxuICBcImNpdHlfY29kZVwiLFxyXG4gIFwiY2l0eV9kaXN0cmljdF9jb2RlXCIsXHJcbiAgXCJtdW5pY2lwYWxpdHlfcGFydF9jb2RlXCIsXHJcbiAgXCJwcmFndWVfZGlzdHJpY3RfY29kZVwiLFxyXG4gIFwicG9zdGFsX2NvZGVcIixcclxuICBcImp0c2tfeFwiLFxyXG4gIFwianRza195XCIsXHJcbiAgXCJ3Z3M4NF9sYXRpdHVkZVwiLFxyXG4gIFwid2dzODRfbG9uZ2l0dWRlXCIsXHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgY29tbWl0QWRkcmVzc1BvaW50cyA9IGFzeW5jIChcclxuICBidWZmZXI6IHN0cmluZ1tdW11cclxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG4gIGF3YWl0IGluc2VydENpdGllcyhidWZmZXIpO1xyXG4gIGF3YWl0IGluc2VydERpc3RyaWN0cyhidWZmZXIpO1xyXG4gIGF3YWl0IGluc2VydE11bmljaXBhbGl0eVBhcnRzKGJ1ZmZlcik7XHJcbiAgYXdhaXQgaW5zZXJ0U3RyZWV0cyhidWZmZXIpO1xyXG4gIGF3YWl0IGluc2VydFByYWd1ZURpc3RyaWN0cyhidWZmZXIpO1xyXG5cclxuICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIChzdHJpbmcgfCBudWxsKVtdPiA9IHt9O1xyXG4gIGJ1ZmZlci5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICBsZXQgbGF0T3JOdWxsOiBzdHJpbmcsIGxvbk9yTnVsbDogc3RyaW5nO1xyXG4gICAgbGF0T3JOdWxsID0gbnVsbDtcclxuICAgIGxvbk9yTnVsbCA9IG51bGw7XHJcbiAgICBpZiAoZGF0YVtDb2x1bW4ueENvb3JkaW5hdGVdICYmIGRhdGFbQ29sdW1uLnlDb29yZGluYXRlXSkge1xyXG4gICAgICBjb25zdCB7IGxhdCwgbG9uIH0gPSBqdHNrMndnczg0KFxyXG4gICAgICAgIHBhcnNlRmxvYXQoZGF0YVtDb2x1bW4ueENvb3JkaW5hdGVdKSxcclxuICAgICAgICBwYXJzZUZsb2F0KGRhdGFbQ29sdW1uLnlDb29yZGluYXRlXSlcclxuICAgICAgKTtcclxuICAgICAgW2xhdE9yTnVsbCwgbG9uT3JOdWxsXSA9IFtsYXQudG9TdHJpbmcoKSwgbG9uLnRvU3RyaW5nKCldO1xyXG4gICAgfVxyXG4gICAgcGFyYW1zW2RhdGFbQ29sdW1uLmFkbUNvZGVdXSA9IFtcclxuICAgICAgZGF0YVtDb2x1bW4uYWRtQ29kZV0sXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLnN0cmVldENvZGVdKSxcclxuICAgICAgT2JqZWN0VHlwZXNbZGF0YVtDb2x1bW4ub2JqZWN0VHlwZV1dLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5ob3VzZU51bWJlcl0pLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5vcmllbnRhdGlvbmFsTnVtYmVyXSksXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXJdKSxcclxuICAgICAgZGF0YVtDb2x1bW4uY2l0eUNvZGVdLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5kaXN0cmljdENvZGVdKSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ubXVuaWNpcGFsaXR5UGFydENvZGVdKSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ucHJhZ3VlRGlzdHJpY3RDb2RlXSksXHJcbiAgICAgIGRhdGFbQ29sdW1uLnBvc3RhbENvZGVdLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi54Q29vcmRpbmF0ZV0pLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi55Q29vcmRpbmF0ZV0pLFxyXG4gICAgICBsYXRPck51bGwsXHJcbiAgICAgIGxvbk9yTnVsbCxcclxuICAgIF07XHJcbiAgfSk7XHJcblxyXG4gIC8vIGZpbmQgYWxyZWFkeSBleGlzdGluZyByb3dzXHJcbiAgY29uc3QgZXhpc3RpbmdSb3dzID0gYXdhaXQgcmF3UXVlcnkoXHJcbiAgICBgU0VMRUNUICogRlJPTSBhZGRyZXNzX3BvaW50IFdIRVJFIGlkIElOICgke2J1ZmZlclxyXG4gICAgICAubWFwKChkYXRhKSA9PiBkYXRhW0NvbHVtbi5hZG1Db2RlXSlcclxuICAgICAgLmpvaW4oXCIsXCIpfSlgXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgcXVlcmllcyA9IFtdO1xyXG4gIGZvciAoY29uc3Qgcm93IG9mIGV4aXN0aW5nUm93cykge1xyXG4gICAgY29uc3QgdG9JbnNlcnQgPSBwYXJhbXNbcm93LmlkXTtcclxuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMocm93KTtcclxuICAgIGlmICghdG9JbnNlcnQuZXZlcnkoKHYsIGkpID0+IHZhbHVlc0VxdWFsKHYsIHZhbHVlc1tpXSkpKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSB0aG9zZSB3aG9zZSB2YWx1ZXMgZGlmZmVyXHJcbiAgICAgIHF1ZXJpZXMucHVzaChcclxuICAgICAgICByYXdRdWVyeShcclxuICAgICAgICAgIGBVUERBVEUgYWRkcmVzc19wb2ludCBTRVQgJHtjb2x1bW5OYW1lc1xyXG4gICAgICAgICAgICAubWFwKChjKSA9PiBgJHtjfSA9ID9gKVxyXG4gICAgICAgICAgICAuam9pbihcIiwgXCIpfSBXSEVSRSBpZCA9ID9gLFxyXG4gICAgICAgICAgWy4uLnRvSW5zZXJ0LCByb3cuaWRdXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXdhaXQgUHJvbWlzZS5hbGwocXVlcmllcyk7XHJcblxyXG4gIGNvbnN0IHBsYWNlSG9sZGVycyA9IGdlbmVyYXRlMkRQbGFjZWhvbGRlcnMoXHJcbiAgICBjb2x1bW5OYW1lcy5sZW5ndGgsXHJcbiAgICBidWZmZXIubGVuZ3RoXHJcbiAgKTtcclxuXHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG4gIGF3YWl0IHJhd1F1ZXJ5KFxyXG4gICAgYElOU0VSVCAke1xyXG4gICAgICBpc015c3FsKGtuZXgpID8gXCJJR05PUkVcIiA6IFwiXCJcclxuICAgIH0gSU5UTyBhZGRyZXNzX3BvaW50ICgke2NvbHVtbk5hbWVzLmpvaW4oXCIsXCIpfSkgVkFMVUVTICR7cGxhY2VIb2xkZXJzfSAke1xyXG4gICAgICAhaXNNeXNxbChrbmV4KSA/IFwiT04gQ09ORkxJQ1QgKGlkKSBETyBOT1RISU5HXCIgOiBcIlwiXHJcbiAgICB9YCxcclxuICAgIE9iamVjdC52YWx1ZXMocGFyYW1zKS5mbGF0KClcclxuICApO1xyXG5cclxuICByZXR1cm4gYnVmZmVyLmxlbmd0aDtcclxufTtcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1vdmVEZXByZWNhdGVkQWRkcmVzc1BvaW50cyhcclxuICBhbGxJZHM6IFNldDxudW1iZXI+XHJcbik6IFByb21pc2U8dm9pZD4ge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuICBjb25zdCBleGlzdGluZ0lkcyA9IGF3YWl0IGtuZXgucGx1Y2soXCJpZFwiKS5mcm9tKFwiYWRkcmVzc19wb2ludFwiKTtcclxuICBjb25zdCB0b1JlbW92ZSA9IGV4aXN0aW5nSWRzLmZpbHRlcigoaWQpID0+ICFhbGxJZHMuaGFzKGlkKSk7XHJcbiAgY29uc3QgY2h1bmtzID0gY2h1bmsodG9SZW1vdmUsIDEwMDApO1xyXG4gIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XHJcbiAgICBhd2FpdCBrbmV4KFwiYWRkcmVzc19wb2ludFwiKS53aGVyZUluKFwiaWRcIiwgY2h1bmspLmRlbGV0ZSgpO1xyXG4gIH1cclxuICBjb25zb2xlLmxvZyhgUmVtb3ZlZCAke3RvUmVtb3ZlLmxlbmd0aH0gZGVwcmVjYXRlZCBhZGRyZXNzIHBvaW50cy5gKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdmFsdWVzRXF1YWwoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gc2FuaXRpemVWYWx1ZShhKSA9PT0gc2FuaXRpemVWYWx1ZShiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2FuaXRpemVWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcclxuICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcblxyXG4gIGlmICgvXFxkK1xcLlxcZCsvLnRlc3QodmFsdWUpKSB7XHJcbiAgICByZXR1cm4gcm91bmRUb05EZWNpbWFsUGxhY2VzKHBhcnNlRmxvYXQodmFsdWUpLCA2KS50b1N0cmluZygpO1xyXG4gIH1cclxuICByZXR1cm4gdmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRDaXRpZXMgPSBhc3luYyAoYnVmZmVyOiBzdHJpbmdbXVtdKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLmNpdHlDb2RlLCBbQ29sdW1uLmNpdHlOYW1lXSksXHJcbiAgICBcImNpdHlcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnREaXN0cmljdHMgPSBhc3luYyAoYnVmZmVyOiBzdHJpbmdbXVtdKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLmRpc3RyaWN0Q29kZSwgW1xyXG4gICAgICBDb2x1bW4uY2l0eUNvZGUsXHJcbiAgICAgIENvbHVtbi5kaXN0cmljdE5hbWUsXHJcbiAgICBdKSxcclxuICAgIFwiY2l0eV9kaXN0cmljdFwiLFxyXG4gICAgW1wiY29kZVwiLCBcImNpdHlfY29kZVwiLCBcIm5hbWVcIl1cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydE11bmljaXBhbGl0eVBhcnRzID0gYXN5bmMgKFxyXG4gIGJ1ZmZlcjogc3RyaW5nW11bXVxyXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBleHRyYWN0S2V5VmFsdWVzUGFpcnMoYnVmZmVyLCBDb2x1bW4ubXVuaWNpcGFsaXR5UGFydENvZGUsIFtcclxuICAgICAgQ29sdW1uLm11bmljaXBhbGl0eVBhcnROYW1lLFxyXG4gICAgICBDb2x1bW4uY2l0eUNvZGUsXHJcbiAgICBdKSxcclxuICAgIFwibXVuaWNpcGFsaXR5X3BhcnRcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCIsIFwiY2l0eV9jb2RlXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRQcmFndWVEaXN0cmljdHMgPSBhc3luYyAoXHJcbiAgYnVmZmVyOiBzdHJpbmdbXVtdXHJcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyhidWZmZXIsIENvbHVtbi5wcmFndWVEaXN0cmljdENvZGUsIFtcclxuICAgICAgQ29sdW1uLnByYWd1ZURpc3RyaWN0TmFtZSxcclxuICAgIF0pLFxyXG4gICAgXCJwcmFndWVfZGlzdHJpY3RcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRTdHJlZXRzID0gYXN5bmMgKGJ1ZmZlcjogc3RyaW5nW11bXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyhidWZmZXIsIENvbHVtbi5zdHJlZXRDb2RlLCBbXHJcbiAgICAgIENvbHVtbi5jaXR5Q29kZSxcclxuICAgICAgQ29sdW1uLnN0cmVldE5hbWUsXHJcbiAgICBdKSxcclxuICAgIFwic3RyZWV0XCIsXHJcbiAgICBbXCJjb2RlXCIsIFwiY2l0eV9jb2RlXCIsIFwibmFtZVwiXVxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgYXJlQWRkcmVzc1BvaW50c1N5bmNlZCA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLmNvdW50KFwiKlwiLCB7IGFzOiBcImNvdW50QWxsXCIgfSlcclxuICAgIC5mcm9tKFwiYWRkcmVzc19wb2ludFwiKVxyXG4gICAgLmZpcnN0KCk7XHJcbiAgcmV0dXJuIE51bWJlcihyZXN1bHQuY291bnRBbGwpID49IDI5MDAwMDA7IC8vIHRvdGFsIGlzIGFsbW9zdCAzIG1pbGxpb25cclxufTtcclxuXHJcbmNvbnN0IGFkZHJlc3NQb2ludFNlbGVjdCA9IGBcclxuICBTRUxFQ1QgYS5pZCwgcy5uYW1lIEFTIHN0cmVldF9uYW1lLCBvLm5hbWUgQVMgb2JqZWN0X3R5cGVfbmFtZSwgYS5kZXNjcmlwdGl2ZV9udW1iZXIsXHJcbiAgICAgICAgYS5vcmllbnRhdGlvbmFsX251bWJlciwgYS5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIsIGMubmFtZSBBUyBjaXR5X25hbWUsXHJcbiAgICAgICAgbS5uYW1lIEFTIG11bmljaXBhbGl0eV9wYXJ0X25hbWUsIHAubmFtZSBBUyBwcmFndWVfZGlzdHJpY3RfbmFtZSxcclxuICAgICAgICBkLm5hbWUgQVMgZGlzdHJpY3RfbmFtZSwgYS5wb3N0YWxfY29kZSwgYS53Z3M4NF9sYXRpdHVkZSwgYS53Z3M4NF9sb25naXR1ZGVcclxuICBGUk9NIGFkZHJlc3NfcG9pbnQgYVxyXG4gIExFRlQgSk9JTiBzdHJlZXQgcyBPTiBhLnN0cmVldF9jb2RlID0gcy5jb2RlXHJcbiAgSU5ORVIgSk9JTiBvYmplY3RfdHlwZSBvIE9OIG8uaWQgPSBhLm9iamVjdF90eXBlX2lkXHJcbiAgSU5ORVIgSk9JTiBjaXR5IGMgT04gYy5jb2RlID0gYS5jaXR5X2NvZGVcclxuICBMRUZUIEpPSU4gY2l0eV9kaXN0cmljdCBkIE9OIGEuY2l0eV9kaXN0cmljdF9jb2RlID0gZC5jb2RlXHJcbiAgTEVGVCBKT0lOIHByYWd1ZV9kaXN0cmljdCBwIE9OIGEucHJhZ3VlX2Rpc3RyaWN0X2NvZGUgPSBwLmNvZGVcclxuICBMRUZUIEpPSU4gbXVuaWNpcGFsaXR5X3BhcnQgbSBPTiBhLm11bmljaXBhbGl0eV9wYXJ0X2NvZGUgPSBtLmNvZGVgO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEFkZHJlc3NQb2ludEJ5SWQgPSBhc3luYyAoXHJcbiAgYWRkcmVzc1BvaW50SWQ6IG51bWJlclxyXG4pOiBQcm9taXNlPEFkZHJlc3NQb2ludCB8IG51bGw+ID0+IHtcclxuICBjb25zdCByb3cgPSBhd2FpdCByYXdRdWVyeShcclxuICAgIGAke2FkZHJlc3NQb2ludFNlbGVjdH1cclxuICAgICAgV0hFUkUgYS5pZCA9ID9gLFxyXG4gICAgW2FkZHJlc3NQb2ludElkXVxyXG4gICk7XHJcbiAgaWYgKHJvdy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICByZXR1cm4gcm93VG9BZGRyZXNzUG9pbnQocm93WzBdKTtcclxufTtcclxuXHJcbmxldCBsYXN0Rm91bmRlcjogRm91bmRlciB8IG51bGwgPSBudWxsO1xyXG5sZXQgYWxsU3RyZWV0czogc3RyaW5nW10gPSBbXTtcclxuXHJcbmV4cG9ydCBjb25zdCBjaGVja1N0cmVldEV4aXN0cyA9IGFzeW5jIChcclxuICBzdHJlZXROYW1lOiBzdHJpbmcsXHJcbiAgZm91bmRlcjogRm91bmRlclxyXG4pOiBQcm9taXNlPHsgZXhpc3RzOiBib29sZWFuOyBlcnJvcnM6IFNtZEVycm9yW10gfT4gPT4ge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuICBjb25zdCBlcnJvcnM6IFNtZEVycm9yW10gPSBbXTtcclxuXHJcbiAgLy8gd2UgY2hlY2sgdGhlIHdob2xlIGNpdHlcclxuICBjb25zdCBjaXR5Q29kZSA9IGF3YWl0IGdldEZvdW5kZXJDaXR5Q29kZShcclxuICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSxcclxuICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZVxyXG4gICk7XHJcbiAgY29uc3Qgcm93TGlzdCA9IGF3YWl0IHJhd1F1ZXJ5KFxyXG4gICAgYFNFTEVDVCBuYW1lIEFTIHN0cmVldF9uYW1lXHJcbiAgICBGUk9NIHN0cmVldFxyXG4gICAgV0hFUkUgY2l0eV9jb2RlID0gPyBBTkQgbmFtZSA9ID8gICR7XHJcbiAgICAgIGlzU3FsaXRlKGtuZXgpID8gXCJDT0xMQVRFIE5PQ0FTRVwiIDogXCJcIlxyXG4gICAgfWAsXHJcbiAgICBbY2l0eUNvZGUsIHN0cmVldE5hbWVdXHJcbiAgKTtcclxuXHJcbiAgaWYgKHJvd0xpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgY29uc3Qgcm93ID0gcm93TGlzdFswXTtcclxuICAgIGlmIChyb3cuc3RyZWV0X25hbWUgIT09IHN0cmVldE5hbWUpIHtcclxuICAgICAgLy8gZXJyb3JzLnB1c2goXHJcbiAgICAgIC8vICAgYFN0cmVldCAnJHtzdHJlZXROYW1lfScgaGFzIHdyb25nIGNhc2UsIGNvcnJlY3QgY2FzZTogJyR7cm93LnN0cmVldF9uYW1lfScuYFxyXG4gICAgICAvLyApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZXhpc3RzOiB0cnVlLCBlcnJvcnMgfTtcclxuICB9XHJcblxyXG4gIGlmIChsYXN0Rm91bmRlciAhPT0gZm91bmRlcikge1xyXG4gICAgYWxsU3RyZWV0cyA9IGF3YWl0IGdldEFsbFN0cmVldHMoY2l0eUNvZGUpO1xyXG4gICAgbGFzdEZvdW5kZXIgPSBmb3VuZGVyO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgbWF0Y2ggPSBhbGxTdHJlZXRzLmZpbmQoXHJcbiAgICAocykgPT5cclxuICAgICAgcy50b0xvY2FsZUxvd2VyQ2FzZShcImNzLUNaXCIpID09PSBzdHJlZXROYW1lLnRvTG9jYWxlTG93ZXJDYXNlKFwiY3MtQ1pcIilcclxuICApO1xyXG4gIGxldCBleGlzdHMgPSBmYWxzZTtcclxuICBpZiAobWF0Y2gpIHtcclxuICAgIGV4aXN0cyA9IHRydWU7XHJcbiAgICBpZiAoc3RyZWV0TmFtZSAhPT0gbWF0Y2gpIHtcclxuICAgICAgLy8gZXJyb3JzLnB1c2goXHJcbiAgICAgIC8vICAgYFN0cmVldCAnJHtzdHJlZXROYW1lfScgaGFzIHdyb25nIGNhc2UsIGNvcnJlY3QgY2FzZTogJyR7bWF0Y2h9Jy5gXHJcbiAgICAgIC8vICk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IGNsb3Nlc3QgPSBmaW5kQ2xvc2VzdFN0cmluZyhzdHJlZXROYW1lLCBhbGxTdHJlZXRzKTtcclxuICAgIGVycm9ycy5wdXNoKHtcclxuICAgICAgbWVzc2FnZTogYFVsaWNlICcke3N0cmVldE5hbWV9JyB2IHTDqXRvIG9iY2kgbmVleGlzdHVqZSwgbXlzbGVsaSBqc3RlICcke2Nsb3Nlc3R9Jz9gLFxyXG4gICAgICBzdGFydE9mZnNldDogMCxcclxuICAgICAgZW5kT2Zmc2V0OiBzdHJlZXROYW1lLmxlbmd0aCArIDEsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmV0dXJuIHsgZXhpc3RzOiBmYWxzZSwgZXJyb3JzIH07XHJcbn07XHJcblxyXG5jb25zdCBnZXRBbGxTdHJlZXRzID0gYXN5bmMgKGNpdHlDb2RlOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZ1tdPiA9PiB7XHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG4gIHJldHVybiBhd2FpdCBrbmV4LnBsdWNrKFwibmFtZVwiKS5mcm9tKFwic3RyZWV0XCIpLndoZXJlKFwiY2l0eV9jb2RlXCIsIGNpdHlDb2RlKTtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zID1cclxuICB8IHtcclxuICAgICAgdHlwZTogXCJzbWRMaW5lXCI7XHJcbiAgICAgIHNtZExpbmU6IFNtZExpbmU7XHJcbiAgICAgIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5O1xyXG4gICAgICBtdW5pY2lwYWxpdHlQYXJ0Q29kZT86IG51bWJlcjtcclxuICAgIH1cclxuICB8IHtcclxuICAgICAgdHlwZTogXCJ3aG9sZU11bmljaXBhbGl0eVBhcnRcIjtcclxuICAgICAgbXVuaWNpcGFsaXR5UGFydENvZGU6IG51bWJlcjtcclxuICAgIH1cclxuICB8IHtcclxuICAgICAgdHlwZTogXCJ3aG9sZU11bmljaXBhbGl0eVwiO1xyXG4gICAgICBtdW5pY2lwYWxpdHk6IE11bmljaXBhbGl0eTtcclxuICAgIH1cclxuICB8IHtcclxuICAgICAgdHlwZTogXCJ3aG9sZU11bmljaXBhbGl0eU5vU3RyZWV0TmFtZVwiO1xyXG4gICAgICBtdW5pY2lwYWxpdHk6IE11bmljaXBhbGl0eTtcclxuICAgIH07XHJcblxyXG5leHBvcnQgY29uc3QgZmluZEFkZHJlc3NQb2ludHMgPSBhc3luYyAoXHJcbiAgcGFyYW1zOiBGaW5kQWRkcmVzc1BvaW50c1BhcmFtc1xyXG4pOiBQcm9taXNlPEFkZHJlc3NQb2ludFtdPiA9PiB7XHJcbiAgY29uc3QgcXVlcnlQYXJhbXMgPSBnZXRRdWVyeVBhcmFtcyhwYXJhbXMpO1xyXG4gIGNvbnN0IHN0cmVldEpvaW5Db25kaXRpb24gPSBnZXRTdHJlZXRKb2luQ29uZGl0aW9uKHBhcmFtcyk7XHJcblxyXG4gIGNvbnN0IHdoZXJlQ29uZGl0aW9uID0gZ2V0V2hlcmVDb25kaXRpb24ocGFyYW1zKTtcclxuXHJcbiAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCByYXdRdWVyeShcclxuICAgIGBTRUxFQ1QgYS5pZCwgcy5uYW1lIEFTIHN0cmVldF9uYW1lLCBvLm5hbWUgQVMgb2JqZWN0X3R5cGVfbmFtZSwgYS5kZXNjcmlwdGl2ZV9udW1iZXIsXHJcbiAgICAgIGEub3JpZW50YXRpb25hbF9udW1iZXIsIGEub3JpZW50YXRpb25hbF9udW1iZXJfbGV0dGVyLCBjLm5hbWUgQVMgY2l0eV9uYW1lLFxyXG4gICAgICBkLm5hbWUgQVMgZGlzdHJpY3RfbmFtZSwgbS5uYW1lIEFTIG11bmljaXBhbGl0eV9wYXJ0X25hbWUsIHAubmFtZSBBUyBwcmFndWVfZGlzdHJpY3RfbmFtZSxcclxuICAgICAgYS5wb3N0YWxfY29kZSwgYS53Z3M4NF9sYXRpdHVkZSwgYS53Z3M4NF9sb25naXR1ZGVcclxuICAgIEZST00gYWRkcmVzc19wb2ludCBhXHJcbiAgICAke3N0cmVldEpvaW5Db25kaXRpb259XHJcbiAgICBJTk5FUiBKT0lOIG9iamVjdF90eXBlIG8gT04gby5pZCA9IGEub2JqZWN0X3R5cGVfaWRcclxuICAgIElOTkVSIEpPSU4gY2l0eSBjIE9OIGMuY29kZSA9IGEuY2l0eV9jb2RlXHJcbiAgICBMRUZUIEpPSU4gY2l0eV9kaXN0cmljdCBkIE9OIGEuY2l0eV9kaXN0cmljdF9jb2RlID0gZC5jb2RlXHJcbiAgICBMRUZUIEpPSU4gbXVuaWNpcGFsaXR5X3BhcnQgbSBPTiBhLm11bmljaXBhbGl0eV9wYXJ0X2NvZGUgPSBtLmNvZGVcclxuICAgIExFRlQgSk9JTiBwcmFndWVfZGlzdHJpY3QgcCBPTiBhLnByYWd1ZV9kaXN0cmljdF9jb2RlID0gcC5jb2RlXHJcbiAgICBXSEVSRSAke3doZXJlQ29uZGl0aW9ufWAsXHJcbiAgICBxdWVyeVBhcmFtc1xyXG4gICk7XHJcblxyXG4gIHJldHVybiBmaWx0ZXJBZGRyZXNzUG9pbnRzKHF1ZXJ5UmVzdWx0Lm1hcChyb3dUb0FkZHJlc3NQb2ludCksIHBhcmFtcyk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZmlsdGVyQWRkcmVzc1BvaW50cyA9IChcclxuICBhZGRyZXNzUG9pbnRzOiBBZGRyZXNzUG9pbnRbXSxcclxuICBwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zXHJcbik6IEFkZHJlc3NQb2ludFtdID0+IHtcclxuICBpZiAoXHJcbiAgICBwYXJhbXMudHlwZSA9PT0gXCJ3aG9sZU11bmljaXBhbGl0eVwiIHx8XHJcbiAgICBwYXJhbXMudHlwZSA9PT0gXCJ3aG9sZU11bmljaXBhbGl0eU5vU3RyZWV0TmFtZVwiIHx8XHJcbiAgICBwYXJhbXMudHlwZSA9PT0gXCJ3aG9sZU11bmljaXBhbGl0eVBhcnRcIlxyXG4gICkge1xyXG4gICAgcmV0dXJuIGFkZHJlc3NQb2ludHM7XHJcbiAgfVxyXG5cclxuICBjb25zdCByZXN1bHQ6IEFkZHJlc3NQb2ludFtdID0gW107XHJcbiAgY29uc3QgbnVtYmVyU3BlYyA9IHBhcmFtcy5zbWRMaW5lLm51bWJlclNwZWM7XHJcbiAgaWYgKGlzU2VyaWVzU3BlY0FycmF5KG51bWJlclNwZWMpKSB7XHJcbiAgICBudW1iZXJTcGVjLmZvckVhY2goKHNlcmllc1NwZWMpID0+IHtcclxuICAgICAgcmVzdWx0LnB1c2goLi4uZmlsdGVyQWRkcmVzc1BvaW50c0J5UmFuZ2VzKGFkZHJlc3NQb2ludHMsIHNlcmllc1NwZWMpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHdoZW4gbm8gbnVtYmVyIHNwZWNzIGFyZSBwcmVzZW50LCB3ZSB0YWtlIGV2ZXJ5dGhpbmdcclxuICAgIGlmIChudW1iZXJTcGVjLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXN1bHQucHVzaCguLi5hZGRyZXNzUG9pbnRzKTtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKGlzTmVnYXRpdmVTZXJpZXNTcGVjKG51bWJlclNwZWMpKSB7XHJcbiAgICAvLyBuZWdhdGl2ZSBudW1iZXIgc3BlYyAoZS5nLiBvZGQgbnVtYmVycyBleGNlcHQgMTMtMTcpXHJcbiAgICBjb25zdCB0b0V4Y2x1ZGUgPSBmaWx0ZXJBZGRyZXNzUG9pbnRzQnlSYW5nZXMoYWRkcmVzc1BvaW50cywgbnVtYmVyU3BlYyk7XHJcbiAgICByZXN1bHQucHVzaChcclxuICAgICAgLi4uYWRkcmVzc1BvaW50cy5maWx0ZXIoXHJcbiAgICAgICAgKGFkZHJlc3NQb2ludCkgPT4gIXRvRXhjbHVkZS5pbmNsdWRlcyhhZGRyZXNzUG9pbnQpXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxuY29uc3QgZmlsdGVyQWRkcmVzc1BvaW50c0J5UmFuZ2VzID0gKFxyXG4gIGFkZHJlc3NQb2ludHM6IEFkZHJlc3NQb2ludFtdLFxyXG4gIHNlcmllc1NwZWM6IFNlcmllc1NwZWNcclxuKTogQWRkcmVzc1BvaW50W10gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdDogQWRkcmVzc1BvaW50W10gPSBbXTtcclxuICBzZXJpZXNTcGVjLnJhbmdlcy5mb3JFYWNoKChyYW5nZSkgPT4ge1xyXG4gICAgcmVzdWx0LnB1c2goXHJcbiAgICAgIC4uLmFkZHJlc3NQb2ludHMuZmlsdGVyKChhZGRyZXNzUG9pbnQpID0+IHtcclxuICAgICAgICBpZiAoaXNSYW5nZShyYW5nZSkpIHtcclxuICAgICAgICAgIGNvbnN0IG51bWJlciA9IGdldE51bWJlckJ5VHlwZShzZXJpZXNTcGVjLnR5cGUsIGFkZHJlc3NQb2ludCk7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBpc0luUmFuZ2UoXHJcbiAgICAgICAgICAgICAgbnVtYmVyLFxyXG4gICAgICAgICAgICAgIHNlcmllc1NwZWMudHlwZSAhPT0gU2VyaWVzVHlwZS5EZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgPyBhZGRyZXNzUG9pbnQub3JpZW50YXRpb25hbE51bWJlckxldHRlciA/PyBudWxsXHJcbiAgICAgICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgICAgICAgcmFuZ2VcclxuICAgICAgICAgICAgKSAmJiBmaXRzVHlwZShudW1iZXIsIHNlcmllc1NwZWMudHlwZSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGZ1bGxTdHJlZXROdW1iZXI6IEZ1bGxTdHJlZXROdW1iZXIgPSByYW5nZTtcclxuICAgICAgICAgIHJldHVybiBlcXVhbHNGdWxsU3RyZWV0TnVtYmVyKGZ1bGxTdHJlZXROdW1iZXIsIGFkZHJlc3NQb2ludCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9KTtcclxuXHJcbiAgLy8gd2hlbiBubyBzZXJpZXMgc3BlY3MgYXJlIHByZXNlbnQsIHdlIHRha2UgZXZlcnl0aGluZyB0aGF0IGZpdHMgdGhlIHR5cGVcclxuICBpZiAoc2VyaWVzU3BlYy5yYW5nZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXN1bHQucHVzaChcclxuICAgICAgLi4uYWRkcmVzc1BvaW50cy5maWx0ZXIoKGFkZHJlc3NQb2ludCkgPT5cclxuICAgICAgICBmaXRzVHlwZShcclxuICAgICAgICAgIGdldE51bWJlckJ5VHlwZShzZXJpZXNTcGVjLnR5cGUsIGFkZHJlc3NQb2ludCksXHJcbiAgICAgICAgICBzZXJpZXNTcGVjLnR5cGVcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5UGFyYW1zID0gKFxyXG4gIHBhcmFtczogRmluZEFkZHJlc3NQb2ludHNQYXJhbXNcclxuKTogKHN0cmluZyB8IG51bWJlcilbXSA9PiB7XHJcbiAgaWYgKHBhcmFtcy50eXBlID09PSBcInNtZExpbmVcIiAmJiBwYXJhbXMuc21kTGluZS50eXBlID09PSBcInN0cmVldFwiKSB7XHJcbiAgICByZXR1cm4gW3BhcmFtcy5zbWRMaW5lLnN0cmVldCwgcGFyYW1zLm11bmljaXBhbGl0eS5jb2RlXTtcclxuICB9XHJcblxyXG4gIGlmIChcclxuICAgIChwYXJhbXMudHlwZSA9PT0gXCJzbWRMaW5lXCIgJiYgcGFyYW1zLnNtZExpbmUudHlwZSA9PT0gXCJtdW5pY2lwYWxpdHlQYXJ0XCIpIHx8XHJcbiAgICBwYXJhbXMudHlwZSA9PT0gXCJ3aG9sZU11bmljaXBhbGl0eVBhcnRcIlxyXG4gICkge1xyXG4gICAgcmV0dXJuIFtwYXJhbXMubXVuaWNpcGFsaXR5UGFydENvZGVdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIFtwYXJhbXMubXVuaWNpcGFsaXR5LmNvZGVdO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldFN0cmVldEpvaW5Db25kaXRpb24gPSAoXHJcbiAgcGFyYW1zOiBGaW5kQWRkcmVzc1BvaW50c1BhcmFtc1xyXG4pOiBzdHJpbmcgPT4ge1xyXG4gIGlmIChwYXJhbXMudHlwZSA9PT0gXCJzbWRMaW5lXCIgJiYgcGFyYW1zLnNtZExpbmUudHlwZSA9PT0gXCJzdHJlZXRcIikge1xyXG4gICAgcmV0dXJuIGBKT0lOIHN0cmVldCBzIE9OIGEuc3RyZWV0X2NvZGUgPSBzLmNvZGUgQU5EIHMubmFtZSA9ID8gJHtcclxuICAgICAgaXNTcWxpdGUoZ2V0S25leERiKCkpID8gXCJDT0xMQVRFIE5PQ0FTRVwiIDogXCJcIlxyXG4gICAgfWA7XHJcbiAgfVxyXG4gIHJldHVybiBcIkxFRlQgSk9JTiBzdHJlZXQgcyBPTiBhLnN0cmVldF9jb2RlID0gcy5jb2RlXCI7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0V2hlcmVDb25kaXRpb24gPSAocGFyYW1zOiBGaW5kQWRkcmVzc1BvaW50c1BhcmFtcyk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKFxyXG4gICAgKHBhcmFtcy50eXBlID09PSBcInNtZExpbmVcIiAmJiBwYXJhbXMuc21kTGluZS50eXBlID09PSBcIm11bmljaXBhbGl0eVBhcnRcIikgfHxcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gXCJhLm11bmljaXBhbGl0eV9wYXJ0X2NvZGUgPSA/XCI7XHJcbiAgfVxyXG5cclxuICBpZiAocGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlOb1N0cmVldE5hbWVcIikge1xyXG4gICAgcmV0dXJuIGAke2dldE11bmljaXBhbGl0eVdoZXJlKFxyXG4gICAgICBcImFcIixcclxuICAgICAgcGFyYW1zLm11bmljaXBhbGl0eVxyXG4gICAgKX0gQU5EIGEuc3RyZWV0X2NvZGUgSVMgTlVMTGA7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZ2V0TXVuaWNpcGFsaXR5V2hlcmUoXCJhXCIsIHBhcmFtcy5tdW5pY2lwYWxpdHkpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzSW5SYW5nZSA9IChcclxuICBudW1iZXI6IG51bWJlciB8IG51bGwsXHJcbiAgbGV0dGVyOiBzdHJpbmcgfCBudWxsLFxyXG4gIHJhbmdlOiBSYW5nZVNwZWNcclxuKTogYm9vbGVhbiA9PiB7XHJcbiAgaWYgKG51bWJlciA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuICFyYW5nZS5mcm9tICYmICFyYW5nZS50bztcclxuICB9XHJcblxyXG4gIC8vIGV4cGxhaW5lcjogZWl0aGVyIHRoZSBsb3dlciBib3VuZCBpcyBub3Qgc2V0LCBvciBpdCBpcyBsb3dlciB0aGFuIHRoZSBudW1iZXJcclxuICAvLyBpZiBpdCdzIGVxdWFsIHRvIHRoZSBudW1iZXIsIHdlIGFsc28gaGF2ZSB0byBjaGVjayB0aGUgbGV0dGVyIC0gaWYgaXQncyBub3Qgc2V0LCB3ZSBkb24ndCBjYXJlXHJcbiAgLy8gaWYgZnJvbS5sZXR0ZXIgaXMgc2V0LCB3ZSBuZWVkIHRvIGhhdmUgYSBsZXR0ZXIgc2V0IGFuZCBpdCBoYXMgdG8gYmUgZ3JlYXRlciBvciBlcXVhbDpcclxuICAvLyBudW1iZXIgd2l0aG91dCBsZXR0ZXIgY291bnRzIGxvd2VyIHRoYW4gbnVtYmVyIHdpdGggbGV0dGVyICdhJyAoZS5nLiAyMyA8IDIzYSlcclxuICBjb25zdCBzYXRpc2ZpZXNGcm9tID1cclxuICAgICFyYW5nZS5mcm9tIHx8XHJcbiAgICBudW1iZXIgPiByYW5nZS5mcm9tLm51bWJlciB8fFxyXG4gICAgKG51bWJlciA9PT0gcmFuZ2UuZnJvbS5udW1iZXIgJiZcclxuICAgICAgKCFyYW5nZS5mcm9tLmxldHRlciB8fCAoISFsZXR0ZXIgJiYgbGV0dGVyID49IHJhbmdlLmZyb20ubGV0dGVyKSkpO1xyXG5cclxuICBjb25zdCBzYXRpc2ZpZXNUbyA9XHJcbiAgICAhcmFuZ2UudG8gfHxcclxuICAgIG51bWJlciA8IHJhbmdlLnRvLm51bWJlciB8fFxyXG4gICAgKG51bWJlciA9PT0gcmFuZ2UudG8ubnVtYmVyICYmXHJcbiAgICAgICghbGV0dGVyIHx8XHJcbiAgICAgICAgKCEhcmFuZ2UudG8ubGV0dGVyICYmICEhbGV0dGVyICYmIGxldHRlciA8PSByYW5nZS50by5sZXR0ZXIpKSk7XHJcblxyXG4gIHJldHVybiBzYXRpc2ZpZXNGcm9tICYmIHNhdGlzZmllc1RvO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpdHNUeXBlID0gKG51bWJlcjogbnVtYmVyIHwgbnVsbCwgdHlwZTogU2VyaWVzVHlwZSk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICB0eXBlID09PSBTZXJpZXNUeXBlLkRlc2NyaXB0aW9uIHx8XHJcbiAgICB0eXBlID09PSBTZXJpZXNUeXBlLkFsbCB8fFxyXG4gICAgKHR5cGUgPT09IFNlcmllc1R5cGUuT2RkICYmIG51bWJlciAlIDIgPT09IDEpIHx8XHJcbiAgICAodHlwZSA9PT0gU2VyaWVzVHlwZS5FdmVuICYmIG51bWJlciAlIDIgPT09IDApXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlcXVhbHNGdWxsU3RyZWV0TnVtYmVyID0gKFxyXG4gIGZ1bGxTdHJlZXROdW1iZXI6IEZ1bGxTdHJlZXROdW1iZXIsXHJcbiAgYWRkcmVzc1BvaW50OiBBZGRyZXNzUG9pbnRcclxuKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIGZ1bGxTdHJlZXROdW1iZXIuZGVzY3JpcHRpb25OdW1iZXIubnVtYmVyID09PSBhZGRyZXNzUG9pbnQuaG91c2VOdW1iZXIgJiZcclxuICAgIGZ1bGxTdHJlZXROdW1iZXIub3JpZW50YXRpb25hbE51bWJlci5udW1iZXIgPT09XHJcbiAgICAgIGFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyICYmXHJcbiAgICAoKCFmdWxsU3RyZWV0TnVtYmVyLm9yaWVudGF0aW9uYWxOdW1iZXIubGV0dGVyICYmXHJcbiAgICAgICFhZGRyZXNzUG9pbnQub3JpZW50YXRpb25hbE51bWJlckxldHRlcikgfHxcclxuICAgICAgZnVsbFN0cmVldE51bWJlci5vcmllbnRhdGlvbmFsTnVtYmVyLmxldHRlciA9PT1cclxuICAgICAgICBhZGRyZXNzUG9pbnQub3JpZW50YXRpb25hbE51bWJlckxldHRlcilcclxuICApO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0TnVtYmVyQnlUeXBlID0gKFxyXG4gIHR5cGU6IFNlcmllc1R5cGUsXHJcbiAgYWRkcmVzc1BvaW50OiBBZGRyZXNzUG9pbnRcclxuKTogbnVtYmVyIHwgbnVsbCA9PiB7XHJcbiAgcmV0dXJuIHR5cGUgPT09IFNlcmllc1R5cGUuRGVzY3JpcHRpb25cclxuICAgID8gYWRkcmVzc1BvaW50LmhvdXNlTnVtYmVyXHJcbiAgICA6IGFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyID8/IG51bGw7XHJcbn07XHJcblxyXG5jb25zdCBnZXRNdW5pY2lwYWxpdHlXaGVyZSA9IChcclxuICBhbGlhczogc3RyaW5nLFxyXG4gIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5XHJcbik6IHN0cmluZyA9PiB7XHJcbiAgcmV0dXJuIG11bmljaXBhbGl0eS50eXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgID8gYCR7YWxpYXN9LmNpdHlfY29kZSA9ID9gXHJcbiAgICA6IGAke2FsaWFzfS5jaXR5X2Rpc3RyaWN0X2NvZGUgPSA/YDtcclxufTtcclxuXHJcbmNvbnN0IHJvd1RvQWRkcmVzc1BvaW50ID0gKHJvdzogYW55KTogQWRkcmVzc1BvaW50ID0+IHtcclxuICBjb25zdCBwb2ludDogQWRkcmVzc1BvaW50ID0ge1xyXG4gICAgaWQ6IHJvdy5pZCxcclxuICAgIGFkZHJlc3M6IFwiXCIsXHJcbiAgICB0eXBlOlxyXG4gICAgICByb3cub2JqZWN0X3R5cGVfbmFtZSA9PT0gRGVzY3JpcHRpdmVUeXBlXHJcbiAgICAgICAgPyBBZGRyZXNzUG9pbnRUeXBlLkRlc2NyaXB0aW9uXHJcbiAgICAgICAgOiBBZGRyZXNzUG9pbnRUeXBlLlJlZ2lzdHJhdGlvbixcclxuICAgIGhvdXNlTnVtYmVyOiByb3cuZGVzY3JpcHRpdmVfbnVtYmVyLFxyXG4gICAgY2l0eTogcm93LmNpdHlfbmFtZSxcclxuICAgIG11bmljaXBhbGl0eVBhcnQ6IHJvdy5tdW5pY2lwYWxpdHlfcGFydF9uYW1lLFxyXG4gICAgcG9zdGFsQ29kZTogcm93LnBvc3RhbF9jb2RlLFxyXG4gICAgbGF0OiByb3cud2dzODRfbGF0aXR1ZGUsXHJcbiAgICBsbmc6IHJvdy53Z3M4NF9sb25naXR1ZGUsXHJcbiAgfTtcclxuICBpZiAocm93LnN0cmVldF9uYW1lICE9PSBudWxsKSB7XHJcbiAgICBwb2ludC5zdHJlZXQgPSByb3cuc3RyZWV0X25hbWU7XHJcbiAgfVxyXG4gIGlmIChyb3cub3JpZW50YXRpb25hbF9udW1iZXIgIT09IG51bGwpIHtcclxuICAgIHBvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXIgPSByb3cub3JpZW50YXRpb25hbF9udW1iZXI7XHJcbiAgfVxyXG4gIGlmIChyb3cub3JpZW50YXRpb25hbF9udW1iZXJfbGV0dGVyICE9PSBudWxsKSB7XHJcbiAgICBwb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyID0gcm93Lm9yaWVudGF0aW9uYWxfbnVtYmVyX2xldHRlcjtcclxuICB9XHJcbiAgaWYgKHJvdy5kaXN0cmljdF9uYW1lICE9PSBudWxsKSB7XHJcbiAgICBwb2ludC5kaXN0cmljdCA9IHJvdy5kaXN0cmljdF9uYW1lO1xyXG4gIH1cclxuICBpZiAocm93LnByYWd1ZV9kaXN0cmljdF9uYW1lICE9PSBudWxsKSB7XHJcbiAgICBwb2ludC5wcmFndWVEaXN0cmljdCA9IHJvdy5wcmFndWVfZGlzdHJpY3RfbmFtZTtcclxuICB9XHJcbiAgcG9pbnQuYWRkcmVzcyA9IGNyZWF0ZVNpbmdsZUxpbmVBZGRyZXNzKHBvaW50KTtcclxuICByZXR1cm4gcG9pbnQ7XHJcbn07XHJcbiJdfQ==
|
package/dist/db/founders.d.ts
CHANGED
|
@@ -9,6 +9,6 @@ export declare const findFounder: (nameWithHashtag: string, schoolType: SchoolTy
|
|
|
9
9
|
founder: Founder;
|
|
10
10
|
errors: SmdError[];
|
|
11
11
|
}>;
|
|
12
|
-
export declare const getFounderCityCode: (
|
|
13
|
-
export declare const findMunicipalityPartByName: (name: string,
|
|
12
|
+
export declare const getFounderCityCode: (type: MunicipalityType, code: number) => Promise<number>;
|
|
13
|
+
export declare const findMunicipalityPartByName: (name: string, cityCode: number) => Promise<MunicipalityPartResult>;
|
|
14
14
|
export declare const findMunicipalityByNameAndType: (name: string, type: MunicipalityType, founder: Founder) => Promise<DbMunicipalityResult>;
|
package/dist/db/founders.js
CHANGED
|
@@ -5,6 +5,16 @@ import { getKnexDb, insertAutoincrementRow, insertMultipleRows } from "./db";
|
|
|
5
5
|
import { MunicipalityType, } from "./types";
|
|
6
6
|
const cityTypeCode = 261;
|
|
7
7
|
const cityDistrictTypeCode = 263;
|
|
8
|
+
const schoolsOutsideTheirFounderMunicipality = [
|
|
9
|
+
"181042096",
|
|
10
|
+
"107516306",
|
|
11
|
+
"181147246",
|
|
12
|
+
"150076924",
|
|
13
|
+
"107583992",
|
|
14
|
+
"181024161",
|
|
15
|
+
"181064588",
|
|
16
|
+
"107629062",
|
|
17
|
+
];
|
|
8
18
|
export const insertFounders = async (founders) => {
|
|
9
19
|
let insertedFounders = 0;
|
|
10
20
|
const schoolFounderConnectionData = [];
|
|
@@ -28,8 +38,11 @@ export const insertFounders = async (founders) => {
|
|
|
28
38
|
else {
|
|
29
39
|
const { name, code } = result;
|
|
30
40
|
if (name !== extractedMunicipalityName) {
|
|
31
|
-
|
|
32
|
-
|
|
41
|
+
// also filter out known exceptions
|
|
42
|
+
if (!schoolsOutsideTheirFounderMunicipality.includes(school.izo)) {
|
|
43
|
+
console.log(`izo: ${school.izo}, extracted: ${extractedMunicipalityName}, RUIAN: ${name}`);
|
|
44
|
+
differingSchools.push(school);
|
|
45
|
+
}
|
|
33
46
|
}
|
|
34
47
|
// store municipalityCode even if the names don't match, we will use it later
|
|
35
48
|
municipalityCode = parseInt(code);
|
|
@@ -289,20 +302,17 @@ export const findFounder = async (nameWithHashtag, schoolType) => {
|
|
|
289
302
|
}
|
|
290
303
|
};
|
|
291
304
|
let cachedCityCode = null;
|
|
292
|
-
let
|
|
293
|
-
export const getFounderCityCode = async (
|
|
294
|
-
if (
|
|
295
|
-
if (
|
|
296
|
-
|
|
297
|
-
cachedCityCode = (await getKnexDb()
|
|
298
|
-
.from("city_district")
|
|
299
|
-
.where("code", founder.municipalityCode)
|
|
300
|
-
.first()).city_code;
|
|
305
|
+
let lastCode = null;
|
|
306
|
+
export const getFounderCityCode = async (type, code) => {
|
|
307
|
+
if (type === MunicipalityType.District) {
|
|
308
|
+
if (lastCode !== code) {
|
|
309
|
+
lastCode = code;
|
|
310
|
+
cachedCityCode = (await getKnexDb().from("city_district").where("code", code).first()).city_code;
|
|
301
311
|
}
|
|
302
312
|
return cachedCityCode;
|
|
303
313
|
}
|
|
304
314
|
else {
|
|
305
|
-
return
|
|
315
|
+
return code;
|
|
306
316
|
}
|
|
307
317
|
};
|
|
308
318
|
const resultToFounder = async (result, schoolType) => {
|
|
@@ -354,9 +364,8 @@ const getAllFounderNames = async () => {
|
|
|
354
364
|
municipalityName: String(row.city_name ? row.city_name : row.city_district_name),
|
|
355
365
|
}));
|
|
356
366
|
};
|
|
357
|
-
export const findMunicipalityPartByName = async (name,
|
|
367
|
+
export const findMunicipalityPartByName = async (name, cityCode) => {
|
|
358
368
|
const errors = [];
|
|
359
|
-
const cityCode = await getFounderCityCode(founder);
|
|
360
369
|
const result = await getKnexDb()
|
|
361
370
|
.first("code")
|
|
362
371
|
.from("municipality_part")
|
|
@@ -387,10 +396,10 @@ export const findMunicipalityByNameAndType = async (name, type, founder) => {
|
|
|
387
396
|
.select("code")
|
|
388
397
|
.from("city_district")
|
|
389
398
|
.where("name", name)
|
|
390
|
-
.andWhere("city_code", await getFounderCityCode(founder));
|
|
399
|
+
.andWhere("city_code", await getFounderCityCode(founder.municipalityType, founder.municipalityCode));
|
|
391
400
|
if (result.length > 0) {
|
|
392
401
|
if (result.length > 1) {
|
|
393
|
-
const cityCode = await getFounderCityCode(founder);
|
|
402
|
+
const cityCode = await getFounderCityCode(founder.municipalityType, founder.municipalityCode);
|
|
394
403
|
const positions = await getKnexDb()
|
|
395
404
|
.select("city_code", "wgs84_latitude", "wgs84_longitude")
|
|
396
405
|
.from("address_point")
|
|
@@ -449,4 +458,4 @@ const getAllMunicipalityPartNames = async (cityCode) => {
|
|
|
449
458
|
code: row.code,
|
|
450
459
|
}));
|
|
451
460
|
};
|
|
452
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm91bmRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvZm91bmRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTXhELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLHdCQUF3QixHQUN6QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUVMLGdCQUFnQixHQUtqQixNQUFNLFNBQVMsQ0FBQztBQUVqQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFFakMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEtBQUssRUFBRSxRQUFtQixFQUFtQixFQUFFO0lBQzNFLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0lBRXZDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFO1FBQzlCLElBQ0UsT0FBTyxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLElBQUk7WUFDbEQsT0FBTyxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLFFBQVEsRUFDdEQ7WUFDQSxTQUFTO1NBQ1Y7UUFDRCxNQUFNLHlCQUF5QixHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5FLHdGQUF3RjtRQUN4RixJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTFCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUNwQyxNQUFNLE1B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QUMsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sMkJBQTJCLEdBQUcsS0FBSyxFQUN2QyxRQUFnQixFQUMyQixFQUFFO0lBQzdDLE9BQU8sQ0FDTCxNQUFNLFNBQVMsRUFBRTtTQUNkLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1NBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztTQUN6QixLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUNoQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNkLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtLQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRpc3RhbmNlIGZyb20gXCJAdHVyZi9kaXN0YW5jZVwiO1xyXG5pbXBvcnQgeyB3aG9sZUxpbmVFcnJvciB9IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vc21kXCI7XHJcbmltcG9ydCB7XHJcbiAgRGJNdW5pY2lwYWxpdHlSZXN1bHQsXHJcbiAgTXVuaWNpcGFsaXR5UGFydFJlc3VsdCxcclxuICBTbWRFcnJvcixcclxufSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3R5cGVzXCI7XHJcbmltcG9ydCB7XHJcbiAgZXh0cmFjdE11bmljaXBhbGl0eU5hbWUsXHJcbiAgZmluZENsb3Nlc3RTdHJpbmcsXHJcbiAgc2FuaXRpemVNdW5pY2lwYWxpdHlOYW1lLFxyXG59IGZyb20gXCIuLi91dGlscy9oZWxwZXJzXCI7XHJcbmltcG9ydCB7IGdldEtuZXhEYiwgaW5zZXJ0QXV0b2luY3JlbWVudFJvdywgaW5zZXJ0TXVsdGlwbGVSb3dzIH0gZnJvbSBcIi4vZGJcIjtcclxuaW1wb3J0IHtcclxuICBGb3VuZGVyLFxyXG4gIE11bmljaXBhbGl0eVR5cGUsXHJcbiAgTXVuaWNpcGFsaXR5V2l0aFBvc2l0aW9uLFxyXG4gIFBsYWNlV2l0aFBvc2l0aW9uLFxyXG4gIFNjaG9vbCxcclxuICBTY2hvb2xUeXBlLFxyXG59IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5jb25zdCBjaXR5VHlwZUNvZGUgPSAyNjE7XHJcbmNvbnN0IGNpdHlEaXN0cmljdFR5cGVDb2RlID0gMjYzO1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydEZvdW5kZXJzID0gYXN5bmMgKGZvdW5kZXJzOiBGb3VuZGVyW10pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIGxldCBpbnNlcnRlZEZvdW5kZXJzID0gMDtcclxuICBjb25zdCBzY2hvb2xGb3VuZGVyQ29ubmVjdGlvbkRhdGEgPSBbXTtcclxuXHJcbiAgZm9yIChjb25zdCBmb3VuZGVyIG9mIGZvdW5kZXJzKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSAhPT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5ICYmXHJcbiAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSAhPT0gTXVuaWNpcGFsaXR5VHlwZS5EaXN0cmljdFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSA9IGV4dHJhY3RNdW5pY2lwYWxpdHlOYW1lKGZvdW5kZXIpO1xyXG5cclxuICAgIC8vIGNoZWNrIGlmIHRoZSBleHRyYWN0ZWQgbXVuaWNpcGFsaXR5IG5hbWUgaXMgdGhlIHNhbWUgYXMgaW4gYWxsIHRoZSBzY2hvb2xzJyBsb2NhdGlvbnNcclxuICAgIGxldCBkaWZmZXJpbmdTY2hvb2xzID0gW107XHJcbiAgICBsZXQgbXVuaWNpcGFsaXR5Q29kZSA9IC0xO1xyXG5cclxuICAgIGZvciAoY29uc3Qgc2Nob29sIG9mIGZvdW5kZXIuc2Nob29scykge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgICA/IGdldENpdHlPZlNjaG9vbChzY2hvb2wuaXpvKVxyXG4gICAgICAgIDogZ2V0RGlzdHJpY3RPZlNjaG9vbChzY2hvb2wuaXpvKSk7XHJcbiAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBgaXpvOiAke3NjaG9vbC5pem99LCBleHRyYWN0ZWQ6ICR7ZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZX0sIFJVSUFOOiBVTkRFRklORURgXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkaWZmZXJpbmdTY2hvb2xzLnB1c2goc2Nob29sKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB7IG5hbWUsIGNvZGUgfSA9IHJlc3VsdDtcclxuICAgICAgICBpZiAobmFtZSAhPT0gZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgIGBpem86ICR7c2Nob29sLml6b30sIGV4dHJhY3RlZDogJHtleHRyYWN0ZWRNdW5pY2lwYWxpdHlOYW1lfSwgUlVJQU46ICR7bmFtZX1gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgZGlmZmVyaW5nU2Nob29scy5wdXNoKHNjaG9vbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0b3JlIG11bmljaXBhbGl0eUNvZGUgZXZlbiBpZiB0aGUgbmFtZXMgZG9uJ3QgbWF0Y2gsIHdlIHdpbGwgdXNlIGl0IGxhdGVyXHJcbiAgICAgICAgbXVuaWNpcGFsaXR5Q29kZSA9IHBhcnNlSW50KGNvZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbXVuaWNpcGFsaXR5Q29kZSA9IGF3YWl0IGZpeEZvdW5kZXJQcm9ibGVtcyhcclxuICAgICAgZm91bmRlcixcclxuICAgICAgbXVuaWNpcGFsaXR5Q29kZSxcclxuICAgICAgZGlmZmVyaW5nU2Nob29scyxcclxuICAgICAgZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjaXR5RGlzdHJpY3RDb2RlID1cclxuICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkRpc3RyaWN0XHJcbiAgICAgICAgPyBtdW5pY2lwYWxpdHlDb2RlLnRvU3RyaW5nKClcclxuICAgICAgICA6IG51bGw7XHJcbiAgICBsZXQgY2l0eUNvZGUgPSBudWxsO1xyXG4gICAgaWYgKGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5KSB7XHJcbiAgICAgIGNpdHlDb2RlID0gbXVuaWNpcGFsaXR5Q29kZT8udG9TdHJpbmcoKSA/PyBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2l0eUNvZGUgPSBhd2FpdCBnZXRDaXR5Q29kZUJ5RGlzdHJpY3RDb2RlKG11bmljaXBhbGl0eUNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcIipcIilcclxuICAgICAgLmZyb20oXCJmb3VuZGVyXCIpXHJcbiAgICAgIC53aGVyZSh7XHJcbiAgICAgICAgbmFtZTogc2FuaXRpemVNdW5pY2lwYWxpdHlOYW1lKGZvdW5kZXIubmFtZSksXHJcbiAgICAgICAgaWNvOiBmb3VuZGVyLmljbyxcclxuICAgICAgfSk7XHJcblxyXG4gICAgbGV0IGZvdW5kZXJJZCA9IGV4aXN0aW5nWzBdPy5pZCA/PyBudWxsO1xyXG5cclxuICAgIGlmIChleGlzdGluZy5sZW5ndGggPT09IDApIHtcclxuICAgICAgZm91bmRlcklkID0gYXdhaXQgaW5zZXJ0QXV0b2luY3JlbWVudFJvdyhcclxuICAgICAgICBbXHJcbiAgICAgICAgICBzYW5pdGl6ZU11bmljaXBhbGl0eU5hbWUoZm91bmRlci5uYW1lKSxcclxuICAgICAgICAgIHNhbml0aXplTXVuaWNpcGFsaXR5TmFtZShleHRyYWN0ZWRNdW5pY2lwYWxpdHlOYW1lKSxcclxuICAgICAgICAgIGZvdW5kZXIuaWNvLFxyXG4gICAgICAgICAgU3RyaW5nKGZvdW5kZXIub3JpZ2luYWxUeXBlKSxcclxuICAgICAgICAgIGNpdHlDb2RlLFxyXG4gICAgICAgICAgY2l0eURpc3RyaWN0Q29kZSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIFwiZm91bmRlclwiLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJzaG9ydF9uYW1lXCIsXHJcbiAgICAgICAgICBcImljb1wiLFxyXG4gICAgICAgICAgXCJmb3VuZGVyX3R5cGVfY29kZVwiLFxyXG4gICAgICAgICAgXCJjaXR5X2NvZGVcIixcclxuICAgICAgICAgIFwiY2l0eV9kaXN0cmljdF9jb2RlXCIsXHJcbiAgICAgICAgXVxyXG4gICAgICApO1xyXG4gICAgICBpbnNlcnRlZEZvdW5kZXJzKys7XHJcbiAgICB9XHJcblxyXG4gICAgZm91bmRlci5zY2hvb2xzLmZvckVhY2goKHNjaG9vbCkgPT4ge1xyXG4gICAgICBzY2hvb2xGb3VuZGVyQ29ubmVjdGlvbkRhdGEucHVzaChbc2Nob29sLml6bywgZm91bmRlcklkXSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGluc2VydGVkQ29ubmVjdGlvbnMgPSBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBzY2hvb2xGb3VuZGVyQ29ubmVjdGlvbkRhdGEsXHJcbiAgICBcInNjaG9vbF9mb3VuZGVyXCIsXHJcbiAgICBbXCJzY2hvb2xfaXpvXCIsIFwiZm91bmRlcl9pZFwiXSxcclxuICAgIHRydWVcclxuICApO1xyXG5cclxuICByZXR1cm4gaW5zZXJ0ZWRGb3VuZGVycyArIGluc2VydGVkQ29ubmVjdGlvbnM7XHJcbn07XHJcblxyXG5jb25zdCBnZXRDaXR5T2ZTY2hvb2wgPSBhc3luYyAoaXpvOiBzdHJpbmcpOiBQcm9taXNlPGFueT4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLnNlbGVjdChcImMubmFtZVwiLCBcImMuY29kZVwiKVxyXG4gICAgLmZyb20oXCJzY2hvb2wgYXMgc1wiKVxyXG4gICAgLmpvaW4oXCJzY2hvb2xfbG9jYXRpb24gYXMgbFwiLCBcInMuaXpvXCIsIFwibC5zY2hvb2xfaXpvXCIpXHJcbiAgICAuam9pbihcImFkZHJlc3NfcG9pbnQgYXMgYVwiLCBcImwuYWRkcmVzc19wb2ludF9pZFwiLCBcImEuaWRcIilcclxuICAgIC5qb2luKFwiY2l0eSBhcyBjXCIsIFwiYS5jaXR5X2NvZGVcIiwgXCJjLmNvZGVcIilcclxuICAgIC53aGVyZShcInMuaXpvXCIsIGl6bylcclxuICAgIC5saW1pdCgxKVxyXG4gICAgLmZpcnN0KCk7XHJcbn07XHJcblxyXG5jb25zdCBnZXREaXN0cmljdE9mU2Nob29sID0gYXN5bmMgKGl6bzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXCJkLm5hbWVcIiwgXCJkLmNvZGVcIilcclxuICAgIC5mcm9tKFwic2Nob29sIGFzIHNcIilcclxuICAgIC5qb2luKFwic2Nob29sX2xvY2F0aW9uIGFzIGxcIiwgXCJzLml6b1wiLCBcImwuc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXCJhZGRyZXNzX3BvaW50IGFzIGFcIiwgXCJsLmFkZHJlc3NfcG9pbnRfaWRcIiwgXCJhLmlkXCIpXHJcbiAgICAuam9pbihcImNpdHlfZGlzdHJpY3QgYXMgZFwiLCBcImEuY2l0eV9kaXN0cmljdF9jb2RlXCIsIFwiZC5jb2RlXCIpXHJcbiAgICAud2hlcmUoXCJzLml6b1wiLCBpem8pXHJcbiAgICAubGltaXQoMSlcclxuICAgIC5maXJzdCgpO1xyXG59O1xyXG5cclxuY29uc3QgZml4Rm91bmRlclByb2JsZW1zID0gYXN5bmMgKFxyXG4gIGZvdW5kZXI6IEZvdW5kZXIsXHJcbiAgbXVuaWNpcGFsaXR5Q29kZTogbnVtYmVyLFxyXG4gIGRpZmZlcmluZ1NjaG9vbHM6IFNjaG9vbFtdLFxyXG4gIGV4dHJhY3RlZE11bmljaXBhbGl0eU5hbWU6IHN0cmluZ1xyXG4pOiBQcm9taXNlPG51bWJlciB8IG51bGw+ID0+IHtcclxuICBpZiAoXHJcbiAgICBkaWZmZXJpbmdTY2hvb2xzLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgZGlmZmVyaW5nU2Nob29scy5sZW5ndGggPCBmb3VuZGVyLnNjaG9vbHMubGVuZ3RoXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gbXVuaWNpcGFsaXR5Q29kZTtcclxuICB9XHJcblxyXG4gIC8vIGVpdGhlciB0aGUgc2Nob29sIGRvZXMgbm90IGhhdmUgYSBwb3NpdGlvbiAoaW52YWxpZCBSVUlBTiBvciBtaXNzaW5nIGJ1aWxkaW5nKVxyXG4gIC8vIG9yIHRoZSBzY2hvb2wgaXMgbm90IGluIHRoZSBzYW1lIG11bmljaXBhbGl0eSBhcyB0aGUgZm91bmRlclxyXG5cclxuICAvLyBmaW5kIGFsbCBjaXRpZXMgYW5kIHRoZWlyIHBvc2l0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBtdW5pY2lwYWxpdHlOYW1lXHJcbiAgY29uc3QgbXVuaWNpcGFsaXRpZXMgPSBhd2FpdCBmaW5kTXVuaWNpcGFsaXRpZXNBbmRQb3NpdGlvbnNCeU5hbWVBbmRUeXBlKFxyXG4gICAgZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSxcclxuICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZVxyXG4gICk7XHJcblxyXG4gIC8vIGdldCBvbmUgc2Nob29sIHBvc2l0aW9uIChpZiB0aGVyZSBhcmUgbW9yZSBzY2hvb2xzLCB0aGV5IHNob3VsZCBiZSBjbG9zZSB0byBlYWNoIG90aGVyKVxyXG4gIGNvbnN0IHNjaG9vbFBvc2l0aW9uOlxyXG4gICAgfCB7IHdnczg0X2xhdGl0dWRlOiBudW1iZXI7IHdnczg0X2xvbmdpdHVkZTogbnVtYmVyIH1cclxuICAgIHwgdW5kZWZpbmVkID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXCJhZGRyZXNzX3BvaW50Lndnczg0X2xhdGl0dWRlXCIsIFwiYWRkcmVzc19wb2ludC53Z3M4NF9sb25naXR1ZGVcIilcclxuICAgIC5mcm9tKFwic2Nob29sXCIpXHJcbiAgICAuam9pbihcInNjaG9vbF9sb2NhdGlvblwiLCBcInNjaG9vbC5pem9cIiwgXCJzY2hvb2xfbG9jYXRpb24uc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXHJcbiAgICAgIFwiYWRkcmVzc19wb2ludFwiLFxyXG4gICAgICBcInNjaG9vbF9sb2NhdGlvbi5hZGRyZXNzX3BvaW50X2lkXCIsXHJcbiAgICAgIFwiYWRkcmVzc19wb2ludC5pZFwiXHJcbiAgICApXHJcbiAgICAud2hlcmVJbihcclxuICAgICAgXCJzY2hvb2wuaXpvXCIsXHJcbiAgICAgIGRpZmZlcmluZ1NjaG9vbHMubWFwKChzY2hvb2wpID0+IHNjaG9vbC5pem8pXHJcbiAgICApXHJcbiAgICAubGltaXQoMSlcclxuICAgIC5maXJzdCgpO1xyXG5cclxuICBpZiAoc2Nob29sUG9zaXRpb24pIHtcclxuICAgIGlmIChtdW5pY2lwYWxpdGllcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgaWYgKG11bmljaXBhbGl0eUNvZGUgPT09IC0xKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBgbm8gbXVuaWNpcGFsaXR5IGJ5IG5hbWUgb3IgYnkgbG9jYXRpb24gZm91bmQgZm9yICR7Zm91bmRlci5uYW1lfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgXCJubyBtdW5pY2lwYWxpdHkgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lLCB1c2luZyB0aGUgbXVuaWNpcGFsaXR5IGZyb20gUlVJQU4gY29kZVwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChtdW5pY2lwYWxpdGllcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgXCJ1c2luZyB0aGUgb25seSBtdW5pY2lwYWxpdHkgZm91bmQgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lXCJcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIG11bmljaXBhbGl0aWVzWzBdLmNvZGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInVzaW5nIHRoZSBjbG9zZXN0IG11bmljaXBhbGl0eSBtYXRjaGluZyB0aGUgZXh0cmFjdGVkIG5hbWVcIik7XHJcbiAgICAgIHJldHVybiBnZXRDbG9zZXN0Q29kZShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2RlOiAxLFxyXG4gICAgICAgICAgbGF0OiBzY2hvb2xQb3NpdGlvbi53Z3M4NF9sYXRpdHVkZSxcclxuICAgICAgICAgIGxuZzogc2Nob29sUG9zaXRpb24ud2dzODRfbG9uZ2l0dWRlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbXVuaWNpcGFsaXRpZXMubWFwKChtdW5pY2lwYWxpdHkpID0+ICh7XHJcbiAgICAgICAgICBjb2RlOiBtdW5pY2lwYWxpdHkuY29kZSxcclxuICAgICAgICAgIGxhdDogbXVuaWNpcGFsaXR5LmxhdCxcclxuICAgICAgICAgIGxuZzogbXVuaWNpcGFsaXR5LmxuZyxcclxuICAgICAgICB9KSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKG11bmljaXBhbGl0aWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKG11bmljaXBhbGl0aWVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgIGB1c2luZyB0aGUgZmlyc3QgbXVuaWNpcGFsaXR5IG1hdGNoaW5nIHRoZSBleHRyYWN0ZWQgbmFtZSAoJHttdW5pY2lwYWxpdGllcy5sZW5ndGh9IG1hdGNoZXMpIC0gcG9zc2libHkgaW5jb3JyZWN0IWBcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgXCJ1c2luZyB0aGUgb25seSBtdW5pY2lwYWxpdHkgZm91bmQgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lXCJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtdW5pY2lwYWxpdGllc1swXS5jb2RlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgYG5vIG11bmljaXBhbGl0eSBieSBuYW1lIG9yIGJ5IGxvY2F0aW9uIGZvdW5kIGZvciAke2ZvdW5kZXIubmFtZX1gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldENsb3Nlc3RDb2RlID0gYXN5bmMgKFxyXG4gIGZyb206IFBsYWNlV2l0aFBvc2l0aW9uLFxyXG4gIHRvTGlzdDogUGxhY2VXaXRoUG9zaXRpb25bXVxyXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIGxldCBsb3dlc3REaXN0YW5jZSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gIGxldCBjb2RlOiBudW1iZXIgPSBudWxsO1xyXG4gIGZvciAoY29uc3QgcGxhY2Ugb2YgdG9MaXN0KSB7XHJcbiAgICBsZXQgbXVuaWNpcGFsaXR5RGlzdGFuY2UgPSBkaXN0YW5jZShcclxuICAgICAgW3BsYWNlLmxhdCwgcGxhY2UubG5nXSxcclxuICAgICAgW2Zyb20ubGF0LCBmcm9tLmxuZ11cclxuICAgICk7XHJcbiAgICBpZiAobXVuaWNpcGFsaXR5RGlzdGFuY2UgPCBsb3dlc3REaXN0YW5jZSkge1xyXG4gICAgICBsb3dlc3REaXN0YW5jZSA9IG11bmljaXBhbGl0eURpc3RhbmNlO1xyXG4gICAgICBjb2RlID0gcGxhY2UuY29kZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGNvZGU7XHJcbn07XHJcblxyXG5jb25zdCBnZXRDaXR5Q29kZUJ5RGlzdHJpY3RDb2RlID0gYXN5bmMgKFxyXG4gIGRpc3RyaWN0Q29kZTogbnVtYmVyXHJcbik6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuZmlyc3QoXCJjaXR5LmNvZGVcIilcclxuICAgIC5mcm9tKFwiY2l0eV9kaXN0cmljdFwiKVxyXG4gICAgLmpvaW4oXCJjaXR5XCIsIFwiY2l0eV9kaXN0cmljdC5jaXR5X2NvZGVcIiwgXCJjaXR5LmNvZGVcIilcclxuICAgIC53aGVyZShcImNpdHlfZGlzdHJpY3QuY29kZVwiLCBkaXN0cmljdENvZGUpXHJcbiAgICAubGltaXQoMSk7XHJcbiAgcmV0dXJuIHJlc3VsdD8uY29kZSA/PyBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgZmluZE11bmljaXBhbGl0aWVzQW5kUG9zaXRpb25zQnlOYW1lQW5kVHlwZSA9IGFzeW5jIChcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgdHlwZTogTXVuaWNpcGFsaXR5VHlwZVxyXG4pOiBQcm9taXNlPE11bmljaXBhbGl0eVdpdGhQb3NpdGlvbltdPiA9PiB7XHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG4gIHJldHVybiAoXHJcbiAgICB0eXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgPyBhd2FpdCBrbmV4XHJcbiAgICAgICAgICAuc2VsZWN0KFxyXG4gICAgICAgICAgICBcImNpdHkubmFtZVwiLFxyXG4gICAgICAgICAgICBcImNpdHkuY29kZVwiLFxyXG4gICAgICAgICAgICBcImFkZHJlc3NfcG9pbnQud2dzODRfbGF0aXR1ZGVcIixcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50Lndnczg0X2xvbmdpdHVkZVwiXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuZnJvbShcImNpdHlcIilcclxuICAgICAgICAgIC5qb2luKFwiYWRkcmVzc19wb2ludFwiLCBcImNpdHkuY29kZVwiLCBcImFkZHJlc3NfcG9pbnQuY2l0eV9jb2RlXCIpXHJcbiAgICAgICAgICAud2hlcmUoXCJjaXR5Lm5hbWVcIiwgbmFtZSlcclxuICAgICAgICAgIC5ncm91cEJ5KFwiY2l0eS5jb2RlXCIpXHJcbiAgICAgIDogYXdhaXQga25leFxyXG4gICAgICAgICAgLnNlbGVjdChcclxuICAgICAgICAgICAgXCJjaXR5X2Rpc3RyaWN0Lm5hbWVcIixcclxuICAgICAgICAgICAgXCJjaXR5X2Rpc3RyaWN0LmNvZGVcIixcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50Lndnczg0X2xhdGl0dWRlXCIsXHJcbiAgICAgICAgICAgIFwiYWRkcmVzc19wb2ludC53Z3M4NF9sb25naXR1ZGVcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLmZyb20oXCJjaXR5X2Rpc3RyaWN0XCIpXHJcbiAgICAgICAgICAuam9pbihcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50XCIsXHJcbiAgICAgICAgICAgIFwiY2l0eV9kaXN0cmljdC5jb2RlXCIsXHJcbiAgICAgICAgICAgIFwiYWRkcmVzc19wb2ludC5jaXR5X2Rpc3RyaWN0X2NvZGVcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLndoZXJlKFwiY2l0eV9kaXN0cmljdC5uYW1lXCIsIG5hbWUpXHJcbiAgICAgICAgICAuZ3JvdXBCeShcImNpdHlfZGlzdHJpY3QuY29kZVwiKVxyXG4gICkubWFwKChyb3cpID0+ICh7XHJcbiAgICBjb2RlOiByb3cuY29kZSxcclxuICAgIHR5cGUsXHJcbiAgICBsYXQ6IHJvdy53Z3M4NF9sYXRpdHVkZSxcclxuICAgIGxuZzogcm93Lndnczg0X2xvbmdpdHVkZSxcclxuICB9KSk7XHJcbn07XHJcblxyXG5jb25zdCBleHRyYWN0Rm91bmRlck5hbWUgPSAobGluZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAobGluZVswXSA9PT0gXCIjXCIpIHtcclxuICAgIHJldHVybiBsaW5lLnN1YnN0cmluZygxKS50cmltKCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBsaW5lLnRyaW0oKTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBnZXRCYXNlRm91bmRlclF1ZXJ5ID0gKCkgPT4ge1xyXG4gIHJldHVybiBnZXRLbmV4RGIoKVxyXG4gICAgLnNlbGVjdChcclxuICAgICAgXCJmLmlkXCIsXHJcbiAgICAgIFwiZi5uYW1lXCIsXHJcbiAgICAgIFwiZi5pY29cIixcclxuICAgICAgXCJmLmZvdW5kZXJfdHlwZV9jb2RlXCIsXHJcbiAgICAgIFwiZi5jaXR5X2NvZGVcIixcclxuICAgICAgXCJmLmNpdHlfZGlzdHJpY3RfY29kZVwiXHJcbiAgICApXHJcbiAgICAuZnJvbShcImZvdW5kZXIgYXMgZlwiKVxyXG4gICAgLmxlZnRKb2luKFwiY2l0eSBhcyBjXCIsIFwiYy5jb2RlXCIsIFwiZi5jaXR5X2NvZGVcIilcclxuICAgIC5sZWZ0Sm9pbihcImNpdHlfZGlzdHJpY3QgYXMgZFwiLCBcImQuY29kZVwiLCBcImYuY2l0eV9kaXN0cmljdF9jb2RlXCIpXHJcbiAgICAub3JkZXJCeShcImYuZm91bmRlcl90eXBlX2NvZGVcIik7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0Rm91bmRlckJ5SWQgPSBhc3luYyAoXHJcbiAgaWQ6IG51bWJlcixcclxuICBzY2hvb2xUeXBlOiBTY2hvb2xUeXBlXHJcbik6IFByb21pc2U8eyBmb3VuZGVyOiBGb3VuZGVyOyBlcnJvcnM6IFNtZEVycm9yW10gfT4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEJhc2VGb3VuZGVyUXVlcnkoKS53aGVyZShcImYuaWRcIiwgaWQpLmZpcnN0KCk7XHJcbiAgY29uc3QgZm91bmRlciA9IGF3YWl0IHJlc3VsdFRvRm91bmRlcihyZXN1bHQsIHNjaG9vbFR5cGUpO1xyXG4gIHJldHVybiB7XHJcbiAgICBmb3VuZGVyOiBmb3VuZGVyID8/IG51bGwsXHJcbiAgICBlcnJvcnM6IGZvdW5kZXJcclxuICAgICAgPyBbXVxyXG4gICAgICA6IFt3aG9sZUxpbmVFcnJvcihgWsWZaXpvdmF0ZWwgcyBpZCAke2lkfSBuZWV4aXN0dWplLmAsIFwiXCIpXSxcclxuICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRGb3VuZGVyID0gYXN5bmMgKFxyXG4gIG5hbWVXaXRoSGFzaHRhZzogc3RyaW5nLFxyXG4gIHNjaG9vbFR5cGU6IFNjaG9vbFR5cGVcclxuKTogUHJvbWlzZTx7IGZvdW5kZXI6IEZvdW5kZXI7IGVycm9yczogU21kRXJyb3JbXSB9PiA9PiB7XHJcbiAgY29uc3QgZXJyb3JzOiBTbWRFcnJvcltdID0gW107XHJcblxyXG4gIC8vIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBzZWFyY2ggZm9yIGEgY2l0eSBpbnN0ZWFkIG9mIGEgZm91bmRlclxyXG4gIGlmIChuYW1lV2l0aEhhc2h0YWdbMV0gPT09IFwiI1wiKSB7XHJcbiAgICBjb25zdCBjaXR5TmFtZSA9IG5hbWVXaXRoSGFzaHRhZy5zdWJzdHJpbmcoMikudHJpbSgpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcImNvZGVcIilcclxuICAgICAgLmZyb20oXCJjaXR5XCIpXHJcbiAgICAgIC53aGVyZShcIm5hbWVcIiwgY2l0eU5hbWUpXHJcbiAgICAgIC5maXJzdCgpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZvdW5kZXI6IHtcclxuICAgICAgICBuYW1lOiBjaXR5TmFtZSxcclxuICAgICAgICBpY286IFwiMDAwMDAwMDBcIixcclxuICAgICAgICBvcmlnaW5hbFR5cGU6IGNpdHlUeXBlQ29kZSxcclxuICAgICAgICBtdW5pY2lwYWxpdHlUeXBlOiBNdW5pY2lwYWxpdHlUeXBlLkNpdHksXHJcbiAgICAgICAgbXVuaWNpcGFsaXR5Q29kZTogcmVzdWx0LmNvZGUsXHJcbiAgICAgICAgc2Nob29sczogYXdhaXQgZ2V0U2Nob29sc0J5Q2l0eUNvZGUocmVzdWx0LmNvZGUsIHNjaG9vbFR5cGUpLFxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcnMsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgbmFtZSA9IGV4dHJhY3RGb3VuZGVyTmFtZShuYW1lV2l0aEhhc2h0YWcpO1xyXG5cclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRCYXNlRm91bmRlclF1ZXJ5KClcclxuICAgIC53aGVyZShcImYubmFtZVwiLCBuYW1lKVxyXG4gICAgLm9yV2hlcmUoXCJjLm5hbWVcIiwgbmFtZSlcclxuICAgIC5vcldoZXJlKFwiZC5uYW1lXCIsIG5hbWUpXHJcbiAgICAuZmlyc3QoKTtcclxuICBpZiAocmVzdWx0KSB7XHJcbiAgICByZXR1cm4geyBmb3VuZGVyOiBhd2FpdCByZXN1bHRUb0ZvdW5kZXIocmVzdWx0LCBzY2hvb2xUeXBlKSwgZXJyb3JzIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IGFsbEZvdW5kZXJOYW1lcyA9IGF3YWl0IGdldEFsbEZvdW5kZXJOYW1lcygpO1xyXG4gICAgY29uc3QgbmFtZXNMaXN0ID0gYWxsRm91bmRlck5hbWVzXHJcbiAgICAgIC5tYXAoKHJvdykgPT4gcm93LmZvdW5kZXJOYW1lKVxyXG4gICAgICAuY29uY2F0KGFsbEZvdW5kZXJOYW1lcy5tYXAoKHJvdykgPT4gcm93Lm11bmljaXBhbGl0eU5hbWUpKTtcclxuICAgIGNvbnN0IGJlc3RNYXRjaCA9IGZpbmRDbG9zZXN0U3RyaW5nKG5hbWUsIG5hbWVzTGlzdCk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2hSb3cgPSBhbGxGb3VuZGVyTmFtZXMuZmluZChcclxuICAgICAgKGZvdW5kZXJzTmFtZXMpID0+XHJcbiAgICAgICAgZm91bmRlcnNOYW1lcy5mb3VuZGVyTmFtZSA9PT0gYmVzdE1hdGNoIHx8XHJcbiAgICAgICAgZm91bmRlcnNOYW1lcy5tdW5pY2lwYWxpdHlOYW1lID09PSBiZXN0TWF0Y2hcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFiZXN0TWF0Y2hSb3cpIHtcclxuICAgICAgZXJyb3JzLnB1c2goXHJcbiAgICAgICAgd2hvbGVMaW5lRXJyb3IoXHJcbiAgICAgICAgICBgTmVuYcWhbGkganNtZSDFvsOhZG7DqSB6xZlpem92YXRlbGUsIG5lanNww63FoSBqc3RlIHphcG9tbsSbbGkgaW5pY2lhbGl6b3ZhdCBkYXRhYsOhemkuYCxcclxuICAgICAgICAgIG5hbWVXaXRoSGFzaHRhZ1xyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBmb3VuZGVyOiBudWxsLFxyXG4gICAgICAgIGVycm9ycyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBlcnJvcnMucHVzaChcclxuICAgICAgd2hvbGVMaW5lRXJyb3IoXHJcbiAgICAgICAgYFrFmWl6b3ZhdGVsICcke25hbWV9JyBuZWV4aXN0dWplLCBteXNsZWxpIGpzdGUgJyR7YmVzdE1hdGNofSc/YCxcclxuICAgICAgICBuYW1lV2l0aEhhc2h0YWdcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmb3VuZGVyID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcclxuICAgICAgICBcImlkXCIsXHJcbiAgICAgICAgXCJuYW1lXCIsXHJcbiAgICAgICAgXCJpY29cIixcclxuICAgICAgICBcImZvdW5kZXJfdHlwZV9jb2RlXCIsXHJcbiAgICAgICAgXCJjaXR5X2NvZGVcIixcclxuICAgICAgICBcImNpdHlfZGlzdHJpY3RfY29kZVwiXHJcbiAgICAgIClcclxuICAgICAgLmZyb20oXCJmb3VuZGVyXCIpXHJcbiAgICAgIC53aGVyZShcImlkXCIsIGJlc3RNYXRjaFJvdy5pZClcclxuICAgICAgLmZpcnN0KCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3VuZGVyOiBhd2FpdCByZXN1bHRUb0ZvdW5kZXIoZm91bmRlciwgc2Nob29sVHlwZSksXHJcbiAgICAgIGVycm9ycyxcclxuICAgIH07XHJcbiAgfVxyXG59O1xyXG5cclxubGV0IGNhY2hlZENpdHlDb2RlOiBudW1iZXIgPSBudWxsO1xyXG5sZXQgY2l0eUNvZGVGb3VuZGVyOiBGb3VuZGVyID0gbnVsbDtcclxuZXhwb3J0IGNvbnN0IGdldEZvdW5kZXJDaXR5Q29kZSA9IGFzeW5jIChmb3VuZGVyOiBGb3VuZGVyKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICBpZiAoZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkRpc3RyaWN0KSB7XHJcbiAgICBpZiAoY2l0eUNvZGVGb3VuZGVyICE9PSBmb3VuZGVyKSB7XHJcbiAgICAgIGNpdHlDb2RlRm91bmRlciA9IGZvdW5kZXI7XHJcbiAgICAgIGNhY2hlZENpdHlDb2RlID0gKFxyXG4gICAgICAgIGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgICAgICAuZnJvbShcImNpdHlfZGlzdHJpY3RcIilcclxuICAgICAgICAgIC53aGVyZShcImNvZGVcIiwgZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlKVxyXG4gICAgICAgICAgLmZpcnN0KClcclxuICAgICAgKS5jaXR5X2NvZGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FjaGVkQ2l0eUNvZGU7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBmb3VuZGVyLm11bmljaXBhbGl0eUNvZGU7XHJcbiAgfVxyXG59O1xyXG5cclxuaW50ZXJmYWNlIEZvdW5kZXJOYW1lcyB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBmb3VuZGVyTmFtZTogc3RyaW5nO1xyXG4gIG11bmljaXBhbGl0eU5hbWU6IHN0cmluZztcclxufVxyXG5cclxuY29uc3QgcmVzdWx0VG9Gb3VuZGVyID0gYXN5bmMgKFxyXG4gIHJlc3VsdDogYW55LFxyXG4gIHNjaG9vbFR5cGU6IFNjaG9vbFR5cGVcclxuKTogUHJvbWlzZTxGb3VuZGVyPiA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgaWNvOiByZXN1bHQuaWNvLFxyXG4gICAgb3JpZ2luYWxUeXBlOiByZXN1bHQuZm91bmRlcl90eXBlX2NvZGUsXHJcbiAgICBtdW5pY2lwYWxpdHlUeXBlOlxyXG4gICAgICByZXN1bHQuZm91bmRlcl90eXBlX2NvZGUgPT09IGNpdHlUeXBlQ29kZVxyXG4gICAgICAgID8gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICAgICAgOiBNdW5pY2lwYWxpdHlUeXBlLkRpc3RyaWN0LFxyXG4gICAgbXVuaWNpcGFsaXR5Q29kZTpcclxuICAgICAgcmVzdWx0LmZvdW5kZXJfdHlwZV9jb2RlID09PSBjaXR5VHlwZUNvZGVcclxuICAgICAgICA/IHJlc3VsdC5jaXR5X2NvZGVcclxuICAgICAgICA6IHJlc3VsdC5jaXR5X2Rpc3RyaWN0X2NvZGUsXHJcbiAgICBzY2hvb2xzOiBhd2FpdCBnZXRTY2hvb2xzQnlDaXR5Q29kZShyZXN1bHQuY2l0eV9jb2RlLCBzY2hvb2xUeXBlKSxcclxuICB9O1xyXG59O1xyXG5cclxuLy8gaW4gY2FzZSBvZiBjaXRpZXMsIGxvYWQgYWxsIHNjaG9vbHMgaW4gdGhlIGNpdHksIG5vdCBqdXN0IHRoZSBvbmVzIGNvbm5lY3RlZCB0byB0aGUgZm91bmRlclxyXG5jb25zdCBnZXRTY2hvb2xzQnlDaXR5Q29kZSA9IGFzeW5jIChcclxuICBjaXR5Q29kZTogbnVtYmVyLFxyXG4gIHNjaG9vbFR5cGU6IFNjaG9vbFR5cGVcclxuKTogUHJvbWlzZTxTY2hvb2xbXT4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuc2VsZWN0KFwicy5pem9cIiwgXCJzLnJlZGl6b1wiLCBcInMubmFtZVwiLCBcInMuY2FwYWNpdHlcIiwgXCJzbC5hZGRyZXNzX3BvaW50X2lkXCIpXHJcbiAgICAuZnJvbShcInNjaG9vbCBhcyBzXCIpXHJcbiAgICAuam9pbihcInNjaG9vbF9mb3VuZGVyIGFzIHNmXCIsIFwicy5pem9cIiwgXCJzZi5zY2hvb2xfaXpvXCIpXHJcbiAgICAuam9pbihcInNjaG9vbF9sb2NhdGlvbiBhcyBzbFwiLCBcInMuaXpvXCIsIFwic2wuc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXCJmb3VuZGVyIGFzIGZcIiwgXCJzZi5mb3VuZGVyX2lkXCIsIFwiZi5pZFwiKVxyXG4gICAgLndoZXJlKFwiZi5jaXR5X2NvZGVcIiwgY2l0eUNvZGUpXHJcbiAgICAud2hlcmUoXCJzLnR5cGVcIiwgc2Nob29sVHlwZSk7XHJcblxyXG4gIHJldHVybiByZXN1bHQubWFwKChyb3cpID0+ICh7XHJcbiAgICBpem86IFN0cmluZyhyb3cuaXpvKSxcclxuICAgIHJlZGl6bzogU3RyaW5nKHJvdy5yZWRpem8pLFxyXG4gICAgbmFtZTogU3RyaW5nKHJvdy5uYW1lKSxcclxuICAgIGNhcGFjaXR5OiBwYXJzZUludChyb3cuY2FwYWNpdHkpLFxyXG4gICAgbG9jYXRpb25zOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBhZGRyZXNzUG9pbnRJZDogcGFyc2VJbnQocm93LmFkZHJlc3NfcG9pbnRfaWQpLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICAgIHR5cGU6IHNjaG9vbFR5cGUsXHJcbiAgfSkpO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0QWxsRm91bmRlck5hbWVzID0gYXN5bmMgKCk6IFByb21pc2U8Rm91bmRlck5hbWVzW10+ID0+IHtcclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLnNlbGVjdChcclxuICAgICAgXCJmLmlkXCIsXHJcbiAgICAgIFwiZi5uYW1lIGFzIGZvdW5kZXJfbmFtZVwiLFxyXG4gICAgICBcImMubmFtZSBhcyBjaXR5X25hbWVcIixcclxuICAgICAgXCJkLm5hbWUgYXMgY2l0eV9kaXN0cmljdF9uYW1lXCJcclxuICAgIClcclxuICAgIC5mcm9tKFwiZm91bmRlciBhcyBmXCIpXHJcbiAgICAubGVmdEpvaW4oXCJjaXR5IGFzIGNcIiwgXCJjLmNvZGVcIiwgXCJmLmNpdHlfY29kZVwiKVxyXG4gICAgLmxlZnRKb2luKFwiY2l0eV9kaXN0cmljdCBhcyBkXCIsIFwiZC5jb2RlXCIsIFwiZi5jaXR5X2Rpc3RyaWN0X2NvZGVcIik7XHJcbiAgcmV0dXJuIHJlc3VsdC5tYXAoKHJvdykgPT4gKHtcclxuICAgIGlkOiBwYXJzZUludChyb3cuaWQpLFxyXG4gICAgZm91bmRlck5hbWU6IFN0cmluZyhyb3cuZm91bmRlcl9uYW1lKSxcclxuICAgIG11bmljaXBhbGl0eU5hbWU6IFN0cmluZyhcclxuICAgICAgcm93LmNpdHlfbmFtZSA/IHJvdy5jaXR5X25hbWUgOiByb3cuY2l0eV9kaXN0cmljdF9uYW1lXHJcbiAgICApLFxyXG4gIH0pKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBmaW5kTXVuaWNpcGFsaXR5UGFydEJ5TmFtZSA9IGFzeW5jIChcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgZm91bmRlcjogRm91bmRlclxyXG4pOiBQcm9taXNlPE11bmljaXBhbGl0eVBhcnRSZXN1bHQ+ID0+IHtcclxuICBjb25zdCBlcnJvcnM6IFNtZEVycm9yW10gPSBbXTtcclxuICBjb25zdCBjaXR5Q29kZSA9IGF3YWl0IGdldEZvdW5kZXJDaXR5Q29kZShmb3VuZGVyKTtcclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLmZpcnN0KFwiY29kZVwiKVxyXG4gICAgLmZyb20oXCJtdW5pY2lwYWxpdHlfcGFydFwiKVxyXG4gICAgLndoZXJlKHsgbmFtZSwgY2l0eV9jb2RlOiBjaXR5Q29kZSB9KTtcclxuXHJcbiAgaWYgKHJlc3VsdCkge1xyXG4gICAgcmV0dXJuIHsgbXVuaWNpcGFsaXR5UGFydENvZGU6IHJlc3VsdC5jb2RlLCBlcnJvcnMgfTtcclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgYWxsTmFtZXMgPSBhd2FpdCBnZXRBbGxNdW5pY2lwYWxpdHlQYXJ0TmFtZXMoY2l0eUNvZGUpO1xyXG4gICAgY29uc3QgbmFtZXNMaXN0ID0gYWxsTmFtZXMubWFwKChyb3cpID0+IHJvdy5uYW1lKTtcclxuICAgIGNvbnN0IGJlc3RNYXRjaCA9IGZpbmRDbG9zZXN0U3RyaW5nKG5hbWUsIG5hbWVzTGlzdCk7XHJcblxyXG4gICAgZXJyb3JzLnB1c2goe1xyXG4gICAgICBtZXNzYWdlOiBgT2JlYyBhbmkgbcSbc3Rza8OhIMSNw6FzdCAnJHtuYW1lfScgbmVleGlzdHVqZSwgbXlzbGVsaSBqc3RlICcke2Jlc3RNYXRjaH0nP2AsXHJcbiAgICAgIHN0YXJ0T2Zmc2V0OiAwLFxyXG4gICAgICBlbmRPZmZzZXQ6IDAsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtdW5pY2lwYWxpdHlQYXJ0Q29kZTogbnVsbCxcclxuICAgICAgZXJyb3JzLFxyXG4gICAgfTtcclxuICB9XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZmluZE11bmljaXBhbGl0eUJ5TmFtZUFuZFR5cGUgPSBhc3luYyAoXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIHR5cGU6IE11bmljaXBhbGl0eVR5cGUsXHJcbiAgZm91bmRlcjogRm91bmRlclxyXG4pOiBQcm9taXNlPERiTXVuaWNpcGFsaXR5UmVzdWx0PiA9PiB7XHJcbiAgY29uc3QgZXJyb3JzOiBTbWRFcnJvcltdID0gW107XHJcblxyXG4gIGNvbnN0IHJlc3VsdCA9XHJcbiAgICB0eXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgPyBhd2FpdCBnZXRLbmV4RGIoKS5zZWxlY3QoXCJjb2RlXCIpLmZyb20oXCJjaXR5XCIpLndoZXJlKFwibmFtZVwiLCBuYW1lKVxyXG4gICAgICA6IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgICAgICAuc2VsZWN0KFwiY29kZVwiKVxyXG4gICAgICAgICAgLmZyb20oXCJjaXR5X2Rpc3RyaWN0XCIpXHJcbiAgICAgICAgICAud2hlcmUoXCJuYW1lXCIsIG5hbWUpXHJcbiAgICAgICAgICAuYW5kV2hlcmUoXCJjaXR5X2NvZGVcIiwgYXdhaXQgZ2V0Rm91bmRlckNpdHlDb2RlKGZvdW5kZXIpKTtcclxuXHJcbiAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgY2l0eUNvZGUgPSBhd2FpdCBnZXRGb3VuZGVyQ2l0eUNvZGUoZm91bmRlcik7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgICAgLnNlbGVjdChcImNpdHlfY29kZVwiLCBcIndnczg0X2xhdGl0dWRlXCIsIFwid2dzODRfbG9uZ2l0dWRlXCIpXHJcbiAgICAgICAgLmZyb20oXCJhZGRyZXNzX3BvaW50XCIpXHJcbiAgICAgICAgLmdyb3VwQnkoXCJjaXR5X2NvZGVcIilcclxuICAgICAgICAud2hlcmVJbihcclxuICAgICAgICAgIFwiY2l0eV9jb2RlXCIsXHJcbiAgICAgICAgICByZXN1bHQubWFwKChyb3cpID0+IHJvdy5jb2RlKVxyXG4gICAgICAgICk7XHJcbiAgICAgIGNvbnN0IGZvdW5kZXJQb3NpdGlvbiA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgICAgLmZpcnN0KFwid2dzODRfbGF0aXR1ZGVcIiwgXCJ3Z3M4NF9sb25naXR1ZGVcIilcclxuICAgICAgICAuZnJvbShcImFkZHJlc3NfcG9pbnRcIilcclxuICAgICAgICAuZ3JvdXBCeShcImNpdHlfY29kZVwiKVxyXG4gICAgICAgIC53aGVyZShcImNpdHlfY29kZVwiLCBjaXR5Q29kZSk7XHJcbiAgICAgIGNvbnN0IGNsb3Nlc3RDb2RlID0gYXdhaXQgZ2V0Q2xvc2VzdENvZGUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29kZTogY2l0eUNvZGUsXHJcbiAgICAgICAgICBsYXQ6IGZvdW5kZXJQb3NpdGlvbi53Z3M4NF9sYXRpdHVkZSxcclxuICAgICAgICAgIGxuZzogZm91bmRlclBvc2l0aW9uLndnczg0X2xvbmdpdHVkZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9ucy5tYXAoKHJvdykgPT4gKHtcclxuICAgICAgICAgIGNvZGU6IHJvdy5jaXR5X2NvZGUsXHJcbiAgICAgICAgICBsYXQ6IHJvdy53Z3M4NF9sYXRpdHVkZSxcclxuICAgICAgICAgIGxuZzogcm93Lndnczg0X2xvbmdpdHVkZSxcclxuICAgICAgICB9KSlcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHsgbXVuaWNpcGFsaXR5OiB7IGNvZGU6IGNsb3Nlc3RDb2RlLCB0eXBlIH0sIGVycm9ycyB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgbXVuaWNpcGFsaXR5OiB7IGNvZGU6IHJlc3VsdFswXS5jb2RlLCB0eXBlIH0sIGVycm9ycyB9O1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBhbGxOYW1lcyA9IGF3YWl0IGdldEFsbE11bmljaXBhbGl0eU5hbWVzKHR5cGUpO1xyXG4gICAgY29uc3QgbmFtZXNMaXN0ID0gYWxsTmFtZXMubWFwKChyb3cpID0+IHJvdy5uYW1lKTtcclxuICAgIGNvbnN0IGJlc3RNYXRjaCA9IGZpbmRDbG9zZXN0U3RyaW5nKG5hbWUsIG5hbWVzTGlzdCk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2hSb3cgPSBhbGxOYW1lcy5maW5kKFxyXG4gICAgICAobXVuaWNpcGFsaXR5KSA9PiBtdW5pY2lwYWxpdHkubmFtZSA9PT0gYmVzdE1hdGNoXHJcbiAgICApO1xyXG5cclxuICAgIGVycm9ycy5wdXNoKHtcclxuICAgICAgbWVzc2FnZTogYE9iZWMgYW5pIG3Em3N0c2vDoSDEjcOhc3QgJyR7bmFtZX0nIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtiZXN0TWF0Y2h9Jz9gLFxyXG4gICAgICBzdGFydE9mZnNldDogMCxcclxuICAgICAgZW5kT2Zmc2V0OiAwLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbXVuaWNpcGFsaXR5OiB7IGNvZGU6IGJlc3RNYXRjaFJvdy5jb2RlLCB0eXBlIH0sXHJcbiAgICAgIGVycm9ycyxcclxuICAgIH07XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgZ2V0QWxsTXVuaWNpcGFsaXR5TmFtZXMgPSBhc3luYyAoXHJcbiAgdHlwZTogTXVuaWNpcGFsaXR5VHlwZVxyXG4pOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBjb2RlOiBudW1iZXIgfVtdPiA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgIC5zZWxlY3QoXCJuYW1lXCIsIFwiY29kZVwiKVxyXG4gICAgICAuZnJvbSh0eXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHkgPyBcImNpdHlcIiA6IFwiY2l0eV9kaXN0cmljdFwiKVxyXG4gICkubWFwKChyb3cpID0+ICh7XHJcbiAgICBuYW1lOiByb3cubmFtZSxcclxuICAgIGNvZGU6IHJvdy5jb2RlLFxyXG4gIH0pKTtcclxufTtcclxuXHJcbmNvbnN0IGdldEFsbE11bmljaXBhbGl0eVBhcnROYW1lcyA9IGFzeW5jIChcclxuICBjaXR5Q29kZTogbnVtYmVyXHJcbik6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IGNvZGU6IG51bWJlciB9W10+ID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcIm5hbWVcIiwgXCJjb2RlXCIpXHJcbiAgICAgIC5mcm9tKFwibXVuaWNpcGFsaXR5X3BhcnRcIilcclxuICAgICAgLndoZXJlKFwiY2l0eV9jb2RlXCIsIGNpdHlDb2RlKVxyXG4gICkubWFwKChyb3cpID0+ICh7XHJcbiAgICBuYW1lOiByb3cubmFtZSxcclxuICAgIGNvZGU6IHJvdy5jb2RlLFxyXG4gIH0pKTtcclxufTtcclxuIl19
|
|
461
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm91bmRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvZm91bmRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTXhELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLHdCQUF3QixHQUN6QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUVMLGdCQUFnQixHQUtqQixNQUFNLFNBQVMsQ0FBQztBQUVqQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFFakMsTUFBTSxzQ0FBc0MsR0FBRztJQUM3QyxXQUFXO0lBQ1gsV0FBVztJQUNYLFdBQVc7SUFDWCxXQUFXO0lBQ1gsV0FBVztJQUNYLFdBQVc7SUFDWCxXQUFXO0lBQ1gsV0FBVztDQUNaLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUFFLFFBQW1CLEVBQW1CLEVBQUU7SUFDM0UsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDekIsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLENBQUM7SUFFdkMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7UUFDOUIsSUFDRSxPQUFPLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtZQUNsRCxPQUFPLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsUUFBUSxFQUN0RDtZQUNBLFNBQVM7U0FDVjtRQUNELE1BQU0seUJBQXlCLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkUsd0ZBQXdGO1FBQ3hGLElBQUksZ0JBQWdC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LGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FDbkUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7UUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7S0FDZixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sMkJBQTJCLEdBQUcsS0FBSyxFQUN2QyxRQUFnQixFQUMyQixFQUFFO0lBQzdDLE9BQU8sQ0FDTCxNQUFNLFNBQVMsRUFBRTtTQUNkLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1NBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztTQUN6QixLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUNoQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNkLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtLQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRpc3RhbmNlIGZyb20gXCJAdHVyZi9kaXN0YW5jZVwiO1xyXG5pbXBvcnQgeyB3aG9sZUxpbmVFcnJvciB9IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vc21kXCI7XHJcbmltcG9ydCB7XHJcbiAgRGJNdW5pY2lwYWxpdHlSZXN1bHQsXHJcbiAgTXVuaWNpcGFsaXR5UGFydFJlc3VsdCxcclxuICBTbWRFcnJvcixcclxufSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3R5cGVzXCI7XHJcbmltcG9ydCB7XHJcbiAgZXh0cmFjdE11bmljaXBhbGl0eU5hbWUsXHJcbiAgZmluZENsb3Nlc3RTdHJpbmcsXHJcbiAgc2FuaXRpemVNdW5pY2lwYWxpdHlOYW1lLFxyXG59IGZyb20gXCIuLi91dGlscy9oZWxwZXJzXCI7XHJcbmltcG9ydCB7IGdldEtuZXhEYiwgaW5zZXJ0QXV0b2luY3JlbWVudFJvdywgaW5zZXJ0TXVsdGlwbGVSb3dzIH0gZnJvbSBcIi4vZGJcIjtcclxuaW1wb3J0IHtcclxuICBGb3VuZGVyLFxyXG4gIE11bmljaXBhbGl0eVR5cGUsXHJcbiAgTXVuaWNpcGFsaXR5V2l0aFBvc2l0aW9uLFxyXG4gIFBsYWNlV2l0aFBvc2l0aW9uLFxyXG4gIFNjaG9vbCxcclxuICBTY2hvb2xUeXBlLFxyXG59IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5jb25zdCBjaXR5VHlwZUNvZGUgPSAyNjE7XHJcbmNvbnN0IGNpdHlEaXN0cmljdFR5cGVDb2RlID0gMjYzO1xyXG5cclxuY29uc3Qgc2Nob29sc091dHNpZGVUaGVpckZvdW5kZXJNdW5pY2lwYWxpdHkgPSBbXHJcbiAgXCIxODEwNDIwOTZcIixcclxuICBcIjEwNzUxNjMwNlwiLFxyXG4gIFwiMTgxMTQ3MjQ2XCIsXHJcbiAgXCIxNTAwNzY5MjRcIixcclxuICBcIjEwNzU4Mzk5MlwiLFxyXG4gIFwiMTgxMDI0MTYxXCIsXHJcbiAgXCIxODEwNjQ1ODhcIixcclxuICBcIjEwNzYyOTA2MlwiLFxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydEZvdW5kZXJzID0gYXN5bmMgKGZvdW5kZXJzOiBGb3VuZGVyW10pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIGxldCBpbnNlcnRlZEZvdW5kZXJzID0gMDtcclxuICBjb25zdCBzY2hvb2xGb3VuZGVyQ29ubmVjdGlvbkRhdGEgPSBbXTtcclxuXHJcbiAgZm9yIChjb25zdCBmb3VuZGVyIG9mIGZvdW5kZXJzKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSAhPT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5ICYmXHJcbiAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSAhPT0gTXVuaWNpcGFsaXR5VHlwZS5EaXN0cmljdFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSA9IGV4dHJhY3RNdW5pY2lwYWxpdHlOYW1lKGZvdW5kZXIpO1xyXG5cclxuICAgIC8vIGNoZWNrIGlmIHRoZSBleHRyYWN0ZWQgbXVuaWNpcGFsaXR5IG5hbWUgaXMgdGhlIHNhbWUgYXMgaW4gYWxsIHRoZSBzY2hvb2xzJyBsb2NhdGlvbnNcclxuICAgIGxldCBkaWZmZXJpbmdTY2hvb2xzID0gW107XHJcbiAgICBsZXQgbXVuaWNpcGFsaXR5Q29kZSA9IC0xO1xyXG5cclxuICAgIGZvciAoY29uc3Qgc2Nob29sIG9mIGZvdW5kZXIuc2Nob29scykge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgICA/IGdldENpdHlPZlNjaG9vbChzY2hvb2wuaXpvKVxyXG4gICAgICAgIDogZ2V0RGlzdHJpY3RPZlNjaG9vbChzY2hvb2wuaXpvKSk7XHJcbiAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBgaXpvOiAke3NjaG9vbC5pem99LCBleHRyYWN0ZWQ6ICR7ZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZX0sIFJVSUFOOiBVTkRFRklORURgXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkaWZmZXJpbmdTY2hvb2xzLnB1c2goc2Nob29sKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB7IG5hbWUsIGNvZGUgfSA9IHJlc3VsdDtcclxuICAgICAgICBpZiAobmFtZSAhPT0gZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSkge1xyXG4gICAgICAgICAgLy8gYWxzbyBmaWx0ZXIgb3V0IGtub3duIGV4Y2VwdGlvbnNcclxuICAgICAgICAgIGlmICghc2Nob29sc091dHNpZGVUaGVpckZvdW5kZXJNdW5pY2lwYWxpdHkuaW5jbHVkZXMoc2Nob29sLml6bykpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgYGl6bzogJHtzY2hvb2wuaXpvfSwgZXh0cmFjdGVkOiAke2V4dHJhY3RlZE11bmljaXBhbGl0eU5hbWV9LCBSVUlBTjogJHtuYW1lfWBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgZGlmZmVyaW5nU2Nob29scy5wdXNoKHNjaG9vbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0b3JlIG11bmljaXBhbGl0eUNvZGUgZXZlbiBpZiB0aGUgbmFtZXMgZG9uJ3QgbWF0Y2gsIHdlIHdpbGwgdXNlIGl0IGxhdGVyXHJcbiAgICAgICAgbXVuaWNpcGFsaXR5Q29kZSA9IHBhcnNlSW50KGNvZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbXVuaWNpcGFsaXR5Q29kZSA9IGF3YWl0IGZpeEZvdW5kZXJQcm9ibGVtcyhcclxuICAgICAgZm91bmRlcixcclxuICAgICAgbXVuaWNpcGFsaXR5Q29kZSxcclxuICAgICAgZGlmZmVyaW5nU2Nob29scyxcclxuICAgICAgZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjaXR5RGlzdHJpY3RDb2RlID1cclxuICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkRpc3RyaWN0XHJcbiAgICAgICAgPyBtdW5pY2lwYWxpdHlDb2RlLnRvU3RyaW5nKClcclxuICAgICAgICA6IG51bGw7XHJcbiAgICBsZXQgY2l0eUNvZGUgPSBudWxsO1xyXG4gICAgaWYgKGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5KSB7XHJcbiAgICAgIGNpdHlDb2RlID0gbXVuaWNpcGFsaXR5Q29kZT8udG9TdHJpbmcoKSA/PyBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2l0eUNvZGUgPSBhd2FpdCBnZXRDaXR5Q29kZUJ5RGlzdHJpY3RDb2RlKG11bmljaXBhbGl0eUNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcIipcIilcclxuICAgICAgLmZyb20oXCJmb3VuZGVyXCIpXHJcbiAgICAgIC53aGVyZSh7XHJcbiAgICAgICAgbmFtZTogc2FuaXRpemVNdW5pY2lwYWxpdHlOYW1lKGZvdW5kZXIubmFtZSksXHJcbiAgICAgICAgaWNvOiBmb3VuZGVyLmljbyxcclxuICAgICAgfSk7XHJcblxyXG4gICAgbGV0IGZvdW5kZXJJZCA9IGV4aXN0aW5nWzBdPy5pZCA/PyBudWxsO1xyXG5cclxuICAgIGlmIChleGlzdGluZy5sZW5ndGggPT09IDApIHtcclxuICAgICAgZm91bmRlcklkID0gYXdhaXQgaW5zZXJ0QXV0b2luY3JlbWVudFJvdyhcclxuICAgICAgICBbXHJcbiAgICAgICAgICBzYW5pdGl6ZU11bmljaXBhbGl0eU5hbWUoZm91bmRlci5uYW1lKSxcclxuICAgICAgICAgIHNhbml0aXplTXVuaWNpcGFsaXR5TmFtZShleHRyYWN0ZWRNdW5pY2lwYWxpdHlOYW1lKSxcclxuICAgICAgICAgIGZvdW5kZXIuaWNvLFxyXG4gICAgICAgICAgU3RyaW5nKGZvdW5kZXIub3JpZ2luYWxUeXBlKSxcclxuICAgICAgICAgIGNpdHlDb2RlLFxyXG4gICAgICAgICAgY2l0eURpc3RyaWN0Q29kZSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIFwiZm91bmRlclwiLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJzaG9ydF9uYW1lXCIsXHJcbiAgICAgICAgICBcImljb1wiLFxyXG4gICAgICAgICAgXCJmb3VuZGVyX3R5cGVfY29kZVwiLFxyXG4gICAgICAgICAgXCJjaXR5X2NvZGVcIixcclxuICAgICAgICAgIFwiY2l0eV9kaXN0cmljdF9jb2RlXCIsXHJcbiAgICAgICAgXVxyXG4gICAgICApO1xyXG4gICAgICBpbnNlcnRlZEZvdW5kZXJzKys7XHJcbiAgICB9XHJcblxyXG4gICAgZm91bmRlci5zY2hvb2xzLmZvckVhY2goKHNjaG9vbCkgPT4ge1xyXG4gICAgICBzY2hvb2xGb3VuZGVyQ29ubmVjdGlvbkRhdGEucHVzaChbc2Nob29sLml6bywgZm91bmRlcklkXSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGluc2VydGVkQ29ubmVjdGlvbnMgPSBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBzY2hvb2xGb3VuZGVyQ29ubmVjdGlvbkRhdGEsXHJcbiAgICBcInNjaG9vbF9mb3VuZGVyXCIsXHJcbiAgICBbXCJzY2hvb2xfaXpvXCIsIFwiZm91bmRlcl9pZFwiXSxcclxuICAgIHRydWVcclxuICApO1xyXG5cclxuICByZXR1cm4gaW5zZXJ0ZWRGb3VuZGVycyArIGluc2VydGVkQ29ubmVjdGlvbnM7XHJcbn07XHJcblxyXG5jb25zdCBnZXRDaXR5T2ZTY2hvb2wgPSBhc3luYyAoaXpvOiBzdHJpbmcpOiBQcm9taXNlPGFueT4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLnNlbGVjdChcImMubmFtZVwiLCBcImMuY29kZVwiKVxyXG4gICAgLmZyb20oXCJzY2hvb2wgYXMgc1wiKVxyXG4gICAgLmpvaW4oXCJzY2hvb2xfbG9jYXRpb24gYXMgbFwiLCBcInMuaXpvXCIsIFwibC5zY2hvb2xfaXpvXCIpXHJcbiAgICAuam9pbihcImFkZHJlc3NfcG9pbnQgYXMgYVwiLCBcImwuYWRkcmVzc19wb2ludF9pZFwiLCBcImEuaWRcIilcclxuICAgIC5qb2luKFwiY2l0eSBhcyBjXCIsIFwiYS5jaXR5X2NvZGVcIiwgXCJjLmNvZGVcIilcclxuICAgIC53aGVyZShcInMuaXpvXCIsIGl6bylcclxuICAgIC5saW1pdCgxKVxyXG4gICAgLmZpcnN0KCk7XHJcbn07XHJcblxyXG5jb25zdCBnZXREaXN0cmljdE9mU2Nob29sID0gYXN5bmMgKGl6bzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXCJkLm5hbWVcIiwgXCJkLmNvZGVcIilcclxuICAgIC5mcm9tKFwic2Nob29sIGFzIHNcIilcclxuICAgIC5qb2luKFwic2Nob29sX2xvY2F0aW9uIGFzIGxcIiwgXCJzLml6b1wiLCBcImwuc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXCJhZGRyZXNzX3BvaW50IGFzIGFcIiwgXCJsLmFkZHJlc3NfcG9pbnRfaWRcIiwgXCJhLmlkXCIpXHJcbiAgICAuam9pbihcImNpdHlfZGlzdHJpY3QgYXMgZFwiLCBcImEuY2l0eV9kaXN0cmljdF9jb2RlXCIsIFwiZC5jb2RlXCIpXHJcbiAgICAud2hlcmUoXCJzLml6b1wiLCBpem8pXHJcbiAgICAubGltaXQoMSlcclxuICAgIC5maXJzdCgpO1xyXG59O1xyXG5cclxuY29uc3QgZml4Rm91bmRlclByb2JsZW1zID0gYXN5bmMgKFxyXG4gIGZvdW5kZXI6IEZvdW5kZXIsXHJcbiAgbXVuaWNpcGFsaXR5Q29kZTogbnVtYmVyLFxyXG4gIGRpZmZlcmluZ1NjaG9vbHM6IFNjaG9vbFtdLFxyXG4gIGV4dHJhY3RlZE11bmljaXBhbGl0eU5hbWU6IHN0cmluZ1xyXG4pOiBQcm9taXNlPG51bWJlciB8IG51bGw+ID0+IHtcclxuICBpZiAoXHJcbiAgICBkaWZmZXJpbmdTY2hvb2xzLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgZGlmZmVyaW5nU2Nob29scy5sZW5ndGggPCBmb3VuZGVyLnNjaG9vbHMubGVuZ3RoXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gbXVuaWNpcGFsaXR5Q29kZTtcclxuICB9XHJcblxyXG4gIC8vIGVpdGhlciB0aGUgc2Nob29sIGRvZXMgbm90IGhhdmUgYSBwb3NpdGlvbiAoaW52YWxpZCBSVUlBTiBvciBtaXNzaW5nIGJ1aWxkaW5nKVxyXG4gIC8vIG9yIHRoZSBzY2hvb2wgaXMgbm90IGluIHRoZSBzYW1lIG11bmljaXBhbGl0eSBhcyB0aGUgZm91bmRlclxyXG5cclxuICAvLyBmaW5kIGFsbCBjaXRpZXMgYW5kIHRoZWlyIHBvc2l0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBtdW5pY2lwYWxpdHlOYW1lXHJcbiAgY29uc3QgbXVuaWNpcGFsaXRpZXMgPSBhd2FpdCBmaW5kTXVuaWNpcGFsaXRpZXNBbmRQb3NpdGlvbnNCeU5hbWVBbmRUeXBlKFxyXG4gICAgZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSxcclxuICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZVxyXG4gICk7XHJcblxyXG4gIC8vIGdldCBvbmUgc2Nob29sIHBvc2l0aW9uIChpZiB0aGVyZSBhcmUgbW9yZSBzY2hvb2xzLCB0aGV5IHNob3VsZCBiZSBjbG9zZSB0byBlYWNoIG90aGVyKVxyXG4gIGNvbnN0IHNjaG9vbFBvc2l0aW9uOlxyXG4gICAgfCB7IHdnczg0X2xhdGl0dWRlOiBudW1iZXI7IHdnczg0X2xvbmdpdHVkZTogbnVtYmVyIH1cclxuICAgIHwgdW5kZWZpbmVkID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXCJhZGRyZXNzX3BvaW50Lndnczg0X2xhdGl0dWRlXCIsIFwiYWRkcmVzc19wb2ludC53Z3M4NF9sb25naXR1ZGVcIilcclxuICAgIC5mcm9tKFwic2Nob29sXCIpXHJcbiAgICAuam9pbihcInNjaG9vbF9sb2NhdGlvblwiLCBcInNjaG9vbC5pem9cIiwgXCJzY2hvb2xfbG9jYXRpb24uc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXHJcbiAgICAgIFwiYWRkcmVzc19wb2ludFwiLFxyXG4gICAgICBcInNjaG9vbF9sb2NhdGlvbi5hZGRyZXNzX3BvaW50X2lkXCIsXHJcbiAgICAgIFwiYWRkcmVzc19wb2ludC5pZFwiXHJcbiAgICApXHJcbiAgICAud2hlcmVJbihcclxuICAgICAgXCJzY2hvb2wuaXpvXCIsXHJcbiAgICAgIGRpZmZlcmluZ1NjaG9vbHMubWFwKChzY2hvb2wpID0+IHNjaG9vbC5pem8pXHJcbiAgICApXHJcbiAgICAubGltaXQoMSlcclxuICAgIC5maXJzdCgpO1xyXG5cclxuICBpZiAoc2Nob29sUG9zaXRpb24pIHtcclxuICAgIGlmIChtdW5pY2lwYWxpdGllcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgaWYgKG11bmljaXBhbGl0eUNvZGUgPT09IC0xKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBgbm8gbXVuaWNpcGFsaXR5IGJ5IG5hbWUgb3IgYnkgbG9jYXRpb24gZm91bmQgZm9yICR7Zm91bmRlci5uYW1lfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgXCJubyBtdW5pY2lwYWxpdHkgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lLCB1c2luZyB0aGUgbXVuaWNpcGFsaXR5IGZyb20gUlVJQU4gY29kZVwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChtdW5pY2lwYWxpdGllcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgXCJ1c2luZyB0aGUgb25seSBtdW5pY2lwYWxpdHkgZm91bmQgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lXCJcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIG11bmljaXBhbGl0aWVzWzBdLmNvZGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInVzaW5nIHRoZSBjbG9zZXN0IG11bmljaXBhbGl0eSBtYXRjaGluZyB0aGUgZXh0cmFjdGVkIG5hbWVcIik7XHJcbiAgICAgIHJldHVybiBnZXRDbG9zZXN0Q29kZShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2RlOiAxLFxyXG4gICAgICAgICAgbGF0OiBzY2hvb2xQb3NpdGlvbi53Z3M4NF9sYXRpdHVkZSxcclxuICAgICAgICAgIGxuZzogc2Nob29sUG9zaXRpb24ud2dzODRfbG9uZ2l0dWRlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbXVuaWNpcGFsaXRpZXMubWFwKChtdW5pY2lwYWxpdHkpID0+ICh7XHJcbiAgICAgICAgICBjb2RlOiBtdW5pY2lwYWxpdHkuY29kZSxcclxuICAgICAgICAgIGxhdDogbXVuaWNpcGFsaXR5LmxhdCxcclxuICAgICAgICAgIGxuZzogbXVuaWNpcGFsaXR5LmxuZyxcclxuICAgICAgICB9KSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKG11bmljaXBhbGl0aWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKG11bmljaXBhbGl0aWVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgIGB1c2luZyB0aGUgZmlyc3QgbXVuaWNpcGFsaXR5IG1hdGNoaW5nIHRoZSBleHRyYWN0ZWQgbmFtZSAoJHttdW5pY2lwYWxpdGllcy5sZW5ndGh9IG1hdGNoZXMpIC0gcG9zc2libHkgaW5jb3JyZWN0IWBcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgXCJ1c2luZyB0aGUgb25seSBtdW5pY2lwYWxpdHkgZm91bmQgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lXCJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtdW5pY2lwYWxpdGllc1swXS5jb2RlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgYG5vIG11bmljaXBhbGl0eSBieSBuYW1lIG9yIGJ5IGxvY2F0aW9uIGZvdW5kIGZvciAke2ZvdW5kZXIubmFtZX1gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldENsb3Nlc3RDb2RlID0gYXN5bmMgKFxyXG4gIGZyb206IFBsYWNlV2l0aFBvc2l0aW9uLFxyXG4gIHRvTGlzdDogUGxhY2VXaXRoUG9zaXRpb25bXVxyXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIGxldCBsb3dlc3REaXN0YW5jZSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gIGxldCBjb2RlOiBudW1iZXIgPSBudWxsO1xyXG4gIGZvciAoY29uc3QgcGxhY2Ugb2YgdG9MaXN0KSB7XHJcbiAgICBsZXQgbXVuaWNpcGFsaXR5RGlzdGFuY2UgPSBkaXN0YW5jZShcclxuICAgICAgW3BsYWNlLmxhdCwgcGxhY2UubG5nXSxcclxuICAgICAgW2Zyb20ubGF0LCBmcm9tLmxuZ11cclxuICAgICk7XHJcbiAgICBpZiAobXVuaWNpcGFsaXR5RGlzdGFuY2UgPCBsb3dlc3REaXN0YW5jZSkge1xyXG4gICAgICBsb3dlc3REaXN0YW5jZSA9IG11bmljaXBhbGl0eURpc3RhbmNlO1xyXG4gICAgICBjb2RlID0gcGxhY2UuY29kZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGNvZGU7XHJcbn07XHJcblxyXG5jb25zdCBnZXRDaXR5Q29kZUJ5RGlzdHJpY3RDb2RlID0gYXN5bmMgKFxyXG4gIGRpc3RyaWN0Q29kZTogbnVtYmVyXHJcbik6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuZmlyc3QoXCJjaXR5LmNvZGVcIilcclxuICAgIC5mcm9tKFwiY2l0eV9kaXN0cmljdFwiKVxyXG4gICAgLmpvaW4oXCJjaXR5XCIsIFwiY2l0eV9kaXN0cmljdC5jaXR5X2NvZGVcIiwgXCJjaXR5LmNvZGVcIilcclxuICAgIC53aGVyZShcImNpdHlfZGlzdHJpY3QuY29kZVwiLCBkaXN0cmljdENvZGUpXHJcbiAgICAubGltaXQoMSk7XHJcbiAgcmV0dXJuIHJlc3VsdD8uY29kZSA/PyBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgZmluZE11bmljaXBhbGl0aWVzQW5kUG9zaXRpb25zQnlOYW1lQW5kVHlwZSA9IGFzeW5jIChcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgdHlwZTogTXVuaWNpcGFsaXR5VHlwZVxyXG4pOiBQcm9taXNlPE11bmljaXBhbGl0eVdpdGhQb3NpdGlvbltdPiA9PiB7XHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG4gIHJldHVybiAoXHJcbiAgICB0eXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgPyBhd2FpdCBrbmV4XHJcbiAgICAgICAgICAuc2VsZWN0KFxyXG4gICAgICAgICAgICBcImNpdHkubmFtZVwiLFxyXG4gICAgICAgICAgICBcImNpdHkuY29kZVwiLFxyXG4gICAgICAgICAgICBcImFkZHJlc3NfcG9pbnQud2dzODRfbGF0aXR1ZGVcIixcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50Lndnczg0X2xvbmdpdHVkZVwiXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuZnJvbShcImNpdHlcIilcclxuICAgICAgICAgIC5qb2luKFwiYWRkcmVzc19wb2ludFwiLCBcImNpdHkuY29kZVwiLCBcImFkZHJlc3NfcG9pbnQuY2l0eV9jb2RlXCIpXHJcbiAgICAgICAgICAud2hlcmUoXCJjaXR5Lm5hbWVcIiwgbmFtZSlcclxuICAgICAgICAgIC5ncm91cEJ5KFwiY2l0eS5jb2RlXCIpXHJcbiAgICAgIDogYXdhaXQga25leFxyXG4gICAgICAgICAgLnNlbGVjdChcclxuICAgICAgICAgICAgXCJjaXR5X2Rpc3RyaWN0Lm5hbWVcIixcclxuICAgICAgICAgICAgXCJjaXR5X2Rpc3RyaWN0LmNvZGVcIixcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50Lndnczg0X2xhdGl0dWRlXCIsXHJcbiAgICAgICAgICAgIFwiYWRkcmVzc19wb2ludC53Z3M4NF9sb25naXR1ZGVcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLmZyb20oXCJjaXR5X2Rpc3RyaWN0XCIpXHJcbiAgICAgICAgICAuam9pbihcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50XCIsXHJcbiAgICAgICAgICAgIFwiY2l0eV9kaXN0cmljdC5jb2RlXCIsXHJcbiAgICAgICAgICAgIFwiYWRkcmVzc19wb2ludC5jaXR5X2Rpc3RyaWN0X2NvZGVcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLndoZXJlKFwiY2l0eV9kaXN0cmljdC5uYW1lXCIsIG5hbWUpXHJcbiAgICAgICAgICAuZ3JvdXBCeShcImNpdHlfZGlzdHJpY3QuY29kZVwiKVxyXG4gICkubWFwKChyb3cpID0+ICh7XHJcbiAgICBjb2RlOiByb3cuY29kZSxcclxuICAgIHR5cGUsXHJcbiAgICBsYXQ6IHJvdy53Z3M4NF9sYXRpdHVkZSxcclxuICAgIGxuZzogcm93Lndnczg0X2xvbmdpdHVkZSxcclxuICB9KSk7XHJcbn07XHJcblxyXG5jb25zdCBleHRyYWN0Rm91bmRlck5hbWUgPSAobGluZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAobGluZVswXSA9PT0gXCIjXCIpIHtcclxuICAgIHJldHVybiBsaW5lLnN1YnN0cmluZygxKS50cmltKCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBsaW5lLnRyaW0oKTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBnZXRCYXNlRm91bmRlclF1ZXJ5ID0gKCkgPT4ge1xyXG4gIHJldHVybiBnZXRLbmV4RGIoKVxyXG4gICAgLnNlbGVjdChcclxuICAgICAgXCJmLmlkXCIsXHJcbiAgICAgIFwiZi5uYW1lXCIsXHJcbiAgICAgIFwiZi5pY29cIixcclxuICAgICAgXCJmLmZvdW5kZXJfdHlwZV9jb2RlXCIsXHJcbiAgICAgIFwiZi5jaXR5X2NvZGVcIixcclxuICAgICAgXCJmLmNpdHlfZGlzdHJpY3RfY29kZVwiXHJcbiAgICApXHJcbiAgICAuZnJvbShcImZvdW5kZXIgYXMgZlwiKVxyXG4gICAgLmxlZnRKb2luKFwiY2l0eSBhcyBjXCIsIFwiYy5jb2RlXCIsIFwiZi5jaXR5X2NvZGVcIilcclxuICAgIC5sZWZ0Sm9pbihcImNpdHlfZGlzdHJpY3QgYXMgZFwiLCBcImQuY29kZVwiLCBcImYuY2l0eV9kaXN0cmljdF9jb2RlXCIpXHJcbiAgICAub3JkZXJCeShcImYuZm91bmRlcl90eXBlX2NvZGVcIik7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0Rm91bmRlckJ5SWQgPSBhc3luYyAoXHJcbiAgaWQ6IG51bWJlcixcclxuICBzY2hvb2xUeXBlOiBTY2hvb2xUeXBlXHJcbik6IFByb21pc2U8eyBmb3VuZGVyOiBGb3VuZGVyOyBlcnJvcnM6IFNtZEVycm9yW10gfT4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEJhc2VGb3VuZGVyUXVlcnkoKS53aGVyZShcImYuaWRcIiwgaWQpLmZpcnN0KCk7XHJcbiAgY29uc3QgZm91bmRlciA9IGF3YWl0IHJlc3VsdFRvRm91bmRlcihyZXN1bHQsIHNjaG9vbFR5cGUpO1xyXG4gIHJldHVybiB7XHJcbiAgICBmb3VuZGVyOiBmb3VuZGVyID8/IG51bGwsXHJcbiAgICBlcnJvcnM6IGZvdW5kZXJcclxuICAgICAgPyBbXVxyXG4gICAgICA6IFt3aG9sZUxpbmVFcnJvcihgWsWZaXpvdmF0ZWwgcyBpZCAke2lkfSBuZWV4aXN0dWplLmAsIFwiXCIpXSxcclxuICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRGb3VuZGVyID0gYXN5bmMgKFxyXG4gIG5hbWVXaXRoSGFzaHRhZzogc3RyaW5nLFxyXG4gIHNjaG9vbFR5cGU6IFNjaG9vbFR5cGVcclxuKTogUHJvbWlzZTx7IGZvdW5kZXI6IEZvdW5kZXI7IGVycm9yczogU21kRXJyb3JbXSB9PiA9PiB7XHJcbiAgY29uc3QgZXJyb3JzOiBTbWRFcnJvcltdID0gW107XHJcblxyXG4gIC8vIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBzZWFyY2ggZm9yIGEgY2l0eSBpbnN0ZWFkIG9mIGEgZm91bmRlclxyXG4gIGlmIChuYW1lV2l0aEhhc2h0YWdbMV0gPT09IFwiI1wiKSB7XHJcbiAgICBjb25zdCBjaXR5TmFtZSA9IG5hbWVXaXRoSGFzaHRhZy5zdWJzdHJpbmcoMikudHJpbSgpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcImNvZGVcIilcclxuICAgICAgLmZyb20oXCJjaXR5XCIpXHJcbiAgICAgIC53aGVyZShcIm5hbWVcIiwgY2l0eU5hbWUpXHJcbiAgICAgIC5maXJzdCgpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZvdW5kZXI6IHtcclxuICAgICAgICBuYW1lOiBjaXR5TmFtZSxcclxuICAgICAgICBpY286IFwiMDAwMDAwMDBcIixcclxuICAgICAgICBvcmlnaW5hbFR5cGU6IGNpdHlUeXBlQ29kZSxcclxuICAgICAgICBtdW5pY2lwYWxpdHlUeXBlOiBNdW5pY2lwYWxpdHlUeXBlLkNpdHksXHJcbiAgICAgICAgbXVuaWNpcGFsaXR5Q29kZTogcmVzdWx0LmNvZGUsXHJcbiAgICAgICAgc2Nob29sczogYXdhaXQgZ2V0U2Nob29sc0J5Q2l0eUNvZGUocmVzdWx0LmNvZGUsIHNjaG9vbFR5cGUpLFxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcnMsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgbmFtZSA9IGV4dHJhY3RGb3VuZGVyTmFtZShuYW1lV2l0aEhhc2h0YWcpO1xyXG5cclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRCYXNlRm91bmRlclF1ZXJ5KClcclxuICAgIC53aGVyZShcImYubmFtZVwiLCBuYW1lKVxyXG4gICAgLm9yV2hlcmUoXCJjLm5hbWVcIiwgbmFtZSlcclxuICAgIC5vcldoZXJlKFwiZC5uYW1lXCIsIG5hbWUpXHJcbiAgICAuZmlyc3QoKTtcclxuICBpZiAocmVzdWx0KSB7XHJcbiAgICByZXR1cm4geyBmb3VuZGVyOiBhd2FpdCByZXN1bHRUb0ZvdW5kZXIocmVzdWx0LCBzY2hvb2xUeXBlKSwgZXJyb3JzIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IGFsbEZvdW5kZXJOYW1lcyA9IGF3YWl0IGdldEFsbEZvdW5kZXJOYW1lcygpO1xyXG4gICAgY29uc3QgbmFtZXNMaXN0ID0gYWxsRm91bmRlck5hbWVzXHJcbiAgICAgIC5tYXAoKHJvdykgPT4gcm93LmZvdW5kZXJOYW1lKVxyXG4gICAgICAuY29uY2F0KGFsbEZvdW5kZXJOYW1lcy5tYXAoKHJvdykgPT4gcm93Lm11bmljaXBhbGl0eU5hbWUpKTtcclxuICAgIGNvbnN0IGJlc3RNYXRjaCA9IGZpbmRDbG9zZXN0U3RyaW5nKG5hbWUsIG5hbWVzTGlzdCk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2hSb3cgPSBhbGxGb3VuZGVyTmFtZXMuZmluZChcclxuICAgICAgKGZvdW5kZXJzTmFtZXMpID0+XHJcbiAgICAgICAgZm91bmRlcnNOYW1lcy5mb3VuZGVyTmFtZSA9PT0gYmVzdE1hdGNoIHx8XHJcbiAgICAgICAgZm91bmRlcnNOYW1lcy5tdW5pY2lwYWxpdHlOYW1lID09PSBiZXN0TWF0Y2hcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFiZXN0TWF0Y2hSb3cpIHtcclxuICAgICAgZXJyb3JzLnB1c2goXHJcbiAgICAgICAgd2hvbGVMaW5lRXJyb3IoXHJcbiAgICAgICAgICBgTmVuYcWhbGkganNtZSDFvsOhZG7DqSB6xZlpem92YXRlbGUsIG5lanNww63FoSBqc3RlIHphcG9tbsSbbGkgaW5pY2lhbGl6b3ZhdCBkYXRhYsOhemkuYCxcclxuICAgICAgICAgIG5hbWVXaXRoSGFzaHRhZ1xyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBmb3VuZGVyOiBudWxsLFxyXG4gICAgICAgIGVycm9ycyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBlcnJvcnMucHVzaChcclxuICAgICAgd2hvbGVMaW5lRXJyb3IoXHJcbiAgICAgICAgYFrFmWl6b3ZhdGVsICcke25hbWV9JyBuZWV4aXN0dWplLCBteXNsZWxpIGpzdGUgJyR7YmVzdE1hdGNofSc/YCxcclxuICAgICAgICBuYW1lV2l0aEhhc2h0YWdcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmb3VuZGVyID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcclxuICAgICAgICBcImlkXCIsXHJcbiAgICAgICAgXCJuYW1lXCIsXHJcbiAgICAgICAgXCJpY29cIixcclxuICAgICAgICBcImZvdW5kZXJfdHlwZV9jb2RlXCIsXHJcbiAgICAgICAgXCJjaXR5X2NvZGVcIixcclxuICAgICAgICBcImNpdHlfZGlzdHJpY3RfY29kZVwiXHJcbiAgICAgIClcclxuICAgICAgLmZyb20oXCJmb3VuZGVyXCIpXHJcbiAgICAgIC53aGVyZShcImlkXCIsIGJlc3RNYXRjaFJvdy5pZClcclxuICAgICAgLmZpcnN0KCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3VuZGVyOiBhd2FpdCByZXN1bHRUb0ZvdW5kZXIoZm91bmRlciwgc2Nob29sVHlwZSksXHJcbiAgICAgIGVycm9ycyxcclxuICAgIH07XHJcbiAgfVxyXG59O1xyXG5cclxubGV0IGNhY2hlZENpdHlDb2RlOiBudW1iZXIgPSBudWxsO1xyXG5sZXQgbGFzdENvZGU6IG51bWJlciA9IG51bGw7XHJcbmV4cG9ydCBjb25zdCBnZXRGb3VuZGVyQ2l0eUNvZGUgPSBhc3luYyAoXHJcbiAgdHlwZTogTXVuaWNpcGFsaXR5VHlwZSxcclxuICBjb2RlOiBudW1iZXJcclxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICBpZiAodHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5EaXN0cmljdCkge1xyXG4gICAgaWYgKGxhc3RDb2RlICE9PSBjb2RlKSB7XHJcbiAgICAgIGxhc3RDb2RlID0gY29kZTtcclxuICAgICAgY2FjaGVkQ2l0eUNvZGUgPSAoXHJcbiAgICAgICAgYXdhaXQgZ2V0S25leERiKCkuZnJvbShcImNpdHlfZGlzdHJpY3RcIikud2hlcmUoXCJjb2RlXCIsIGNvZGUpLmZpcnN0KClcclxuICAgICAgKS5jaXR5X2NvZGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FjaGVkQ2l0eUNvZGU7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBjb2RlO1xyXG4gIH1cclxufTtcclxuXHJcbmludGVyZmFjZSBGb3VuZGVyTmFtZXMge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgZm91bmRlck5hbWU6IHN0cmluZztcclxuICBtdW5pY2lwYWxpdHlOYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmNvbnN0IHJlc3VsdFRvRm91bmRlciA9IGFzeW5jIChcclxuICByZXN1bHQ6IGFueSxcclxuICBzY2hvb2xUeXBlOiBTY2hvb2xUeXBlXHJcbik6IFByb21pc2U8Rm91bmRlcj4gPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgIGljbzogcmVzdWx0LmljbyxcclxuICAgIG9yaWdpbmFsVHlwZTogcmVzdWx0LmZvdW5kZXJfdHlwZV9jb2RlLFxyXG4gICAgbXVuaWNpcGFsaXR5VHlwZTpcclxuICAgICAgcmVzdWx0LmZvdW5kZXJfdHlwZV9jb2RlID09PSBjaXR5VHlwZUNvZGVcclxuICAgICAgICA/IE11bmljaXBhbGl0eVR5cGUuQ2l0eVxyXG4gICAgICAgIDogTXVuaWNpcGFsaXR5VHlwZS5EaXN0cmljdCxcclxuICAgIG11bmljaXBhbGl0eUNvZGU6XHJcbiAgICAgIHJlc3VsdC5mb3VuZGVyX3R5cGVfY29kZSA9PT0gY2l0eVR5cGVDb2RlXHJcbiAgICAgICAgPyByZXN1bHQuY2l0eV9jb2RlXHJcbiAgICAgICAgOiByZXN1bHQuY2l0eV9kaXN0cmljdF9jb2RlLFxyXG4gICAgc2Nob29sczogYXdhaXQgZ2V0U2Nob29sc0J5Q2l0eUNvZGUocmVzdWx0LmNpdHlfY29kZSwgc2Nob29sVHlwZSksXHJcbiAgfTtcclxufTtcclxuXHJcbi8vIGluIGNhc2Ugb2YgY2l0aWVzLCBsb2FkIGFsbCBzY2hvb2xzIGluIHRoZSBjaXR5LCBub3QganVzdCB0aGUgb25lcyBjb25uZWN0ZWQgdG8gdGhlIGZvdW5kZXJcclxuY29uc3QgZ2V0U2Nob29sc0J5Q2l0eUNvZGUgPSBhc3luYyAoXHJcbiAgY2l0eUNvZGU6IG51bWJlcixcclxuICBzY2hvb2xUeXBlOiBTY2hvb2xUeXBlXHJcbik6IFByb21pc2U8U2Nob29sW10+ID0+IHtcclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLnNlbGVjdChcInMuaXpvXCIsIFwicy5yZWRpem9cIiwgXCJzLm5hbWVcIiwgXCJzLmNhcGFjaXR5XCIsIFwic2wuYWRkcmVzc19wb2ludF9pZFwiKVxyXG4gICAgLmZyb20oXCJzY2hvb2wgYXMgc1wiKVxyXG4gICAgLmpvaW4oXCJzY2hvb2xfZm91bmRlciBhcyBzZlwiLCBcInMuaXpvXCIsIFwic2Yuc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXCJzY2hvb2xfbG9jYXRpb24gYXMgc2xcIiwgXCJzLml6b1wiLCBcInNsLnNjaG9vbF9pem9cIilcclxuICAgIC5qb2luKFwiZm91bmRlciBhcyBmXCIsIFwic2YuZm91bmRlcl9pZFwiLCBcImYuaWRcIilcclxuICAgIC53aGVyZShcImYuY2l0eV9jb2RlXCIsIGNpdHlDb2RlKVxyXG4gICAgLndoZXJlKFwicy50eXBlXCIsIHNjaG9vbFR5cGUpO1xyXG5cclxuICByZXR1cm4gcmVzdWx0Lm1hcCgocm93KSA9PiAoe1xyXG4gICAgaXpvOiBTdHJpbmcocm93Lml6byksXHJcbiAgICByZWRpem86IFN0cmluZyhyb3cucmVkaXpvKSxcclxuICAgIG5hbWU6IFN0cmluZyhyb3cubmFtZSksXHJcbiAgICBjYXBhY2l0eTogcGFyc2VJbnQocm93LmNhcGFjaXR5KSxcclxuICAgIGxvY2F0aW9uczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgYWRkcmVzc1BvaW50SWQ6IHBhcnNlSW50KHJvdy5hZGRyZXNzX3BvaW50X2lkKSxcclxuICAgICAgfSxcclxuICAgIF0sXHJcbiAgICB0eXBlOiBzY2hvb2xUeXBlLFxyXG4gIH0pKTtcclxufTtcclxuXHJcbmNvbnN0IGdldEFsbEZvdW5kZXJOYW1lcyA9IGFzeW5jICgpOiBQcm9taXNlPEZvdW5kZXJOYW1lc1tdPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXHJcbiAgICAgIFwiZi5pZFwiLFxyXG4gICAgICBcImYubmFtZSBhcyBmb3VuZGVyX25hbWVcIixcclxuICAgICAgXCJjLm5hbWUgYXMgY2l0eV9uYW1lXCIsXHJcbiAgICAgIFwiZC5uYW1lIGFzIGNpdHlfZGlzdHJpY3RfbmFtZVwiXHJcbiAgICApXHJcbiAgICAuZnJvbShcImZvdW5kZXIgYXMgZlwiKVxyXG4gICAgLmxlZnRKb2luKFwiY2l0eSBhcyBjXCIsIFwiYy5jb2RlXCIsIFwiZi5jaXR5X2NvZGVcIilcclxuICAgIC5sZWZ0Sm9pbihcImNpdHlfZGlzdHJpY3QgYXMgZFwiLCBcImQuY29kZVwiLCBcImYuY2l0eV9kaXN0cmljdF9jb2RlXCIpO1xyXG4gIHJldHVybiByZXN1bHQubWFwKChyb3cpID0+ICh7XHJcbiAgICBpZDogcGFyc2VJbnQocm93LmlkKSxcclxuICAgIGZvdW5kZXJOYW1lOiBTdHJpbmcocm93LmZvdW5kZXJfbmFtZSksXHJcbiAgICBtdW5pY2lwYWxpdHlOYW1lOiBTdHJpbmcoXHJcbiAgICAgIHJvdy5jaXR5X25hbWUgPyByb3cuY2l0eV9uYW1lIDogcm93LmNpdHlfZGlzdHJpY3RfbmFtZVxyXG4gICAgKSxcclxuICB9KSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZmluZE11bmljaXBhbGl0eVBhcnRCeU5hbWUgPSBhc3luYyAoXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIGNpdHlDb2RlOiBudW1iZXJcclxuKTogUHJvbWlzZTxNdW5pY2lwYWxpdHlQYXJ0UmVzdWx0PiA9PiB7XHJcbiAgY29uc3QgZXJyb3JzOiBTbWRFcnJvcltdID0gW107XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5maXJzdChcImNvZGVcIilcclxuICAgIC5mcm9tKFwibXVuaWNpcGFsaXR5X3BhcnRcIilcclxuICAgIC53aGVyZSh7IG5hbWUsIGNpdHlfY29kZTogY2l0eUNvZGUgfSk7XHJcblxyXG4gIGlmIChyZXN1bHQpIHtcclxuICAgIHJldHVybiB7IG11bmljaXBhbGl0eVBhcnRDb2RlOiByZXN1bHQuY29kZSwgZXJyb3JzIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IGFsbE5hbWVzID0gYXdhaXQgZ2V0QWxsTXVuaWNpcGFsaXR5UGFydE5hbWVzKGNpdHlDb2RlKTtcclxuICAgIGNvbnN0IG5hbWVzTGlzdCA9IGFsbE5hbWVzLm1hcCgocm93KSA9PiByb3cubmFtZSk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2ggPSBmaW5kQ2xvc2VzdFN0cmluZyhuYW1lLCBuYW1lc0xpc3QpO1xyXG5cclxuICAgIGVycm9ycy5wdXNoKHtcclxuICAgICAgbWVzc2FnZTogYE9iZWMgYW5pIG3Em3N0c2vDoSDEjcOhc3QgJyR7bmFtZX0nIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtiZXN0TWF0Y2h9Jz9gLFxyXG4gICAgICBzdGFydE9mZnNldDogMCxcclxuICAgICAgZW5kT2Zmc2V0OiAwLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbXVuaWNpcGFsaXR5UGFydENvZGU6IG51bGwsXHJcbiAgICAgIGVycm9ycyxcclxuICAgIH07XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRNdW5pY2lwYWxpdHlCeU5hbWVBbmRUeXBlID0gYXN5bmMgKFxyXG4gIG5hbWU6IHN0cmluZyxcclxuICB0eXBlOiBNdW5pY2lwYWxpdHlUeXBlLFxyXG4gIGZvdW5kZXI6IEZvdW5kZXJcclxuKTogUHJvbWlzZTxEYk11bmljaXBhbGl0eVJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IGVycm9yczogU21kRXJyb3JbXSA9IFtdO1xyXG5cclxuICBjb25zdCByZXN1bHQgPVxyXG4gICAgdHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICAgID8gYXdhaXQgZ2V0S25leERiKCkuc2VsZWN0KFwiY29kZVwiKS5mcm9tKFwiY2l0eVwiKS53aGVyZShcIm5hbWVcIiwgbmFtZSlcclxuICAgICAgOiBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgICAgICAgLnNlbGVjdChcImNvZGVcIilcclxuICAgICAgICAgIC5mcm9tKFwiY2l0eV9kaXN0cmljdFwiKVxyXG4gICAgICAgICAgLndoZXJlKFwibmFtZVwiLCBuYW1lKVxyXG4gICAgICAgICAgLmFuZFdoZXJlKFxyXG4gICAgICAgICAgICBcImNpdHlfY29kZVwiLFxyXG4gICAgICAgICAgICBhd2FpdCBnZXRGb3VuZGVyQ2l0eUNvZGUoXHJcbiAgICAgICAgICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlLFxyXG4gICAgICAgICAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG5cclxuICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMSkge1xyXG4gICAgICBjb25zdCBjaXR5Q29kZSA9IGF3YWl0IGdldEZvdW5kZXJDaXR5Q29kZShcclxuICAgICAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUsXHJcbiAgICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgICAgLnNlbGVjdChcImNpdHlfY29kZVwiLCBcIndnczg0X2xhdGl0dWRlXCIsIFwid2dzODRfbG9uZ2l0dWRlXCIpXHJcbiAgICAgICAgLmZyb20oXCJhZGRyZXNzX3BvaW50XCIpXHJcbiAgICAgICAgLmdyb3VwQnkoXCJjaXR5X2NvZGVcIilcclxuICAgICAgICAud2hlcmVJbihcclxuICAgICAgICAgIFwiY2l0eV9jb2RlXCIsXHJcbiAgICAgICAgICByZXN1bHQubWFwKChyb3cpID0+IHJvdy5jb2RlKVxyXG4gICAgICAgICk7XHJcbiAgICAgIGNvbnN0IGZvdW5kZXJQb3NpdGlvbiA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgICAgLmZpcnN0KFwid2dzODRfbGF0aXR1ZGVcIiwgXCJ3Z3M4NF9sb25naXR1ZGVcIilcclxuICAgICAgICAuZnJvbShcImFkZHJlc3NfcG9pbnRcIilcclxuICAgICAgICAuZ3JvdXBCeShcImNpdHlfY29kZVwiKVxyXG4gICAgICAgIC53aGVyZShcImNpdHlfY29kZVwiLCBjaXR5Q29kZSk7XHJcbiAgICAgIGNvbnN0IGNsb3Nlc3RDb2RlID0gYXdhaXQgZ2V0Q2xvc2VzdENvZGUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29kZTogY2l0eUNvZGUsXHJcbiAgICAgICAgICBsYXQ6IGZvdW5kZXJQb3NpdGlvbi53Z3M4NF9sYXRpdHVkZSxcclxuICAgICAgICAgIGxuZzogZm91bmRlclBvc2l0aW9uLndnczg0X2xvbmdpdHVkZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9ucy5tYXAoKHJvdykgPT4gKHtcclxuICAgICAgICAgIGNvZGU6IHJvdy5jaXR5X2NvZGUsXHJcbiAgICAgICAgICBsYXQ6IHJvdy53Z3M4NF9sYXRpdHVkZSxcclxuICAgICAgICAgIGxuZzogcm93Lndnczg0X2xvbmdpdHVkZSxcclxuICAgICAgICB9KSlcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHsgbXVuaWNpcGFsaXR5OiB7IGNvZGU6IGNsb3Nlc3RDb2RlLCB0eXBlIH0sIGVycm9ycyB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgbXVuaWNpcGFsaXR5OiB7IGNvZGU6IHJlc3VsdFswXS5jb2RlLCB0eXBlIH0sIGVycm9ycyB9O1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBhbGxOYW1lcyA9IGF3YWl0IGdldEFsbE11bmljaXBhbGl0eU5hbWVzKHR5cGUpO1xyXG4gICAgY29uc3QgbmFtZXNMaXN0ID0gYWxsTmFtZXMubWFwKChyb3cpID0+IHJvdy5uYW1lKTtcclxuICAgIGNvbnN0IGJlc3RNYXRjaCA9IGZpbmRDbG9zZXN0U3RyaW5nKG5hbWUsIG5hbWVzTGlzdCk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2hSb3cgPSBhbGxOYW1lcy5maW5kKFxyXG4gICAgICAobXVuaWNpcGFsaXR5KSA9PiBtdW5pY2lwYWxpdHkubmFtZSA9PT0gYmVzdE1hdGNoXHJcbiAgICApO1xyXG5cclxuICAgIGVycm9ycy5wdXNoKHtcclxuICAgICAgbWVzc2FnZTogYE9iZWMgYW5pIG3Em3N0c2vDoSDEjcOhc3QgJyR7bmFtZX0nIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtiZXN0TWF0Y2h9Jz9gLFxyXG4gICAgICBzdGFydE9mZnNldDogMCxcclxuICAgICAgZW5kT2Zmc2V0OiAwLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbXVuaWNpcGFsaXR5OiB7IGNvZGU6IGJlc3RNYXRjaFJvdy5jb2RlLCB0eXBlIH0sXHJcbiAgICAgIGVycm9ycyxcclxuICAgIH07XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgZ2V0QWxsTXVuaWNpcGFsaXR5TmFtZXMgPSBhc3luYyAoXHJcbiAgdHlwZTogTXVuaWNpcGFsaXR5VHlwZVxyXG4pOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBjb2RlOiBudW1iZXIgfVtdPiA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgIC5zZWxlY3QoXCJuYW1lXCIsIFwiY29kZVwiKVxyXG4gICAgICAuZnJvbSh0eXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHkgPyBcImNpdHlcIiA6IFwiY2l0eV9kaXN0cmljdFwiKVxyXG4gICkubWFwKChyb3cpID0+ICh7XHJcbiAgICBuYW1lOiByb3cubmFtZSxcclxuICAgIGNvZGU6IHJvdy5jb2RlLFxyXG4gIH0pKTtcclxufTtcclxuXHJcbmNvbnN0IGdldEFsbE11bmljaXBhbGl0eVBhcnROYW1lcyA9IGFzeW5jIChcclxuICBjaXR5Q29kZTogbnVtYmVyXHJcbik6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IGNvZGU6IG51bWJlciB9W10+ID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcIm5hbWVcIiwgXCJjb2RlXCIpXHJcbiAgICAgIC5mcm9tKFwibXVuaWNpcGFsaXR5X3BhcnRcIilcclxuICAgICAgLndoZXJlKFwiY2l0eV9jb2RlXCIsIGNpdHlDb2RlKVxyXG4gICkubWFwKChyb3cpID0+ICh7XHJcbiAgICBuYW1lOiByb3cubmFtZSxcclxuICAgIGNvZGU6IHJvdy5jb2RlLFxyXG4gIH0pKTtcclxufTtcclxuIl19
|
package/dist/db/schools.js
CHANGED
|
@@ -5,8 +5,16 @@ export const insertSchools = async (schools) => {
|
|
|
5
5
|
const knex = getKnexDb();
|
|
6
6
|
const uniqueSchools = filterOutDuplicates(schools);
|
|
7
7
|
const existingIzo = (await knex.select("izo").from("school")).map((row) => row.izo);
|
|
8
|
+
const schoolsWithoutLocationIzos = (await knex("school")
|
|
9
|
+
.leftJoin("school_location", "school.izo", "school_location.school_izo")
|
|
10
|
+
.whereNull("school_location.school_izo")
|
|
11
|
+
.select("school.izo")).map((row) => row.izo);
|
|
8
12
|
const toInsert = uniqueSchools.filter((school) => !existingIzo.includes(school.izo));
|
|
9
13
|
const toUpdate = uniqueSchools.filter((school) => existingIzo.includes(school.izo));
|
|
14
|
+
const toInsertLocation = [
|
|
15
|
+
...toInsert,
|
|
16
|
+
...toUpdate.filter((school) => schoolsWithoutLocationIzos.includes(school.izo)),
|
|
17
|
+
];
|
|
10
18
|
for (const school of toUpdate) {
|
|
11
19
|
await knex.from("school").where("izo", school.izo).update({
|
|
12
20
|
name: school.name,
|
|
@@ -20,7 +28,7 @@ export const insertSchools = async (schools) => {
|
|
|
20
28
|
school.capacity.toString(),
|
|
21
29
|
school.type.toString(),
|
|
22
30
|
]), "school", ["izo", "redizo", "name", "capacity", "type"]);
|
|
23
|
-
const locations =
|
|
31
|
+
const locations = toInsertLocation
|
|
24
32
|
.filter((school) => school.locations.length > 0)
|
|
25
33
|
.map((school) => [
|
|
26
34
|
school.izo,
|
|
@@ -68,4 +76,4 @@ const filterOutDuplicates = (schools) => {
|
|
|
68
76
|
return !duplicate;
|
|
69
77
|
});
|
|
70
78
|
};
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYi9zY2hvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsT0FBaUIsRUFBbUIsRUFBRTtJQUN4RSxNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUV6QixNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQy9ELENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUNqQixDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQzlDLENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDL0MsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQ2pDLENBQUM7SUFFRixLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsRUFBRTtRQUM3QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMs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QUFDO0tBQ2pDO0lBQ0QsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUxRSxNQUFNLENBQUMsSUFBSSxDQUNULGNBQWMsQ0FDWixtQkFBbUIsSUFBSSwrQkFBK0IsU0FBUyxJQUFJLEVBQ25FLElBQUksQ0FDTCxDQUNGLENBQUM7SUFFRixPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMzQyxDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBaUIsRUFBWSxFQUFFO0lBQzFELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDekIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDL0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdob2xlTGluZUVycm9yIH0gZnJvbSBcIi4uL3N0cmVldC1tYXJrZG93bi9zbWRcIjtcclxuaW1wb3J0IHsgU21kRXJyb3IgfSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3R5cGVzXCI7XHJcbmltcG9ydCB7IGZpbmRDbG9zZXN0U3RyaW5nIH0gZnJvbSBcIi4uL3V0aWxzL2hlbHBlcnNcIjtcclxuaW1wb3J0IHsgZ2V0S25leERiLCBpbnNlcnRNdWx0aXBsZVJvd3MgfSBmcm9tIFwiLi9kYlwiO1xyXG5pbXBvcnQgeyBTY2hvb2wgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydFNjaG9vbHMgPSBhc3luYyAoc2Nob29sczogU2Nob29sW10pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuXHJcbiAgY29uc3QgdW5pcXVlU2Nob29scyA9IGZpbHRlck91dER1cGxpY2F0ZXMoc2Nob29scyk7XHJcbiAgY29uc3QgZXhpc3RpbmdJem8gPSAoYXdhaXQga25leC5zZWxlY3QoXCJpem9cIikuZnJvbShcInNjaG9vbFwiKSkubWFwKFxyXG4gICAgKHJvdykgPT4gcm93Lml6b1xyXG4gICk7XHJcblxyXG4gIGNvbnN0IHRvSW5zZXJ0ID0gdW5pcXVlU2Nob29scy5maWx0ZXIoXHJcbiAgICAoc2Nob29sKSA9PiAhZXhpc3RpbmdJem8uaW5jbHVkZXMoc2Nob29sLml6bylcclxuICApO1xyXG4gIGNvbnN0IHRvVXBkYXRlID0gdW5pcXVlU2Nob29scy5maWx0ZXIoKHNjaG9vbCkgPT5cclxuICAgIGV4aXN0aW5nSXpvLmluY2x1ZGVzKHNjaG9vbC5pem8pXHJcbiAgKTtcclxuXHJcbiAgZm9yIChjb25zdCBzY2hvb2wgb2YgdG9VcGRhdGUpIHtcclxuICAgIGF3YWl0IGtuZXguZnJvbShcInNjaG9vbFwiKS53aGVyZShcIml6b1wiLCBzY2hvb2wuaXpvKS51cGRhdGUoe1xyXG4gICAgICBuYW1lOiBzY2hvb2wubmFtZSxcclxuICAgICAgY2FwYWNpdHk6IHNjaG9vbC5jYXBhY2l0eSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgaW5zZXJ0ZWRTY2hvb2xzID0gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgdG9JbnNlcnQubWFwKChzY2hvb2wpID0+IFtcclxuICAgICAgc2Nob29sLml6byxcclxuICAgICAgc2Nob29sLnJlZGl6byxcclxuICAgICAgc2Nob29sLm5hbWUsXHJcbiAgICAgIHNjaG9vbC5jYXBhY2l0eS50b1N0cmluZygpLFxyXG4gICAgICBzY2hvb2wudHlwZS50b1N0cmluZygpLFxyXG4gICAgXSksXHJcbiAgICBcInNjaG9vbFwiLFxyXG4gICAgW1wiaXpvXCIsIFwicmVkaXpvXCIsIFwibmFtZVwiLCBcImNhcGFjaXR5XCIsIFwidHlwZVwiXVxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGxvY2F0aW9ucyA9IHRvSW5zZXJ0XHJcbiAgICAuZmlsdGVyKChzY2hvb2wpID0+IHNjaG9vbC5sb2NhdGlvbnMubGVuZ3RoID4gMClcclxuICAgIC5tYXAoKHNjaG9vbCkgPT4gW1xyXG4gICAgICBzY2hvb2wuaXpvLFxyXG4gICAgICBzY2hvb2wubG9jYXRpb25zWzBdLmFkZHJlc3NQb2ludElkLnRvU3RyaW5nKCksIC8vIGFkZCBvbmx5IGZpcnN0IGxvY2F0aW9uXHJcbiAgICBdKTtcclxuXHJcbiAgbGV0IGluc2VydGVkTG9jYXRpb25zID0gMDtcclxuXHJcbiAgLy8gcGx1cyBmaWx0ZXIgb3V0IGR1cGxpY2F0ZSBsb2NhdGlvbnMgKHNhbWUgYWRkcmVzcyBpZCArIGl6bylcclxuICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaW5zZXJ0ZWRMb2NhdGlvbnMgKz0gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgICAgIFtsb2NhdGlvbl0sXHJcbiAgICAgICAgXCJzY2hvb2xfbG9jYXRpb25cIixcclxuICAgICAgICBbXCJzY2hvb2xfaXpvXCIsIFwiYWRkcmVzc19wb2ludF9pZFwiXSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBgQ2Fubm90IGFkZCBsb2NhdGlvbiB3aXRoIFJVSUFOIGNvZGUgJHtsb2NhdGlvblsxXX0gKHNjaG9vbCBJWk8gPSAke2xvY2F0aW9uWzBdfSk6IGNvZGUgZG9lcyBub3QgZXhpc3QuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGluc2VydGVkU2Nob29scyArIGluc2VydGVkTG9jYXRpb25zO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRTY2hvb2wgPSAoXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIHNjaG9vbHM6IFNjaG9vbFtdLFxyXG4gIG1heERpc3RhbmNlPzogbnVtYmVyXHJcbik6IHsgc2Nob29sOiBTY2hvb2wgfCBudWxsOyBlcnJvcnM6IFNtZEVycm9yW10gfSA9PiB7XHJcbiAgaWYgKHNjaG9vbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzY2hvb2w6IG51bGwsXHJcbiAgICAgIGVycm9yczogW3dob2xlTGluZUVycm9yKFwiQWt0dcOhbG7DrSB6xZlpem92YXRlbCBuZW3DoSDFvsOhZG7DqSDFoWtvbHkuXCIsIG5hbWUpXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCBlcnJvcnM6IFNtZEVycm9yW10gPSBbXTtcclxuXHJcbiAgY29uc3QgZXhhY3RTY2hvb2wgPSBzY2hvb2xzLmZpbmQoKHNjaG9vbCkgPT4gc2Nob29sLm5hbWUgPT09IG5hbWUpO1xyXG4gIGlmIChleGFjdFNjaG9vbCkge1xyXG4gICAgcmV0dXJuIHsgc2Nob29sOiBleGFjdFNjaG9vbCwgZXJyb3JzIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCBuYW1lc0xpc3QgPSBzY2hvb2xzLm1hcCgoc2Nob29sKSA9PiBzY2hvb2wubmFtZSk7XHJcbiAgY29uc3QgYmVzdE1hdGNoID0gZmluZENsb3Nlc3RTdHJpbmcobmFtZSwgbmFtZXNMaXN0LCBtYXhEaXN0YW5jZSk7XHJcbiAgaWYgKGJlc3RNYXRjaCA9PT0gbnVsbCkge1xyXG4gICAgZXJyb3JzLnB1c2god2hvbGVMaW5lRXJyb3IoYMWga29sYSBzIG7DoXp2ZW0gJyR7bmFtZX0nIG5lZXhpc3R1amUuYCwgbmFtZSkpO1xyXG4gICAgcmV0dXJuIHsgc2Nob29sOiBudWxsLCBlcnJvcnMgfTtcclxuICB9XHJcbiAgY29uc3QgY2xvc2VzdFNjaG9vbCA9IHNjaG9vbHMuZmluZCgoc2Nob29sKSA9PiBiZXN0TWF0Y2ggPT09IHNjaG9vbC5uYW1lKTtcclxuXHJcbiAgZXJyb3JzLnB1c2goXHJcbiAgICB3aG9sZUxpbmVFcnJvcihcclxuICAgICAgYMWga29sYSBzIG7DoXp2ZW0gJyR7bmFtZX0nIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtiZXN0TWF0Y2h9Jz9gLFxyXG4gICAgICBuYW1lXHJcbiAgICApXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIHsgc2Nob29sOiBjbG9zZXN0U2Nob29sLCBlcnJvcnMgfTtcclxufTtcclxuXHJcbmNvbnN0IGZpbHRlck91dER1cGxpY2F0ZXMgPSAoc2Nob29sczogU2Nob29sW10pOiBTY2hvb2xbXSA9PiB7XHJcbiAgY29uc3QgaXpvU2V0ID0gbmV3IFNldCgpO1xyXG4gIHJldHVybiBzY2hvb2xzLmZpbHRlcigoc2Nob29sKSA9PiB7XHJcbiAgICBjb25zdCBkdXBsaWNhdGUgPSBpem9TZXQuaGFzKHNjaG9vbC5pem8pO1xyXG4gICAgaXpvU2V0LmFkZChzY2hvb2wuaXpvKTtcclxuICAgIHJldHVybiAhZHVwbGljYXRlO1xyXG4gIH0pO1xyXG59O1xyXG4iXX0=
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYi9zY2hvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsT0FBaUIsRUFBbUIsRUFBRTtJQUN4RSxNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUV6QixNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQy9ELENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUNqQixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsR0FBRyxDQUNqQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDakIsUUFBUSxDQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSw0QkFBNEIsQ0FBQztTQUN2RSxTQUFTLENBQUMsNEJBQTRCLENBQUM7U0FDdkMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUN4QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXhCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQ25DLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUM5QyxDQUFD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QztRQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2hvbGVMaW5lRXJyb3IgfSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3NtZFwiO1xyXG5pbXBvcnQgeyBTbWRFcnJvciB9IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vdHlwZXNcIjtcclxuaW1wb3J0IHsgZmluZENsb3Nlc3RTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBnZXRLbmV4RGIsIGluc2VydE11bHRpcGxlUm93cyB9IGZyb20gXCIuL2RiXCI7XHJcbmltcG9ydCB7IFNjaG9vbCB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgaW5zZXJ0U2Nob29scyA9IGFzeW5jIChzY2hvb2xzOiBTY2hvb2xbXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG5cclxuICBjb25zdCB1bmlxdWVTY2hvb2xzID0gZmlsdGVyT3V0RHVwbGljYXRlcyhzY2hvb2xzKTtcclxuICBjb25zdCBleGlzdGluZ0l6byA9IChhd2FpdCBrbmV4LnNlbGVjdChcIml6b1wiKS5mcm9tKFwic2Nob29sXCIpKS5tYXAoXHJcbiAgICAocm93KSA9PiByb3cuaXpvXHJcbiAgKTtcclxuICBjb25zdCBzY2hvb2xzV2l0aG91dExvY2F0aW9uSXpvcyA9IChcclxuICAgIGF3YWl0IGtuZXgoXCJzY2hvb2xcIilcclxuICAgICAgLmxlZnRKb2luKFwic2Nob29sX2xvY2F0aW9uXCIsIFwic2Nob29sLml6b1wiLCBcInNjaG9vbF9sb2NhdGlvbi5zY2hvb2xfaXpvXCIpXHJcbiAgICAgIC53aGVyZU51bGwoXCJzY2hvb2xfbG9jYXRpb24uc2Nob29sX2l6b1wiKVxyXG4gICAgICAuc2VsZWN0KFwic2Nob29sLml6b1wiKVxyXG4gICkubWFwKChyb3cpID0+IHJvdy5pem8pO1xyXG5cclxuICBjb25zdCB0b0luc2VydCA9IHVuaXF1ZVNjaG9vbHMuZmlsdGVyKFxyXG4gICAgKHNjaG9vbCkgPT4gIWV4aXN0aW5nSXpvLmluY2x1ZGVzKHNjaG9vbC5pem8pXHJcbiAgKTtcclxuICBjb25zdCB0b1VwZGF0ZSA9IHVuaXF1ZVNjaG9vbHMuZmlsdGVyKChzY2hvb2wpID0+XHJcbiAgICBleGlzdGluZ0l6by5pbmNsdWRlcyhzY2hvb2wuaXpvKVxyXG4gICk7XHJcbiAgY29uc3QgdG9JbnNlcnRMb2NhdGlvbiA9IFtcclxuICAgIC4uLnRvSW5zZXJ0LFxyXG4gICAgLi4udG9VcGRhdGUuZmlsdGVyKChzY2hvb2wpID0+XHJcbiAgICAgIHNjaG9vbHNXaXRob3V0TG9jYXRpb25Jem9zLmluY2x1ZGVzKHNjaG9vbC5pem8pXHJcbiAgICApLFxyXG4gIF07XHJcblxyXG4gIGZvciAoY29uc3Qgc2Nob29sIG9mIHRvVXBkYXRlKSB7XHJcbiAgICBhd2FpdCBrbmV4LmZyb20oXCJzY2hvb2xcIikud2hlcmUoXCJpem9cIiwgc2Nob29sLml6bykudXBkYXRlKHtcclxuICAgICAgbmFtZTogc2Nob29sLm5hbWUsXHJcbiAgICAgIGNhcGFjaXR5OiBzY2hvb2wuY2FwYWNpdHksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGluc2VydGVkU2Nob29scyA9IGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIHRvSW5zZXJ0Lm1hcCgoc2Nob29sKSA9PiBbXHJcbiAgICAgIHNjaG9vbC5pem8sXHJcbiAgICAgIHNjaG9vbC5yZWRpem8sXHJcbiAgICAgIHNjaG9vbC5uYW1lLFxyXG4gICAgICBzY2hvb2wuY2FwYWNpdHkudG9TdHJpbmcoKSxcclxuICAgICAgc2Nob29sLnR5cGUudG9TdHJpbmcoKSxcclxuICAgIF0pLFxyXG4gICAgXCJzY2hvb2xcIixcclxuICAgIFtcIml6b1wiLCBcInJlZGl6b1wiLCBcIm5hbWVcIiwgXCJjYXBhY2l0eVwiLCBcInR5cGVcIl1cclxuICApO1xyXG5cclxuICBjb25zdCBsb2NhdGlvbnMgPSB0b0luc2VydExvY2F0aW9uXHJcbiAgICAuZmlsdGVyKChzY2hvb2wpID0+IHNjaG9vbC5sb2NhdGlvbnMubGVuZ3RoID4gMClcclxuICAgIC5tYXAoKHNjaG9vbCkgPT4gW1xyXG4gICAgICBzY2hvb2wuaXpvLFxyXG4gICAgICBzY2hvb2wubG9jYXRpb25zWzBdLmFkZHJlc3NQb2ludElkLnRvU3RyaW5nKCksIC8vIGFkZCBvbmx5IGZpcnN0IGxvY2F0aW9uXHJcbiAgICBdKTtcclxuXHJcbiAgbGV0IGluc2VydGVkTG9jYXRpb25zID0gMDtcclxuXHJcbiAgLy8gcGx1cyBmaWx0ZXIgb3V0IGR1cGxpY2F0ZSBsb2NhdGlvbnMgKHNhbWUgYWRkcmVzcyBpZCArIGl6bylcclxuICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaW5zZXJ0ZWRMb2NhdGlvbnMgKz0gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgICAgIFtsb2NhdGlvbl0sXHJcbiAgICAgICAgXCJzY2hvb2xfbG9jYXRpb25cIixcclxuICAgICAgICBbXCJzY2hvb2xfaXpvXCIsIFwiYWRkcmVzc19wb2ludF9pZFwiXSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBgQ2Fubm90IGFkZCBsb2NhdGlvbiB3aXRoIFJVSUFOIGNvZGUgJHtsb2NhdGlvblsxXX0gKHNjaG9vbCBJWk8gPSAke2xvY2F0aW9uWzBdfSk6IGNvZGUgZG9lcyBub3QgZXhpc3QuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGluc2VydGVkU2Nob29scyArIGluc2VydGVkTG9jYXRpb25zO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRTY2hvb2wgPSAoXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIHNjaG9vbHM6IFNjaG9vbFtdLFxyXG4gIG1heERpc3RhbmNlPzogbnVtYmVyXHJcbik6IHsgc2Nob29sOiBTY2hvb2wgfCBudWxsOyBlcnJvcnM6IFNtZEVycm9yW10gfSA9PiB7XHJcbiAgaWYgKHNjaG9vbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzY2hvb2w6IG51bGwsXHJcbiAgICAgIGVycm9yczogW3dob2xlTGluZUVycm9yKFwiQWt0dcOhbG7DrSB6xZlpem92YXRlbCBuZW3DoSDFvsOhZG7DqSDFoWtvbHkuXCIsIG5hbWUpXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCBlcnJvcnM6IFNtZEVycm9yW10gPSBbXTtcclxuXHJcbiAgY29uc3QgZXhhY3RTY2hvb2wgPSBzY2hvb2xzLmZpbmQoKHNjaG9vbCkgPT4gc2Nob29sLm5hbWUgPT09IG5hbWUpO1xyXG4gIGlmIChleGFjdFNjaG9vbCkge1xyXG4gICAgcmV0dXJuIHsgc2Nob29sOiBleGFjdFNjaG9vbCwgZXJyb3JzIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCBuYW1lc0xpc3QgPSBzY2hvb2xzLm1hcCgoc2Nob29sKSA9PiBzY2hvb2wubmFtZSk7XHJcbiAgY29uc3QgYmVzdE1hdGNoID0gZmluZENsb3Nlc3RTdHJpbmcobmFtZSwgbmFtZXNMaXN0LCBtYXhEaXN0YW5jZSk7XHJcbiAgaWYgKGJlc3RNYXRjaCA9PT0gbnVsbCkge1xyXG4gICAgZXJyb3JzLnB1c2god2hvbGVMaW5lRXJyb3IoYMWga29sYSBzIG7DoXp2ZW0gJyR7bmFtZX0nIG5lZXhpc3R1amUuYCwgbmFtZSkpO1xyXG4gICAgcmV0dXJuIHsgc2Nob29sOiBudWxsLCBlcnJvcnMgfTtcclxuICB9XHJcbiAgY29uc3QgY2xvc2VzdFNjaG9vbCA9IHNjaG9vbHMuZmluZCgoc2Nob29sKSA9PiBiZXN0TWF0Y2ggPT09IHNjaG9vbC5uYW1lKTtcclxuXHJcbiAgZXJyb3JzLnB1c2goXHJcbiAgICB3aG9sZUxpbmVFcnJvcihcclxuICAgICAgYMWga29sYSBzIG7DoXp2ZW0gJyR7bmFtZX0nIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtiZXN0TWF0Y2h9Jz9gLFxyXG4gICAgICBuYW1lXHJcbiAgICApXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIHsgc2Nob29sOiBjbG9zZXN0U2Nob29sLCBlcnJvcnMgfTtcclxufTtcclxuXHJcbmNvbnN0IGZpbHRlck91dER1cGxpY2F0ZXMgPSAoc2Nob29sczogU2Nob29sW10pOiBTY2hvb2xbXSA9PiB7XHJcbiAgY29uc3QgaXpvU2V0ID0gbmV3IFNldCgpO1xyXG4gIHJldHVybiBzY2hvb2xzLmZpbHRlcigoc2Nob29sKSA9PiB7XHJcbiAgICBjb25zdCBkdXBsaWNhdGUgPSBpem9TZXQuaGFzKHNjaG9vbC5pem8pO1xyXG4gICAgaXpvU2V0LmFkZChzY2hvb2wuaXpvKTtcclxuICAgIHJldHVybiAhZHVwbGljYXRlO1xyXG4gIH0pO1xyXG59O1xyXG4iXX0=
|
|
@@ -8,4 +8,4 @@ export declare const isRestOfMunicipalityLine: (line: string) => boolean;
|
|
|
8
8
|
export declare const isRestOfMunicipalityPartLine: (line: string) => boolean;
|
|
9
9
|
export declare const getRestOfMunicipalityPart: (line: string, founder: Founder) => Promise<MunicipalityPartResult>;
|
|
10
10
|
export declare const getWholeMunicipality: (line: string, founder: Founder) => Promise<DbMunicipalityResult>;
|
|
11
|
-
export declare const getMunicipalityPartResult: (name: string, line: string,
|
|
11
|
+
export declare const getMunicipalityPartResult: (name: string, line: string, cityCode: number) => Promise<MunicipalityPartResult>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { findMunicipalityByNameAndType, findMunicipalityPartByName, } from "../db/founders";
|
|
1
|
+
import { findMunicipalityByNameAndType, findMunicipalityPartByName, getFounderCityCode, } from "../db/founders";
|
|
2
2
|
import { MunicipalityType } from "../db/types";
|
|
3
3
|
const municipalitySwitchStartPattern = /^navíc ulice /;
|
|
4
4
|
const municipalitySwitchPattern = /^navíc ulice (z )?(?<type>městské části|městského obvodu|obce|města) (?<name>.+):$/;
|
|
@@ -54,7 +54,7 @@ export const getRestOfMunicipalityPart = async (line, founder) => {
|
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
56
|
const { name } = match.groups;
|
|
57
|
-
return await getMunicipalityPartResult(name, line, founder);
|
|
57
|
+
return await getMunicipalityPartResult(name, line, await getFounderCityCode(founder.municipalityType, founder.municipalityCode));
|
|
58
58
|
};
|
|
59
59
|
export const getWholeMunicipality = async (line, founder) => {
|
|
60
60
|
const match = wholeMunicipalityPattern.exec(line);
|
|
@@ -87,8 +87,8 @@ const getMunicipalityResult = async (type, name, line, founder) => {
|
|
|
87
87
|
})),
|
|
88
88
|
};
|
|
89
89
|
};
|
|
90
|
-
export const getMunicipalityPartResult = async (name, line,
|
|
91
|
-
const { municipalityPartCode, errors } = await findMunicipalityPartByName(name,
|
|
90
|
+
export const getMunicipalityPartResult = async (name, line, cityCode) => {
|
|
91
|
+
const { municipalityPartCode, errors } = await findMunicipalityPartByName(name, cityCode);
|
|
92
92
|
const startOffset = line.indexOf(name);
|
|
93
93
|
const endOffset = startOffset + name.length + 1;
|
|
94
94
|
return {
|
|
@@ -113,4 +113,4 @@ const getMunicipalityType = (type) => {
|
|
|
113
113
|
const cleanName = (name) => {
|
|
114
114
|
return name.trim();
|
|
115
115
|
};
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVuaWNpcGFsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVldC1tYXJrZG93bi9tdW5pY2lwYWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLDZCQUE2QixFQUM3QiwwQkFBMEIsR0FDM0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQVcsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHeEQsTUFBTSw4QkFBOEIsR0FBRyxlQUFlLENBQUM7QUFFdkQsTUFBTSx5QkFBeUIsR0FDN0Isb0ZBQW9GLENBQUM7QUFFdkYsTUFBTSw2QkFBNkIsR0FBRyxTQUFTLENBQUM7QUFFaEQsTUFBTSx3QkFBd0IsR0FDNUIsd0VBQXdFLENBQUM7QUFFM0UsTUFBTSwyQkFBMkIsR0FDL0IsNkNBQTZDLENBQUM7QUFFaEQsTUFBTSx5QkFBeUIsR0FDN0IsZ0VBQWdFLENBQUM7QUFDbkUsTUFBTSw2QkFBNkIsR0FDakMsNENBQTRDLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUFZLEVBQVcsRUFBRTtJQUM1RCxPQUFPLDhCQUE4QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLEVBQ3hDLElBQVksRUFDWixPQUFnQixFQUNlLEVBQUU7SUFDakMsTUFBTSxLQUFLLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtRQUNsQixPQUFPO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLE9BQU8sRUFDTCxtTEFBbUw7b0JBQ3JMLFdBQVcsRUFBRSxDQUFDO29CQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7aUJBQzNCO2FBQ0Y7WUFDRCxZQUFZLEVBQUUs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S0FBSyxPQUFPO1lBQ1YsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7S0FDaEM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFO0lBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgZmluZE11bmljaXBhbGl0eUJ5TmFtZUFuZFR5cGUsXHJcbiAgZmluZE11bmljaXBhbGl0eVBhcnRCeU5hbWUsXHJcbn0gZnJvbSBcIi4uL2RiL2ZvdW5kZXJzXCI7XHJcbmltcG9ydCB7IEZvdW5kZXIsIE11bmljaXBhbGl0eVR5cGUgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuaW1wb3J0IHsgRGJNdW5pY2lwYWxpdHlSZXN1bHQsIE11bmljaXBhbGl0eVBhcnRSZXN1bHQgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuY29uc3QgbXVuaWNpcGFsaXR5U3dpdGNoU3RhcnRQYXR0ZXJuID0gL15uYXbDrWMgdWxpY2UgLztcclxuXHJcbmNvbnN0IG11bmljaXBhbGl0eVN3aXRjaFBhdHRlcm4gPVxyXG4gIC9ebmF2w61jIHVsaWNlICh6ICk/KD88dHlwZT5txJtzdHNrw6kgxI3DoXN0aXxtxJtzdHNrw6lobyBvYnZvZHV8b2JjZXxtxJtzdGEpICg/PG5hbWU+LispOiQvO1xyXG5cclxuY29uc3Qgd2hvbGVNdW5pY2lwYWxpdHlTdGFydFBhdHRlcm4gPSAvXsO6emVtw60gLztcclxuXHJcbmNvbnN0IHdob2xlTXVuaWNpcGFsaXR5UGF0dGVybiA9XHJcbiAgL17DunplbcOtICg/PHR5cGU+bcSbc3Rza8OpIMSNw6FzdGl8bcSbc3Rza8OpaG8gb2J2b2R1fG9iY2V8bcSbc3RhKSAoPzxuYW1lPi4rKSQvO1xyXG5cclxuY29uc3QgcmVzdFdpdGhOb1N0cmVldE5hbWVQYXR0ZXJuID1cclxuICAvXnbFoWVjaG55IG9zdGF0bsOtIGJ1ZG92eSBiZXogbsOhenZ1IHVsaWNlXFxzKiQvO1xyXG5cclxuY29uc3QgcmVzdE9mTXVuaWNpcGFsaXR5UGF0dGVybiA9XHJcbiAgL156Ynl0ZWsgKD88dHlwZT5txJtzdHNrw6kgxI3DoXN0aXxtxJtzdHNrw6lobyBvYnZvZHV8b2JjZXxtxJtzdGEpXFxzKiQvO1xyXG5jb25zdCByZXN0T2ZNdW5pY2lwYWxpdHlQYXJ0UGF0dGVybiA9XHJcbiAgL156Ynl0ZWsgxI3DoXN0aSAob2JjZXxtxJtzdGEpICg/PG5hbWU+LispXFxzKiQvO1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzTXVuaWNpcGFsaXR5U3dpdGNoID0gKGxpbmU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBtdW5pY2lwYWxpdHlTd2l0Y2hTdGFydFBhdHRlcm4udGVzdChsaW5lKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRTd2l0Y2hNdW5pY2lwYWxpdHkgPSBhc3luYyAoXHJcbiAgbGluZTogc3RyaW5nLFxyXG4gIGZvdW5kZXI6IEZvdW5kZXJcclxuKTogUHJvbWlzZTxEYk11bmljaXBhbGl0eVJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IG1hdGNoID0gbXVuaWNpcGFsaXR5U3dpdGNoUGF0dGVybi5leGVjKGxpbmUpO1xyXG4gIGlmIChtYXRjaCA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXJyb3JzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbWVzc2FnZTpcclxuICAgICAgICAgICAgXCJOZXBsYXRuw70gesOhcGlzIHBybyBkb8SNYXNub3Ugem3Em251IG9iY2UgdiBkZWZpbmljaSB1bGljLiBTcHLDoXZuw70gesOhcGlzIGplOiBuYXbDrWMgdWxpY2UgPHR5cD4gPG7DoXpldiBvYmNlPi4gTmFwxZkuOiAnbmF2w61jIHVsaWNlIG9iY2UgTW9rcsOhIExob3RhOicgKG7DoXpldiBvYmNlIG11c8OtIGLDvXQgdiAxLiBww6FkxJspLlwiLFxyXG4gICAgICAgICAgc3RhcnRPZmZzZXQ6IDAsXHJcbiAgICAgICAgICBlbmRPZmZzZXQ6IGxpbmUubGVuZ3RoICsgMSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgICBtdW5pY2lwYWxpdHk6IG51bGwsXHJcbiAgICB9O1xyXG4gIH1cclxuICBjb25zdCB7IHR5cGUsIG5hbWUgfSA9IG1hdGNoLmdyb3VwcztcclxuICByZXR1cm4gYXdhaXQgZ2V0TXVuaWNpcGFsaXR5UmVzdWx0KHR5cGUsIGNsZWFuTmFtZShuYW1lKSwgbGluZSwgZm91bmRlcik7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNXaG9sZU11bmljaXBhbGl0eSA9IChsaW5lOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gd2hvbGVNdW5pY2lwYWxpdHlTdGFydFBhdHRlcm4udGVzdChsaW5lKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc1Jlc3RXaXRoTm9TdHJlZXROYW1lTGluZSA9IChsaW5lOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcmVzdFdpdGhOb1N0cmVldE5hbWVQYXR0ZXJuLnRlc3QobGluZSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNSZXN0T2ZNdW5pY2lwYWxpdHlMaW5lID0gKGxpbmU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiByZXN0T2ZNdW5pY2lwYWxpdHlQYXR0ZXJuLnRlc3QobGluZSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNSZXN0T2ZNdW5pY2lwYWxpdHlQYXJ0TGluZSA9IChsaW5lOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcmVzdE9mTXVuaWNpcGFsaXR5UGFydFBhdHRlcm4udGVzdChsaW5lKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRSZXN0T2ZNdW5pY2lwYWxpdHlQYXJ0ID0gYXN5bmMgKFxyXG4gIGxpbmU6IHN0cmluZyxcclxuICBmb3VuZGVyOiBGb3VuZGVyXHJcbik6IFByb21pc2U8TXVuaWNpcGFsaXR5UGFydFJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IG1hdGNoID0gcmVzdE9mTXVuaWNpcGFsaXR5UGFydFBhdHRlcm4uZXhlYyhsaW5lKTtcclxuICBpZiAobWF0Y2ggPT09IG51bGwpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGVycm9yczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG1lc3NhZ2U6XHJcbiAgICAgICAgICAgIFwiTmVwbGF0bsO9IHrDoXBpcyBwcm8gcMWZaWTDoW7DrSB6Ynl0a3UgxI3DoXN0aSBvYmNlLiBTcHLDoXZuw70gesOhcGlzIGplOiB6Ynl0ZWsgxI3DoXN0aSA8dHlwPiA8bsOhemV2IG9iY2U+LiBOYXDFmS46ICd6Ynl0ZWsgxI3DoXN0aSBvYmNlIE1hbMWhb3ZpY2UnIChuw6F6ZXYgxI3DoXN0aSBvYmNlIG11c8OtIGLDvXQgdiAxLiBww6FkxJspLlwiLFxyXG4gICAgICAgICAgc3RhcnRPZmZzZXQ6IDAsXHJcbiAgICAgICAgICBlbmRPZmZzZXQ6IGxpbmUubGVuZ3RoICsgMSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgICBtdW5pY2lwYWxpdHlQYXJ0Q29kZTogbnVsbCxcclxuICAgIH07XHJcbiAgfVxyXG4gIGNvbnN0IHsgbmFtZSB9ID0gbWF0Y2guZ3JvdXBzO1xyXG4gIHJldHVybiBhd2FpdCBnZXRNdW5pY2lwYWxpdHlQYXJ0UmVzdWx0KG5hbWUsIGxpbmUsIGZvdW5kZXIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldFdob2xlTXVuaWNpcGFsaXR5ID0gYXN5bmMgKFxyXG4gIGxpbmU6IHN0cmluZyxcclxuICBmb3VuZGVyOiBGb3VuZGVyXHJcbik6IFByb21pc2U8RGJNdW5pY2lwYWxpdHlSZXN1bHQ+ID0+IHtcclxuICBjb25zdCBtYXRjaCA9IHdob2xlTXVuaWNpcGFsaXR5UGF0dGVybi5leGVjKGxpbmUpO1xyXG4gIGlmIChtYXRjaCA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXJyb3JzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbWVzc2FnZTpcclxuICAgICAgICAgICAgXCJOZXBsYXRuw70gesOhcGlzIHBybyBwxZlpZMOhbsOtIGNlbMOpIG9iY2UuIFNwcsOhdm7DvSB6w6FwaXMgamU6IMO6emVtw60gPHR5cD4gPG7DoXpldiBvYmNlPi4gTmFwxZkuOiAnw7p6ZW3DrSBvYmNlIEtsYWRubycgKG7DoXpldiBvYmNlIG11c8OtIGLDvXQgdiAxLiBww6FkxJspLlwiLFxyXG4gICAgICAgICAgc3RhcnRPZmZzZXQ6IDAsXHJcbiAgICAgICAgICBlbmRPZmZzZXQ6IGxpbmUubGVuZ3RoICsgMSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgICBtdW5pY2lwYWxpdHk6IG51bGwsXHJcbiAgICB9O1xyXG4gIH1cclxuICBjb25zdCB7IHR5cGUsIG5hbWUgfSA9IG1hdGNoLmdyb3VwcztcclxuICByZXR1cm4gYXdhaXQgZ2V0TXVuaWNpcGFsaXR5UmVzdWx0KHR5cGUsIGNsZWFuTmFtZShuYW1lKSwgbGluZSwgZm91bmRlcik7XHJcbn07XHJcblxyXG5jb25zdCBnZXRNdW5pY2lwYWxpdHlSZXN1bHQgPSBhc3luYyAoXHJcbiAgdHlwZTogc3RyaW5nLFxyXG4gIG5hbWU6IHN0cmluZyxcclxuICBsaW5lOiBzdHJpbmcsXHJcbiAgZm91bmRlcjogRm91bmRlclxyXG4pOiBQcm9taXNlPERiTXVuaWNpcGFsaXR5UmVzdWx0PiA9PiB7XHJcbiAgY29uc3QgdHlwZVZhbHVlID0gZ2V0TXVuaWNpcGFsaXR5VHlwZSh0eXBlKTtcclxuICBjb25zdCB7IG11bmljaXBhbGl0eSwgZXJyb3JzIH0gPSBhd2FpdCBmaW5kTXVuaWNpcGFsaXR5QnlOYW1lQW5kVHlwZShcclxuICAgIG5hbWUsXHJcbiAgICB0eXBlVmFsdWUsXHJcbiAgICBmb3VuZGVyXHJcbiAgKTtcclxuXHJcbiAgY29uc3Qgc3RhcnRPZmZzZXQgPSBsaW5lLmluZGV4T2YobmFtZSk7XHJcbiAgY29uc3QgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBuYW1lLmxlbmd0aCArIDE7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBtdW5pY2lwYWxpdHksXHJcbiAgICBlcnJvcnM6IGVycm9ycy5tYXAoKGVycm9yKSA9PiAoe1xyXG4gICAgICAuLi5lcnJvcixcclxuICAgICAgc3RhcnRPZmZzZXQsXHJcbiAgICAgIGVuZE9mZnNldCxcclxuICAgIH0pKSxcclxuICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldE11bmljaXBhbGl0eVBhcnRSZXN1bHQgPSBhc3luYyAoXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIGxpbmU6IHN0cmluZyxcclxuICBmb3VuZGVyOiBGb3VuZGVyXHJcbik6IFByb21pc2U8TXVuaWNpcGFsaXR5UGFydFJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IHsgbXVuaWNpcGFsaXR5UGFydENvZGUsIGVycm9ycyB9ID0gYXdhaXQgZmluZE11bmljaXBhbGl0eVBhcnRCeU5hbWUoXHJcbiAgICBuYW1lLFxyXG4gICAgZm91bmRlclxyXG4gICk7XHJcblxyXG4gIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gbGluZS5pbmRleE9mKG5hbWUpO1xyXG4gIGNvbnN0IGVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0ICsgbmFtZS5sZW5ndGggKyAxO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgbXVuaWNpcGFsaXR5UGFydENvZGUsXHJcbiAgICBlcnJvcnM6IGVycm9ycy5tYXAoKGVycm9yKSA9PiAoe1xyXG4gICAgICAuLi5lcnJvcixcclxuICAgICAgc3RhcnRPZmZzZXQsXHJcbiAgICAgIGVuZE9mZnNldCxcclxuICAgIH0pKSxcclxuICB9O1xyXG59O1xyXG5cclxuY29uc3QgZ2V0TXVuaWNpcGFsaXR5VHlwZSA9ICh0eXBlOiBzdHJpbmcpOiBNdW5pY2lwYWxpdHlUeXBlID0+IHtcclxuICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgIGNhc2UgXCJtxJtzdHNrw6kgxI3DoXN0aVwiOlxyXG4gICAgY2FzZSBcIm3Em3N0c2vDqWhvIG9idm9kdVwiOlxyXG4gICAgICByZXR1cm4gTXVuaWNpcGFsaXR5VHlwZS5EaXN0cmljdDtcclxuICAgIGNhc2UgXCJvYmNlXCI6XHJcbiAgICBjYXNlIFwibcSbc3RhXCI6XHJcbiAgICAgIHJldHVybiBNdW5pY2lwYWxpdHlUeXBlLkNpdHk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgY2xlYW5OYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgcmV0dXJuIG5hbWUudHJpbSgpO1xyXG59O1xyXG4iXX0=
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVuaWNpcGFsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVldC1tYXJrZG93bi9tdW5pY2lwYWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLDZCQUE2QixFQUM3QiwwQkFBMEIsRUFDMUIsa0JBQWtCLEdBQ25CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFXLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3hELE1BQU0sOEJBQThCLEdBQUcsZUFBZSxDQUFDO0FBRXZELE1BQU0seUJBQXlCLEdBQzdCLG9GQUFvRixDQUFDO0FBRXZGLE1BQU0sNkJBQTZCLEdBQUcsU0FBUyxDQUFDO0FBRWhELE1BQU0sd0JBQXdCLEdBQzVCLHdFQUF3RSxDQUFDO0FBRTNFLE1BQU0sMkJBQTJCLEdBQy9CLDZDQUE2QyxDQUFDO0FBRWhELE1BQU0seUJBQXlCLEdBQzdCLGdFQUFnRSxDQUFDO0FBQ25FLE1BQU0sNkJBQTZCLEdBQ2pDLDRDQUE0QyxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBWSxFQUFXLEVBQUU7SUFDNUQsT0FBTyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxFQUN4QyxJQUFZLEVBQ1osT0FBZ0IsRUFDZSxFQUFFO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7UUFDbEIsT0FBTztZQUNMLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxPQUFPLEVBQ0wsbUxBQW1MO29CQUNyTCxXQUFXLEVBQUUsQ0FBQztvQkFDZCxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO2lCQUMzQjthQUNGO1lB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QUFLLGtCQUFrQjtZQUNyQixPQUFPLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztRQUNuQyxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssT0FBTztZQUNWLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0tBQ2hDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQVUsRUFBRTtJQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNyQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGZpbmRNdW5pY2lwYWxpdHlCeU5hbWVBbmRUeXBlLFxyXG4gIGZpbmRNdW5pY2lwYWxpdHlQYXJ0QnlOYW1lLFxyXG4gIGdldEZvdW5kZXJDaXR5Q29kZSxcclxufSBmcm9tIFwiLi4vZGIvZm91bmRlcnNcIjtcclxuaW1wb3J0IHsgRm91bmRlciwgTXVuaWNpcGFsaXR5VHlwZSB9IGZyb20gXCIuLi9kYi90eXBlc1wiO1xyXG5pbXBvcnQgeyBEYk11bmljaXBhbGl0eVJlc3VsdCwgTXVuaWNpcGFsaXR5UGFydFJlc3VsdCB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5jb25zdCBtdW5pY2lwYWxpdHlTd2l0Y2hTdGFydFBhdHRlcm4gPSAvXm5hdsOtYyB1bGljZSAvO1xyXG5cclxuY29uc3QgbXVuaWNpcGFsaXR5U3dpdGNoUGF0dGVybiA9XHJcbiAgL15uYXbDrWMgdWxpY2UgKHogKT8oPzx0eXBlPm3Em3N0c2vDqSDEjcOhc3RpfG3Em3N0c2vDqWhvIG9idm9kdXxvYmNlfG3Em3N0YSkgKD88bmFtZT4uKyk6JC87XHJcblxyXG5jb25zdCB3aG9sZU11bmljaXBhbGl0eVN0YXJ0UGF0dGVybiA9IC9ew7p6ZW3DrSAvO1xyXG5cclxuY29uc3Qgd2hvbGVNdW5pY2lwYWxpdHlQYXR0ZXJuID1cclxuICAvXsO6emVtw60gKD88dHlwZT5txJtzdHNrw6kgxI3DoXN0aXxtxJtzdHNrw6lobyBvYnZvZHV8b2JjZXxtxJtzdGEpICg/PG5hbWU+LispJC87XHJcblxyXG5jb25zdCByZXN0V2l0aE5vU3RyZWV0TmFtZVBhdHRlcm4gPVxyXG4gIC9edsWhZWNobnkgb3N0YXRuw60gYnVkb3Z5IGJleiBuw6F6dnUgdWxpY2VcXHMqJC87XHJcblxyXG5jb25zdCByZXN0T2ZNdW5pY2lwYWxpdHlQYXR0ZXJuID1cclxuICAvXnpieXRlayAoPzx0eXBlPm3Em3N0c2vDqSDEjcOhc3RpfG3Em3N0c2vDqWhvIG9idm9kdXxvYmNlfG3Em3N0YSlcXHMqJC87XHJcbmNvbnN0IHJlc3RPZk11bmljaXBhbGl0eVBhcnRQYXR0ZXJuID1cclxuICAvXnpieXRlayDEjcOhc3RpIChvYmNlfG3Em3N0YSkgKD88bmFtZT4uKylcXHMqJC87XHJcblxyXG5leHBvcnQgY29uc3QgaXNNdW5pY2lwYWxpdHlTd2l0Y2ggPSAobGluZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIG11bmljaXBhbGl0eVN3aXRjaFN0YXJ0UGF0dGVybi50ZXN0KGxpbmUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldFN3aXRjaE11bmljaXBhbGl0eSA9IGFzeW5jIChcclxuICBsaW5lOiBzdHJpbmcsXHJcbiAgZm91bmRlcjogRm91bmRlclxyXG4pOiBQcm9taXNlPERiTXVuaWNpcGFsaXR5UmVzdWx0PiA9PiB7XHJcbiAgY29uc3QgbWF0Y2ggPSBtdW5pY2lwYWxpdHlTd2l0Y2hQYXR0ZXJuLmV4ZWMobGluZSk7XHJcbiAgaWYgKG1hdGNoID09PSBudWxsKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBlcnJvcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtZXNzYWdlOlxyXG4gICAgICAgICAgICBcIk5lcGxhdG7DvSB6w6FwaXMgcHJvIGRvxI1hc25vdSB6bcSbbnUgb2JjZSB2IGRlZmluaWNpIHVsaWMuIFNwcsOhdm7DvSB6w6FwaXMgamU6IG5hdsOtYyB1bGljZSA8dHlwPiA8bsOhemV2IG9iY2U+LiBOYXDFmS46ICduYXbDrWMgdWxpY2Ugb2JjZSBNb2tyw6EgTGhvdGE6JyAobsOhemV2IG9iY2UgbXVzw60gYsO9dCB2IDEuIHDDoWTEmykuXCIsXHJcbiAgICAgICAgICBzdGFydE9mZnNldDogMCxcclxuICAgICAgICAgIGVuZE9mZnNldDogbGluZS5sZW5ndGggKyAxLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICAgIG11bmljaXBhbGl0eTogbnVsbCxcclxuICAgIH07XHJcbiAgfVxyXG4gIGNvbnN0IHsgdHlwZSwgbmFtZSB9ID0gbWF0Y2guZ3JvdXBzO1xyXG4gIHJldHVybiBhd2FpdCBnZXRNdW5pY2lwYWxpdHlSZXN1bHQodHlwZSwgY2xlYW5OYW1lKG5hbWUpLCBsaW5lLCBmb3VuZGVyKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc1dob2xlTXVuaWNpcGFsaXR5ID0gKGxpbmU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiB3aG9sZU11bmljaXBhbGl0eVN0YXJ0UGF0dGVybi50ZXN0KGxpbmUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzUmVzdFdpdGhOb1N0cmVldE5hbWVMaW5lID0gKGxpbmU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiByZXN0V2l0aE5vU3RyZWV0TmFtZVBhdHRlcm4udGVzdChsaW5lKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc1Jlc3RPZk11bmljaXBhbGl0eUxpbmUgPSAobGluZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIHJlc3RPZk11bmljaXBhbGl0eVBhdHRlcm4udGVzdChsaW5lKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc1Jlc3RPZk11bmljaXBhbGl0eVBhcnRMaW5lID0gKGxpbmU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiByZXN0T2ZNdW5pY2lwYWxpdHlQYXJ0UGF0dGVybi50ZXN0KGxpbmUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldFJlc3RPZk11bmljaXBhbGl0eVBhcnQgPSBhc3luYyAoXHJcbiAgbGluZTogc3RyaW5nLFxyXG4gIGZvdW5kZXI6IEZvdW5kZXJcclxuKTogUHJvbWlzZTxNdW5pY2lwYWxpdHlQYXJ0UmVzdWx0PiA9PiB7XHJcbiAgY29uc3QgbWF0Y2ggPSByZXN0T2ZNdW5pY2lwYWxpdHlQYXJ0UGF0dGVybi5leGVjKGxpbmUpO1xyXG4gIGlmIChtYXRjaCA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXJyb3JzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbWVzc2FnZTpcclxuICAgICAgICAgICAgXCJOZXBsYXRuw70gesOhcGlzIHBybyBwxZlpZMOhbsOtIHpieXRrdSDEjcOhc3RpIG9iY2UuIFNwcsOhdm7DvSB6w6FwaXMgamU6IHpieXRlayDEjcOhc3RpIDx0eXA+IDxuw6F6ZXYgb2JjZT4uIE5hcMWZLjogJ3pieXRlayDEjcOhc3RpIG9iY2UgTWFsxaFvdmljZScgKG7DoXpldiDEjcOhc3RpIG9iY2UgbXVzw60gYsO9dCB2IDEuIHDDoWTEmykuXCIsXHJcbiAgICAgICAgICBzdGFydE9mZnNldDogMCxcclxuICAgICAgICAgIGVuZE9mZnNldDogbGluZS5sZW5ndGggKyAxLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICAgIG11bmljaXBhbGl0eVBhcnRDb2RlOiBudWxsLFxyXG4gICAgfTtcclxuICB9XHJcbiAgY29uc3QgeyBuYW1lIH0gPSBtYXRjaC5ncm91cHM7XHJcbiAgcmV0dXJuIGF3YWl0IGdldE11bmljaXBhbGl0eVBhcnRSZXN1bHQoXHJcbiAgICBuYW1lLFxyXG4gICAgbGluZSxcclxuICAgIGF3YWl0IGdldEZvdW5kZXJDaXR5Q29kZShmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUsIGZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZSlcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldFdob2xlTXVuaWNpcGFsaXR5ID0gYXN5bmMgKFxyXG4gIGxpbmU6IHN0cmluZyxcclxuICBmb3VuZGVyOiBGb3VuZGVyXHJcbik6IFByb21pc2U8RGJNdW5pY2lwYWxpdHlSZXN1bHQ+ID0+IHtcclxuICBjb25zdCBtYXRjaCA9IHdob2xlTXVuaWNpcGFsaXR5UGF0dGVybi5leGVjKGxpbmUpO1xyXG4gIGlmIChtYXRjaCA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXJyb3JzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbWVzc2FnZTpcclxuICAgICAgICAgICAgXCJOZXBsYXRuw70gesOhcGlzIHBybyBwxZlpZMOhbsOtIGNlbMOpIG9iY2UuIFNwcsOhdm7DvSB6w6FwaXMgamU6IMO6emVtw60gPHR5cD4gPG7DoXpldiBvYmNlPi4gTmFwxZkuOiAnw7p6ZW3DrSBvYmNlIEtsYWRubycgKG7DoXpldiBvYmNlIG11c8OtIGLDvXQgdiAxLiBww6FkxJspLlwiLFxyXG4gICAgICAgICAgc3RhcnRPZmZzZXQ6IDAsXHJcbiAgICAgICAgICBlbmRPZmZzZXQ6IGxpbmUubGVuZ3RoICsgMSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgICBtdW5pY2lwYWxpdHk6IG51bGwsXHJcbiAgICB9O1xyXG4gIH1cclxuICBjb25zdCB7IHR5cGUsIG5hbWUgfSA9IG1hdGNoLmdyb3VwcztcclxuICByZXR1cm4gYXdhaXQgZ2V0TXVuaWNpcGFsaXR5UmVzdWx0KHR5cGUsIGNsZWFuTmFtZShuYW1lKSwgbGluZSwgZm91bmRlcik7XHJcbn07XHJcblxyXG5jb25zdCBnZXRNdW5pY2lwYWxpdHlSZXN1bHQgPSBhc3luYyAoXHJcbiAgdHlwZTogc3RyaW5nLFxyXG4gIG5hbWU6IHN0cmluZyxcclxuICBsaW5lOiBzdHJpbmcsXHJcbiAgZm91bmRlcjogRm91bmRlclxyXG4pOiBQcm9taXNlPERiTXVuaWNpcGFsaXR5UmVzdWx0PiA9PiB7XHJcbiAgY29uc3QgdHlwZVZhbHVlID0gZ2V0TXVuaWNpcGFsaXR5VHlwZSh0eXBlKTtcclxuICBjb25zdCB7IG11bmljaXBhbGl0eSwgZXJyb3JzIH0gPSBhd2FpdCBmaW5kTXVuaWNpcGFsaXR5QnlOYW1lQW5kVHlwZShcclxuICAgIG5hbWUsXHJcbiAgICB0eXBlVmFsdWUsXHJcbiAgICBmb3VuZGVyXHJcbiAgKTtcclxuXHJcbiAgY29uc3Qgc3RhcnRPZmZzZXQgPSBsaW5lLmluZGV4T2YobmFtZSk7XHJcbiAgY29uc3QgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBuYW1lLmxlbmd0aCArIDE7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBtdW5pY2lwYWxpdHksXHJcbiAgICBlcnJvcnM6IGVycm9ycy5tYXAoKGVycm9yKSA9PiAoe1xyXG4gICAgICAuLi5lcnJvcixcclxuICAgICAgc3RhcnRPZmZzZXQsXHJcbiAgICAgIGVuZE9mZnNldCxcclxuICAgIH0pKSxcclxuICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldE11bmljaXBhbGl0eVBhcnRSZXN1bHQgPSBhc3luYyAoXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIGxpbmU6IHN0cmluZyxcclxuICBjaXR5Q29kZTogbnVtYmVyXHJcbik6IFByb21pc2U8TXVuaWNpcGFsaXR5UGFydFJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IHsgbXVuaWNpcGFsaXR5UGFydENvZGUsIGVycm9ycyB9ID0gYXdhaXQgZmluZE11bmljaXBhbGl0eVBhcnRCeU5hbWUoXHJcbiAgICBuYW1lLFxyXG4gICAgY2l0eUNvZGVcclxuICApO1xyXG5cclxuICBjb25zdCBzdGFydE9mZnNldCA9IGxpbmUuaW5kZXhPZihuYW1lKTtcclxuICBjb25zdCBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIG5hbWUubGVuZ3RoICsgMTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIG11bmljaXBhbGl0eVBhcnRDb2RlLFxyXG4gICAgZXJyb3JzOiBlcnJvcnMubWFwKChlcnJvcikgPT4gKHtcclxuICAgICAgLi4uZXJyb3IsXHJcbiAgICAgIHN0YXJ0T2Zmc2V0LFxyXG4gICAgICBlbmRPZmZzZXQsXHJcbiAgICB9KSksXHJcbiAgfTtcclxufTtcclxuXHJcbmNvbnN0IGdldE11bmljaXBhbGl0eVR5cGUgPSAodHlwZTogc3RyaW5nKTogTXVuaWNpcGFsaXR5VHlwZSA9PiB7XHJcbiAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICBjYXNlIFwibcSbc3Rza8OpIMSNw6FzdGlcIjpcclxuICAgIGNhc2UgXCJtxJtzdHNrw6lobyBvYnZvZHVcIjpcclxuICAgICAgcmV0dXJuIE11bmljaXBhbGl0eVR5cGUuRGlzdHJpY3Q7XHJcbiAgICBjYXNlIFwib2JjZVwiOlxyXG4gICAgY2FzZSBcIm3Em3N0YVwiOlxyXG4gICAgICByZXR1cm4gTXVuaWNpcGFsaXR5VHlwZS5DaXR5O1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGNsZWFuTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIHJldHVybiBuYW1lLnRyaW0oKTtcclxufTtcclxuIl19
|
|
@@ -47,12 +47,17 @@ export const municipalitiesToPolygons = async (municipalities) => {
|
|
|
47
47
|
return result;
|
|
48
48
|
};
|
|
49
49
|
const findColoring = (collectionMap) => {
|
|
50
|
-
// here do the coloring
|
|
51
50
|
// put all the features in one array
|
|
52
51
|
const allFeatures = Array.from(collectionMap.values()).reduce((acc, collection) => {
|
|
53
52
|
acc.push(...collection.features);
|
|
54
53
|
return acc;
|
|
55
54
|
}, []);
|
|
55
|
+
if (allFeatures.length <= 5) {
|
|
56
|
+
allFeatures.forEach((feature, index) => {
|
|
57
|
+
feature.properties.colorIndex = index;
|
|
58
|
+
});
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
56
61
|
const graph = new Graph();
|
|
57
62
|
allFeatures.forEach((feature) => {
|
|
58
63
|
graph.addNode(feature.properties.areaIndex);
|
|
@@ -253,4 +258,4 @@ const extractMunicipalityCodes = (municipalities) => {
|
|
|
253
258
|
}, { cityCodes: new Set(), districtCodes: new Set() });
|
|
254
259
|
};
|
|
255
260
|
const extractPolygonFromCollection = (collection) => collection.features.length > 1 ? union(collection) : collection.features[0];
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWV0LW1hcmtkb3duL3BvbHlnb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHdkMsT0FBTyxFQU1MLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEUsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFRMUMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxFQUMzQyxjQUE4QixFQUNjLEVBQUU7SUFDOUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5RSxNQUFNLFlBQVksR0FBRyxNQUFNLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbEUsSUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FB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QztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sNEJBQTRCLEdBQUcsQ0FDbkMsVUFBcUQsRUFDcEIsRUFBRSxDQUNuQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlbGF1bmF5IH0gZnJvbSBcImQzLWRlbGF1bmF5XCI7XHJcbmltcG9ydCB7IEFyZWEsIEV4cG9ydEFkZHJlc3NQb2ludCwgTXVuaWNpcGFsaXR5IH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgRmVhdHVyZSxcclxuICBGZWF0dXJlQ29sbGVjdGlvbixcclxuICBNdWx0aVBvbHlnb24sXHJcbiAgUG9pbnQsXHJcbiAgUG9seWdvbixcclxuICBmZWF0dXJlQ29sbGVjdGlvbixcclxufSBmcm9tIFwiQHR1cmYvaGVscGVyc1wiO1xyXG5pbXBvcnQgaW50ZXJzZWN0IGZyb20gXCJAdHVyZi9pbnRlcnNlY3RcIjtcclxuaW1wb3J0IHsgYm9vbGVhbkludGVyc2VjdHMgfSBmcm9tIFwiQHR1cmYvYm9vbGVhbi1pbnRlcnNlY3RzXCI7XHJcbmltcG9ydCBHcmFwaCBmcm9tIFwiZ3JhcGhvbG9neVwiO1xyXG5pbXBvcnQgeyBjb2xvciB9IGZyb20gXCJncmFwaG9sb2d5LWNvbG9yXCI7XHJcbmltcG9ydCB7IHRvTWVyY2F0b3IsIHRvV2dzODQgfSBmcm9tIFwiQHR1cmYvcHJvamVjdGlvblwiO1xyXG5pbXBvcnQgdW5pb24gZnJvbSBcIkB0dXJmL3VuaW9uXCI7XHJcbmltcG9ydCB7IGdldENpdHlQb2x5Z29ucywgZ2V0RGlzdHJpY3RQb2x5Z29ucyB9IGZyb20gXCIuLi9kYi9jaXRpZXNcIjtcclxuaW1wb3J0IHRydW5jYXRlIGZyb20gXCJAdHVyZi90cnVuY2F0ZVwiO1xyXG5pbXBvcnQgeyBQb2x5Z29uc0J5Q29kZXMgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuaW1wb3J0IGRpZmZlcmVuY2UgZnJvbSBcIkB0dXJmL2RpZmZlcmVuY2VcIjtcclxuXHJcbnR5cGUgUG9seWdvblByb3BzID0ge1xyXG4gIGFyZWFJbmRleGVzOiBudW1iZXJbXTtcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIG5laWdoYm9yczogU2V0PG51bWJlcj47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgbXVuaWNpcGFsaXRpZXNUb1BvbHlnb25zID0gYXN5bmMgKFxyXG4gIG11bmljaXBhbGl0aWVzOiBNdW5pY2lwYWxpdHlbXVxyXG4pOiBQcm9taXNlPFJlY29yZDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPj4gPT4ge1xyXG4gIGNvbnN0IHsgY2l0eUNvZGVzLCBkaXN0cmljdENvZGVzIH0gPSBleHRyYWN0TXVuaWNpcGFsaXR5Q29kZXMobXVuaWNpcGFsaXRpZXMpO1xyXG4gIGNvbnN0IGNpdHlQb2x5Z29ucyA9IGF3YWl0IGdldENpdHlQb2x5Z29ucyhjaXR5Q29kZXMpO1xyXG4gIGNvbnN0IGRpc3RyaWN0UG9seWdvbnMgPSBhd2FpdCBnZXREaXN0cmljdFBvbHlnb25zKGRpc3RyaWN0Q29kZXMpO1xyXG5cclxuICBpZiAoXHJcbiAgICBPYmplY3Qua2V5cyhjaXR5UG9seWdvbnMpLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgT2JqZWN0LmtleXMoZGlzdHJpY3RQb2x5Z29ucykubGVuZ3RoID09PSAwXHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIk5vIHBvbHlnb25zIGZvdW5kIGZvciBnaXZlbiBtdW5pY2lwYWxpdGllcy5cIik7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvLyBtdW5pY2lwYWxpdHlDb2RlIC0+IGFyZWFzXHJcbiAgY29uc3QgZXh0cmFBcmVhcyA9IGdldEV4dHJhQXJlYXMobXVuaWNpcGFsaXRpZXMpO1xyXG5cclxuICBjb25zdCBjb2xsZWN0aW9uTWFwID0gbmV3IE1hcDxcclxuICAgIG51bWJlcixcclxuICAgIEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+XHJcbiAgPigpO1xyXG4gIC8vIGFyZWFJbmRleCAtPiBwb2x5Z29uXHJcbiAgY29uc3QgZXh0cmFQb2x5Z29uc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10+KCk7XHJcblxyXG4gIGZvciAoY29uc3QgbXVuaWNpcGFsaXR5IG9mIG11bmljaXBhbGl0aWVzKSB7XHJcbiAgICBpZiAobXVuaWNpcGFsaXR5LmFyZWFzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZmVhdHVyZUNvbGxlY3Rpb24sIGV4dHJhUG9seWdvbnMgfSA9IGNyZWF0ZVBvbHlnb25zKFxyXG4gICAgICBtdW5pY2lwYWxpdHksXHJcbiAgICAgIGV4dHJhQXJlYXMuZ2V0KG11bmljaXBhbGl0eS5jb2RlKSA/PyBbXSxcclxuICAgICAgZ2V0TXVuaWNpcGFsaXR5UG9seWdvbnMobXVuaWNpcGFsaXR5LCBjaXR5UG9seWdvbnMsIGRpc3RyaWN0UG9seWdvbnMpXHJcbiAgICApO1xyXG4gICAgY29sbGVjdGlvbk1hcC5zZXQobXVuaWNpcGFsaXR5LmNvZGUsIGZlYXR1cmVDb2xsZWN0aW9uKTtcclxuICAgIGlmIChleHRyYUFyZWFzLmhhcyhtdW5pY2lwYWxpdHkuY29kZSkpIHtcclxuICAgICAgZm9yIChjb25zdCBbYXJlYUluZGV4LCBleHRyYVBvbHlnb25dIG9mIGV4dHJhUG9seWdvbnMpIHtcclxuICAgICAgICBpZiAoIWV4dHJhUG9seWdvbnNNYXAuaGFzKGFyZWFJbmRleCkpIHtcclxuICAgICAgICAgIGV4dHJhUG9seWdvbnNNYXAuc2V0KGFyZWFJbmRleCwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBleHRyYVBvbHlnb25zTWFwLmdldChhcmVhSW5kZXgpLnB1c2goZXh0cmFQb2x5Z29uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkRXh0cmFQb2x5Z29ucyhjb2xsZWN0aW9uTWFwLCBleHRyYVBvbHlnb25zTWFwKTtcclxuXHJcbiAgZmluZENvbG9yaW5nKGNvbGxlY3Rpb25NYXApO1xyXG5cclxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPiA9IHt9O1xyXG4gIGZvciAoY29uc3QgW211bmljaXBhbGl0eUNvZGUsIGNvbGxlY3Rpb25dIG9mIGNvbGxlY3Rpb25NYXApIHtcclxuICAgIHJlc3VsdFttdW5pY2lwYWxpdHlDb2RlXSA9IGNvbGxlY3Rpb247XHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQ29sb3JpbmcgPSAoY29sbGVjdGlvbk1hcDogTWFwPG51bWJlciwgRmVhdHVyZUNvbGxlY3Rpb24+KSA9PiB7XHJcbiAgLy8gaGVyZSBkbyB0aGUgY29sb3JpbmdcclxuICAvLyBwdXQgYWxsIHRoZSBmZWF0dXJlcyBpbiBvbmUgYXJyYXlcclxuICBjb25zdCBhbGxGZWF0dXJlcyA9IEFycmF5LmZyb20oY29sbGVjdGlvbk1hcC52YWx1ZXMoKSkucmVkdWNlKFxyXG4gICAgKGFjYywgY29sbGVjdGlvbikgPT4ge1xyXG4gICAgICBhY2MucHVzaCguLi5jb2xsZWN0aW9uLmZlYXR1cmVzKTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sXHJcbiAgICBbXVxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGdyYXBoID0gbmV3IEdyYXBoKCk7XHJcbiAgYWxsRmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgZ3JhcGguYWRkTm9kZShmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4KTtcclxuICB9KTtcclxuXHJcbiAgZm9yIChjb25zdCBmZWF0dXJlMSBvZiBhbGxGZWF0dXJlcykge1xyXG4gICAgZm9yIChjb25zdCBmZWF0dXJlMiBvZiBhbGxGZWF0dXJlcykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZmVhdHVyZTEucHJvcGVydGllcy5hcmVhSW5kZXggIT09IGZlYXR1cmUyLnByb3BlcnRpZXMuYXJlYUluZGV4ICYmXHJcbiAgICAgICAgYm9vbGVhbkludGVyc2VjdHMoZmVhdHVyZTEsIGZlYXR1cmUyKVxyXG4gICAgICApIHtcclxuICAgICAgICBncmFwaC5hZGRFZGdlKFxyXG4gICAgICAgICAgZmVhdHVyZTEucHJvcGVydGllcy5hcmVhSW5kZXgsXHJcbiAgICAgICAgICBmZWF0dXJlMi5wcm9wZXJ0aWVzLmFyZWFJbmRleFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbG9yKGdyYXBoKTtcclxuXHJcbiAgYWxsRmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgZmVhdHVyZS5wcm9wZXJ0aWVzLmNvbG9ySW5kZXggPSBncmFwaC5nZXROb2RlQXR0cmlidXRlKFxyXG4gICAgICBmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4LFxyXG4gICAgICBcImNvbG9yXCJcclxuICAgICk7XHJcbiAgfSk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRFeHRyYUFyZWFzID0gKG11bmljaXBhbGl0aWVzOiBNdW5pY2lwYWxpdHlbXSk6IE1hcDxudW1iZXIsIEFyZWFbXT4gPT4ge1xyXG4gIC8vIG11bmljaXBhbGl0eUNvZGUgLT4gYXJlYXNcclxuICBjb25zdCBleHRyYUFyZWFzID0gbmV3IE1hcDxudW1iZXIsIEFyZWFbXT4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBtdW5pY2lwYWxpdHkgb2YgbXVuaWNpcGFsaXRpZXMpIHtcclxuICAgIGZvciAoY29uc3QgYXJlYSBvZiBtdW5pY2lwYWxpdHkuYXJlYXMpIHtcclxuICAgICAgLy8gbXVuaWNpcGFsaXR5Q29kZSAtPiBwb2ludHNcclxuICAgICAgY29uc3QgZXh0cmFQb2ludHMgPSBuZXcgTWFwPG51bWJlciwgRXhwb3J0QWRkcmVzc1BvaW50W10+KCk7XHJcbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgYXJlYS5hZGRyZXNzZXMpIHtcclxuICAgICAgICBpZiAocG9pbnQubXVuaWNpcGFsaXR5Q29kZSkge1xyXG4gICAgICAgICAgaWYgKCFleHRyYVBvaW50cy5oYXMocG9pbnQubXVuaWNpcGFsaXR5Q29kZSkpIHtcclxuICAgICAgICAgICAgZXh0cmFQb2ludHMuc2V0KHBvaW50Lm11bmljaXBhbGl0eUNvZGUsIFtdKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBleHRyYVBvaW50cy5nZXQocG9pbnQubXVuaWNpcGFsaXR5Q29kZSkucHVzaChwb2ludCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IFttdW5pY2lwYWxpdHlDb2RlLCBwb2ludHNdIG9mIGV4dHJhUG9pbnRzKSB7XHJcbiAgICAgICAgaWYgKCFleHRyYUFyZWFzLmhhcyhtdW5pY2lwYWxpdHlDb2RlKSkge1xyXG4gICAgICAgICAgZXh0cmFBcmVhcy5zZXQobXVuaWNpcGFsaXR5Q29kZSwgW10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXh0cmFBcmVhcy5nZXQobXVuaWNpcGFsaXR5Q29kZSkucHVzaCh7XHJcbiAgICAgICAgICAuLi5hcmVhLFxyXG4gICAgICAgICAgYWRkcmVzc2VzOiBwb2ludHMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGV4dHJhQXJlYXM7XHJcbn07XHJcblxyXG5jb25zdCBhZGRFeHRyYVBvbHlnb25zID0gKFxyXG4gIGNvbGxlY3Rpb25NYXA6IE1hcDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+PixcclxuICBleHRyYVBvbHlnb25zTWFwOiBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10+XHJcbikgPT4ge1xyXG4gIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uTWFwLnZhbHVlcygpKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxlY3Rpb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZmVhdHVyZSA9IGNvbGxlY3Rpb24uZmVhdHVyZXNbaV07XHJcbiAgICAgIGlmIChleHRyYVBvbHlnb25zTWFwLmhhcyhmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4KSkge1xyXG4gICAgICAgIGNvbnN0IHBvbHlnb25zID0gZXh0cmFQb2x5Z29uc01hcC5nZXQoZmVhdHVyZS5wcm9wZXJ0aWVzLmFyZWFJbmRleCk7XHJcbiAgICAgICAgY29uc3QgbmV3UG9seWdvbiA9IHVuaW9uKGZlYXR1cmVDb2xsZWN0aW9uKFsuLi5wb2x5Z29ucywgZmVhdHVyZV0pKTtcclxuICAgICAgICBjb25zdCBuZXdGZWF0dXJlID0ge1xyXG4gICAgICAgICAgLi4ubmV3UG9seWdvbixcclxuICAgICAgICAgIHByb3BlcnRpZXM6IHsgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2xsZWN0aW9uLmZlYXR1cmVzW2ldID0gbmV3RmVhdHVyZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldE11bmljaXBhbGl0eVBvbHlnb25zID0gKFxyXG4gIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5LFxyXG4gIGNpdHlQb2x5Z29uczogUG9seWdvbnNCeUNvZGVzLFxyXG4gIGRpc3RyaWN0UG9seWdvbnM6IFBvbHlnb25zQnlDb2Rlc1xyXG4pOiBQb2x5Z29uc0J5Q29kZXMgPT4ge1xyXG4gIGNvbnN0IHBvbHlnb25zOiBQb2x5Z29uc0J5Q29kZXMgPSB7fTtcclxuXHJcbiAgZm9yIChjb25zdCBjaXR5Q29kZSBvZiBtdW5pY2lwYWxpdHkuY2l0eUNvZGVzKSB7XHJcbiAgICBpZiAoY2l0eVBvbHlnb25zW2NpdHlDb2RlXSkge1xyXG4gICAgICBwb2x5Z29uc1tjaXR5Q29kZV0gPSBjaXR5UG9seWdvbnNbY2l0eUNvZGVdO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIG11bmljaXBhbGl0eS5tdW5pY2lwYWxpdHlUeXBlID09PSBcImNpdHlcIiAmJlxyXG4gICAgICAgIE9iamVjdC5rZXlzKGRpc3RyaWN0UG9seWdvbnMpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICBtdW5pY2lwYWxpdHkubXVuaWNpcGFsaXR5TmFtZSAhPT0gXCJCcm5vXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IGNpdHlQb2x5Z29uID0gZXh0cmFjdFBvbHlnb25Gcm9tQ29sbGVjdGlvbihjaXR5UG9seWdvbnNbY2l0eUNvZGVdKTtcclxuICAgICAgICAvLyBzdWJ0cmFjdCBhbGwgZGlzdHJpY3QgcG9seWdvbnMgZnJvbSBjaXR5IHBvbHlnb25cclxuICAgICAgICBmb3IgKGNvbnN0IFtkaXN0cmljdENvZGUsIGRpc3RyaWN0UG9seWdvbl0gb2YgT2JqZWN0LmVudHJpZXMoXHJcbiAgICAgICAgICBkaXN0cmljdFBvbHlnb25zXHJcbiAgICAgICAgKSkge1xyXG4gICAgICAgICAgaWYgKG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzLmluY2x1ZGVzKHBhcnNlSW50KGRpc3RyaWN0Q29kZSkpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2l0eVBvbHlnb24gPSBkaWZmZXJlbmNlKFxyXG4gICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbihbXHJcbiAgICAgICAgICAgICAgY2l0eVBvbHlnb24sXHJcbiAgICAgICAgICAgICAgZXh0cmFjdFBvbHlnb25Gcm9tQ29sbGVjdGlvbihkaXN0cmljdFBvbHlnb24pLFxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9seWdvbnNbY2l0eUNvZGVdID0gZmVhdHVyZUNvbGxlY3Rpb24oW2NpdHlQb2x5Z29uXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAoY29uc3QgZGlzdHJpY3RDb2RlIG9mIG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzKSB7XHJcbiAgICBpZiAoZGlzdHJpY3RQb2x5Z29uc1tkaXN0cmljdENvZGVdKSB7XHJcbiAgICAgIHBvbHlnb25zW2Rpc3RyaWN0Q29kZV0gPSBkaXN0cmljdFBvbHlnb25zW2Rpc3RyaWN0Q29kZV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcG9seWdvbnM7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlUG9seWdvbnMgPSAoXHJcbiAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHksXHJcbiAgZXh0cmFBcmVhczogQXJlYVtdLFxyXG4gIG11bmljaXBhbGl0eVBvbHlnb25zOiBSZWNvcmQ8XHJcbiAgICBudW1iZXIsXHJcbiAgICBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPlxyXG4gID5cclxuKToge1xyXG4gIGZlYXR1cmVDb2xsZWN0aW9uOiBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPjtcclxuICBleHRyYVBvbHlnb25zOiBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+PjtcclxufSA9PiB7XHJcbiAgY29uc3QgbXVuaWNpcGFsaXRpZXNNdWx0aXBvbHlnb24gPSBjcmVhdGVNdW5pY2lwYWxpdGllc011bHRpcG9seWdvbihcclxuICAgIE9iamVjdC52YWx1ZXMobXVuaWNpcGFsaXR5UG9seWdvbnMpXHJcbiAgKTtcclxuICBjb25zdCB1bmlxdWVQb2ludHMgPSBuZXcgTWFwPHN0cmluZywgRmVhdHVyZT4oKTtcclxuICBjb25zdCBhbGxBcmVhcyA9IFsuLi5tdW5pY2lwYWxpdHkuYXJlYXMsIC4uLmV4dHJhQXJlYXNdO1xyXG4gIGNvbnN0IGV4dHJhQXJlYXNJbmRleGVzID0gbmV3IFNldChleHRyYUFyZWFzLm1hcCgoYXJlYSkgPT4gYXJlYS5pbmRleCkpO1xyXG5cclxuICBmb3IgKGNvbnN0IGFyZWEgb2YgYWxsQXJlYXMpIHtcclxuICAgIGNvbnN0IHBvaW50cyA9IFsuLi5hcmVhLmFkZHJlc3Nlc107XHJcblxyXG4gICAgZm9yIChjb25zdCBwb2ludCBvZiBwb2ludHMpIHtcclxuICAgICAgaWYgKCF1bmlxdWVQb2ludHMuaGFzKHBvaW50LmFkZHJlc3MpKSB7XHJcbiAgICAgICAgYWRkUG9pbnQodW5pcXVlUG9pbnRzLCBwb2ludCwgYXJlYS5pbmRleCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdW5pcXVlUG9pbnRzLmdldChwb2ludC5hZGRyZXNzKS5wcm9wZXJ0aWVzLmFyZWFJbmRleGVzLnB1c2goYXJlYS5pbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IHBvaW50cyA9IHtcclxuICAgIHR5cGU6IFwiRmVhdHVyZUNvbGxlY3Rpb25cIixcclxuICAgIGZlYXR1cmVzOiBBcnJheS5mcm9tKHVuaXF1ZVBvaW50cy52YWx1ZXMoKSksXHJcbiAgfSBhcyBGZWF0dXJlQ29sbGVjdGlvbjxQb2ludD47XHJcblxyXG4gIGNvbnN0IHBvbHlnb25zID0gZDNEZWxhdW5heVZvcm9ub2kocG9pbnRzKTtcclxuXHJcbiAgY29uc3QgdW5pdGVkUG9seWdvbnM6IEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj5bXSA9IFtdO1xyXG4gIGNvbnN0IGV4dHJhUG9seWdvbnMgPSBuZXcgTWFwPG51bWJlciwgRmVhdHVyZTxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPj4oKTtcclxuICBsZXQgY29sb3JJbmRleCA9IDA7XHJcblxyXG4gIGZvciAoY29uc3QgYXJlYSBvZiBhbGxBcmVhcykge1xyXG4gICAgY29uc3Qgc2Nob29sUG9seWdvbnM6IEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj5bXSA9XHJcbiAgICAgIHBvbHlnb25zLmZlYXR1cmVzLmZpbHRlcigocG9seWdvbikgPT5cclxuICAgICAgICBwb2x5Z29uLnByb3BlcnRpZXMuYXJlYUluZGV4ZXMuaW5jbHVkZXMoYXJlYS5pbmRleClcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoc2Nob29sUG9seWdvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNjaG9vbFBvbHlnb24gPSBpbnRlcnNlY3QoXHJcbiAgICAgIHNjaG9vbFBvbHlnb25zLmxlbmd0aCA+IDFcclxuICAgICAgICA/IHVuaW9uKGZlYXR1cmVDb2xsZWN0aW9uKHNjaG9vbFBvbHlnb25zKSlcclxuICAgICAgICA6IHNjaG9vbFBvbHlnb25zWzBdLFxyXG4gICAgICBtdW5pY2lwYWxpdGllc011bHRpcG9seWdvblxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmZWF0dXJlID0ge1xyXG4gICAgICAuLi5zY2hvb2xQb2x5Z29uLFxyXG4gICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgYXJlYUluZGV4OiBhcmVhLmluZGV4LFxyXG4gICAgICAgIHNjaG9vbEl6b3M6IGFyZWEuc2Nob29scy5tYXAoKHNjaG9vbCkgPT4gc2Nob29sLml6byksXHJcbiAgICAgICAgY29sb3JJbmRleCxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICBpZiAoZXh0cmFBcmVhc0luZGV4ZXMuaGFzKGFyZWEuaW5kZXgpKSB7XHJcbiAgICAgIGV4dHJhUG9seWdvbnMuc2V0KGFyZWEuaW5kZXgsIGZlYXR1cmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdW5pdGVkUG9seWdvbnMucHVzaChmZWF0dXJlKTtcclxuICAgIH1cclxuICAgIGNvbG9ySW5kZXgrKztcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBmZWF0dXJlQ29sbGVjdGlvbjogdHJ1bmNhdGUoe1xyXG4gICAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXHJcbiAgICAgIGZlYXR1cmVzOiBbLi4udW5pdGVkUG9seWdvbnNdLFxyXG4gICAgfSksXHJcbiAgICBleHRyYVBvbHlnb25zLFxyXG4gIH07XHJcbn07XHJcblxyXG5jb25zdCBhZGRQb2ludCA9IChcclxuICB1bmlxdWVQb2ludHM6IE1hcDxzdHJpbmcsIEZlYXR1cmU+LFxyXG4gIHBvaW50OiBFeHBvcnRBZGRyZXNzUG9pbnQsXHJcbiAgYXJlYUluZGV4OiBudW1iZXJcclxuKSA9PiB7XHJcbiAgaWYgKHBvaW50LmxhdCA9PT0gbnVsbCB8fCBwb2ludC5sbmcgPT09IG51bGwpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgdW5pcXVlUG9pbnRzLnNldChwb2ludC5hZGRyZXNzLCB7XHJcbiAgICB0eXBlOiBcIkZlYXR1cmVcIixcclxuICAgIGdlb21ldHJ5OiB7XHJcbiAgICAgIHR5cGU6IFwiUG9pbnRcIixcclxuICAgICAgY29vcmRpbmF0ZXM6IFtwb2ludC5sbmcsIHBvaW50LmxhdF0sXHJcbiAgICB9LFxyXG4gICAgcHJvcGVydGllczoge1xyXG4gICAgICBhcmVhSW5kZXhlczogW2FyZWFJbmRleF0sXHJcbiAgICB9LFxyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3QgZDNEZWxhdW5heVZvcm9ub2kgPSAoXHJcbiAgcG9pbnRzOiBGZWF0dXJlQ29sbGVjdGlvbjxQb2ludD5cclxuKTogRmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbiwgUG9seWdvblByb3BzPiA9PiB7XHJcbiAgY29uc3QgY29udmVydGVkID0gcG9pbnRzLmZlYXR1cmVzLm1hcCgocCkgPT4ge1xyXG4gICAgcmV0dXJuIHRvTWVyY2F0b3IoW3AuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIHAuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1dKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgYmJveCA9IFsuLi50b01lcmNhdG9yKFstMTgwLCAtODVdKSwgLi4udG9NZXJjYXRvcihbMTgwLCA4NV0pXSBhcyBbXHJcbiAgICBudW1iZXIsXHJcbiAgICBudW1iZXIsXHJcbiAgICBudW1iZXIsXHJcbiAgICBudW1iZXJcclxuICBdO1xyXG5cclxuICBjb25zdCBkZWxhdW5heSA9IG5ldyBEZWxhdW5heShGbG9hdDY0QXJyYXkub2YoLi4uY29udmVydGVkLmZsYXQoKSkpO1xyXG4gIGNvbnN0IHZvcm9ub2kgPSBkZWxhdW5heS52b3Jvbm9pKGJib3gpO1xyXG4gIHJldHVybiB7XHJcbiAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXHJcbiAgICBmZWF0dXJlczogQXJyYXkuZnJvbSh2b3Jvbm9pLmNlbGxQb2x5Z29ucygpKS5tYXAoKHBvbHlnb24pID0+ICh7XHJcbiAgICAgIHR5cGU6IFwiRmVhdHVyZVwiLFxyXG4gICAgICBnZW9tZXRyeToge1xyXG4gICAgICAgIHR5cGU6IFwiUG9seWdvblwiLFxyXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbcG9seWdvbi5tYXAoKHApID0+IHRvV2dzODQocCkpXSxcclxuICAgICAgfSxcclxuICAgICAgcHJvcGVydGllczoge1xyXG4gICAgICAgIGFyZWFJbmRleGVzOiBwb2ludHMuZmVhdHVyZXNbcG9seWdvbi5pbmRleF0ucHJvcGVydGllcy5hcmVhSW5kZXhlcyxcclxuICAgICAgICBpbmRleDogcG9seWdvbi5pbmRleCxcclxuICAgICAgICBuZWlnaGJvcnM6IG5ldyBTZXQodm9yb25vaS5uZWlnaGJvcnMocG9seWdvbi5pbmRleCkpLFxyXG4gICAgICB9LFxyXG4gICAgfSkpLFxyXG4gIH07XHJcbn07XHJcblxyXG5jb25zdCBjcmVhdGVNdW5pY2lwYWxpdGllc011bHRpcG9seWdvbiA9IChcclxuICBtdW5pY2lwYWxpdHlQb2x5Z29uczogRmVhdHVyZUNvbGxlY3Rpb25bXVxyXG4pOiBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+ID0+IHtcclxuICBjb25zdCBtdW5pY2lwYWxpdHlQb2x5Z29uRmVhdHVyZXMgPSBtdW5pY2lwYWxpdHlQb2x5Z29ucy5yZWR1Y2UoXHJcbiAgICAoYWNjLCBtdW5pY2lwYWxpdHlQb2x5Z29uKSA9PiB7XHJcbiAgICAgIGFjYy5wdXNoKFxyXG4gICAgICAgIC4uLm11bmljaXBhbGl0eVBvbHlnb24uZmVhdHVyZXMuZmlsdGVyKFxyXG4gICAgICAgICAgKGYpID0+XHJcbiAgICAgICAgICAgIGYuZ2VvbWV0cnkudHlwZSA9PT0gXCJQb2x5Z29uXCIgfHwgZi5nZW9tZXRyeS50eXBlID09PSBcIk11bHRpUG9seWdvblwiXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSxcclxuICAgIFtdXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIGV4dHJhY3RQb2x5Z29uRnJvbUNvbGxlY3Rpb24oXHJcbiAgICBmZWF0dXJlQ29sbGVjdGlvbihtdW5pY2lwYWxpdHlQb2x5Z29uRmVhdHVyZXMpXHJcbiAgKTtcclxufTtcclxuXHJcbmNvbnN0IGV4dHJhY3RNdW5pY2lwYWxpdHlDb2RlcyA9IChtdW5pY2lwYWxpdGllczogTXVuaWNpcGFsaXR5W10pID0+IHtcclxuICByZXR1cm4gbXVuaWNpcGFsaXRpZXMucmVkdWNlKFxyXG4gICAgKGFjYywgbXVuaWNpcGFsaXR5KSA9PiB7XHJcbiAgICAgIG11bmljaXBhbGl0eS5jaXR5Q29kZXMuZm9yRWFjaCgoY2l0eUNvZGUpID0+IGFjYy5jaXR5Q29kZXMuYWRkKGNpdHlDb2RlKSk7XHJcbiAgICAgIG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzLmZvckVhY2goKGRpc3RyaWN0Q29kZSkgPT5cclxuICAgICAgICBhY2MuZGlzdHJpY3RDb2Rlcy5hZGQoZGlzdHJpY3RDb2RlKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSxcclxuICAgIHsgY2l0eUNvZGVzOiBuZXcgU2V0PG51bWJlcj4oKSwgZGlzdHJpY3RDb2RlczogbmV3IFNldDxudW1iZXI+KCkgfVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBleHRyYWN0UG9seWdvbkZyb21Db2xsZWN0aW9uID0gKFxyXG4gIGNvbGxlY3Rpb246IEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+XHJcbik6IEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj4gPT5cclxuICBjb2xsZWN0aW9uLmZlYXR1cmVzLmxlbmd0aCA+IDEgPyB1bmlvbihjb2xsZWN0aW9uKSA6IGNvbGxlY3Rpb24uZmVhdHVyZXNbMF07XHJcbiJdfQ==
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWV0LW1hcmtkb3duL3BvbHlnb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHdkMsT0FBTyxFQU1MLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEUsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFRMUMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxFQUMzQyxjQUE4QixFQUNjLEVBQUU7SUFDOUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5RSxNQUFNLFlBQVksR0FBRyxNQUFNLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbEUsSUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FB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QUNsRCxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FDcEMsQ0FBQztRQUNGLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUNELEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFVLEVBQUUsYUFBYSxFQUFFLElBQUksR0FBRyxFQUFVLEVBQUUsQ0FDbkUsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sNEJBQTRCLEdBQUcsQ0FDbkMsVUFBcUQsRUFDcEIsRUFBRSxDQUNuQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlbGF1bmF5IH0gZnJvbSBcImQzLWRlbGF1bmF5XCI7XHJcbmltcG9ydCB7IEFyZWEsIEV4cG9ydEFkZHJlc3NQb2ludCwgTXVuaWNpcGFsaXR5IH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgRmVhdHVyZSxcclxuICBGZWF0dXJlQ29sbGVjdGlvbixcclxuICBNdWx0aVBvbHlnb24sXHJcbiAgUG9pbnQsXHJcbiAgUG9seWdvbixcclxuICBmZWF0dXJlQ29sbGVjdGlvbixcclxufSBmcm9tIFwiQHR1cmYvaGVscGVyc1wiO1xyXG5pbXBvcnQgaW50ZXJzZWN0IGZyb20gXCJAdHVyZi9pbnRlcnNlY3RcIjtcclxuaW1wb3J0IHsgYm9vbGVhbkludGVyc2VjdHMgfSBmcm9tIFwiQHR1cmYvYm9vbGVhbi1pbnRlcnNlY3RzXCI7XHJcbmltcG9ydCBHcmFwaCBmcm9tIFwiZ3JhcGhvbG9neVwiO1xyXG5pbXBvcnQgeyBjb2xvciB9IGZyb20gXCJncmFwaG9sb2d5LWNvbG9yXCI7XHJcbmltcG9ydCB7IHRvTWVyY2F0b3IsIHRvV2dzODQgfSBmcm9tIFwiQHR1cmYvcHJvamVjdGlvblwiO1xyXG5pbXBvcnQgdW5pb24gZnJvbSBcIkB0dXJmL3VuaW9uXCI7XHJcbmltcG9ydCB7IGdldENpdHlQb2x5Z29ucywgZ2V0RGlzdHJpY3RQb2x5Z29ucyB9IGZyb20gXCIuLi9kYi9jaXRpZXNcIjtcclxuaW1wb3J0IHRydW5jYXRlIGZyb20gXCJAdHVyZi90cnVuY2F0ZVwiO1xyXG5pbXBvcnQgeyBQb2x5Z29uc0J5Q29kZXMgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuaW1wb3J0IGRpZmZlcmVuY2UgZnJvbSBcIkB0dXJmL2RpZmZlcmVuY2VcIjtcclxuXHJcbnR5cGUgUG9seWdvblByb3BzID0ge1xyXG4gIGFyZWFJbmRleGVzOiBudW1iZXJbXTtcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIG5laWdoYm9yczogU2V0PG51bWJlcj47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgbXVuaWNpcGFsaXRpZXNUb1BvbHlnb25zID0gYXN5bmMgKFxyXG4gIG11bmljaXBhbGl0aWVzOiBNdW5pY2lwYWxpdHlbXVxyXG4pOiBQcm9taXNlPFJlY29yZDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPj4gPT4ge1xyXG4gIGNvbnN0IHsgY2l0eUNvZGVzLCBkaXN0cmljdENvZGVzIH0gPSBleHRyYWN0TXVuaWNpcGFsaXR5Q29kZXMobXVuaWNpcGFsaXRpZXMpO1xyXG4gIGNvbnN0IGNpdHlQb2x5Z29ucyA9IGF3YWl0IGdldENpdHlQb2x5Z29ucyhjaXR5Q29kZXMpO1xyXG4gIGNvbnN0IGRpc3RyaWN0UG9seWdvbnMgPSBhd2FpdCBnZXREaXN0cmljdFBvbHlnb25zKGRpc3RyaWN0Q29kZXMpO1xyXG5cclxuICBpZiAoXHJcbiAgICBPYmplY3Qua2V5cyhjaXR5UG9seWdvbnMpLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgT2JqZWN0LmtleXMoZGlzdHJpY3RQb2x5Z29ucykubGVuZ3RoID09PSAwXHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIk5vIHBvbHlnb25zIGZvdW5kIGZvciBnaXZlbiBtdW5pY2lwYWxpdGllcy5cIik7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvLyBtdW5pY2lwYWxpdHlDb2RlIC0+IGFyZWFzXHJcbiAgY29uc3QgZXh0cmFBcmVhcyA9IGdldEV4dHJhQXJlYXMobXVuaWNpcGFsaXRpZXMpO1xyXG5cclxuICBjb25zdCBjb2xsZWN0aW9uTWFwID0gbmV3IE1hcDxcclxuICAgIG51bWJlcixcclxuICAgIEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+XHJcbiAgPigpO1xyXG4gIC8vIGFyZWFJbmRleCAtPiBwb2x5Z29uXHJcbiAgY29uc3QgZXh0cmFQb2x5Z29uc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10+KCk7XHJcblxyXG4gIGZvciAoY29uc3QgbXVuaWNpcGFsaXR5IG9mIG11bmljaXBhbGl0aWVzKSB7XHJcbiAgICBpZiAobXVuaWNpcGFsaXR5LmFyZWFzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZmVhdHVyZUNvbGxlY3Rpb24sIGV4dHJhUG9seWdvbnMgfSA9IGNyZWF0ZVBvbHlnb25zKFxyXG4gICAgICBtdW5pY2lwYWxpdHksXHJcbiAgICAgIGV4dHJhQXJlYXMuZ2V0KG11bmljaXBhbGl0eS5jb2RlKSA/PyBbXSxcclxuICAgICAgZ2V0TXVuaWNpcGFsaXR5UG9seWdvbnMobXVuaWNpcGFsaXR5LCBjaXR5UG9seWdvbnMsIGRpc3RyaWN0UG9seWdvbnMpXHJcbiAgICApO1xyXG4gICAgY29sbGVjdGlvbk1hcC5zZXQobXVuaWNpcGFsaXR5LmNvZGUsIGZlYXR1cmVDb2xsZWN0aW9uKTtcclxuICAgIGlmIChleHRyYUFyZWFzLmhhcyhtdW5pY2lwYWxpdHkuY29kZSkpIHtcclxuICAgICAgZm9yIChjb25zdCBbYXJlYUluZGV4LCBleHRyYVBvbHlnb25dIG9mIGV4dHJhUG9seWdvbnMpIHtcclxuICAgICAgICBpZiAoIWV4dHJhUG9seWdvbnNNYXAuaGFzKGFyZWFJbmRleCkpIHtcclxuICAgICAgICAgIGV4dHJhUG9seWdvbnNNYXAuc2V0KGFyZWFJbmRleCwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBleHRyYVBvbHlnb25zTWFwLmdldChhcmVhSW5kZXgpLnB1c2goZXh0cmFQb2x5Z29uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkRXh0cmFQb2x5Z29ucyhjb2xsZWN0aW9uTWFwLCBleHRyYVBvbHlnb25zTWFwKTtcclxuXHJcbiAgZmluZENvbG9yaW5nKGNvbGxlY3Rpb25NYXApO1xyXG5cclxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPiA9IHt9O1xyXG4gIGZvciAoY29uc3QgW211bmljaXBhbGl0eUNvZGUsIGNvbGxlY3Rpb25dIG9mIGNvbGxlY3Rpb25NYXApIHtcclxuICAgIHJlc3VsdFttdW5pY2lwYWxpdHlDb2RlXSA9IGNvbGxlY3Rpb247XHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQ29sb3JpbmcgPSAoY29sbGVjdGlvbk1hcDogTWFwPG51bWJlciwgRmVhdHVyZUNvbGxlY3Rpb24+KSA9PiB7XHJcbiAgLy8gcHV0IGFsbCB0aGUgZmVhdHVyZXMgaW4gb25lIGFycmF5XHJcbiAgY29uc3QgYWxsRmVhdHVyZXMgPSBBcnJheS5mcm9tKGNvbGxlY3Rpb25NYXAudmFsdWVzKCkpLnJlZHVjZShcclxuICAgIChhY2MsIGNvbGxlY3Rpb24pID0+IHtcclxuICAgICAgYWNjLnB1c2goLi4uY29sbGVjdGlvbi5mZWF0dXJlcyk7XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LFxyXG4gICAgW11cclxuICApO1xyXG5cclxuICBpZiAoYWxsRmVhdHVyZXMubGVuZ3RoIDw9IDUpIHtcclxuICAgIGFsbEZlYXR1cmVzLmZvckVhY2goKGZlYXR1cmUsIGluZGV4KSA9PiB7XHJcbiAgICAgIGZlYXR1cmUucHJvcGVydGllcy5jb2xvckluZGV4ID0gaW5kZXg7XHJcbiAgICB9KTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGNvbnN0IGdyYXBoID0gbmV3IEdyYXBoKCk7XHJcbiAgYWxsRmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgZ3JhcGguYWRkTm9kZShmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4KTtcclxuICB9KTtcclxuXHJcbiAgZm9yIChjb25zdCBmZWF0dXJlMSBvZiBhbGxGZWF0dXJlcykge1xyXG4gICAgZm9yIChjb25zdCBmZWF0dXJlMiBvZiBhbGxGZWF0dXJlcykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZmVhdHVyZTEucHJvcGVydGllcy5hcmVhSW5kZXggIT09IGZlYXR1cmUyLnByb3BlcnRpZXMuYXJlYUluZGV4ICYmXHJcbiAgICAgICAgYm9vbGVhbkludGVyc2VjdHMoZmVhdHVyZTEsIGZlYXR1cmUyKVxyXG4gICAgICApIHtcclxuICAgICAgICBncmFwaC5hZGRFZGdlKFxyXG4gICAgICAgICAgZmVhdHVyZTEucHJvcGVydGllcy5hcmVhSW5kZXgsXHJcbiAgICAgICAgICBmZWF0dXJlMi5wcm9wZXJ0aWVzLmFyZWFJbmRleFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbG9yKGdyYXBoKTtcclxuXHJcbiAgYWxsRmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgZmVhdHVyZS5wcm9wZXJ0aWVzLmNvbG9ySW5kZXggPSBncmFwaC5nZXROb2RlQXR0cmlidXRlKFxyXG4gICAgICBmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4LFxyXG4gICAgICBcImNvbG9yXCJcclxuICAgICk7XHJcbiAgfSk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRFeHRyYUFyZWFzID0gKG11bmljaXBhbGl0aWVzOiBNdW5pY2lwYWxpdHlbXSk6IE1hcDxudW1iZXIsIEFyZWFbXT4gPT4ge1xyXG4gIC8vIG11bmljaXBhbGl0eUNvZGUgLT4gYXJlYXNcclxuICBjb25zdCBleHRyYUFyZWFzID0gbmV3IE1hcDxudW1iZXIsIEFyZWFbXT4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBtdW5pY2lwYWxpdHkgb2YgbXVuaWNpcGFsaXRpZXMpIHtcclxuICAgIGZvciAoY29uc3QgYXJlYSBvZiBtdW5pY2lwYWxpdHkuYXJlYXMpIHtcclxuICAgICAgLy8gbXVuaWNpcGFsaXR5Q29kZSAtPiBwb2ludHNcclxuICAgICAgY29uc3QgZXh0cmFQb2ludHMgPSBuZXcgTWFwPG51bWJlciwgRXhwb3J0QWRkcmVzc1BvaW50W10+KCk7XHJcbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgYXJlYS5hZGRyZXNzZXMpIHtcclxuICAgICAgICBpZiAocG9pbnQubXVuaWNpcGFsaXR5Q29kZSkge1xyXG4gICAgICAgICAgaWYgKCFleHRyYVBvaW50cy5oYXMocG9pbnQubXVuaWNpcGFsaXR5Q29kZSkpIHtcclxuICAgICAgICAgICAgZXh0cmFQb2ludHMuc2V0KHBvaW50Lm11bmljaXBhbGl0eUNvZGUsIFtdKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBleHRyYVBvaW50cy5nZXQocG9pbnQubXVuaWNpcGFsaXR5Q29kZSkucHVzaChwb2ludCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IFttdW5pY2lwYWxpdHlDb2RlLCBwb2ludHNdIG9mIGV4dHJhUG9pbnRzKSB7XHJcbiAgICAgICAgaWYgKCFleHRyYUFyZWFzLmhhcyhtdW5pY2lwYWxpdHlDb2RlKSkge1xyXG4gICAgICAgICAgZXh0cmFBcmVhcy5zZXQobXVuaWNpcGFsaXR5Q29kZSwgW10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXh0cmFBcmVhcy5nZXQobXVuaWNpcGFsaXR5Q29kZSkucHVzaCh7XHJcbiAgICAgICAgICAuLi5hcmVhLFxyXG4gICAgICAgICAgYWRkcmVzc2VzOiBwb2ludHMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGV4dHJhQXJlYXM7XHJcbn07XHJcblxyXG5jb25zdCBhZGRFeHRyYVBvbHlnb25zID0gKFxyXG4gIGNvbGxlY3Rpb25NYXA6IE1hcDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+PixcclxuICBleHRyYVBvbHlnb25zTWFwOiBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10+XHJcbikgPT4ge1xyXG4gIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uTWFwLnZhbHVlcygpKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxlY3Rpb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZmVhdHVyZSA9IGNvbGxlY3Rpb24uZmVhdHVyZXNbaV07XHJcbiAgICAgIGlmIChleHRyYVBvbHlnb25zTWFwLmhhcyhmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4KSkge1xyXG4gICAgICAgIGNvbnN0IHBvbHlnb25zID0gZXh0cmFQb2x5Z29uc01hcC5nZXQoZmVhdHVyZS5wcm9wZXJ0aWVzLmFyZWFJbmRleCk7XHJcbiAgICAgICAgY29uc3QgbmV3UG9seWdvbiA9IHVuaW9uKGZlYXR1cmVDb2xsZWN0aW9uKFsuLi5wb2x5Z29ucywgZmVhdHVyZV0pKTtcclxuICAgICAgICBjb25zdCBuZXdGZWF0dXJlID0ge1xyXG4gICAgICAgICAgLi4ubmV3UG9seWdvbixcclxuICAgICAgICAgIHByb3BlcnRpZXM6IHsgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2xsZWN0aW9uLmZlYXR1cmVzW2ldID0gbmV3RmVhdHVyZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldE11bmljaXBhbGl0eVBvbHlnb25zID0gKFxyXG4gIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5LFxyXG4gIGNpdHlQb2x5Z29uczogUG9seWdvbnNCeUNvZGVzLFxyXG4gIGRpc3RyaWN0UG9seWdvbnM6IFBvbHlnb25zQnlDb2Rlc1xyXG4pOiBQb2x5Z29uc0J5Q29kZXMgPT4ge1xyXG4gIGNvbnN0IHBvbHlnb25zOiBQb2x5Z29uc0J5Q29kZXMgPSB7fTtcclxuXHJcbiAgZm9yIChjb25zdCBjaXR5Q29kZSBvZiBtdW5pY2lwYWxpdHkuY2l0eUNvZGVzKSB7XHJcbiAgICBpZiAoY2l0eVBvbHlnb25zW2NpdHlDb2RlXSkge1xyXG4gICAgICBwb2x5Z29uc1tjaXR5Q29kZV0gPSBjaXR5UG9seWdvbnNbY2l0eUNvZGVdO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIG11bmljaXBhbGl0eS5tdW5pY2lwYWxpdHlUeXBlID09PSBcImNpdHlcIiAmJlxyXG4gICAgICAgIE9iamVjdC5rZXlzKGRpc3RyaWN0UG9seWdvbnMpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICBtdW5pY2lwYWxpdHkubXVuaWNpcGFsaXR5TmFtZSAhPT0gXCJCcm5vXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IGNpdHlQb2x5Z29uID0gZXh0cmFjdFBvbHlnb25Gcm9tQ29sbGVjdGlvbihjaXR5UG9seWdvbnNbY2l0eUNvZGVdKTtcclxuICAgICAgICAvLyBzdWJ0cmFjdCBhbGwgZGlzdHJpY3QgcG9seWdvbnMgZnJvbSBjaXR5IHBvbHlnb25cclxuICAgICAgICBmb3IgKGNvbnN0IFtkaXN0cmljdENvZGUsIGRpc3RyaWN0UG9seWdvbl0gb2YgT2JqZWN0LmVudHJpZXMoXHJcbiAgICAgICAgICBkaXN0cmljdFBvbHlnb25zXHJcbiAgICAgICAgKSkge1xyXG4gICAgICAgICAgaWYgKG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzLmluY2x1ZGVzKHBhcnNlSW50KGRpc3RyaWN0Q29kZSkpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2l0eVBvbHlnb24gPSBkaWZmZXJlbmNlKFxyXG4gICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbihbXHJcbiAgICAgICAgICAgICAgY2l0eVBvbHlnb24sXHJcbiAgICAgICAgICAgICAgZXh0cmFjdFBvbHlnb25Gcm9tQ29sbGVjdGlvbihkaXN0cmljdFBvbHlnb24pLFxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9seWdvbnNbY2l0eUNvZGVdID0gZmVhdHVyZUNvbGxlY3Rpb24oW2NpdHlQb2x5Z29uXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAoY29uc3QgZGlzdHJpY3RDb2RlIG9mIG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzKSB7XHJcbiAgICBpZiAoZGlzdHJpY3RQb2x5Z29uc1tkaXN0cmljdENvZGVdKSB7XHJcbiAgICAgIHBvbHlnb25zW2Rpc3RyaWN0Q29kZV0gPSBkaXN0cmljdFBvbHlnb25zW2Rpc3RyaWN0Q29kZV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcG9seWdvbnM7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlUG9seWdvbnMgPSAoXHJcbiAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHksXHJcbiAgZXh0cmFBcmVhczogQXJlYVtdLFxyXG4gIG11bmljaXBhbGl0eVBvbHlnb25zOiBSZWNvcmQ8XHJcbiAgICBudW1iZXIsXHJcbiAgICBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPlxyXG4gID5cclxuKToge1xyXG4gIGZlYXR1cmVDb2xsZWN0aW9uOiBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPjtcclxuICBleHRyYVBvbHlnb25zOiBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+PjtcclxufSA9PiB7XHJcbiAgY29uc3QgbXVuaWNpcGFsaXRpZXNNdWx0aXBvbHlnb24gPSBjcmVhdGVNdW5pY2lwYWxpdGllc011bHRpcG9seWdvbihcclxuICAgIE9iamVjdC52YWx1ZXMobXVuaWNpcGFsaXR5UG9seWdvbnMpXHJcbiAgKTtcclxuICBjb25zdCB1bmlxdWVQb2ludHMgPSBuZXcgTWFwPHN0cmluZywgRmVhdHVyZT4oKTtcclxuICBjb25zdCBhbGxBcmVhcyA9IFsuLi5tdW5pY2lwYWxpdHkuYXJlYXMsIC4uLmV4dHJhQXJlYXNdO1xyXG4gIGNvbnN0IGV4dHJhQXJlYXNJbmRleGVzID0gbmV3IFNldChleHRyYUFyZWFzLm1hcCgoYXJlYSkgPT4gYXJlYS5pbmRleCkpO1xyXG5cclxuICBmb3IgKGNvbnN0IGFyZWEgb2YgYWxsQXJlYXMpIHtcclxuICAgIGNvbnN0IHBvaW50cyA9IFsuLi5hcmVhLmFkZHJlc3Nlc107XHJcblxyXG4gICAgZm9yIChjb25zdCBwb2ludCBvZiBwb2ludHMpIHtcclxuICAgICAgaWYgKCF1bmlxdWVQb2ludHMuaGFzKHBvaW50LmFkZHJlc3MpKSB7XHJcbiAgICAgICAgYWRkUG9pbnQodW5pcXVlUG9pbnRzLCBwb2ludCwgYXJlYS5pbmRleCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdW5pcXVlUG9pbnRzLmdldChwb2ludC5hZGRyZXNzKS5wcm9wZXJ0aWVzLmFyZWFJbmRleGVzLnB1c2goYXJlYS5pbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IHBvaW50cyA9IHtcclxuICAgIHR5cGU6IFwiRmVhdHVyZUNvbGxlY3Rpb25cIixcclxuICAgIGZlYXR1cmVzOiBBcnJheS5mcm9tKHVuaXF1ZVBvaW50cy52YWx1ZXMoKSksXHJcbiAgfSBhcyBGZWF0dXJlQ29sbGVjdGlvbjxQb2ludD47XHJcblxyXG4gIGNvbnN0IHBvbHlnb25zID0gZDNEZWxhdW5heVZvcm9ub2kocG9pbnRzKTtcclxuXHJcbiAgY29uc3QgdW5pdGVkUG9seWdvbnM6IEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj5bXSA9IFtdO1xyXG4gIGNvbnN0IGV4dHJhUG9seWdvbnMgPSBuZXcgTWFwPG51bWJlciwgRmVhdHVyZTxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPj4oKTtcclxuICBsZXQgY29sb3JJbmRleCA9IDA7XHJcblxyXG4gIGZvciAoY29uc3QgYXJlYSBvZiBhbGxBcmVhcykge1xyXG4gICAgY29uc3Qgc2Nob29sUG9seWdvbnM6IEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj5bXSA9XHJcbiAgICAgIHBvbHlnb25zLmZlYXR1cmVzLmZpbHRlcigocG9seWdvbikgPT5cclxuICAgICAgICBwb2x5Z29uLnByb3BlcnRpZXMuYXJlYUluZGV4ZXMuaW5jbHVkZXMoYXJlYS5pbmRleClcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoc2Nob29sUG9seWdvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNjaG9vbFBvbHlnb24gPSBpbnRlcnNlY3QoXHJcbiAgICAgIHNjaG9vbFBvbHlnb25zLmxlbmd0aCA+IDFcclxuICAgICAgICA/IHVuaW9uKGZlYXR1cmVDb2xsZWN0aW9uKHNjaG9vbFBvbHlnb25zKSlcclxuICAgICAgICA6IHNjaG9vbFBvbHlnb25zWzBdLFxyXG4gICAgICBtdW5pY2lwYWxpdGllc011bHRpcG9seWdvblxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmZWF0dXJlID0ge1xyXG4gICAgICAuLi5zY2hvb2xQb2x5Z29uLFxyXG4gICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgYXJlYUluZGV4OiBhcmVhLmluZGV4LFxyXG4gICAgICAgIHNjaG9vbEl6b3M6IGFyZWEuc2Nob29scy5tYXAoKHNjaG9vbCkgPT4gc2Nob29sLml6byksXHJcbiAgICAgICAgY29sb3JJbmRleCxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICBpZiAoZXh0cmFBcmVhc0luZGV4ZXMuaGFzKGFyZWEuaW5kZXgpKSB7XHJcbiAgICAgIGV4dHJhUG9seWdvbnMuc2V0KGFyZWEuaW5kZXgsIGZlYXR1cmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdW5pdGVkUG9seWdvbnMucHVzaChmZWF0dXJlKTtcclxuICAgIH1cclxuICAgIGNvbG9ySW5kZXgrKztcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBmZWF0dXJlQ29sbGVjdGlvbjogdHJ1bmNhdGUoe1xyXG4gICAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXHJcbiAgICAgIGZlYXR1cmVzOiBbLi4udW5pdGVkUG9seWdvbnNdLFxyXG4gICAgfSksXHJcbiAgICBleHRyYVBvbHlnb25zLFxyXG4gIH07XHJcbn07XHJcblxyXG5jb25zdCBhZGRQb2ludCA9IChcclxuICB1bmlxdWVQb2ludHM6IE1hcDxzdHJpbmcsIEZlYXR1cmU+LFxyXG4gIHBvaW50OiBFeHBvcnRBZGRyZXNzUG9pbnQsXHJcbiAgYXJlYUluZGV4OiBudW1iZXJcclxuKSA9PiB7XHJcbiAgaWYgKHBvaW50LmxhdCA9PT0gbnVsbCB8fCBwb2ludC5sbmcgPT09IG51bGwpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgdW5pcXVlUG9pbnRzLnNldChwb2ludC5hZGRyZXNzLCB7XHJcbiAgICB0eXBlOiBcIkZlYXR1cmVcIixcclxuICAgIGdlb21ldHJ5OiB7XHJcbiAgICAgIHR5cGU6IFwiUG9pbnRcIixcclxuICAgICAgY29vcmRpbmF0ZXM6IFtwb2ludC5sbmcsIHBvaW50LmxhdF0sXHJcbiAgICB9LFxyXG4gICAgcHJvcGVydGllczoge1xyXG4gICAgICBhcmVhSW5kZXhlczogW2FyZWFJbmRleF0sXHJcbiAgICB9LFxyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3QgZDNEZWxhdW5heVZvcm9ub2kgPSAoXHJcbiAgcG9pbnRzOiBGZWF0dXJlQ29sbGVjdGlvbjxQb2ludD5cclxuKTogRmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbiwgUG9seWdvblByb3BzPiA9PiB7XHJcbiAgY29uc3QgY29udmVydGVkID0gcG9pbnRzLmZlYXR1cmVzLm1hcCgocCkgPT4ge1xyXG4gICAgcmV0dXJuIHRvTWVyY2F0b3IoW3AuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIHAuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1dKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgYmJveCA9IFsuLi50b01lcmNhdG9yKFstMTgwLCAtODVdKSwgLi4udG9NZXJjYXRvcihbMTgwLCA4NV0pXSBhcyBbXHJcbiAgICBudW1iZXIsXHJcbiAgICBudW1iZXIsXHJcbiAgICBudW1iZXIsXHJcbiAgICBudW1iZXJcclxuICBdO1xyXG5cclxuICBjb25zdCBkZWxhdW5heSA9IG5ldyBEZWxhdW5heShGbG9hdDY0QXJyYXkub2YoLi4uY29udmVydGVkLmZsYXQoKSkpO1xyXG4gIGNvbnN0IHZvcm9ub2kgPSBkZWxhdW5heS52b3Jvbm9pKGJib3gpO1xyXG4gIHJldHVybiB7XHJcbiAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXHJcbiAgICBmZWF0dXJlczogQXJyYXkuZnJvbSh2b3Jvbm9pLmNlbGxQb2x5Z29ucygpKS5tYXAoKHBvbHlnb24pID0+ICh7XHJcbiAgICAgIHR5cGU6IFwiRmVhdHVyZVwiLFxyXG4gICAgICBnZW9tZXRyeToge1xyXG4gICAgICAgIHR5cGU6IFwiUG9seWdvblwiLFxyXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbcG9seWdvbi5tYXAoKHApID0+IHRvV2dzODQocCkpXSxcclxuICAgICAgfSxcclxuICAgICAgcHJvcGVydGllczoge1xyXG4gICAgICAgIGFyZWFJbmRleGVzOiBwb2ludHMuZmVhdHVyZXNbcG9seWdvbi5pbmRleF0ucHJvcGVydGllcy5hcmVhSW5kZXhlcyxcclxuICAgICAgICBpbmRleDogcG9seWdvbi5pbmRleCxcclxuICAgICAgICBuZWlnaGJvcnM6IG5ldyBTZXQodm9yb25vaS5uZWlnaGJvcnMocG9seWdvbi5pbmRleCkpLFxyXG4gICAgICB9LFxyXG4gICAgfSkpLFxyXG4gIH07XHJcbn07XHJcblxyXG5jb25zdCBjcmVhdGVNdW5pY2lwYWxpdGllc011bHRpcG9seWdvbiA9IChcclxuICBtdW5pY2lwYWxpdHlQb2x5Z29uczogRmVhdHVyZUNvbGxlY3Rpb25bXVxyXG4pOiBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+ID0+IHtcclxuICBjb25zdCBtdW5pY2lwYWxpdHlQb2x5Z29uRmVhdHVyZXMgPSBtdW5pY2lwYWxpdHlQb2x5Z29ucy5yZWR1Y2UoXHJcbiAgICAoYWNjLCBtdW5pY2lwYWxpdHlQb2x5Z29uKSA9PiB7XHJcbiAgICAgIGFjYy5wdXNoKFxyXG4gICAgICAgIC4uLm11bmljaXBhbGl0eVBvbHlnb24uZmVhdHVyZXMuZmlsdGVyKFxyXG4gICAgICAgICAgKGYpID0+XHJcbiAgICAgICAgICAgIGYuZ2VvbWV0cnkudHlwZSA9PT0gXCJQb2x5Z29uXCIgfHwgZi5nZW9tZXRyeS50eXBlID09PSBcIk11bHRpUG9seWdvblwiXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSxcclxuICAgIFtdXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIGV4dHJhY3RQb2x5Z29uRnJvbUNvbGxlY3Rpb24oXHJcbiAgICBmZWF0dXJlQ29sbGVjdGlvbihtdW5pY2lwYWxpdHlQb2x5Z29uRmVhdHVyZXMpXHJcbiAgKTtcclxufTtcclxuXHJcbmNvbnN0IGV4dHJhY3RNdW5pY2lwYWxpdHlDb2RlcyA9IChtdW5pY2lwYWxpdGllczogTXVuaWNpcGFsaXR5W10pID0+IHtcclxuICByZXR1cm4gbXVuaWNpcGFsaXRpZXMucmVkdWNlKFxyXG4gICAgKGFjYywgbXVuaWNpcGFsaXR5KSA9PiB7XHJcbiAgICAgIG11bmljaXBhbGl0eS5jaXR5Q29kZXMuZm9yRWFjaCgoY2l0eUNvZGUpID0+IGFjYy5jaXR5Q29kZXMuYWRkKGNpdHlDb2RlKSk7XHJcbiAgICAgIG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzLmZvckVhY2goKGRpc3RyaWN0Q29kZSkgPT5cclxuICAgICAgICBhY2MuZGlzdHJpY3RDb2Rlcy5hZGQoZGlzdHJpY3RDb2RlKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSxcclxuICAgIHsgY2l0eUNvZGVzOiBuZXcgU2V0PG51bWJlcj4oKSwgZGlzdHJpY3RDb2RlczogbmV3IFNldDxudW1iZXI+KCkgfVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBleHRyYWN0UG9seWdvbkZyb21Db2xsZWN0aW9uID0gKFxyXG4gIGNvbGxlY3Rpb246IEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+XHJcbik6IEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj4gPT5cclxuICBjb2xsZWN0aW9uLmZlYXR1cmVzLmxlbmd0aCA+IDEgPyB1bmlvbihjb2xsZWN0aW9uKSA6IGNvbGxlY3Rpb24uZmVhdHVyZXNbMF07XHJcbiJdfQ==
|
|
@@ -37,4 +37,4 @@ export const parseLine = (text, showDebug = false) => {
|
|
|
37
37
|
}
|
|
38
38
|
return { smdLines, errors };
|
|
39
39
|
};
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21kLWxpbmUtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVldC1tYXJrZG93bi9zbWQtbGluZS1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxlQUFlLEVBQ2YsV0FBVyxHQUNaLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFlBQTJCLEVBQUUsRUFBRTtJQUM1RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDcEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxHQUFHLENBQ2xFLENBQUM7SUFDRixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDMUUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUN2QixJQUFZLEVBQ1osU0FBUyxHQUFHLEtBQUssRUFDRSxFQUFFO0lBQ3JCLGVBQWUsRUFBRSxDQUFDLENBQUMsd0RBQXdEO0lBQzNFLE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztJQUU5QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTFELElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQ1QsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQyxPQUFPLEVBQUUsa0NBQWtDO1lBQzNDLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTTtZQUN6QixTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7U0FDM0MsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUNGLElBQUksU0FBUyxFQUFFO1lBQ2IscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztLQUNqQztJQUVELFNBQVMsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUN0QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFcEMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxtREFBbUQ7WUFDNUQsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVztZQUNwQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU07U0FDaEQsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUNGLElBQUksU0FBUyxFQUFFO1lBQ2IscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztLQUNqQztJQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDOUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUxleGluZ1Jlc3VsdCwgTGV4ZXIgfSBmcm9tIFwiY2hldnJvdGFpblwiO1xyXG5pbXBvcnQgeyBTbWRQYXJzZXIgfSBmcm9tIFwiLi9zbWQtcGFyc2VyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIHRva2VuVm9jYWJ1bGFyeSxcclxuICBzbWRUb2tlbnMsXHJcbiAgcmVzZXRUb2tlblN0YXRlLFxyXG4gIHByZXBhcmVMaW5lLFxyXG59IGZyb20gXCIuL3Rva2VuLWRlZmluaXRpb25cIjtcclxuaW1wb3J0IHsgUHJvY2Vzc2VkU21kTGluZXMsIFNtZEVycm9yIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmNvbnN0IHByaW50TGV4aW5nUmVzdWx0SW5mbyA9IChsZXhpbmdSZXN1bHQ6IElMZXhpbmdSZXN1bHQpID0+IHtcclxuICBjb25zdCB0b2tlbnMgPSBsZXhpbmdSZXN1bHQudG9rZW5zLm1hcChcclxuICAgICh0b2tlbikgPT4gXCInXCIgKyB0b2tlbi5pbWFnZSArIFwiJyAoXCIgKyB0b2tlbi50b2tlblR5cGUubmFtZSArIFwiKVwiXHJcbiAgKTtcclxuICBjb25zb2xlLmVycm9yKHRva2Vucyk7XHJcbn07XHJcblxyXG5jb25zdCBzbWRMZXhlciA9IG5ldyBMZXhlcihzbWRUb2tlbnMsIHsgcG9zaXRpb25UcmFja2luZzogXCJvbmx5T2Zmc2V0XCIgfSk7XHJcbmV4cG9ydCBjb25zdCBzbWRQYXJzZXIgPSBuZXcgU21kUGFyc2VyKHRva2VuVm9jYWJ1bGFyeSk7XHJcblxyXG5leHBvcnQgY29uc3QgcGFyc2VMaW5lID0gKFxyXG4gIHRleHQ6IHN0cmluZyxcclxuICBzaG93RGVidWcgPSBmYWxzZVxyXG4pOiBQcm9jZXNzZWRTbWRMaW5lcyA9PiB7XHJcbiAgcmVzZXRUb2tlblN0YXRlKCk7IC8vIHRoaXMgaXMgbmVlZGVkIHRvIHJlc2V0IHRoZSB0b2tlbiBzdGF0ZSBiZXR3ZWVuIGxpbmVzXHJcbiAgY29uc3QgZXJyb3JzOiBTbWRFcnJvcltdID0gW107XHJcblxyXG4gIGNvbnN0IGxleGluZ1Jlc3VsdCA9IHNtZExleGVyLnRva2VuaXplKHByZXBhcmVMaW5lKHRleHQpKTtcclxuXHJcbiAgaWYgKGxleGluZ1Jlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgZXJyb3JzLnB1c2goXHJcbiAgICAgIC4uLmxleGluZ1Jlc3VsdC5lcnJvcnMubWFwKChlcnJvcikgPT4gKHtcclxuICAgICAgICBtZXNzYWdlOiBgTmVvxI1la8OhdmFuw70gem5hayBuYSB0b210byBtw61zdMSbLmAsXHJcbiAgICAgICAgc3RhcnRPZmZzZXQ6IGVycm9yLm9mZnNldCxcclxuICAgICAgICBlbmRPZmZzZXQ6IGVycm9yLm9mZnNldCArIGVycm9yLmxlbmd0aCArIDEsXHJcbiAgICAgIH0pKVxyXG4gICAgKTtcclxuICAgIGlmIChzaG93RGVidWcpIHtcclxuICAgICAgcHJpbnRMZXhpbmdSZXN1bHRJbmZvKGxleGluZ1Jlc3VsdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBzbWRMaW5lczogW10sIGVycm9ycyB9O1xyXG4gIH1cclxuXHJcbiAgc21kUGFyc2VyLmlucHV0ID0gbGV4aW5nUmVzdWx0LnRva2VucztcclxuICBjb25zdCBzbWRMaW5lcyA9IHNtZFBhcnNlci5zdHJlZXQoKTtcclxuXHJcbiAgaWYgKHNtZFBhcnNlci5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgZXJyb3JzLnB1c2goXHJcbiAgICAgIC4uLnNtZFBhcnNlci5lcnJvcnMubWFwKChlcnJvcikgPT4gKHtcclxuICAgICAgICBtZXNzYWdlOiBgTmVzcHLDoXZuw70gesOhcGlzIHByYXZpZGxhIC0gbmV2eW5lY2hhbGkganN0ZSBuxJtjbz9gLFxyXG4gICAgICAgIHN0YXJ0T2Zmc2V0OiBlcnJvci50b2tlbi5zdGFydE9mZnNldCxcclxuICAgICAgICBlbmRPZmZzZXQ6IGVycm9yLnRva2VuLmVuZE9mZnNldCA/PyB0ZXh0Lmxlbmd0aCxcclxuICAgICAgfSkpXHJcbiAgICApO1xyXG4gICAgaWYgKHNob3dEZWJ1Zykge1xyXG4gICAgICBwcmludExleGluZ1Jlc3VsdEluZm8obGV4aW5nUmVzdWx0KTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IHNtZExpbmVzOiBbXSwgZXJyb3JzIH07XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBzbWRMaW5lcywgZXJyb3JzIH07XHJcbn07XHJcbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { checkStreetExists, findAddressPoints, getAddressPointById, } from "../db/address-points";
|
|
2
2
|
import { disconnectKnex } from "../db/db";
|
|
3
|
-
import { findFounder, getFounderById } from "../db/founders";
|
|
3
|
+
import { findFounder, getFounderById, getFounderCityCode, } from "../db/founders";
|
|
4
4
|
import { findSchool } from "../db/schools";
|
|
5
5
|
import { MunicipalityType, founderToMunicipality, } from "../db/types";
|
|
6
6
|
import { getMunicipalityPartResult, getRestOfMunicipalityPart, getSwitchMunicipality, getWholeMunicipality, isMunicipalitySwitch, isRestOfMunicipalityLine, isRestOfMunicipalityPartLine, isRestWithNoStreetNameLine, isWholeMunicipality, } from "./municipality";
|
|
@@ -105,7 +105,7 @@ const processOneLine = async (params) => {
|
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
if (isMunicipalitySwitch(line)) {
|
|
108
|
-
processMunicipalitySwitchLine(params);
|
|
108
|
+
await processMunicipalitySwitchLine(params);
|
|
109
109
|
}
|
|
110
110
|
else if (isWholeMunicipality(line)) {
|
|
111
111
|
await processWholeMunicipalityLine(params);
|
|
@@ -270,7 +270,7 @@ const processAddressPointLine = async ({ line, state, lineNumber, onError, onWar
|
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
272
|
else if (smdLine.type === "municipalityPart") {
|
|
273
|
-
const { municipalityPartCode, errors } = await getMunicipalityPartResult(smdLine.municipalityPart, line, state.
|
|
273
|
+
const { municipalityPartCode, errors } = await getMunicipalityPartResult(smdLine.municipalityPart, line, await getFounderCityCode(state.currentFilterMunicipality.type, state.currentFilterMunicipality.code));
|
|
274
274
|
if (errors.length > 0) {
|
|
275
275
|
onWarning({ lineNumber, line, errors });
|
|
276
276
|
}
|
|
@@ -437,4 +437,4 @@ const roundToNDecimalPlaces = (toRound, decimalPlaces) => {
|
|
|
437
437
|
return (Math.round(toRound * Math.pow(10, decimalPlaces)) /
|
|
438
438
|
Math.pow(10, decimalPlaces));
|
|
439
439
|
};
|
|
440
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVldC1tYXJrZG93bi9zbWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsbUJBQW1CLEdBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUVMLGdCQUFnQixFQUVoQixxQkFBcUIsR0FDdEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLDRCQUE0QixFQUM1QiwwQkFBMEIsRUFDMUIsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBMkI5QyxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxLQUFLLEVBQUUsRUFDbEQsS0FBSyxFQUNMLFlBQVksR0FBRyxFQUFFLEVBQ2pCLE9BQU8sR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQ2xCLFNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQ3BCLGVBQWUsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQzFCLDRCQUE0QixHQUFHLEtBQUssRUFDcEMsVUFBVSxHQUNVLEVBQTJCLEVBQUU7SUFDakQsSUFBSTtRQUNGLE1BQU0sS0FBSyxHQUFhO1lBQ3RCLG1CQUFtQixFQUFFLElBQUk7WUFDekIseUJBQXlCLEVBQUUsSUFBSTtZQUMvQixXQUFXLEVBQUUsSUFB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RUFBRTtJQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQWUsRUFBRSxJQUFZLEVBQVksRUFBRSxDQUFDLENBQUM7SUFDMUUsT0FBTztJQUNQLFdBQVcsRUFBRSxDQUFDO0lBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztDQUMzQixDQUFDLENBQUM7QUFFSCxNQUFNLHFCQUFxQixHQUFHLENBQzVCLE9BQWUsRUFDZixhQUFxQixFQUNiLEVBQUU7SUFDVixPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQzVCLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGNoZWNrU3RyZWV0RXhpc3RzLFxyXG4gIGZpbmRBZGRyZXNzUG9pbnRzLFxyXG4gIGdldEFkZHJlc3NQb2ludEJ5SWQsXHJcbn0gZnJvbSBcIi4uL2RiL2FkZHJlc3MtcG9pbnRzXCI7XHJcbmltcG9ydCB7IGRpc2Nvbm5lY3RLbmV4IH0gZnJvbSBcIi4uL2RiL2RiXCI7XHJcbmltcG9ydCB7IGZpbmRGb3VuZGVyLCBnZXRGb3VuZGVyQnlJZCB9IGZyb20gXCIuLi9kYi9mb3VuZGVyc1wiO1xyXG5pbXBvcnQgeyBmaW5kU2Nob29sIH0gZnJvbSBcIi4uL2RiL3NjaG9vbHNcIjtcclxuaW1wb3J0IHtcclxuICBGb3VuZGVyLFxyXG4gIE11bmljaXBhbGl0eVR5cGUsXHJcbiAgU2Nob29sVHlwZSxcclxuICBmb3VuZGVyVG9NdW5pY2lwYWxpdHksXHJcbn0gZnJvbSBcIi4uL2RiL3R5cGVzXCI7XHJcbmltcG9ydCB7XHJcbiAgZ2V0TXVuaWNpcGFsaXR5UGFydFJlc3VsdCxcclxuICBnZXRSZXN0T2ZNdW5pY2lwYWxpdHlQYXJ0LFxyXG4gIGdldFN3aXRjaE11bmljaXBhbGl0eSxcclxuICBnZXRXaG9sZU11bmljaXBhbGl0eSxcclxuICBpc011bmljaXBhbGl0eVN3aXRjaCxcclxuICBpc1Jlc3RPZk11bmljaXBhbGl0eUxpbmUsXHJcbiAgaXNSZXN0T2ZNdW5pY2lwYWxpdHlQYXJ0TGluZSxcclxuICBpc1Jlc3RXaXRoTm9TdHJlZXROYW1lTGluZSxcclxuICBpc1dob2xlTXVuaWNpcGFsaXR5LFxyXG59IGZyb20gXCIuL211bmljaXBhbGl0eVwiO1xyXG5pbXBvcnQgeyBwYXJzZUxpbmUgfSBmcm9tIFwiLi9zbWQtbGluZS1wYXJzZXJcIjtcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzUG9pbnQsXHJcbiAgRXJyb3JDYWxsYmFja1BhcmFtcyxcclxuICBFeHBvcnRBZGRyZXNzUG9pbnQsXHJcbiAgSW50ZXJtZWRpYXRlQXJlYSxcclxuICBJbnRlcm1lZGlhdGVNdW5pY2lwYWxpdHksXHJcbiAgSW50ZXJtZWRpYXRlTXVuaWNpcGFsaXR5UmVzdWx0LFxyXG4gIEludGVybWVkaWF0ZVNjaG9vbCxcclxuICBNdW5pY2lwYWxpdHksXHJcbiAgUHJvY2Vzc0xpbmVDYWxsYmFja1BhcmFtcyxcclxuICBQcm9jZXNzTGluZVBhcmFtcyxcclxuICBTY2hvb2wsXHJcbiAgU21kRXJyb3IsXHJcbiAgU21kU3RhdGUsXHJcbn0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmludGVyZmFjZSBQYXJzZU9yZGluYW5jZVByb3BzIHtcclxuICBsaW5lczogc3RyaW5nW107XHJcbiAgaW5pdGlhbFN0YXRlPzogUGFydGlhbDxTbWRTdGF0ZT47XHJcbiAgb25FcnJvcj86IChwYXJhbXM6IEVycm9yQ2FsbGJhY2tQYXJhbXMpID0+IHZvaWQ7XHJcbiAgb25XYXJuaW5nPzogKHBhcmFtczogRXJyb3JDYWxsYmFja1BhcmFtcykgPT4gdm9pZDtcclxuICBvblByb2Nlc3NlZExpbmU/OiAocGFyYW1zOiBQcm9jZXNzTGluZUNhbGxiYWNrUGFyYW1zKSA9PiB2b2lkO1xyXG4gIGluY2x1ZGVVbm1hcHBlZEFkZHJlc3NQb2ludHM6IGJvb2xlYW47XHJcbiAgc2Nob29sVHlwZTogU2Nob29sVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHBhcnNlT3JkaW5hbmNlVG9BZGRyZXNzUG9pbnRzID0gYXN5bmMgKHtcclxuICBsaW5lcyxcclxuICBpbml0aWFsU3RhdGUgPSB7fSxcclxuICBvbkVycm9yID0gKCkgPT4ge30sXHJcbiAgb25XYXJuaW5nID0gKCkgPT4ge30sXHJcbiAgb25Qcm9jZXNzZWRMaW5lID0gKCkgPT4ge30sXHJcbiAgaW5jbHVkZVVubWFwcGVkQWRkcmVzc1BvaW50cyA9IGZhbHNlLFxyXG4gIHNjaG9vbFR5cGUsXHJcbn06IFBhcnNlT3JkaW5hbmNlUHJvcHMpOiBQcm9taXNlPE11bmljaXBhbGl0eVtdPiA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHN0YXRlOiBTbWRTdGF0ZSA9IHtcclxuICAgICAgY3VycmVudE11bmljaXBhbGl0eTogbnVsbCxcclxuICAgICAgY3VycmVudEZpbHRlck11bmljaXBhbGl0eTogbnVsbCxcclxuICAgICAgY3VycmVudEFyZWE6IG51bGwsXHJcbiAgICAgIHNjaG9vbHNDb21wbGV0ZWQ6IGZhbHNlLFxyXG4gICAgICBhcmVhQ291bnQ6IDAsXHJcbiAgICAgIHJlc3RzOiB7XHJcbiAgICAgICAgbm9TdHJlZXROYW1lQXJlYToge1xyXG4gICAgICAgICAgYXJlYUluZGV4OiBudWxsLFxyXG4gICAgICAgICAgbGluZU51bWJlcjogbnVsbCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIG11bmljaXBhbGl0eVBhcnRzOiBbXSxcclxuICAgICAgICB3aG9sZU11bmljaXBhbGl0eUFyZWE6IHtcclxuICAgICAgICAgIGFyZWFJbmRleDogbnVsbCxcclxuICAgICAgICAgIGxpbmVOdW1iZXI6IG51bGwsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbmNsdWRlVW5tYXBwZWRBZGRyZXNzUG9pbnRzLFxyXG4gICAgICB9LFxyXG4gICAgICBtdW5pY2lwYWxpdGllczogW10sXHJcbiAgICAgIC4uLmluaXRpYWxTdGF0ZSxcclxuICAgIH07XHJcblxyXG4gICAgbGV0IGxpbmVOdW1iZXIgPSAxO1xyXG5cclxuICAgIGZvciAoY29uc3QgcmF3TGluZSBvZiBsaW5lcykge1xyXG4gICAgICBjb25zdCBsaW5lID0gY2xlYW5MaW5lKHJhd0xpbmUpO1xyXG4gICAgICBhd2FpdCBwcm9jZXNzT25lTGluZSh7XHJcbiAgICAgICAgbGluZSxcclxuICAgICAgICByYXdMaW5lOiByYXdMaW5lLnRyaW0oKSxcclxuICAgICAgICBzdGF0ZSxcclxuICAgICAgICBsaW5lTnVtYmVyLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgb25XYXJuaW5nLFxyXG4gICAgICAgIHNjaG9vbFR5cGUsXHJcbiAgICAgIH0pO1xyXG4gICAgICBvblByb2Nlc3NlZExpbmUoeyBsaW5lTnVtYmVyLCBsaW5lIH0pO1xyXG4gICAgICBsaW5lTnVtYmVyKys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXRlLmN1cnJlbnRBcmVhICE9IG51bGwpIHtcclxuICAgICAgaWYgKHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG4gICAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmFyZWFzLnB1c2gobWFwQXJlYUZvckV4cG9ydChzdGF0ZS5jdXJyZW50QXJlYSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IGNvbXBsZXRlQ3VycmVudE11bmljaXBhbGl0eShzdGF0ZSk7XHJcblxyXG4gICAgcmV0dXJuIHN0YXRlLm11bmljaXBhbGl0aWVzO1xyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICB9IGZpbmFsbHkge1xyXG4gICAgYXdhaXQgZGlzY29ubmVjdEtuZXgoKTtcclxuICB9XHJcbiAgcmV0dXJuIFtdO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvbnZlcnRNdW5pY2lwYWxpdHkgPSAoXHJcbiAgbXVuaWNpcGFsaXR5OiBJbnRlcm1lZGlhdGVNdW5pY2lwYWxpdHlcclxuKTogTXVuaWNpcGFsaXR5ID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgbXVuaWNpcGFsaXR5TmFtZTogbXVuaWNpcGFsaXR5Lm11bmljaXBhbGl0eU5hbWUsXHJcbiAgICBhcmVhczogbXVuaWNpcGFsaXR5LmFyZWFzLm1hcCgoYXJlYSkgPT4gKHtcclxuICAgICAgaW5kZXg6IGFyZWEuaW5kZXgsXHJcbiAgICAgIHNjaG9vbHM6IGFyZWEuc2Nob29scyxcclxuICAgICAgYWRkcmVzc2VzOiBBcnJheS5mcm9tKGFyZWEuYWRkcmVzc01hcC52YWx1ZXMoKSkuZmlsdGVyKFxyXG4gICAgICAgIChwb2ludCkgPT4gcG9pbnQubGF0ICE9PSAwICYmIHBvaW50LmxuZyAhPT0gMFxyXG4gICAgICApLFxyXG4gICAgfSkpLFxyXG4gICAgY29kZTogbXVuaWNpcGFsaXR5LmZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZSxcclxuICAgIG11bmljaXBhbGl0eVR5cGU6XHJcbiAgICAgIG11bmljaXBhbGl0eS5mb3VuZGVyLm11bmljaXBhbGl0eVR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eVxyXG4gICAgICAgID8gXCJjaXR5XCJcclxuICAgICAgICA6IFwiZGlzdHJpY3RcIixcclxuICAgIGNpdHlDb2RlczogWy4uLm5ldyBTZXQobXVuaWNpcGFsaXR5LmNpdHlDb2RlcyldLFxyXG4gICAgZGlzdHJpY3RDb2RlczogWy4uLm5ldyBTZXQobXVuaWNpcGFsaXR5LmRpc3RyaWN0Q29kZXMpXSxcclxuICAgIHVubWFwcGVkUG9pbnRzOiBtdW5pY2lwYWxpdHkudW5tYXBwZWRQb2ludHMuZmlsdGVyKFxyXG4gICAgICAocG9pbnQpID0+IHBvaW50LmxhdCAhPT0gMCAmJiBwb2ludC5sbmcgIT09IDBcclxuICAgICksXHJcbiAgfTtcclxufTtcclxuXHJcbmNvbnN0IHByb2Nlc3NPbmVMaW5lID0gYXN5bmMgKHBhcmFtczogUHJvY2Vzc0xpbmVQYXJhbXMpID0+IHtcclxuICBjb25zdCB7IGxpbmUsIGxpbmVOdW1iZXIsIHN0YXRlIH0gPSBwYXJhbXM7XHJcblxyXG4gIGlmIChsaW5lWzBdID09PSBcIiNcIikge1xyXG4gICAgYXdhaXQgcHJvY2Vzc011bmljaXBhbGl0eUxpbmUocGFyYW1zKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChsaW5lID09PSBcIlwiKSB7XHJcbiAgICAvLyBlbmQgb2Ygc2Nob29sXHJcbiAgICBwcm9jZXNzRW1wdHlMaW5lKHBhcmFtcyk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAobGluZVswXSA9PT0gXCIhXCIpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChzdGF0ZS5jdXJyZW50QXJlYSA9PT0gbnVsbCkge1xyXG4gICAgYXdhaXQgcHJvY2Vzc0ZpcnN0U2Nob29sTGluZShwYXJhbXMpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKHN0YXRlLnNjaG9vbHNDb21wbGV0ZWQgPT09IGZhbHNlKSB7XHJcbiAgICBjb25zdCBmb3VuZE5leHRTY2hvb2wgPSBhd2FpdCBwcm9jZXNzTmV4dFNjaG9vbExpbmUocGFyYW1zKTtcclxuICAgIGlmIChmb3VuZE5leHRTY2hvb2wpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3RhdGUuc2Nob29sc0NvbXBsZXRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoaXNNdW5pY2lwYWxpdHlTd2l0Y2gobGluZSkpIHtcclxuICAgIHByb2Nlc3NNdW5pY2lwYWxpdHlTd2l0Y2hMaW5lKHBhcmFtcyk7XHJcbiAgfSBlbHNlIGlmIChpc1dob2xlTXVuaWNpcGFsaXR5KGxpbmUpKSB7XHJcbiAgICBhd2FpdCBwcm9jZXNzV2hvbGVNdW5pY2lwYWxpdHlMaW5lKHBhcmFtcyk7XHJcbiAgfSBlbHNlIGlmIChpc1Jlc3RXaXRoTm9TdHJlZXROYW1lTGluZShsaW5lKSkge1xyXG4gICAgc3RhdGUucmVzdHMubm9TdHJlZXROYW1lQXJlYSA9IHtcclxuICAgICAgYXJlYUluZGV4OiBzdGF0ZS5jdXJyZW50QXJlYS5pbmRleCxcclxuICAgICAgbGluZU51bWJlcixcclxuICAgIH07XHJcbiAgfSBlbHNlIGlmIChpc1Jlc3RPZk11bmljaXBhbGl0eUxpbmUobGluZSkpIHtcclxuICAgIHN0YXRlLnJlc3RzLndob2xlTXVuaWNpcGFsaXR5QXJlYSA9IHtcclxuICAgICAgYXJlYUluZGV4OiBzdGF0ZS5jdXJyZW50QXJlYS5pbmRleCxcclxuICAgICAgbGluZU51bWJlcixcclxuICAgIH07XHJcbiAgfSBlbHNlIGlmIChpc1Jlc3RPZk11bmljaXBhbGl0eVBhcnRMaW5lKGxpbmUpKSB7XHJcbiAgICBjb25zdCB7IG11bmljaXBhbGl0eVBhcnRDb2RlLCBlcnJvcnMgfSA9IGF3YWl0IGdldFJlc3RPZk11bmljaXBhbGl0eVBhcnQoXHJcbiAgICAgIGxpbmUsXHJcbiAgICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlclxyXG4gICAgKTtcclxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBwYXJhbXMub25FcnJvcih7IGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsIGxpbmUsIGVycm9ycyB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0YXRlLnJlc3RzLm11bmljaXBhbGl0eVBhcnRzLnB1c2goe1xyXG4gICAgICAgIG11bmljaXBhbGl0eVBhcnRDb2RlLFxyXG4gICAgICAgIGFyZWFJbmRleDogc3RhdGUuY3VycmVudEFyZWEuaW5kZXgsXHJcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGF3YWl0IHByb2Nlc3NBZGRyZXNzUG9pbnRMaW5lKHBhcmFtcyk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgcHJvY2Vzc011bmljaXBhbGl0eUxpbmUgPSBhc3luYyAoe1xyXG4gIGxpbmUsXHJcbiAgbGluZU51bWJlcixcclxuICBzdGF0ZSxcclxuICBzY2hvb2xUeXBlLFxyXG4gIG9uRXJyb3IsXHJcbn06IFByb2Nlc3NMaW5lUGFyYW1zKSA9PiB7XHJcbiAgaWYgKHN0YXRlLmN1cnJlbnRBcmVhICE9PSBudWxsKSB7XHJcbiAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmFyZWFzLnB1c2goc3RhdGUuY3VycmVudEFyZWEpO1xyXG4gIH1cclxuXHJcbiAgYXdhaXQgY29tcGxldGVDdXJyZW50TXVuaWNpcGFsaXR5KHN0YXRlKTtcclxuXHJcbiAgY29uc3QgeyBtdW5pY2lwYWxpdHksIGVycm9ycyB9ID0gYXdhaXQgZ2V0TmV3TXVuaWNpcGFsaXR5QnlOYW1lKFxyXG4gICAgbGluZSxcclxuICAgIHNjaG9vbFR5cGVcclxuICApO1xyXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgb25FcnJvcih7IGxpbmVOdW1iZXIsIGxpbmUsIGVycm9ycyB9KTtcclxuICB9XHJcbiAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eSA9IG11bmljaXBhbGl0eTtcclxuICBzdGF0ZS5jdXJyZW50RmlsdGVyTXVuaWNpcGFsaXR5ID0gZm91bmRlclRvTXVuaWNpcGFsaXR5KFxyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgKTtcclxuXHJcbiAgc3RhdGUuY3VycmVudEFyZWEgPSBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgY29tcGxldGVDdXJyZW50TXVuaWNpcGFsaXR5ID0gYXN5bmMgKHN0YXRlOiBTbWRTdGF0ZSkgPT4ge1xyXG4gIGlmIChzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5ICE9PSBudWxsKSB7XHJcbiAgICBhd2FpdCBhZGRSZXN0cyhzdGF0ZSk7XHJcbiAgICBzdGF0ZS5tdW5pY2lwYWxpdGllcy5wdXNoKGNvbnZlcnRNdW5pY2lwYWxpdHkoc3RhdGUuY3VycmVudE11bmljaXBhbGl0eSkpO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IHByb2Nlc3NFbXB0eUxpbmUgPSAoeyBzdGF0ZSB9OiBQcm9jZXNzTGluZVBhcmFtcykgPT4ge1xyXG4gIGlmIChzdGF0ZS5jdXJyZW50QXJlYSAhPT0gbnVsbCkge1xyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5hcmVhcy5wdXNoKHN0YXRlLmN1cnJlbnRBcmVhKTtcclxuICAgIHN0YXRlLmN1cnJlbnRBcmVhID0gbnVsbDtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzRmlyc3RTY2hvb2xMaW5lID0gYXN5bmMgKHtcclxuICByYXdMaW5lLFxyXG4gIGxpbmVOdW1iZXIsXHJcbiAgc3RhdGUsXHJcbiAgb25FcnJvcixcclxufTogUHJvY2Vzc0xpbmVQYXJhbXMpID0+IHtcclxuICBpZiAoc3RhdGUuY3VycmVudE11bmljaXBhbGl0eSA9PT0gbnVsbCkge1xyXG4gICAgb25FcnJvcih7XHJcbiAgICAgIGxpbmVOdW1iZXIsXHJcbiAgICAgIGxpbmU6IHJhd0xpbmUsXHJcbiAgICAgIGVycm9yczogW1xyXG4gICAgICAgIHdob2xlTGluZUVycm9yKFxyXG4gICAgICAgICAgXCJEZWZpbmljaSDFoWtvbHkgbXVzw60gcMWZZWRjaMOhemV0IGRlZmluaWNlIHrFmWl6b3ZhdGVsZSAodXZvemVuw6EgJyMnLCBuYXDFmS4gJyMgU3RyYWtvbmljZScpLlwiLFxyXG4gICAgICAgICAgcmF3TGluZVxyXG4gICAgICAgICksXHJcbiAgICAgIF0sXHJcbiAgICB9KTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgc3RhdGUuY3VycmVudEFyZWEgPSB7XHJcbiAgICBpbmRleDogc3RhdGUuYXJlYUNvdW50KyssXHJcbiAgICBzY2hvb2xzOiBbXHJcbiAgICAgIGF3YWl0IGdldE5ld1NjaG9vbCh7XHJcbiAgICAgICAgbmFtZTogcmF3TGluZSxcclxuICAgICAgICBmb3VuZGVyOiBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXIsXHJcbiAgICAgICAgbGluZU51bWJlcixcclxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICB9KSxcclxuICAgIF0sXHJcbiAgICBhZGRyZXNzZXM6IFtdLFxyXG4gICAgYWRkcmVzc01hcDogbmV3IE1hcDxudW1iZXIsIEV4cG9ydEFkZHJlc3NQb2ludD4oKSxcclxuICAgIGFsbFNjaG9vbHNBZGRlZDogZmFsc2UsXHJcbiAgfTtcclxuICBzdGF0ZS5zY2hvb2xzQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgc3RhdGUuY3VycmVudEZpbHRlck11bmljaXBhbGl0eSA9IGZvdW5kZXJUb011bmljaXBhbGl0eShcclxuICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlclxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzTmV4dFNjaG9vbExpbmUgPSBhc3luYyAoe1xyXG4gIGxpbmUsXHJcbiAgbGluZU51bWJlcixcclxuICBzdGF0ZSxcclxufTogUHJvY2Vzc0xpbmVQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcclxuICBjb25zdCBzY2hvb2wgPSBhd2FpdCBnZXROZXdTY2hvb2woe1xyXG4gICAgbmFtZTogbGluZSxcclxuICAgIGZvdW5kZXI6IHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlcixcclxuICAgIGxpbmVOdW1iZXIsXHJcbiAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICBvbkVycm9yOiAoKSA9PiB7fSxcclxuICB9KTtcclxuXHJcbiAgaWYgKHNjaG9vbCA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGUuY3VycmVudEFyZWEuc2Nob29scy5wdXNoKHNjaG9vbCk7XHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzTXVuaWNpcGFsaXR5U3dpdGNoTGluZSA9IGFzeW5jICh7XHJcbiAgbGluZSxcclxuICBzdGF0ZSxcclxuICBsaW5lTnVtYmVyLFxyXG4gIG9uRXJyb3IsXHJcbn06IFByb2Nlc3NMaW5lUGFyYW1zKSA9PiB7XHJcbiAgY29uc3QgeyBtdW5pY2lwYWxpdHksIGVycm9ycyB9ID0gYXdhaXQgZ2V0U3dpdGNoTXVuaWNpcGFsaXR5KFxyXG4gICAgbGluZSxcclxuICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlclxyXG4gICk7XHJcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICBvbkVycm9yKHsgbGluZU51bWJlciwgbGluZSwgZXJyb3JzIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBzdGF0ZS5jdXJyZW50RmlsdGVyTXVuaWNpcGFsaXR5ID0gbXVuaWNpcGFsaXR5O1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IHByb2Nlc3NXaG9sZU11bmljaXBhbGl0eUxpbmUgPSBhc3luYyAoe1xyXG4gIGxpbmUsXHJcbiAgc3RhdGUsXHJcbiAgbGluZU51bWJlcixcclxuICBvbkVycm9yLFxyXG59OiBQcm9jZXNzTGluZVBhcmFtcykgPT4ge1xyXG4gIGNvbnN0IHsgbXVuaWNpcGFsaXR5LCBlcnJvcnMgfSA9IGF3YWl0IGdldFdob2xlTXVuaWNpcGFsaXR5KFxyXG4gICAgbGluZSxcclxuICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlclxyXG4gICk7XHJcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICBvbkVycm9yKHsgbGluZU51bWJlciwgbGluZSwgZXJyb3JzIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAobXVuaWNpcGFsaXR5LnR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eSkge1xyXG4gICAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmNpdHlDb2Rlcy5wdXNoKG11bmljaXBhbGl0eS5jb2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZGlzdHJpY3RDb2Rlcy5wdXNoKG11bmljaXBhbGl0eS5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhZGRyZXNzUG9pbnRzID0gYXdhaXQgZmluZEFkZHJlc3NQb2ludHMoe1xyXG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5XCIsXHJcbiAgICAgIG11bmljaXBhbGl0eSxcclxuICAgIH0pO1xyXG4gICAgYWRkQWRkcmVzc1BvaW50c1RvQXJlYShzdGF0ZS5jdXJyZW50QXJlYSwgYWRkcmVzc1BvaW50cywgbGluZU51bWJlcik7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgYWRkQWRkcmVzc1BvaW50c1RvQXJlYSA9IChcclxuICBhcmVhOiBJbnRlcm1lZGlhdGVBcmVhLFxyXG4gIGFkZHJlc3NQb2ludHM6IEFkZHJlc3NQb2ludFtdLFxyXG4gIGxpbmVOdW1iZXI6IG51bWJlcixcclxuICBtdW5pY2lwYWxpdHlDb2RlPzogbnVtYmVyXHJcbikgPT4ge1xyXG4gIGZvciAoY29uc3QgcG9pbnQgb2YgYWRkcmVzc1BvaW50cykge1xyXG4gICAgaWYgKGFyZWEuYWRkcmVzc01hcC5oYXMocG9pbnQuaWQpKSB7XHJcbiAgICAgIGFyZWEuYWRkcmVzc01hcC5nZXQocG9pbnQuaWQpLmxpbmVOdW1iZXJzLnB1c2gobGluZU51bWJlciAtIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXJlYS5hZGRyZXNzTWFwLnNldChcclxuICAgICAgICBwb2ludC5pZCxcclxuICAgICAgICBtYXBBZGRyZXNzUG9pbnRGb3JFeHBvcnQocG9pbnQsIGxpbmVOdW1iZXIsIG11bmljaXBhbGl0eUNvZGUpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgcHJvY2Vzc0FkZHJlc3NQb2ludExpbmUgPSBhc3luYyAoe1xyXG4gIGxpbmUsXHJcbiAgc3RhdGUsXHJcbiAgbGluZU51bWJlcixcclxuICBvbkVycm9yLFxyXG4gIG9uV2FybmluZyxcclxufTogUHJvY2Vzc0xpbmVQYXJhbXMpID0+IHtcclxuICBjb25zdCB7IHNtZExpbmVzLCBlcnJvcnMgfSA9IHBhcnNlTGluZShsaW5lKTtcclxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgIG9uRXJyb3IoeyBsaW5lTnVtYmVyLCBsaW5lLCBlcnJvcnMgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGZvciAoY29uc3Qgc21kTGluZSBvZiBzbWRMaW5lcykge1xyXG4gICAgICBpZiAoc21kTGluZS50eXBlID09PSBcInN0cmVldFwiKSB7XHJcbiAgICAgICAgY29uc3QgeyBleGlzdHMsIGVycm9ycyB9ID0gYXdhaXQgY2hlY2tTdHJlZXRFeGlzdHMoXHJcbiAgICAgICAgICBzbWRMaW5lLnN0cmVldCxcclxuICAgICAgICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBvbldhcm5pbmcoeyBsaW5lTnVtYmVyLCBsaW5lLCBlcnJvcnMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleGlzdHMpIHtcclxuICAgICAgICAgIGNvbnN0IGFkZHJlc3NQb2ludHMgPSBhd2FpdCBmaW5kQWRkcmVzc1BvaW50cyh7XHJcbiAgICAgICAgICAgIHR5cGU6IFwic21kTGluZVwiLFxyXG4gICAgICAgICAgICBzbWRMaW5lLFxyXG4gICAgICAgICAgICBtdW5pY2lwYWxpdHk6IHN0YXRlLmN1cnJlbnRGaWx0ZXJNdW5pY2lwYWxpdHksXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBhZGRBZGRyZXNzUG9pbnRzVG9BcmVhKFxyXG4gICAgICAgICAgICBzdGF0ZS5jdXJyZW50QXJlYSxcclxuICAgICAgICAgICAgYWRkcmVzc1BvaW50cyxcclxuICAgICAgICAgICAgbGluZU51bWJlcixcclxuICAgICAgICAgICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5jb2RlICE9PVxyXG4gICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRGaWx0ZXJNdW5pY2lwYWxpdHkuY29kZVxyXG4gICAgICAgICAgICAgID8gc3RhdGUuY3VycmVudEZpbHRlck11bmljaXBhbGl0eS5jb2RlXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHNtZExpbmUudHlwZSA9PT0gXCJtdW5pY2lwYWxpdHlQYXJ0XCIpIHtcclxuICAgICAgICBjb25zdCB7IG11bmljaXBhbGl0eVBhcnRDb2RlLCBlcnJvcnMgfSA9XHJcbiAgICAgICAgICBhd2FpdCBnZXRNdW5pY2lwYWxpdHlQYXJ0UmVzdWx0KFxyXG4gICAgICAgICAgICBzbWRMaW5lLm11bmljaXBhbGl0eVBhcnQsXHJcbiAgICAgICAgICAgIGxpbmUsXHJcbiAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIG9uV2FybmluZyh7IGxpbmVOdW1iZXIsIGxpbmUsIGVycm9ycyB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgYWRkcmVzc1BvaW50cyA9IGF3YWl0IGZpbmRBZGRyZXNzUG9pbnRzKHtcclxuICAgICAgICAgICAgdHlwZTogXCJzbWRMaW5lXCIsXHJcbiAgICAgICAgICAgIHNtZExpbmUsXHJcbiAgICAgICAgICAgIG11bmljaXBhbGl0eTogc3RhdGUuY3VycmVudEZpbHRlck11bmljaXBhbGl0eSxcclxuICAgICAgICAgICAgbXVuaWNpcGFsaXR5UGFydENvZGUsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBhZGRBZGRyZXNzUG9pbnRzVG9BcmVhKHN0YXRlLmN1cnJlbnRBcmVhLCBhZGRyZXNzUG9pbnRzLCBsaW5lTnVtYmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0VG9BcmVhID0gKFxyXG4gIHJlc3RQb2ludHM6IEFkZHJlc3NQb2ludFtdLFxyXG4gIGFyZWFJbmRleDogbnVtYmVyLFxyXG4gIGxpbmVOdW1iZXI6IG51bWJlcixcclxuICBzdGF0ZTogU21kU3RhdGVcclxuKSA9PiB7XHJcbiAgY29uc3QgYWRkcmVzc1BvaW50c0lkcyA9IGdldEFsbEFkZHJlc3NQb2ludHNJZHMoc3RhdGUuY3VycmVudE11bmljaXBhbGl0eSk7XHJcblxyXG4gIC8vIGZpbHRlciBvdXQgYWRkcmVzcyBwb2ludHMgYWxyZWFkeSBwcmVzZW50XHJcbiAgY29uc3QgcmVtYWluaW5nUG9pbnRzID0gcmVzdFBvaW50cy5maWx0ZXIoXHJcbiAgICAocG9pbnQpID0+ICFhZGRyZXNzUG9pbnRzSWRzLmhhcyhwb2ludC5pZClcclxuICApO1xyXG5cclxuICBhZGRBZGRyZXNzUG9pbnRzVG9BcmVhKFxyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5hcmVhcy5maW5kKChhcmVhKSA9PiBhcmVhLmluZGV4ID09PSBhcmVhSW5kZXgpLFxyXG4gICAgcmVtYWluaW5nUG9pbnRzLFxyXG4gICAgbGluZU51bWJlclxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0cyA9IGFzeW5jIChzdGF0ZTogU21kU3RhdGUpID0+IHtcclxuICBpZiAoc3RhdGUucmVzdHMubm9TdHJlZXROYW1lQXJlYS5hcmVhSW5kZXggIT09IG51bGwpIHtcclxuICAgIGF3YWl0IGFkZFJlc3RXaXRoTm9TdHJlZXROYW1lVG9TY2hvb2woXHJcbiAgICAgIHN0YXRlLnJlc3RzLm5vU3RyZWV0TmFtZUFyZWEubGluZU51bWJlcixcclxuICAgICAgc3RhdGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpZiAoc3RhdGUucmVzdHMud2hvbGVNdW5pY2lwYWxpdHlBcmVhLmFyZWFJbmRleCAhPT0gbnVsbCkge1xyXG4gICAgYXdhaXQgYWRkUmVzdE9mTXVuaWNpcGFsaXR5KFxyXG4gICAgICBzdGF0ZS5yZXN0cy53aG9sZU11bmljaXBhbGl0eUFyZWEubGluZU51bWJlcixcclxuICAgICAgc3RhdGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmb3IgKGNvbnN0IHJlc3Qgb2Ygc3RhdGUucmVzdHMubXVuaWNpcGFsaXR5UGFydHMpIHtcclxuICAgIGF3YWl0IGFkZFJlc3RPZk11bmljaXBhbGl0eVBhcnQoXHJcbiAgICAgIHN0YXRlLFxyXG4gICAgICByZXN0Lm11bmljaXBhbGl0eVBhcnRDb2RlLFxyXG4gICAgICByZXN0LmFyZWFJbmRleCxcclxuICAgICAgcmVzdC5saW5lTnVtYmVyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaWYgKHN0YXRlLnJlc3RzLmluY2x1ZGVVbm1hcHBlZEFkZHJlc3NQb2ludHMpIHtcclxuICAgIGF3YWl0IGFkZFJlc3RPZk11bmljaXBhbGl0eVRvVW5tYXBwZWRQb2ludHMoc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGUucmVzdHMubm9TdHJlZXROYW1lQXJlYS5hcmVhSW5kZXggPSBudWxsO1xyXG4gIHN0YXRlLnJlc3RzLndob2xlTXVuaWNpcGFsaXR5QXJlYS5hcmVhSW5kZXggPSBudWxsO1xyXG4gIHN0YXRlLnJlc3RzLm11bmljaXBhbGl0eVBhcnRzID0gW107XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0V2l0aE5vU3RyZWV0TmFtZVRvU2Nob29sID0gYXN5bmMgKFxyXG4gIGxpbmVOdW1iZXI6IG51bWJlcixcclxuICBzdGF0ZTogU21kU3RhdGVcclxuKSA9PiB7XHJcbiAgLy8gZ2V0IGFsbCBhZGRyZXNzIHBvaW50cyB3aXRob3V0IHN0cmVldCBuYW1lIGZvciBjdXJyZW50IG11bmljaXBhbGl0eVxyXG4gIGNvbnN0IHBvaW50c05vU3RyZWV0TmFtZSA9IGF3YWl0IGZpbmRBZGRyZXNzUG9pbnRzKHtcclxuICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlOb1N0cmVldE5hbWVcIixcclxuICAgIG11bmljaXBhbGl0eToge1xyXG4gICAgICBjb2RlOiBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZSxcclxuICAgICAgdHlwZTogc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyLm11bmljaXBhbGl0eVR5cGUsXHJcbiAgICB9LFxyXG4gIH0pO1xyXG4gIGFkZFJlc3RUb0FyZWEoXHJcbiAgICBwb2ludHNOb1N0cmVldE5hbWUsXHJcbiAgICBzdGF0ZS5yZXN0cy5ub1N0cmVldE5hbWVBcmVhLmFyZWFJbmRleCxcclxuICAgIGxpbmVOdW1iZXIsXHJcbiAgICBzdGF0ZVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0T2ZNdW5pY2lwYWxpdHkgPSBhc3luYyAobGluZU51bWJlcjogbnVtYmVyLCBzdGF0ZTogU21kU3RhdGUpID0+IHtcclxuICBhZGRSZXN0VG9BcmVhKFxyXG4gICAgYXdhaXQgZ2V0UmVzdE9mTXVuaWNpcGFsaXR5KHN0YXRlKSxcclxuICAgIHN0YXRlLnJlc3RzLndob2xlTXVuaWNpcGFsaXR5QXJlYS5hcmVhSW5kZXgsXHJcbiAgICBsaW5lTnVtYmVyLFxyXG4gICAgc3RhdGVcclxuICApO1xyXG59O1xyXG5cclxuY29uc3QgYWRkUmVzdE9mTXVuaWNpcGFsaXR5VG9Vbm1hcHBlZFBvaW50cyA9IGFzeW5jIChzdGF0ZTogU21kU3RhdGUpID0+IHtcclxuICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LnVubWFwcGVkUG9pbnRzID0gKFxyXG4gICAgYXdhaXQgZ2V0UmVzdE9mTXVuaWNpcGFsaXR5KHN0YXRlKVxyXG4gICkubWFwKChwb2ludCkgPT4gbWFwQWRkcmVzc1BvaW50Rm9yRXhwb3J0KHBvaW50KSk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRSZXN0T2ZNdW5pY2lwYWxpdHkgPSBhc3luYyAoXHJcbiAgc3RhdGU6IFNtZFN0YXRlXHJcbik6IFByb21pc2U8QWRkcmVzc1BvaW50W10+ID0+IHtcclxuICAvLyBnZXQgYWxsIGFkZHJlc3MgcG9pbnRzIGZvciBjdXJyZW50IG11bmljaXBhbGl0eVxyXG4gIGNvbnN0IGFsbFBvaW50cyA9IGF3YWl0IGZpbmRBZGRyZXNzUG9pbnRzKHtcclxuICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlcIixcclxuICAgIG11bmljaXBhbGl0eToge1xyXG4gICAgICBjb2RlOiBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZSxcclxuICAgICAgdHlwZTogc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyLm11bmljaXBhbGl0eVR5cGUsXHJcbiAgICB9LFxyXG4gIH0pO1xyXG5cclxuICAvLyBmaWx0ZXIgb3V0IGFkZHJlc3MgcG9pbnRzIGFscmVhZHkgcHJlc2VudFxyXG4gIGNvbnN0IGFkZHJlc3NQb2ludHNJZHMgPSBnZXRBbGxBZGRyZXNzUG9pbnRzSWRzKHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkpO1xyXG4gIHJldHVybiBhbGxQb2ludHMuZmlsdGVyKChwb2ludCkgPT4gIWFkZHJlc3NQb2ludHNJZHMuaGFzKHBvaW50LmlkKSk7XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0T2ZNdW5pY2lwYWxpdHlQYXJ0ID0gYXN5bmMgKFxyXG4gIHN0YXRlOiBTbWRTdGF0ZSxcclxuICBtdW5pY2lwYWxpdHlQYXJ0Q29kZTogbnVtYmVyLFxyXG4gIGFyZWFJbmRleDogbnVtYmVyLFxyXG4gIGxpbmVOdW1iZXI6IG51bWJlclxyXG4pID0+IHtcclxuICBjb25zdCBhbGxQb2ludHMgPSBhd2FpdCBmaW5kQWRkcmVzc1BvaW50cyh7XHJcbiAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiLFxyXG4gICAgbXVuaWNpcGFsaXR5UGFydENvZGUsXHJcbiAgfSk7XHJcbiAgYWRkUmVzdFRvQXJlYShhbGxQb2ludHMsIGFyZWFJbmRleCwgbGluZU51bWJlciwgc3RhdGUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldE5ld011bmljaXBhbGl0eUJ5TmFtZSA9IGFzeW5jIChcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgc2Nob29sVHlwZTogU2Nob29sVHlwZVxyXG4pOiBQcm9taXNlPEludGVybWVkaWF0ZU11bmljaXBhbGl0eVJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IHsgZm91bmRlciwgZXJyb3JzIH0gPSBhd2FpdCBmaW5kRm91bmRlcihuYW1lLCBzY2hvb2xUeXBlKTtcclxuICByZXR1cm4gZ2V0TmV3TXVuaWNpcGFsaXR5KGZvdW5kZXIsIGVycm9ycyk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0TmV3TXVuaWNpcGFsaXR5QnlGb3VuZGVySWQgPSBhc3luYyAoXHJcbiAgZm91bmRlcklkOiBudW1iZXIsXHJcbiAgc2Nob29sVHlwZTogU2Nob29sVHlwZVxyXG4pOiBQcm9taXNlPEludGVybWVkaWF0ZU11bmljaXBhbGl0eVJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IHsgZm91bmRlciwgZXJyb3JzIH0gPSBhd2FpdCBnZXRGb3VuZGVyQnlJZChmb3VuZGVySWQsIHNjaG9vbFR5cGUpO1xyXG4gIHJldHVybiBnZXROZXdNdW5pY2lwYWxpdHkoZm91bmRlciwgZXJyb3JzKTtcclxufTtcclxuXHJcbmNvbnN0IGdldE5ld011bmljaXBhbGl0eSA9IChcclxuICBmb3VuZGVyOiBGb3VuZGVyLFxyXG4gIGVycm9yczogU21kRXJyb3JbXVxyXG4pOiBJbnRlcm1lZGlhdGVNdW5pY2lwYWxpdHlSZXN1bHQgPT4gKHtcclxuICBtdW5pY2lwYWxpdHk6IHtcclxuICAgIG11bmljaXBhbGl0eU5hbWU6IGZvdW5kZXIgPyBmb3VuZGVyLm5hbWUgOiBcIk5lem7DoW3DoSBvYmVjXCIsXHJcbiAgICBmb3VuZGVyLFxyXG4gICAgYXJlYXM6IFtdLFxyXG4gICAgY29kZTogZm91bmRlciA/IGZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZSA6IDAsXHJcbiAgICBtdW5pY2lwYWxpdHlUeXBlOlxyXG4gICAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eSA/IFwiY2l0eVwiIDogXCJkaXN0cmljdFwiLFxyXG4gICAgY2l0eUNvZGVzOlxyXG4gICAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eVxyXG4gICAgICAgID8gW2ZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZV1cclxuICAgICAgICA6IFtdLFxyXG4gICAgZGlzdHJpY3RDb2RlczpcclxuICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkRpc3RyaWN0XHJcbiAgICAgICAgPyBbZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlXVxyXG4gICAgICAgIDogW10sXHJcbiAgICB1bm1hcHBlZFBvaW50czogW10sXHJcbiAgfSxcclxuICBlcnJvcnMsXHJcbn0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldE5ld1NjaG9vbCA9IGFzeW5jICh7XHJcbiAgbmFtZSxcclxuICBmb3VuZGVyLFxyXG4gIGxpbmVOdW1iZXIsXHJcbiAgcmVxdWlyZWQsXHJcbiAgb25FcnJvcixcclxufToge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBmb3VuZGVyOiBGb3VuZGVyIHwgbnVsbDtcclxuICBsaW5lTnVtYmVyOiBudW1iZXI7XHJcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XHJcbiAgb25FcnJvcjogKHBhcmFtczogRXJyb3JDYWxsYmFja1BhcmFtcykgPT4gdm9pZDtcclxufSk6IFByb21pc2U8SW50ZXJtZWRpYXRlU2Nob29sIHwgbnVsbD4gPT4ge1xyXG4gIGxldCBleHBvcnRTY2hvb2w6IFNjaG9vbCA9IHtcclxuICAgIG5hbWUsXHJcbiAgICBpem86IFwiXCIsXHJcbiAgfTtcclxuICBpZiAoZm91bmRlciAhPT0gbnVsbCkge1xyXG4gICAgY29uc3QgeyBzY2hvb2wsIGVycm9ycyB9ID0gZmluZFNjaG9vbChcclxuICAgICAgbmFtZSxcclxuICAgICAgZm91bmRlci5zY2hvb2xzLFxyXG4gICAgICByZXF1aXJlZCA/IHVuZGVmaW5lZCA6IDRcclxuICAgICk7XHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgb25FcnJvcih7IGxpbmVOdW1iZXIsIGxpbmU6IG5hbWUsIGVycm9ycyB9KTtcclxuICAgIH1cclxuICAgIGlmIChzY2hvb2wpIHtcclxuICAgICAgZXhwb3J0U2Nob29sLm5hbWUgPSBzY2hvb2wubmFtZTtcclxuICAgICAgZXhwb3J0U2Nob29sLml6byA9IHNjaG9vbC5pem8gfHwgXCJcIjtcclxuICAgICAgaWYgKHNjaG9vbC5sb2NhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gYXdhaXQgZ2V0QWRkcmVzc1BvaW50QnlJZChcclxuICAgICAgICAgIHNjaG9vbC5sb2NhdGlvbnNbMF0uYWRkcmVzc1BvaW50SWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgZXhwb3J0U2Nob29sLnBvc2l0aW9uID0gbWFwQWRkcmVzc1BvaW50Rm9yRXhwb3J0KHBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4geyAuLi5leHBvcnRTY2hvb2wsIGFkZHJlc3NNYXA6IG5ldyBNYXA8bnVtYmVyLCBFeHBvcnRBZGRyZXNzUG9pbnQ+KCkgfTtcclxufTtcclxuXHJcbmNvbnN0IGdldEFsbEFkZHJlc3NQb2ludHNJZHMgPSAoXHJcbiAgbXVuaWNpcGFsaXR5OiBJbnRlcm1lZGlhdGVNdW5pY2lwYWxpdHlcclxuKTogU2V0PG51bWJlcj4gPT4ge1xyXG4gIGNvbnN0IGFkZHJlc3NQb2ludHNJZHMgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBhcmVhIG9mIG11bmljaXBhbGl0eS5hcmVhcykge1xyXG4gICAgZm9yIChjb25zdCBpZCBvZiBhcmVhLmFkZHJlc3NNYXAua2V5cygpKSB7XHJcbiAgICAgIGFkZHJlc3NQb2ludHNJZHMuYWRkKGlkKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGFkZHJlc3NQb2ludHNJZHM7XHJcbn07XHJcblxyXG5jb25zdCBtYXBBZGRyZXNzUG9pbnRGb3JFeHBvcnQgPSAoXHJcbiAgYWRkcmVzc1BvaW50OiBBZGRyZXNzUG9pbnQgfCBFeHBvcnRBZGRyZXNzUG9pbnQsXHJcbiAgbGluZU51bWJlcj86IG51bWJlcixcclxuICBtdW5pY2lwYWxpdHlDb2RlPzogbnVtYmVyXHJcbik6IEV4cG9ydEFkZHJlc3NQb2ludCA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGFkZHJlc3M6IGFkZHJlc3NQb2ludC5hZGRyZXNzLFxyXG4gICAgbGF0OiByb3VuZFRvTkRlY2ltYWxQbGFjZXMoYWRkcmVzc1BvaW50LmxhdCwgNiksXHJcbiAgICBsbmc6IHJvdW5kVG9ORGVjaW1hbFBsYWNlcyhhZGRyZXNzUG9pbnQubG5nLCA2KSxcclxuICAgIC4uLihsaW5lTnVtYmVyICE9PSB1bmRlZmluZWQgPyB7IGxpbmVOdW1iZXJzOiBbbGluZU51bWJlciAtIDFdIH0gOiB7fSksXHJcbiAgICAuLi4obXVuaWNpcGFsaXR5Q29kZSAhPT0gdW5kZWZpbmVkID8geyBtdW5pY2lwYWxpdHlDb2RlIH0gOiB7fSksXHJcbiAgfTtcclxufTtcclxuXHJcbmNvbnN0IG1hcEFyZWFGb3JFeHBvcnQgPSAoYXJlYTogSW50ZXJtZWRpYXRlQXJlYSk6IEludGVybWVkaWF0ZUFyZWEgPT4gKHtcclxuICAuLi5hcmVhLFxyXG4gIHNjaG9vbHM6IGFyZWEuc2Nob29scy5tYXAoKHNjaG9vbCkgPT4gKHtcclxuICAgIC4uLnNjaG9vbCxcclxuICAgIHBvc2l0aW9uOiBzY2hvb2wucG9zaXRpb25cclxuICAgICAgPyBtYXBBZGRyZXNzUG9pbnRGb3JFeHBvcnQoc2Nob29sLnBvc2l0aW9uKVxyXG4gICAgICA6IG51bGwsXHJcbiAgfSkpLFxyXG59KTtcclxuXHJcbmNvbnN0IGNsZWFuTGluZSA9IChsaW5lOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gbGluZS50cmltKCkucmVwbGFjZSgv4oCTL2csIFwiLVwiKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCB3aG9sZUxpbmVFcnJvciA9IChtZXNzYWdlOiBzdHJpbmcsIGxpbmU6IHN0cmluZyk6IFNtZEVycm9yID0+ICh7XHJcbiAgbWVzc2FnZSxcclxuICBzdGFydE9mZnNldDogMCxcclxuICBlbmRPZmZzZXQ6IGxpbmUubGVuZ3RoICsgMSxcclxufSk7XHJcblxyXG5jb25zdCByb3VuZFRvTkRlY2ltYWxQbGFjZXMgPSAoXHJcbiAgdG9Sb3VuZDogbnVtYmVyLFxyXG4gIGRlY2ltYWxQbGFjZXM6IG51bWJlclxyXG4pOiBudW1iZXIgPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBNYXRoLnJvdW5kKHRvUm91bmQgKiBNYXRoLnBvdygxMCwgZGVjaW1hbFBsYWNlcykpIC9cclxuICAgIE1hdGgucG93KDEwLCBkZWNpbWFsUGxhY2VzKVxyXG4gICk7XHJcbn07XHJcbiJdfQ==
|
|
440
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVldC1tYXJrZG93bi9zbWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsbUJBQW1CLEdBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLGNBQWMsRUFDZCxrQkFBa0IsR0FDbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFFTCxnQkFBZ0IsRUFFaEIscUJBQXFCLEdBQ3RCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4Qiw0QkFBNEIsRUFDNUIsMEJBQTBCLEVBQzFCLG1CQUFtQixHQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQTJCOUMsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsS0FBSyxFQUFFLEVBQ2xELEtBQUssRUFDTCxZQUFZLEdBQUcsRUFBRSxFQUNqQixPQUFPLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUNsQixTQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUNwQixlQUFlLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUMxQiw0QkFBNEIsR0FBRyxLQUFLLEVBQ3BDLFVBQVUsR0FDVSxFQUEyQixFQUFFO0lBQ2pELElBQUk7UUFDRixNQUFNLEtBQUssR0FBYTtZQUN0QixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLHlCQUF5QixFQUFFLElBQUk7WUFDL0Is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QUFDLElBQUk7S0FDVCxDQUFDLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBZSxFQUFFLElBQVksRUFBWSxFQUFFLENBQUMsQ0FBQztJQUMxRSxPQUFPO0lBQ1AsV0FBVyxFQUFFLENBQUM7SUFDZCxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0NBQzNCLENBQUMsQ0FBQztBQUVILE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsT0FBZSxFQUNmLGFBQXFCLEVBQ2IsRUFBRTtJQUNWLE9BQU8sQ0FDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FDNUIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgY2hlY2tTdHJlZXRFeGlzdHMsXHJcbiAgZmluZEFkZHJlc3NQb2ludHMsXHJcbiAgZ2V0QWRkcmVzc1BvaW50QnlJZCxcclxufSBmcm9tIFwiLi4vZGIvYWRkcmVzcy1wb2ludHNcIjtcclxuaW1wb3J0IHsgZGlzY29ubmVjdEtuZXggfSBmcm9tIFwiLi4vZGIvZGJcIjtcclxuaW1wb3J0IHtcclxuICBmaW5kRm91bmRlcixcclxuICBnZXRGb3VuZGVyQnlJZCxcclxuICBnZXRGb3VuZGVyQ2l0eUNvZGUsXHJcbn0gZnJvbSBcIi4uL2RiL2ZvdW5kZXJzXCI7XHJcbmltcG9ydCB7IGZpbmRTY2hvb2wgfSBmcm9tIFwiLi4vZGIvc2Nob29sc1wiO1xyXG5pbXBvcnQge1xyXG4gIEZvdW5kZXIsXHJcbiAgTXVuaWNpcGFsaXR5VHlwZSxcclxuICBTY2hvb2xUeXBlLFxyXG4gIGZvdW5kZXJUb011bmljaXBhbGl0eSxcclxufSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuaW1wb3J0IHtcclxuICBnZXRNdW5pY2lwYWxpdHlQYXJ0UmVzdWx0LFxyXG4gIGdldFJlc3RPZk11bmljaXBhbGl0eVBhcnQsXHJcbiAgZ2V0U3dpdGNoTXVuaWNpcGFsaXR5LFxyXG4gIGdldFdob2xlTXVuaWNpcGFsaXR5LFxyXG4gIGlzTXVuaWNpcGFsaXR5U3dpdGNoLFxyXG4gIGlzUmVzdE9mTXVuaWNpcGFsaXR5TGluZSxcclxuICBpc1Jlc3RPZk11bmljaXBhbGl0eVBhcnRMaW5lLFxyXG4gIGlzUmVzdFdpdGhOb1N0cmVldE5hbWVMaW5lLFxyXG4gIGlzV2hvbGVNdW5pY2lwYWxpdHksXHJcbn0gZnJvbSBcIi4vbXVuaWNpcGFsaXR5XCI7XHJcbmltcG9ydCB7IHBhcnNlTGluZSB9IGZyb20gXCIuL3NtZC1saW5lLXBhcnNlclwiO1xyXG5pbXBvcnQge1xyXG4gIEFkZHJlc3NQb2ludCxcclxuICBFcnJvckNhbGxiYWNrUGFyYW1zLFxyXG4gIEV4cG9ydEFkZHJlc3NQb2ludCxcclxuICBJbnRlcm1lZGlhdGVBcmVhLFxyXG4gIEludGVybWVkaWF0ZU11bmljaXBhbGl0eSxcclxuICBJbnRlcm1lZGlhdGVNdW5pY2lwYWxpdHlSZXN1bHQsXHJcbiAgSW50ZXJtZWRpYXRlU2Nob29sLFxyXG4gIE11bmljaXBhbGl0eSxcclxuICBQcm9jZXNzTGluZUNhbGxiYWNrUGFyYW1zLFxyXG4gIFByb2Nlc3NMaW5lUGFyYW1zLFxyXG4gIFNjaG9vbCxcclxuICBTbWRFcnJvcixcclxuICBTbWRTdGF0ZSxcclxufSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuaW50ZXJmYWNlIFBhcnNlT3JkaW5hbmNlUHJvcHMge1xyXG4gIGxpbmVzOiBzdHJpbmdbXTtcclxuICBpbml0aWFsU3RhdGU/OiBQYXJ0aWFsPFNtZFN0YXRlPjtcclxuICBvbkVycm9yPzogKHBhcmFtczogRXJyb3JDYWxsYmFja1BhcmFtcykgPT4gdm9pZDtcclxuICBvbldhcm5pbmc/OiAocGFyYW1zOiBFcnJvckNhbGxiYWNrUGFyYW1zKSA9PiB2b2lkO1xyXG4gIG9uUHJvY2Vzc2VkTGluZT86IChwYXJhbXM6IFByb2Nlc3NMaW5lQ2FsbGJhY2tQYXJhbXMpID0+IHZvaWQ7XHJcbiAgaW5jbHVkZVVubWFwcGVkQWRkcmVzc1BvaW50czogYm9vbGVhbjtcclxuICBzY2hvb2xUeXBlOiBTY2hvb2xUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcGFyc2VPcmRpbmFuY2VUb0FkZHJlc3NQb2ludHMgPSBhc3luYyAoe1xyXG4gIGxpbmVzLFxyXG4gIGluaXRpYWxTdGF0ZSA9IHt9LFxyXG4gIG9uRXJyb3IgPSAoKSA9PiB7fSxcclxuICBvbldhcm5pbmcgPSAoKSA9PiB7fSxcclxuICBvblByb2Nlc3NlZExpbmUgPSAoKSA9PiB7fSxcclxuICBpbmNsdWRlVW5tYXBwZWRBZGRyZXNzUG9pbnRzID0gZmFsc2UsXHJcbiAgc2Nob29sVHlwZSxcclxufTogUGFyc2VPcmRpbmFuY2VQcm9wcyk6IFByb21pc2U8TXVuaWNpcGFsaXR5W10+ID0+IHtcclxuICB0cnkge1xyXG4gICAgY29uc3Qgc3RhdGU6IFNtZFN0YXRlID0ge1xyXG4gICAgICBjdXJyZW50TXVuaWNpcGFsaXR5OiBudWxsLFxyXG4gICAgICBjdXJyZW50RmlsdGVyTXVuaWNpcGFsaXR5OiBudWxsLFxyXG4gICAgICBjdXJyZW50QXJlYTogbnVsbCxcclxuICAgICAgc2Nob29sc0NvbXBsZXRlZDogZmFsc2UsXHJcbiAgICAgIGFyZWFDb3VudDogMCxcclxuICAgICAgcmVzdHM6IHtcclxuICAgICAgICBub1N0cmVldE5hbWVBcmVhOiB7XHJcbiAgICAgICAgICBhcmVhSW5kZXg6IG51bGwsXHJcbiAgICAgICAgICBsaW5lTnVtYmVyOiBudWxsLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbXVuaWNpcGFsaXR5UGFydHM6IFtdLFxyXG4gICAgICAgIHdob2xlTXVuaWNpcGFsaXR5QXJlYToge1xyXG4gICAgICAgICAgYXJlYUluZGV4OiBudWxsLFxyXG4gICAgICAgICAgbGluZU51bWJlcjogbnVsbCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGluY2x1ZGVVbm1hcHBlZEFkZHJlc3NQb2ludHMsXHJcbiAgICAgIH0sXHJcbiAgICAgIG11bmljaXBhbGl0aWVzOiBbXSxcclxuICAgICAgLi4uaW5pdGlhbFN0YXRlLFxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgbGluZU51bWJlciA9IDE7XHJcblxyXG4gICAgZm9yIChjb25zdCByYXdMaW5lIG9mIGxpbmVzKSB7XHJcbiAgICAgIGNvbnN0IGxpbmUgPSBjbGVhbkxpbmUocmF3TGluZSk7XHJcbiAgICAgIGF3YWl0IHByb2Nlc3NPbmVMaW5lKHtcclxuICAgICAgICBsaW5lLFxyXG4gICAgICAgIHJhd0xpbmU6IHJhd0xpbmUudHJpbSgpLFxyXG4gICAgICAgIHN0YXRlLFxyXG4gICAgICAgIGxpbmVOdW1iZXIsXHJcbiAgICAgICAgb25FcnJvcixcclxuICAgICAgICBvbldhcm5pbmcsXHJcbiAgICAgICAgc2Nob29sVHlwZSxcclxuICAgICAgfSk7XHJcbiAgICAgIG9uUHJvY2Vzc2VkTGluZSh7IGxpbmVOdW1iZXIsIGxpbmUgfSk7XHJcbiAgICAgIGxpbmVOdW1iZXIrKztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUuY3VycmVudEFyZWEgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoc3RhdGUuY3VycmVudE11bmljaXBhbGl0eSA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuYXJlYXMucHVzaChtYXBBcmVhRm9yRXhwb3J0KHN0YXRlLmN1cnJlbnRBcmVhKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgY29tcGxldGVDdXJyZW50TXVuaWNpcGFsaXR5KHN0YXRlKTtcclxuXHJcbiAgICByZXR1cm4gc3RhdGUubXVuaWNpcGFsaXRpZXM7XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gIH0gZmluYWxseSB7XHJcbiAgICBhd2FpdCBkaXNjb25uZWN0S25leCgpO1xyXG4gIH1cclxuICByZXR1cm4gW107XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY29udmVydE11bmljaXBhbGl0eSA9IChcclxuICBtdW5pY2lwYWxpdHk6IEludGVybWVkaWF0ZU11bmljaXBhbGl0eVxyXG4pOiBNdW5pY2lwYWxpdHkgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBtdW5pY2lwYWxpdHlOYW1lOiBtdW5pY2lwYWxpdHkubXVuaWNpcGFsaXR5TmFtZSxcclxuICAgIGFyZWFzOiBtdW5pY2lwYWxpdHkuYXJlYXMubWFwKChhcmVhKSA9PiAoe1xyXG4gICAgICBpbmRleDogYXJlYS5pbmRleCxcclxuICAgICAgc2Nob29sczogYXJlYS5zY2hvb2xzLFxyXG4gICAgICBhZGRyZXNzZXM6IEFycmF5LmZyb20oYXJlYS5hZGRyZXNzTWFwLnZhbHVlcygpKS5maWx0ZXIoXHJcbiAgICAgICAgKHBvaW50KSA9PiBwb2ludC5sYXQgIT09IDAgJiYgcG9pbnQubG5nICE9PSAwXHJcbiAgICAgICksXHJcbiAgICB9KSksXHJcbiAgICBjb2RlOiBtdW5pY2lwYWxpdHkuZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlLFxyXG4gICAgbXVuaWNpcGFsaXR5VHlwZTpcclxuICAgICAgbXVuaWNpcGFsaXR5LmZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICAgICAgPyBcImNpdHlcIlxyXG4gICAgICAgIDogXCJkaXN0cmljdFwiLFxyXG4gICAgY2l0eUNvZGVzOiBbLi4ubmV3IFNldChtdW5pY2lwYWxpdHkuY2l0eUNvZGVzKV0sXHJcbiAgICBkaXN0cmljdENvZGVzOiBbLi4ubmV3IFNldChtdW5pY2lwYWxpdHkuZGlzdHJpY3RDb2RlcyldLFxyXG4gICAgdW5tYXBwZWRQb2ludHM6IG11bmljaXBhbGl0eS51bm1hcHBlZFBvaW50cy5maWx0ZXIoXHJcbiAgICAgIChwb2ludCkgPT4gcG9pbnQubGF0ICE9PSAwICYmIHBvaW50LmxuZyAhPT0gMFxyXG4gICAgKSxcclxuICB9O1xyXG59O1xyXG5cclxuY29uc3QgcHJvY2Vzc09uZUxpbmUgPSBhc3luYyAocGFyYW1zOiBQcm9jZXNzTGluZVBhcmFtcykgPT4ge1xyXG4gIGNvbnN0IHsgbGluZSwgbGluZU51bWJlciwgc3RhdGUgfSA9IHBhcmFtcztcclxuXHJcbiAgaWYgKGxpbmVbMF0gPT09IFwiI1wiKSB7XHJcbiAgICBhd2FpdCBwcm9jZXNzTXVuaWNpcGFsaXR5TGluZShwYXJhbXMpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKGxpbmUgPT09IFwiXCIpIHtcclxuICAgIC8vIGVuZCBvZiBzY2hvb2xcclxuICAgIHByb2Nlc3NFbXB0eUxpbmUocGFyYW1zKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChsaW5lWzBdID09PSBcIiFcIikge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKHN0YXRlLmN1cnJlbnRBcmVhID09PSBudWxsKSB7XHJcbiAgICBhd2FpdCBwcm9jZXNzRmlyc3RTY2hvb2xMaW5lKHBhcmFtcyk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAoc3RhdGUuc2Nob29sc0NvbXBsZXRlZCA9PT0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGZvdW5kTmV4dFNjaG9vbCA9IGF3YWl0IHByb2Nlc3NOZXh0U2Nob29sTGluZShwYXJhbXMpO1xyXG4gICAgaWYgKGZvdW5kTmV4dFNjaG9vbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdGF0ZS5zY2hvb2xzQ29tcGxldGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChpc011bmljaXBhbGl0eVN3aXRjaChsaW5lKSkge1xyXG4gICAgYXdhaXQgcHJvY2Vzc011bmljaXBhbGl0eVN3aXRjaExpbmUocGFyYW1zKTtcclxuICB9IGVsc2UgaWYgKGlzV2hvbGVNdW5pY2lwYWxpdHkobGluZSkpIHtcclxuICAgIGF3YWl0IHByb2Nlc3NXaG9sZU11bmljaXBhbGl0eUxpbmUocGFyYW1zKTtcclxuICB9IGVsc2UgaWYgKGlzUmVzdFdpdGhOb1N0cmVldE5hbWVMaW5lKGxpbmUpKSB7XHJcbiAgICBzdGF0ZS5yZXN0cy5ub1N0cmVldE5hbWVBcmVhID0ge1xyXG4gICAgICBhcmVhSW5kZXg6IHN0YXRlLmN1cnJlbnRBcmVhLmluZGV4LFxyXG4gICAgICBsaW5lTnVtYmVyLFxyXG4gICAgfTtcclxuICB9IGVsc2UgaWYgKGlzUmVzdE9mTXVuaWNpcGFsaXR5TGluZShsaW5lKSkge1xyXG4gICAgc3RhdGUucmVzdHMud2hvbGVNdW5pY2lwYWxpdHlBcmVhID0ge1xyXG4gICAgICBhcmVhSW5kZXg6IHN0YXRlLmN1cnJlbnRBcmVhLmluZGV4LFxyXG4gICAgICBsaW5lTnVtYmVyLFxyXG4gICAgfTtcclxuICB9IGVsc2UgaWYgKGlzUmVzdE9mTXVuaWNpcGFsaXR5UGFydExpbmUobGluZSkpIHtcclxuICAgIGNvbnN0IHsgbXVuaWNpcGFsaXR5UGFydENvZGUsIGVycm9ycyB9ID0gYXdhaXQgZ2V0UmVzdE9mTXVuaWNpcGFsaXR5UGFydChcclxuICAgICAgbGluZSxcclxuICAgICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgICApO1xyXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHBhcmFtcy5vbkVycm9yKHsgbGluZU51bWJlcjogbGluZU51bWJlciwgbGluZSwgZXJyb3JzIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3RhdGUucmVzdHMubXVuaWNpcGFsaXR5UGFydHMucHVzaCh7XHJcbiAgICAgICAgbXVuaWNpcGFsaXR5UGFydENvZGUsXHJcbiAgICAgICAgYXJlYUluZGV4OiBzdGF0ZS5jdXJyZW50QXJlYS5pbmRleCxcclxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgYXdhaXQgcHJvY2Vzc0FkZHJlc3NQb2ludExpbmUocGFyYW1zKTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzTXVuaWNpcGFsaXR5TGluZSA9IGFzeW5jICh7XHJcbiAgbGluZSxcclxuICBsaW5lTnVtYmVyLFxyXG4gIHN0YXRlLFxyXG4gIHNjaG9vbFR5cGUsXHJcbiAgb25FcnJvcixcclxufTogUHJvY2Vzc0xpbmVQYXJhbXMpID0+IHtcclxuICBpZiAoc3RhdGUuY3VycmVudEFyZWEgIT09IG51bGwpIHtcclxuICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuYXJlYXMucHVzaChzdGF0ZS5jdXJyZW50QXJlYSk7XHJcbiAgfVxyXG5cclxuICBhd2FpdCBjb21wbGV0ZUN1cnJlbnRNdW5pY2lwYWxpdHkoc3RhdGUpO1xyXG5cclxuICBjb25zdCB7IG11bmljaXBhbGl0eSwgZXJyb3JzIH0gPSBhd2FpdCBnZXROZXdNdW5pY2lwYWxpdHlCeU5hbWUoXHJcbiAgICBsaW5lLFxyXG4gICAgc2Nob29sVHlwZVxyXG4gICk7XHJcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICBvbkVycm9yKHsgbGluZU51bWJlciwgbGluZSwgZXJyb3JzIH0pO1xyXG4gIH1cclxuICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5ID0gbXVuaWNpcGFsaXR5O1xyXG4gIHN0YXRlLmN1cnJlbnRGaWx0ZXJNdW5pY2lwYWxpdHkgPSBmb3VuZGVyVG9NdW5pY2lwYWxpdHkoXHJcbiAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXJcclxuICApO1xyXG5cclxuICBzdGF0ZS5jdXJyZW50QXJlYSA9IG51bGw7XHJcbn07XHJcblxyXG5jb25zdCBjb21wbGV0ZUN1cnJlbnRNdW5pY2lwYWxpdHkgPSBhc3luYyAoc3RhdGU6IFNtZFN0YXRlKSA9PiB7XHJcbiAgaWYgKHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkgIT09IG51bGwpIHtcclxuICAgIGF3YWl0IGFkZFJlc3RzKHN0YXRlKTtcclxuICAgIHN0YXRlLm11bmljaXBhbGl0aWVzLnB1c2goY29udmVydE11bmljaXBhbGl0eShzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5KSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgcHJvY2Vzc0VtcHR5TGluZSA9ICh7IHN0YXRlIH06IFByb2Nlc3NMaW5lUGFyYW1zKSA9PiB7XHJcbiAgaWYgKHN0YXRlLmN1cnJlbnRBcmVhICE9PSBudWxsKSB7XHJcbiAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmFyZWFzLnB1c2goc3RhdGUuY3VycmVudEFyZWEpO1xyXG4gICAgc3RhdGUuY3VycmVudEFyZWEgPSBudWxsO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IHByb2Nlc3NGaXJzdFNjaG9vbExpbmUgPSBhc3luYyAoe1xyXG4gIHJhd0xpbmUsXHJcbiAgbGluZU51bWJlcixcclxuICBzdGF0ZSxcclxuICBvbkVycm9yLFxyXG59OiBQcm9jZXNzTGluZVBhcmFtcykgPT4ge1xyXG4gIGlmIChzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5ID09PSBudWxsKSB7XHJcbiAgICBvbkVycm9yKHtcclxuICAgICAgbGluZU51bWJlcixcclxuICAgICAgbGluZTogcmF3TGluZSxcclxuICAgICAgZXJyb3JzOiBbXHJcbiAgICAgICAgd2hvbGVMaW5lRXJyb3IoXHJcbiAgICAgICAgICBcIkRlZmluaWNpIMWha29seSBtdXPDrSBwxZllZGNow6F6ZXQgZGVmaW5pY2UgesWZaXpvdmF0ZWxlICh1dm96ZW7DoSAnIycsIG5hcMWZLiAnIyBTdHJha29uaWNlJykuXCIsXHJcbiAgICAgICAgICByYXdMaW5lXHJcbiAgICAgICAgKSxcclxuICAgICAgXSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBzdGF0ZS5jdXJyZW50QXJlYSA9IHtcclxuICAgIGluZGV4OiBzdGF0ZS5hcmVhQ291bnQrKyxcclxuICAgIHNjaG9vbHM6IFtcclxuICAgICAgYXdhaXQgZ2V0TmV3U2Nob29sKHtcclxuICAgICAgICBuYW1lOiByYXdMaW5lLFxyXG4gICAgICAgIGZvdW5kZXI6IHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlcixcclxuICAgICAgICBsaW5lTnVtYmVyLFxyXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgIH0pLFxyXG4gICAgXSxcclxuICAgIGFkZHJlc3NlczogW10sXHJcbiAgICBhZGRyZXNzTWFwOiBuZXcgTWFwPG51bWJlciwgRXhwb3J0QWRkcmVzc1BvaW50PigpLFxyXG4gICAgYWxsU2Nob29sc0FkZGVkOiBmYWxzZSxcclxuICB9O1xyXG4gIHN0YXRlLnNjaG9vbHNDb21wbGV0ZWQgPSBmYWxzZTtcclxuICBzdGF0ZS5jdXJyZW50RmlsdGVyTXVuaWNpcGFsaXR5ID0gZm91bmRlclRvTXVuaWNpcGFsaXR5KFxyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgKTtcclxufTtcclxuXHJcbmNvbnN0IHByb2Nlc3NOZXh0U2Nob29sTGluZSA9IGFzeW5jICh7XHJcbiAgbGluZSxcclxuICBsaW5lTnVtYmVyLFxyXG4gIHN0YXRlLFxyXG59OiBQcm9jZXNzTGluZVBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHNjaG9vbCA9IGF3YWl0IGdldE5ld1NjaG9vbCh7XHJcbiAgICBuYW1lOiBsaW5lLFxyXG4gICAgZm91bmRlcjogc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyLFxyXG4gICAgbGluZU51bWJlcixcclxuICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgIG9uRXJyb3I6ICgpID0+IHt9LFxyXG4gIH0pO1xyXG5cclxuICBpZiAoc2Nob29sID09PSBudWxsKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzdGF0ZS5jdXJyZW50QXJlYS5zY2hvb2xzLnB1c2goc2Nob29sKTtcclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbmNvbnN0IHByb2Nlc3NNdW5pY2lwYWxpdHlTd2l0Y2hMaW5lID0gYXN5bmMgKHtcclxuICBsaW5lLFxyXG4gIHN0YXRlLFxyXG4gIGxpbmVOdW1iZXIsXHJcbiAgb25FcnJvcixcclxufTogUHJvY2Vzc0xpbmVQYXJhbXMpID0+IHtcclxuICBjb25zdCB7IG11bmljaXBhbGl0eSwgZXJyb3JzIH0gPSBhd2FpdCBnZXRTd2l0Y2hNdW5pY2lwYWxpdHkoXHJcbiAgICBsaW5lLFxyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgKTtcclxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgIG9uRXJyb3IoeyBsaW5lTnVtYmVyLCBsaW5lLCBlcnJvcnMgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHN0YXRlLmN1cnJlbnRGaWx0ZXJNdW5pY2lwYWxpdHkgPSBtdW5pY2lwYWxpdHk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgcHJvY2Vzc1dob2xlTXVuaWNpcGFsaXR5TGluZSA9IGFzeW5jICh7XHJcbiAgbGluZSxcclxuICBzdGF0ZSxcclxuICBsaW5lTnVtYmVyLFxyXG4gIG9uRXJyb3IsXHJcbn06IFByb2Nlc3NMaW5lUGFyYW1zKSA9PiB7XHJcbiAgY29uc3QgeyBtdW5pY2lwYWxpdHksIGVycm9ycyB9ID0gYXdhaXQgZ2V0V2hvbGVNdW5pY2lwYWxpdHkoXHJcbiAgICBsaW5lLFxyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgKTtcclxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgIG9uRXJyb3IoeyBsaW5lTnVtYmVyLCBsaW5lLCBlcnJvcnMgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChtdW5pY2lwYWxpdHkudHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5KSB7XHJcbiAgICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuY2l0eUNvZGVzLnB1c2gobXVuaWNpcGFsaXR5LmNvZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzLnB1c2gobXVuaWNpcGFsaXR5LmNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFkZHJlc3NQb2ludHMgPSBhd2FpdCBmaW5kQWRkcmVzc1BvaW50cyh7XHJcbiAgICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlcIixcclxuICAgICAgbXVuaWNpcGFsaXR5LFxyXG4gICAgfSk7XHJcbiAgICBhZGRBZGRyZXNzUG9pbnRzVG9BcmVhKHN0YXRlLmN1cnJlbnRBcmVhLCBhZGRyZXNzUG9pbnRzLCBsaW5lTnVtYmVyKTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBhZGRBZGRyZXNzUG9pbnRzVG9BcmVhID0gKFxyXG4gIGFyZWE6IEludGVybWVkaWF0ZUFyZWEsXHJcbiAgYWRkcmVzc1BvaW50czogQWRkcmVzc1BvaW50W10sXHJcbiAgbGluZU51bWJlcjogbnVtYmVyLFxyXG4gIG11bmljaXBhbGl0eUNvZGU/OiBudW1iZXJcclxuKSA9PiB7XHJcbiAgZm9yIChjb25zdCBwb2ludCBvZiBhZGRyZXNzUG9pbnRzKSB7XHJcbiAgICBpZiAoYXJlYS5hZGRyZXNzTWFwLmhhcyhwb2ludC5pZCkpIHtcclxuICAgICAgYXJlYS5hZGRyZXNzTWFwLmdldChwb2ludC5pZCkubGluZU51bWJlcnMucHVzaChsaW5lTnVtYmVyIC0gMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhcmVhLmFkZHJlc3NNYXAuc2V0KFxyXG4gICAgICAgIHBvaW50LmlkLFxyXG4gICAgICAgIG1hcEFkZHJlc3NQb2ludEZvckV4cG9ydChwb2ludCwgbGluZU51bWJlciwgbXVuaWNpcGFsaXR5Q29kZSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzQWRkcmVzc1BvaW50TGluZSA9IGFzeW5jICh7XHJcbiAgbGluZSxcclxuICBzdGF0ZSxcclxuICBsaW5lTnVtYmVyLFxyXG4gIG9uRXJyb3IsXHJcbiAgb25XYXJuaW5nLFxyXG59OiBQcm9jZXNzTGluZVBhcmFtcykgPT4ge1xyXG4gIGNvbnN0IHsgc21kTGluZXMsIGVycm9ycyB9ID0gcGFyc2VMaW5lKGxpbmUpO1xyXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgb25FcnJvcih7IGxpbmVOdW1iZXIsIGxpbmUsIGVycm9ycyB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgZm9yIChjb25zdCBzbWRMaW5lIG9mIHNtZExpbmVzKSB7XHJcbiAgICAgIGlmIChzbWRMaW5lLnR5cGUgPT09IFwic3RyZWV0XCIpIHtcclxuICAgICAgICBjb25zdCB7IGV4aXN0cywgZXJyb3JzIH0gPSBhd2FpdCBjaGVja1N0cmVldEV4aXN0cyhcclxuICAgICAgICAgIHNtZExpbmUuc3RyZWV0LFxyXG4gICAgICAgICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIG9uV2FybmluZyh7IGxpbmVOdW1iZXIsIGxpbmUsIGVycm9ycyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4aXN0cykge1xyXG4gICAgICAgICAgY29uc3QgYWRkcmVzc1BvaW50cyA9IGF3YWl0IGZpbmRBZGRyZXNzUG9pbnRzKHtcclxuICAgICAgICAgICAgdHlwZTogXCJzbWRMaW5lXCIsXHJcbiAgICAgICAgICAgIHNtZExpbmUsXHJcbiAgICAgICAgICAgIG11bmljaXBhbGl0eTogc3RhdGUuY3VycmVudEZpbHRlck11bmljaXBhbGl0eSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGFkZEFkZHJlc3NQb2ludHNUb0FyZWEoXHJcbiAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRBcmVhLFxyXG4gICAgICAgICAgICBhZGRyZXNzUG9pbnRzLFxyXG4gICAgICAgICAgICBsaW5lTnVtYmVyLFxyXG4gICAgICAgICAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmNvZGUgIT09XHJcbiAgICAgICAgICAgICAgc3RhdGUuY3VycmVudEZpbHRlck11bmljaXBhbGl0eS5jb2RlXHJcbiAgICAgICAgICAgICAgPyBzdGF0ZS5jdXJyZW50RmlsdGVyTXVuaWNpcGFsaXR5LmNvZGVcclxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoc21kTGluZS50eXBlID09PSBcIm11bmljaXBhbGl0eVBhcnRcIikge1xyXG4gICAgICAgIGNvbnN0IHsgbXVuaWNpcGFsaXR5UGFydENvZGUsIGVycm9ycyB9ID1cclxuICAgICAgICAgIGF3YWl0IGdldE11bmljaXBhbGl0eVBhcnRSZXN1bHQoXHJcbiAgICAgICAgICAgIHNtZExpbmUubXVuaWNpcGFsaXR5UGFydCxcclxuICAgICAgICAgICAgbGluZSxcclxuICAgICAgICAgICAgYXdhaXQgZ2V0Rm91bmRlckNpdHlDb2RlKFxyXG4gICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRGaWx0ZXJNdW5pY2lwYWxpdHkudHlwZSxcclxuICAgICAgICAgICAgICBzdGF0ZS5jdXJyZW50RmlsdGVyTXVuaWNpcGFsaXR5LmNvZGVcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIG9uV2FybmluZyh7IGxpbmVOdW1iZXIsIGxpbmUsIGVycm9ycyB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgYWRkcmVzc1BvaW50cyA9IGF3YWl0IGZpbmRBZGRyZXNzUG9pbnRzKHtcclxuICAgICAgICAgICAgdHlwZTogXCJzbWRMaW5lXCIsXHJcbiAgICAgICAgICAgIHNtZExpbmUsXHJcbiAgICAgICAgICAgIG11bmljaXBhbGl0eTogc3RhdGUuY3VycmVudEZpbHRlck11bmljaXBhbGl0eSxcclxuICAgICAgICAgICAgbXVuaWNpcGFsaXR5UGFydENvZGUsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBhZGRBZGRyZXNzUG9pbnRzVG9BcmVhKHN0YXRlLmN1cnJlbnRBcmVhLCBhZGRyZXNzUG9pbnRzLCBsaW5lTnVtYmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0VG9BcmVhID0gKFxyXG4gIHJlc3RQb2ludHM6IEFkZHJlc3NQb2ludFtdLFxyXG4gIGFyZWFJbmRleDogbnVtYmVyLFxyXG4gIGxpbmVOdW1iZXI6IG51bWJlcixcclxuICBzdGF0ZTogU21kU3RhdGVcclxuKSA9PiB7XHJcbiAgY29uc3QgYWRkcmVzc1BvaW50c0lkcyA9IGdldEFsbEFkZHJlc3NQb2ludHNJZHMoc3RhdGUuY3VycmVudE11bmljaXBhbGl0eSk7XHJcblxyXG4gIC8vIGZpbHRlciBvdXQgYWRkcmVzcyBwb2ludHMgYWxyZWFkeSBwcmVzZW50XHJcbiAgY29uc3QgcmVtYWluaW5nUG9pbnRzID0gcmVzdFBvaW50cy5maWx0ZXIoXHJcbiAgICAocG9pbnQpID0+ICFhZGRyZXNzUG9pbnRzSWRzLmhhcyhwb2ludC5pZClcclxuICApO1xyXG5cclxuICBhZGRBZGRyZXNzUG9pbnRzVG9BcmVhKFxyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5hcmVhcy5maW5kKChhcmVhKSA9PiBhcmVhLmluZGV4ID09PSBhcmVhSW5kZXgpLFxyXG4gICAgcmVtYWluaW5nUG9pbnRzLFxyXG4gICAgbGluZU51bWJlclxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0cyA9IGFzeW5jIChzdGF0ZTogU21kU3RhdGUpID0+IHtcclxuICBpZiAoc3RhdGUucmVzdHMubm9TdHJlZXROYW1lQXJlYS5hcmVhSW5kZXggIT09IG51bGwpIHtcclxuICAgIGF3YWl0IGFkZFJlc3RXaXRoTm9TdHJlZXROYW1lVG9TY2hvb2woXHJcbiAgICAgIHN0YXRlLnJlc3RzLm5vU3RyZWV0TmFtZUFyZWEubGluZU51bWJlcixcclxuICAgICAgc3RhdGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpZiAoc3RhdGUucmVzdHMud2hvbGVNdW5pY2lwYWxpdHlBcmVhLmFyZWFJbmRleCAhPT0gbnVsbCkge1xyXG4gICAgYXdhaXQgYWRkUmVzdE9mTXVuaWNpcGFsaXR5KFxyXG4gICAgICBzdGF0ZS5yZXN0cy53aG9sZU11bmljaXBhbGl0eUFyZWEubGluZU51bWJlcixcclxuICAgICAgc3RhdGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmb3IgKGNvbnN0IHJlc3Qgb2Ygc3RhdGUucmVzdHMubXVuaWNpcGFsaXR5UGFydHMpIHtcclxuICAgIGF3YWl0IGFkZFJlc3RPZk11bmljaXBhbGl0eVBhcnQoXHJcbiAgICAgIHN0YXRlLFxyXG4gICAgICByZXN0Lm11bmljaXBhbGl0eVBhcnRDb2RlLFxyXG4gICAgICByZXN0LmFyZWFJbmRleCxcclxuICAgICAgcmVzdC5saW5lTnVtYmVyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaWYgKHN0YXRlLnJlc3RzLmluY2x1ZGVVbm1hcHBlZEFkZHJlc3NQb2ludHMpIHtcclxuICAgIGF3YWl0IGFkZFJlc3RPZk11bmljaXBhbGl0eVRvVW5tYXBwZWRQb2ludHMoc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGUucmVzdHMubm9TdHJlZXROYW1lQXJlYS5hcmVhSW5kZXggPSBudWxsO1xyXG4gIHN0YXRlLnJlc3RzLndob2xlTXVuaWNpcGFsaXR5QXJlYS5hcmVhSW5kZXggPSBudWxsO1xyXG4gIHN0YXRlLnJlc3RzLm11bmljaXBhbGl0eVBhcnRzID0gW107XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0V2l0aE5vU3RyZWV0TmFtZVRvU2Nob29sID0gYXN5bmMgKFxyXG4gIGxpbmVOdW1iZXI6IG51bWJlcixcclxuICBzdGF0ZTogU21kU3RhdGVcclxuKSA9PiB7XHJcbiAgLy8gZ2V0IGFsbCBhZGRyZXNzIHBvaW50cyB3aXRob3V0IHN0cmVldCBuYW1lIGZvciBjdXJyZW50IG11bmljaXBhbGl0eVxyXG4gIGNvbnN0IHBvaW50c05vU3RyZWV0TmFtZSA9IGF3YWl0IGZpbmRBZGRyZXNzUG9pbnRzKHtcclxuICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlOb1N0cmVldE5hbWVcIixcclxuICAgIG11bmljaXBhbGl0eToge1xyXG4gICAgICBjb2RlOiBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZSxcclxuICAgICAgdHlwZTogc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyLm11bmljaXBhbGl0eVR5cGUsXHJcbiAgICB9LFxyXG4gIH0pO1xyXG4gIGFkZFJlc3RUb0FyZWEoXHJcbiAgICBwb2ludHNOb1N0cmVldE5hbWUsXHJcbiAgICBzdGF0ZS5yZXN0cy5ub1N0cmVldE5hbWVBcmVhLmFyZWFJbmRleCxcclxuICAgIGxpbmVOdW1iZXIsXHJcbiAgICBzdGF0ZVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0T2ZNdW5pY2lwYWxpdHkgPSBhc3luYyAobGluZU51bWJlcjogbnVtYmVyLCBzdGF0ZTogU21kU3RhdGUpID0+IHtcclxuICBhZGRSZXN0VG9BcmVhKFxyXG4gICAgYXdhaXQgZ2V0UmVzdE9mTXVuaWNpcGFsaXR5KHN0YXRlKSxcclxuICAgIHN0YXRlLnJlc3RzLndob2xlTXVuaWNpcGFsaXR5QXJlYS5hcmVhSW5kZXgsXHJcbiAgICBsaW5lTnVtYmVyLFxyXG4gICAgc3RhdGVcclxuICApO1xyXG59O1xyXG5cclxuY29uc3QgYWRkUmVzdE9mTXVuaWNpcGFsaXR5VG9Vbm1hcHBlZFBvaW50cyA9IGFzeW5jIChzdGF0ZTogU21kU3RhdGUpID0+IHtcclxuICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LnVubWFwcGVkUG9pbnRzID0gKFxyXG4gICAgYXdhaXQgZ2V0UmVzdE9mTXVuaWNpcGFsaXR5KHN0YXRlKVxyXG4gICkubWFwKChwb2ludCkgPT4gbWFwQWRkcmVzc1BvaW50Rm9yRXhwb3J0KHBvaW50KSk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRSZXN0T2ZNdW5pY2lwYWxpdHkgPSBhc3luYyAoXHJcbiAgc3RhdGU6IFNtZFN0YXRlXHJcbik6IFByb21pc2U8QWRkcmVzc1BvaW50W10+ID0+IHtcclxuICAvLyBnZXQgYWxsIGFkZHJlc3MgcG9pbnRzIGZvciBjdXJyZW50IG11bmljaXBhbGl0eVxyXG4gIGNvbnN0IGFsbFBvaW50cyA9IGF3YWl0IGZpbmRBZGRyZXNzUG9pbnRzKHtcclxuICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlcIixcclxuICAgIG11bmljaXBhbGl0eToge1xyXG4gICAgICBjb2RlOiBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZSxcclxuICAgICAgdHlwZTogc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyLm11bmljaXBhbGl0eVR5cGUsXHJcbiAgICB9LFxyXG4gIH0pO1xyXG5cclxuICAvLyBmaWx0ZXIgb3V0IGFkZHJlc3MgcG9pbnRzIGFscmVhZHkgcHJlc2VudFxyXG4gIGNvbnN0IGFkZHJlc3NQb2ludHNJZHMgPSBnZXRBbGxBZGRyZXNzUG9pbnRzSWRzKHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkpO1xyXG4gIHJldHVybiBhbGxQb2ludHMuZmlsdGVyKChwb2ludCkgPT4gIWFkZHJlc3NQb2ludHNJZHMuaGFzKHBvaW50LmlkKSk7XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0T2ZNdW5pY2lwYWxpdHlQYXJ0ID0gYXN5bmMgKFxyXG4gIHN0YXRlOiBTbWRTdGF0ZSxcclxuICBtdW5pY2lwYWxpdHlQYXJ0Q29kZTogbnVtYmVyLFxyXG4gIGFyZWFJbmRleDogbnVtYmVyLFxyXG4gIGxpbmVOdW1iZXI6IG51bWJlclxyXG4pID0+IHtcclxuICBjb25zdCBhbGxQb2ludHMgPSBhd2FpdCBmaW5kQWRkcmVzc1BvaW50cyh7XHJcbiAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiLFxyXG4gICAgbXVuaWNpcGFsaXR5UGFydENvZGUsXHJcbiAgfSk7XHJcbiAgYWRkUmVzdFRvQXJlYShhbGxQb2ludHMsIGFyZWFJbmRleCwgbGluZU51bWJlciwgc3RhdGUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldE5ld011bmljaXBhbGl0eUJ5TmFtZSA9IGFzeW5jIChcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgc2Nob29sVHlwZTogU2Nob29sVHlwZVxyXG4pOiBQcm9taXNlPEludGVybWVkaWF0ZU11bmljaXBhbGl0eVJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IHsgZm91bmRlciwgZXJyb3JzIH0gPSBhd2FpdCBmaW5kRm91bmRlcihuYW1lLCBzY2hvb2xUeXBlKTtcclxuICByZXR1cm4gZ2V0TmV3TXVuaWNpcGFsaXR5KGZvdW5kZXIsIGVycm9ycyk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0TmV3TXVuaWNpcGFsaXR5QnlGb3VuZGVySWQgPSBhc3luYyAoXHJcbiAgZm91bmRlcklkOiBudW1iZXIsXHJcbiAgc2Nob29sVHlwZTogU2Nob29sVHlwZVxyXG4pOiBQcm9taXNlPEludGVybWVkaWF0ZU11bmljaXBhbGl0eVJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IHsgZm91bmRlciwgZXJyb3JzIH0gPSBhd2FpdCBnZXRGb3VuZGVyQnlJZChmb3VuZGVySWQsIHNjaG9vbFR5cGUpO1xyXG4gIHJldHVybiBnZXROZXdNdW5pY2lwYWxpdHkoZm91bmRlciwgZXJyb3JzKTtcclxufTtcclxuXHJcbmNvbnN0IGdldE5ld011bmljaXBhbGl0eSA9IChcclxuICBmb3VuZGVyOiBGb3VuZGVyLFxyXG4gIGVycm9yczogU21kRXJyb3JbXVxyXG4pOiBJbnRlcm1lZGlhdGVNdW5pY2lwYWxpdHlSZXN1bHQgPT4gKHtcclxuICBtdW5pY2lwYWxpdHk6IHtcclxuICAgIG11bmljaXBhbGl0eU5hbWU6IGZvdW5kZXIgPyBmb3VuZGVyLm5hbWUgOiBcIk5lem7DoW3DoSBvYmVjXCIsXHJcbiAgICBmb3VuZGVyLFxyXG4gICAgYXJlYXM6IFtdLFxyXG4gICAgY29kZTogZm91bmRlciA/IGZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZSA6IDAsXHJcbiAgICBtdW5pY2lwYWxpdHlUeXBlOlxyXG4gICAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eSA/IFwiY2l0eVwiIDogXCJkaXN0cmljdFwiLFxyXG4gICAgY2l0eUNvZGVzOlxyXG4gICAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eVxyXG4gICAgICAgID8gW2ZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZV1cclxuICAgICAgICA6IFtdLFxyXG4gICAgZGlzdHJpY3RDb2RlczpcclxuICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkRpc3RyaWN0XHJcbiAgICAgICAgPyBbZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlXVxyXG4gICAgICAgIDogW10sXHJcbiAgICB1bm1hcHBlZFBvaW50czogW10sXHJcbiAgfSxcclxuICBlcnJvcnMsXHJcbn0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldE5ld1NjaG9vbCA9IGFzeW5jICh7XHJcbiAgbmFtZSxcclxuICBmb3VuZGVyLFxyXG4gIGxpbmVOdW1iZXIsXHJcbiAgcmVxdWlyZWQsXHJcbiAgb25FcnJvcixcclxufToge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBmb3VuZGVyOiBGb3VuZGVyIHwgbnVsbDtcclxuICBsaW5lTnVtYmVyOiBudW1iZXI7XHJcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XHJcbiAgb25FcnJvcjogKHBhcmFtczogRXJyb3JDYWxsYmFja1BhcmFtcykgPT4gdm9pZDtcclxufSk6IFByb21pc2U8SW50ZXJtZWRpYXRlU2Nob29sIHwgbnVsbD4gPT4ge1xyXG4gIGxldCBleHBvcnRTY2hvb2w6IFNjaG9vbCA9IHtcclxuICAgIG5hbWUsXHJcbiAgICBpem86IFwiXCIsXHJcbiAgfTtcclxuICBpZiAoZm91bmRlciAhPT0gbnVsbCkge1xyXG4gICAgY29uc3QgeyBzY2hvb2wsIGVycm9ycyB9ID0gZmluZFNjaG9vbChcclxuICAgICAgbmFtZSxcclxuICAgICAgZm91bmRlci5zY2hvb2xzLFxyXG4gICAgICByZXF1aXJlZCA/IHVuZGVmaW5lZCA6IDRcclxuICAgICk7XHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgb25FcnJvcih7IGxpbmVOdW1iZXIsIGxpbmU6IG5hbWUsIGVycm9ycyB9KTtcclxuICAgIH1cclxuICAgIGlmIChzY2hvb2wpIHtcclxuICAgICAgZXhwb3J0U2Nob29sLm5hbWUgPSBzY2hvb2wubmFtZTtcclxuICAgICAgZXhwb3J0U2Nob29sLml6byA9IHNjaG9vbC5pem8gfHwgXCJcIjtcclxuICAgICAgaWYgKHNjaG9vbC5sb2NhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gYXdhaXQgZ2V0QWRkcmVzc1BvaW50QnlJZChcclxuICAgICAgICAgIHNjaG9vbC5sb2NhdGlvbnNbMF0uYWRkcmVzc1BvaW50SWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgZXhwb3J0U2Nob29sLnBvc2l0aW9uID0gbWFwQWRkcmVzc1BvaW50Rm9yRXhwb3J0KHBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4geyAuLi5leHBvcnRTY2hvb2wsIGFkZHJlc3NNYXA6IG5ldyBNYXA8bnVtYmVyLCBFeHBvcnRBZGRyZXNzUG9pbnQ+KCkgfTtcclxufTtcclxuXHJcbmNvbnN0IGdldEFsbEFkZHJlc3NQb2ludHNJZHMgPSAoXHJcbiAgbXVuaWNpcGFsaXR5OiBJbnRlcm1lZGlhdGVNdW5pY2lwYWxpdHlcclxuKTogU2V0PG51bWJlcj4gPT4ge1xyXG4gIGNvbnN0IGFkZHJlc3NQb2ludHNJZHMgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBhcmVhIG9mIG11bmljaXBhbGl0eS5hcmVhcykge1xyXG4gICAgZm9yIChjb25zdCBpZCBvZiBhcmVhLmFkZHJlc3NNYXAua2V5cygpKSB7XHJcbiAgICAgIGFkZHJlc3NQb2ludHNJZHMuYWRkKGlkKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGFkZHJlc3NQb2ludHNJZHM7XHJcbn07XHJcblxyXG5jb25zdCBtYXBBZGRyZXNzUG9pbnRGb3JFeHBvcnQgPSAoXHJcbiAgYWRkcmVzc1BvaW50OiBBZGRyZXNzUG9pbnQgfCBFeHBvcnRBZGRyZXNzUG9pbnQsXHJcbiAgbGluZU51bWJlcj86IG51bWJlcixcclxuICBtdW5pY2lwYWxpdHlDb2RlPzogbnVtYmVyXHJcbik6IEV4cG9ydEFkZHJlc3NQb2ludCA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGFkZHJlc3M6IGFkZHJlc3NQb2ludC5hZGRyZXNzLFxyXG4gICAgbGF0OiByb3VuZFRvTkRlY2ltYWxQbGFjZXMoYWRkcmVzc1BvaW50LmxhdCwgNiksXHJcbiAgICBsbmc6IHJvdW5kVG9ORGVjaW1hbFBsYWNlcyhhZGRyZXNzUG9pbnQubG5nLCA2KSxcclxuICAgIC4uLihsaW5lTnVtYmVyICE9PSB1bmRlZmluZWQgPyB7IGxpbmVOdW1iZXJzOiBbbGluZU51bWJlciAtIDFdIH0gOiB7fSksXHJcbiAgICAuLi4obXVuaWNpcGFsaXR5Q29kZSAhPT0gdW5kZWZpbmVkID8geyBtdW5pY2lwYWxpdHlDb2RlIH0gOiB7fSksXHJcbiAgfTtcclxufTtcclxuXHJcbmNvbnN0IG1hcEFyZWFGb3JFeHBvcnQgPSAoYXJlYTogSW50ZXJtZWRpYXRlQXJlYSk6IEludGVybWVkaWF0ZUFyZWEgPT4gKHtcclxuICAuLi5hcmVhLFxyXG4gIHNjaG9vbHM6IGFyZWEuc2Nob29scy5tYXAoKHNjaG9vbCkgPT4gKHtcclxuICAgIC4uLnNjaG9vbCxcclxuICAgIHBvc2l0aW9uOiBzY2hvb2wucG9zaXRpb25cclxuICAgICAgPyBtYXBBZGRyZXNzUG9pbnRGb3JFeHBvcnQoc2Nob29sLnBvc2l0aW9uKVxyXG4gICAgICA6IG51bGwsXHJcbiAgfSkpLFxyXG59KTtcclxuXHJcbmNvbnN0IGNsZWFuTGluZSA9IChsaW5lOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gbGluZS50cmltKCkucmVwbGFjZSgv4oCTL2csIFwiLVwiKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCB3aG9sZUxpbmVFcnJvciA9IChtZXNzYWdlOiBzdHJpbmcsIGxpbmU6IHN0cmluZyk6IFNtZEVycm9yID0+ICh7XHJcbiAgbWVzc2FnZSxcclxuICBzdGFydE9mZnNldDogMCxcclxuICBlbmRPZmZzZXQ6IGxpbmUubGVuZ3RoICsgMSxcclxufSk7XHJcblxyXG5jb25zdCByb3VuZFRvTkRlY2ltYWxQbGFjZXMgPSAoXHJcbiAgdG9Sb3VuZDogbnVtYmVyLFxyXG4gIGRlY2ltYWxQbGFjZXM6IG51bWJlclxyXG4pOiBudW1iZXIgPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBNYXRoLnJvdW5kKHRvUm91bmQgKiBNYXRoLnBvdygxMCwgZGVjaW1hbFBsYWNlcykpIC9cclxuICAgIE1hdGgucG93KDEwLCBkZWNpbWFsUGxhY2VzKVxyXG4gICk7XHJcbn07XHJcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
},
|
|
74
74
|
"name": "text-to-map",
|
|
75
75
|
"description": "Text To Map usiluje o lepší, strojově zpracovatelné využití částí vyhlášek s výčtem ulic a dalších lokací. Jde o rozšiřitelnou sadu konceptů a nástrojů, které zajistí hladký převod výčtu ulic a jejich rozsahů v lidsky srozumitelném jazyce do strojově zpracovatelného, uchopitelného formátu.",
|
|
76
|
-
"version": "1.1.
|
|
76
|
+
"version": "1.1.42",
|
|
77
77
|
"main": "dist/index.js",
|
|
78
78
|
"types": "dist/index.d.ts",
|
|
79
79
|
"files": [
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export async function up(knex) {
|
|
2
|
-
await knex.schema.alterTable("city", (t) => {
|
|
3
|
-
t.text("districts_polygon_geojson", "longtext").nullable();
|
|
4
|
-
});
|
|
5
|
-
}
|
|
6
|
-
export async function down(knex) {
|
|
7
|
-
await knex.schema.alterTable("city", (t) => {
|
|
8
|
-
t.dropColumn("districts_polygon_geojson");
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAyNDA3MjkyMTEzMjNfb3JkaW5hbmNlX2NpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGIvbWlncmF0aW9ucy8yMDI0MDcyOTIxMTMyM19vcmRpbmFuY2VfY2l0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQyxJQUFVO0lBQ2pDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDekMsQ0FBQyxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLElBQUksQ0FBQyxJQUFVO0lBQ25DLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDekMsQ0FBQyxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtuZXggfSBmcm9tIFwia25leFwiO1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICBhd2FpdCBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiY2l0eVwiLCAodCkgPT4ge1xyXG4gICAgdC50ZXh0KFwiZGlzdHJpY3RzX3BvbHlnb25fZ2VvanNvblwiLCBcImxvbmd0ZXh0XCIpLm51bGxhYmxlKCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3duKGtuZXg6IEtuZXgpIHtcclxuICBhd2FpdCBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiY2l0eVwiLCAodCkgPT4ge1xyXG4gICAgdC5kcm9wQ29sdW1uKFwiZGlzdHJpY3RzX3BvbHlnb25fZ2VvanNvblwiKTtcclxuICB9KTtcclxufVxyXG4iXX0=
|