flexdataset 0.11.0 → 0.12.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.
@@ -69,6 +69,9 @@ function normalizeColumns(value) {
69
69
  type: asString(record.type),
70
70
  description: asString(record.description),
71
71
  nullable: asOptionalBoolean(record.nullable),
72
+ generated: asOptionalString(record.generated),
73
+ expression: asOptionalString(record.expression),
74
+ expressionColumns: 'expressionColumns' in record ? asStringArray(record.expressionColumns) : undefined,
72
75
  };
73
76
  });
74
77
  }
@@ -313,4 +316,4 @@ function loadRoot(rootDir) {
313
316
  violations,
314
317
  };
315
318
  }
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3TkgsNEJBd0lDO0FBOVZELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFjN0IsNkNBRXNCO0FBSXRCLHFEQUVnQztBQWVoQyxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzVCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQWdDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYztJQUMzQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzVCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsS0FBYztJQUM3QixPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsS0FBYztJQUNyQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUNwQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxT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LENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPO1lBQ1AsV0FBVztZQUNYLE1BQU0sRUFBRSxZQUFZO1NBQ3ZCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPO1FBQ0gsS0FBSyxFQUFFO1lBQ0gsT0FBTyxFQUFFLFlBQVk7WUFDckIsT0FBTztZQUNQLE1BQU07U0FDVDtRQUNELFVBQVU7S0FDYixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlsZXN5c3RlbSBsb2FkZXIuIFdhbGtzIGEgZGF0YXNldCByb290LCBwYXJzZXMgZWFjaCBKU09OIGZpbGUsIHJ1bnMgTGF5ZXIgMVxuICogc3RydWN0dXJhbCB2YWxpZGF0aW9uLCBhbmQgbm9ybWFsaXplcyBldmVyeXRoaW5nIGludG8gYSBgV29ybGRgIG9mXG4gKiBjb25jcmV0ZSBgVGFibGVUeXBlQmFzZWAgaW5zdGFuY2VzIHRoYXQgdGhlIHNlbWFudGljIHJ1bGVzIG9wZXJhdGUgb24uXG4gKlxuICogUGFyc2UgZXJyb3JzLCBzdHJ1Y3R1cmFsIGVycm9ycywgYW5kIGEgbWlzc2luZyBzY2hlbWEtZGVzY3JpcHRpb24gZmlsZSBhcmVcbiAqIHJlcG9ydGVkIGhlcmU7IGFsbCBjcm9zcy1maWVsZCAvIGNyb3NzLWZpbGUgbG9naWMgbGl2ZXMgaW4gdGhlIHRhYmxlLXR5cGVcbiAqIGNsYXNzZXMgKGAuL3RhYmxlLXR5cGUudHNgLCBgLi90YWJsZS10eXBlcy8qYCkuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtcbiAgICBDaGVja0NvbnN0cmFpbnQsXG4gICAgQ29sdW1uLFxuICAgIEZvcmVpZ25LZXksXG4gICAgSW5kZXgsXG4gICAgUGFydGl0aW9uLFxuICAgIFNjaGVtYURlc2NyaXB0aW9uLFxuICAgIFNvcnRGaWVsZCxcbiAgICBUYWJsZURlZmluaXRpb24sXG4gICAgVW5pcXVlQ29uc3RyYWludCxcbiAgICBWaW9sYXRpb24sXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZSxcbn0gZnJvbSAnLi9zdHJ1Y3R1cmFsJztcbmltcG9ydCB7XG4gICAgVGFibGVUeXBlQmFzZSxcbn0gZnJvbSAnLi90YWJsZS10eXBlJztcbmltcG9ydCB7XG4gICAgY3JlYXRlVGFibGVUeXBlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL3JlZ2lzdHJ5JztcbmltcG9ydCB7XG4gICAgTG9hZGVkU2NoZW1hLFxuICAgIFdvcmxkLFxufSBmcm9tICcuL3dvcmxkJztcblxuLyoqIFJlc3VsdCBvZiBsb2FkaW5nIGEgcm9vdDogdGhlIG1vZGVsIHBsdXMgYW55IGxvYWQtdGltZSB2aW9sYXRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkT3V0Y29tZSB7XG4gICAgLyoqIFRoZSBsb2FkZWQgbW9kZWwuICovXG4gICAgcmVhZG9ubHkgd29ybGQ6IFdvcmxkO1xuXG4gICAgLyoqIFBhcnNlLCBzdHJ1Y3R1cmFsLCBhbmQgbWlzc2luZy1kZXNjcmlwdGlvbiB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdO1xufVxuXG5mdW5jdGlvbiBhc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IDoge307XG59XG5cbmZ1bmN0aW9uIGFzQXJyYXkodmFsdWU6IHVua25vd24pOiB1bmtub3duW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7XG59XG5cbmZ1bmN0aW9uIGFzQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IHZhbHVlIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxCb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxOdW1iZXIodmFsdWU6IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nQXJyYXkodmFsdWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbnModmFsdWU6IHVua25vd24pOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB0eXBlOiBhc1N0cmluZyhyZWNvcmQudHlwZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgICAgIG51bGxhYmxlOiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQubnVsbGFibGUpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXJ0aXRpb25zKHZhbHVlOiB1bmtub3duKTogUGFydGl0aW9uW10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgdHlwZTogYXNTdHJpbmcocmVjb3JkLnR5cGUpLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGFzU3RyaW5nKHJlY29yZC5kZXNjcmlwdGlvbiksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNvcnRPcmRlcih2YWx1ZTogdW5rbm93bik6IFNvcnRGaWVsZFtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbjogYXNTdHJpbmcocmVjb3JkLmNvbHVtbiksXG4gICAgICAgICAgICB0cmFuc2Zvcm06IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLnRyYW5zZm9ybSksXG4gICAgICAgICAgICBkaXJlY3Rpb246IGFzU3RyaW5nKHJlY29yZC5kaXJlY3Rpb24pLFxuICAgICAgICAgICAgbnVsbE9yZGVyOiBhc1N0cmluZyhyZWNvcmQubnVsbE9yZGVyKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplSW5kZXhlcyh2YWx1ZTogdW5rbm93bik6IEluZGV4W10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgbWV0aG9kOiBhc1N0cmluZyhyZWNvcmQubWV0aG9kKSxcbiAgICAgICAgICAgIHVuaXF1ZTogYXNPcHRpb25hbEJvb2xlYW4ocmVjb3JkLnVuaXF1ZSksXG4gICAgICAgICAgICBjb2x1bW5zOiBhc0FycmF5KHJlY29yZC5jb2x1bW5zKS5tYXAoKHJhd0NvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtblJlY29yZCA9IGFzUmVjb3JkKHJhd0NvbHVtbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcoY29sdW1uUmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBzb3J0OiBhc09wdGlvbmFsU3RyaW5nKGNvbHVtblJlY29yZC5zb3J0KSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbHM6IGFzT3B0aW9uYWxTdHJpbmcoY29sdW1uUmVjb3JkLm51bGxzKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBpbmNsdWRlOiBhc1N0cmluZ0FycmF5KHJlY29yZC5pbmNsdWRlKSxcbiAgICAgICAgICAgIHdoZXJlOiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC53aGVyZSksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXF1ZUNvbnN0cmFpbnRzKHZhbHVlOiB1bmtub3duKTogVW5pcXVlQ29uc3RyYWludFtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGFzU3RyaW5nKHJlY29yZC5uYW1lKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IGFzU3RyaW5nQXJyYXkocmVjb3JkLmNvbHVtbnMpLFxuICAgICAgICAgICAgbnVsbHNOb3REaXN0aW5jdDogYXNPcHRpb25hbEJvb2xlYW4ocmVjb3JkLm51bGxzTm90RGlzdGluY3QpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDaGVja0NvbnN0cmFpbnRzKHZhbHVlOiB1bmtub3duKTogQ2hlY2tDb25zdHJhaW50W10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogYXNTdHJpbmcocmVjb3JkLmV4cHJlc3Npb24pLFxuICAgICAgICAgICAgY29sdW1uczogYXNTdHJpbmdBcnJheShyZWNvcmQuY29sdW1ucyksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZ01hcCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHZhbHVlKTtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtcbiAgICAgICAga2V5LFxuICAgICAgICByYXcsXG4gICAgXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmF3ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSByYXc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRm9yZWlnbktleXModmFsdWU6IHVua25vd24pOiBGb3JlaWduS2V5W10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc291cmNlVGFibGU6IGFzU3RyaW5nKHJlY29yZC5zb3VyY2VUYWJsZSksXG4gICAgICAgICAgICBzb3VyY2VDb2x1bW46IGFzU3RyaW5nKHJlY29yZC5zb3VyY2VDb2x1bW4pLFxuICAgICAgICAgICAgbG9jYWxDb2x1bW46IGFzU3RyaW5nKHJlY29yZC5sb2NhbENvbHVtbiksXG4gICAgICAgICAgICBhbGxvd051bGxzOiBhc0Jvb2xlYW4ocmVjb3JkLmFsbG93TnVsbHMpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVUYWJsZURlZmluaXRpb24ocmF3OiB1bmtub3duKTogVGFibGVEZWZpbml0aW9uIHtcbiAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNwZWNWZXJzaW9uOiBhc1N0cmluZyhyZWNvcmQuc3BlY1ZlcnNpb24pLFxuICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgdGFibGVUeXBlOiBhc1N0cmluZyhyZWNvcmQudGFibGVUeXBlKSxcbiAgICAgICAgaXNSYXdEYXRhOiBhc0Jvb2xlYW4ocmVjb3JkLmlzUmF3RGF0YSksXG4gICAgICAgIGZvcm1hdFZlcnNpb246IGFzT3B0aW9uYWxOdW1iZXIocmVjb3JkLmZvcm1hdFZlcnNpb24pLFxuICAgICAgICBjb2x1bW5zOiBub3JtYWxpemVDb2x1bW5zKHJlY29yZC5jb2x1bW5zKSxcbiAgICAgICAgcHJpbWFyeUtleTogYXNTdHJpbmdBcnJheShyZWNvcmQucHJpbWFyeUtleSksXG4gICAgICAgIHBhcnRpdGlvbnM6IG5vcm1hbGl6ZVBhcnRpdGlvbnMocmVjb3JkLnBhcnRpdGlvbnMpLFxuICAgICAgICBzb3J0T3JkZXI6IG5vcm1hbGl6ZVNvcnRPcmRlcihyZWNvcmQuc29ydE9yZGVyKSxcbiAgICAgICAgaW5kZXhlczogbm9ybWFsaXplSW5kZXhlcyhyZWNvcmQuaW5kZXhlcyksXG4gICAgICAgIHVuaXF1ZUNvbnN0cmFpbnRzOiBub3JtYWxpemVVbmlxdWVDb25zdHJhaW50cyhyZWNvcmQudW5pcXVlQ29uc3RyYWludHMpLFxuICAgICAgICBjaGVja0NvbnN0cmFpbnRzOiBub3JtYWxpemVDaGVja0NvbnN0cmFpbnRzKHJlY29yZC5jaGVja0NvbnN0cmFpbnRzKSxcbiAgICAgICAgdGFibGVQcm9wZXJ0aWVzOiBub3JtYWxpemVTdHJpbmdNYXAocmVjb3JkLnRhYmxlUHJvcGVydGllcyksXG4gICAgICAgIGRlcGVuZHNPbjogYXNTdHJpbmdBcnJheShyZWNvcmQuZGVwZW5kc09uKSxcbiAgICAgICAgZm9yZWlnbktleXM6IG5vcm1hbGl6ZUZvcmVpZ25LZXlzKHJlY29yZC5mb3JlaWduS2V5cyksXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2NoZW1hRGVzY3JpcHRpb24ocmF3OiB1bmtub3duKTogU2NoZW1hRGVzY3JpcHRpb24ge1xuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3BlY1ZlcnNpb246IGFzU3RyaW5nKHJlY29yZC5zcGVjVmVyc2lvbiksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgIH07XG59XG5cbi8vLyBTY2hlbWEgYW5kIHRhYmxlIG5hbWVzIG11c3QgYmUgbG93ZXJjYXNlIHNuYWtlX2Nhc2Ugc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZFxuLy8vIGZyb20gYGRlcGVuZHNPbmAgYW5kIGZvcmVpZ24ga2V5cywgd2hvc2UgcGF0dGVybnMgcmVxdWlyZSB0aGUgc2FtZSBzaGFwZS5cbmNvbnN0IE5BTUVfUkUgPSAvXlthLXowLTlfXSskLztcblxuLyoqXG4gKiBMb2FkIGEgZGF0YXNldCByb290IGludG8gYSBgV29ybGRgLlxuICpcbiAqIEBwYXJhbSByb290RGlyIEFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggdG8gdGhlIGRhdGFzZXQgcm9vdC5cbiAqIEByZXR1cm5zIFRoZSBsb2FkZWQgd29ybGQgcGx1cyBsb2FkLXRpbWUgdmlvbGF0aW9ucy5cbiAqIEB0aHJvd3MgRXJyb3IgV2hlbiBgcm9vdERpcmAgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSb290KHJvb3REaXI6IHN0cmluZyk6IExvYWRPdXRjb21lIHtcbiAgICBjb25zdCBhYnNvbHV0ZVJvb3QgPSBwYXRoLnJlc29sdmUocm9vdERpcik7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGFic29sdXRlUm9vdCkgfHwgIWZzLnN0YXRTeW5jKGFic29sdXRlUm9vdCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRhdGFzZXQgcm9vdCBpcyBub3QgYSBkaXJlY3Rvcnk6ICR7YWJzb2x1dGVSb290fWApO1xuICAgIH1cblxuICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgY29uc3Qgc2NoZW1hcyA9IG5ldyBNYXA8c3RyaW5nLCBMb2FkZWRTY2hlbWE+KCk7XG4gICAgY29uc3QgdGFibGVzID0gbmV3IE1hcDxzdHJpbmcsIFRhYmxlVHlwZUJhc2U+KCk7XG5cbiAgICBjb25zdCBzY2hlbWFEaXJzID0gZnMucmVhZGRpclN5bmMoYWJzb2x1dGVSb290LCB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkuaXNEaXJlY3RvcnkoKSAmJiAhZW50cnkubmFtZS5zdGFydHNXaXRoKCcuJykpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcblxuICAgIGZvciAoY29uc3Qgc2NoZW1hRGlyIG9mIHNjaGVtYURpcnMpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IHNjaGVtYURpci5uYW1lO1xuICAgICAgICBjb25zdCBkaXJQYXRoID0gcGF0aC5qb2luKGFic29sdXRlUm9vdCwgc2NoZW1hTmFtZSk7XG5cbiAgICAgICAgaWYgKCFOQU1FX1JFLnRlc3Qoc2NoZW1hTmFtZSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9OQU1FX1ZBTElEJyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgcGF0aDogZGlyUGF0aCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgc2NoZW1hIG5hbWUgXCIke3NjaGVtYU5hbWV9XCIgbXVzdCBiZSBsb3dlcmNhc2Ugc25ha2VfY2FzZSAobWF0Y2hpbmcgJHtOQU1FX1JFfSlgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXNjRmlsZU5hbWUgPSBgJHtzY2hlbWFOYW1lfS5qc29uYDtcbiAgICAgICAgY29uc3QganNvbkZpbGVzID0gZnMucmVhZGRpclN5bmMoZGlyUGF0aClcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpbGUpID0+IGZpbGUuZW5kc1dpdGgoJy5qc29uJykpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcblxuICAgICAgICBsZXQgZGVzY3JpcHRpb246IFNjaGVtYURlc2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IGxvYWRlZFRhYmxlczogVGFibGVUeXBlQmFzZVtdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGpzb25GaWxlcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyUGF0aCwgZmlsZSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcblxuICAgICAgICAgICAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdGSUxFX1BBUlNFX0VSUk9SJyxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGludmFsaWQgSlNPTjogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbGUgPT09IGRlc2NGaWxlTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdHVyYWwgPSB2YWxpZGF0ZVN0cnVjdHVyZSgnc2NoZW1hJywgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0cnVjdHVyYWxFcnJvciBvZiBzdHJ1Y3R1cmFsLmVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX1ZBTElEQVRJT04nLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHN0cnVjdHVyYWxFcnJvci5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogc3RydWN0dXJhbEVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IG5vcm1hbGl6ZVNjaGVtYURlc2NyaXB0aW9uKHBhcnNlZCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IGZpbGUuc2xpY2UoMCwgLScuanNvbicubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IHF1YWxpZmllZE5hbWUgPSBgJHtzY2hlbWFOYW1lfS4ke3RhYmxlTmFtZX1gO1xuXG4gICAgICAgICAgICBpZiAoIU5BTUVfUkUudGVzdCh0YWJsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdUQUJMRV9OQU1FX1ZBTElEJyxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHRhYmxlIG5hbWUgXCIke3RhYmxlTmFtZX1cIiBtdXN0IGJlIGxvd2VyY2FzZSBzbmFrZV9jYXNlIChtYXRjaGluZyAke05BTUVfUkV9KWAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN0cnVjdHVyYWwgPSB2YWxpZGF0ZVN0cnVjdHVyZSgndGFibGUnLCBwYXJzZWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdHJ1Y3R1cmFsRXJyb3Igb2Ygc3RydWN0dXJhbC5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9WQUxJREFUSU9OJyxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogc3RydWN0dXJhbEVycm9yLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogc3RydWN0dXJhbEVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvYWRlZFRhYmxlID0gY3JlYXRlVGFibGVUeXBlKHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgbmFtZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgIHF1YWxpZmllZE5hbWUsXG4gICAgICAgICAgICAgICAgZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgc3RydWN0dXJhbGx5VmFsaWQ6IHN0cnVjdHVyYWwudmFsaWQsXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbjogbm9ybWFsaXplVGFibGVEZWZpbml0aW9uKHBhcnNlZCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvYWRlZFRhYmxlcy5wdXNoKGxvYWRlZFRhYmxlKTtcbiAgICAgICAgICAgIHRhYmxlcy5zZXQocXVhbGlmaWVkTmFtZSwgbG9hZGVkVGFibGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdTQ0hFTUFfREVTQ19QUkVTRU5UJyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgcGF0aDogcGF0aC5qb2luKGRpclBhdGgsIGRlc2NGaWxlTmFtZSksXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYHNjaGVtYSBcIiR7c2NoZW1hTmFtZX1cIiBpcyBtaXNzaW5nIGl0cyBkZXNjcmlwdGlvbiBmaWxlIFwiJHtkZXNjRmlsZU5hbWV9XCJgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzY2hlbWFzLnNldChzY2hlbWFOYW1lLCB7XG4gICAgICAgICAgICBuYW1lOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgZGlyUGF0aCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgdGFibGVzOiBsb2FkZWRUYWJsZXMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHdvcmxkOiB7XG4gICAgICAgICAgICByb290RGlyOiBhYnNvbHV0ZVJvb3QsXG4gICAgICAgICAgICBzY2hlbWFzLFxuICAgICAgICAgICAgdGFibGVzLFxuICAgICAgICB9LFxuICAgICAgICB2aW9sYXRpb25zLFxuICAgIH07XG59XG4iXX0=
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyTkgsNEJBd0lDO0FBaldELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFjN0IsNkNBRXNCO0FBSXRCLHFEQUVnQztBQWVoQyxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzVCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQWdDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYztJQUMzQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzVCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsS0FBYztJQUM3QixPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsS0FBYztJQUNyQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUNwQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxT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WUFDdkIsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDWixLQUFLLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztnQkFDdEMsT0FBTyxFQUFFLFdBQVcsVUFBVSxzQ0FBc0MsWUFBWSxHQUFHO2FBQ3RGLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPO1lBQ1AsV0FBVztZQUNYLE1BQU0sRUFBRSxZQUFZO1NBQ3ZCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPO1FBQ0gsS0FBSyxFQUFFO1lBQ0gsT0FBTyxFQUFFLFlBQVk7WUFDckIsT0FBTztZQUNQLE1BQU07U0FDVDtRQUNELFVBQVU7S0FDYixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlsZXN5c3RlbSBsb2FkZXIuIFdhbGtzIGEgZGF0YXNldCByb290LCBwYXJzZXMgZWFjaCBKU09OIGZpbGUsIHJ1bnMgTGF5ZXIgMVxuICogc3RydWN0dXJhbCB2YWxpZGF0aW9uLCBhbmQgbm9ybWFsaXplcyBldmVyeXRoaW5nIGludG8gYSBgV29ybGRgIG9mXG4gKiBjb25jcmV0ZSBgVGFibGVUeXBlQmFzZWAgaW5zdGFuY2VzIHRoYXQgdGhlIHNlbWFudGljIHJ1bGVzIG9wZXJhdGUgb24uXG4gKlxuICogUGFyc2UgZXJyb3JzLCBzdHJ1Y3R1cmFsIGVycm9ycywgYW5kIGEgbWlzc2luZyBzY2hlbWEtZGVzY3JpcHRpb24gZmlsZSBhcmVcbiAqIHJlcG9ydGVkIGhlcmU7IGFsbCBjcm9zcy1maWVsZCAvIGNyb3NzLWZpbGUgbG9naWMgbGl2ZXMgaW4gdGhlIHRhYmxlLXR5cGVcbiAqIGNsYXNzZXMgKGAuL3RhYmxlLXR5cGUudHNgLCBgLi90YWJsZS10eXBlcy8qYCkuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtcbiAgICBDaGVja0NvbnN0cmFpbnQsXG4gICAgQ29sdW1uLFxuICAgIEZvcmVpZ25LZXksXG4gICAgSW5kZXgsXG4gICAgUGFydGl0aW9uLFxuICAgIFNjaGVtYURlc2NyaXB0aW9uLFxuICAgIFNvcnRGaWVsZCxcbiAgICBUYWJsZURlZmluaXRpb24sXG4gICAgVW5pcXVlQ29uc3RyYWludCxcbiAgICBWaW9sYXRpb24sXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZSxcbn0gZnJvbSAnLi9zdHJ1Y3R1cmFsJztcbmltcG9ydCB7XG4gICAgVGFibGVUeXBlQmFzZSxcbn0gZnJvbSAnLi90YWJsZS10eXBlJztcbmltcG9ydCB7XG4gICAgY3JlYXRlVGFibGVUeXBlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL3JlZ2lzdHJ5JztcbmltcG9ydCB7XG4gICAgTG9hZGVkU2NoZW1hLFxuICAgIFdvcmxkLFxufSBmcm9tICcuL3dvcmxkJztcblxuLyoqIFJlc3VsdCBvZiBsb2FkaW5nIGEgcm9vdDogdGhlIG1vZGVsIHBsdXMgYW55IGxvYWQtdGltZSB2aW9sYXRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkT3V0Y29tZSB7XG4gICAgLyoqIFRoZSBsb2FkZWQgbW9kZWwuICovXG4gICAgcmVhZG9ubHkgd29ybGQ6IFdvcmxkO1xuXG4gICAgLyoqIFBhcnNlLCBzdHJ1Y3R1cmFsLCBhbmQgbWlzc2luZy1kZXNjcmlwdGlvbiB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdO1xufVxuXG5mdW5jdGlvbiBhc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IDoge307XG59XG5cbmZ1bmN0aW9uIGFzQXJyYXkodmFsdWU6IHVua25vd24pOiB1bmtub3duW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7XG59XG5cbmZ1bmN0aW9uIGFzQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IHZhbHVlIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxCb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxOdW1iZXIodmFsdWU6IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nQXJyYXkodmFsdWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbnModmFsdWU6IHVua25vd24pOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB0eXBlOiBhc1N0cmluZyhyZWNvcmQudHlwZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgICAgIG51bGxhYmxlOiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQubnVsbGFibGUpLFxuICAgICAgICAgICAgZ2VuZXJhdGVkOiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC5nZW5lcmF0ZWQpLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuZXhwcmVzc2lvbiksXG4gICAgICAgICAgICBleHByZXNzaW9uQ29sdW1uczogJ2V4cHJlc3Npb25Db2x1bW5zJyBpbiByZWNvcmQgPyBhc1N0cmluZ0FycmF5KHJlY29yZC5leHByZXNzaW9uQ29sdW1ucykgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhcnRpdGlvbnModmFsdWU6IHVua25vd24pOiBQYXJ0aXRpb25bXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB0eXBlOiBhc1N0cmluZyhyZWNvcmQudHlwZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU29ydE9yZGVyKHZhbHVlOiB1bmtub3duKTogU29ydEZpZWxkW10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sdW1uOiBhc1N0cmluZyhyZWNvcmQuY29sdW1uKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQudHJhbnNmb3JtKSxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogYXNTdHJpbmcocmVjb3JkLmRpcmVjdGlvbiksXG4gICAgICAgICAgICBudWxsT3JkZXI6IGFzU3RyaW5nKHJlY29yZC5udWxsT3JkZXIpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVJbmRleGVzKHZhbHVlOiB1bmtub3duKTogSW5kZXhbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICBtZXRob2Q6IGFzU3RyaW5nKHJlY29yZC5tZXRob2QpLFxuICAgICAgICAgICAgdW5pcXVlOiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQudW5pcXVlKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IGFzQXJyYXkocmVjb3JkLmNvbHVtbnMpLm1hcCgocmF3Q29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uUmVjb3JkID0gYXNSZWNvcmQocmF3Q29sdW1uKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhjb2x1bW5SZWNvcmQubmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHNvcnQ6IGFzT3B0aW9uYWxTdHJpbmcoY29sdW1uUmVjb3JkLnNvcnQpLFxuICAgICAgICAgICAgICAgICAgICBudWxsczogYXNPcHRpb25hbFN0cmluZyhjb2x1bW5SZWNvcmQubnVsbHMpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGluY2x1ZGU6IGFzU3RyaW5nQXJyYXkocmVjb3JkLmluY2x1ZGUpLFxuICAgICAgICAgICAgd2hlcmU6IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLndoZXJlKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVW5pcXVlQ29uc3RyYWludHModmFsdWU6IHVua25vd24pOiBVbmlxdWVDb25zdHJhaW50W10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgY29sdW1uczogYXNTdHJpbmdBcnJheShyZWNvcmQuY29sdW1ucyksXG4gICAgICAgICAgICBudWxsc05vdERpc3RpbmN0OiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQubnVsbHNOb3REaXN0aW5jdCksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNoZWNrQ29uc3RyYWludHModmFsdWU6IHVua25vd24pOiBDaGVja0NvbnN0cmFpbnRbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICBleHByZXNzaW9uOiBhc1N0cmluZyhyZWNvcmQuZXhwcmVzc2lvbiksXG4gICAgICAgICAgICBjb2x1bW5zOiBhc1N0cmluZ0FycmF5KHJlY29yZC5jb2x1bW5zKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nTWFwKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQodmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW1xuICAgICAgICBrZXksXG4gICAgICAgIHJhdyxcbiAgICBdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByYXcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHJhdztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVGb3JlaWduS2V5cyh2YWx1ZTogdW5rbm93bik6IEZvcmVpZ25LZXlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2VUYWJsZTogYXNTdHJpbmcocmVjb3JkLnNvdXJjZVRhYmxlKSxcbiAgICAgICAgICAgIHNvdXJjZUNvbHVtbjogYXNTdHJpbmcocmVjb3JkLnNvdXJjZUNvbHVtbiksXG4gICAgICAgICAgICBsb2NhbENvbHVtbjogYXNTdHJpbmcocmVjb3JkLmxvY2FsQ29sdW1uKSxcbiAgICAgICAgICAgIGFsbG93TnVsbHM6IGFzQm9vbGVhbihyZWNvcmQuYWxsb3dOdWxscyksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRhYmxlRGVmaW5pdGlvbihyYXc6IHVua25vd24pOiBUYWJsZURlZmluaXRpb24ge1xuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3BlY1ZlcnNpb246IGFzU3RyaW5nKHJlY29yZC5zcGVjVmVyc2lvbiksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgICAgICB0YWJsZVR5cGU6IGFzU3RyaW5nKHJlY29yZC50YWJsZVR5cGUpLFxuICAgICAgICBpc1Jhd0RhdGE6IGFzQm9vbGVhbihyZWNvcmQuaXNSYXdEYXRhKSxcbiAgICAgICAgZm9ybWF0VmVyc2lvbjogYXNPcHRpb25hbE51bWJlcihyZWNvcmQuZm9ybWF0VmVyc2lvbiksXG4gICAgICAgIGNvbHVtbnM6IG5vcm1hbGl6ZUNvbHVtbnMocmVjb3JkLmNvbHVtbnMpLFxuICAgICAgICBwcmltYXJ5S2V5OiBhc1N0cmluZ0FycmF5KHJlY29yZC5wcmltYXJ5S2V5KSxcbiAgICAgICAgcGFydGl0aW9uczogbm9ybWFsaXplUGFydGl0aW9ucyhyZWNvcmQucGFydGl0aW9ucyksXG4gICAgICAgIHNvcnRPcmRlcjogbm9ybWFsaXplU29ydE9yZGVyKHJlY29yZC5zb3J0T3JkZXIpLFxuICAgICAgICBpbmRleGVzOiBub3JtYWxpemVJbmRleGVzKHJlY29yZC5pbmRleGVzKSxcbiAgICAgICAgdW5pcXVlQ29uc3RyYWludHM6IG5vcm1hbGl6ZVVuaXF1ZUNvbnN0cmFpbnRzKHJlY29yZC51bmlxdWVDb25zdHJhaW50cyksXG4gICAgICAgIGNoZWNrQ29uc3RyYWludHM6IG5vcm1hbGl6ZUNoZWNrQ29uc3RyYWludHMocmVjb3JkLmNoZWNrQ29uc3RyYWludHMpLFxuICAgICAgICB0YWJsZVByb3BlcnRpZXM6IG5vcm1hbGl6ZVN0cmluZ01hcChyZWNvcmQudGFibGVQcm9wZXJ0aWVzKSxcbiAgICAgICAgZGVwZW5kc09uOiBhc1N0cmluZ0FycmF5KHJlY29yZC5kZXBlbmRzT24pLFxuICAgICAgICBmb3JlaWduS2V5czogbm9ybWFsaXplRm9yZWlnbktleXMocmVjb3JkLmZvcmVpZ25LZXlzKSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTY2hlbWFEZXNjcmlwdGlvbihyYXc6IHVua25vd24pOiBTY2hlbWFEZXNjcmlwdGlvbiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzcGVjVmVyc2lvbjogYXNTdHJpbmcocmVjb3JkLnNwZWNWZXJzaW9uKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGFzU3RyaW5nKHJlY29yZC5kZXNjcmlwdGlvbiksXG4gICAgfTtcbn1cblxuLy8vIFNjaGVtYSBhbmQgdGFibGUgbmFtZXMgbXVzdCBiZSBsb3dlcmNhc2Ugc25ha2VfY2FzZSBzbyB0aGV5IGNhbiBiZSByZWZlcmVuY2VkXG4vLy8gZnJvbSBgZGVwZW5kc09uYCBhbmQgZm9yZWlnbiBrZXlzLCB3aG9zZSBwYXR0ZXJucyByZXF1aXJlIHRoZSBzYW1lIHNoYXBlLlxuY29uc3QgTkFNRV9SRSA9IC9eW2EtejAtOV9dKyQvO1xuXG4vKipcbiAqIExvYWQgYSBkYXRhc2V0IHJvb3QgaW50byBhIGBXb3JsZGAuXG4gKlxuICogQHBhcmFtIHJvb3REaXIgQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGF0YXNldCByb290LlxuICogQHJldHVybnMgVGhlIGxvYWRlZCB3b3JsZCBwbHVzIGxvYWQtdGltZSB2aW9sYXRpb25zLlxuICogQHRocm93cyBFcnJvciBXaGVuIGByb290RGlyYCBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFJvb3Qocm9vdERpcjogc3RyaW5nKTogTG9hZE91dGNvbWUge1xuICAgIGNvbnN0IGFic29sdXRlUm9vdCA9IHBhdGgucmVzb2x2ZShyb290RGlyKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzb2x1dGVSb290KSB8fCAhZnMuc3RhdFN5bmMoYWJzb2x1dGVSb290KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGF0YXNldCByb290IGlzIG5vdCBhIGRpcmVjdG9yeTogJHthYnNvbHV0ZVJvb3R9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIExvYWRlZFNjaGVtYT4oKTtcbiAgICBjb25zdCB0YWJsZXMgPSBuZXcgTWFwPHN0cmluZywgVGFibGVUeXBlQmFzZT4oKTtcblxuICAgIGNvbnN0IHNjaGVtYURpcnMgPSBmcy5yZWFkZGlyU3luYyhhYnNvbHV0ZVJvb3QsIHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0RpcmVjdG9yeSgpICYmICFlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoJy4nKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWFEaXIgb2Ygc2NoZW1hRGlycykge1xuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gc2NoZW1hRGlyLm5hbWU7XG4gICAgICAgIGNvbnN0IGRpclBhdGggPSBwYXRoLmpvaW4oYWJzb2x1dGVSb290LCBzY2hlbWFOYW1lKTtcblxuICAgICAgICBpZiAoIU5BTUVfUkUudGVzdChzY2hlbWFOYW1lKSkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX05BTUVfVkFMSUQnLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBkaXJQYXRoLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzY2hlbWEgbmFtZSBcIiR7c2NoZW1hTmFtZX1cIiBtdXN0IGJlIGxvd2VyY2FzZSBzbmFrZV9jYXNlIChtYXRjaGluZyAke05BTUVfUkV9KWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlc2NGaWxlTmFtZSA9IGAke3NjaGVtYU5hbWV9Lmpzb25gO1xuICAgICAgICBjb25zdCBqc29uRmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXJQYXRoKVxuICAgICAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aCgnLmpzb24nKSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXG4gICAgICAgIGxldCBkZXNjcmlwdGlvbjogU2NoZW1hRGVzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgICAgICAgY29uc3QgbG9hZGVkVGFibGVzOiBUYWJsZVR5cGVCYXNlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YganNvbkZpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgICAgICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0ZJTEVfUEFSU0VfRVJST1InLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaW52YWxpZCBKU09OOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsZSA9PT0gZGVzY0ZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJhbCA9IHZhbGlkYXRlU3RydWN0dXJlKCdzY2hlbWEnLCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RydWN0dXJhbEVycm9yIG9mIHN0cnVjdHVyYWwuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICdTQ0hFTUFfVkFMSURBVElPTicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogc3RydWN0dXJhbEVycm9yLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmFsRXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbm9ybWFsaXplU2NoZW1hRGVzY3JpcHRpb24ocGFyc2VkKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gZmlsZS5zbGljZSgwLCAtJy5qc29uJy5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgcXVhbGlmaWVkTmFtZSA9IGAke3NjaGVtYU5hbWV9LiR7dGFibGVOYW1lfWA7XG5cbiAgICAgICAgICAgIGlmICghTkFNRV9SRS50ZXN0KHRhYmxlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1RBQkxFX05BTUVfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGFibGUgbmFtZSBcIiR7dGFibGVOYW1lfVwiIG11c3QgYmUgbG93ZXJjYXNlIHNuYWtlX2Nhc2UgKG1hdGNoaW5nICR7TkFNRV9SRX0pYCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJhbCA9IHZhbGlkYXRlU3RydWN0dXJlKCd0YWJsZScsIHBhcnNlZCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN0cnVjdHVyYWxFcnJvciBvZiBzdHJ1Y3R1cmFsLmVycm9ycykge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX1ZBTElEQVRJT04nLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzdHJ1Y3R1cmFsRXJyb3IuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmFsRXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9hZGVkVGFibGUgPSBjcmVhdGVUYWJsZVR5cGUoe1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgcXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmFsbHlWYWxpZDogc3RydWN0dXJhbC52YWxpZCxcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBub3JtYWxpemVUYWJsZURlZmluaXRpb24ocGFyc2VkKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9hZGVkVGFibGVzLnB1c2gobG9hZGVkVGFibGUpO1xuICAgICAgICAgICAgdGFibGVzLnNldChxdWFsaWZpZWROYW1lLCBsb2FkZWRUYWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9ERVNDX1BSRVNFTlQnLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4oZGlyUGF0aCwgZGVzY0ZpbGVOYW1lKSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgc2NoZW1hIFwiJHtzY2hlbWFOYW1lfVwiIGlzIG1pc3NpbmcgaXRzIGRlc2NyaXB0aW9uIGZpbGUgXCIke2Rlc2NGaWxlTmFtZX1cImAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjaGVtYXMuc2V0KHNjaGVtYU5hbWUsIHtcbiAgICAgICAgICAgIG5hbWU6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICBkaXJQYXRoLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB0YWJsZXM6IGxvYWRlZFRhYmxlcyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd29ybGQ6IHtcbiAgICAgICAgICAgIHJvb3REaXI6IGFic29sdXRlUm9vdCxcbiAgICAgICAgICAgIHNjaGVtYXMsXG4gICAgICAgICAgICB0YWJsZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHZpb2xhdGlvbnMsXG4gICAgfTtcbn1cbiJdfQ==
@@ -30,6 +30,15 @@ export interface Column {
30
30
  * column.
31
31
  */
32
32
  readonly nullable?: boolean;
33
+ /**
34
+ * Generated-column kind (Postgres): `stored` or `virtual`. Optional; when
35
+ * set, the column is computed from `expressionColumns`.
36
+ */
37
+ readonly generated?: string;
38
+ /** Opaque generation expression (Postgres generated column). */
39
+ readonly expression?: string;
40
+ /** Columns the generation `expression` references (Postgres). */
41
+ readonly expressionColumns?: string[];
33
42
  }
