@libs-ui/utils 0.2.331-0 → 0.2.333-0
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/esm2022/helpers.mjs
CHANGED
|
@@ -255,7 +255,7 @@ export const get = (obj, path, defaultValue, keepLastValueIfSignal) => {
|
|
|
255
255
|
* set(obj, 'a.b', 2); // { a: { b: 2 } }
|
|
256
256
|
*/
|
|
257
257
|
export const set = (obj, path, value, options) => {
|
|
258
|
-
if (
|
|
258
|
+
if (isNil(obj) || (typeof obj !== 'object' && !isSignal(obj)) || (isSignal(obj) && typeof obj() !== 'object')) {
|
|
259
259
|
throw new Error('The first argument must be an object');
|
|
260
260
|
}
|
|
261
261
|
if (obj instanceof HttpParams) {
|
|
@@ -649,4 +649,4 @@ export const generateInterface = (obj, interfaceName) => {
|
|
|
649
649
|
const interfaceStr = `interface ${interfaceName} ${generateType(obj)}`;
|
|
650
650
|
return interfaceStr;
|
|
651
651
|
};
|
|
652
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQTBCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZELHNDQUFzQztBQUN0Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFjLEVBQUUsT0FBMEMsRUFBNkIsRUFBRTtJQUM3RyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDakMsS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBVSxFQUFFLE9BQTJHLEVBQXNDLEVBQUU7SUFDckwsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1FBQ2pDLEtBQUssR0FBRyxZQUFZ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QUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsYUFBYSxhQUFhLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDdkUsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFNpZ25hbCwgV3JpdGFibGVTaWduYWwsIGlzU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdldFJldHVyblR5cGUsIEdldFZhbHVlQXRQYXRoLCBQYXRoT2YsIFRZUEVfT0JKRUNUIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNEYW5nZXJvdXNPYmplY3QsIGlzRGF5anNPYmplY3QsIGlzTWFwLCBpc1JlZ0V4cCwgaXNSZXR1cm5Bc0lzT2JqZWN0LCBpc1NldCB9IGZyb20gJy4vZGFuZ2Vyb3VzLW9iamVjdCc7XG5pbXBvcnQgeyBnZXREYXlqcyB9IGZyb20gJy4vZGF0ZSc7XG5pbXBvcnQgeyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0IH0gZnJvbSAnLi9odHRwLXBhcmFtcyc7XG5pbXBvcnQgeyB1bndyYXBTaWduYWwgfSBmcm9tICcuL3R3by13YXktc2lnbmFsLW9iamVjdCc7XG5cbi8qKkPDoWMgaMOgbSB0xrDGoW5nIHThu7EgdGjGsCB2aeG7h24gbG9kYXNoICovXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6AgbnVsbCBob+G6t2MgdW5kZWZpbmVkIGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIGtp4buDbSB0cmFcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgZ2nDoSB0cuG7iyBsw6AgbnVsbCBob+G6t2MgdW5kZWZpbmVkLCBmYWxzZSBu4bq/dSBraMO0bmdcbiAqIEBleGFtcGxlXG4gKiBpc05pbChudWxsKTsgLy8gdHJ1ZVxuICogaXNOaWwodW5kZWZpbmVkKTsgLy8gdHJ1ZVxuICogaXNOaWwoMCk7IC8vIGZhbHNlXG4gKiBpc05pbCgnaGVsbG8nKTsgLy8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHZhbHVlOiB1bmtub3duLCBvcHRpb25zPzogeyBpZ25vcmVVbldyYXBTaWduYWw/OiBib29sZWFuIH0pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFvcHRpb25zPy5pZ25vcmVVbldyYXBTaWduYWwpIHtcbiAgICB2YWx1ZSA9IHVud3JhcFNpZ25hbCh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6AgcuG7l25nIGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIGtp4buDbSB0cmFcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgZ2nDoSB0cuG7iyBsw6AgbnVsbCwgcuG7l25nIGhv4bq3YyB1bmRlZmluZWQsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzRW1wdHkobnVsbCk7IC8vIHRydWVcbiAqIGlzRW1wdHkoJycpOyAvLyB0cnVlXG4gKiBpc0VtcHR5KHVuZGVmaW5lZCk7IC8vIHRydWVcbiAqIGlzRW1wdHkoe30pOyAvLyB0cnVlXG4gKiBpc0VtcHR5KFtdKTsgLy8gdHJ1ZVxuICogaXNFbXB0eShbMSwgMiwgM10pOyAvLyBmYWxzZVxuICogaXNFbXB0eSh7IGE6IDEgfSk7IC8vIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKHZhbHVlOiBhbnksIG9wdGlvbnM/OiB7IGlnbm9yZUNoZWNrVHlwZVByaW1pdGl2ZT86IGJvb2xlYW47IGlnbm9yZVVuV3JhcFNpZ25hbD86IGJvb2xlYW47IGlnbm9yZUNoZWNrU3RyaW5nPzogYm9vbGVhbiB9KTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCB8ICcnIHwgMCA9PiB7XG4gIGlmICghb3B0aW9ucz8uaWdub3JlVW5XcmFwU2lnbmFsKSB7XG4gICAgdmFsdWUgPSB1bndyYXBTaWduYWwodmFsdWUpO1xuICB9XG4gIGlmIChvcHRpb25zPy5pZ25vcmVDaGVja1N0cmluZyAmJiB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG9wdGlvbnM/Lmlnbm9yZUNoZWNrVHlwZVByaW1pdGl2ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIGlzRW1wdHlUeXBlT2JqZWN0KHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBpc0VtcHR5VHlwZU9iamVjdCh2YWx1ZSk7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6Agb2JqZWN0IHLhu5duZyBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG9iamVjdCBy4buXbmcsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzRW1wdHlUeXBlT2JqZWN0KHt9KTsgLy8gdHJ1ZVxuICogaXNFbXB0eVR5cGVPYmplY3QoeyBhOiAxIH0pOyAvLyBmYWxzZVxuICovXG5jb25zdCBpc0VtcHR5VHlwZU9iamVjdCA9IDxUID0gbnVsbD4odmFsdWU6IGFueSk6IHZhbHVlIGlzIFQgPT4ge1xuICB0cnkge1xuICAgIGlmIChpc05pbCh2YWx1ZSwgeyBpZ25vcmVVbldyYXBTaWduYWw6IHRydWUgfSkgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6AgbnVsbCwgcuG7l25nLCB1bmRlZmluZWQgaG/hurdjIDAgaGF5IGtow7RuZ1xuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24ga2nhu4NtIHRyYVxuICogQHBhcmFtIG9wdGlvbnMgQ+G6pXUgaMOsbmggdMO5eSBjaOG7jW5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZVplcm8gTuG6v3UgdHJ1ZSwgc+G6vSBraMO0bmcga2nhu4NtIHRyYSBnacOhIHRy4buLIDBcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgZ2nDoSB0cuG7iyBsw6AgbnVsbCwgcuG7l25nLCB1bmRlZmluZWQgaG/hurdjIDAsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzVHJ1dGh5KG51bGwpOyAvLyBmYWxzZVxuICogaXNUcnV0aHkoJycpOyAvLyBmYWxzZVxuICogaXNUcnV0aHkodW5kZWZpbmVkKTsgLy8gZmFsc2VcbiAqIGlzVHJ1dGh5KDApOyAvLyBmYWxzZVxuICogaXNUcnV0aHkoe30pOyAvLyB0cnVlXG4gKiBpc1RydXRoeSgwLCB7IGlnbm9yZVplcm86IHRydWUgfSk7IC8vIHRydWVcbiAqL1xuXG5leHBvcnQgY29uc3QgaXNUcnV0aHkgPSA8VD4odmFsdWU6IFQsIG9wdGlvbnM/OiB7IGlnbm9yZVplcm8/OiBib29sZWFuOyBpZ25vcmVDaGVja1N0cmluZz86IGJvb2xlYW47IGlnbm9yZVVuV3JhcFNpZ25hbD86IGJvb2xlYW4gfSk6IHZhbHVlIGlzIE5vbk51bGxhYmxlPFQ+ID0+IHtcbiAgcmV0dXJuICFpc0ZhbHN5KHZhbHVlLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gbeG7mXQgZ2nDoSB0cuG7iyBjw7MgcGjhuqNpIGzDoCBudWxsLCBy4buXbmcsIHVuZGVmaW5lZCBob+G6t2MgMCBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcGFyYW0gb3B0aW9ucyBD4bqldSBow6xuaCB0w7l5IGNo4buNblxuICogQHBhcmFtIG9wdGlvbnMuaWdub3JlWmVybyBO4bq/dSB0cnVlLCBz4bq9IGtow7RuZyBraeG7g20gdHJhIGdpw6EgdHLhu4sgMFxuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBnacOhIHRy4buLIGzDoCBudWxsLCBy4buXbmcsIHVuZGVmaW5lZCBob+G6t2MgMCwgZmFsc2UgbuG6v3Uga2jDtG5nXG4gKiBAZXhhbXBsZVxuICogaXNGYWxzeShudWxsKTsgLy8gdHJ1ZVxuICogaXNGYWxzeSgnJyk7IC8vIHRydWVcbiAqIGlzRmFsc3kodW5kZWZpbmVkKTsgLy8gdHJ1ZVxuICogaXNGYWxzeSgwKTsgLy8gdHJ1ZVxuICogaXNGYWxzeSh7fSk7IC8vIGZhbHNlXG4gKiBpc0ZhbHN5KDAsIHsgaWdub3JlWmVybzogdHJ1ZSB9KTsgLy8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRmFsc3kgPSAodmFsdWU6IHVua25vd24sIG9wdGlvbnM/OiB7IGlnbm9yZVplcm8/OiBib29sZWFuOyBpZ25vcmVDaGVja1N0cmluZz86IGJvb2xlYW47IGlnbm9yZVVuV3JhcFNpZ25hbD86IGJvb2xlYW4gfSk6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgfCAnJyB8IDAgPT4ge1xuICBpZiAoIW9wdGlvbnM/Lmlnbm9yZVVuV3JhcFNpZ25hbCkge1xuICAgIHZhbHVlID0gdW53cmFwU2lnbmFsKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy5pZ25vcmVaZXJvICYmIHZhbHVlID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG9wdGlvbnM/Lmlnbm9yZUNoZWNrU3RyaW5nICYmIHZhbHVlID09PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAhdmFsdWU7XG59O1xuXG4vKipcbiAqIExv4bqhaSBi4buPIGPDoWMgdGh14buZYyB0w61uaCBj4bunYSDEkeG7kWkgdMaw4bujbmcgZOG7sWEgdHLDqm4gbeG7mXQgaMOgbSDEkWnhu4F1IGtp4buHblxuICogQHBhcmFtIG9iakRhdGEgxJDhu5FpIHTGsOG7o25nIGPhuqduIHjhu60gbMO9XG4gKiBAcGFyYW0gcHJlZGljYXRlIEjDoG0gxJFp4buBdSBraeG7h24gxJHhu4Mga2nhu4NtIHRyYSBnacOhIHRy4buLIGPhu6dhIHRodeG7mWMgdMOtbmguIE7hur91IGjDoG0gdHLhuqMgduG7gSB0cnVlIHRow6wgdGh14buZYyB0w61uaCDEkcOzIHPhur0gYuG7iyBsb+G6oWkgYuG7j1xuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIG3hu5tpIHNhdSBraGkgxJHDoyBsb+G6oWkgYuG7jyBjw6FjIHRodeG7mWMgdMOtbmggdGjhu49hIG3Do24gxJFp4buBdSBraeG7h25cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvYmogPSB7IGE6IDEsIGI6IG51bGwsIGM6IDMsIGQ6IHVuZGVmaW5lZCB9O1xuICogb21pdEJ5KG9iaiwgaXNOaWwpOyAvLyB7IGE6IDEsIGM6IDMgfVxuICovXG5leHBvcnQgY29uc3Qgb21pdEJ5ID0gPFQ+KG9iakRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sIHByZWRpY2F0ZTogKHZhbDogYW55KSA9PiBib29sZWFuKTogVCA9PiB7XG4gIGlmICghb2JqRGF0YSB8fCB0eXBlb2Ygb2JqRGF0YSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvYmpEYXRhKSkge1xuICAgIHJldHVybiBvYmpEYXRhIGFzIFQ7XG4gIH1cbiAgY29uc3QgbmV3T2JqID0ge30gYXMgVDtcblxuICBPYmplY3Qua2V5cyhvYmpEYXRhKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZU9mS2V5ID0gZ2V0KG9iakRhdGEsIGtleSk7XG4gICAgaWYgKCFwcmVkaWNhdGUodmFsdWVPZktleSkpIHtcbiAgICAgIHNldChuZXdPYmosIGtleSBhcyBQYXRoT2Y8VD4sIHZhbHVlT2ZLZXkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdPYmo7XG59O1xuXG4vKipcbiAqIEzhuqV5IGdpw6EgdHLhu4sgdOG7qyDEkeG7kWkgdMaw4bujbmcgdGhlbyDEkcaw4budbmcgZOG6q24gY2jhu4kgxJHhu4tuaFxuICpcbiAqIEjDoG0gbsOgeSBnacO6cCBi4bqhbiB0cnV5IGPhuq1wIHbDoG8gY8OhYyB0aHXhu5ljIHTDrW5oIHPDonUgYsOqbiB0cm9uZyBt4buZdCDEkeG7kWkgdMaw4bujbmcgbeG7mXQgY8OhY2ggYW4gdG/DoG4sXG4gKiB0csOhbmggbOG7l2kga2hpIHRodeG7mWMgdMOtbmgga2jDtG5nIHThu5NuIHThuqFpLlxuICpcbiAqIEBwYXJhbSBvYmogxJDhu5FpIHTGsOG7o25nIG5ndeG7k24gY+G6p24gbOG6pXkgZ2nDoSB0cuG7i1xuICogQHBhcmFtIHBhdGggxJDGsOG7nW5nIGThuqtuIMSR4bq/biB0aHXhu5ljIHTDrW5oIGPhuqduIGzhuqV5LiBDw7MgdGjhu4MgbMOgOlxuICogICAtIENodeG7l2k6ICd1c2VyLnByb2ZpbGUubmFtZScgaG/hurdjICdpdGVtc1swXS50aXRsZSdcbiAqICAgLSBN4bqjbmc6IFsndXNlcicsICdwcm9maWxlJywgJ25hbWUnXSBob+G6t2MgWydpdGVtcycsICcwJywgJ3RpdGxlJ11cbiAqICAgLSBDaHXhu5dpIHLhu5duZyAnJzogdHLhuqMgduG7gSBjaMOtbmggxJHhu5FpIHTGsOG7o25nIGfhu5FjXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIEdpw6EgdHLhu4sgbeG6t2MgxJHhu4tuaCB0cuG6oyB24buBIGtoaSBraMO0bmcgdMOsbSB0aOG6pXkgdGh14buZYyB0w61uaCAobeG6t2MgxJHhu4tuaDogdW5kZWZpbmVkKVxuICogQHBhcmFtIGtlZXBMYXN0VmFsdWVJZlNpZ25hbCBDw7MgZ2nhu68gbmd1ecOqbiBzaWduYWwgY3Xhu5FpIGPDuW5nIGhheSBraMO0bmcgKG3hurdjIMSR4buLbmg6IGZhbHNlIC0gc+G6vSBn4buNaSBzaWduYWwoKSlcbiAqIEByZXR1cm5zIEdpw6EgdHLhu4sgdMOsbSDEkcaw4bujYyBob+G6t2MgZ2nDoSB0cuG7iyBt4bq3YyDEkeG7i25oXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFbDrSBk4bulIGPGoSBi4bqjblxuICogY29uc3QgdXNlciA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwIH07XG4gKiBnZXQodXNlciwgJ25hbWUnKTsgLy8gJ0pvaG4nXG4gKiBnZXQodXNlciwgJ2VtYWlsJyk7IC8vIHVuZGVmaW5lZFxuICogZ2V0KHVzZXIsICdlbWFpbCcsICduby1lbWFpbCcpOyAvLyAnbm8tZW1haWwnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRydXnhu4FuIHBhdGggcuG7l25nIC0gdHLhuqMgduG7gSBjaMOtbmggxJHhu5FpIHTGsOG7o25nIGfhu5FjXG4gKiBjb25zdCBkYXRhID0geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDI1IH07XG4gKiBnZXQoZGF0YSwgJycpOyAvLyB7IG5hbWU6ICdBbGljZScsIGFnZTogMjUgfSAoY2jDrW5oIMSR4buRaSB0xrDhu6NuZyBkYXRhKVxuICogZ2V0KGRhdGEsICcnLCAnZGVmYXVsdCcpOyAvLyB7IG5hbWU6ICdBbGljZScsIGFnZTogMjUgfSAoYuG7jyBxdWEgZGVmYXVsdFZhbHVlKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUcnV5IGPhuq1wIHRodeG7mWMgdMOtbmggc8OidVxuICogY29uc3QgZGF0YSA9IHtcbiAqICAgdXNlcjoge1xuICogICAgIHByb2ZpbGU6IHtcbiAqICAgICAgIG5hbWU6ICdBbGljZScsXG4gKiAgICAgICBzZXR0aW5nczogeyB0aGVtZTogJ2RhcmsnIH1cbiAqICAgICB9XG4gKiAgIH1cbiAqIH07XG4gKiBnZXQoZGF0YSwgJ3VzZXIucHJvZmlsZS5uYW1lJyk7IC8vICdBbGljZSdcbiAqIGdldChkYXRhLCAndXNlci5wcm9maWxlLnNldHRpbmdzLnRoZW1lJyk7IC8vICdkYXJrJ1xuICogZ2V0KGRhdGEsICd1c2VyLnByb2ZpbGUuYXZhdGFyJywgJ2RlZmF1bHQuanBnJyk7IC8vICdkZWZhdWx0LmpwZydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVHJ1eSBj4bqtcCBt4bqjbmdcbiAqIGNvbnN0IGl0ZW1zID0gW1xuICogICB7IG5hbWU6ICdJdGVtIDEnLCBwcmljZTogMTAwIH0sXG4gKiAgIHsgbmFtZTogJ0l0ZW0gMicsIHByaWNlOiAyMDAgfVxuICogXTtcbiAqIGdldChpdGVtcywgJ1swXS5uYW1lJyk7IC8vICdJdGVtIDEnXG4gKiBnZXQoaXRlbXMsICdbMV0ubmFtZScpOyAvLyAnSXRlbSAyJ1xuICogZ2V0KGl0ZW1zLCAnWzJdLm5hbWUnLCAnTm90IGZvdW5kJyk7IC8vICdOb3QgZm91bmQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFPhu60gZOG7pW5nIHbhu5tpIG3huqNuZyBwYXRoXG4gKiBjb25zdCBuZXN0ZWQgPSB7IGE6IHsgYjogeyBjOiAnZGVlcCB2YWx1ZScgfSB9IH07XG4gKiBnZXQobmVzdGVkLCBbJ2EnLCAnYicsICdjJ10pOyAvLyAnZGVlcCB2YWx1ZSdcbiAqIGdldChuZXN0ZWQsIFsnYScsICdiJywgJ2QnXSwgJ2RlZmF1bHQnKTsgLy8gJ2RlZmF1bHQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRyxrDhu51uZyBo4bujcCDEkeG6t2MgYmnhu4d0XG4gKiBnZXQobnVsbCwgJ2FueS5wYXRoJyk7IC8vIHVuZGVmaW5lZFxuICogZ2V0KHVuZGVmaW5lZCwgJ2FueS5wYXRoJywgJ2ZhbGxiYWNrJyk7IC8vICdmYWxsYmFjaydcbiAqL1xuZXhwb3J0IGNvbnN0IGdldCA9IDxPLCBQIGV4dGVuZHMgUGF0aE9mPE8+ID0gUGF0aE9mPE8+LCBLUyBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZSwgRCBleHRlbmRzIEdldFZhbHVlQXRQYXRoPE8sIFAsIEtTPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gIG9iajogU2lnbmFsPE8+IHwgTyxcbiAgcGF0aDogUCxcbiAgZGVmYXVsdFZhbHVlPzogRCxcbiAga2VlcExhc3RWYWx1ZUlmU2lnbmFsPzogS1Ncbik6IEdldFJldHVyblR5cGU8TywgUCwgS1MsIEQ+ID0+IHtcbiAgLy8gaGVscGVyIGNhc3QgxJHhu4MgdHLDoW5oIGzhurdwIGzhuqFpIGtp4buDdSDEkWnhu4F1IGtp4buHbiDhu58gY8OhYyByZXR1cm5cbiAgY29uc3Qgb3V0ID0gKHY6IHVua25vd24pID0+IHYgYXMgR2V0UmV0dXJuVHlwZTxPLCBQLCBLUywgRD47XG5cbiAgaWYgKGlzTmlsKG9iaikpIHtcbiAgICByZXR1cm4gb3V0KGRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgb2JqID0gdW53cmFwU2lnbmFsKG9iaik7XG4gIGlmIChwYXRoID09PSAnJykge1xuICAgIHJldHVybiBvdXQob2JqKTtcbiAgfVxuICBpZiAob2JqIGluc3RhbmNlb2YgSHR0cFBhcmFtcykge1xuICAgIHJldHVybiBvdXQob2JqLmdldChgJHtwYXRofWApID8/IGRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIERPTVJlY3QpIHtcbiAgICByZXR1cm4gb3V0KG9ialtwYXRoIGFzIGtleW9mIERPTVJlY3RdKTtcbiAgfVxuXG4gIGNvbnN0IHBhdGhzID0gQXJyYXkuaXNBcnJheShwYXRoKVxuICAgID8gcGF0aFxuICAgIDogKHBhdGggYXMgc3RyaW5nKVxuICAgICAgICAucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnLiQxJylcbiAgICAgICAgLnNwbGl0KCcuJylcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkpO1xuXG4gIGZvciAoY29uc3QgaW5kZXggaW4gcGF0aHMpIHtcbiAgICBjb25zdCBrZXkgPSBwYXRoc1tpbmRleF07XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIENTU1N0eWxlRGVjbGFyYXRpb24pIHtcbiAgICAgIG9iaiA9IG9ialtrZXkgYXMga2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvbl0gYXMgTztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgb2JqID0gb2JqW2tleSBhcyBrZXlvZiBIVE1MRWxlbWVudF0gYXMgTztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBvYmogPSB1bndyYXBTaWduYWwob2JqKTtcbiAgICBpZiAoaXNOaWwob2JqKSB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgcmV0dXJuIG91dChkZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCB2YWwgPSBpc1NpZ25hbCgob2JqIGFzIGFueSlba2V5XSkgJiYgIWtlZXBMYXN0VmFsdWVJZlNpZ25hbCA/IChvYmogYXMgYW55KVtrZXldKCkgOiAob2JqIGFzIGFueSlba2V5XTtcblxuICAgIG9iaiA9IHZhbCBhcyBPO1xuICB9XG5cbiAgcmV0dXJuIG91dChvYmogPz8gZGVmYXVsdFZhbHVlKTtcbn07XG5cbi8qKlxuICogVGhp4bq/dCBs4bqtcCBnacOhIHRy4buLIGNobyBt4buZdCB0aHXhu5ljIHTDrW5oIHRyb25nIMSR4buRaSB0xrDhu6NuZyB0aGVvIMSRxrDhu51uZyBk4bqrbiBjaOG7iSDEkeG7i25oXG4gKiBAcGFyYW0gb2JqIMSQ4buRaSB0xrDhu6NuZyBj4bqnbiB0aGnhur90IGzhuq1wIGdpw6EgdHLhu4tcbiAqIEBwYXJhbSBwYXRoIMSQxrDhu51uZyBk4bqrbiDEkeG6v24gdGh14buZYyB0w61uaCwgY8OzIHRo4buDIGzDoCBjaHXhu5dpICh2ZDogJ2EuYi5jJykgaG/hurdjIG3huqNuZyAodmQ6IFsnYScsICdiJywgJ2MnXSlcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIHRoaeG6v3QgbOG6rXBcbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyBzYXUga2hpIMSRw6MgdGhp4bq/dCBs4bqtcCBnacOhIHRy4buLXG4gKiBAdGhyb3dzIEVycm9yIG7hur91IHRoYW0gc+G7kSDEkeG6p3UgdGnDqm4ga2jDtG5nIHBo4bqjaSBsw6AgxJHhu5FpIHTGsOG7o25nXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb2JqID0geyBhOiB7IGI6IDEgfSB9O1xuICogc2V0KG9iaiwgJ2EuYicsIDIpOyAvLyB7IGE6IHsgYjogMiB9IH1cbiAqL1xuZXhwb3J0IGNvbnN0IHNldCA9IDxPLCBQIGV4dGVuZHMgUGF0aE9mPE8+ID0gUGF0aE9mPE8+LCBUIGV4dGVuZHMgR2V0VmFsdWVBdFBhdGg8TywgUCwgdHJ1ZT4gPSBHZXRWYWx1ZUF0UGF0aDxPLCBQLCB0cnVlPj4oXG4gIG9iajogU2lnbmFsPE8+IHwgTyxcbiAgcGF0aDogUCxcbiAgdmFsdWU6IFQsXG4gIG9wdGlvbnM/OiB7IHZhbHVlRGVmYXVsdFBhdGhPYmplY3RVbmRlZmluZWQ/OiBhbnk7IHZhbHVlRGVmYXVsdFBhdGhBcnJheVVuZGVmaW5lZD86IGFueSB9XG4pOiBPID0+IHtcbiAgaWYgKCFvYmogfHwgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnICYmICFpc1NpZ25hbChvYmopKSB8fCAoaXNTaWduYWwob2JqKSAmJiB0eXBlb2Ygb2JqKCkgIT09ICdvYmplY3QnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBpZiAob2JqIGluc3RhbmNlb2YgSHR0cFBhcmFtcykge1xuICAgIHJldHVybiBvYmouc2V0KGAke3BhdGh9YCwgdmFsdWUgYXMgc3RyaW5nKSBhcyBPO1xuICB9XG5cbiAgY29uc3QgcGF0aEFycmF5ID0gQXJyYXkuaXNBcnJheShwYXRoKVxuICAgID8gcGF0aFxuICAgIDogKHBhdGggYXMgc3RyaW5nKVxuICAgICAgICAucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnLlskMV0nKVxuICAgICAgICAuc3BsaXQoJy4nKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleSk7XG5cbiAgbGV0IGN1cnJlbnRPYmplY3RCeUtleTogYW55ID0gaXNTaWduYWwob2JqKSA/IG9iaigpIDogb2JqO1xuICBsZXQgcHJlT2JqZWN0QnlLZXkgPSBvYmo7XG5cbiAgcGF0aEFycmF5LmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPCBwYXRoQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgaWYgKCEoa2V5IGluIGN1cnJlbnRPYmplY3RCeUtleSkgfHwgKHR5cGVvZiBjdXJyZW50T2JqZWN0QnlLZXlba2V5XSAhPT0gJ29iamVjdCcgJiYgIWlzU2lnbmFsKGN1cnJlbnRPYmplY3RCeUtleVtrZXldKSkpIHtcbiAgICAgICAgY29uc3QgbmV4dEtleSA9IHBhdGhBcnJheVtpbmRleCArIDFdO1xuICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnJDEnKTtcbiAgICAgICAgaWYgKGlzTmlsKGN1cnJlbnRPYmplY3RCeUtleVtrZXldKSkge1xuICAgICAgICAgIGN1cnJlbnRPYmplY3RCeUtleVtrZXldID0gL1xcWyhcXGQrKV0vZy50ZXN0KG5leHRLZXkpID8gKG9wdGlvbnM/LnZhbHVlRGVmYXVsdFBhdGhBcnJheVVuZGVmaW5lZCA/PyBbXSkgOiAob3B0aW9ucz8udmFsdWVEZWZhdWx0UGF0aE9iamVjdFVuZGVmaW5lZCA/PyB7fSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGN1cnJlbnRPYmplY3RCeUtleSA9IGtleSA/IGN1cnJlbnRPYmplY3RCeUtleVtrZXldIDogY3VycmVudE9iamVjdEJ5S2V5O1xuICAgICAgcHJlT2JqZWN0QnlLZXkgPSBjdXJyZW50T2JqZWN0QnlLZXk7XG4gICAgICBjdXJyZW50T2JqZWN0QnlLZXkgPSBpc1NpZ25hbChjdXJyZW50T2JqZWN0QnlLZXkpID8gY3VycmVudE9iamVjdEJ5S2V5KCkgOiBjdXJyZW50T2JqZWN0QnlLZXk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50T2JqZWN0QnlLZXkgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR8OhbiBnacOhIHRy4buLIOG7nyBjdeG7kWkgxJHGsOG7nW5nIGThuqtuXG4gICAga2V5ID0ga2V5LnJlcGxhY2UoL1xcWyhcXGQrKV0vZywgJyQxJyk7XG4gICAgY29uc3QgdmFsdWVPZktleSA9IGN1cnJlbnRPYmplY3RCeUtleVtrZXldO1xuICAgIGNvbnN0IHZhbHVlT2ZLZXlJc1NpZ25hbCA9IGlzU2lnbmFsKHZhbHVlT2ZLZXkpO1xuXG4gICAgaWYgKHZhbHVlT2ZLZXlJc1NpZ25hbCAmJiAodHlwZW9mIHZhbHVlT2ZLZXkoKSAhPT0gJ29iamVjdCcgfHwgdmFsdWVPZktleSgpID09PSBudWxsKSkge1xuICAgICAgKHZhbHVlT2ZLZXkgYXMgV3JpdGFibGVTaWduYWw8YW55Pikuc2V0KGlzU2lnbmFsKHZhbHVlKSA/IHZhbHVlKCkgOiB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc1NpZ25hbChwcmVPYmplY3RCeUtleSkpIHtcbiAgICAgIChwcmVPYmplY3RCeUtleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS51cGRhdGUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhT2ZLZXkgPSBkYXRhW2tleV07XG4gICAgICAgIGlmIChpc05pbChkYXRhT2ZLZXkpIHx8ICF2YWx1ZU9mS2V5SXNTaWduYWwpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZU9mS2V5SXNTaWduYWwpIHtcbiAgICAgICAgICAodmFsdWVPZktleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS5zZXQoaXNTaWduYWwodmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuIFsuLi5kYXRhXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5kYXRhIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlT2ZLZXlJc1NpZ25hbCkge1xuICAgICAgKHZhbHVlT2ZLZXkgYXMgV3JpdGFibGVTaWduYWw8YW55Pikuc2V0KGlzU2lnbmFsKHZhbHVlKSA/IHZhbHVlKCkgOiB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnJlbnRPYmplY3RCeUtleVtrZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIHJldHVybiBvYmogYXMgTztcbn07XG5cbi8qKlxuICogVOG6oW8gbeG7mXQgYuG6o24gc2FvIHPDonUgY+G7p2EgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGhv4bq3YyBnacOhIHRy4buLIGLhuqV0IGvhu7NcbiAqIEBwYXJhbSBkYXRhIEThu68gbGnhu4d1IGPhuqduIHNhbyBjaMOpcFxuICogQHBhcmFtIG9wdGlvbnMgVMO5eSBjaOG7jW4gY+G6pXUgaMOsbmhcbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZVNpZ25hbCBO4bq/dSB0cnVlLCBz4bq9IGtow7RuZyBzYW8gY2jDqXAgY8OhYyBzaWduYWwgbcOgIHRy4bqjIHbhu4Egc2lnbmFsIGfhu5FjXG4gKiBAcGFyYW0gc2VlbiBXZWFrTWFwIMSR4buDIHRoZW8gZMO1aSBjw6FjIHRoYW0gY2hp4bq/dSDEkcOjIMSRxrDhu6NjIHNhbyBjaMOpcCwgdHLDoW5oIGzhurdwIHbDtCBo4bqhbiB24bubaSBjw6FjIHRoYW0gY2hp4bq/dSB2w7JuZ1xuICogQHJldHVybnMgQuG6o24gc2FvIHPDonUgY+G7p2EgZOG7ryBsaeG7h3UgxJHhuqd1IHbDoG9cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvYmogPSB7XG4gKiAgIGE6IDEsXG4gKiAgIGI6IHsgYzogMiB9LFxuICogICBkOiBbMSwgMiwgM11cbiAqIH07XG4gKiBjb25zdCBjbG9uZSA9IGNsb25lRGVlcChvYmopO1xuICogLy8gY2xvbmUgbMOgIG3hu5l0IGLhuqNuIHNhbyBob8OgbiB0b8OgbiDEkeG7mWMgbOG6rXAgY+G7p2Egb2JqXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZURlZXAgPSA8VCA9IGFueT4oZGF0YTogYW55LCBvcHRpb25zID0geyBpZ25vcmVTaWduYWw6IGZhbHNlIH0sIHNlZW4gPSBuZXcgV2Vha01hcCgpKTogVCA9PiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8ICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgJiYgIWlzU2lnbmFsKGRhdGEpKSB8fCBpc0Rhbmdlcm91c09iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKHNlZW4uaGFzKGRhdGEpKSB7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHVuZGVmaW5lZCwgZGF0YSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRhLmdldFRpbWUoKSkgYXMgVDtcbiAgfVxuXG4gIGlmIChpc0RheWpzT2JqZWN0KGRhdGEpKSB7XG4gICAgcmV0dXJuIGdldERheWpzKHsgZGF0ZTogZGF0YS52YWx1ZU9mKCkgfSkgYXMgVDtcbiAgfVxuXG4gIGlmIChpc1JlZ0V4cChkYXRhKSkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGRhdGEuc291cmNlLCBkYXRhLmZsYWdzKSBhcyBUO1xuICB9XG5cbiAgaWYgKGlzTWFwKGRhdGEpKSB7XG4gICAgY29uc3QgbWFwQ29weSA9IG5ldyBNYXAoKTtcbiAgICBzZWVuLnNldChkYXRhLCBtYXBDb3B5KTtcbiAgICBkYXRhLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICBtYXBDb3B5LnNldChjbG9uZURlZXAoa2V5LCBvcHRpb25zLCBzZWVuKSwgY2xvbmVEZWVwKHZhbCwgb3B0aW9ucywgc2VlbikpO1xuICAgIH0pO1xuICAgIHJldHVybiBtYXBDb3B5IGFzIFQ7XG4gIH1cblxuICBpZiAoaXNTZXQoZGF0YSkpIHtcbiAgICBjb25zdCBzZXRDb3B5ID0gbmV3IFNldCgpO1xuICAgIHNlZW4uc2V0KGRhdGEsIHNldENvcHkpO1xuICAgIGRhdGEuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBzZXRDb3B5LmFkZChjbG9uZURlZXAodmFsLCBvcHRpb25zLCBzZWVuKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldENvcHkgYXMgVDtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgc2Vlbi5zZXQoZGF0YSwgZGF0YS5tYXAoKGl0ZW0pID0+IGNsb25lRGVlcChpdGVtLCBvcHRpb25zLCBzZWVuKSkgYXMgVCk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpIGFzIFQ7XG4gIH1cblxuICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgfVxuXG4gIGlmIChpc1NpZ25hbChkYXRhKSkge1xuICAgIGlmIChvcHRpb25zPy5pZ25vcmVTaWduYWwpIHtcbiAgICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gICAgfVxuICAgIHNlZW4uc2V0KGRhdGEsIHNpZ25hbChjbG9uZURlZXAoZGF0YSgpLCBvcHRpb25zLCBzZWVuKSkpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKSBhcyBUO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHNlZW4uc2V0KGRhdGEsIHJlc3VsdCk7XG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHVuZGVmaW5lZCwgdmFsdWUpIGFzIFQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBEYXRlKHZhbHVlLmdldFRpbWUoKSkgYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChkYXlqcy5pc0RheWpzKHZhbHVlKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBnZXREYXlqcyh7IGRhdGU6IHZhbHVlLnZhbHVlT2YoKSB9KSBhcyBUO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGlzUmVnRXhwKGRhdGEpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBSZWdFeHAodmFsdWUuc291cmNlLCB2YWx1ZS5mbGFncykgYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KGRhdGEpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGNsb25lRGVlcCh2YWx1ZSwgb3B0aW9ucywgc2Vlbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBUO1xufTtcblxuLyoqXG4gKiBDaHV54buDbiDEkeG7lWkgbeG7mXQgbeG6o25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRow6BuaCBt4buZdCDEkeG7kWkgdMaw4bujbmcgduG7m2kga2jDs2EgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaFxuICogQHBhcmFtIGRhdGEgTeG6o25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIGPhuqduIGNodXnhu4NuIMSR4buVaVxuICogQHBhcmFtIGtleSBUw6puIHRodeG7mWMgdMOtbmggxJHGsOG7o2Mgc+G7rSBk4bulbmcgbMOgbSBraMOzYSB0cm9uZyDEkeG7kWkgdMaw4bujbmcga+G6v3QgcXXhuqNcbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyB24bubaSBjw6FjIGdpw6EgdHLhu4sgdOG7qyBt4bqjbmcgxJHGsOG7o2MgxJHDoW5oIGtleSB0aGVvIHRodeG7mWMgdMOtbmggxJHDoyBjaOG7iSDEkeG7i25oXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IFtcbiAqICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAgIHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9XG4gKiBdO1xuICoga2V5QnkoZGF0YSwgJ2lkJyk7XG4gKiAvLyBL4bq/dCBxdeG6ozoge1xuICogLy8gICAnMSc6IHsgaWQ6IDEsIG5hbWU6ICdKb2huJyB9LFxuICogLy8gICAnMic6IHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9XG4gKiAvLyB9XG4gKi9cbmV4cG9ydCBjb25zdCBrZXlCeSA9IChkYXRhOiBBcnJheTxUWVBFX09CSkVDVD4sIGtleTogc3RyaW5nKTogVFlQRV9PQkpFQ1QgPT4ge1xuICBpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoIHx8ICFrZXkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIGRhdGEucmVkdWNlKChkaXIsIG5leHRJdGVtKSA9PiB7XG4gICAgY29uc3QgdmFsdWVPZktleSA9IGdldChuZXh0SXRlbSwga2V5IGFzIFBhdGhPZjxUWVBFX09CSkVDVD4pO1xuICAgIGlmICh0eXBlb2YgdmFsdWVPZktleSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMoZGlyKS5pbmNsdWRlcyhgJHt2YWx1ZU9mS2V5fWApKSB7XG4gICAgICBkaXJbYCR7dmFsdWVPZktleX1gXSA9IG5leHRJdGVtO1xuICAgIH1cbiAgICByZXR1cm4gZGlyO1xuICB9LCB7fSk7XG59O1xuXG4vKipcbiAqIE5ow7NtIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRyb25nIG3hu5l0IG3huqNuZyB0aMOgbmggY8OhYyBuaMOzbSBk4buxYSB0csOqbiBt4buZdCB0aHXhu5ljIHTDrW5oIGPhu6UgdGjhu4NcbiAqIEBwYXJhbSBkYXRhIE3huqNuZyBjw6FjIMSR4buRaSB0xrDhu6NuZyBj4bqnbiBuaMOzbVxuICogQHBhcmFtIGtleSBUw6puIHRodeG7mWMgdMOtbmggxJHGsOG7o2Mgc+G7rSBk4bulbmcgbMOgbSBraMOzYSBuaMOzbVxuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIHbhu5tpIGPDoWMgZ2nDoSB0cuG7iyB04burIG3huqNuZyDEkcaw4bujYyBuaMOzbSB0aGVvIHRodeG7mWMgdMOtbmggxJHDoyBjaOG7iSDEkeG7i25oXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IFtcbiAqICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAgIHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9LFxuICogICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfVxuICogXTtcbiAqIGdyb3VwQnkoZGF0YSwgJ2lkJyk7XG4gKiAvLyBL4bq/dCBxdeG6ozoge1xuICogLy8gICAnMSc6IFtcbiAqIC8vICAgICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfSxcbiAqIC8vICAgICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfVxuICogLy8gICBdLFxuICogLy8gICAnMic6IFtcbiAqIC8vICAgICB7IGlkOiAyLCBuYW1lOiAnSmFuZScgfVxuICogLy8gfVxuICovXG5leHBvcnQgY29uc3QgZ3JvdXBCeSA9IChkYXRhOiBBcnJheTxUWVBFX09CSkVDVD4sIGtleTogc3RyaW5nKTogVFlQRV9PQkpFQ1QgPT4ge1xuICBpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoIHx8ICFPYmplY3Qua2V5cyhnZXQoZGF0YSwgJ1swXScpKS5sZW5ndGggfHwgIWtleSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICByZXR1cm4gZGF0YS5yZWR1Y2UoKGRpciwgbmV4dEl0ZW0pID0+IHtcbiAgICBjb25zdCB2YWx1ZU9mS2V5ID0gZ2V0KG5leHRJdGVtLCBrZXkgYXMgUGF0aE9mPFRZUEVfT0JKRUNUPik7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWVPZktleSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhkaXIpLmluY2x1ZGVzKGAke3ZhbHVlT2ZLZXl9YCkpIHtcbiAgICAgIGRpcltgJHt2YWx1ZU9mS2V5fWBdID0gW107XG4gICAgfVxuICAgIGRpcltgJHt2YWx1ZU9mS2V5fWBdLnB1c2gobmV4dEl0ZW0pO1xuICAgIHJldHVybiBkaXI7XG4gIH0sIHt9KTtcbn07XG5cbi8qKlxuICogVOG6oW8gbeG7mXQgbeG6o25nIGPDoWMgc+G7kSB04burIGdpw6EgdHLhu4sgYuG6r3QgxJHhuqd1IMSR4bq/biBnacOhIHRy4buLIGvhur90IHRow7pjIHbhu5tpIGLGsOG7m2MgbmjhuqN5IHTDuXkgY2jhu41uXG4gKiBAcGFyYW0gc3RhcnQgR2nDoSB0cuG7iyBi4bqvdCDEkeG6p3UgY+G7p2EgZMOjeSBz4buRLiBO4bq/dSBjaOG7iSBjw7MgbeG7mXQgdGhhbSBz4buRLCDEkcOieSBz4bq9IGzDoCBnacOhIHRy4buLIGvhur90IHRow7pjIHbDoCBnacOhIHRy4buLIGLhuq90IMSR4bqndSBz4bq9IGzDoCAwXG4gKiBAcGFyYW0gZW5kIEdpw6EgdHLhu4sga+G6v3QgdGjDumMgY+G7p2EgZMOjeSBz4buRICh0w7l5IGNo4buNbilcbiAqIEBwYXJhbSBzdGVwIELGsOG7m2MgbmjhuqN5IGdp4buvYSBjw6FjIHPhu5EgdHJvbmcgZMOjeSAodMO5eSBjaOG7jW4pLiBN4bq3YyDEkeG7i25oIGzDoCAxIG7hur91IGVuZCA+IHN0YXJ0LCAtMSBu4bq/dSBlbmQgPCBzdGFydFxuICogQHJldHVybnMgTeG6o25nIGPDoWMgc+G7kSB04burIHN0YXJ0IMSR4bq/biBlbmQgduG7m2kgYsaw4bubYyBuaOG6o3kgc3RlcFxuICogQGV4YW1wbGVcbiAqIHJhbmdlKDQpOyAgICAgIC8vIFswLCAxLCAyLCAzXVxuICogcmFuZ2UoMSwgNSk7ICAgLy8gWzEsIDIsIDMsIDRdXG4gKiByYW5nZSgwLCAyMCwgNSk7IC8vIFswLCA1LCAxMCwgMTVdXG4gKiByYW5nZSg1LCAyKTsgICAvLyBbNSwgNCwgM11cbiAqL1xuZXhwb3J0IGNvbnN0IHJhbmdlID0gKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlciwgc3RlcD86IG51bWJlcik6IEFycmF5PG51bWJlcj4gPT4ge1xuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID09PSBudWxsKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSAwO1xuICB9XG5cbiAgaWYgKCFzdGVwKSB7XG4gICAgc3RlcCA9IGVuZCA8IDAgPyAtMSA6IDE7XG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQgJiYgc3RlcCA+IDApIHtcbiAgICBzdGVwICo9IC0xO1xuICB9XG5cbiAgY29uc3QgdmFsdWVTdGFydEJ5U3RlcCA9IHN0ZXAgKyBzdGFydDtcbiAgY29uc3QgZGlyZWN0aW9uID0gc3RhcnQgPCBlbmQgPyAnYXNjJyA6ICdkZXNjJztcbiAgaWYgKChkaXJlY3Rpb24gPT09ICdhc2MnICYmICh2YWx1ZVN0YXJ0QnlTdGVwIDwgc3RhcnQgfHwgdmFsdWVTdGFydEJ5U3RlcCA+IGVuZCkpIHx8IChkaXJlY3Rpb24gPT09ICdkZXNjJyAmJiAodmFsdWVTdGFydEJ5U3RlcCA+IHN0YXJ0IHx8IHZhbHVlU3RhcnRCeVN0ZXAgPCBlbmQpKSkge1xuICAgIHJldHVybiBbc3RhcnRdO1xuICB9XG5cbiAgY29uc3QgYXJyID0gbmV3IEFycmF5PG51bWJlcj4oKTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5hYnMoZW5kIC0gc3RhcnQpOyBpbmRleCsrKSB7XG4gICAgbGV0IHZhbHVlID0gc3RhcnQgKyBpbmRleCAqIHN0ZXA7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIGlmICgoZGlyZWN0aW9uID09PSAnYXNjJyAmJiAodmFsdWUgPCBzdGFydCB8fCB2YWx1ZSA+IGVuZCkpIHx8IChkaXJlY3Rpb24gPT09ICdkZXNjJyAmJiAodmFsdWUgPiBzdGFydCB8fCB2YWx1ZSA8IGVuZCkpKSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH1cblxuICAgIGFyci5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIFNvIHPDoW5oIGhhaSBnacOhIHRy4buLIGLhuqV0IGvhu7MgY8OzIGLhurFuZyBuaGF1IGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZTEgR2nDoSB0cuG7iyB0aOG7qSBuaOG6pXQgY+G6p24gc28gc8OhbmhcbiAqIEBwYXJhbSB2YWx1ZTIgR2nDoSB0cuG7iyB0aOG7qSBoYWkgY+G6p24gc28gc8OhbmhcbiAqIEBwYXJhbSBleGFjdGx5UG9zaXRpb24gQ8OzIHNvIHPDoW5oIGNow61uaCB4w6FjIHbhu4sgdHLDrSBjw6FjIHBo4bqnbiB04butIHRyb25nIG3huqNuZyBoYXkga2jDtG5nXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGhhaSBnacOhIHRy4buLIGLhurFuZyBuaGF1LCBmYWxzZSBu4bq/dSBraMO0bmcgYuG6sW5nIG5oYXVcbiAqIEBleGFtcGxlXG4gKiBpc0VxdWFsKFsxLDIsM10sIFsxLDIsM10pOyAvLyB0cnVlXG4gKiBpc0VxdWFsKFsxLDIsM10sIFszLDIsMV0pOyAvLyB0cnVlIGtoaSBleGFjdGx5UG9zaXRpb24gPSBmYWxzZVxuICogaXNFcXVhbChbMSwyLDNdLCBbMywyLDFdKTsgLy8gZmFsc2Uga2hpIGV4YWN0bHlQb3NpdGlvbiA9IHRydWVcbiAqIGlzRXF1YWwoe2E6MX0sIHthOjF9KTsgLy8gdHJ1ZVxuICovXG5leHBvcnQgY29uc3QgaXNFcXVhbCA9IChcbiAgdmFsdWUxOiBhbnksXG4gIHZhbHVlMjogYW55LFxuICBvcHRpb25zPzoge1xuICAgIGV4YWN0bHlQb3NpdGlvbj86IGJvb2xlYW47XG4gICAgaWdub3JlRXhhY3RseURhdGFUeXBlPzogYm9vbGVhbjtcbiAgICBpZ25vcmVVbldyYXBTaWduYWw/OiBib29sZWFuO1xuICB9XG4pOiBib29sZWFuID0+IHtcbiAgLy8gSGFuZGxlIHNpZ25hbHNcbiAgaWYgKCFvcHRpb25zPy5pZ25vcmVVbldyYXBTaWduYWwpIHtcbiAgICB2YWx1ZTEgPSB1bndyYXBTaWduYWwodmFsdWUxKTtcbiAgICB2YWx1ZTIgPSB1bndyYXBTaWduYWwodmFsdWUyKTtcbiAgfVxuICBjb25zdCB7IGV4YWN0bHlQb3NpdGlvbiA9IGZhbHNlLCBpZ25vcmVFeGFjdGx5RGF0YVR5cGUgPSBmYWxzZSB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICBpZiAodmFsdWUxID09PSB2YWx1ZTIgfHwgKHZhbHVlMSA9PT0gbnVsbCAmJiB2YWx1ZTIgPT09IG51bGwpIHx8ICh2YWx1ZTEgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZTIgPT09IHVuZGVmaW5lZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpZ25vcmVFeGFjdGx5RGF0YVR5cGUpIHtcbiAgICByZXR1cm4gaXNFcXVhbChpc05pbCh2YWx1ZTEpID8gdW5kZWZpbmVkIDogYCR7dmFsdWUxfWAsIGlzTmlsKHZhbHVlMikgPyB1bmRlZmluZWQgOiBgJHt2YWx1ZTJ9YCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlMSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlMiAhPT0gJ29iamVjdCcgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB8fCAoIUFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlMikpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUxKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlMikpIHtcbiAgICBpZiAodmFsdWUxLmxlbmd0aCAhPT0gdmFsdWUyLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWV4YWN0bHlQb3NpdGlvbikge1xuICAgICAgcmV0dXJuICF2YWx1ZTEuc29tZSgoaXRlbTogYW55KSA9PiAhdmFsdWUyLmluY2x1ZGVzKGl0ZW0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXZhbHVlMS5zb21lKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+ICFpc0VxdWFsKGl0ZW0sIHZhbHVlMltpbmRleF0sIG9wdGlvbnMpKTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyh2YWx1ZTEpLmxlbmd0aCAhPT0gT2JqZWN0LmtleXModmFsdWUyKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuICFPYmplY3Qua2V5cyh2YWx1ZTEpLnNvbWUoKGtleSkgPT4gIWlzRXF1YWwodmFsdWUxW2tleV0sIHZhbHVlMltrZXldLCBvcHRpb25zKSk7XG59O1xuXG4vKipcbiAqIExv4bqhaSBi4buPIGPDoWMgcGjhuqduIHThu60gdHLDuW5nIGzhurdwIHRyb25nIG3huqNuZyBk4buxYSB0csOqbiBt4buZdCB0aHXhu5ljIHTDrW5oIGNo4buJIMSR4buLbmhcbiAqIEBwYXJhbSBkYXRhIE3huqNuZyBk4buvIGxp4buHdSBj4bqnbiB44butIGzDvVxuICogQHBhcmFtIGtleSBUw6puIHRodeG7mWMgdMOtbmggZMO5bmcgxJHhu4Mgc28gc8OhbmggdHLDuW5nIGzhurdwLiBO4bq/dSBraMO0bmcgY8OzIGtleSB0aMOsIHNvIHPDoW5oIHRy4buxYyB0aeG6v3AgZ2nDoSB0cuG7i1xuICogQHJldHVybnMgTeG6o25nIG3hu5tpIGNo4bupYSBjw6FjIHBo4bqnbiB04butIGtow7RuZyB0csO5bmcgbOG6t3BcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBhcnIgPSBbXG4gKiAgIHsgaWQ6IDEsIG5hbWU6ICdBJyB9LFxuICogICB7IGlkOiAyLCBuYW1lOiAnQicgfSxcbiAqICAgeyBpZDogMSwgbmFtZTogJ0MnIH1cbiAqIF07XG4gKiB1bmlxQnkoYXJyLCAnaWQnKTsgLy8gW3sgaWQ6IDEsIG5hbWU6ICdBJyB9LCB7IGlkOiAyLCBuYW1lOiAnQicgfV1cbiAqXG4gKiBjb25zdCBudW1iZXJzID0gWzEsIDIsIDIsIDMsIDNdO1xuICogdW5pcUJ5KG51bWJlcnMpOyAvLyBbMSwgMiwgM11cbiAqXG4gKiBjb25zdCBudW1iZXJzU2lnbmFsID0gW3NpZ25hbCgxKSwgc2lnbmFsKDIpLCBzaWduYWwoMyksIHNpZ25hbCgyKSwgc2lnbmFsKDUpLCBzaWduYWwoNCksIHNpZ25hbCgxKSwgc2lnbmFsKDYpLCBzaWduYWwoNyksIHNpZ25hbCg2KV07XG4gKiB1bmlxQnkobnVtYmVyc1NpZ25hbCk7IC8vIFtzaWduYWwoMSksIHNpZ25hbCgyKSwgc2lnbmFsKDMpLCBzaWduYWwoNSksIHNpZ25hbCg0KSwgc2lnbmFsKDYpLCBzaWduYWwoNyldXG4gKi9cbmV4cG9ydCBjb25zdCB1bmlxQnkgPSA8VD4oZGF0YTogQXJyYXk8VD4sIGtleT86IHN0cmluZyk6IEFycmF5PFQ+ID0+IHtcbiAgaWYgKCFrZXkgfHwgIWRhdGE/Lmxlbmd0aCB8fCB0eXBlb2YgZ2V0KGRhdGEsICdbMF0nKSAhPT0gJ29iamVjdCcpIHtcbiAgICAvLyBY4butIGzDvSBt4bqjbmcgY2jhu6lhIHNpZ25hbCB2YWx1ZXNcbiAgICBpZiAoZGF0YVswXSAmJiBpc1NpZ25hbChkYXRhWzBdKSkge1xuICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBgJHtnZXQ8YW55PihpdGVtLCAnJyl9YDtcbiAgICAgICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFjhu60gbMO9IG3huqNuZyBwcmltaXRpdmUgdmFsdWVzXG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChkYXRhKSk7XG4gIH1cblxuICBjb25zdCBkYXRhVW5pcXVlID0ga2V5QnkoZGF0YSBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Piwga2V5KTtcblxuICByZXR1cm4gT2JqZWN0LmtleXMoZGF0YVVuaXF1ZSkubWFwKChrZXkpID0+IGRhdGFVbmlxdWVba2V5XSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVJbnRlcmZhY2UgPSAob2JqOiBhbnksIGludGVyZmFjZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGdlbmVyYXRlVHlwZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiAnYm9vbGVhbic7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuICdhbnknO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiAnRGF0ZSc7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICByZXR1cm4gJ1JlZ0V4cCc7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnQXJyYXk8YW55Pic7XG4gICAgICB9XG4gICAgICByZXR1cm4gYEFycmF5PCR7Z2VuZXJhdGVUeXBlKHZhbHVlWzBdKX0+YDtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGxldCBpbnRlcmZhY2VTdHIgPSAne1xcbic7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gZ2VuZXJhdGVUeXBlKHZhbHVlW2tleV0pO1xuICAgICAgICAgIGludGVyZmFjZVN0ciArPSBgICAke2tleX06ICR7dmFsdWVUeXBlfTtcXG5gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnRlcmZhY2VTdHIgKz0gJ30nO1xuICAgICAgcmV0dXJuIGludGVyZmFjZVN0cjtcbiAgICB9XG5cbiAgICByZXR1cm4gJ2FueSc7XG4gIH07XG5cbiAgY29uc3QgaW50ZXJmYWNlU3RyID0gYGludGVyZmFjZSAke2ludGVyZmFjZU5hbWV9ICR7Z2VuZXJhdGVUeXBlKG9iail9YDtcbiAgcmV0dXJuIGludGVyZmFjZVN0cjtcbn07XG4iXX0=
|
|
652
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQTBCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZELHNDQUFzQztBQUN0Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFjLEVBQUUsT0FBMEMsRUFBNkIsRUFBRTtJQUM3RyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDakMsS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBVSxFQUFFLE9BQTJHLEVBQXNDLEVBQUU7SUFDckwsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1FBQ2pDLEtBQUssR0FBRyxZQUFZ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QUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHLGFBQWEsYUFBYSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3ZFLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBTaWduYWwsIFdyaXRhYmxlU2lnbmFsLCBpc1NpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHZXRSZXR1cm5UeXBlLCBHZXRWYWx1ZUF0UGF0aCwgUGF0aE9mLCBUWVBFX09CSkVDVCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCB7IGlzQXJyYXksIGlzRGFuZ2Vyb3VzT2JqZWN0LCBpc0RheWpzT2JqZWN0LCBpc01hcCwgaXNSZWdFeHAsIGlzUmV0dXJuQXNJc09iamVjdCwgaXNTZXQgfSBmcm9tICcuL2Rhbmdlcm91cy1vYmplY3QnO1xuaW1wb3J0IHsgZ2V0RGF5anMgfSBmcm9tICcuL2RhdGUnO1xuaW1wb3J0IHsgVXRpbHNIdHRwUGFyYW1zUmVxdWVzdCB9IGZyb20gJy4vaHR0cC1wYXJhbXMnO1xuaW1wb3J0IHsgdW53cmFwU2lnbmFsIH0gZnJvbSAnLi90d28td2F5LXNpZ25hbC1vYmplY3QnO1xuXG4vKipDw6FjIGjDoG0gdMawxqFuZyB04buxIHRoxrAgdmnhu4duIGxvZGFzaCAqL1xuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSBt4buZdCBnacOhIHRy4buLIGPDsyBwaOG6o2kgbMOgIG51bGwgaG/hurdjIHVuZGVmaW5lZCBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG51bGwgaG/hurdjIHVuZGVmaW5lZCwgZmFsc2UgbuG6v3Uga2jDtG5nXG4gKiBAZXhhbXBsZVxuICogaXNOaWwobnVsbCk7IC8vIHRydWVcbiAqIGlzTmlsKHVuZGVmaW5lZCk7IC8vIHRydWVcbiAqIGlzTmlsKDApOyAvLyBmYWxzZVxuICogaXNOaWwoJ2hlbGxvJyk7IC8vIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc05pbCA9ICh2YWx1ZTogdW5rbm93biwgb3B0aW9ucz86IHsgaWdub3JlVW5XcmFwU2lnbmFsPzogYm9vbGVhbiB9KTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghb3B0aW9ucz8uaWdub3JlVW5XcmFwU2lnbmFsKSB7XG4gICAgdmFsdWUgPSB1bndyYXBTaWduYWwodmFsdWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSBt4buZdCBnacOhIHRy4buLIGPDsyBwaOG6o2kgbMOgIHLhu5duZyBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG51bGwsIHLhu5duZyBob+G6t2MgdW5kZWZpbmVkLCBmYWxzZSBu4bq/dSBraMO0bmdcbiAqIEBleGFtcGxlXG4gKiBpc0VtcHR5KG51bGwpOyAvLyB0cnVlXG4gKiBpc0VtcHR5KCcnKTsgLy8gdHJ1ZVxuICogaXNFbXB0eSh1bmRlZmluZWQpOyAvLyB0cnVlXG4gKiBpc0VtcHR5KHt9KTsgLy8gdHJ1ZVxuICogaXNFbXB0eShbXSk7IC8vIHRydWVcbiAqIGlzRW1wdHkoWzEsIDIsIDNdKTsgLy8gZmFsc2VcbiAqIGlzRW1wdHkoeyBhOiAxIH0pOyAvLyBmYWxzZVxuICovXG5leHBvcnQgY29uc3QgaXNFbXB0eSA9ICh2YWx1ZTogYW55LCBvcHRpb25zPzogeyBpZ25vcmVDaGVja1R5cGVQcmltaXRpdmU/OiBib29sZWFuOyBpZ25vcmVVbldyYXBTaWduYWw/OiBib29sZWFuOyBpZ25vcmVDaGVja1N0cmluZz86IGJvb2xlYW4gfSk6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgfCAnJyB8IDAgPT4ge1xuICBpZiAoIW9wdGlvbnM/Lmlnbm9yZVVuV3JhcFNpZ25hbCkge1xuICAgIHZhbHVlID0gdW53cmFwU2lnbmFsKHZhbHVlKTtcbiAgfVxuICBpZiAob3B0aW9ucz8uaWdub3JlQ2hlY2tTdHJpbmcgJiYgdmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChvcHRpb25zPy5pZ25vcmVDaGVja1R5cGVQcmltaXRpdmUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBpc0VtcHR5VHlwZU9iamVjdCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gaXNFbXB0eVR5cGVPYmplY3QodmFsdWUpO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSBt4buZdCBnacOhIHRy4buLIGPDsyBwaOG6o2kgbMOgIG9iamVjdCBy4buXbmcgaGF5IGtow7RuZ1xuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24ga2nhu4NtIHRyYVxuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBnacOhIHRy4buLIGzDoCBvYmplY3QgcuG7l25nLCBmYWxzZSBu4bq/dSBraMO0bmdcbiAqIEBleGFtcGxlXG4gKiBpc0VtcHR5VHlwZU9iamVjdCh7fSk7IC8vIHRydWVcbiAqIGlzRW1wdHlUeXBlT2JqZWN0KHsgYTogMSB9KTsgLy8gZmFsc2VcbiAqL1xuY29uc3QgaXNFbXB0eVR5cGVPYmplY3QgPSA8VCA9IG51bGw+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBUID0+IHtcbiAgdHJ5IHtcbiAgICBpZiAoaXNOaWwodmFsdWUsIHsgaWdub3JlVW5XcmFwU2lnbmFsOiB0cnVlIH0pIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSBt4buZdCBnacOhIHRy4buLIGPDsyBwaOG6o2kgbMOgIG51bGwsIHLhu5duZywgdW5kZWZpbmVkIGhv4bq3YyAwIGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIGtp4buDbSB0cmFcbiAqIEBwYXJhbSBvcHRpb25zIEPhuqV1IGjDrG5oIHTDuXkgY2jhu41uXG4gKiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVaZXJvIE7hur91IHRydWUsIHPhur0ga2jDtG5nIGtp4buDbSB0cmEgZ2nDoSB0cuG7iyAwXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG51bGwsIHLhu5duZywgdW5kZWZpbmVkIGhv4bq3YyAwLCBmYWxzZSBu4bq/dSBraMO0bmdcbiAqIEBleGFtcGxlXG4gKiBpc1RydXRoeShudWxsKTsgLy8gZmFsc2VcbiAqIGlzVHJ1dGh5KCcnKTsgLy8gZmFsc2VcbiAqIGlzVHJ1dGh5KHVuZGVmaW5lZCk7IC8vIGZhbHNlXG4gKiBpc1RydXRoeSgwKTsgLy8gZmFsc2VcbiAqIGlzVHJ1dGh5KHt9KTsgLy8gdHJ1ZVxuICogaXNUcnV0aHkoMCwgeyBpZ25vcmVaZXJvOiB0cnVlIH0pOyAvLyB0cnVlXG4gKi9cblxuZXhwb3J0IGNvbnN0IGlzVHJ1dGh5ID0gPFQ+KHZhbHVlOiBULCBvcHRpb25zPzogeyBpZ25vcmVaZXJvPzogYm9vbGVhbjsgaWdub3JlQ2hlY2tTdHJpbmc/OiBib29sZWFuOyBpZ25vcmVVbldyYXBTaWduYWw/OiBib29sZWFuIH0pOiB2YWx1ZSBpcyBOb25OdWxsYWJsZTxUPiA9PiB7XG4gIHJldHVybiAhaXNGYWxzeSh2YWx1ZSwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6AgbnVsbCwgcuG7l25nLCB1bmRlZmluZWQgaG/hurdjIDAgaGF5IGtow7RuZ1xuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24ga2nhu4NtIHRyYVxuICogQHBhcmFtIG9wdGlvbnMgQ+G6pXUgaMOsbmggdMO5eSBjaOG7jW5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZVplcm8gTuG6v3UgdHJ1ZSwgc+G6vSBraMO0bmcga2nhu4NtIHRyYSBnacOhIHRy4buLIDBcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgZ2nDoSB0cuG7iyBsw6AgbnVsbCwgcuG7l25nLCB1bmRlZmluZWQgaG/hurdjIDAsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzRmFsc3kobnVsbCk7IC8vIHRydWVcbiAqIGlzRmFsc3koJycpOyAvLyB0cnVlXG4gKiBpc0ZhbHN5KHVuZGVmaW5lZCk7IC8vIHRydWVcbiAqIGlzRmFsc3koMCk7IC8vIHRydWVcbiAqIGlzRmFsc3koe30pOyAvLyBmYWxzZVxuICogaXNGYWxzeSgwLCB7IGlnbm9yZVplcm86IHRydWUgfSk7IC8vIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZhbHN5ID0gKHZhbHVlOiB1bmtub3duLCBvcHRpb25zPzogeyBpZ25vcmVaZXJvPzogYm9vbGVhbjsgaWdub3JlQ2hlY2tTdHJpbmc/OiBib29sZWFuOyBpZ25vcmVVbldyYXBTaWduYWw/OiBib29sZWFuIH0pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkIHwgJycgfCAwID0+IHtcbiAgaWYgKCFvcHRpb25zPy5pZ25vcmVVbldyYXBTaWduYWwpIHtcbiAgICB2YWx1ZSA9IHVud3JhcFNpZ25hbCh2YWx1ZSk7XG4gIH1cblxuICBpZiAob3B0aW9ucz8uaWdub3JlWmVybyAmJiB2YWx1ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy5pZ25vcmVDaGVja1N0cmluZyAmJiB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gIXZhbHVlO1xufTtcblxuLyoqXG4gKiBMb+G6oWkgYuG7jyBjw6FjIHRodeG7mWMgdMOtbmggY+G7p2EgxJHhu5FpIHTGsOG7o25nIGThu7FhIHRyw6puIG3hu5l0IGjDoG0gxJFp4buBdSBraeG7h25cbiAqIEBwYXJhbSBvYmpEYXRhIMSQ4buRaSB0xrDhu6NuZyBj4bqnbiB44butIGzDvVxuICogQHBhcmFtIHByZWRpY2F0ZSBIw6BtIMSRaeG7gXUga2nhu4duIMSR4buDIGtp4buDbSB0cmEgZ2nDoSB0cuG7iyBj4bunYSB0aHXhu5ljIHTDrW5oLiBO4bq/dSBow6BtIHRy4bqjIHbhu4EgdHJ1ZSB0aMOsIHRodeG7mWMgdMOtbmggxJHDsyBz4bq9IGLhu4sgbG/huqFpIGLhu49cbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyBt4bubaSBzYXUga2hpIMSRw6MgbG/huqFpIGLhu48gY8OhYyB0aHXhu5ljIHTDrW5oIHRo4buPYSBtw6NuIMSRaeG7gXUga2nhu4duXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb2JqID0geyBhOiAxLCBiOiBudWxsLCBjOiAzLCBkOiB1bmRlZmluZWQgfTtcbiAqIG9taXRCeShvYmosIGlzTmlsKTsgLy8geyBhOiAxLCBjOiAzIH1cbiAqL1xuZXhwb3J0IGNvbnN0IG9taXRCeSA9IDxUPihvYmpEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwcmVkaWNhdGU6ICh2YWw6IGFueSkgPT4gYm9vbGVhbik6IFQgPT4ge1xuICBpZiAoIW9iakRhdGEgfHwgdHlwZW9mIG9iakRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob2JqRGF0YSkpIHtcbiAgICByZXR1cm4gb2JqRGF0YSBhcyBUO1xuICB9XG4gIGNvbnN0IG5ld09iaiA9IHt9IGFzIFQ7XG5cbiAgT2JqZWN0LmtleXMob2JqRGF0YSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgdmFsdWVPZktleSA9IGdldChvYmpEYXRhLCBrZXkpO1xuICAgIGlmICghcHJlZGljYXRlKHZhbHVlT2ZLZXkpKSB7XG4gICAgICBzZXQobmV3T2JqLCBrZXkgYXMgUGF0aE9mPFQ+LCB2YWx1ZU9mS2V5KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3T2JqO1xufTtcblxuLyoqXG4gKiBM4bqleSBnacOhIHRy4buLIHThu6sgxJHhu5FpIHTGsOG7o25nIHRoZW8gxJHGsOG7nW5nIGThuqtuIGNo4buJIMSR4buLbmhcbiAqXG4gKiBIw6BtIG7DoHkgZ2nDunAgYuG6oW4gdHJ1eSBj4bqtcCB2w6BvIGPDoWMgdGh14buZYyB0w61uaCBzw6J1IGLDqm4gdHJvbmcgbeG7mXQgxJHhu5FpIHTGsOG7o25nIG3hu5l0IGPDoWNoIGFuIHRvw6BuLFxuICogdHLDoW5oIGzhu5dpIGtoaSB0aHXhu5ljIHTDrW5oIGtow7RuZyB04buTbiB04bqhaS5cbiAqXG4gKiBAcGFyYW0gb2JqIMSQ4buRaSB0xrDhu6NuZyBuZ3Xhu5NuIGPhuqduIGzhuqV5IGdpw6EgdHLhu4tcbiAqIEBwYXJhbSBwYXRoIMSQxrDhu51uZyBk4bqrbiDEkeG6v24gdGh14buZYyB0w61uaCBj4bqnbiBs4bqleS4gQ8OzIHRo4buDIGzDoDpcbiAqICAgLSBDaHXhu5dpOiAndXNlci5wcm9maWxlLm5hbWUnIGhv4bq3YyAnaXRlbXNbMF0udGl0bGUnXG4gKiAgIC0gTeG6o25nOiBbJ3VzZXInLCAncHJvZmlsZScsICduYW1lJ10gaG/hurdjIFsnaXRlbXMnLCAnMCcsICd0aXRsZSddXG4gKiAgIC0gQ2h14buXaSBy4buXbmcgJyc6IHRy4bqjIHbhu4EgY2jDrW5oIMSR4buRaSB0xrDhu6NuZyBn4buRY1xuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBHacOhIHRy4buLIG3hurdjIMSR4buLbmggdHLhuqMgduG7gSBraGkga2jDtG5nIHTDrG0gdGjhuqV5IHRodeG7mWMgdMOtbmggKG3hurdjIMSR4buLbmg6IHVuZGVmaW5lZClcbiAqIEBwYXJhbSBrZWVwTGFzdFZhbHVlSWZTaWduYWwgQ8OzIGdp4buvIG5ndXnDqm4gc2lnbmFsIGN14buRaSBjw7luZyBoYXkga2jDtG5nICht4bq3YyDEkeG7i25oOiBmYWxzZSAtIHPhur0gZ+G7jWkgc2lnbmFsKCkpXG4gKiBAcmV0dXJucyBHacOhIHRy4buLIHTDrG0gxJHGsOG7o2MgaG/hurdjIGdpw6EgdHLhu4sgbeG6t2MgxJHhu4tuaFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBWw60gZOG7pSBjxqEgYuG6o25cbiAqIGNvbnN0IHVzZXIgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9O1xuICogZ2V0KHVzZXIsICduYW1lJyk7IC8vICdKb2huJ1xuICogZ2V0KHVzZXIsICdlbWFpbCcpOyAvLyB1bmRlZmluZWRcbiAqIGdldCh1c2VyLCAnZW1haWwnLCAnbm8tZW1haWwnKTsgLy8gJ25vLWVtYWlsJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUcnV54buBbiBwYXRoIHLhu5duZyAtIHRy4bqjIHbhu4EgY2jDrW5oIMSR4buRaSB0xrDhu6NuZyBn4buRY1xuICogY29uc3QgZGF0YSA9IHsgbmFtZTogJ0FsaWNlJywgYWdlOiAyNSB9O1xuICogZ2V0KGRhdGEsICcnKTsgLy8geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDI1IH0gKGNow61uaCDEkeG7kWkgdMaw4bujbmcgZGF0YSlcbiAqIGdldChkYXRhLCAnJywgJ2RlZmF1bHQnKTsgLy8geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDI1IH0gKGLhu48gcXVhIGRlZmF1bHRWYWx1ZSlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVHJ1eSBj4bqtcCB0aHXhu5ljIHTDrW5oIHPDonVcbiAqIGNvbnN0IGRhdGEgPSB7XG4gKiAgIHVzZXI6IHtcbiAqICAgICBwcm9maWxlOiB7XG4gKiAgICAgICBuYW1lOiAnQWxpY2UnLFxuICogICAgICAgc2V0dGluZ3M6IHsgdGhlbWU6ICdkYXJrJyB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9O1xuICogZ2V0KGRhdGEsICd1c2VyLnByb2ZpbGUubmFtZScpOyAvLyAnQWxpY2UnXG4gKiBnZXQoZGF0YSwgJ3VzZXIucHJvZmlsZS5zZXR0aW5ncy50aGVtZScpOyAvLyAnZGFyaydcbiAqIGdldChkYXRhLCAndXNlci5wcm9maWxlLmF2YXRhcicsICdkZWZhdWx0LmpwZycpOyAvLyAnZGVmYXVsdC5qcGcnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRydXkgY+G6rXAgbeG6o25nXG4gKiBjb25zdCBpdGVtcyA9IFtcbiAqICAgeyBuYW1lOiAnSXRlbSAxJywgcHJpY2U6IDEwMCB9LFxuICogICB7IG5hbWU6ICdJdGVtIDInLCBwcmljZTogMjAwIH1cbiAqIF07XG4gKiBnZXQoaXRlbXMsICdbMF0ubmFtZScpOyAvLyAnSXRlbSAxJ1xuICogZ2V0KGl0ZW1zLCAnWzFdLm5hbWUnKTsgLy8gJ0l0ZW0gMidcbiAqIGdldChpdGVtcywgJ1syXS5uYW1lJywgJ05vdCBmb3VuZCcpOyAvLyAnTm90IGZvdW5kJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBT4butIGThu6VuZyB24bubaSBt4bqjbmcgcGF0aFxuICogY29uc3QgbmVzdGVkID0geyBhOiB7IGI6IHsgYzogJ2RlZXAgdmFsdWUnIH0gfSB9O1xuICogZ2V0KG5lc3RlZCwgWydhJywgJ2InLCAnYyddKTsgLy8gJ2RlZXAgdmFsdWUnXG4gKiBnZXQobmVzdGVkLCBbJ2EnLCAnYicsICdkJ10sICdkZWZhdWx0Jyk7IC8vICdkZWZhdWx0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUcsaw4budbmcgaOG7o3AgxJHhurdjIGJp4buHdFxuICogZ2V0KG51bGwsICdhbnkucGF0aCcpOyAvLyB1bmRlZmluZWRcbiAqIGdldCh1bmRlZmluZWQsICdhbnkucGF0aCcsICdmYWxsYmFjaycpOyAvLyAnZmFsbGJhY2snXG4gKi9cbmV4cG9ydCBjb25zdCBnZXQgPSA8TywgUCBleHRlbmRzIFBhdGhPZjxPPiA9IFBhdGhPZjxPPiwgS1MgZXh0ZW5kcyBib29sZWFuID0gZmFsc2UsIEQgZXh0ZW5kcyBHZXRWYWx1ZUF0UGF0aDxPLCBQLCBLUz4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICBvYmo6IFNpZ25hbDxPPiB8IE8sXG4gIHBhdGg6IFAsXG4gIGRlZmF1bHRWYWx1ZT86IEQsXG4gIGtlZXBMYXN0VmFsdWVJZlNpZ25hbD86IEtTXG4pOiBHZXRSZXR1cm5UeXBlPE8sIFAsIEtTLCBEPiA9PiB7XG4gIC8vIGhlbHBlciBjYXN0IMSR4buDIHRyw6FuaCBs4bq3cCBs4bqhaSBraeG7g3UgxJFp4buBdSBraeG7h24g4bufIGPDoWMgcmV0dXJuXG4gIGNvbnN0IG91dCA9ICh2OiB1bmtub3duKSA9PiB2IGFzIEdldFJldHVyblR5cGU8TywgUCwgS1MsIEQ+O1xuXG4gIGlmIChpc05pbChvYmopKSB7XG4gICAgcmV0dXJuIG91dChkZWZhdWx0VmFsdWUpO1xuICB9XG4gIG9iaiA9IHVud3JhcFNpZ25hbChvYmopO1xuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICByZXR1cm4gb3V0KG9iaik7XG4gIH1cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIEh0dHBQYXJhbXMpIHtcbiAgICByZXR1cm4gb3V0KG9iai5nZXQoYCR7cGF0aH1gKSA/PyBkZWZhdWx0VmFsdWUpO1xuICB9XG4gIGlmIChvYmogaW5zdGFuY2VvZiBET01SZWN0KSB7XG4gICAgcmV0dXJuIG91dChvYmpbcGF0aCBhcyBrZXlvZiBET01SZWN0XSk7XG4gIH1cblxuICBjb25zdCBwYXRocyA9IEFycmF5LmlzQXJyYXkocGF0aClcbiAgICA/IHBhdGhcbiAgICA6IChwYXRoIGFzIHN0cmluZylcbiAgICAgICAgLnJlcGxhY2UoL1xcWyhcXGQrKV0vZywgJy4kMScpXG4gICAgICAgIC5zcGxpdCgnLicpXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5KTtcblxuICBmb3IgKGNvbnN0IGluZGV4IGluIHBhdGhzKSB7XG4gICAgY29uc3Qga2V5ID0gcGF0aHNbaW5kZXhdO1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBDU1NTdHlsZURlY2xhcmF0aW9uKSB7XG4gICAgICBvYmogPSBvYmpba2V5IGFzIGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb25dIGFzIE87XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIG9iaiA9IG9ialtrZXkgYXMga2V5b2YgSFRNTEVsZW1lbnRdIGFzIE87XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgb2JqID0gdW53cmFwU2lnbmFsKG9iaik7XG4gICAgaWYgKGlzTmlsKG9iaikgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHJldHVybiBvdXQoZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgdmFsID0gaXNTaWduYWwoKG9iaiBhcyBhbnkpW2tleV0pICYmICFrZWVwTGFzdFZhbHVlSWZTaWduYWwgPyAob2JqIGFzIGFueSlba2V5XSgpIDogKG9iaiBhcyBhbnkpW2tleV07XG5cbiAgICBvYmogPSB2YWwgYXMgTztcbiAgfVxuXG4gIHJldHVybiBvdXQob2JqID8/IGRlZmF1bHRWYWx1ZSk7XG59O1xuXG4vKipcbiAqIFRoaeG6v3QgbOG6rXAgZ2nDoSB0cuG7iyBjaG8gbeG7mXQgdGh14buZYyB0w61uaCB0cm9uZyDEkeG7kWkgdMaw4bujbmcgdGhlbyDEkcaw4budbmcgZOG6q24gY2jhu4kgxJHhu4tuaFxuICogQHBhcmFtIG9iaiDEkOG7kWkgdMaw4bujbmcgY+G6p24gdGhp4bq/dCBs4bqtcCBnacOhIHRy4buLXG4gKiBAcGFyYW0gcGF0aCDEkMaw4budbmcgZOG6q24gxJHhur9uIHRodeG7mWMgdMOtbmgsIGPDsyB0aOG7gyBsw6AgY2h14buXaSAodmQ6ICdhLmIuYycpIGhv4bq3YyBt4bqjbmcgKHZkOiBbJ2EnLCAnYicsICdjJ10pXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiB0aGnhur90IGzhuq1wXG4gKiBAcmV0dXJucyDEkOG7kWkgdMaw4bujbmcgc2F1IGtoaSDEkcOjIHRoaeG6v3QgbOG6rXAgZ2nDoSB0cuG7i1xuICogQHRocm93cyBFcnJvciBu4bq/dSB0aGFtIHPhu5EgxJHhuqd1IHRpw6puIGtow7RuZyBwaOG6o2kgbMOgIMSR4buRaSB0xrDhu6NuZ1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IG9iaiA9IHsgYTogeyBiOiAxIH0gfTtcbiAqIHNldChvYmosICdhLmInLCAyKTsgLy8geyBhOiB7IGI6IDIgfSB9XG4gKi9cbmV4cG9ydCBjb25zdCBzZXQgPSA8TywgUCBleHRlbmRzIFBhdGhPZjxPPiA9IFBhdGhPZjxPPiwgVCBleHRlbmRzIEdldFZhbHVlQXRQYXRoPE8sIFAsIHRydWU+ID0gR2V0VmFsdWVBdFBhdGg8TywgUCwgdHJ1ZT4+KFxuICBvYmo6IFNpZ25hbDxPPiB8IE8sXG4gIHBhdGg6IFAsXG4gIHZhbHVlOiBULFxuICBvcHRpb25zPzogeyB2YWx1ZURlZmF1bHRQYXRoT2JqZWN0VW5kZWZpbmVkPzogYW55OyB2YWx1ZURlZmF1bHRQYXRoQXJyYXlVbmRlZmluZWQ/OiBhbnkgfVxuKTogTyA9PiB7XG4gIGlmIChpc05pbChvYmopIHx8ICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyAmJiAhaXNTaWduYWwob2JqKSkgfHwgKGlzU2lnbmFsKG9iaikgJiYgdHlwZW9mIG9iaigpICE9PSAnb2JqZWN0JykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIEh0dHBQYXJhbXMpIHtcbiAgICByZXR1cm4gb2JqLnNldChgJHtwYXRofWAsIHZhbHVlIGFzIHN0cmluZykgYXMgTztcbiAgfVxuXG4gIGNvbnN0IHBhdGhBcnJheSA9IEFycmF5LmlzQXJyYXkocGF0aClcbiAgICA/IHBhdGhcbiAgICA6IChwYXRoIGFzIHN0cmluZylcbiAgICAgICAgLnJlcGxhY2UoL1xcWyhcXGQrKV0vZywgJy5bJDFdJylcbiAgICAgICAgLnNwbGl0KCcuJylcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkpO1xuXG4gIGxldCBjdXJyZW50T2JqZWN0QnlLZXk6IGFueSA9IGlzU2lnbmFsKG9iaikgPyBvYmooKSA6IG9iajtcbiAgbGV0IHByZU9iamVjdEJ5S2V5ID0gb2JqO1xuXG4gIHBhdGhBcnJheS5mb3JFYWNoKChrZXksIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4IDwgcGF0aEFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgIGlmICghKGtleSBpbiBjdXJyZW50T2JqZWN0QnlLZXkpIHx8ICh0eXBlb2YgY3VycmVudE9iamVjdEJ5S2V5W2tleV0gIT09ICdvYmplY3QnICYmICFpc1NpZ25hbChjdXJyZW50T2JqZWN0QnlLZXlba2V5XSkpKSB7XG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBwYXRoQXJyYXlbaW5kZXggKyAxXTtcbiAgICAgICAga2V5ID0ga2V5LnJlcGxhY2UoL1xcWyhcXGQrKV0vZywgJyQxJyk7XG4gICAgICAgIGlmIChpc05pbChjdXJyZW50T2JqZWN0QnlLZXlba2V5XSkpIHtcbiAgICAgICAgICBjdXJyZW50T2JqZWN0QnlLZXlba2V5XSA9IC9cXFsoXFxkKyldL2cudGVzdChuZXh0S2V5KSA/IChvcHRpb25zPy52YWx1ZURlZmF1bHRQYXRoQXJyYXlVbmRlZmluZWQgPz8gW10pIDogKG9wdGlvbnM/LnZhbHVlRGVmYXVsdFBhdGhPYmplY3RVbmRlZmluZWQgPz8ge30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdXJyZW50T2JqZWN0QnlLZXkgPSBrZXkgPyBjdXJyZW50T2JqZWN0QnlLZXlba2V5XSA6IGN1cnJlbnRPYmplY3RCeUtleTtcbiAgICAgIHByZU9iamVjdEJ5S2V5ID0gY3VycmVudE9iamVjdEJ5S2V5O1xuICAgICAgY3VycmVudE9iamVjdEJ5S2V5ID0gaXNTaWduYWwoY3VycmVudE9iamVjdEJ5S2V5KSA/IGN1cnJlbnRPYmplY3RCeUtleSgpIDogY3VycmVudE9iamVjdEJ5S2V5O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VycmVudE9iamVjdEJ5S2V5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEfDoW4gZ2nDoSB0cuG7iyDhu58gY3Xhu5FpIMSRxrDhu51uZyBk4bqrblxuICAgIGtleSA9IGtleS5yZXBsYWNlKC9cXFsoXFxkKyldL2csICckMScpO1xuICAgIGNvbnN0IHZhbHVlT2ZLZXkgPSBjdXJyZW50T2JqZWN0QnlLZXlba2V5XTtcbiAgICBjb25zdCB2YWx1ZU9mS2V5SXNTaWduYWwgPSBpc1NpZ25hbCh2YWx1ZU9mS2V5KTtcblxuICAgIGlmICh2YWx1ZU9mS2V5SXNTaWduYWwgJiYgKHR5cGVvZiB2YWx1ZU9mS2V5KCkgIT09ICdvYmplY3QnIHx8IHZhbHVlT2ZLZXkoKSA9PT0gbnVsbCkpIHtcbiAgICAgICh2YWx1ZU9mS2V5IGFzIFdyaXRhYmxlU2lnbmFsPGFueT4pLnNldChpc1NpZ25hbCh2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNTaWduYWwocHJlT2JqZWN0QnlLZXkpKSB7XG4gICAgICAocHJlT2JqZWN0QnlLZXkgYXMgV3JpdGFibGVTaWduYWw8YW55PikudXBkYXRlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YU9mS2V5ID0gZGF0YVtrZXldO1xuICAgICAgICBpZiAoaXNOaWwoZGF0YU9mS2V5KSB8fCAhdmFsdWVPZktleUlzU2lnbmFsKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWVPZktleUlzU2lnbmFsKSB7XG4gICAgICAgICAgKHZhbHVlT2ZLZXkgYXMgV3JpdGFibGVTaWduYWw8YW55Pikuc2V0KGlzU2lnbmFsKHZhbHVlKSA/IHZhbHVlKCkgOiB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgIHJldHVybiBbLi4uZGF0YV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4uZGF0YSB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2YWx1ZU9mS2V5SXNTaWduYWwpIHtcbiAgICAgICh2YWx1ZU9mS2V5IGFzIFdyaXRhYmxlU2lnbmFsPGFueT4pLnNldChpc1NpZ25hbCh2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJyZW50T2JqZWN0QnlLZXlba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICByZXR1cm4gb2JqIGFzIE87XG59O1xuXG4vKipcbiAqIFThuqFvIG3hu5l0IGLhuqNuIHNhbyBzw6J1IGPhu6dhIG3hu5l0IMSR4buRaSB0xrDhu6NuZyBob+G6t2MgZ2nDoSB0cuG7iyBi4bqldCBr4buzXG4gKiBAcGFyYW0gZGF0YSBE4buvIGxp4buHdSBj4bqnbiBzYW8gY2jDqXBcbiAqIEBwYXJhbSBvcHRpb25zIFTDuXkgY2jhu41uIGPhuqV1IGjDrG5oXG4gKiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVTaWduYWwgTuG6v3UgdHJ1ZSwgc+G6vSBraMO0bmcgc2FvIGNow6lwIGPDoWMgc2lnbmFsIG3DoCB0cuG6oyB24buBIHNpZ25hbCBn4buRY1xuICogQHBhcmFtIHNlZW4gV2Vha01hcCDEkeG7gyB0aGVvIGTDtWkgY8OhYyB0aGFtIGNoaeG6v3UgxJHDoyDEkcaw4bujYyBzYW8gY2jDqXAsIHRyw6FuaCBs4bq3cCB2w7QgaOG6oW4gduG7m2kgY8OhYyB0aGFtIGNoaeG6v3UgdsOybmdcbiAqIEByZXR1cm5zIELhuqNuIHNhbyBzw6J1IGPhu6dhIGThu68gbGnhu4d1IMSR4bqndSB2w6BvXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb2JqID0ge1xuICogICBhOiAxLFxuICogICBiOiB7IGM6IDIgfSxcbiAqICAgZDogWzEsIDIsIDNdXG4gKiB9O1xuICogY29uc3QgY2xvbmUgPSBjbG9uZURlZXAob2JqKTtcbiAqIC8vIGNsb25lIGzDoCBt4buZdCBi4bqjbiBzYW8gaG/DoG4gdG/DoG4gxJHhu5ljIGzhuq1wIGPhu6dhIG9ialxuICovXG5leHBvcnQgY29uc3QgY2xvbmVEZWVwID0gPFQgPSBhbnk+KGRhdGE6IGFueSwgb3B0aW9ucyA9IHsgaWdub3JlU2lnbmFsOiBmYWxzZSB9LCBzZWVuID0gbmV3IFdlYWtNYXAoKSk6IFQgPT4ge1xuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnICYmICFpc1NpZ25hbChkYXRhKSkgfHwgaXNEYW5nZXJvdXNPYmplY3QoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGlmIChzZWVuLmhhcyhkYXRhKSkge1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKTtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgSHR0cFBhcmFtcykge1xuICAgIHJldHVybiBuZXcgVXRpbHNIdHRwUGFyYW1zUmVxdWVzdCh1bmRlZmluZWQsIGRhdGEpIGFzIFQ7XG4gIH1cblxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0YS5nZXRUaW1lKCkpIGFzIFQ7XG4gIH1cblxuICBpZiAoaXNEYXlqc09iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBnZXREYXlqcyh7IGRhdGU6IGRhdGEudmFsdWVPZigpIH0pIGFzIFQ7XG4gIH1cblxuICBpZiAoaXNSZWdFeHAoZGF0YSkpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChkYXRhLnNvdXJjZSwgZGF0YS5mbGFncykgYXMgVDtcbiAgfVxuXG4gIGlmIChpc01hcChkYXRhKSkge1xuICAgIGNvbnN0IG1hcENvcHkgPSBuZXcgTWFwKCk7XG4gICAgc2Vlbi5zZXQoZGF0YSwgbWFwQ29weSk7XG4gICAgZGF0YS5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgbWFwQ29weS5zZXQoY2xvbmVEZWVwKGtleSwgb3B0aW9ucywgc2VlbiksIGNsb25lRGVlcCh2YWwsIG9wdGlvbnMsIHNlZW4pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbWFwQ29weSBhcyBUO1xuICB9XG5cbiAgaWYgKGlzU2V0KGRhdGEpKSB7XG4gICAgY29uc3Qgc2V0Q29weSA9IG5ldyBTZXQoKTtcbiAgICBzZWVuLnNldChkYXRhLCBzZXRDb3B5KTtcbiAgICBkYXRhLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgc2V0Q29weS5hZGQoY2xvbmVEZWVwKHZhbCwgb3B0aW9ucywgc2VlbikpO1xuICAgIH0pO1xuICAgIHJldHVybiBzZXRDb3B5IGFzIFQ7XG4gIH1cblxuICBpZiAoaXNBcnJheShkYXRhKSkge1xuICAgIHNlZW4uc2V0KGRhdGEsIGRhdGEubWFwKChpdGVtKSA9PiBjbG9uZURlZXAoaXRlbSwgb3B0aW9ucywgc2VlbikpIGFzIFQpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKSBhcyBUO1xuICB9XG5cbiAgaWYgKGlzUmV0dXJuQXNJc09iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gIH1cblxuICBpZiAoaXNTaWduYWwoZGF0YSkpIHtcbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2lnbmFsKSB7XG4gICAgICByZXR1cm4gZGF0YSBhcyBUO1xuICAgIH1cbiAgICBzZWVuLnNldChkYXRhLCBzaWduYWwoY2xvbmVEZWVwKGRhdGEoKSwgb3B0aW9ucywgc2VlbikpKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSkgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBzZWVuLnNldChkYXRhLCByZXN1bHQpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgY29uc3QgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSHR0cFBhcmFtcykge1xuICAgICAgcmVzdWx0W2tleV0gPSBuZXcgVXRpbHNIdHRwUGFyYW1zUmVxdWVzdCh1bmRlZmluZWQsIHZhbHVlKSBhcyBUO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZS5nZXRUaW1lKCkpIGFzIFQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoZGF5anMuaXNEYXlqcyh2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gZ2V0RGF5anMoeyBkYXRlOiB2YWx1ZS52YWx1ZU9mKCkgfSkgYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpc1JlZ0V4cChkYXRhKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBuZXcgUmVnRXhwKHZhbHVlLnNvdXJjZSwgdmFsdWUuZmxhZ3MpIGFzIFQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzUmV0dXJuQXNJc09iamVjdChkYXRhKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBjbG9uZURlZXAodmFsdWUsIG9wdGlvbnMsIHNlZW4pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQgYXMgVDtcbn07XG5cbi8qKlxuICogQ2h1eeG7g24gxJHhu5VpIG3hu5l0IG3huqNuZyBjw6FjIMSR4buRaSB0xrDhu6NuZyB0aMOgbmggbeG7mXQgxJHhu5FpIHTGsOG7o25nIHbhu5tpIGtow7NhIMSRxrDhu6NjIGNo4buJIMSR4buLbmhcbiAqIEBwYXJhbSBkYXRhIE3huqNuZyBjw6FjIMSR4buRaSB0xrDhu6NuZyBj4bqnbiBjaHV54buDbiDEkeG7lWlcbiAqIEBwYXJhbSBrZXkgVMOqbiB0aHXhu5ljIHTDrW5oIMSRxrDhu6NjIHPhu60gZOG7pW5nIGzDoG0ga2jDs2EgdHJvbmcgxJHhu5FpIHTGsOG7o25nIGvhur90IHF14bqjXG4gKiBAcmV0dXJucyDEkOG7kWkgdMaw4bujbmcgduG7m2kgY8OhYyBnacOhIHRy4buLIHThu6sgbeG6o25nIMSRxrDhu6NjIMSRw6FuaCBrZXkgdGhlbyB0aHXhu5ljIHTDrW5oIMSRw6MgY2jhu4kgxJHhu4tuaFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGRhdGEgPSBbXG4gKiAgIHsgaWQ6IDEsIG5hbWU6ICdKb2huJyB9LFxuICogICB7IGlkOiAyLCBuYW1lOiAnSmFuZScgfVxuICogXTtcbiAqIGtleUJ5KGRhdGEsICdpZCcpO1xuICogLy8gS+G6v3QgcXXhuqM6IHtcbiAqIC8vICAgJzEnOiB7IGlkOiAxLCBuYW1lOiAnSm9obicgfSxcbiAqIC8vICAgJzInOiB7IGlkOiAyLCBuYW1lOiAnSmFuZScgfVxuICogLy8gfVxuICovXG5leHBvcnQgY29uc3Qga2V5QnkgPSAoZGF0YTogQXJyYXk8VFlQRV9PQkpFQ1Q+LCBrZXk6IHN0cmluZyk6IFRZUEVfT0JKRUNUID0+IHtcbiAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCB8fCAha2V5KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBkYXRhLnJlZHVjZSgoZGlyLCBuZXh0SXRlbSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlT2ZLZXkgPSBnZXQobmV4dEl0ZW0sIGtleSBhcyBQYXRoT2Y8VFlQRV9PQkpFQ1Q+KTtcbiAgICBpZiAodHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWVPZktleSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGlyO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5rZXlzKGRpcikuaW5jbHVkZXMoYCR7dmFsdWVPZktleX1gKSkge1xuICAgICAgZGlyW2Ake3ZhbHVlT2ZLZXl9YF0gPSBuZXh0SXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIGRpcjtcbiAgfSwge30pO1xufTtcblxuLyoqXG4gKiBOaMOzbSBjw6FjIMSR4buRaSB0xrDhu6NuZyB0cm9uZyBt4buZdCBt4bqjbmcgdGjDoG5oIGPDoWMgbmjDs20gZOG7sWEgdHLDqm4gbeG7mXQgdGh14buZYyB0w61uaCBj4bulIHRo4buDXG4gKiBAcGFyYW0gZGF0YSBN4bqjbmcgY8OhYyDEkeG7kWkgdMaw4bujbmcgY+G6p24gbmjDs21cbiAqIEBwYXJhbSBrZXkgVMOqbiB0aHXhu5ljIHTDrW5oIMSRxrDhu6NjIHPhu60gZOG7pW5nIGzDoG0ga2jDs2EgbmjDs21cbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyB24bubaSBjw6FjIGdpw6EgdHLhu4sgdOG7qyBt4bqjbmcgxJHGsOG7o2MgbmjDs20gdGhlbyB0aHXhu5ljIHTDrW5oIMSRw6MgY2jhu4kgxJHhu4tuaFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGRhdGEgPSBbXG4gKiAgIHsgaWQ6IDEsIG5hbWU6ICdKb2huJyB9LFxuICogICB7IGlkOiAyLCBuYW1lOiAnSmFuZScgfSxcbiAqICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH1cbiAqIF07XG4gKiBncm91cEJ5KGRhdGEsICdpZCcpO1xuICogLy8gS+G6v3QgcXXhuqM6IHtcbiAqIC8vICAgJzEnOiBbXG4gKiAvLyAgICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAvLyAgICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH1cbiAqIC8vICAgXSxcbiAqIC8vICAgJzInOiBbXG4gKiAvLyAgICAgeyBpZDogMiwgbmFtZTogJ0phbmUnIH1cbiAqIC8vIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGdyb3VwQnkgPSAoZGF0YTogQXJyYXk8VFlQRV9PQkpFQ1Q+LCBrZXk6IHN0cmluZyk6IFRZUEVfT0JKRUNUID0+IHtcbiAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCB8fCAhT2JqZWN0LmtleXMoZ2V0KGRhdGEsICdbMF0nKSkubGVuZ3RoIHx8ICFrZXkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIGRhdGEucmVkdWNlKChkaXIsIG5leHRJdGVtKSA9PiB7XG4gICAgY29uc3QgdmFsdWVPZktleSA9IGdldChuZXh0SXRlbSwga2V5IGFzIFBhdGhPZjxUWVBFX09CSkVDVD4pO1xuICAgIGlmICh0eXBlb2YgdmFsdWVPZktleSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMoZGlyKS5pbmNsdWRlcyhgJHt2YWx1ZU9mS2V5fWApKSB7XG4gICAgICBkaXJbYCR7dmFsdWVPZktleX1gXSA9IFtdO1xuICAgIH1cbiAgICBkaXJbYCR7dmFsdWVPZktleX1gXS5wdXNoKG5leHRJdGVtKTtcbiAgICByZXR1cm4gZGlyO1xuICB9LCB7fSk7XG59O1xuXG4vKipcbiAqIFThuqFvIG3hu5l0IG3huqNuZyBjw6FjIHPhu5EgdOG7qyBnacOhIHRy4buLIGLhuq90IMSR4bqndSDEkeG6v24gZ2nDoSB0cuG7iyBr4bq/dCB0aMO6YyB24bubaSBixrDhu5tjIG5o4bqjeSB0w7l5IGNo4buNblxuICogQHBhcmFtIHN0YXJ0IEdpw6EgdHLhu4sgYuG6r3QgxJHhuqd1IGPhu6dhIGTDo3kgc+G7kS4gTuG6v3UgY2jhu4kgY8OzIG3hu5l0IHRoYW0gc+G7kSwgxJHDonkgc+G6vSBsw6AgZ2nDoSB0cuG7iyBr4bq/dCB0aMO6YyB2w6AgZ2nDoSB0cuG7iyBi4bqvdCDEkeG6p3Ugc+G6vSBsw6AgMFxuICogQHBhcmFtIGVuZCBHacOhIHRy4buLIGvhur90IHRow7pjIGPhu6dhIGTDo3kgc+G7kSAodMO5eSBjaOG7jW4pXG4gKiBAcGFyYW0gc3RlcCBCxrDhu5tjIG5o4bqjeSBnaeG7r2EgY8OhYyBz4buRIHRyb25nIGTDo3kgKHTDuXkgY2jhu41uKS4gTeG6t2MgxJHhu4tuaCBsw6AgMSBu4bq/dSBlbmQgPiBzdGFydCwgLTEgbuG6v3UgZW5kIDwgc3RhcnRcbiAqIEByZXR1cm5zIE3huqNuZyBjw6FjIHPhu5EgdOG7qyBzdGFydCDEkeG6v24gZW5kIHbhu5tpIGLGsOG7m2MgbmjhuqN5IHN0ZXBcbiAqIEBleGFtcGxlXG4gKiByYW5nZSg0KTsgICAgICAvLyBbMCwgMSwgMiwgM11cbiAqIHJhbmdlKDEsIDUpOyAgIC8vIFsxLCAyLCAzLCA0XVxuICogcmFuZ2UoMCwgMjAsIDUpOyAvLyBbMCwgNSwgMTAsIDE1XVxuICogcmFuZ2UoNSwgMik7ICAgLy8gWzUsIDQsIDNdXG4gKi9cbmV4cG9ydCBjb25zdCByYW5nZSA9IChzdGFydDogbnVtYmVyLCBlbmQ/OiBudW1iZXIsIHN0ZXA/OiBudW1iZXIpOiBBcnJheTxudW1iZXI+ID0+IHtcbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA9PT0gbnVsbCkge1xuICAgIGVuZCA9IHN0YXJ0O1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuXG4gIGlmICghc3RlcCkge1xuICAgIHN0ZXAgPSBlbmQgPCAwID8gLTEgOiAxO1xuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0ICYmIHN0ZXAgPiAwKSB7XG4gICAgc3RlcCAqPSAtMTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlU3RhcnRCeVN0ZXAgPSBzdGVwICsgc3RhcnQ7XG4gIGNvbnN0IGRpcmVjdGlvbiA9IHN0YXJ0IDwgZW5kID8gJ2FzYycgOiAnZGVzYyc7XG4gIGlmICgoZGlyZWN0aW9uID09PSAnYXNjJyAmJiAodmFsdWVTdGFydEJ5U3RlcCA8IHN0YXJ0IHx8IHZhbHVlU3RhcnRCeVN0ZXAgPiBlbmQpKSB8fCAoZGlyZWN0aW9uID09PSAnZGVzYycgJiYgKHZhbHVlU3RhcnRCeVN0ZXAgPiBzdGFydCB8fCB2YWx1ZVN0YXJ0QnlTdGVwIDwgZW5kKSkpIHtcbiAgICByZXR1cm4gW3N0YXJ0XTtcbiAgfVxuXG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IE1hdGguYWJzKGVuZCAtIHN0YXJ0KTsgaW5kZXgrKykge1xuICAgIGxldCB2YWx1ZSA9IHN0YXJ0ICsgaW5kZXggKiBzdGVwO1xuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgdmFsdWUgPSBzdGFydDtcbiAgICB9XG5cbiAgICBpZiAoKGRpcmVjdGlvbiA9PT0gJ2FzYycgJiYgKHZhbHVlIDwgc3RhcnQgfHwgdmFsdWUgPiBlbmQpKSB8fCAoZGlyZWN0aW9uID09PSAnZGVzYycgJiYgKHZhbHVlID4gc3RhcnQgfHwgdmFsdWUgPCBlbmQpKSkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG5cbiAgICBhcnIucHVzaCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufTtcblxuLyoqXG4gKiBTbyBzw6FuaCBoYWkgZ2nDoSB0cuG7iyBi4bqldCBr4buzIGPDsyBi4bqxbmcgbmhhdSBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUxIEdpw6EgdHLhu4sgdGjhu6kgbmjhuqV0IGPhuqduIHNvIHPDoW5oXG4gKiBAcGFyYW0gdmFsdWUyIEdpw6EgdHLhu4sgdGjhu6kgaGFpIGPhuqduIHNvIHPDoW5oXG4gKiBAcGFyYW0gZXhhY3RseVBvc2l0aW9uIEPDsyBzbyBzw6FuaCBjaMOtbmggeMOhYyB24buLIHRyw60gY8OhYyBwaOG6p24gdOG7rSB0cm9uZyBt4bqjbmcgaGF5IGtow7RuZ1xuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBoYWkgZ2nDoSB0cuG7iyBi4bqxbmcgbmhhdSwgZmFsc2UgbuG6v3Uga2jDtG5nIGLhurFuZyBuaGF1XG4gKiBAZXhhbXBsZVxuICogaXNFcXVhbChbMSwyLDNdLCBbMSwyLDNdKTsgLy8gdHJ1ZVxuICogaXNFcXVhbChbMSwyLDNdLCBbMywyLDFdKTsgLy8gdHJ1ZSBraGkgZXhhY3RseVBvc2l0aW9uID0gZmFsc2VcbiAqIGlzRXF1YWwoWzEsMiwzXSwgWzMsMiwxXSk7IC8vIGZhbHNlIGtoaSBleGFjdGx5UG9zaXRpb24gPSB0cnVlXG4gKiBpc0VxdWFsKHthOjF9LCB7YToxfSk7IC8vIHRydWVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRXF1YWwgPSAoXG4gIHZhbHVlMTogYW55LFxuICB2YWx1ZTI6IGFueSxcbiAgb3B0aW9ucz86IHtcbiAgICBleGFjdGx5UG9zaXRpb24/OiBib29sZWFuO1xuICAgIGlnbm9yZUV4YWN0bHlEYXRhVHlwZT86IGJvb2xlYW47XG4gICAgaWdub3JlVW5XcmFwU2lnbmFsPzogYm9vbGVhbjtcbiAgfVxuKTogYm9vbGVhbiA9PiB7XG4gIC8vIEhhbmRsZSBzaWduYWxzXG4gIGlmICghb3B0aW9ucz8uaWdub3JlVW5XcmFwU2lnbmFsKSB7XG4gICAgdmFsdWUxID0gdW53cmFwU2lnbmFsKHZhbHVlMSk7XG4gICAgdmFsdWUyID0gdW53cmFwU2lnbmFsKHZhbHVlMik7XG4gIH1cbiAgY29uc3QgeyBleGFjdGx5UG9zaXRpb24gPSBmYWxzZSwgaWdub3JlRXhhY3RseURhdGFUeXBlID0gZmFsc2UgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKHZhbHVlMSA9PT0gdmFsdWUyIHx8ICh2YWx1ZTEgPT09IG51bGwgJiYgdmFsdWUyID09PSBudWxsKSB8fCAodmFsdWUxID09PSB1bmRlZmluZWQgJiYgdmFsdWUyID09PSB1bmRlZmluZWQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaWdub3JlRXhhY3RseURhdGFUeXBlKSB7XG4gICAgcmV0dXJuIGlzRXF1YWwoaXNOaWwodmFsdWUxKSA/IHVuZGVmaW5lZCA6IGAke3ZhbHVlMX1gLCBpc05pbCh2YWx1ZTIpID8gdW5kZWZpbmVkIDogYCR7dmFsdWUyfWApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZTEgIT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZTIgIT09ICdvYmplY3QnIHx8IChBcnJheS5pc0FycmF5KHZhbHVlMSkgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUyKSkgfHwgKCFBcnJheS5pc0FycmF5KHZhbHVlMSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7XG4gICAgaWYgKHZhbHVlMS5sZW5ndGggIT09IHZhbHVlMi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFleGFjdGx5UG9zaXRpb24pIHtcbiAgICAgIHJldHVybiAhdmFsdWUxLnNvbWUoKGl0ZW06IGFueSkgPT4gIXZhbHVlMi5pbmNsdWRlcyhpdGVtKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICF2YWx1ZTEuc29tZSgoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSA9PiAhaXNFcXVhbChpdGVtLCB2YWx1ZTJbaW5kZXhdLCBvcHRpb25zKSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXModmFsdWUxKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKHZhbHVlMikubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAhT2JqZWN0LmtleXModmFsdWUxKS5zb21lKChrZXkpID0+ICFpc0VxdWFsKHZhbHVlMVtrZXldLCB2YWx1ZTJba2V5XSwgb3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBMb+G6oWkgYuG7jyBjw6FjIHBo4bqnbiB04butIHRyw7luZyBs4bq3cCB0cm9uZyBt4bqjbmcgZOG7sWEgdHLDqm4gbeG7mXQgdGh14buZYyB0w61uaCBjaOG7iSDEkeG7i25oXG4gKiBAcGFyYW0gZGF0YSBN4bqjbmcgZOG7ryBsaeG7h3UgY+G6p24geOG7rSBsw71cbiAqIEBwYXJhbSBrZXkgVMOqbiB0aHXhu5ljIHTDrW5oIGTDuW5nIMSR4buDIHNvIHPDoW5oIHRyw7luZyBs4bq3cC4gTuG6v3Uga2jDtG5nIGPDsyBrZXkgdGjDrCBzbyBzw6FuaCB0cuG7sWMgdGnhur9wIGdpw6EgdHLhu4tcbiAqIEByZXR1cm5zIE3huqNuZyBt4bubaSBjaOG7qWEgY8OhYyBwaOG6p24gdOG7rSBraMO0bmcgdHLDuW5nIGzhurdwXG4gKiBAZXhhbXBsZVxuICogY29uc3QgYXJyID0gW1xuICogICB7IGlkOiAxLCBuYW1lOiAnQScgfSxcbiAqICAgeyBpZDogMiwgbmFtZTogJ0InIH0sXG4gKiAgIHsgaWQ6IDEsIG5hbWU6ICdDJyB9XG4gKiBdO1xuICogdW5pcUJ5KGFyciwgJ2lkJyk7IC8vIFt7IGlkOiAxLCBuYW1lOiAnQScgfSwgeyBpZDogMiwgbmFtZTogJ0InIH1dXG4gKlxuICogY29uc3QgbnVtYmVycyA9IFsxLCAyLCAyLCAzLCAzXTtcbiAqIHVuaXFCeShudW1iZXJzKTsgLy8gWzEsIDIsIDNdXG4gKlxuICogY29uc3QgbnVtYmVyc1NpZ25hbCA9IFtzaWduYWwoMSksIHNpZ25hbCgyKSwgc2lnbmFsKDMpLCBzaWduYWwoMiksIHNpZ25hbCg1KSwgc2lnbmFsKDQpLCBzaWduYWwoMSksIHNpZ25hbCg2KSwgc2lnbmFsKDcpLCBzaWduYWwoNildO1xuICogdW5pcUJ5KG51bWJlcnNTaWduYWwpOyAvLyBbc2lnbmFsKDEpLCBzaWduYWwoMiksIHNpZ25hbCgzKSwgc2lnbmFsKDUpLCBzaWduYWwoNCksIHNpZ25hbCg2KSwgc2lnbmFsKDcpXVxuICovXG5leHBvcnQgY29uc3QgdW5pcUJ5ID0gPFQ+KGRhdGE6IEFycmF5PFQ+LCBrZXk/OiBzdHJpbmcpOiBBcnJheTxUPiA9PiB7XG4gIGlmICgha2V5IHx8ICFkYXRhPy5sZW5ndGggfHwgdHlwZW9mIGdldChkYXRhLCAnWzBdJykgIT09ICdvYmplY3QnKSB7XG4gICAgLy8gWOG7rSBsw70gbeG6o25nIGNo4bupYSBzaWduYWwgdmFsdWVzXG4gICAgaWYgKGRhdGFbMF0gJiYgaXNTaWduYWwoZGF0YVswXSkpIHtcbiAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYCR7Z2V0PGFueT4oaXRlbSwgJycpfWA7XG4gICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBY4butIGzDvSBt4bqjbmcgcHJpbWl0aXZlIHZhbHVlc1xuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoZGF0YSkpO1xuICB9XG5cbiAgY29uc3QgZGF0YVVuaXF1ZSA9IGtleUJ5KGRhdGEgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4sIGtleSk7XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGRhdGFVbmlxdWUpLm1hcCgoa2V5KSA9PiBkYXRhVW5pcXVlW2tleV0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlSW50ZXJmYWNlID0gKG9iajogYW55LCBpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBnZW5lcmF0ZVR5cGUgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAnYW55JztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gJ0RhdGUnO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmV0dXJuICdSZWdFeHAnO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJ0FycmF5PGFueT4nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBBcnJheTwke2dlbmVyYXRlVHlwZSh2YWx1ZVswXSl9PmA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBsZXQgaW50ZXJmYWNlU3RyID0gJ3tcXG4nO1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IGdlbmVyYXRlVHlwZSh2YWx1ZVtrZXldKTtcbiAgICAgICAgICBpbnRlcmZhY2VTdHIgKz0gYCAgJHtrZXl9OiAke3ZhbHVlVHlwZX07XFxuYDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW50ZXJmYWNlU3RyICs9ICd9JztcbiAgICAgIHJldHVybiBpbnRlcmZhY2VTdHI7XG4gICAgfVxuXG4gICAgcmV0dXJuICdhbnknO1xuICB9O1xuXG4gIGNvbnN0IGludGVyZmFjZVN0ciA9IGBpbnRlcmZhY2UgJHtpbnRlcmZhY2VOYW1lfSAke2dlbmVyYXRlVHlwZShvYmopfWA7XG4gIHJldHVybiBpbnRlcmZhY2VTdHI7XG59O1xuIl19
|
|
@@ -1715,7 +1715,7 @@ const get = (obj, path, defaultValue, keepLastValueIfSignal) => {
|
|
|
1715
1715
|
* set(obj, 'a.b', 2); // { a: { b: 2 } }
|
|
1716
1716
|
*/
|
|
1717
1717
|
const set = (obj, path, value, options) => {
|
|
1718
|
-
if (
|
|
1718
|
+
if (isNil(obj) || (typeof obj !== 'object' && !isSignal(obj)) || (isSignal(obj) && typeof obj() !== 'object')) {
|
|
1719
1719
|
throw new Error('The first argument must be an object');
|
|
1720
1720
|
}
|
|
1721
1721
|
if (obj instanceof HttpParams) {
|