34
43
  /**
35
44
  * A partition entry. The meaning of `name` and `type` is engine-specific: for
package/dist/src/model.js CHANGED
@@ -23,4 +23,4 @@ exports.TABLE_TYPES = [
23
23
  TableType.ICEBERG_PARQUET,
24
24
  TableType.POSTGRES_18,
25
25
  ];
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFFSCx3RUFBd0U7QUFDeEUsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLDBDQUE2QixDQUFBO0lBQzdCLGdEQUFtQyxDQUFBO0lBQ25DLHdDQUEyQixDQUFBO0FBQy9CLENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFFRCw2REFBNkQ7QUFDaEQsUUFBQSxXQUFXLEdBQXNCO0lBQzFDLFNBQVMsQ0FBQyxZQUFZO0lBQ3RCLFNBQVMsQ0FBQyxlQUFlO0lBQ3pCLFNBQVMsQ0FBQyxXQUFXO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcmUgZGF0YSBtb2RlbCBmb3IgdGhlIEZsZXhpYmxlIERhdGFzZXQgRGVmaW5pdGlvbiAoRkREKSBzdGFuZGFyZC5cbiAqXG4gKiBUaGVzZSBpbnRlcmZhY2VzIGRlc2NyaWJlIHRoZSAqcHVyZSBkYXRhKiBzaGFwZSBvZiBhIGRhdGFzZXQ6IGNvbHVtbnMsXG4gKiBwYXJ0aXRpb25zLCBmb3JlaWduIGtleXMsIHRhYmxlIGRlZmluaXRpb25zLCBhbmQgdGhlIHZpb2xhdGlvbnMgdGhlXG4gKiB2YWxpZGF0b3IgZW1pdHMuIFRoZSBsb2FkZWQgd29ybGQgKHNjaGVtYXMgKyB0YWJsZSBpbnN0YW5jZXMpIGFuZCB0aGVcbiAqIGFic3RyYWN0IHRhYmxlIGJhc2UgY2xhc3MgbGl2ZSBpbiBgLi93b3JsZGAgYW5kIGAuL3RhYmxlLXR5cGVgIHNvIHRoaXNcbiAqIG1vZHVsZSBzdGF5cyBhIGxlYWYgd2l0aCBubyBiZWhhdmlvci5cbiAqL1xuXG4vKiogVGFibGUgZW5naW5lLiBFYWNoIHZhbHVlIHVubG9ja3MgZW5naW5lLXNwZWNpZmljIHNlbWFudGljIGNoZWNrcy4gKi9cbmV4cG9ydCBlbnVtIFRhYmxlVHlwZSB7XG4gICAgSElWRV9QQVJRVUVUID0gJ2hpdmVfcGFycXVldCcsXG4gICAgSUNFQkVSR19QQVJRVUVUID0gJ2ljZWJlcmdfcGFycXVldCcsXG4gICAgUE9TVEdSRVNfMTggPSAncG9zdGdyZXNfMTgnLFxufVxuXG4vKiogRXZlcnkga25vd24gYHRhYmxlVHlwZWAgc3RyaW5nLCBmb3IgbWVtYmVyc2hpcCBjaGVja3MuICovXG5leHBvcnQgY29uc3QgVEFCTEVfVFlQRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAgIFRhYmxlVHlwZS5ISVZFX1BBUlFVRVQsXG4gICAgVGFibGVUeXBlLklDRUJFUkdfUEFSUVVFVCxcbiAgICBUYWJsZVR5cGUuUE9TVEdSRVNfMTgsXG5dO1xuXG4vKiogQSBzaW5nbGUgZGF0YSBjb2x1bW4uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gICAgLyoqIENvbHVtbiBuYW1lICh1bmlxdWUgd2l0aGluIGEgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUtc3BlY2lmaWMgdHlwZSBzdHJpbmcgKGUuZy4gYGxvbmdgLCBgdmFyY2hhcigyNTUpYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gbWF5IGhvbGQgbnVsbC4gT3B0aW9uYWw6IHdoZW4gb21pdHRlZCwgbnVsbGFiaWxpdHkgaXNcbiAgICAgKiB1bnNwZWNpZmllZCBhbmQgdGhlIG51bGxhYmlsaXR5IGNyb3NzLWNoZWNrcyBkbyBub3QgZmlyZS4gYGZhbHNlYCBtYXJrcyBhXG4gICAgICogTk9UIE5VTEwgY29sdW1uIChJY2ViZXJnIGByZXF1aXJlZGApOyBgdHJ1ZWAgbWFya3MgYW4gZXhwbGljaXRseSBudWxsYWJsZVxuICAgICAqIGNvbHVtbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBwYXJ0aXRpb24gZW50cnkuIFRoZSBtZWFuaW5nIG9mIGBuYW1lYCBhbmQgYHR5cGVgIGlzIGVuZ2luZS1zcGVjaWZpYzogZm9yXG4gKiBIaXZlLCBgbmFtZWAgaXMgYSBuZXcgcGFydGl0aW9uIGNvbHVtbiBhbmQgYHR5cGVgIGlzIGEgbm9ybWFsIHR5cGU7IGZvclxuICogSWNlYmVyZywgYG5hbWVgIGlzIGEgc291cmNlIGRhdGEgY29sdW1uIGFuZCBgdHlwZWAgaXMgYSB0cmFuc2Zvcm07IGZvclxuICogUG9zdGdyZXMsIGBuYW1lYCBpcyBhbiBleGlzdGluZyBrZXkgY29sdW1uIGFuZCBgdHlwZWAgaXMgdGhlIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpdGlvbiB7XG4gICAgLyoqIEhpdmU6IG5ldyBwYXJ0aXRpb24gY29sdW1uIG5hbWUuIEljZWJlcmcgLyBQb3N0Z3JlczogZXhpc3RpbmcgZGF0YS9rZXkgY29sdW1uIG5hbWUuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEhpdmU6IGEgbm9ybWFsIHR5cGUuIEljZWJlcmc6IGEgdHJhbnNmb3JtIChlLmcuIGBkYXlgLCBgYnVja2V0WzE2XWApLiBQb3N0Z3JlczogYSBzdHJhdGVneSAoYHJhbmdlYCAvIGBsaXN0YCAvIGBoYXNoYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgc29ydCBmaWVsZCBpbiBhbiBJY2ViZXJnIHRhYmxlJ3Mgc29ydCBvcmRlci4gYGNvbHVtbmAgaXMgYSBkYXRhXG4gKiBjb2x1bW47IGB0cmFuc2Zvcm1gIGlzIGFuIG9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmdcbiAqIChkZWZhdWx0cyB0byBpZGVudGl0eSk7IGBkaXJlY3Rpb25gIGFuZCBgbnVsbE9yZGVyYCBzZXQgdGhlIG9yZGVyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRGaWVsZCB7XG4gICAgLyoqIFNvdXJjZSBkYXRhIGNvbHVtbiB0byBzb3J0IGJ5LiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIE9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmcgKGUuZy4gYGRheWAsIGBidWNrZXRbMTZdYCkuICovXG4gICAgcmVhZG9ubHkgdHJhbnNmb3JtPzogc3RyaW5nO1xuXG4gICAgLyoqIFNvcnQgZGlyZWN0aW9uIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IGRpcmVjdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqIE51bGwgb3JkZXJpbmcgKGBudWxscy1maXJzdGAgb3IgYG51bGxzLWxhc3RgKS4gKi9cbiAgICByZWFkb25seSBudWxsT3JkZXI6IHN0cmluZztcbn1cblxuLyoqIEEgc2luZ2xlIGtleSBjb2x1bW4gd2l0aGluIGFuIGluZGV4LCB3aXRoIG9wdGlvbmFsIG9yZGVyaW5nIG1vZGlmaWVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhDb2x1bW4ge1xuICAgIC8qKiBJbmRleGVkIGNvbHVtbiBuYW1lLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBPcHRpb25hbCBzb3J0IG9yZGVyIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IHNvcnQ/OiBzdHJpbmc7XG5cbiAgICAvKiogT3B0aW9uYWwgbnVsbCBvcmRlcmluZyAoYGZpcnN0YCBvciBgbGFzdGApLiAqL1xuICAgIHJlYWRvbmx5IG51bGxzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2Vjb25kYXJ5IGluZGV4IChlLmcuIFBvc3RncmVzKS4gYGNvbHVtbnNgIGFyZSB0aGUga2V5IGNvbHVtbnM7IGBpbmNsdWRlYFxuICogYXJlIG5vbi1rZXkgY292ZXJpbmcgY29sdW1uczsgYHdoZXJlYCBpcyBhbiBvcGFxdWUgcGFydGlhbC1pbmRleCBwcmVkaWNhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXgge1xuICAgIC8qKiBJbmRleCBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB0YWJsZSkuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEFjY2VzcyBtZXRob2QgKGUuZy4gYGJ0cmVlYCwgYGhhc2hgLCBgZ2luYCkuICovXG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgaW5kZXggZW5mb3JjZXMgdW5pcXVlbmVzcy4gKi9cbiAgICByZWFkb25seSB1bmlxdWU/OiBib29sZWFuO1xuXG4gICAgLyoqIEtleSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IEluZGV4Q29sdW1uW107XG5cbiAgICAvKiogTm9uLWtleSBjb3ZlcmluZyBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGU6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE9wdGlvbmFsIHBhcnRpYWwtaW5kZXggcHJlZGljYXRlIChvcGFxdWUpLiAqL1xuICAgIHJlYWRvbmx5IHdoZXJlPzogc3RyaW5nO1xufVxuXG4vKiogQSB0YWJsZS1sZXZlbCBVTklRVUUgY29uc3RyYWludCBvdmVyIG9uZSBvciBtb3JlIGNvbHVtbnMgKFBvc3RncmVzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pcXVlQ29uc3RyYWludCB7XG4gICAgLyoqIENvbnN0cmFpbnQgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW5zIHRoZSBjb25zdHJhaW50IHNwYW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIFdoZXRoZXIgbnVsbHMgYXJlIHRyZWF0ZWQgYXMgbm90IGRpc3RpbmN0IChgTlVMTFMgTk9UIERJU1RJTkNUYCkuICovXG4gICAgcmVhZG9ubHkgbnVsbHNOb3REaXN0aW5jdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBDSEVDSyBjb25zdHJhaW50IChQb3N0Z3JlcykuIGBleHByZXNzaW9uYCBpcyBhbiBvcGFxdWUgcHJlZGljYXRlOyBgY29sdW1uc2BcbiAqIGlzIHRoZSBleHBsaWNpdCBsaXN0IG9mIGNvbHVtbnMgaXQgcmVmZXJlbmNlcywgd2hpY2ggaXMgd2hhdCBnZXRzIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja0NvbnN0cmFpbnQge1xuICAgIC8qKiBDb25zdHJhaW50IG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHRhYmxlKS4gKi9cbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogT3BhcXVlIGJvb2xlYW4gcHJlZGljYXRlLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb246IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW5zIHRoZSBwcmVkaWNhdGUgcmVmZXJlbmNlcy4gKi9cbiAgICByZWFkb25seSBjb2x1bW5zOiBzdHJpbmdbXTtcbn1cblxuLyoqIEEgZm9yZWlnbi1rZXkgcmVmZXJlbmNlIHRvIGEgY29sdW1uIGluIGFub3RoZXIgdGFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmVpZ25LZXkge1xuICAgIC8qKiBSZWZlcmVuY2VkIHRhYmxlIGluIGBzY2hlbWEudGFibGVgIGZvcm1hdC4gKi9cbiAgICByZWFkb25seSBzb3VyY2VUYWJsZTogc3RyaW5nO1xuXG4gICAgLyoqIFJlZmVyZW5jZWQgY29sdW1uIGluIHRoZSBzb3VyY2UgdGFibGUuICovXG4gICAgcmVhZG9ubHkgc291cmNlQ29sdW1uOiBzdHJpbmc7XG5cbiAgICAvKiogTG9jYWwgY29sdW1uIHRoYXQgaG9sZHMgdGhlIHJlZmVyZW5jZS4gKi9cbiAgICByZWFkb25seSBsb2NhbENvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGxvY2FsIGNvbHVtbiBtYXkgYmUgbnVsbC4gKi9cbiAgICByZWFkb25seSBhbGxvd051bGxzOiBib29sZWFuO1xufVxuXG4vKiogTm9ybWFsaXplZCB0YWJsZSBkZWZpbml0aW9uIChvcHRpb25hbCBhcnJheXMgZGVmYXVsdGVkIHRvIGVtcHR5KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVEZWZpbml0aW9uIHtcbiAgICAvKiogU3BlYyB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAqL1xuICAgIHJlYWRvbmx5IHNwZWNWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4gZGVzY3JpcHRpb24uICovXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUuIE1heSBiZSBhbiB1bmtub3duIHN0cmluZyBpZiB0aGUgZmlsZSBmYWlsZWQgc3RydWN0dXJhbCBjaGVja3MuICovXG4gICAgcmVhZG9ubHkgdGFibGVUeXBlOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGlzIHRhYmxlIGlzIHRoZSB0b3Agb2YgdGhlIHBpcGVsaW5lLiAqL1xuICAgIHJlYWRvbmx5IGlzUmF3RGF0YTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEljZWJlcmcgdGFibGUgZm9ybWF0IHZlcnNpb24gKDEsIDIsIG9yIDMpLiBPcHRpb25hbCBhbmQgZW5naW5lLXNwZWNpZmljOlxuICAgICAqIG9ubHkgdGhlIEljZWJlcmcgZW5naW5lIHZhbGlkYXRlcyBpdC4gT3RoZXIgZW5naW5lcyBpZ25vcmUgaXQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZm9ybWF0VmVyc2lvbj86IG51bWJlcjtcblxuICAgIC8qKiBEYXRhIGNvbHVtbnMuICovXG4gICAgcmVhZG9ubHkgY29sdW1uczogQ29sdW1uW107XG5cbiAgICAvKiogUHJpbWFyeS1rZXkgY29sdW1uIG5hbWVzLiAqL1xuICAgIHJlYWRvbmx5IHByaW1hcnlLZXk6IHN0cmluZ1tdO1xuXG4gICAgLyoqIFBhcnRpdGlvbiBlbnRyaWVzIChlbmdpbmUtc3BlY2lmaWMgc2VtYW50aWNzKS4gKi9cbiAgICByZWFkb25seSBwYXJ0aXRpb25zOiBQYXJ0aXRpb25bXTtcblxuICAgIC8qKiBJY2ViZXJnIHNvcnQgb3JkZXIgKG9yZGVyZWQgc29ydCBmaWVsZHMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgaXQuICovXG4gICAgcmVhZG9ubHkgc29ydE9yZGVyOiBTb3J0RmllbGRbXTtcblxuICAgIC8qKiBTZWNvbmRhcnkgaW5kZXhlcyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSBpbmRleGVzOiBJbmRleFtdO1xuXG4gICAgLyoqIFVOSVFVRSBjb25zdHJhaW50cyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSB1bmlxdWVDb25zdHJhaW50czogVW5pcXVlQ29uc3RyYWludFtdO1xuXG4gICAgLyoqIENIRUNLIGNvbnN0cmFpbnRzIChQb3N0Z3JlcykuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSB0aGVtLiAqL1xuICAgIHJlYWRvbmx5IGNoZWNrQ29uc3RyYWludHM6IENoZWNrQ29uc3RyYWludFtdO1xuXG4gICAgLyoqXG4gICAgICogRW5naW5lIHRhYmxlIHByb3BlcnRpZXMgYXMgYSBzdHJpbmfihpJzdHJpbmcgbWFwIChlLmcuIEljZWJlcmdcbiAgICAgKiBgd3JpdGUudGFyZ2V0LWZpbGUtc2l6ZS1ieXRlc2AsIEhpdmUgYHBhcnF1ZXQuY29tcHJlc3Npb25gKS4gT3B0aW9uYWwuXG4gICAgICogT25seSBrZXlzIHdpdGggYSBrbm93biwgY2xvc2VkIGxlZ2FsIGRvbWFpbiBhcmUgdmFsaWRhdGVkIHBlciBlbmdpbmU7XG4gICAgICogdW5rbm93biBrZXlzIHBhc3MgdGhyb3VnaCB1bnZhbGlkYXRlZC5cbiAgICAgKi9cbiAgICByZWFkb25seSB0YWJsZVByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgICAvKiogVXBzdHJlYW0gdGFibGVzIGluIGBzY2hlbWEudGFibGVgIGZvcm1hdC4gKi9cbiAgICByZWFkb25seSBkZXBlbmRzT246IHN0cmluZ1tdO1xuXG4gICAgLyoqIEZvcmVpZ24ga2V5cy4gKi9cbiAgICByZWFkb25seSBmb3JlaWduS2V5czogRm9yZWlnbktleVtdO1xufVxuXG4vKiogQSBzY2hlbWEtZGVzY3JpcHRpb24gZmlsZSdzIG5vcm1hbGl6ZWQgY29udGVudC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hRGVzY3JpcHRpb24ge1xuICAgIC8qKiBTcGVjIHZlcnNpb24gb2YgdGhlIGZpbGUuICovXG4gICAgcmVhZG9ubHkgc3BlY1ZlcnNpb246IHN0cmluZztcblxuICAgIC8qKiBIdW1hbiBkZXNjcmlwdGlvbi4gKi9cbiAgICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vKiogU2V2ZXJpdHkgb2YgYSB2aW9sYXRpb24uICovXG5leHBvcnQgdHlwZSBWaW9sYXRpb25MZXZlbCA9ICdlcnJvcicgfCAnd2FybmluZyc7XG5cbi8qKiBBIHNpbmdsZSB2YWxpZGF0aW9uIGZpbmRpbmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpb2xhdGlvbiB7XG4gICAgLyoqIFNldmVyaXR5LiBgZXJyb3JgIGZhaWxzIHZhbGlkYXRpb247IGB3YXJuaW5nYCBkb2VzIG5vdC4gKi9cbiAgICByZWFkb25seSBsZXZlbDogVmlvbGF0aW9uTGV2ZWw7XG5cbiAgICAvKiogU3RhYmxlIG1hY2hpbmUtcmVhZGFibGUgcnVsZSBjb2RlIChlLmcuIGBQS19DT0xVTU5TX0VYSVNUYCkuICovXG4gICAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gICAgLyoqIE93bmluZyBzY2hlbWEsIGlmIGFwcGxpY2FibGUuICovXG4gICAgcmVhZG9ubHkgc2NoZW1hPzogc3RyaW5nO1xuXG4gICAgLyoqIE93bmluZyB0YWJsZSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSB0YWJsZT86IHN0cmluZztcblxuICAgIC8qKiBGaWVsZCBwYXRoIHdpdGhpbiB0aGUgZmlsZSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSBmaWVsZD86IHN0cmluZztcblxuICAgIC8qKiBTb3VyY2UgZmlsZSBwYXRoLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4tcmVhZGFibGUgbWVzc2FnZS4gKi9cbiAgICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKiBUaGUgYWdncmVnYXRlIHJlc3VsdCBvZiB2YWxpZGF0aW5nIGEgcm9vdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgLyoqIFRydWUgd2hlbiB0aGVyZSBhcmUgbm8gYGVycm9yYC1sZXZlbCB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IG9rOiBib29sZWFuO1xuXG4gICAgLyoqIEFsbCBmaW5kaW5ncywgZXJyb3JzIGFuZCB3YXJuaW5ncy4gKi9cbiAgICByZWFkb25seSB2aW9sYXRpb25zOiBWaW9sYXRpb25bXTtcbn1cbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFFSCx3RUFBd0U7QUFDeEUsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLDBDQUE2QixDQUFBO0lBQzdCLGdEQUFtQyxDQUFBO0lBQ25DLHdDQUEyQixDQUFBO0FBQy9CLENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFFRCw2REFBNkQ7QUFDaEQsUUFBQSxXQUFXLEdBQXNCO0lBQzFDLFNBQVMsQ0FBQyxZQUFZO0lBQ3RCLFNBQVMsQ0FBQyxlQUFlO0lBQ3pCLFNBQVMsQ0FBQyxXQUFXO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcmUgZGF0YSBtb2RlbCBmb3IgdGhlIEZsZXhpYmxlIERhdGFzZXQgRGVmaW5pdGlvbiAoRkREKSBzdGFuZGFyZC5cbiAqXG4gKiBUaGVzZSBpbnRlcmZhY2VzIGRlc2NyaWJlIHRoZSAqcHVyZSBkYXRhKiBzaGFwZSBvZiBhIGRhdGFzZXQ6IGNvbHVtbnMsXG4gKiBwYXJ0aXRpb25zLCBmb3JlaWduIGtleXMsIHRhYmxlIGRlZmluaXRpb25zLCBhbmQgdGhlIHZpb2xhdGlvbnMgdGhlXG4gKiB2YWxpZGF0b3IgZW1pdHMuIFRoZSBsb2FkZWQgd29ybGQgKHNjaGVtYXMgKyB0YWJsZSBpbnN0YW5jZXMpIGFuZCB0aGVcbiAqIGFic3RyYWN0IHRhYmxlIGJhc2UgY2xhc3MgbGl2ZSBpbiBgLi93b3JsZGAgYW5kIGAuL3RhYmxlLXR5cGVgIHNvIHRoaXNcbiAqIG1vZHVsZSBzdGF5cyBhIGxlYWYgd2l0aCBubyBiZWhhdmlvci5cbiAqL1xuXG4vKiogVGFibGUgZW5naW5lLiBFYWNoIHZhbHVlIHVubG9ja3MgZW5naW5lLXNwZWNpZmljIHNlbWFudGljIGNoZWNrcy4gKi9cbmV4cG9ydCBlbnVtIFRhYmxlVHlwZSB7XG4gICAgSElWRV9QQVJRVUVUID0gJ2hpdmVfcGFycXVldCcsXG4gICAgSUNFQkVSR19QQVJRVUVUID0gJ2ljZWJlcmdfcGFycXVldCcsXG4gICAgUE9TVEdSRVNfMTggPSAncG9zdGdyZXNfMTgnLFxufVxuXG4vKiogRXZlcnkga25vd24gYHRhYmxlVHlwZWAgc3RyaW5nLCBmb3IgbWVtYmVyc2hpcCBjaGVja3MuICovXG5leHBvcnQgY29uc3QgVEFCTEVfVFlQRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAgIFRhYmxlVHlwZS5ISVZFX1BBUlFVRVQsXG4gICAgVGFibGVUeXBlLklDRUJFUkdfUEFSUVVFVCxcbiAgICBUYWJsZVR5cGUuUE9TVEdSRVNfMTgsXG5dO1xuXG4vKiogQSBzaW5nbGUgZGF0YSBjb2x1bW4uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gICAgLyoqIENvbHVtbiBuYW1lICh1bmlxdWUgd2l0aGluIGEgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUtc3BlY2lmaWMgdHlwZSBzdHJpbmcgKGUuZy4gYGxvbmdgLCBgdmFyY2hhcigyNTUpYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gbWF5IGhvbGQgbnVsbC4gT3B0aW9uYWw6IHdoZW4gb21pdHRlZCwgbnVsbGFiaWxpdHkgaXNcbiAgICAgKiB1bnNwZWNpZmllZCBhbmQgdGhlIG51bGxhYmlsaXR5IGNyb3NzLWNoZWNrcyBkbyBub3QgZmlyZS4gYGZhbHNlYCBtYXJrcyBhXG4gICAgICogTk9UIE5VTEwgY29sdW1uIChJY2ViZXJnIGByZXF1aXJlZGApOyBgdHJ1ZWAgbWFya3MgYW4gZXhwbGljaXRseSBudWxsYWJsZVxuICAgICAqIGNvbHVtbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZWQtY29sdW1uIGtpbmQgKFBvc3RncmVzKTogYHN0b3JlZGAgb3IgYHZpcnR1YWxgLiBPcHRpb25hbDsgd2hlblxuICAgICAqIHNldCwgdGhlIGNvbHVtbiBpcyBjb21wdXRlZCBmcm9tIGBleHByZXNzaW9uQ29sdW1uc2AuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZ2VuZXJhdGVkPzogc3RyaW5nO1xuXG4gICAgLyoqIE9wYXF1ZSBnZW5lcmF0aW9uIGV4cHJlc3Npb24gKFBvc3RncmVzIGdlbmVyYXRlZCBjb2x1bW4pLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb24/OiBzdHJpbmc7XG5cbiAgICAvKiogQ29sdW1ucyB0aGUgZ2VuZXJhdGlvbiBgZXhwcmVzc2lvbmAgcmVmZXJlbmNlcyAoUG9zdGdyZXMpLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb25Db2x1bW5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQSBwYXJ0aXRpb24gZW50cnkuIFRoZSBtZWFuaW5nIG9mIGBuYW1lYCBhbmQgYHR5cGVgIGlzIGVuZ2luZS1zcGVjaWZpYzogZm9yXG4gKiBIaXZlLCBgbmFtZWAgaXMgYSBuZXcgcGFydGl0aW9uIGNvbHVtbiBhbmQgYHR5cGVgIGlzIGEgbm9ybWFsIHR5cGU7IGZvclxuICogSWNlYmVyZywgYG5hbWVgIGlzIGEgc291cmNlIGRhdGEgY29sdW1uIGFuZCBgdHlwZWAgaXMgYSB0cmFuc2Zvcm07IGZvclxuICogUG9zdGdyZXMsIGBuYW1lYCBpcyBhbiBleGlzdGluZyBrZXkgY29sdW1uIGFuZCBgdHlwZWAgaXMgdGhlIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpdGlvbiB7XG4gICAgLyoqIEhpdmU6IG5ldyBwYXJ0aXRpb24gY29sdW1uIG5hbWUuIEljZWJlcmcgLyBQb3N0Z3JlczogZXhpc3RpbmcgZGF0YS9rZXkgY29sdW1uIG5hbWUuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEhpdmU6IGEgbm9ybWFsIHR5cGUuIEljZWJlcmc6IGEgdHJhbnNmb3JtIChlLmcuIGBkYXlgLCBgYnVja2V0WzE2XWApLiBQb3N0Z3JlczogYSBzdHJhdGVneSAoYHJhbmdlYCAvIGBsaXN0YCAvIGBoYXNoYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgc29ydCBmaWVsZCBpbiBhbiBJY2ViZXJnIHRhYmxlJ3Mgc29ydCBvcmRlci4gYGNvbHVtbmAgaXMgYSBkYXRhXG4gKiBjb2x1bW47IGB0cmFuc2Zvcm1gIGlzIGFuIG9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmdcbiAqIChkZWZhdWx0cyB0byBpZGVudGl0eSk7IGBkaXJlY3Rpb25gIGFuZCBgbnVsbE9yZGVyYCBzZXQgdGhlIG9yZGVyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRGaWVsZCB7XG4gICAgLyoqIFNvdXJjZSBkYXRhIGNvbHVtbiB0byBzb3J0IGJ5LiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIE9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmcgKGUuZy4gYGRheWAsIGBidWNrZXRbMTZdYCkuICovXG4gICAgcmVhZG9ubHkgdHJhbnNmb3JtPzogc3RyaW5nO1xuXG4gICAgLyoqIFNvcnQgZGlyZWN0aW9uIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IGRpcmVjdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqIE51bGwgb3JkZXJpbmcgKGBudWxscy1maXJzdGAgb3IgYG51bGxzLWxhc3RgKS4gKi9cbiAgICByZWFkb25seSBudWxsT3JkZXI6IHN0cmluZztcbn1cblxuLyoqIEEgc2luZ2xlIGtleSBjb2x1bW4gd2l0aGluIGFuIGluZGV4LCB3aXRoIG9wdGlvbmFsIG9yZGVyaW5nIG1vZGlmaWVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhDb2x1bW4ge1xuICAgIC8qKiBJbmRleGVkIGNvbHVtbiBuYW1lLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBPcHRpb25hbCBzb3J0IG9yZGVyIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IHNvcnQ/OiBzdHJpbmc7XG5cbiAgICAvKiogT3B0aW9uYWwgbnVsbCBvcmRlcmluZyAoYGZpcnN0YCBvciBgbGFzdGApLiAqL1xuICAgIHJlYWRvbmx5IG51bGxzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2Vjb25kYXJ5IGluZGV4IChlLmcuIFBvc3RncmVzKS4gYGNvbHVtbnNgIGFyZSB0aGUga2V5IGNvbHVtbnM7IGBpbmNsdWRlYFxuICogYXJlIG5vbi1rZXkgY292ZXJpbmcgY29sdW1uczsgYHdoZXJlYCBpcyBhbiBvcGFxdWUgcGFydGlhbC1pbmRleCBwcmVkaWNhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXgge1xuICAgIC8qKiBJbmRleCBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB0YWJsZSkuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEFjY2VzcyBtZXRob2QgKGUuZy4gYGJ0cmVlYCwgYGhhc2hgLCBgZ2luYCkuICovXG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgaW5kZXggZW5mb3JjZXMgdW5pcXVlbmVzcy4gKi9cbiAgICByZWFkb25seSB1bmlxdWU/OiBib29sZWFuO1xuXG4gICAgLyoqIEtleSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IEluZGV4Q29sdW1uW107XG5cbiAgICAvKiogTm9uLWtleSBjb3ZlcmluZyBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGU6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE9wdGlvbmFsIHBhcnRpYWwtaW5kZXggcHJlZGljYXRlIChvcGFxdWUpLiAqL1xuICAgIHJlYWRvbmx5IHdoZXJlPzogc3RyaW5nO1xufVxuXG4vKiogQSB0YWJsZS1sZXZlbCBVTklRVUUgY29uc3RyYWludCBvdmVyIG9uZSBvciBtb3JlIGNvbHVtbnMgKFBvc3RncmVzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pcXVlQ29uc3RyYWludCB7XG4gICAgLyoqIENvbnN0cmFpbnQgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW5zIHRoZSBjb25zdHJhaW50IHNwYW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIFdoZXRoZXIgbnVsbHMgYXJlIHRyZWF0ZWQgYXMgbm90IGRpc3RpbmN0IChgTlVMTFMgTk9UIERJU1RJTkNUYCkuICovXG4gICAgcmVhZG9ubHkgbnVsbHNOb3REaXN0aW5jdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBDSEVDSyBjb25zdHJhaW50IChQb3N0Z3JlcykuIGBleHByZXNzaW9uYCBpcyBhbiBvcGFxdWUgcHJlZGljYXRlOyBgY29sdW1uc2BcbiAqIGlzIHRoZSBleHBsaWNpdCBsaXN0IG9mIGNvbHVtbnMgaXQgcmVmZXJlbmNlcywgd2hpY2ggaXMgd2hhdCBnZXRzIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja0NvbnN0cmFpbnQge1xuICAgIC8qKiBDb25zdHJhaW50IG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHRhYmxlKS4gKi9cbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogT3BhcXVlIGJvb2xlYW4gcHJlZGljYXRlLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb246IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW5zIHRoZSBwcmVkaWNhdGUgcmVmZXJlbmNlcy4gKi9cbiAgICByZWFkb25seSBjb2x1bW5zOiBzdHJpbmdbXTtcbn1cblxuLyoqIEEgZm9yZWlnbi1rZXkgcmVmZXJlbmNlIHRvIGEgY29sdW1uIGluIGFub3RoZXIgdGFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmVpZ25LZXkge1xuICAgIC8qKiBSZWZlcmVuY2VkIHRhYmxlIGluIGBzY2hlbWEudGFibGVgIGZvcm1hdC4gKi9cbiAgICByZWFkb25seSBzb3VyY2VUYWJsZTogc3RyaW5nO1xuXG4gICAgLyoqIFJlZmVyZW5jZWQgY29sdW1uIGluIHRoZSBzb3VyY2UgdGFibGUuICovXG4gICAgcmVhZG9ubHkgc291cmNlQ29sdW1uOiBzdHJpbmc7XG5cbiAgICAvKiogTG9jYWwgY29sdW1uIHRoYXQgaG9sZHMgdGhlIHJlZmVyZW5jZS4gKi9cbiAgICByZWFkb25seSBsb2NhbENvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGxvY2FsIGNvbHVtbiBtYXkgYmUgbnVsbC4gKi9cbiAgICByZWFkb25seSBhbGxvd051bGxzOiBib29sZWFuO1xufVxuXG4vKiogTm9ybWFsaXplZCB0YWJsZSBkZWZpbml0aW9uIChvcHRpb25hbCBhcnJheXMgZGVmYXVsdGVkIHRvIGVtcHR5KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVEZWZpbml0aW9uIHtcbiAgICAvKiogU3BlYyB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAqL1xuICAgIHJlYWRvbmx5IHNwZWNWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4gZGVzY3JpcHRpb24uICovXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUuIE1heSBiZSBhbiB1bmtub3duIHN0cmluZyBpZiB0aGUgZmlsZSBmYWlsZWQgc3RydWN0dXJhbCBjaGVja3MuICovXG4gICAgcmVhZG9ubHkgdGFibGVUeXBlOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGlzIHRhYmxlIGlzIHRoZSB0b3Agb2YgdGhlIHBpcGVsaW5lLiAqL1xuICAgIHJlYWRvbmx5IGlzUmF3RGF0YTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEljZWJlcmcgdGFibGUgZm9ybWF0IHZlcnNpb24gKDEsIDIsIG9yIDMpLiBPcHRpb25hbCBhbmQgZW5naW5lLXNwZWNpZmljOlxuICAgICAqIG9ubHkgdGhlIEljZWJlcmcgZW5naW5lIHZhbGlkYXRlcyBpdC4gT3RoZXIgZW5naW5lcyBpZ25vcmUgaXQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZm9ybWF0VmVyc2lvbj86IG51bWJlcjtcblxuICAgIC8qKiBEYXRhIGNvbHVtbnMuICovXG4gICAgcmVhZG9ubHkgY29sdW1uczogQ29sdW1uW107XG5cbiAgICAvKiogUHJpbWFyeS1rZXkgY29sdW1uIG5hbWVzLiAqL1xuICAgIHJlYWRvbmx5IHByaW1hcnlLZXk6IHN0cmluZ1tdO1xuXG4gICAgLyoqIFBhcnRpdGlvbiBlbnRyaWVzIChlbmdpbmUtc3BlY2lmaWMgc2VtYW50aWNzKS4gKi9cbiAgICByZWFkb25seSBwYXJ0aXRpb25zOiBQYXJ0aXRpb25bXTtcblxuICAgIC8qKiBJY2ViZXJnIHNvcnQgb3JkZXIgKG9yZGVyZWQgc29ydCBmaWVsZHMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgaXQuICovXG4gICAgcmVhZG9ubHkgc29ydE9yZGVyOiBTb3J0RmllbGRbXTtcblxuICAgIC8qKiBTZWNvbmRhcnkgaW5kZXhlcyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSBpbmRleGVzOiBJbmRleFtdO1xuXG4gICAgLyoqIFVOSVFVRSBjb25zdHJhaW50cyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSB1bmlxdWVDb25zdHJhaW50czogVW5pcXVlQ29uc3RyYWludFtdO1xuXG4gICAgLyoqIENIRUNLIGNvbnN0cmFpbnRzIChQb3N0Z3JlcykuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSB0aGVtLiAqL1xuICAgIHJlYWRvbmx5IGNoZWNrQ29uc3RyYWludHM6IENoZWNrQ29uc3RyYWludFtdO1xuXG4gICAgLyoqXG4gICAgICogRW5naW5lIHRhYmxlIHByb3BlcnRpZXMgYXMgYSBzdHJpbmfihpJzdHJpbmcgbWFwIChlLmcuIEljZWJlcmdcbiAgICAgKiBgd3JpdGUudGFyZ2V0LWZpbGUtc2l6ZS1ieXRlc2AsIEhpdmUgYHBhcnF1ZXQuY29tcHJlc3Npb25gKS4gT3B0aW9uYWwuXG4gICAgICogT25seSBrZXlzIHdpdGggYSBrbm93biwgY2xvc2VkIGxlZ2FsIGRvbWFpbiBhcmUgdmFsaWRhdGVkIHBlciBlbmdpbmU7XG4gICAgICogdW5rbm93biBrZXlzIHBhc3MgdGhyb3VnaCB1bnZhbGlkYXRlZC5cbiAgICAgKi9cbiAgICByZWFkb25seSB0YWJsZVByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgICAvKiogVXBzdHJlYW0gdGFibGVzIGluIGBzY2hlbWEudGFibGVgIGZvcm1hdC4gKi9cbiAgICByZWFkb25seSBkZXBlbmRzT246IHN0cmluZ1tdO1xuXG4gICAgLyoqIEZvcmVpZ24ga2V5cy4gKi9cbiAgICByZWFkb25seSBmb3JlaWduS2V5czogRm9yZWlnbktleVtdO1xufVxuXG4vKiogQSBzY2hlbWEtZGVzY3JpcHRpb24gZmlsZSdzIG5vcm1hbGl6ZWQgY29udGVudC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hRGVzY3JpcHRpb24ge1xuICAgIC8qKiBTcGVjIHZlcnNpb24gb2YgdGhlIGZpbGUuICovXG4gICAgcmVhZG9ubHkgc3BlY1ZlcnNpb246IHN0cmluZztcblxuICAgIC8qKiBIdW1hbiBkZXNjcmlwdGlvbi4gKi9cbiAgICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vKiogU2V2ZXJpdHkgb2YgYSB2aW9sYXRpb24uICovXG5leHBvcnQgdHlwZSBWaW9sYXRpb25MZXZlbCA9ICdlcnJvcicgfCAnd2FybmluZyc7XG5cbi8qKiBBIHNpbmdsZSB2YWxpZGF0aW9uIGZpbmRpbmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpb2xhdGlvbiB7XG4gICAgLyoqIFNldmVyaXR5LiBgZXJyb3JgIGZhaWxzIHZhbGlkYXRpb247IGB3YXJuaW5nYCBkb2VzIG5vdC4gKi9cbiAgICByZWFkb25seSBsZXZlbDogVmlvbGF0aW9uTGV2ZWw7XG5cbiAgICAvKiogU3RhYmxlIG1hY2hpbmUtcmVhZGFibGUgcnVsZSBjb2RlIChlLmcuIGBQS19DT0xVTU5TX0VYSVNUYCkuICovXG4gICAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gICAgLyoqIE93bmluZyBzY2hlbWEsIGlmIGFwcGxpY2FibGUuICovXG4gICAgcmVhZG9ubHkgc2NoZW1hPzogc3RyaW5nO1xuXG4gICAgLyoqIE93bmluZyB0YWJsZSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSB0YWJsZT86IHN0cmluZztcblxuICAgIC8qKiBGaWVsZCBwYXRoIHdpdGhpbiB0aGUgZmlsZSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSBmaWVsZD86IHN0cmluZztcblxuICAgIC8qKiBTb3VyY2UgZmlsZSBwYXRoLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4tcmVhZGFibGUgbWVzc2FnZS4gKi9cbiAgICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKiBUaGUgYWdncmVnYXRlIHJlc3VsdCBvZiB2YWxpZGF0aW5nIGEgcm9vdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgLyoqIFRydWUgd2hlbiB0aGVyZSBhcmUgbm8gYGVycm9yYC1sZXZlbCB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IG9rOiBib29sZWFuO1xuXG4gICAgLyoqIEFsbCBmaW5kaW5ncywgZXJyb3JzIGFuZCB3YXJuaW5ncy4gKi9cbiAgICByZWFkb25seSB2aW9sYXRpb25zOiBWaW9sYXRpb25bXTtcbn1cbiJdfQ==
@@ -130,6 +130,21 @@
130
130
  },
131
131
  "nullable": {
132
132
  "type": "boolean"
133
+ },
134
+ "generated": {
135
+ "type": "string",
136
+ "minLength": 1
137
+ },
138
+ "expression": {
139
+ "type": "string",
140
+ "minLength": 1
141
+ },
142
+ "expressionColumns": {
143
+ "type": "array",
144
+ "items": {
145
+ "type": "string",
146
+ "minLength": 1
147
+ }
133
148
  }
134
149
  }
135
150
  },
@@ -36,6 +36,19 @@ export declare class Postgres18Table extends TableTypeBase {
36
36
  * @returns Every engine-specific violation.
37
37
  */
38
38
  engineSpecificViolations(): Violation[];
39
+ /**
40
+ * Validate generated columns.
41
+ *
42
+ * Emits `POSTGRES_GENERATED_KIND_VALID`,
43
+ * `POSTGRES_GENERATED_EXPRESSION_COLUMN_EXISTS`,
44
+ * `POSTGRES_GENERATED_NO_SELF_REFERENCE`,
45
+ * `POSTGRES_GENERATED_NO_GENERATED_REFERENCE`,
46
+ * `POSTGRES_GENERATED_NOT_IN_PARTITION_KEY`, and
47
+ * `POSTGRES_VIRTUAL_GENERATED_NOT_IN_PK`.
48
+ *
49
+ * @returns Every generated-column violation.
50
+ */
51
+ private generatedColumnViolations;
39
52
  /**
40
53
  * Validate UNIQUE constraints.
41
54
  *
@@ -32,6 +32,10 @@ const INDEX_NULLS = new Set([
32
32
  'first',
33
33
  'last',
34
34
  ]);
35
+ const GENERATED_KINDS = new Set([
36
+ 'stored',
37
+ 'virtual',
38
+ ]);
35
39
  /** Postgres 18 table. */
36
40
  class Postgres18Table extends table_type_1.TableTypeBase {
37
41
  /**
@@ -121,8 +125,88 @@ class Postgres18Table extends table_type_1.TableTypeBase {
121
125
  ...this.indexViolations(),
122
126
  ...this.uniqueConstraintViolations(),
123
127
  ...this.checkConstraintViolations(),
128
+ ...this.generatedColumnViolations(),
124
129
  ];
125
130
  }
131
+ /**
132
+ * Validate generated columns.
133
+ *
134
+ * Emits `POSTGRES_GENERATED_KIND_VALID`,
135
+ * `POSTGRES_GENERATED_EXPRESSION_COLUMN_EXISTS`,
136
+ * `POSTGRES_GENERATED_NO_SELF_REFERENCE`,
137
+ * `POSTGRES_GENERATED_NO_GENERATED_REFERENCE`,
138
+ * `POSTGRES_GENERATED_NOT_IN_PARTITION_KEY`, and
139
+ * `POSTGRES_VIRTUAL_GENERATED_NOT_IN_PK`.
140
+ *
141
+ * @returns Every generated-column violation.
142
+ */
143
+ generatedColumnViolations() {
144
+ const violations = [];
145
+ const generatedNames = new Set(this.definition.columns
146
+ .filter((column) => column.generated !== undefined)
147
+ .map((column) => column.name));
148
+ const partitionNames = new Set(this.definition.partitions.map((partition) => partition.name));
149
+ this.definition.columns.forEach((column, index) => {
150
+ if (column.generated === undefined) {
151
+ return;
152
+ }
153
+ const field = `columns[${index}]`;
154
+ if (!GENERATED_KINDS.has(column.generated)) {
155
+ violations.push(this.violation({
156
+ level: 'error',
157
+ code: 'POSTGRES_GENERATED_KIND_VALID',
158
+ field: `${field}.generated`,
159
+ message: `generated kind "${column.generated}" must be "stored" or "virtual"`,
160
+ }));
161
+ }
162
+ (column.expressionColumns ?? []).forEach((reference, referenceIndex) => {
163
+ const referenceField = `${field}.expressionColumns[${referenceIndex}]`;
164
+ if (reference === column.name) {
165
+ violations.push(this.violation({
166
+ level: 'error',
167
+ code: 'POSTGRES_GENERATED_NO_SELF_REFERENCE',
168
+ field: referenceField,
169
+ message: `generated column "${column.name}" cannot reference itself`,
170
+ }));
171
+ }
172
+ else if (!this.hasColumn(reference)) {
173
+ violations.push(this.violation({
174
+ level: 'error',
175
+ code: 'POSTGRES_GENERATED_EXPRESSION_COLUMN_EXISTS',
176
+ field: referenceField,
177
+ message: `generated column "${column.name}" references "${reference}", `
178
+ + 'which is not defined in columns',
179
+ }));
180
+ }
181
+ else if (generatedNames.has(reference)) {
182
+ violations.push(this.violation({
183
+ level: 'error',
184
+ code: 'POSTGRES_GENERATED_NO_GENERATED_REFERENCE',
185
+ field: referenceField,
186
+ message: `generated column "${column.name}" cannot reference `
187
+ + `generated column "${reference}"`,
188
+ }));
189
+ }
190
+ });
191
+ if (partitionNames.has(column.name)) {
192
+ violations.push(this.violation({
193
+ level: 'error',
194
+ code: 'POSTGRES_GENERATED_NOT_IN_PARTITION_KEY',
195
+ field: `${field}.generated`,
196
+ message: `generated column "${column.name}" cannot be a partition key`,
197
+ }));
198
+ }
199
+ if (column.generated === 'virtual' && this.definition.primaryKey.includes(column.name)) {
200
+ violations.push(this.violation({
201
+ level: 'error',
202
+ code: 'POSTGRES_VIRTUAL_GENERATED_NOT_IN_PK',
203
+ field: `${field}.generated`,
204
+ message: `virtual generated column "${column.name}" cannot be part of the primary key`,
205
+ }));
206
+ }
207
+ });
208
+ return violations;
209
+ }
126
210
  /**
127
211
  * Validate UNIQUE constraints.
128
212
  *
@@ -346,4 +430,4 @@ class Postgres18Table extends table_type_1.TableTypeBase {
346
430
  }
347
431
  }
348
432
  exports.Postgres18Table = Postgres18Table;
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMtMTguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFibGUtdHlwZXMvcG9zdGdyZXMtMTgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7OztBQVNILDhDQUV1QjtBQUN2QixvQ0FFa0I7QUFFbEIsTUFBTSxVQUFVLEdBQXdCLElBQUksR0FBRyxDQUFDO0lBQzVDLE9BQU87SUFDUCxNQUFNO0lBQ04sTUFBTTtDQUNULENBQUMsQ0FBQztBQUVILE1BQU0sYUFBYSxHQUF3QixJQUFJLEdBQUcsQ0FBQztJQUMvQyxPQUFPO0lBQ1AsTUFBTTtJQUNOLE1BQU07SUFDTixRQUFRO0lBQ1IsS0FBSztJQUNMLE1BQU07Q0FDVCxDQUFDLENBQUM7QUFFSCxNQUFNLFdBQVcsR0FBd0IsSUFBSSxHQUFHLENBQUM7SUFDN0MsS0FBSztJQUNMLE1BQU07Q0FDVCxDQUFDLENBQUM7QUFFSCxNQUFNLFdBQVcsR0FBd0IsSUFBSSxHQUFHLENBQUM7SUFDN0MsT0FBTztJQUNQLE1BQU07Q0FDVCxDQUFDLENBQUM7QUFFSCx5QkFBeUI7QUFDekIsTUFBYSxlQUFnQixTQUFRLDBCQUFhO0lBQzlDOzs7OztPQUtHO0lBQ0ksaUJBQWlCLENBQUMsSUFBWTtRQUNqQyxPQUFPLElBQUEsMkJBQW1CLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxtQkFBbUI7UUFDdEIsTUFBTSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLEVBQ0YsVUFBVSxHQUNiLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUVwQixLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RixVQUFVLENBQUMs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WUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDL0QsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUMzQixLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsNEJBQTRCO29CQUNsQyxLQUFLLEVBQUUsR0FBRyxLQUFLLFlBQVksV0FBVyxTQUFTO29CQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLE1BQU0sQ0FBQyxLQUFLLDZCQUE2QjtpQkFDckUsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUM1QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSw4QkFBOEI7b0JBQ3BDLEtBQUssRUFBRSxHQUFHLEtBQUssWUFBWSxZQUFZLEdBQUc7b0JBQzFDLE9BQU8sRUFBRSx5QkFBeUIsUUFBUSw2QkFBNkI7aUJBQzFFLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBOVZELDBDQThWQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUG9zdGdyZXMgMTggdGFibGUgdHlwZS5cbiAqXG4gKiBQb3N0Z3JlcyB1c2VzIGRlY2xhcmF0aXZlIHBhcnRpdGlvbmluZzogYSB0YWJsZSBpcyBwYXJ0aXRpb25lZCBieSBvbmUgc3RyYXRlZ3lcbiAqIChgcmFuZ2VgLCBgbGlzdGAsIG9yIGBoYXNoYCkgb3ZlciBvbmUgb3IgbW9yZSBleGlzdGluZyBrZXkgY29sdW1ucy4gRWFjaFxuICogcGFydGl0aW9uIGVudHJ5IG5hbWVzIGEga2V5IGNvbHVtbiAoYG5hbWVgKSBhbmQgdGhlIHN0cmF0ZWd5IChgdHlwZWApOyBhbGxcbiAqIGVudHJpZXMgb24gYSB0YWJsZSBtdXN0IHNoYXJlIG9uZSBzdHJhdGVneS5cbiAqL1xuXG5pbXBvcnQge1xuICAgIENoZWNrQ29uc3RyYWludCxcbiAgICBJbmRleCxcbiAgICBQYXJ0aXRpb24sXG4gICAgVW5pcXVlQ29uc3RyYWludCxcbiAgICBWaW9sYXRpb24sXG59IGZyb20gJy4uL21vZGVsJztcbmltcG9ydCB7XG4gICAgVGFibGVUeXBlQmFzZSxcbn0gZnJvbSAnLi4vdGFibGUtdHlwZSc7XG5pbXBvcnQge1xuICAgIGlzVmFsaWRQb3N0Z3Jlc1R5cGUsXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgU1RSQVRFR0lFUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgICdyYW5nZScsXG4gICAgJ2xpc3QnLFxuICAgICdoYXNoJyxcbl0pO1xuXG5jb25zdCBJTkRFWF9NRVRIT0RTOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICAgJ2J0cmVlJyxcbiAgICAnaGFzaCcsXG4gICAgJ2dpc3QnLFxuICAgICdzcGdpc3QnLFxuICAgICdnaW4nLFxuICAgICdicmluJyxcbl0pO1xuXG5jb25zdCBJTkRFWF9TT1JUUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgICdhc2MnLFxuICAgICdkZXNjJyxcbl0pO1xuXG5jb25zdCBJTkRFWF9OVUxMUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgICdmaXJzdCcsXG4gICAgJ2xhc3QnLFxuXSk7XG5cbi8qKiBQb3N0Z3JlcyAxOCB0YWJsZS4gKi9cbmV4cG9ydCBjbGFzcyBQb3N0Z3JlczE4VGFibGUgZXh0ZW5kcyBUYWJsZVR5cGVCYXNlIHtcbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBhIGNvbHVtbiB0eXBlIGFnYWluc3QgdGhlIFBvc3RncmVzIHR5cGUgcmVnaXN0cnkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHlwZSBUeXBlIHN0cmluZyBmcm9tIGEgY29sdW1uIGRlZmluaXRpb24uXG4gICAgICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSB0eXBlIGlzIGEgdmFsaWQgUG9zdGdyZXMgMTggdHlwZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNWYWxpZENvbHVtblR5cGUodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkUG9zdGdyZXNUeXBlKHR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBvc3RncmVzIHBhcnRpdGlvbiBydWxlcy5cbiAgICAgKlxuICAgICAqIEVtaXRzOiBgTk9fRFVQTElDQVRFX1BBUlRJVElPTlNgIChhIGtleSBjb2x1bW4gbGlzdGVkIHR3aWNlKSxcbiAgICAgKiBgUE9TVEdSRVNfUEFSVElUSU9OX0NPTFVNTl9FWElTVFNgICh0aGUga2V5IGNvbHVtbiBtdXN0IGJlIGEgZGF0YSBjb2x1bW4pLFxuICAgICAqIGBQT1NUR1JFU19QQVJUSVRJT05fU1RSQVRFR1lfVkFMSURgICh0aGUgc3RyYXRlZ3kgbXVzdCBiZSByYW5nZSAvIGxpc3QgL1xuICAgICAqIGhhc2gpLCBhbmQgYFBPU1RHUkVTX1BBUlRJVElPTl9TSU5HTEVfU1RSQVRFR1lgIChhIHRhYmxlIHBhcnRpdGlvbnMgYnkgb25lXG4gICAgICogc3RyYXRlZ3kgb25seSkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBFdmVyeSBwYXJ0aXRpb24tcmVsYXRlZCB2aW9sYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHBhcnRpdGlvblZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJ0aXRpb25zLFxuICAgICAgICB9ID0gdGhpcy5kZWZpbml0aW9uO1xuXG4gICAgICAgIGZvciAoY29uc3QgZHVwbGljYXRlIG9mIHRoaXMuZmluZER1cGxpY2F0ZXMocGFydGl0aW9ucy5tYXAoKHBhcnRpdGlvbikgPT4gcGFydGl0aW9uLm5hbWUpKSkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnTk9fRFVQTElDQVRFX1BBUlRJVElPTlMnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAncGFydGl0aW9ucycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYGR1cGxpY2F0ZSBwYXJ0aXRpb24ga2V5IGNvbHVtbiBcIiR7ZHVwbGljYXRlfVwiYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0cmF0ZWdpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgcGFydGl0aW9ucy5mb3JFYWNoKChwYXJ0aXRpb246IFBhcnRpdGlvbiwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0NvbHVtbihwYXJ0aXRpb24ubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX1BBUlRJVElPTl9DT0xVTU5fRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBwYXJ0aXRpb25zWyR7aW5kZXh9XS5uYW1lYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHBhcnRpdGlvbiBrZXkgY29sdW1uIFwiJHtwYXJ0aXRpb24ubmFtZX1cIiBpcyBub3QgZGVmaW5lZCBpbiBjb2x1bW5zYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRlZmluaXRpb24ucHJpbWFyeUtleS5pbmNsdWRlcyhwYXJ0aXRpb24ubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAvLy8gUG9zdGdyZXMgcmVxdWlyZXMgdGhlIHByaW1hcnkga2V5IHRvIGluY2x1ZGUgZXZlcnkgcGFydGl0aW9uLWtleVxuICAgICAgICAgICAgICAgIC8vLyBjb2x1bW4sIHNvIGEgcGFydGl0aW9uIGNvbHVtbiBvdXRzaWRlIHRoZSBwcmltYXJ5IGtleSBpcyBpbnZhbGlkLlxuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfUEFSVElUSU9OX0tFWV9JTl9QSycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgcGFydGl0aW9uc1ske2luZGV4fV0ubmFtZWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBwYXJ0aXRpb24ga2V5IGNvbHVtbiBcIiR7cGFydGl0aW9uLm5hbWV9XCIgbXVzdCBiZSBwYXJ0IG9mIHRoZSBwcmltYXJ5IGtleWAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzdHJhdGVneSA9IHBhcnRpdGlvbi50eXBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKFNUUkFURUdJRVMuaGFzKHN0cmF0ZWd5KSkge1xuICAgICAgICAgICAgICAgIHN0cmF0ZWdpZXMuYWRkKHN0cmF0ZWd5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19QQVJUSVRJT05fU1RSQVRFR1lfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHBhcnRpdGlvbnNbJHtpbmRleH1dLnR5cGVgLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgXCIke3BhcnRpdGlvbi50eXBlfVwiIGlzIG5vdCBhIHZhbGlkIFBvc3RncmVzIHBhcnRpdGlvbiBzdHJhdGVneSAocmFuZ2UsIGxpc3QsIGhhc2gpYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzdHJhdGVnaWVzLnNpemUgPiAxKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19QQVJUSVRJT05fU0lOR0xFX1NUUkFURUdZJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3BhcnRpdGlvbnMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBhIHBhcnRpdGlvbmVkIHRhYmxlIHVzZXMgb25lIHN0cmF0ZWd5OyBmb3VuZCAke1tcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RyYXRlZ2llcyxcbiAgICAgICAgICAgICAgICBdLnNvcnQoKS5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQb3N0Z3JlcyBlbmdpbmUtc3BlY2lmaWMgcnVsZXM6IGluZGV4ZXMsIHVuaXF1ZSBjb25zdHJhaW50cywgYW5kIGNoZWNrXG4gICAgICogY29uc3RyYWludHMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBFdmVyeSBlbmdpbmUtc3BlY2lmaWMgdmlvbGF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBlbmdpbmVTcGVjaWZpY1Zpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4udGhpcy5pbmRleFZpb2xhdGlvbnMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMudW5pcXVlQ29uc3RyYWludFZpb2xhdGlvbnMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuY2hlY2tDb25zdHJhaW50VmlvbGF0aW9ucygpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIFVOSVFVRSBjb25zdHJhaW50cy5cbiAgICAgKlxuICAgICAqIEVtaXRzIGBQT1NUR1JFU19VTklRVUVfTkFNRV9VTklRVUVgLCBgUE9TVEdSRVNfVU5JUVVFX0NPTFVNTl9FWElTVFNgLCBhbmRcbiAgICAgKiBgUE9TVEdSRVNfVU5JUVVFX05PX0RVUExJQ0FURV9DT0xVTU5TYC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IHVuaXF1ZS1jb25zdHJhaW50IHZpb2xhdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHVuaXF1ZUNvbnN0cmFpbnRWaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgdW5pcXVlQ29uc3RyYWludHMsXG4gICAgICAgIH0gPSB0aGlzLmRlZmluaXRpb247XG5cbiAgICAgICAgZm9yIChjb25zdCBkdXBsaWNhdGUgb2YgdGhpcy5maW5kRHVwbGljYXRlcyh1bmlxdWVDb25zdHJhaW50cy5tYXAoKGNvbnN0cmFpbnQpID0+IGNvbnN0cmFpbnQubmFtZSkpKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19VTklRVUVfTkFNRV9VTklRVUUnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAndW5pcXVlQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkdXBsaWNhdGUgdW5pcXVlLWNvbnN0cmFpbnQgbmFtZSBcIiR7ZHVwbGljYXRlfVwiYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVuaXF1ZUNvbnN0cmFpbnRzLmZvckVhY2goKGNvbnN0cmFpbnQ6IFVuaXF1ZUNvbnN0cmFpbnQsIHBvc2l0aW9uOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gYHVuaXF1ZUNvbnN0cmFpbnRzWyR7cG9zaXRpb259XWA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGR1cGxpY2F0ZSBvZiB0aGlzLmZpbmREdXBsaWNhdGVzKGNvbnN0cmFpbnQuY29sdW1ucykpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX1VOSVFVRV9OT19EVVBMSUNBVEVfQ09MVU1OUycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uY29sdW1uc2AsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB1bmlxdWUgY29uc3RyYWludCBcIiR7Y29uc3RyYWludC5uYW1lfVwiIGxpc3RzIGNvbHVtbiBcIiR7ZHVwbGljYXRlfVwiIG1vcmUgdGhhbiBvbmNlYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdHJhaW50LmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNDb2x1bW4oY29sdW1uKSkge1xuICAgICAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfVU5JUVVFX0NPTFVNTl9FWElTVFMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5jb2x1bW5zWyR7Y29sdW1uSW5kZXh9XWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdW5pcXVlLWNvbnN0cmFpbnQgY29sdW1uIFwiJHtjb2x1bW59XCIgaXMgbm90IGRlZmluZWQgaW4gY29sdW1uc2AsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKC4uLnRoaXMudW5pcXVlQ29uc3RyYWludEtleVZpb2xhdGlvbnMoY29uc3RyYWludCwgZmllbGQpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLy8vIFJlbGF0aW9uc2hpcCBydWxlcyBiZXR3ZWVuIGEgdW5pcXVlIGNvbnN0cmFpbnQgYW5kIHRoZSBwcmltYXJ5IGtleSAvXG4gICAgLy8vIHBhcnRpdGlvbiBrZXk6IHJlZHVuZGFuY3kgd2l0aCB0aGUgUEssIGFuZCB0aGUgUG9zdGdyZXMgcnVsZSB0aGF0IGFcbiAgICAvLy8gdW5pcXVlIGNvbnN0cmFpbnQgb24gYSBwYXJ0aXRpb25lZCB0YWJsZSBtdXN0IGluY2x1ZGUgZXZlcnkgcGFydGl0aW9uIGtleS5cbiAgICBwcml2YXRlIHVuaXF1ZUNvbnN0cmFpbnRLZXlWaW9sYXRpb25zKGNvbnN0cmFpbnQ6IFVuaXF1ZUNvbnN0cmFpbnQsIGZpZWxkOiBzdHJpbmcpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG5cbiAgICAgICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMuZGVmaW5pdGlvbi5wcmltYXJ5S2V5O1xuICAgICAgICBjb25zdCBjb2x1bW5TZXQgPSBuZXcgU2V0KGNvbnN0cmFpbnQuY29sdW1ucyk7XG4gICAgICAgIGlmIChwcmltYXJ5S2V5Lmxlbmd0aCA+IDAgJiYgcHJpbWFyeUtleS5sZW5ndGggPT09IGNvbHVtblNldC5zaXplXG4gICAgICAgICAgICAmJiBwcmltYXJ5S2V5LmV2ZXJ5KChjb2x1bW4pID0+IGNvbHVtblNldC5oYXMoY29sdW1uKSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfVU5JUVVFX1JFRFVOREFOVF9XSVRIX1BLJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB1bmlxdWUgY29uc3RyYWludCBcIiR7Y29uc3RyYWludC5uYW1lfVwiIGR1cGxpY2F0ZXMgdGhlIHByaW1hcnkga2V5YCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnRpdGlvbktleXMgPSB0aGlzLmRlZmluaXRpb24ucGFydGl0aW9uc1xuICAgICAgICAgICAgLm1hcCgocGFydGl0aW9uKSA9PiBwYXJ0aXRpb24ubmFtZSlcbiAgICAgICAgICAgIC5maWx0ZXIoKG5hbWUpID0+IHRoaXMuaGFzQ29sdW1uKG5hbWUpKTtcbiAgICAgICAgY29uc3QgbWlzc2luZyA9IHBhcnRpdGlvbktleXMuZmlsdGVyKChuYW1lKSA9PiAhY29uc3RyYWludC5jb2x1bW5zLmluY2x1ZGVzKG5hbWUpKTtcbiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfVU5JUVVFX0lOQ0xVREVTX1BBUlRJVElPTl9LRVlTJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB1bmlxdWUgY29uc3RyYWludCBcIiR7Y29uc3RyYWludC5uYW1lfVwiIG9uIGEgcGFydGl0aW9uZWQgdGFibGUgbXVzdCBpbmNsdWRlIGBcbiAgICAgICAgICAgICAgICAgICAgKyBgZXZlcnkgcGFydGl0aW9uIGtleSBjb2x1bW47IG1pc3Npbmc6ICR7bWlzc2luZy5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBDSEVDSyBjb25zdHJhaW50cy4gT25seSB0aGUgZXhwbGljaXQgcmVmZXJlbmNlZC1jb2x1bW4gbGlzdCBpc1xuICAgICAqIGNoZWNrZWQ7IHRoZSBwcmVkaWNhdGUgaXRzZWxmIHN0YXlzIG9wYXF1ZS5cbiAgICAgKlxuICAgICAqIEVtaXRzIGBQT1NUR1JFU19DSEVDS19OQU1FX1VOSVFVRWAgYW5kIGBQT1NUR1JFU19DSEVDS19DT0xVTU5fRVhJU1RTYC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IGNoZWNrLWNvbnN0cmFpbnQgdmlvbGF0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgY2hlY2tDb25zdHJhaW50VmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNoZWNrQ29uc3RyYWludHMsXG4gICAgICAgIH0gPSB0aGlzLmRlZmluaXRpb247XG5cbiAgICAgICAgZm9yIChjb25zdCBkdXBsaWNhdGUgb2YgdGhpcy5maW5kRHVwbGljYXRlcyhjaGVja0NvbnN0cmFpbnRzLm1hcCgoY29uc3RyYWludCkgPT4gY29uc3RyYWludC5uYW1lKSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0NIRUNLX05BTUVfVU5JUVVFJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NoZWNrQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkdXBsaWNhdGUgY2hlY2stY29uc3RyYWludCBuYW1lIFwiJHtkdXBsaWNhdGV9XCJgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hlY2tDb25zdHJhaW50cy5mb3JFYWNoKChjb25zdHJhaW50OiBDaGVja0NvbnN0cmFpbnQsIHBvc2l0aW9uOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gYGNoZWNrQ29uc3RyYWludHNbJHtwb3NpdGlvbn1dYDtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0NvbHVtbihjb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19DSEVDS19DT0xVTU5fRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uY29sdW1uc1ske2NvbHVtbkluZGV4fV1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGNoZWNrLWNvbnN0cmFpbnQgY29sdW1uIFwiJHtjb2x1bW59XCIgaXMgbm90IGRlZmluZWQgaW4gY29sdW1uc2AsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgc2Vjb25kYXJ5IGluZGV4ZXMuXG4gICAgICpcbiAgICAgKiBFbWl0cyBgUE9TVEdSRVNfSU5ERVhfTkFNRV9VTklRVUVgLCBgUE9TVEdSRVNfSU5ERVhfTUVUSE9EX1ZBTElEYCxcbiAgICAgKiBgUE9TVEdSRVNfSU5ERVhfQ09MVU1OX0VYSVNUU2AsIGBQT1NUR1JFU19JTkRFWF9OT19EVVBMSUNBVEVfQ09MVU1OU2AsXG4gICAgICogYFBPU1RHUkVTX0lOREVYX1VOSVFVRV9CVFJFRV9PTkxZYCwgYFBPU1RHUkVTX0lOREVYX1NPUlRfVkFMSURgLCBhbmRcbiAgICAgKiBgUE9TVEdSRVNfSU5ERVhfTlVMTFNfVkFMSURgLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgaW5kZXgtcmVsYXRlZCB2aW9sYXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbmRleFZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpbmRleGVzLFxuICAgICAgICB9ID0gdGhpcy5kZWZpbml0aW9uO1xuXG4gICAgICAgIGZvciAoY29uc3QgZHVwbGljYXRlIG9mIHRoaXMuZmluZER1cGxpY2F0ZXMoaW5kZXhlcy5tYXAoKGluZGV4KSA9PiBpbmRleC5uYW1lKSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0lOREVYX05BTUVfVU5JUVVFJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2luZGV4ZXMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkdXBsaWNhdGUgaW5kZXggbmFtZSBcIiR7ZHVwbGljYXRlfVwiYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ZXMuZm9yRWFjaCgoaW5kZXgsIHBvc2l0aW9uKSA9PiB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goLi4udGhpcy5zaW5nbGVJbmRleFZpb2xhdGlvbnMoaW5kZXgsIHBvc2l0aW9uKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cblxuICAgIC8vLyBDaGVja3MgZm9yIG9uZSBpbmRleCBlbnRyeS5cbiAgICBwcml2YXRlIHNpbmdsZUluZGV4VmlvbGF0aW9ucyhpbmRleDogSW5kZXgsIHBvc2l0aW9uOiBudW1iZXIpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IGZpZWxkID0gYGluZGV4ZXNbJHtwb3NpdGlvbn1dYDtcblxuICAgICAgICBpZiAoIUlOREVYX01FVEhPRFMuaGFzKGluZGV4Lm1ldGhvZCkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0lOREVYX01FVEhPRF9WQUxJRCcsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5tZXRob2RgLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBpbmRleCBtZXRob2QgXCIke2luZGV4Lm1ldGhvZH1cIiBtdXN0IGJlIG9uZSBvZjogJHtbXG4gICAgICAgICAgICAgICAgICAgIC4uLklOREVYX01FVEhPRFMsXG4gICAgICAgICAgICAgICAgXS5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXgudW5pcXVlID09PSB0cnVlICYmIGluZGV4Lm1ldGhvZCAhPT0gJ2J0cmVlJykge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfSU5ERVhfVU5JUVVFX0JUUkVFX09OTFknLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0udW5pcXVlYCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgYSB1bmlxdWUgaW5kZXggbXVzdCB1c2UgdGhlIGJ0cmVlIG1ldGhvZCwgbm90IFwiJHtpbmRleC5tZXRob2R9XCJgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5TmFtZXMgPSBpbmRleC5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG4gICAgICAgIGZvciAoY29uc3QgZHVwbGljYXRlIG9mIHRoaXMuZmluZER1cGxpY2F0ZXMoa2V5TmFtZXMpKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19JTkRFWF9OT19EVVBMSUNBVEVfQ09MVU1OUycsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5jb2x1bW5zYCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaW5kZXggXCIke2luZGV4Lm5hbWV9XCIgbGlzdHMga2V5IGNvbHVtbiBcIiR7ZHVwbGljYXRlfVwiIG1vcmUgdGhhbiBvbmNlYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZHVwbGljYXRlIG9mIHRoaXMuZmluZER1cGxpY2F0ZXMoaW5kZXguaW5jbHVkZSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0lOREVYX05PX0RVUExJQ0FURV9DT0xVTU5TJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmluY2x1ZGVgLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBpbmRleCBcIiR7aW5kZXgubmFtZX1cIiBsaXN0cyBpbmNsdWRlIGNvbHVtbiBcIiR7ZHVwbGljYXRlfVwiIG1vcmUgdGhhbiBvbmNlYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaW5jbHVkZWQgb2YgaW5kZXguaW5jbHVkZSkge1xuICAgICAgICAgICAgaWYgKGtleU5hbWVzLmluY2x1ZGVzKGluY2x1ZGVkKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfSU5ERVhfTk9fRFVQTElDQVRFX0NPTFVNTlMnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmluY2x1ZGVgLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaW5kZXggXCIke2luZGV4Lm5hbWV9XCIgaW5jbHVkZSBjb2x1bW4gXCIke2luY2x1ZGVkfVwiIGlzIGFsc28gYSBrZXkgY29sdW1uYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbmRleC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNDb2x1bW4oY29sdW1uLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19JTkRFWF9DT0xVTU5fRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5jb2x1bW5zWyR7Y29sdW1uSW5kZXh9XS5uYW1lYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGluZGV4IGtleSBjb2x1bW4gXCIke2NvbHVtbi5uYW1lfVwiIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2x1bW4uc29ydCAhPT0gdW5kZWZpbmVkICYmICFJTkRFWF9TT1JUUy5oYXMoY29sdW1uLnNvcnQpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19JTkRFWF9TT1JUX1ZBTElEJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5jb2x1bW5zWyR7Y29sdW1uSW5kZXh9XS5zb3J0YCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGluZGV4IHNvcnQgXCIke2NvbHVtbi5zb3J0fVwiIG11c3QgYmUgXCJhc2NcIiBvciBcImRlc2NcImAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbHVtbi5udWxscyAhPT0gdW5kZWZpbmVkICYmICFJTkRFWF9OVUxMUy5oYXMoY29sdW1uLm51bGxzKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfSU5ERVhfTlVMTFNfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmNvbHVtbnNbJHtjb2x1bW5JbmRleH1dLm51bGxzYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGluZGV4IG51bGxzIFwiJHtjb2x1bW4ubnVsbHN9XCIgbXVzdCBiZSBcImZpcnN0XCIgb3IgXCJsYXN0XCJgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW5kZXguaW5jbHVkZS5mb3JFYWNoKChpbmNsdWRlZCwgaW5jbHVkZUluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQ29sdW1uKGluY2x1ZGVkKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfSU5ERVhfQ09MVU1OX0VYSVNUUycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uaW5jbHVkZVske2luY2x1ZGVJbmRleH1dYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGluZGV4IGluY2x1ZGUgY29sdW1uIFwiJHtpbmNsdWRlZH1cIiBpcyBub3QgZGVmaW5lZCBpbiBjb2x1bW5zYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cbn1cbiJdfQ==
433
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMtMTguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFibGUtdHlwZXMvcG9zdGdyZXMtMTgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7OztBQVNILDhDQUV1QjtBQUN2QixvQ0FFa0I7QUFFbEIsTUFBTSxVQUFVLEdBQXdCLElBQUksR0FBRyxDQUFDO0lBQzVDLE9BQU87SUFDUCxNQUFNO0lBQ04sTUFBTTtDQUNULENBQUMsQ0FBQztBQUVILE1BQU0sYUFBYSxHQUF3QixJQUFJLEdBQUcsQ0FBQztJQUMvQyxPQUFPO0lBQ1AsTUFBTTtJQUNOLE1BQU07SUFDTixRQUFRO0lBQ1IsS0FBSztJQUNMLE1BQU07Q0FDVCxDQUFDLENBQUM7QUFFSCxNQUFNLFdBQVcsR0FBd0IsSUFBSSxHQUFHLENBQUM7SUFDN0MsS0FBSztJQUNMLE1BQU07Q0FDVCxDQUFDLENBQUM7QUFFSCxNQUFNLFdBQVcsR0FBd0IsSUFBSSxHQUFHLENBQUM7SUFDN0MsT0FBTztJQUNQLE1BQU07Q0FDVCxDQUFDLENBQUM7QUFFSCxNQUFNLGVBQWUsR0FBd0IsSUFBSSxHQUFHLENBQUM7SUFDakQsUUFBUTtJQUNSLFNBQVM7Q0FDWixDQUFDLENBQUM7QUFFSCx5QkFBeUI7QUFDekIsTUFBYSxlQUFnQixTQUFRLDBCQUFhO0lBQzlDOzs7OztPQUtHO0lBQ0ksaUJBQWlCLENBQUMsSUFBWTtRQUNqQyxPQUFPLElBQUEsMkJBQW1CLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxtQkFBbUI7UUFDdEIsTUFBTSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLEVBQ0YsVUFBVSxHQUNiLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUVwQixLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLEtBQUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSx5QkFBeUI7Z0JBQy9CLEtBQUssRUFBRSxZQUFZO2dCQUNuQixPQUFPLEVBQUUsbUNBQW1DLFNBQVMsR0FBRzthQUMzRCxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ3JDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFvQixFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSxrQ0FBa0M7b0JBQ3hDLEtBQUssRUFBRSxjQUFjLEtBQUssUUFBUTtvQkFDbEMsT0FBTyxFQUFFLHlCQUF5QixTQUFTLENBQUMsSUFBSSw2QkFBNkI7aUJBQ2hGLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztpQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM5RCxvRUFBb0U7Z0JBQ3BFLHFFQUFxRTtnQkFDckUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUMzQixLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsOEJBQThCO29CQUNwQyxLQUFLLEVBQUUsY0FBYyxLQUFLLFFBQVE7b0JBQ2xDLE9BQU8sRUFBRSx5QkFBeUIsU0FBUyxDQUFDLElBQUksbUNBQW1DO2lCQUN0RixDQUFDLENBQUMsQ0FBQztZQUNSLENBQUM7WUFFRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JELElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUMzQixVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSxtQ0FBbUM7b0JBQ3pDLEtBQUssRUFBRSxjQUFjLEtBQUssUUFBUTtvQkFDbEMsT0FBTyxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksa0VBQWtFO2lCQUNoRyxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLEtBQUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSxvQ0FBb0M7Z0JBQzFDLEtBQUssRUFBRSxZQUFZO2dCQUNuQixPQUFPLEVBQUUsZ0RBQWdEO29CQUNyRCxHQUFHLFVBQVU7aUJBQ2hCLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHdCQUF3QjtRQUMzQixPQUFPO1lBQ0gsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ3BDLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ25DLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1NBQ3RDLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSyx5QkFBeUI7UUFDN0IsTUFBTSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUVuQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPO2FBQ2xCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7YUFDbEQsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQ3BDLENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTlGLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM5QyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2pDLE9BQU87WUFDWCxDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsV0FBVyxLQUFLLEdBQUcsQ0FBQztZQUVsQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUMzQixLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsK0JBQStCO29CQUNyQyxLQUFLLEVBQUUsR0FBRyxLQUFLLFlBQVk7b0JBQzNCLE9BQU8sRUFBRSxtQkFBbUIsTUFBTSxDQUFDLFNBQVMsaUNBQWlDO2lCQUNoRixDQUFDLENBQUMsQ0FBQztZQUNSLENBQUM7WUFFRCxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLEVBQUU7Z0JBQ25FLE1BQU0sY0FBYyxHQUFHLEdBQUcsS0FBSyxzQkFBc0IsY0FBYyxHQUFHLENBQUM7Z0JBQ3ZFLElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDNUIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO3dCQUMzQixLQUFLLEVBQUUsT0FBTzt3QkFDZCxJQUFJLEVBQUUsc0NBQXNDO3dCQUM1QyxLQUFLLEVBQUUsY0FBYzt3QkFDckIsT0FBTyxFQUFFLHFCQUFxQixNQUFNLENBQUMsSUFBSSwyQkFBMkI7cUJBQ3ZFLENBQUMsQ0FBQyxDQUFDO2dCQUNSLENBQUM7cUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDcEMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO3dCQUMzQixLQUFLLEVBQUUsT0FBTzt3QkFDZCxJQUFJLEVBQUUsNkNBQTZDO3dCQUNuRCxLQUFLLEVBQUUsY0FBYzt3QkFDckIsT0FBTyxFQUFFLHFCQUFxQixNQUFNLENBQUMsSUFBSSxpQkFBaUIsU0FBUyxLQUFLOzhCQUNsRSxpQ0FBaUM7cUJBQzFDLENBQUMsQ0FBQyxDQUFDO2dCQUNSLENBQUM7cUJBQU0sSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzt3QkFDM0IsS0FBSyxFQUFFLE9BQU87d0JBQ2QsSUFBSSxFQUFFLDJDQUEyQzt3QkFDakQsS0FBSyxFQUFFLGNBQWM7d0JBQ3JCLE9BQU8sRUFBRSxxQkFBcUIsTUFBTSxDQUFDLElBQUkscUJBQXFCOzhCQUN4RCxxQkFBcUIsU0FBUyxHQUFHO3FCQUMxQyxDQUFDLENBQUMsQ0FBQztnQkFDUixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLHlDQUF5QztvQkFDL0MsS0FBSyxFQUFFLEdBQUcsS0FBSyxZQUFZO29CQUMzQixPQUFPLEVBQUUscUJBQXFCLE1BQU0sQ0FBQyxJQUFJLDZCQUE2QjtpQkFDekUsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1lBRUQsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3JGLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLHNDQUFzQztvQkFDNUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxZQUFZO29CQUMzQixPQUFPLEVBQUUsNkJBQTZCLE1BQU0sQ0FBQyxJQUFJLHFDQUFxQztpQkFDekYsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLDBCQUEwQjtRQUM5QixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBQ25DLE1BQU0sRUFDRixpQkFBaUIsR0FDcEIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXBCLEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUMzQixLQUFLLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUUsNkJBQTZCO2dCQUNuQyxLQUFLLEVBQUUsbUJBQW1CO2dCQUMxQixPQUFPLEVBQUUscUNBQXFDLFNBQVMsR0FBRzthQUM3RCxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUM7UUFFRCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUE0QixFQUFFLFFBQWdCLEVBQUUsRUFBRTtZQUN6RSxNQUFNLEtBQUssR0FBRyxxQkFBcUIsUUFBUSxHQUFHLENBQUM7WUFDL0MsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM5RCxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSxzQ0FBc0M7b0JBQzVDLEtBQUssRUFBRSxHQUFHLEtBQUssVUFBVTtvQkFDekIsT0FBTyxFQUFFLHNCQUFzQixVQUFVLENBQUMsSUFBSSxtQkFBbUIsU0FBUyxrQkFBa0I7aUJBQy9GLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztZQUNELFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUMxQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7d0JBQzNCLEtBQUssRUFBRSxPQUFPO3dCQUNkLElBQUksRUFBRSwrQkFBK0I7d0JBQ3JDLEtBQUssRUFBRSxHQUFHLEtBQUssWUFBWSxXQUFXLEdBQUc7d0JBQ3pDLE9BQU8sRUFBRSw2QkFBNkIsTUFBTSw2QkFBNkI7cUJBQzVFLENBQUMsQ0FBQyxDQUFDO2dCQUNSLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLHVFQUF1RTtJQUN2RSw4RUFBOEU7SUFDdEUsNkJBQTZCLENBQUMsVUFBNEIsRUFBRSxLQUFhO1FBQzdFLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7UUFFbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsSUFBSTtlQUMxRCxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLEtBQUssRUFBRSxTQUFTO2dCQUNoQixJQUFJLEVBQUUsbUNBQW1DO2dCQUN6QyxLQUFLLEVBQUUsR0FBRyxLQUFLLFVBQVU7Z0JBQ3pCLE9BQU8sRUFBRSxzQkFBc0IsVUFBVSxDQUFDLElBQUksOEJBQThCO2FBQy9FLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVTthQUMzQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7YUFDbEMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25GLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLEtBQUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSx5Q0FBeUM7Z0JBQy9DLEtBQUssRUFBRSxHQUFHLEtBQUssVUFBVTtnQkFDekIsT0FBTyxFQUFFLHNCQUFzQixVQUFVLENBQUMsSUFBSSx3Q0FBd0M7c0JBQ2hGLHdDQUF3QyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0sseUJBQXlCO1FBQzdCLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7UUFDbkMsTUFBTSxFQUNGLGdCQUFnQixHQUNuQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFcEIsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLEtBQUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSw0QkFBNEI7Z0JBQ2xDLEtBQUssRUFBRSxrQkFBa0I7Z0JBQ3pCLE9BQU8sRUFBRSxvQ0FBb0MsU0FBUyxHQUFHO2FBQzVELENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztRQUVELGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQTJCLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO1lBQ3ZFLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixRQUFRLEdBQUcsQ0FBQztZQUM5QyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDMUIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO3dCQUMzQixLQUFLLEVBQUUsT0FBTzt3QkFDZCxJQUFJLEVBQUUsOEJBQThCO3dCQUNwQyxLQUFLLEVBQUUsR0FBRyxLQUFLLFlBQVksV0FBVyxHQUFHO3dCQUN6QyxPQUFPLEVBQUUsNEJBQTRCLE1BQU0sNkJBQTZCO3FCQUMzRSxDQUFDLENBQUMsQ0FBQztnQkFDUixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSyxlQUFlO1FBQ25CLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7UUFDbkMsTUFBTSxFQUNGLE9BQU8sR0FDVixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFcEIsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUMzQixLQUFLLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUUsNEJBQTRCO2dCQUNsQyxLQUFLLEVBQUUsU0FBUztnQkFDaEIsT0FBTyxFQUFFLHlCQUF5QixTQUFTLEdBQUc7YUFDakQsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDO1FBRUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELCtCQUErQjtJQUN2QixxQkFBcUIsQ0FBQyxLQUFZLEVBQUUsUUFBZ0I7UUFDeEQsTUFBTSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLEtBQUssR0FBRyxXQUFXLFFBQVEsR0FBRyxDQUFDO1FBRXJDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ25DLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDM0IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLDZCQUE2QjtnQkFDbkMsS0FBSyxFQUFFLEdBQUcsS0FBSyxTQUFTO2dCQUN4QixPQUFPLEVBQUUsaUJBQWlCLEtBQUssQ0FBQyxNQUFNLHFCQUFxQjtvQkFDdkQsR0FBRyxhQUFhO2lCQUNuQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTthQUNqQixDQUFDLENBQUMsQ0FBQztRQUNSLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDcEQsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUMzQixLQUFLLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUUsa0NBQWtDO2dCQUN4QyxLQUFLLEVBQUUsR0FBRyxLQUFLLFNBQVM7Z0JBQ3hCLE9BQU8sRUFBRSxrREFBa0QsS0FBSyxDQUFDLE1BQU0sR0FBRzthQUM3RSxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3BELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDM0IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLHFDQUFxQztnQkFDM0MsS0FBSyxFQUFFLEdBQUcsS0FBSyxVQUFVO2dCQUN6QixPQUFPLEVBQUUsVUFBVSxLQUFLLENBQUMsSUFBSSx1QkFBdUIsU0FBUyxrQkFBa0I7YUFDbEYsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDO1FBRUQsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3pELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDM0IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLHFDQUFxQztnQkFDM0MsS0FBSyxFQUFFLEdBQUcsS0FBSyxVQUFVO2dCQUN6QixPQUFPLEVBQUUsVUFBVSxLQUFLLENBQUMsSUFBSSwyQkFBMkIsU0FBUyxrQkFBa0I7YUFDdEYsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDO1FBRUQsS0FBSyxNQUFNLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLHFDQUFxQztvQkFDM0MsS0FBSyxFQUFFLEdBQUcsS0FBSyxVQUFVO29CQUN6QixPQUFPLEVBQUUsVUFBVSxLQUFLLENBQUMsSUFBSSxxQkFBcUIsUUFBUSx3QkFBd0I7aUJBQ3JGLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztRQUNMLENBQUM7UUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRTtZQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUMzQixLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsOEJBQThCO29CQUNwQyxLQUFLLEVBQUUsR0FBRyxLQUFLLFlBQVksV0FBVyxRQUFRO29CQUM5QyxPQUFPLEVBQUUscUJBQXFCLE1BQU0sQ0FBQyxJQUFJLDZCQUE2QjtpQkFDekUsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzdELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLDJCQUEyQjtvQkFDakMsS0FBSyxFQUFFLEdBQUcsS0FBSyxZQUFZLFdBQVcsUUFBUTtvQkFDOUMsT0FBTyxFQUFFLGVBQWUsTUFBTSxDQUFDLElBQUksMkJBQTJCO2lCQUNqRSxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDL0QsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUMzQixLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsNEJBQTRCO29CQUNsQyxLQUFLLEVBQUUsR0FBRyxLQUFLLFlBQVksV0FBVyxTQUFTO29CQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLE1BQU0sQ0FBQyxLQUFLLDZCQUE2QjtpQkFDckUsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUM1QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSw4QkFBOEI7b0JBQ3BDLEtBQUssRUFBRSxHQUFHLEtBQUssWUFBWSxZQUFZLEdBQUc7b0JBQzFDLE9BQU8sRUFBRSx5QkFBeUIsUUFBUSw2QkFBNkI7aUJBQzFFLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBdGJELDBDQXNiQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUG9zdGdyZXMgMTggdGFibGUgdHlwZS5cbiAqXG4gKiBQb3N0Z3JlcyB1c2VzIGRlY2xhcmF0aXZlIHBhcnRpdGlvbmluZzogYSB0YWJsZSBpcyBwYXJ0aXRpb25lZCBieSBvbmUgc3RyYXRlZ3lcbiAqIChgcmFuZ2VgLCBgbGlzdGAsIG9yIGBoYXNoYCkgb3ZlciBvbmUgb3IgbW9yZSBleGlzdGluZyBrZXkgY29sdW1ucy4gRWFjaFxuICogcGFydGl0aW9uIGVudHJ5IG5hbWVzIGEga2V5IGNvbHVtbiAoYG5hbWVgKSBhbmQgdGhlIHN0cmF0ZWd5IChgdHlwZWApOyBhbGxcbiAqIGVudHJpZXMgb24gYSB0YWJsZSBtdXN0IHNoYXJlIG9uZSBzdHJhdGVneS5cbiAqL1xuXG5pbXBvcnQge1xuICAgIENoZWNrQ29uc3RyYWludCxcbiAgICBJbmRleCxcbiAgICBQYXJ0aXRpb24sXG4gICAgVW5pcXVlQ29uc3RyYWludCxcbiAgICBWaW9sYXRpb24sXG59IGZyb20gJy4uL21vZGVsJztcbmltcG9ydCB7XG4gICAgVGFibGVUeXBlQmFzZSxcbn0gZnJvbSAnLi4vdGFibGUtdHlwZSc7XG5pbXBvcnQge1xuICAgIGlzVmFsaWRQb3N0Z3Jlc1R5cGUsXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgU1RSQVRFR0lFUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgICdyYW5nZScsXG4gICAgJ2xpc3QnLFxuICAgICdoYXNoJyxcbl0pO1xuXG5jb25zdCBJTkRFWF9NRVRIT0RTOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICAgJ2J0cmVlJyxcbiAgICAnaGFzaCcsXG4gICAgJ2dpc3QnLFxuICAgICdzcGdpc3QnLFxuICAgICdnaW4nLFxuICAgICdicmluJyxcbl0pO1xuXG5jb25zdCBJTkRFWF9TT1JUUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgICdhc2MnLFxuICAgICdkZXNjJyxcbl0pO1xuXG5jb25zdCBJTkRFWF9OVUxMUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgICdmaXJzdCcsXG4gICAgJ2xhc3QnLFxuXSk7XG5cbmNvbnN0IEdFTkVSQVRFRF9LSU5EUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgICdzdG9yZWQnLFxuICAgICd2aXJ0dWFsJyxcbl0pO1xuXG4vKiogUG9zdGdyZXMgMTggdGFibGUuICovXG5leHBvcnQgY2xhc3MgUG9zdGdyZXMxOFRhYmxlIGV4dGVuZHMgVGFibGVUeXBlQmFzZSB7XG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgYSBjb2x1bW4gdHlwZSBhZ2FpbnN0IHRoZSBQb3N0Z3JlcyB0eXBlIHJlZ2lzdHJ5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHR5cGUgVHlwZSBzdHJpbmcgZnJvbSBhIGNvbHVtbiBkZWZpbml0aW9uLlxuICAgICAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgdHlwZSBpcyBhIHZhbGlkIFBvc3RncmVzIDE4IHR5cGUuXG4gICAgICovXG4gICAgcHVibGljIGlzVmFsaWRDb2x1bW5UeXBlKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaXNWYWxpZFBvc3RncmVzVHlwZSh0eXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQb3N0Z3JlcyBwYXJ0aXRpb24gcnVsZXMuXG4gICAgICpcbiAgICAgKiBFbWl0czogYE5PX0RVUExJQ0FURV9QQVJUSVRJT05TYCAoYSBrZXkgY29sdW1uIGxpc3RlZCB0d2ljZSksXG4gICAgICogYFBPU1RHUkVTX1BBUlRJVElPTl9DT0xVTU5fRVhJU1RTYCAodGhlIGtleSBjb2x1bW4gbXVzdCBiZSBhIGRhdGEgY29sdW1uKSxcbiAgICAgKiBgUE9TVEdSRVNfUEFSVElUSU9OX1NUUkFURUdZX1ZBTElEYCAodGhlIHN0cmF0ZWd5IG11c3QgYmUgcmFuZ2UgLyBsaXN0IC9cbiAgICAgKiBoYXNoKSwgYW5kIGBQT1NUR1JFU19QQVJUSVRJT05fU0lOR0xFX1NUUkFURUdZYCAoYSB0YWJsZSBwYXJ0aXRpb25zIGJ5IG9uZVxuICAgICAqIHN0cmF0ZWd5IG9ubHkpLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgcGFydGl0aW9uLXJlbGF0ZWQgdmlvbGF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBwYXJ0aXRpb25WaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFydGl0aW9ucyxcbiAgICAgICAgfSA9IHRoaXMuZGVmaW5pdGlvbjtcblxuICAgICAgICBmb3IgKGNvbnN0IGR1cGxpY2F0ZSBvZiB0aGlzLmZpbmREdXBsaWNhdGVzKHBhcnRpdGlvbnMubWFwKChwYXJ0aXRpb24pID0+IHBhcnRpdGlvbi5uYW1lKSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ05PX0RVUExJQ0FURV9QQVJUSVRJT05TJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3BhcnRpdGlvbnMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkdXBsaWNhdGUgcGFydGl0aW9uIGtleSBjb2x1bW4gXCIke2R1cGxpY2F0ZX1cImAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdHJhdGVnaWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIHBhcnRpdGlvbnMuZm9yRWFjaCgocGFydGl0aW9uOiBQYXJ0aXRpb24sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNDb2x1bW4ocGFydGl0aW9uLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19QQVJUSVRJT05fQ09MVU1OX0VYSVNUUycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgcGFydGl0aW9uc1ske2luZGV4fV0ubmFtZWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBwYXJ0aXRpb24ga2V5IGNvbHVtbiBcIiR7cGFydGl0aW9uLm5hbWV9XCIgaXMgbm90IGRlZmluZWQgaW4gY29sdW1uc2AsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kZWZpbml0aW9uLnByaW1hcnlLZXkuaW5jbHVkZXMocGFydGl0aW9uLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgLy8vIFBvc3RncmVzIHJlcXVpcmVzIHRoZSBwcmltYXJ5IGtleSB0byBpbmNsdWRlIGV2ZXJ5IHBhcnRpdGlvbi1rZXlcbiAgICAgICAgICAgICAgICAvLy8gY29sdW1uLCBzbyBhIHBhcnRpdGlvbiBjb2x1bW4gb3V0c2lkZSB0aGUgcHJpbWFyeSBrZXkgaXMgaW52YWxpZC5cbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX1BBUlRJVElPTl9LRVlfSU5fUEsnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHBhcnRpdGlvbnNbJHtpbmRleH1dLm5hbWVgLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgcGFydGl0aW9uIGtleSBjb2x1bW4gXCIke3BhcnRpdGlvbi5uYW1lfVwiIG11c3QgYmUgcGFydCBvZiB0aGUgcHJpbWFyeSBrZXlgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3RyYXRlZ3kgPSBwYXJ0aXRpb24udHlwZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChTVFJBVEVHSUVTLmhhcyhzdHJhdGVneSkpIHtcbiAgICAgICAgICAgICAgICBzdHJhdGVnaWVzLmFkZChzdHJhdGVneSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfUEFSVElUSU9OX1NUUkFURUdZX1ZBTElEJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBwYXJ0aXRpb25zWyR7aW5kZXh9XS50eXBlYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFwiJHtwYXJ0aXRpb24udHlwZX1cIiBpcyBub3QgYSB2YWxpZCBQb3N0Z3JlcyBwYXJ0aXRpb24gc3RyYXRlZ3kgKHJhbmdlLCBsaXN0LCBoYXNoKWAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoc3RyYXRlZ2llcy5zaXplID4gMSkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfUEFSVElUSU9OX1NJTkdMRV9TVFJBVEVHWScsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdwYXJ0aXRpb25zJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgYSBwYXJ0aXRpb25lZCB0YWJsZSB1c2VzIG9uZSBzdHJhdGVneTsgZm91bmQgJHtbXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0cmF0ZWdpZXMsXG4gICAgICAgICAgICAgICAgXS5zb3J0KCkuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUG9zdGdyZXMgZW5naW5lLXNwZWNpZmljIHJ1bGVzOiBpbmRleGVzLCB1bmlxdWUgY29uc3RyYWludHMsIGFuZCBjaGVja1xuICAgICAqIGNvbnN0cmFpbnRzLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgZW5naW5lLXNwZWNpZmljIHZpb2xhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZW5naW5lU3BlY2lmaWNWaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnRoaXMuaW5kZXhWaW9sYXRpb25zKCksXG4gICAgICAgICAgICAuLi50aGlzLnVuaXF1ZUNvbnN0cmFpbnRWaW9sYXRpb25zKCksXG4gICAgICAgICAgICAuLi50aGlzLmNoZWNrQ29uc3RyYWludFZpb2xhdGlvbnMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuZ2VuZXJhdGVkQ29sdW1uVmlvbGF0aW9ucygpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIGdlbmVyYXRlZCBjb2x1bW5zLlxuICAgICAqXG4gICAgICogRW1pdHMgYFBPU1RHUkVTX0dFTkVSQVRFRF9LSU5EX1ZBTElEYCxcbiAgICAgKiBgUE9TVEdSRVNfR0VORVJBVEVEX0VYUFJFU1NJT05fQ09MVU1OX0VYSVNUU2AsXG4gICAgICogYFBPU1RHUkVTX0dFTkVSQVRFRF9OT19TRUxGX1JFRkVSRU5DRWAsXG4gICAgICogYFBPU1RHUkVTX0dFTkVSQVRFRF9OT19HRU5FUkFURURfUkVGRVJFTkNFYCxcbiAgICAgKiBgUE9TVEdSRVNfR0VORVJBVEVEX05PVF9JTl9QQVJUSVRJT05fS0VZYCwgYW5kXG4gICAgICogYFBPU1RHUkVTX1ZJUlRVQUxfR0VORVJBVEVEX05PVF9JTl9QS2AuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBFdmVyeSBnZW5lcmF0ZWQtY29sdW1uIHZpb2xhdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdlbmVyYXRlZENvbHVtblZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZE5hbWVzID0gbmV3IFNldChcbiAgICAgICAgICAgIHRoaXMuZGVmaW5pdGlvbi5jb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uZ2VuZXJhdGVkICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHBhcnRpdGlvbk5hbWVzID0gbmV3IFNldCh0aGlzLmRlZmluaXRpb24ucGFydGl0aW9ucy5tYXAoKHBhcnRpdGlvbikgPT4gcGFydGl0aW9uLm5hbWUpKTtcblxuICAgICAgICB0aGlzLmRlZmluaXRpb24uY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmdlbmVyYXRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBgY29sdW1uc1ske2luZGV4fV1gO1xuXG4gICAgICAgICAgICBpZiAoIUdFTkVSQVRFRF9LSU5EUy5oYXMoY29sdW1uLmdlbmVyYXRlZCkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0dFTkVSQVRFRF9LSU5EX1ZBTElEJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5nZW5lcmF0ZWRgLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZ2VuZXJhdGVkIGtpbmQgXCIke2NvbHVtbi5nZW5lcmF0ZWR9XCIgbXVzdCBiZSBcInN0b3JlZFwiIG9yIFwidmlydHVhbFwiYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIChjb2x1bW4uZXhwcmVzc2lvbkNvbHVtbnMgPz8gW10pLmZvckVhY2goKHJlZmVyZW5jZSwgcmVmZXJlbmNlSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VGaWVsZCA9IGAke2ZpZWxkfS5leHByZXNzaW9uQ29sdW1uc1ske3JlZmVyZW5jZUluZGV4fV1gO1xuICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2UgPT09IGNvbHVtbi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19HRU5FUkFURURfTk9fU0VMRl9SRUZFUkVOQ0UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHJlZmVyZW5jZUZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGdlbmVyYXRlZCBjb2x1bW4gXCIke2NvbHVtbi5uYW1lfVwiIGNhbm5vdCByZWZlcmVuY2UgaXRzZWxmYCxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGFzQ29sdW1uKHJlZmVyZW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0dFTkVSQVRFRF9FWFBSRVNTSU9OX0NPTFVNTl9FWElTVFMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHJlZmVyZW5jZUZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGdlbmVyYXRlZCBjb2x1bW4gXCIke2NvbHVtbi5uYW1lfVwiIHJlZmVyZW5jZXMgXCIke3JlZmVyZW5jZX1cIiwgYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgJ3doaWNoIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChnZW5lcmF0ZWROYW1lcy5oYXMocmVmZXJlbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfR0VORVJBVEVEX05PX0dFTkVSQVRFRF9SRUZFUkVOQ0UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHJlZmVyZW5jZUZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGdlbmVyYXRlZCBjb2x1bW4gXCIke2NvbHVtbi5uYW1lfVwiIGNhbm5vdCByZWZlcmVuY2UgYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYGdlbmVyYXRlZCBjb2x1bW4gXCIke3JlZmVyZW5jZX1cImAsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHBhcnRpdGlvbk5hbWVzLmhhcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0dFTkVSQVRFRF9OT1RfSU5fUEFSVElUSU9OX0tFWScsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uZ2VuZXJhdGVkYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGdlbmVyYXRlZCBjb2x1bW4gXCIke2NvbHVtbi5uYW1lfVwiIGNhbm5vdCBiZSBhIHBhcnRpdGlvbiBrZXlgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5nZW5lcmF0ZWQgPT09ICd2aXJ0dWFsJyAmJiB0aGlzLmRlZmluaXRpb24ucHJpbWFyeUtleS5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX1ZJUlRVQUxfR0VORVJBVEVEX05PVF9JTl9QSycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uZ2VuZXJhdGVkYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiBcIiR7Y29sdW1uLm5hbWV9XCIgY2Fubm90IGJlIHBhcnQgb2YgdGhlIHByaW1hcnkga2V5YCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIFVOSVFVRSBjb25zdHJhaW50cy5cbiAgICAgKlxuICAgICAqIEVtaXRzIGBQT1NUR1JFU19VTklRVUVfTkFNRV9VTklRVUVgLCBgUE9TVEdSRVNfVU5JUVVFX0NPTFVNTl9FWElTVFNgLCBhbmRcbiAgICAgKiBgUE9TVEdSRVNfVU5JUVVFX05PX0RVUExJQ0FURV9DT0xVTU5TYC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IHVuaXF1ZS1jb25zdHJhaW50IHZpb2xhdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHVuaXF1ZUNvbnN0cmFpbnRWaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgdW5pcXVlQ29uc3RyYWludHMsXG4gICAgICAgIH0gPSB0aGlzLmRlZmluaXRpb247XG5cbiAgICAgICAgZm9yIChjb25zdCBkdXBsaWNhdGUgb2YgdGhpcy5maW5kRHVwbGljYXRlcyh1bmlxdWVDb25zdHJhaW50cy5tYXAoKGNvbnN0cmFpbnQpID0+IGNvbnN0cmFpbnQubmFtZSkpKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19VTklRVUVfTkFNRV9VTklRVUUnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAndW5pcXVlQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkdXBsaWNhdGUgdW5pcXVlLWNvbnN0cmFpbnQgbmFtZSBcIiR7ZHVwbGljYXRlfVwiYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVuaXF1ZUNvbnN0cmFpbnRzLmZvckVhY2goKGNvbnN0cmFpbnQ6IFVuaXF1ZUNvbnN0cmFpbnQsIHBvc2l0aW9uOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gYHVuaXF1ZUNvbnN0cmFpbnRzWyR7cG9zaXRpb259XWA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGR1cGxpY2F0ZSBvZiB0aGlzLmZpbmREdXBsaWNhdGVzKGNvbnN0cmFpbnQuY29sdW1ucykpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX1VOSVFVRV9OT19EVVBMSUNBVEVfQ09MVU1OUycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uY29sdW1uc2AsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB1bmlxdWUgY29uc3RyYWludCBcIiR7Y29uc3RyYWludC5uYW1lfVwiIGxpc3RzIGNvbHVtbiBcIiR7ZHVwbGljYXRlfVwiIG1vcmUgdGhhbiBvbmNlYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdHJhaW50LmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNDb2x1bW4oY29sdW1uKSkge1xuICAgICAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfVU5JUVVFX0NPTFVNTl9FWElTVFMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5jb2x1bW5zWyR7Y29sdW1uSW5kZXh9XWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdW5pcXVlLWNvbnN0cmFpbnQgY29sdW1uIFwiJHtjb2x1bW59XCIgaXMgbm90IGRlZmluZWQgaW4gY29sdW1uc2AsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKC4uLnRoaXMudW5pcXVlQ29uc3RyYWludEtleVZpb2xhdGlvbnMoY29uc3RyYWludCwgZmllbGQpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLy8vIFJlbGF0aW9uc2hpcCBydWxlcyBiZXR3ZWVuIGEgdW5pcXVlIGNvbnN0cmFpbnQgYW5kIHRoZSBwcmltYXJ5IGtleSAvXG4gICAgLy8vIHBhcnRpdGlvbiBrZXk6IHJlZHVuZGFuY3kgd2l0aCB0aGUgUEssIGFuZCB0aGUgUG9zdGdyZXMgcnVsZSB0aGF0IGFcbiAgICAvLy8gdW5pcXVlIGNvbnN0cmFpbnQgb24gYSBwYXJ0aXRpb25lZCB0YWJsZSBtdXN0IGluY2x1ZGUgZXZlcnkgcGFydGl0aW9uIGtleS5cbiAgICBwcml2YXRlIHVuaXF1ZUNvbnN0cmFpbnRLZXlWaW9sYXRpb25zKGNvbnN0cmFpbnQ6IFVuaXF1ZUNvbnN0cmFpbnQsIGZpZWxkOiBzdHJpbmcpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG5cbiAgICAgICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMuZGVmaW5pdGlvbi5wcmltYXJ5S2V5O1xuICAgICAgICBjb25zdCBjb2x1bW5TZXQgPSBuZXcgU2V0KGNvbnN0cmFpbnQuY29sdW1ucyk7XG4gICAgICAgIGlmIChwcmltYXJ5S2V5Lmxlbmd0aCA+IDAgJiYgcHJpbWFyeUtleS5sZW5ndGggPT09IGNvbHVtblNldC5zaXplXG4gICAgICAgICAgICAmJiBwcmltYXJ5S2V5LmV2ZXJ5KChjb2x1bW4pID0+IGNvbHVtblNldC5oYXMoY29sdW1uKSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfVU5JUVVFX1JFRFVOREFOVF9XSVRIX1BLJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB1bmlxdWUgY29uc3RyYWludCBcIiR7Y29uc3RyYWludC5uYW1lfVwiIGR1cGxpY2F0ZXMgdGhlIHByaW1hcnkga2V5YCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnRpdGlvbktleXMgPSB0aGlzLmRlZmluaXRpb24ucGFydGl0aW9uc1xuICAgICAgICAgICAgLm1hcCgocGFydGl0aW9uKSA9PiBwYXJ0aXRpb24ubmFtZSlcbiAgICAgICAgICAgIC5maWx0ZXIoKG5hbWUpID0+IHRoaXMuaGFzQ29sdW1uKG5hbWUpKTtcbiAgICAgICAgY29uc3QgbWlzc2luZyA9IHBhcnRpdGlvbktleXMuZmlsdGVyKChuYW1lKSA9PiAhY29uc3RyYWludC5jb2x1bW5zLmluY2x1ZGVzKG5hbWUpKTtcbiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfVU5JUVVFX0lOQ0xVREVTX1BBUlRJVElPTl9LRVlTJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB1bmlxdWUgY29uc3RyYWludCBcIiR7Y29uc3RyYWludC5uYW1lfVwiIG9uIGEgcGFydGl0aW9uZWQgdGFibGUgbXVzdCBpbmNsdWRlIGBcbiAgICAgICAgICAgICAgICAgICAgKyBgZXZlcnkgcGFydGl0aW9uIGtleSBjb2x1bW47IG1pc3Npbmc6ICR7bWlzc2luZy5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBDSEVDSyBjb25zdHJhaW50cy4gT25seSB0aGUgZXhwbGljaXQgcmVmZXJlbmNlZC1jb2x1bW4gbGlzdCBpc1xuICAgICAqIGNoZWNrZWQ7IHRoZSBwcmVkaWNhdGUgaXRzZWxmIHN0YXlzIG9wYXF1ZS5cbiAgICAgKlxuICAgICAqIEVtaXRzIGBQT1NUR1JFU19DSEVDS19OQU1FX1VOSVFVRWAgYW5kIGBQT1NUR1JFU19DSEVDS19DT0xVTU5fRVhJU1RTYC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IGNoZWNrLWNvbnN0cmFpbnQgdmlvbGF0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgY2hlY2tDb25zdHJhaW50VmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNoZWNrQ29uc3RyYWludHMsXG4gICAgICAgIH0gPSB0aGlzLmRlZmluaXRpb247XG5cbiAgICAgICAgZm9yIChjb25zdCBkdXBsaWNhdGUgb2YgdGhpcy5maW5kRHVwbGljYXRlcyhjaGVja0NvbnN0cmFpbnRzLm1hcCgoY29uc3RyYWludCkgPT4gY29uc3RyYWludC5uYW1lKSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0NIRUNLX05BTUVfVU5JUVVFJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NoZWNrQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkdXBsaWNhdGUgY2hlY2stY29uc3RyYWludCBuYW1lIFwiJHtkdXBsaWNhdGV9XCJgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hlY2tDb25zdHJhaW50cy5mb3JFYWNoKChjb25zdHJhaW50OiBDaGVja0NvbnN0cmFpbnQsIHBvc2l0aW9uOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gYGNoZWNrQ29uc3RyYWludHNbJHtwb3NpdGlvbn1dYDtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0NvbHVtbihjb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19DSEVDS19DT0xVTU5fRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uY29sdW1uc1ske2NvbHVtbkluZGV4fV1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGNoZWNrLWNvbnN0cmFpbnQgY29sdW1uIFwiJHtjb2x1bW59XCIgaXMgbm90IGRlZmluZWQgaW4gY29sdW1uc2AsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgc2Vjb25kYXJ5IGluZGV4ZXMuXG4gICAgICpcbiAgICAgKiBFbWl0cyBgUE9TVEdSRVNfSU5ERVhfTkFNRV9VTklRVUVgLCBgUE9TVEdSRVNfSU5ERVhfTUVUSE9EX1ZBTElEYCxcbiAgICAgKiBgUE9TVEdSRVNfSU5ERVhfQ09MVU1OX0VYSVNUU2AsIGBQT1NUR1JFU19JTkRFWF9OT19EVVBMSUNBVEVfQ09MVU1OU2AsXG4gICAgICogYFBPU1RHUkVTX0lOREVYX1VOSVFVRV9CVFJFRV9PTkxZYCwgYFBPU1RHUkVTX0lOREVYX1NPUlRfVkFMSURgLCBhbmRcbiAgICAgKiBgUE9TVEdSRVNfSU5ERVhfTlVMTFNfVkFMSURgLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgaW5kZXgtcmVsYXRlZCB2aW9sYXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbmRleFZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpbmRleGVzLFxuICAgICAgICB9ID0gdGhpcy5kZWZpbml0aW9uO1xuXG4gICAgICAgIGZvciAoY29uc3QgZHVwbGljYXRlIG9mIHRoaXMuZmluZER1cGxpY2F0ZXMoaW5kZXhlcy5tYXAoKGluZGV4KSA9PiBpbmRleC5uYW1lKSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0lOREVYX05BTUVfVU5JUVVFJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2luZGV4ZXMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkdXBsaWNhdGUgaW5kZXggbmFtZSBcIiR7ZHVwbGljYXRlfVwiYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ZXMuZm9yRWFjaCgoaW5kZXgsIHBvc2l0aW9uKSA9PiB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goLi4udGhpcy5zaW5nbGVJbmRleFZpb2xhdGlvbnMoaW5kZXgsIHBvc2l0aW9uKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cblxuICAgIC8vLyBDaGVja3MgZm9yIG9uZSBpbmRleCBlbnRyeS5cbiAgICBwcml2YXRlIHNpbmdsZUluZGV4VmlvbGF0aW9ucyhpbmRleDogSW5kZXgsIHBvc2l0aW9uOiBudW1iZXIpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IGZpZWxkID0gYGluZGV4ZXNbJHtwb3NpdGlvbn1dYDtcblxuICAgICAgICBpZiAoIUlOREVYX01FVEhPRFMuaGFzKGluZGV4Lm1ldGhvZCkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0lOREVYX01FVEhPRF9WQUxJRCcsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5tZXRob2RgLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBpbmRleCBtZXRob2QgXCIke2luZGV4Lm1ldGhvZH1cIiBtdXN0IGJlIG9uZSBvZjogJHtbXG4gICAgICAgICAgICAgICAgICAgIC4uLklOREVYX01FVEhPRFMsXG4gICAgICAgICAgICAgICAgXS5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXgudW5pcXVlID09PSB0cnVlICYmIGluZGV4Lm1ldGhvZCAhPT0gJ2J0cmVlJykge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfSU5ERVhfVU5JUVVFX0JUUkVFX09OTFknLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0udW5pcXVlYCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgYSB1bmlxdWUgaW5kZXggbXVzdCB1c2UgdGhlIGJ0cmVlIG1ldGhvZCwgbm90IFwiJHtpbmRleC5tZXRob2R9XCJgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5TmFtZXMgPSBpbmRleC5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG4gICAgICAgIGZvciAoY29uc3QgZHVwbGljYXRlIG9mIHRoaXMuZmluZER1cGxpY2F0ZXMoa2V5TmFtZXMpKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19JTkRFWF9OT19EVVBMSUNBVEVfQ09MVU1OUycsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5jb2x1bW5zYCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaW5kZXggXCIke2luZGV4Lm5hbWV9XCIgbGlzdHMga2V5IGNvbHVtbiBcIiR7ZHVwbGljYXRlfVwiIG1vcmUgdGhhbiBvbmNlYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZHVwbGljYXRlIG9mIHRoaXMuZmluZER1cGxpY2F0ZXMoaW5kZXguaW5jbHVkZSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0lOREVYX05PX0RVUExJQ0FURV9DT0xVTU5TJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmluY2x1ZGVgLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBpbmRleCBcIiR7aW5kZXgubmFtZX1cIiBsaXN0cyBpbmNsdWRlIGNvbHVtbiBcIiR7ZHVwbGljYXRlfVwiIG1vcmUgdGhhbiBvbmNlYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaW5jbHVkZWQgb2YgaW5kZXguaW5jbHVkZSkge1xuICAgICAgICAgICAgaWYgKGtleU5hbWVzLmluY2x1ZGVzKGluY2x1ZGVkKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfSU5ERVhfTk9fRFVQTElDQVRFX0NPTFVNTlMnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmluY2x1ZGVgLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaW5kZXggXCIke2luZGV4Lm5hbWV9XCIgaW5jbHVkZSBjb2x1bW4gXCIke2luY2x1ZGVkfVwiIGlzIGFsc28gYSBrZXkgY29sdW1uYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbmRleC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNDb2x1bW4oY29sdW1uLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19JTkRFWF9DT0xVTU5fRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5jb2x1bW5zWyR7Y29sdW1uSW5kZXh9XS5uYW1lYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGluZGV4IGtleSBjb2x1bW4gXCIke2NvbHVtbi5uYW1lfVwiIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2x1bW4uc29ydCAhPT0gdW5kZWZpbmVkICYmICFJTkRFWF9TT1JUUy5oYXMoY29sdW1uLnNvcnQpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19JTkRFWF9TT1JUX1ZBTElEJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5jb2x1bW5zWyR7Y29sdW1uSW5kZXh9XS5zb3J0YCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGluZGV4IHNvcnQgXCIke2NvbHVtbi5zb3J0fVwiIG11c3QgYmUgXCJhc2NcIiBvciBcImRlc2NcImAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbHVtbi5udWxscyAhPT0gdW5kZWZpbmVkICYmICFJTkRFWF9OVUxMUy5oYXMoY29sdW1uLm51bGxzKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfSU5ERVhfTlVMTFNfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmNvbHVtbnNbJHtjb2x1bW5JbmRleH1dLm51bGxzYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGluZGV4IG51bGxzIFwiJHtjb2x1bW4ubnVsbHN9XCIgbXVzdCBiZSBcImZpcnN0XCIgb3IgXCJsYXN0XCJgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW5kZXguaW5jbHVkZS5mb3JFYWNoKChpbmNsdWRlZCwgaW5jbHVkZUluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQ29sdW1uKGluY2x1ZGVkKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfSU5ERVhfQ09MVU1OX0VYSVNUUycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uaW5jbHVkZVske2luY2x1ZGVJbmRleH1dYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGluZGV4IGluY2x1ZGUgY29sdW1uIFwiJHtpbmNsdWRlZH1cIiBpcyBub3QgZGVmaW5lZCBpbiBjb2x1bW5zYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flexdataset",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Flexible Dataset Definition (FDD) — validator and tooling for the FDD dataset standard.",
6
6
  "author": "Rodrigo Carvajal",