sonamu 0.7.9 → 0.7.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +6 -2
- package/dist/database/puri.d.ts +17 -1
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +47 -1
- package/dist/database/puri.types.d.ts +28 -0
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +2 -3
- package/dist/database/upsert-builder.d.ts +3 -1
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +19 -4
- package/dist/naite/naite-reporter.d.ts +7 -4
- package/dist/naite/naite-reporter.d.ts.map +1 -1
- package/dist/naite/naite-reporter.js +45 -21
- package/dist/template/implementations/model.template.js +2 -2
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +4 -2
- package/dist/types/types.d.ts +1 -0
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +4 -1
- package/dist/utils/console-util.js +2 -2
- package/package.json +7 -7
- package/src/database/puri.ts +80 -0
- package/src/database/puri.types.ts +33 -2
- package/src/database/upsert-builder.ts +27 -9
- package/src/naite/naite-reporter.ts +51 -20
- package/src/template/implementations/model.template.ts +1 -1
- package/src/template/zod-converter.ts +3 -0
- package/src/types/types.ts +3 -0
- package/src/utils/console-util.ts +1 -1
package/bin/cli.js
CHANGED
|
@@ -18,7 +18,11 @@
|
|
|
18
18
|
*
|
|
19
19
|
* 이 스크립트를 실행시킬 때 넘어온 인자와 환경변수 등은 모두 dist/bin/cli.js에 그대로 전달됩니다.
|
|
20
20
|
*/
|
|
21
|
-
import('../dist/bin/cli.js').catch(() => {
|
|
22
|
-
console.error(
|
|
21
|
+
import('../dist/bin/cli.js').catch((e) => {
|
|
22
|
+
console.error("Sonamu CLI를 실행하는 과정에 문제가 발생하였습니다. 보통은 dist/bin/cli.js 파일이 없는 경우입니다만, 아래 에러 메시지를 자세히 읽어보시면 힌트를 얻으실 수 있을 것입니다.");
|
|
23
|
+
console.error("There was an error while executing Sonamu CLI. Usually it's because dist/bin/cli.js file is not found. Please read the error message below for more information.");
|
|
24
|
+
console.error("=".repeat(80));
|
|
25
|
+
console.error(e);
|
|
26
|
+
|
|
23
27
|
process.exit(1);
|
|
24
28
|
});
|
package/dist/database/puri.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** biome-ignore-all lint/suspicious/noThenProperty: Puri는 thenable 인터페이스를 구현하고 있습니다. */
|
|
2
2
|
/** biome-ignore-all lint/suspicious/noExplicitAny: Puri는 다양한 타입을 사용하고 있습니다. */
|
|
3
3
|
import type { Knex } from "knex";
|
|
4
|
-
import type { AvailableColumns, ColumnKeys, ComparisonOperator, Expand, ExtractColumnType, FulltextColumns, InsertData, InsertResult, LeftJoinedMarker, LeftJoinMarkerFor, NumericColumns, OnConflictAction, ParseSelectObject, ResultAvailableColumns, SelectAllResult, SelectObject, SingleTableValue, SqlExpression, WhereCondition, WhereOperator } from "./puri.types";
|
|
4
|
+
import type { AvailableColumns, ColumnKeys, ComparisonOperator, Expand, ExtractColumnType, FulltextColumns, HighlightOptions, InsertData, InsertResult, LeftJoinedMarker, LeftJoinMarkerFor, NumericColumns, OnConflictAction, ParseSelectObject, ResultAvailableColumns, SelectAllResult, SelectObject, SingleTableValue, SqlExpression, TsQueryConfig, TsQueryOptions, WhereCondition, WhereOperator } from "./puri.types";
|
|
5
5
|
import type { ClearStatements } from "./puri-subset.types";
|
|
6
6
|
export declare class Puri<TSchema, TTables extends Record<string, any>, TResult> {
|
|
7
7
|
knex: Knex;
|
|
@@ -20,6 +20,20 @@ export declare class Puri<TSchema, TTables extends Record<string, any>, TResult>
|
|
|
20
20
|
static rawNumber(sql: string): SqlExpression<"number">;
|
|
21
21
|
static rawBoolean(sql: string): SqlExpression<"boolean">;
|
|
22
22
|
static rawDate(sql: string): SqlExpression<"date">;
|
|
23
|
+
/**
|
|
24
|
+
* FTS 검색어 하이라이팅
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* .select({
|
|
28
|
+
* title: Puri.highlight("posts.title", search),
|
|
29
|
+
* content: Puri.highlight("posts.content", search, {
|
|
30
|
+
* startSel: "<mark>",
|
|
31
|
+
* stopSel: "</mark>",
|
|
32
|
+
* maxFragments: 3,
|
|
33
|
+
* }),
|
|
34
|
+
* })
|
|
35
|
+
*/
|
|
36
|
+
static highlight(column: string, query: string, options?: HighlightOptions): SqlExpression<"string">;
|
|
23
37
|
select<TSelect extends SelectObject<TTables>>(selectObj: TSelect): Puri<TSchema, TTables, ParseSelectObject<TTables, TSelect>>;
|
|
24
38
|
/**
|
|
25
39
|
* 중첩 객체를 flat 객체로 변환
|
|
@@ -70,6 +84,8 @@ export declare class Puri<TSchema, TTables extends Record<string, any>, TResult>
|
|
|
70
84
|
whereIn<TColumn extends AvailableColumns<TTables>>(column: TColumn, values: ExtractColumnType<TTables, TColumn & string>[]): Puri<TSchema, TTables, TResult>;
|
|
71
85
|
whereNotIn<TColumn extends AvailableColumns<TTables>>(column: TColumn, values: ExtractColumnType<TTables, TColumn & string>[]): Puri<TSchema, TTables, TResult>;
|
|
72
86
|
whereMatch<TColumn extends FulltextColumns<TTables>>(column: TColumn, value: string): this;
|
|
87
|
+
whereSearch<TColumn extends AvailableColumns<TTables> | SqlExpression<"string">>(column: TColumn, value: string, options?: TsQueryOptions | TsQueryConfig): this;
|
|
88
|
+
whereRaw(sql: string, bindings?: readonly unknown[]): this;
|
|
73
89
|
whereGroup(callback: (g: WhereGroup<TTables>) => void): this;
|
|
74
90
|
orWhereGroup(callback: (g: WhereGroup<TTables>) => void): this;
|
|
75
91
|
orderBy<TColumn extends ResultAvailableColumns<TTables, TResult>>(column: TColumn, direction: "asc" | "desc"): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puri.d.ts","sourceRoot":"","sources":["../../src/database/puri.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"puri.d.ts","sourceRoot":"","sources":["../../src/database/puri.ts"],"names":[],"mappings":"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"}
|
package/dist/database/puri.js
CHANGED
|
@@ -116,6 +116,33 @@ export class Puri {
|
|
|
116
116
|
_sql: sql
|
|
117
117
|
};
|
|
118
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* FTS 검색어 하이라이팅
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* .select({
|
|
124
|
+
* title: Puri.highlight("posts.title", search),
|
|
125
|
+
* content: Puri.highlight("posts.content", search, {
|
|
126
|
+
* startSel: "<mark>",
|
|
127
|
+
* stopSel: "</mark>",
|
|
128
|
+
* maxFragments: 3,
|
|
129
|
+
* }),
|
|
130
|
+
* })
|
|
131
|
+
*/ static highlight(column, query, options) {
|
|
132
|
+
const { parser = "websearch_to_tsquery", config = "simple", maxWords, minWords, shortWord, highlightAll, maxFragments, startSel, stopSel, fragmentDelimiter } = options ?? {};
|
|
133
|
+
const hlOptionParts = [];
|
|
134
|
+
if (maxWords !== undefined) hlOptionParts.push(`MaxWords=${maxWords}`);
|
|
135
|
+
if (minWords !== undefined) hlOptionParts.push(`MinWords=${minWords}`);
|
|
136
|
+
if (shortWord !== undefined) hlOptionParts.push(`ShortWord=${shortWord}`);
|
|
137
|
+
if (highlightAll !== undefined) hlOptionParts.push(`HighlightAll=${highlightAll}`);
|
|
138
|
+
if (maxFragments !== undefined) hlOptionParts.push(`MaxFragments=${maxFragments}`);
|
|
139
|
+
if (startSel !== undefined) hlOptionParts.push(`StartSel="${startSel}"`);
|
|
140
|
+
if (stopSel !== undefined) hlOptionParts.push(`StopSel="${stopSel}"`);
|
|
141
|
+
if (fragmentDelimiter !== undefined) hlOptionParts.push(`FragmentDelimiter="${fragmentDelimiter}"`);
|
|
142
|
+
const hlOptions = hlOptionParts.length > 0 ? `, '${hlOptionParts.join(", ")}'` : "";
|
|
143
|
+
// TODO: rawBinding 메서드 만들어서 XSS 방지
|
|
144
|
+
return Puri.rawString(`ts_headline('${config}', ${column}, ${parser}('${config}', '${query}')${hlOptions})`);
|
|
145
|
+
}
|
|
119
146
|
// SELECT (overwrite)
|
|
120
147
|
select(selectObj) {
|
|
121
148
|
// 중첩 객체를 flat하게 변환
|
|
@@ -314,6 +341,25 @@ export class Puri {
|
|
|
314
341
|
]);
|
|
315
342
|
return this;
|
|
316
343
|
}
|
|
344
|
+
// WHERE FULLTEXT
|
|
345
|
+
whereSearch(column, value, options) {
|
|
346
|
+
const opts = typeof options === "string" ? {
|
|
347
|
+
config: options
|
|
348
|
+
} : options ?? {};
|
|
349
|
+
const parser = opts.parser ?? "websearch_to_tsquery";
|
|
350
|
+
const config = opts.config ?? "simple";
|
|
351
|
+
const columnExpr = typeof column === "object" && column._type === "sql_expression" ? column._sql : String(column);
|
|
352
|
+
this.knexQuery.whereRaw(`${columnExpr} @@ ${parser}(?, ?)`, [
|
|
353
|
+
config,
|
|
354
|
+
value
|
|
355
|
+
]);
|
|
356
|
+
return this;
|
|
357
|
+
}
|
|
358
|
+
// WHERE RAW
|
|
359
|
+
whereRaw(sql, bindings) {
|
|
360
|
+
this.knexQuery.whereRaw(sql, bindings);
|
|
361
|
+
return this;
|
|
362
|
+
}
|
|
317
363
|
// WHERE 괄호 그룹핑
|
|
318
364
|
whereGroup(callback) {
|
|
319
365
|
this.knexQuery.where((builder)=>{
|
|
@@ -645,4 +691,4 @@ export class JoinClauseGroup {
|
|
|
645
691
|
}
|
|
646
692
|
}
|
|
647
693
|
|
|
648
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub1RoZW5Qcm9wZXJ0eTogUHVyaeuKlCB0aGVuYWJsZSDsnbjthLDtjpjsnbTsiqTrpbwg6rWs7ZiE7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cbi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp64qUIOuLpOyWke2VnCDtg4DsnoXsnYQg7IKs7Jqp7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cblxuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB0eXBlIHtcbiAgQXZhaWxhYmxlQ29sdW1ucyxcbiAgQ29sdW1uS2V5cyxcbiAgQ29tcGFyaXNvbk9wZXJhdG9yLFxuICBFeHBhbmQsXG4gIEV4dHJhY3RDb2x1bW5UeXBlLFxuICBGdWxsdGV4dENvbHVtbnMsXG4gIEluc2VydERhdGEsXG4gIEluc2VydFJlc3VsdCxcbiAgTGVmdEpvaW5lZE1hcmtlcixcbiAgTGVmdEpvaW5NYXJrZXJGb3IsXG4gIE51bWVyaWNDb2x1bW5zLFxuICBPbkNvbmZsaWN0QWN0aW9uLFxuICBQYXJzZVNlbGVjdE9iamVjdCxcbiAgUmVzdWx0QXZhaWxhYmxlQ29sdW1ucyxcbiAgU2VsZWN0QWxsUmVzdWx0LFxuICBTZWxlY3RPYmplY3QsXG4gIFNpbmdsZVRhYmxlVmFsdWUsXG4gIFNxbEV4cHJlc3Npb24sXG4gIFdoZXJlQ29uZGl0aW9uLFxuICBXaGVyZU9wZXJhdG9yLFxufSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IENsZWFyU3RhdGVtZW50cyB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUUmVzdWx0PiB7XG4gIHByaXZhdGUga25leFF1ZXJ5OiBLbmV4LlF1ZXJ5QnVpbGRlcjtcblxuICAvLyDsg53shLHsnpAg7Iuc6re464uI7LKY65OkXG4gIGNvbnN0cnVjdG9yKGtuZXg6IEtuZXgsIHRhYmxlTmFtZTogc3RyaW5nKTtcbiAgY29uc3RydWN0b3Ioa25leDogS25leCwgdGFibGVTcGVjOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBQdXJpPFRTY2hlbWEsIGFueSwgYW55Pj4pO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMga25leDogS25leCxcbiAgICB0YWJsZU5hbWVPclNwZWM6IGFueSxcbiAgKSB7XG4gICAgaWYgKHR5cGVvZiB0YWJsZU5hbWVPclNwZWMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIENhc2U6IG5ldyBQdXJpKGtuZXgsIFwidXNlcnNcIilcbiAgICAgIHRoaXMua25leFF1ZXJ5ID0gdGhpcy5rbmV4KHRhYmxlTmFtZU9yU3BlYykuZnJvbSh0YWJsZU5hbWVPclNwZWMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhYmxlTmFtZU9yU3BlYyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRhYmxlTmFtZU9yU3BlYyk7XG4gICAgICBpZiAoZW50cmllcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFibGUgc3BlYyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgZW50cnlcIik7XG4gICAgICB9XG4gICAgICBhc3NlcnQoZW50cmllc1swXSk7XG4gICAgICBjb25zdCBbYWxpYXMsIHNwZWNdID0gZW50cmllc1swXTtcbiAgICAgIGlmICh0eXBlb2Ygc3BlYyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeSA9IHRoaXMua25leChzcGVjKS5mcm9tKHsgW2FsaWFzXTogc3BlYyB9KTtcbiAgICAgIH0gZWxzZSBpZiAoc3BlYyBpbnN0YW5jZW9mIFB1cmkpIHtcbiAgICAgICAgY29uc3Qgc3VicXVlcnlCdWlsZGVyID0gc3BlYy5yYXdRdWVyeSgpO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeSA9IHRoaXMua25leC5mcm9tKHN1YnF1ZXJ5QnVpbGRlci5hcyhhbGlhcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0YWJsZSBzcGVjaWZpY2F0aW9uXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIHNwZWNpZmljYXRpb25cIik7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljIFNRTCBoZWxwZXIgZnVuY3Rpb25zIGZvciBTRUxFQ1RcbiAgc3RhdGljIGNvdW50KGNvbHVtbjogc3RyaW5nID0gXCIqXCIpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgQ09VTlQoJHtjb2x1bW59KTo6aW50ZWdlcmAsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgc3VtKGNvbHVtbjogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYFNVTSgke2NvbHVtbn0pYCxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBhdmcoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgQVZHKCR7Y29sdW1ufSlgLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIG1heChjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBNQVgoJHtjb2x1bW59KWAsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgbWluKGNvbHVtbjogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYE1JTigke2NvbHVtbn0pYCxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBjb25jYXQoLi4uYXJnczogc3RyaW5nW10pOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBgQ09OQ0FUKCR7YXJncy5qb2luKFwiLCBcIil9KWAsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgdXBwZXIoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBgVVBQRVIoJHtjb2x1bW59KWAsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgbG93ZXIoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBgTE9XRVIoJHtjb2x1bW59KWAsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJhdyBmdW5jdGlvbnMgZm9yIFNFTEVDVFxuICBzdGF0aWMgcmF3U3RyaW5nKHNxbDogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB7XG4gICAgcmV0dXJuIHsgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIiwgX3JldHVybjogXCJzdHJpbmdcIiwgX3NxbDogc3FsIH07XG4gIH1cbiAgc3RhdGljIHJhd051bWJlcihzcWw6IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7IF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsIF9yZXR1cm46IFwibnVtYmVyXCIsIF9zcWw6IHNxbCB9O1xuICB9XG4gIHN0YXRpYyByYXdCb29sZWFuKHNxbDogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcImJvb2xlYW5cIj4ge1xuICAgIHJldHVybiB7IF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsIF9yZXR1cm46IFwiYm9vbGVhblwiLCBfc3FsOiBzcWwgfTtcbiAgfVxuICBzdGF0aWMgcmF3RGF0ZShzcWw6IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJkYXRlXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcImRhdGVcIiwgX3NxbDogc3FsIH07XG4gIH1cblxuICAvLyBTRUxFQ1QgKG92ZXJ3cml0ZSlcbiAgc2VsZWN0PFRTZWxlY3QgZXh0ZW5kcyBTZWxlY3RPYmplY3Q8VFRhYmxlcz4+KFxuICAgIHNlbGVjdE9iajogVFNlbGVjdCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBQYXJzZVNlbGVjdE9iamVjdDxUVGFibGVzLCBUU2VsZWN0Pj4ge1xuICAgIC8vIOykkeyyqSDqsJ3ssrTrpbwgZmxhdO2VmOqyjCDrs4DtmZhcbiAgICBjb25zdCBmbGF0U2VsZWN0ID0gdGhpcy5mbGF0dGVuU2VsZWN0KHNlbGVjdE9iaik7XG5cbiAgICBjb25zdCBzZWxlY3RDbGF1c2VzOiAoc3RyaW5nIHwgS25leC5SYXcpW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBjb2x1bW5PckZ1bmN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhmbGF0U2VsZWN0KSkge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5PckZ1bmN0aW9uID09PSBcIm9iamVjdFwiICYmIGNvbHVtbk9yRnVuY3Rpb24uX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIikge1xuICAgICAgICAvLyBTUUwg7ZWo7IiY7J24IOqyveyasFxuICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2godGhpcy5rbmV4LnJhdyhgJHtjb2x1bW5PckZ1bmN0aW9uLl9zcWx9IGFzICR7YWxpYXN9YCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g7J2867CYIOy7rOufvOyduCDqsr3smrBcbiAgICAgICAgY29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbk9yRnVuY3Rpb24gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoYWxpYXMgPT09IGNvbHVtblBhdGgpIHtcbiAgICAgICAgICAvLyBhbGlhc+yZgCDsu6zrn7zrqoXsnbQg6rCZ7Jy866m0IGFsaWFzIOyDneuetVxuICAgICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChjb2x1bW5QYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBhbGlhcyDsp4DsoJVcbiAgICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goYCR7Y29sdW1uUGF0aH0gYXMgJHthbGlhc31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChzZWxlY3RDbGF1c2VzKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICog7KSR7LKpIOqwneyytOulvCBmbGF0IOqwneyytOuhnCDrs4DtmZhcbiAgICog7JiIOiB7IHBhcmVudDogeyBpZDogXCJwYXJlbnQuaWRcIiwgbmFtZTogXCJwYXJlbnQubmFtZVwiIH0gfVxuICAgKiAgIOKGkiB7IHBhcmVudF9faWQ6IFwicGFyZW50LmlkXCIsIHBhcmVudF9fbmFtZTogXCJwYXJlbnQubmFtZVwiIH1cbiAgICovXG4gIHByaXZhdGUgZmxhdHRlblNlbGVjdChzZWxlY3RPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sIHByZWZpeCA9IFwiXCIpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBmbGF0U2VsZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzZWxlY3RPYmopKSB7XG4gICAgICBjb25zdCBmdWxsS2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fV9fJHtrZXl9YCA6IGtleTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhKFwiX3R5cGVcIiBpbiB2YWx1ZSkpIHtcbiAgICAgICAgLy8g7KSR7LKpIOqwneyytOyduCDqsr3smrAgLSDsnqzqt4Ag7LKY66asXG4gICAgICAgIGNvbnN0IG5lc3RlZCA9IHRoaXMuZmxhdHRlblNlbGVjdCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmxhdFNlbGVjdCwgbmVzdGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOydvOuwmCDqsJLsnbgg6rK97JqwICjsu6zrn7wg6rK966GcIOuYkOuKlCBTcWxFeHByZXNzaW9uKVxuICAgICAgICBmbGF0U2VsZWN0W2Z1bGxLZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXRTZWxlY3Q7XG4gIH1cblxuICAvLyBTRUxFQ1QgKHNlbGVjdOuKlCBvdmVyd3JpdGUsIGFwcGVuZFNlbGVjdOuKlCBhcHBlbmQpXG4gIGFwcGVuZFNlbGVjdDxUU2VsZWN0IGV4dGVuZHMgU2VsZWN0T2JqZWN0PFRUYWJsZXM+PihcbiAgICBzZWxlY3RPYmo6IFRTZWxlY3QsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdCAmIFBhcnNlU2VsZWN0T2JqZWN0PFRUYWJsZXMsIFRTZWxlY3Q+PiB7XG4gICAgLy8g7KSR7LKpIOqwneyytOulvCBmbGF07ZWY6rKMIOuzgO2ZmFxuICAgIGNvbnN0IGZsYXRTZWxlY3QgPSB0aGlzLmZsYXR0ZW5TZWxlY3Qoc2VsZWN0T2JqKTtcblxuICAgIGNvbnN0IHNlbGVjdENsYXVzZXM6IChzdHJpbmcgfCBLbmV4LlJhdylbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIGNvbHVtbk9yRnVuY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKGZsYXRTZWxlY3QpKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbk9yRnVuY3Rpb24gPT09IFwib2JqZWN0XCIgJiYgY29sdW1uT3JGdW5jdGlvbi5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiKSB7XG4gICAgICAgIHNlbGVjdENsYXVzZXMucHVzaCh0aGlzLmtuZXgucmF3KGAke2NvbHVtbk9yRnVuY3Rpb24uX3NxbH0gYXMgJHthbGlhc31gKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uT3JGdW5jdGlvbiBhcyBzdHJpbmc7XG4gICAgICAgIGlmIChhbGlhcyA9PT0gY29sdW1uUGF0aCkge1xuICAgICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChjb2x1bW5QYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goYCR7Y29sdW1uUGF0aH0gYXMgJHthbGlhc31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChzZWxlY3RDbGF1c2VzKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvLyBTRUxFQ1QgKlxuICBzZWxlY3RBbGwoKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBTZWxlY3RBbGxSZXN1bHQ8VFRhYmxlcz4+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3QoXCIqXCIpO1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIENMRUFSXG4gIGNsZWFyKHN0YXRlbWVudDogQ2xlYXJTdGF0ZW1lbnRzKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkuY2xlYXIoc3RhdGVtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGtuZXjsl5Ag7JeG7Ja07IScIOyngeygkSDqtaztmITtlahcbiAgY2xlYXJKb2luKGFsaWFzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAodGhpcy5rbmV4UXVlcnkgYXMgYW55KS5fc3RhdGVtZW50cyA9ICh0aGlzLmtuZXhRdWVyeSBhcyBhbnkpLl9zdGF0ZW1lbnRzLmZpbHRlcigoczogYW55KSA9PiB7XG4gICAgICBpZiAoXCJqb2luVHlwZVwiIGluIHMpIHtcbiAgICAgICAgY29uc3QgW19hbGlhcywgX3RhYmxlXSA9IE9iamVjdC5lbnRyaWVzKHMudGFibGUpWzBdO1xuICAgICAgICByZXR1cm4gX2FsaWFzICE9PSBhbGlhcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gSk9JTjog7ISc67iM7L+866asICsgQWxpYXNcbiAgam9pbjxUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLCBUU3ViUmVzdWx0PihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFB1cmk8VFNjaGVtYSwgYW55LCBUU3ViUmVzdWx0PiB9LFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4sXG4gICAgcmlnaHQ6IGAke1RKb2luQWxpYXN9LiR7Q29sdW1uS2V5czxUU3ViUmVzdWx0Pn1gLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU3ViUmVzdWx0PiwgLy8g7ISc67iM7L+866as7J2YIFRSZXN1bHRcbiAgICBUUmVzdWx0XG4gID47XG4gIC8vIEpPSU46IO2FjOydtOu4lCArIEFsaWFzXG4gIGpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsIFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogVEpvaW5UYWJsZSB9LFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4sXG4gICAgcmlnaHQ6IGAke1RKb2luQWxpYXN9LiR7Q29sdW1uS2V5czxUU2NoZW1hW1RKb2luVGFibGVdPn1gLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdPiwgLy8gVFRhYmxlcyDtmZXsnqUhXG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBKT0lOOiDthYzsnbTruJTrqoVcbiAgam9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4sXG4gICAgcmlnaHQ6IGAke1RKb2luVGFibGUgJiBzdHJpbmd9LiR7Q29sdW1uS2V5czxUU2NoZW1hW1RKb2luVGFibGVdPn1gLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgVFRhYmxlcyAmIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPiwgLy8g7YWM7J2067iU66qF7J20IO2CpFxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gSk9JTjog7ISc67iM7L+866asICsgQWxpYXMgKyDsvZzrsLFcbiAgam9pbjxUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLCBUU3ViUmVzdWx0PihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFB1cmk8VFNjaGVtYSwgYW55LCBUU3ViUmVzdWx0PiB9LFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pbkFsaWFzLCBUU3ViUmVzdWx0Pj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU3ViUmVzdWx0PiwgVFJlc3VsdD47XG4gIC8vIEpPSU46IO2FjOydtOu4lCArIEFsaWFzICsg7L2c67CxXG4gIGpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsIFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogVEpvaW5UYWJsZSB9LFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdPiwgVFJlc3VsdD47XG4gIC8vIEpPSU46IO2FjOydtOu4lOuqhSArIOy9nOuwsVxuICBqb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hPihcbiAgICB0YWJsZU5hbWU6IFRKb2luVGFibGUsXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luVGFibGUsIFRTY2hlbWFbVEpvaW5UYWJsZV0+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luVGFibGUsIFRTY2hlbWFbVEpvaW5UYWJsZV0+LCBUUmVzdWx0PjtcbiAgLy8gSk9JTiDsi6TsoJwg6rWs7ZiEXG4gIGpvaW4odGFibGVOYW1lT3JTcGVjOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fX2NvbW1vbkpvaW4oXCJqb2luXCIsIHRhYmxlTmFtZU9yU3BlYywgLi4uYXJncyk7XG4gIH1cblxuICAvLyBMRUZUIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzXG4gIGxlZnRKb2luPFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmcsIFRTdWJSZXN1bHQ+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogUHVyaTxUU2NoZW1hLCBhbnksIFRTdWJSZXN1bHQ+IH0sXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPixcbiAgICByaWdodDogYCR7VEpvaW5BbGlhc30uJHtDb2x1bW5LZXlzPFRTdWJSZXN1bHQ+fWAsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU3ViUmVzdWx0ICYgTGVmdEpvaW5lZE1hcmtlcj4sIFRSZXN1bHQ+OyAvLyDshJzruIzsv7zrpqzsnZggVFJlc3VsdFxuICAvLyBMRUZUIEpPSU46IO2FjOydtOu4lCArIEFsaWFzXG4gIC8vIEZLIG51bGxhYmxlIOyXrOu2gOyXkCDrlLDrnbwg7J6Q64+Z7Jy866GcIExlZnRKb2luZWRNYXJrZXIg6rKw7KCVXG4gIGxlZnRKb2luPFxuICAgIFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLFxuICAgIFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmcsXG4gICAgVExlZnQgZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICA+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogVEpvaW5UYWJsZSB9LFxuICAgIGxlZnQ6IFRMZWZ0LFxuICAgIHJpZ2h0OiBgJHtUSm9pbkFsaWFzfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXSAmIExlZnRKb2luTWFya2VyRm9yPFRUYWJsZXMsIFRMZWZ0Pj4sXG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBMRUZUIEpPSU46IO2FjOydtOu4lOuqhVxuICBsZWZ0Sm9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSwgVExlZnQgZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICB0YWJsZU5hbWU6IFRKb2luVGFibGUsXG4gICAgbGVmdDogVExlZnQsXG4gICAgcmlnaHQ6IGAke1RKb2luVGFibGUgJiBzdHJpbmd9LiR7Q29sdW1uS2V5czxUU2NoZW1hW1RKb2luVGFibGVdPn1gLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgVFRhYmxlcyAmIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdICYgTGVmdEpvaW5NYXJrZXJGb3I8VFRhYmxlcywgVExlZnQ+PixcbiAgICBUUmVzdWx0XG4gID47XG4gIC8vIExFRlQgSk9JTjog7ISc67iM7L+866asICsgQWxpYXMgKyDsvZzrsLFcbiAgbGVmdEpvaW48VEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZywgVFN1YlJlc3VsdD4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD4gfSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdCAmIExlZnRKb2luZWRNYXJrZXI+LCBUUmVzdWx0PjtcbiAgLy8gTEVGVCBKT0lOOiDthYzsnbTruJQgKyBBbGlhcyArIOy9nOuwsVxuICBsZWZ0Sm9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSwgVEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZz4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBUSm9pblRhYmxlIH0sXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0gJiBMZWZ0Sm9pbmVkTWFya2VyPiwgVFJlc3VsdD47XG4gIC8vIExFRlQgSk9JTjog7YWM7J2067iU66qFICsg7L2c67CxXG4gIGxlZnRKb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hPihcbiAgICB0YWJsZU5hbWU6IFRKb2luVGFibGUsXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luVGFibGUsIFRTY2hlbWFbVEpvaW5UYWJsZV0+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luVGFibGUsIFRTY2hlbWFbVEpvaW5UYWJsZV0gJiBMZWZ0Sm9pbmVkTWFya2VyPiwgVFJlc3VsdD47XG4gIC8vIExFRlQgSk9JTiDsi6TsoJwg6rWs7ZiEXG4gIGxlZnRKb2luKHRhYmxlTmFtZU9yU3BlYzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX19jb21tb25Kb2luKFwibGVmdEpvaW5cIiwgdGFibGVOYW1lT3JTcGVjLCAuLi5hcmdzKTtcbiAgfVxuXG4gIF9fY29tbW9uSm9pbihqb2luVHlwZTogXCJqb2luXCIgfCBcImxlZnRKb2luXCIsIHRhYmxlTmFtZU9yU3BlYzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgIGlmICh0eXBlb2YgdGFibGVOYW1lT3JTcGVjID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBDYXNlIDE6IGpvaW4oXCJwb3N0c1wiLCAuLi4pXG4gICAgICBjb25zdCB0YWJsZU5hbWUgPSB0YWJsZU5hbWVPclNwZWM7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIC8vIGpvaW4oXCJwb3N0c1wiLCBjYWxsYmFjaylcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBhcmdzWzBdO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0odGFibGVOYW1lLCAoam9pbkNsYXVzZSkgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBKb2luQ2xhdXNlR3JvdXAoam9pbkNsYXVzZSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGpvaW4oXCJwb3N0c1wiLCBsZWZ0LCByaWdodClcbiAgICAgICAgY29uc3QgW2xlZnQsIHJpZ2h0XSA9IGFyZ3M7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXSh0YWJsZU5hbWUsIGxlZnQsIHJpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0YWJsZU5hbWVPclNwZWMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIC8vIENhc2UgMjogam9pbih7IGFsaWFzOiBcInRhYmxlXCIgfSwgLi4uKSBvciBqb2luKHsgYWxpYXM6IHN1YnF1ZXJ5IH0sIC4uLilcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0YWJsZU5hbWVPclNwZWMpO1xuICAgICAgaWYgKGVudHJpZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhYmxlIHNwZWMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIGVudHJ5XCIpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0KGVudHJpZXNbMF0pO1xuICAgICAgY29uc3QgW1thbGlhcywgc3BlY11dID0gZW50cmllcztcblxuICAgICAgaWYgKHR5cGVvZiBzcGVjID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIO2FjOydtOu4lDogam9pbih7IHA6IFwicG9zdHNcIiB9LCAuLi4pXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgLy8gQ2FsbGJhY2tcbiAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3NbMF07XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHsgW2FsaWFzXTogc3BlYyB9LCAoam9pbkNsYXVzZSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEpvaW5DbGF1c2VHcm91cChqb2luQ2xhdXNlKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2ltcGxlXG4gICAgICAgICAgY29uc3QgW2xlZnQsIHJpZ2h0XSA9IGFyZ3M7XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHsgW2FsaWFzXTogc3BlYyB9LCBsZWZ0LCByaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3BlYyBpbnN0YW5jZW9mIFB1cmkpIHtcbiAgICAgICAgLy8g7ISc67iM7L+866asOiBqb2luKHsgc3E6IHN1YnF1ZXJ5IH0sIC4uLilcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAvLyBDYWxsYmFja1xuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJnc1swXTtcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0oc3BlYy5yYXdRdWVyeSgpLmFzKGFsaWFzKSwgKGpvaW5DbGF1c2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBKb2luQ2xhdXNlR3JvdXAoam9pbkNsYXVzZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpbXBsZVxuICAgICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSBhcmdzO1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXShzcGVjLnJhd1F1ZXJ5KCkuYXMoYWxpYXMpLCBsZWZ0LCByaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdGFibGUgc3BlY2lmaWNhdGlvblwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHNcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBXSEVSRTog6rCd7LK0IC0g7IKs7JqpOiAud2hlcmUoeyBcInUuaWRcIjogMSwgXCJ1LnN0YXR1c1wiOiBcImFjdGl2ZVwiIH0pXG4gIHdoZXJlKGNvbmRpdGlvbnM6IFdoZXJlQ29uZGl0aW9uPFRUYWJsZXM+KTogdGhpcztcbiAgLy8gV0hFUkU6IOy7rOufvCAtIOyCrOyaqTogLndoZXJlKFwidS5pZFwiLCAxKSwgLndoZXJlKFwidS5pZFwiLCBudWxsKVxuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gV0hFUkU6IOy7rOufvCAtIOyCrOyaqTogLndoZXJlKFwidS5pZFwiLCBcIj5cIiwgMTApLCAud2hlcmUoXCJ1LmlkXCIsIFwiIT1cIiwgbnVsbClcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yIHwgXCJsaWtlXCIgfCBcIm5vdCBsaWtlXCIsXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBXSEVSRTogU1FMIO2RnO2YhOyLnSAtIOyCrOyaqTogLndoZXJlKHB1cmkucmF3KFwiQ09OQ0FUKHUubmFtZSwgdS5lbWFpbClcIiksIFwibGlrZVwiLCBcIiV0ZXN0JVwiKVxuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgS25leC5SYXc+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yIHwgXCJsaWtlXCIgfCBcIm5vdCBsaWtlXCIsXG4gICAgdmFsdWU6IGFueSxcbiAgKTogdGhpcztcbiAgLy8gV0hFUkU6IOy7rOufvCAtIOyCrOyaqTogLndoZXJlKFwidS5pZFwiLCBcImxpa2VcIiwgXCIldGVzdCVcIilcbiAgd2hlcmUoLi4uYXJnczogW2NvbHVtbk9yQ29uZGl0aW9uczogYW55LCBvcGVyYXRvck9yVmFsdWU/OiBhbnksIHZhbHVlPzogYW55XSk6IHRoaXMge1xuICAgIGNvbnN0IFtjb2x1bW5PckNvbmRpdGlvbnMsIG9wZXJhdG9yT3JWYWx1ZSwgdmFsdWVdID0gYXJncztcbiAgICBpZiAodHlwZW9mIGNvbHVtbk9yQ29uZGl0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKG9wZXJhdG9yT3JWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU51bGwoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZShjb2x1bW5PckNvbmRpdGlvbnMsIG9wZXJhdG9yT3JWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBpZiAob3BlcmF0b3JPclZhbHVlID09PSBcIiE9XCIpIHtcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU5vdE51bGwoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvck9yVmFsdWUgPT09IFwiPVwiKSB7XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmVOdWxsKGNvbHVtbk9yQ29uZGl0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKGNvbHVtbk9yQ29uZGl0aW9ucywgb3BlcmF0b3JPclZhbHVlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKGNvbHVtbk9yQ29uZGl0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUgSU5cbiAgd2hlcmVJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVJbihjb2x1bW4sIHZhbHVlcyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8gV0hFUkUgTk9UIElOXG4gIHdoZXJlTm90SW48VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZXM6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdD4ge1xuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTm90SW4oY29sdW1uLCB2YWx1ZXMpO1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIFdIRVJFIE1BVENIXG4gIHdoZXJlTWF0Y2g8VENvbHVtbiBleHRlbmRzIEZ1bGx0ZXh0Q29sdW1uczxUVGFibGVzPj4oY29sdW1uOiBUQ29sdW1uLCB2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYE1BVENIICgke1N0cmluZyhjb2x1bW4pfSkgQUdBSU5TVCAoPylgLCBbdmFsdWVdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIOq0hO2YuCDqt7jro7ntlZFcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZSgoYnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihidWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKGdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvcldoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkub3JXaGVyZSgoYnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihidWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKGdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9SREVSIEJZXG4gIG9yZGVyQnk8VENvbHVtbiBleHRlbmRzIFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcywgVFJlc3VsdD4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBkaXJlY3Rpb246IFwiYXNjXCIgfCBcImRlc2NcIixcbiAgKTogdGhpcztcbiAgb3JkZXJCeShjb2x1bW46IHN0cmluZywgZGlyZWN0aW9uOiBcImFzY1wiIHwgXCJkZXNjXCIgPSBcImFzY1wiKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkub3JkZXJCeShjb2x1bW4sIGRpcmVjdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyDquLDrs7gg7L+866asIOuplOyEnOuTnOuTpFxuICBsaW1pdChjb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgaWYgKGNvdW50IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsaW1pdDogbXVzdCBiZSA+PSAwXCIpO1xuICAgIH1cbiAgICB0aGlzLmtuZXhRdWVyeS5saW1pdChjb3VudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvZmZzZXQoY291bnQ6IG51bWJlcik6IHRoaXMge1xuICAgIGlmIChjb3VudCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgb2Zmc2V0OiBtdXN0IGJlID49IDBcIik7XG4gICAgfVxuICAgIHRoaXMua25leFF1ZXJ5Lm9mZnNldChjb3VudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBHUk9VUCBCWVxuICBncm91cEJ5PFRDb2x1bW5zIGV4dGVuZHMgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzLCBUUmVzdWx0Pj4oLi4uY29sdW1uczogVENvbHVtbnNbXSk6IHRoaXM7XG4gIGdyb3VwQnkoLi4uY29sdW1uczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS5ncm91cEJ5KC4uLihjb2x1bW5zIGFzIHN0cmluZ1tdKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBIQVZJTkdcbiAgaGF2aW5nKGNvbmRpdGlvbjogc3RyaW5nKTogdGhpcztcbiAgaGF2aW5nPFRDb2x1bW4gZXh0ZW5kcyBSZXN1bHRBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXMsIFRSZXN1bHQ+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICB2YWx1ZTogYW55LFxuICApOiB0aGlzO1xuICAvLyBIQVZJTkcg6rWs7ZiEXG4gIGhhdmluZyguLi5jb25kaXRpb25zOiBhbnlbXSk6IHRoaXMge1xuICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gaGF2aW5nKFwiQ09VTlQoKikgPiAxMFwiKVxuICAgICAgdGhpcy5rbmV4UXVlcnkuaGF2aW5nKHRoaXMua25leC5yYXcoY29uZGl0aW9uc1swXSkpO1xuICAgIH0gZWxzZSBpZiAoY29uZGl0aW9ucy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8vIGhhdmluZyhcImNvdW50XCIsIFwiPlwiLCAxMClcbiAgICAgIHRoaXMua25leFF1ZXJ5LmhhdmluZyhcbiAgICAgICAgdGhpcy5rbmV4LnJhdyhjb25kaXRpb25zWzBdKSxcbiAgICAgICAgY29uZGl0aW9uc1sxXSxcbiAgICAgICAgdGhpcy5rbmV4LnJhdyhjb25kaXRpb25zWzJdKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGF2aW5nIGFyZ3VtZW50c1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyDsi6Ttlokg66mU7ISc65Oc65OkIC0gdGhlbmFibGUg6rWs7ZiEXG4gIHRoZW48VFJlc3VsdDEgPSBFeHBhbmQ8VFJlc3VsdD5bXSwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBFeHBhbmQ8VFJlc3VsdD5bXSkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4pIHwgbnVsbCxcbiAgICBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbCxcbiAgKTogUHJvbWlzZTxUUmVzdWx0MSB8IFRSZXN1bHQyPiB7XG4gICAgTmFpdGUudChcInB1cmk6ZXhlY3V0ZWQtcXVlcnlcIiwgdGhpcy50b1F1ZXJ5KCkpO1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS50aGVuKG9uZnVsZmlsbGVkIGFzIGFueSwgb25yZWplY3RlZCk7XG4gIH1cbiAgY2F0Y2g8VFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc3VsdCB8IFRSZXN1bHQyPiB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LmNhdGNoKG9ucmVqZWN0ZWQpO1xuICB9XG4gIGZpbmFsbHkob25maW5hbGx5PzogKCgpID0+IHZvaWQpIHwgbnVsbCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS5maW5hbGx5KG9uZmluYWxseSk7XG4gIH1cblxuICAvLyDtlZjrgpjrp4wg7L+866asXG4gIGZpcnN0KCk6IFJlc29sdmVkUHVyaTxFeHBhbmQ8VFJlc3VsdD4sIG5ldmVyPiB7XG4gICAgdGhpcy5rbmV4UXVlcnkuZmlyc3QoKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8vIOy/vOumrO2VnCDroIjsvZTrk5zsl5DshJwg7Yq57KCVIOy7rOufvOunjCDstpTstpztlZwg67Cw7Je0IOumrO2EtFxuICBwbHVjazxUQ29sdW1uIGV4dGVuZHMga2V5b2YgVFJlc3VsdCB8IFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcywgVFJlc3VsdD4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgKTogUmVzb2x2ZWRQdXJpPFxuICAgIFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUUmVzdWx0XG4gICAgICA/IFRSZXN1bHRbVENvbHVtbl1bXVxuICAgICAgOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICAgIG5ldmVyXG4gID4ge1xuICAgIHRoaXMua25leFF1ZXJ5LnBsdWNrKGNvbHVtbiBhcyBzdHJpbmcpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8gSU5TRVJUXG4gIGluc2VydChcbiAgICBkYXRhOiBJbnNlcnREYXRhPFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+LFxuICApOiBSZXNvbHZlZFB1cmk8SW5zZXJ0UmVzdWx0LCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkuaW5zZXJ0KGRhdGEpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8gVVBEQVRFXG4gIHVwZGF0ZShkYXRhOiBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPik6IFJlc29sdmVkUHVyaTxudW1iZXIsIFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS51cGRhdGUoZGF0YSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyBJbmNyZW1lbnRcbiAgaW5jcmVtZW50PFRDb2x1bW4gZXh0ZW5kcyBOdW1lcmljQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBudW1iZXIsXG4gICk6IFJlc29sdmVkUHVyaTxudW1iZXIsIFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+IHtcbiAgICBpZiAodmFsdWUgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jcmVtZW50IHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcIik7XG4gICAgfVxuICAgIHRoaXMua25leFF1ZXJ5LmluY3JlbWVudChjb2x1bW4sIHZhbHVlKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuICAvLyBEZWNyZW1lbnRcbiAgZGVjcmVtZW50PFRDb2x1bW4gZXh0ZW5kcyBOdW1lcmljQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBudW1iZXIsXG4gICk6IFJlc29sdmVkUHVyaTxudW1iZXIsIFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+IHtcbiAgICBpZiAodmFsdWUgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVjcmVtZW50IHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcIik7XG4gICAgfVxuICAgIHRoaXMua25leFF1ZXJ5LmRlY3JlbWVudChjb2x1bW4sIHZhbHVlKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8vIERFTEVURVxuICBkZWxldGUoKTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIHRoaXMua25leFF1ZXJ5LmRlbGV0ZSgpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8g7ZmV7J24IOy/vOumrCDrpqzthLRcbiAgdG9RdWVyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS50b1F1ZXJ5KCk7XG4gIH1cblxuICAvLyDsv7zrpqwg65SU67KE6rmFIOuhnOq3uCDstpzroKVcbiAgZGVidWcoKTogdGhpcyB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsuY3lhbihcIltQdXJpIERlYnVnXVwiKX0gJHtjaGFsay55ZWxsb3codGhpcy50b1F1ZXJ5KCkpfWApO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY2xvbmUoKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0PiB7XG4gICAgLy8gJ2R1YWwn7J2AIOuNlOuvuCDthYzsnbTruJTsnbTrqbAsIOuwlOuhnCDslYTrnpgg7KSE7JeQ7IScIGtuZXhRdWVyeeqwgCDrja7slrTslIzsm4zsp5Hri4jri6QuXG4gICAgY29uc3QgbmV3UHVyaSA9IG5ldyBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFRSZXN1bHQ+KHRoaXMua25leCwgXCJkdWFsXCIpO1xuICAgIG5ld1B1cmkua25leFF1ZXJ5ID0gdGhpcy5rbmV4UXVlcnkuY2xvbmUoKTtcbiAgICByZXR1cm4gbmV3UHVyaTtcbiAgfVxuXG4gIGZvcm1hdFNRTCh1bmZvcm1hdHRlZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBTUUwg7JiI7JW97Ja0IOuqqeuhnVxuICAgIGNvbnN0IGtleXdvcmRzID0gW1xuICAgICAgXCJTRUxFQ1RcIixcbiAgICAgIFwiRlJPTVwiLFxuICAgICAgXCJXSEVSRVwiLFxuICAgICAgXCJJTlNFUlRcIixcbiAgICAgIFwiSU5UT1wiLFxuICAgICAgXCJWQUxVRVNcIixcbiAgICAgIFwiVVBEQVRFXCIsXG4gICAgICBcIkRFTEVURVwiLFxuICAgICAgXCJDUkVBVEVcIixcbiAgICAgIFwiVEFCTEVcIixcbiAgICAgIFwiQUxURVJcIixcbiAgICAgIFwiRFJPUFwiLFxuICAgICAgXCJKT0lOXCIsXG4gICAgICBcIk9OXCIsXG4gICAgICBcIklOTkVSXCIsXG4gICAgICBcIkxFRlRcIixcbiAgICAgIFwiUklHSFRcIixcbiAgICAgIFwiRlVMTFwiLFxuICAgICAgXCJPVVRFUlwiLFxuICAgICAgXCJHUk9VUFwiLFxuICAgICAgXCJCWVwiLFxuICAgICAgXCJPUkRFUlwiLFxuICAgICAgXCJIQVZJTkdcIixcbiAgICAgIFwiRElTVElOQ1RcIixcbiAgICAgIFwiTElNSVRcIixcbiAgICAgIFwiT0ZGU0VUXCIsXG4gICAgICBcIkFTXCIsXG4gICAgICBcIkFORFwiLFxuICAgICAgXCJPUlwiLFxuICAgICAgXCJOT1RcIixcbiAgICAgIFwiSU5cIixcbiAgICAgIFwiTElLRVwiLFxuICAgICAgXCJJU1wiLFxuICAgICAgXCJOVUxMXCIsXG4gICAgICBcIkNBU0VcIixcbiAgICAgIFwiV0hFTlwiLFxuICAgICAgXCJUSEVOXCIsXG4gICAgICBcIkVMU0VcIixcbiAgICAgIFwiRU5EXCIsXG4gICAgICBcIlVOSU9OXCIsXG4gICAgICBcIkFMTFwiLFxuICAgICAgXCJFWElTVFNcIixcbiAgICAgIFwiQkVUV0VFTlwiLFxuICAgIF07XG5cbiAgICBsZXQgZm9ybWF0dGVkID0gdW5mb3JtYXR0ZWQ7XG5cbiAgICAvLyDsmIjslb3slrTrpbwg64yA66y47J6Q66GcIOuzgO2ZmFxuICAgIGtleXdvcmRzLmZvckVhY2goKGtleXdvcmQpID0+IHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXGIke2tleXdvcmR9XFxcXGJgLCBcImdpXCIpO1xuICAgICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UocmVnZXgsIGtleXdvcmQudG9VcHBlckNhc2UoKSk7XG4gICAgfSk7XG5cbiAgICAvLyDso7zsmpQg7KCIIOyVnuyXkCDspITrsJTqv4gg7LaU6rCAXG4gICAgY29uc3QgbWFqb3JDbGF1c2VzID0gW1xuICAgICAgXCJTRUxFQ1RcIixcbiAgICAgIFwiRlJPTVwiLFxuICAgICAgXCJXSEVSRVwiLFxuICAgICAgXCJHUk9VUCBCWVwiLFxuICAgICAgXCJPUkRFUiBCWVwiLFxuICAgICAgXCJIQVZJTkdcIixcbiAgICAgIFwiTElNSVRcIixcbiAgICAgIFwiVU5JT05cIixcbiAgICBdO1xuICAgIG1ham9yQ2xhdXNlcy5mb3JFYWNoKChjbGF1c2UpID0+IHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXHMrKCR7Y2xhdXNlfSlcXFxccytgLCBcImdpXCIpO1xuICAgICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UocmVnZXgsIGBcXG4ke2NsYXVzZS50b1VwcGVyQ2FzZSgpfSBgKTtcbiAgICB9KTtcblxuICAgIC8vIEpPSU4g7KCIIOyymOumrFxuICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKC9cXHMrKCg/OklOTkVSfExFRlR8UklHSFR8RlVMTCBPVVRFUilcXHMrKT9KT0lOXFxzKy9naSwgXCJcXG4kMUpPSU4gXCIpO1xuXG4gICAgLy8gQU5ELCBPUiDsobDqsbQg7LKY66asXG4gICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoL1xccysoQU5EfE9SKVxccysvZ2ksIFwiXFxuICAkMSBcIik7XG5cbiAgICAvLyDqtITtmLgg7LKY66asIOuwjyDrk6Tsl6zsk7DquLBcbiAgICBjb25zdCBsaW5lcyA9IGZvcm1hdHRlZC5zcGxpdChcIlxcblwiKTtcbiAgICBjb25zdCBpbmRlbnRlZExpbmVzID0gW107XG4gICAgbGV0IGluZGVudExldmVsID0gMDtcblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICAgIGlmICghdHJpbW1lZExpbmUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyDri6vripQg6rSE7Zi46rCAIOyeiOycvOuptCDrk6Tsl6zsk7DquLAg66CI67KoIOqwkOyGjFxuICAgICAgY29uc3QgY2xvc2luZ1BhcmVucyA9ICh0cmltbWVkTGluZS5tYXRjaCgvXFwpL2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgICBjb25zdCBvcGVuaW5nUGFyZW5zID0gKHRyaW1tZWRMaW5lLm1hdGNoKC9cXCgvZykgfHwgW10pLmxlbmd0aDtcblxuICAgICAgaWYgKGNsb3NpbmdQYXJlbnMgPiAwICYmIG9wZW5pbmdQYXJlbnMgPT09IDApIHtcbiAgICAgICAgaW5kZW50TGV2ZWwgPSBNYXRoLm1heCgwLCBpbmRlbnRMZXZlbCAtIGNsb3NpbmdQYXJlbnMpO1xuICAgICAgfVxuXG4gICAgICAvLyDtmITsnqwg65Ok7Jes7JOw6riwIOyggeyaqVxuICAgICAgY29uc3QgaW5kZW50ID0gXCIgIFwiLnJlcGVhdChpbmRlbnRMZXZlbCk7XG4gICAgICBpbmRlbnRlZExpbmVzLnB1c2goaW5kZW50ICsgdHJpbW1lZExpbmUpO1xuXG4gICAgICAvLyDsl6zripQg6rSE7Zi46rCAIOyeiOycvOuptCDrk6Tsl6zsk7DquLAg66CI67KoIOymneqwgFxuICAgICAgaWYgKG9wZW5pbmdQYXJlbnMgPiBjbG9zaW5nUGFyZW5zKSB7XG4gICAgICAgIGluZGVudExldmVsICs9IG9wZW5pbmdQYXJlbnMgLSBjbG9zaW5nUGFyZW5zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmRlbnRlZExpbmVzLmpvaW4oXCJcXG5cIikudHJpbSgpO1xuICB9XG5cbiAgcmF3KHNxbDogc3RyaW5nKTogS25leC5SYXcge1xuICAgIHJldHVybiB0aGlzLmtuZXgucmF3KHNxbCk7XG4gIH1cblxuICAvLyBLbmV4IOy/vOumrCDruYzrjZQg7KeB7KCRIOygkeq3vFxuICByYXdRdWVyeSgpOiBLbmV4LlF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXaGVyZUdyb3VwPFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnVpbGRlcjogS25leC5RdWVyeUJ1aWxkZXIpIHt9XG5cbiAgLy8gd2hlcmUg66mU7ISc65Oc65OkXG4gIHdoZXJlKGNvbmRpdGlvbnM6IFdoZXJlQ29uZGl0aW9uPFRUYWJsZXM+KTogdGhpcztcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIHdoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICB3aGVyZSguLi5hcmdzOiBhbnlbXSk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZShhcmdzWzBdLCAuLi5hcmdzLnNsaWNlKDEpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIG9yV2hlcmUg66mU7ISc65Oc65OkXG4gIG9yV2hlcmUoY29uZGl0aW9uczogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiB0aGlzO1xuICBvcldoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICBvcldoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICBvcldoZXJlKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmUoYXJnc1swXSwgLi4uYXJncy5zbGljZSgxKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyDspJHssqkg6re466O5XG4gIHdoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcztcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmUoKHN1YkJ1aWxkZXIpID0+IHtcbiAgICAgIGNvbnN0IHN1Ykdyb3VwID0gbmV3IFdoZXJlR3JvdXA8VFRhYmxlcz4oc3ViQnVpbGRlcik7XG4gICAgICBjYWxsYmFjayhzdWJHcm91cCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgb3JXaGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IHRoaXM7XG4gIG9yV2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZSgoc3ViQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3Qgc3ViR3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihzdWJCdWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKHN1Ykdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG4vLyBKT0lOIOygiCDqt7jro7nsl5DripQgTGVmdOyZgCBSaWdodOyXkCDrjIDtlZwg7Iic7ISc6rCAIO2VhOyalO2VmOyngCDslYrsnLzrr4DroZwsIOuqqOuToCDqsr3smrDsnZgg7IiY66W8IOqzhOyCsO2VtOyVvO2VqC5cbmV4cG9ydCBjbGFzcyBKb2luQ2xhdXNlR3JvdXA8XG4gIFRMZWZ0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgVFJpZ2h0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pixcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhbGxiYWNrOiBLbmV4LkpvaW5DbGF1c2UpIHt9XG5cbiAgLy8gT04oQU5EKTog7Lus65+8ID0g7Lus65+8XG4gIG9uKGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+KTogdGhpcztcbiAgb24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LCByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4pOiB0aGlzO1xuICAvLyBPTihBTkQpOiDsu6zrn7wgPSDqsJJcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRMZWZ0LCBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VFJpZ2h0LCBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBPTihBTkQpOiDsu6zrn7wgKOyXsOyCsOyekCkg7Lus65+8XG4gIG9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LFxuICApOiB0aGlzO1xuICAvLyBPTihBTkQpOiDsu6zrn7wgKOyXsOyCsOyekCkg6rCSXG4gIG9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRMZWZ0LCBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgIHJpZ2h0OiBFeHRyYWN0Q29sdW1uVHlwZTxUUmlnaHQsIEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy9nOuwsVxuICBvbihjYWxsYmFjazogKG5lc3RlZDogSm9pbkNsYXVzZUdyb3VwPFRMZWZ0LCBUUmlnaHQ+KSA9PiB2b2lkKTogdGhpcztcbiAgb24oY2FsbGJhY2s6IChuZXN0ZWQ6IEpvaW5DbGF1c2VHcm91cDxUUmlnaHQsIFRMZWZ0PikgPT4gdm9pZCk6IHRoaXM7XG4gIC8vIE9OKEFORCkg6rWs7ZiEXG4gIG9uKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgdGhpcy5jYWxsYmFjay5vbiguLi4oYXJncyBhcyBbc3RyaW5nLCBzdHJpbmddKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBPTihPUik6IOy7rOufvCA9IOy7rOufvFxuICBvck9uKGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+KTogdGhpcztcbiAgb3JPbihsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Pik6IHRoaXM7XG4gIC8vIE9OKE9SKTog7Lus65+8ID0g6rCSXG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRMZWZ0LCBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIHJpZ2h0OiBFeHRyYWN0Q29sdW1uVHlwZTxUUmlnaHQsIEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKE9SKTog7Lus65+8ICjsl7DsgrDsnpApIOy7rOufvFxuICBvck9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKE9SKTog7Lus65+8ICjsl7DsgrDsnpApIOqwklxuICBvck9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRMZWZ0LCBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsvZzrsLFcbiAgb3JPbihjYWxsYmFjazogKG5lc3RlZDogSm9pbkNsYXVzZUdyb3VwPFRMZWZ0LCBUUmlnaHQ+KSA9PiB2b2lkKTogdGhpcztcbiAgb3JPbihjYWxsYmFjazogKG5lc3RlZDogSm9pbkNsYXVzZUdyb3VwPFRSaWdodCwgVExlZnQ+KSA9PiB2b2lkKTogdGhpcztcbiAgLy8gT04oT1IpIOq1rO2YhFxuICBvck9uKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgdGhpcy5jYWxsYmFjay5vck9uKC4uLihhcmdzIGFzIFtzdHJpbmcsIHN0cmluZ10pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG4vKlxuICBUUmVzb2x2ZWQ6IOy/vOumrCDsi6Ttlokg7ZuEIOuwmO2ZmOuQoCDqsrDqs7wg7YOA7J6FXG4gIFRSZXR1cm5pbmc6IFJFVFVSTklORyDsoIjsl5Ag7IKs7Jqp65CgIO2DgOyehVxuKi9cbmV4cG9ydCBjbGFzcyBSZXNvbHZlZFB1cmk8VFJlc29sdmVkLCBUUmV0dXJuaW5nPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBrbmV4UXVlcnk6IEtuZXguUXVlcnlCdWlsZGVyLFxuICAgIHByaXZhdGUga25leDogS25leCxcbiAgKSB7fVxuXG4gIHRvUXVlcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudG9RdWVyeSgpO1xuICB9XG5cbiAgZGVidWcoKTogdGhpcyB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsuY3lhbihcIltQdXJpIERlYnVnXVwiKX0gJHtjaGFsay55ZWxsb3codGhpcy50b1F1ZXJ5KCkpfWApO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhlbjxUUmVzdWx0MSA9IFRSZXNvbHZlZCwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBUUmVzb2x2ZWQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IG51bGwsXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgIE5haXRlLnQoXCJwdXJpOmV4ZWN1dGVkLXF1ZXJ5XCIsIHRoaXMudG9RdWVyeSgpKTtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudGhlbihvbmZ1bGZpbGxlZCBhcyBhbnksIG9ucmVqZWN0ZWQpO1xuICB9XG4gIGNhdGNoPFRSZXN1bHQyID0gbmV2ZXI+KFxuICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPikgfCBudWxsLFxuICApOiBQcm9taXNlPFRSZXNvbHZlZCB8IFRSZXN1bHQyPiB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LmNhdGNoKG9ucmVqZWN0ZWQpO1xuICB9XG4gIGZpbmFsbHkob25maW5hbGx5PzogKCgpID0+IHZvaWQpIHwgbnVsbCk6IFByb21pc2U8VFJlc29sdmVkPiB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LmZpbmFsbHkob25maW5hbGx5KTtcbiAgfVxuXG4gIC8vIE9OIENPTkZMSUNUIC0g7Lus65+8IOq4sOuwmFxuICBvbkNvbmZsaWN0PFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBUUmV0dXJuaW5nPj4oXG4gICAgY29sdW1uczogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgYWN0aW9uPzogT25Db25mbGljdEFjdGlvbjxUVGFibGVzPixcbiAgKTogdGhpcyB7XG4gICAgY29uc3QgdGFyZ2V0ID0gQXJyYXkuaXNBcnJheShjb2x1bW5zKSA/IGNvbHVtbnMgOiBbY29sdW1uc107XG5cbiAgICBpZiAoIWFjdGlvbiB8fCBhY3Rpb24gPT09IFwibm90aGluZ1wiKSB7XG4gICAgICAvLyBETyBOT1RISU5HXG4gICAgICB0aGlzLmtuZXhRdWVyeS5vbkNvbmZsaWN0KHRhcmdldCkuaWdub3JlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERPIFVQREFURVxuICAgICAgY29uc3QgeyB1cGRhdGUgfSA9IGFjdGlvbjtcblxuICAgICAgLy8gYWN0aW9uLnVwZGF0ZSDrsLDsl7Qg7ZiV7YOcIDogW1wibmFtZVwiLCBcImVtYWlsXCJdXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGUpKSB7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5Lm9uQ29uZmxpY3QodGFyZ2V0KS5tZXJnZSh1cGRhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYWN0aW9uLnVwZGF0ZSDqsJ3ssrQg7ZiV7YOcOiB7IG5hbWU6IFwiSm9oblwiLCBjb3VudDogcmF3KC4uLikgfVxuICAgICAgICBjb25zdCBtZXJnZU9iajogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHVwZGF0ZSkpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBcIl90eXBlXCIgaW4gdmFsdWUgJiZcbiAgICAgICAgICAgIHZhbHVlLl90eXBlID09PSBcInNxbF9leHByZXNzaW9uXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFNxbEV4cHJlc3Npb24g4oaSIGtuZXgucmF3KCnroZwg67OA7ZmYXG4gICAgICAgICAgICBtZXJnZU9ialtrZXldID0gdGhpcy5rbmV4LnJhdygodmFsdWUgYXMgU3FsRXhwcmVzc2lvbjxhbnk+KS5fc3FsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g7J2867CYIOqwklxuICAgICAgICAgICAgbWVyZ2VPYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMua25leFF1ZXJ5Lm9uQ29uZmxpY3QodGFyZ2V0KS5tZXJnZShtZXJnZU9iaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBSRVRVUk5JTkc6IFwiKlwiIC0g7KCE7LK0IOy7rOufvFxuICByZXR1cm5pbmcoY29sdW1uOiBcIipcIik6IFJlc29sdmVkUHVyaTxUUmV0dXJuaW5nW10sIG5ldmVyPjtcbiAgLy8gUkVUVVJOSU5HOiDri6jsnbwg7Lus65+8XG4gIHJldHVybmluZzxUQ29sdW1uIGV4dGVuZHMgQ29sdW1uS2V5czxUUmV0dXJuaW5nPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICApOiBSZXNvbHZlZFB1cmk8UGljazxUUmV0dXJuaW5nLCBUQ29sdW1uPltdLCBuZXZlcj47XG4gIC8vIFJFVFVSTklORzog67O17IiYIOy7rOufvCAo67Cw7Je0KVxuICByZXR1cm5pbmc8VENvbHVtbiBleHRlbmRzIENvbHVtbktleXM8VFJldHVybmluZz4+KFxuICAgIGNvbHVtbnM6IFRDb2x1bW5bXSxcbiAgKTogUmVzb2x2ZWRQdXJpPFBpY2s8VFJldHVybmluZywgVENvbHVtbj5bXSwgbmV2ZXI+O1xuICAvLyBSRVRVUk5JTkcg6rWs7ZiEXG4gIHJldHVybmluZyhjb2x1bW5PckNvbHVtbnM6IHN0cmluZyB8IHN0cmluZ1tdKTogUmVzb2x2ZWRQdXJpPGFueVtdLCBuZXZlcj4ge1xuICAgIHRoaXMua25leFF1ZXJ5LnJldHVybmluZyhjb2x1bW5PckNvbHVtbnMpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG59XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiY2hhbGsiLCJOYWl0ZSIsIlB1cmkiLCJrbmV4UXVlcnkiLCJrbmV4IiwidGFibGVOYW1lT3JTcGVjIiwiZnJvbSIsImVudHJpZXMiLCJPYmplY3QiLCJsZW5ndGgiLCJFcnJvciIsImFsaWFzIiwic3BlYyIsInN1YnF1ZXJ5QnVpbGRlciIsInJhd1F1ZXJ5IiwiYXMiLCJjb3VudCIsImNvbHVtbiIsIl90eXBlIiwiX3JldHVybiIsIl9zcWwiLCJzdW0iLCJhdmciLCJtYXgiLCJtaW4iLCJjb25jYXQiLCJhcmdzIiwiam9pbiIsInVwcGVyIiwibG93ZXIiLCJyYXdTdHJpbmciLCJzcWwiLCJyYXdOdW1iZXIiLCJyYXdCb29sZWFuIiwicmF3RGF0ZSIsInNlbGVjdCIsInNlbGVjdE9iaiIsImZsYXRTZWxlY3QiLCJmbGF0dGVuU2VsZWN0Iiwic2VsZWN0Q2xhdXNlcyIsImNvbHVtbk9yRnVuY3Rpb24iLCJwdXNoIiwicmF3IiwiY29sdW1uUGF0aCIsInByZWZpeCIsImtleSIsInZhbHVlIiwiZnVsbEtleSIsIm5lc3RlZCIsImFzc2lnbiIsImFwcGVuZFNlbGVjdCIsInNlbGVjdEFsbCIsImNsZWFyIiwic3RhdGVtZW50IiwiY2xlYXJKb2luIiwiX3N0YXRlbWVudHMiLCJmaWx0ZXIiLCJzIiwiX2FsaWFzIiwiX3RhYmxlIiwidGFibGUiLCJfX2NvbW1vbkpvaW4iLCJsZWZ0Sm9pbiIsImpvaW5UeXBlIiwidGFibGVOYW1lIiwiY2FsbGJhY2siLCJqb2luQ2xhdXNlIiwiSm9pbkNsYXVzZUdyb3VwIiwibGVmdCIsInJpZ2h0Iiwid2hlcmUiLCJjb2x1bW5PckNvbmRpdGlvbnMiLCJvcGVyYXRvck9yVmFsdWUiLCJ3aGVyZU51bGwiLCJ3aGVyZU5vdE51bGwiLCJ3aGVyZUluIiwidmFsdWVzIiwid2hlcmVOb3RJbiIsIndoZXJlTWF0Y2giLCJ3aGVyZVJhdyIsIlN0cmluZyIsIndoZXJlR3JvdXAiLCJidWlsZGVyIiwiZ3JvdXAiLCJXaGVyZUdyb3VwIiwib3JXaGVyZUdyb3VwIiwib3JXaGVyZSIsIm9yZGVyQnkiLCJkaXJlY3Rpb24iLCJsaW1pdCIsIm9mZnNldCIsImdyb3VwQnkiLCJjb2x1bW5zIiwiaGF2aW5nIiwiY29uZGl0aW9ucyIsInRoZW4iLCJvbmZ1bGZpbGxlZCIsIm9ucmVqZWN0ZWQiLCJ0IiwidG9RdWVyeSIsImNhdGNoIiwiZmluYWxseSIsIm9uZmluYWxseSIsImZpcnN0IiwiUmVzb2x2ZWRQdXJpIiwicGx1Y2siLCJpbnNlcnQiLCJkYXRhIiwidXBkYXRlIiwiaW5jcmVtZW50IiwiZGVjcmVtZW50IiwiZGVsZXRlIiwiZGVidWciLCJjb25zb2xlIiwibG9nIiwiY3lhbiIsInllbGxvdyIsImNsb25lIiwibmV3UHVyaSIsImZvcm1hdFNRTCIsInVuZm9ybWF0dGVkIiwia2V5d29yZHMiLCJmb3JtYXR0ZWQiLCJmb3JFYWNoIiwia2V5d29yZCIsInJlZ2V4IiwiUmVnRXhwIiwicmVwbGFjZSIsInRvVXBwZXJDYXNlIiwibWFqb3JDbGF1c2VzIiwiY2xhdXNlIiwibGluZXMiLCJzcGxpdCIsImluZGVudGVkTGluZXMiLCJpbmRlbnRMZXZlbCIsImxpbmUiLCJ0cmltbWVkTGluZSIsInRyaW0iLCJjbG9zaW5nUGFyZW5zIiwibWF0Y2giLCJvcGVuaW5nUGFyZW5zIiwiTWF0aCIsImluZGVudCIsInJlcGVhdCIsInNsaWNlIiwic3ViQnVpbGRlciIsInN1Ykdyb3VwIiwib24iLCJvck9uIiwib25Db25mbGljdCIsImFjdGlvbiIsInRhcmdldCIsIkFycmF5IiwiaXNBcnJheSIsImlnbm9yZSIsIm1lcmdlIiwibWVyZ2VPYmoiLCJyZXR1cm5pbmciLCJjb2x1bW5PckNvbHVtbnMiXSwibWFwcGluZ3MiOiJBQUFBLHNGQUFzRixHQUN0Riw2RUFBNkUsR0FFN0UsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLE9BQU9DLFdBQVcsUUFBUTtBQUUxQixTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBeUJ2QyxPQUFPLE1BQU1DOztJQUNIQyxVQUE2QjtJQUtyQyxZQUNFLEFBQU9DLElBQVUsRUFDakJDLGVBQW9CLENBQ3BCO2FBRk9ELE9BQUFBO1FBR1AsSUFBSSxPQUFPQyxvQkFBb0IsVUFBVTtZQUN2QyxnQ0FBZ0M7WUFDaEMsSUFBSSxDQUFDRixTQUFTLEdBQUcsSUFBSSxDQUFDQyxJQUFJLENBQUNDLGlCQUFpQkMsSUFBSSxDQUFDRDtRQUNuRCxPQUFPLElBQUksT0FBT0Esb0JBQW9CLFVBQVU7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
|
|
694
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub1RoZW5Qcm9wZXJ0eTogUHVyaeuKlCB0aGVuYWJsZSDsnbjthLDtjpjsnbTsiqTrpbwg6rWs7ZiE7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cbi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp64qUIOuLpOyWke2VnCDtg4DsnoXsnYQg7IKs7Jqp7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cblxuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB0eXBlIHtcbiAgQXZhaWxhYmxlQ29sdW1ucyxcbiAgQ29sdW1uS2V5cyxcbiAgQ29tcGFyaXNvbk9wZXJhdG9yLFxuICBFeHBhbmQsXG4gIEV4dHJhY3RDb2x1bW5UeXBlLFxuICBGdWxsdGV4dENvbHVtbnMsXG4gIEhpZ2hsaWdodE9wdGlvbnMsXG4gIEluc2VydERhdGEsXG4gIEluc2VydFJlc3VsdCxcbiAgTGVmdEpvaW5lZE1hcmtlcixcbiAgTGVmdEpvaW5NYXJrZXJGb3IsXG4gIE51bWVyaWNDb2x1bW5zLFxuICBPbkNvbmZsaWN0QWN0aW9uLFxuICBQYXJzZVNlbGVjdE9iamVjdCxcbiAgUmVzdWx0QXZhaWxhYmxlQ29sdW1ucyxcbiAgU2VsZWN0QWxsUmVzdWx0LFxuICBTZWxlY3RPYmplY3QsXG4gIFNpbmdsZVRhYmxlVmFsdWUsXG4gIFNxbEV4cHJlc3Npb24sXG4gIFRzUXVlcnlDb25maWcsXG4gIFRzUXVlcnlPcHRpb25zLFxuICBXaGVyZUNvbmRpdGlvbixcbiAgV2hlcmVPcGVyYXRvcixcbn0gZnJvbSBcIi4vcHVyaS50eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBDbGVhclN0YXRlbWVudHMgfSBmcm9tIFwiLi9wdXJpLXN1YnNldC50eXBlc1wiO1xuXG5leHBvcnQgY2xhc3MgUHVyaTxUU2NoZW1hLCBUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiwgVFJlc3VsdD4ge1xuICBwcml2YXRlIGtuZXhRdWVyeTogS25leC5RdWVyeUJ1aWxkZXI7XG5cbiAgLy8g7IOd7ISx7J6QIOyLnOq3uOuLiOyymOuTpFxuICBjb25zdHJ1Y3RvcihrbmV4OiBLbmV4LCB0YWJsZU5hbWU6IHN0cmluZyk7XG4gIGNvbnN0cnVjdG9yKGtuZXg6IEtuZXgsIHRhYmxlU3BlYzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgUHVyaTxUU2NoZW1hLCBhbnksIGFueT4+KTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGtuZXg6IEtuZXgsXG4gICAgdGFibGVOYW1lT3JTcGVjOiBhbnksXG4gICkge1xuICAgIGlmICh0eXBlb2YgdGFibGVOYW1lT3JTcGVjID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBDYXNlOiBuZXcgUHVyaShrbmV4LCBcInVzZXJzXCIpXG4gICAgICB0aGlzLmtuZXhRdWVyeSA9IHRoaXMua25leCh0YWJsZU5hbWVPclNwZWMpLmZyb20odGFibGVOYW1lT3JTcGVjKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0YWJsZU5hbWVPclNwZWMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0YWJsZU5hbWVPclNwZWMpO1xuICAgICAgaWYgKGVudHJpZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhYmxlIHNwZWMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIGVudHJ5XCIpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0KGVudHJpZXNbMF0pO1xuICAgICAgY29uc3QgW2FsaWFzLCBzcGVjXSA9IGVudHJpZXNbMF07XG4gICAgICBpZiAodHlwZW9mIHNwZWMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnkgPSB0aGlzLmtuZXgoc3BlYykuZnJvbSh7IFthbGlhc106IHNwZWMgfSk7XG4gICAgICB9IGVsc2UgaWYgKHNwZWMgaW5zdGFuY2VvZiBQdXJpKSB7XG4gICAgICAgIGNvbnN0IHN1YnF1ZXJ5QnVpbGRlciA9IHNwZWMucmF3UXVlcnkoKTtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnkgPSB0aGlzLmtuZXguZnJvbShzdWJxdWVyeUJ1aWxkZXIuYXMoYWxpYXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdGFibGUgc3BlY2lmaWNhdGlvblwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0YWJsZSBzcGVjaWZpY2F0aW9uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpYyBTUUwgaGVscGVyIGZ1bmN0aW9ucyBmb3IgU0VMRUNUXG4gIHN0YXRpYyBjb3VudChjb2x1bW46IHN0cmluZyA9IFwiKlwiKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYENPVU5UKCR7Y29sdW1ufSk6OmludGVnZXJgLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIHN1bShjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBTVU0oJHtjb2x1bW59KWAsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgYXZnKGNvbHVtbjogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYEFWRygke2NvbHVtbn0pYCxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBtYXgoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgTUFYKCR7Y29sdW1ufSlgLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIG1pbihjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBNSU4oJHtjb2x1bW59KWAsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgY29uY2F0KC4uLmFyZ3M6IHN0cmluZ1tdKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcInN0cmluZ1wiLFxuICAgICAgX3NxbDogYENPTkNBVCgke2FyZ3Muam9pbihcIiwgXCIpfSlgLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIHVwcGVyKGNvbHVtbjogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcInN0cmluZ1wiLFxuICAgICAgX3NxbDogYFVQUEVSKCR7Y29sdW1ufSlgLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIGxvd2VyKGNvbHVtbjogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcInN0cmluZ1wiLFxuICAgICAgX3NxbDogYExPV0VSKCR7Y29sdW1ufSlgLFxuICAgIH07XG4gIH1cblxuICAvLyBSYXcgZnVuY3Rpb25zIGZvciBTRUxFQ1RcbiAgc3RhdGljIHJhd1N0cmluZyhzcWw6IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIHJldHVybiB7IF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsIF9yZXR1cm46IFwic3RyaW5nXCIsIF9zcWw6IHNxbCB9O1xuICB9XG4gIHN0YXRpYyByYXdOdW1iZXIoc3FsOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcIm51bWJlclwiLCBfc3FsOiBzcWwgfTtcbiAgfVxuICBzdGF0aWMgcmF3Qm9vbGVhbihzcWw6IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJib29sZWFuXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcImJvb2xlYW5cIiwgX3NxbDogc3FsIH07XG4gIH1cbiAgc3RhdGljIHJhd0RhdGUoc3FsOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwiZGF0ZVwiPiB7XG4gICAgcmV0dXJuIHsgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIiwgX3JldHVybjogXCJkYXRlXCIsIF9zcWw6IHNxbCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZUUyDqsoDsg4nslrQg7ZWY7J2065287J207YyFXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC5zZWxlY3Qoe1xuICAgKiAgIHRpdGxlOiBQdXJpLmhpZ2hsaWdodChcInBvc3RzLnRpdGxlXCIsIHNlYXJjaCksXG4gICAqICAgY29udGVudDogUHVyaS5oaWdobGlnaHQoXCJwb3N0cy5jb250ZW50XCIsIHNlYXJjaCwge1xuICAgKiAgICAgc3RhcnRTZWw6IFwiPG1hcms+XCIsXG4gICAqICAgICBzdG9wU2VsOiBcIjwvbWFyaz5cIixcbiAgICogICAgIG1heEZyYWdtZW50czogMyxcbiAgICogICB9KSxcbiAgICogfSlcbiAgICovXG4gIHN0YXRpYyBoaWdobGlnaHQoXG4gICAgY29sdW1uOiBzdHJpbmcsXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBvcHRpb25zPzogSGlnaGxpZ2h0T3B0aW9ucyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB7XG4gICAgY29uc3Qge1xuICAgICAgcGFyc2VyID0gXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiLFxuICAgICAgY29uZmlnID0gXCJzaW1wbGVcIixcbiAgICAgIG1heFdvcmRzLFxuICAgICAgbWluV29yZHMsXG4gICAgICBzaG9ydFdvcmQsXG4gICAgICBoaWdobGlnaHRBbGwsXG4gICAgICBtYXhGcmFnbWVudHMsXG4gICAgICBzdGFydFNlbCxcbiAgICAgIHN0b3BTZWwsXG4gICAgICBmcmFnbWVudERlbGltaXRlcixcbiAgICB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICAgIGNvbnN0IGhsT3B0aW9uUGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAobWF4V29yZHMgIT09IHVuZGVmaW5lZCkgaGxPcHRpb25QYXJ0cy5wdXNoKGBNYXhXb3Jkcz0ke21heFdvcmRzfWApO1xuICAgIGlmIChtaW5Xb3JkcyAhPT0gdW5kZWZpbmVkKSBobE9wdGlvblBhcnRzLnB1c2goYE1pbldvcmRzPSR7bWluV29yZHN9YCk7XG4gICAgaWYgKHNob3J0V29yZCAhPT0gdW5kZWZpbmVkKSBobE9wdGlvblBhcnRzLnB1c2goYFNob3J0V29yZD0ke3Nob3J0V29yZH1gKTtcbiAgICBpZiAoaGlnaGxpZ2h0QWxsICE9PSB1bmRlZmluZWQpIGhsT3B0aW9uUGFydHMucHVzaChgSGlnaGxpZ2h0QWxsPSR7aGlnaGxpZ2h0QWxsfWApO1xuICAgIGlmIChtYXhGcmFnbWVudHMgIT09IHVuZGVmaW5lZCkgaGxPcHRpb25QYXJ0cy5wdXNoKGBNYXhGcmFnbWVudHM9JHttYXhGcmFnbWVudHN9YCk7XG4gICAgaWYgKHN0YXJ0U2VsICE9PSB1bmRlZmluZWQpIGhsT3B0aW9uUGFydHMucHVzaChgU3RhcnRTZWw9XCIke3N0YXJ0U2VsfVwiYCk7XG4gICAgaWYgKHN0b3BTZWwgIT09IHVuZGVmaW5lZCkgaGxPcHRpb25QYXJ0cy5wdXNoKGBTdG9wU2VsPVwiJHtzdG9wU2VsfVwiYCk7XG4gICAgaWYgKGZyYWdtZW50RGVsaW1pdGVyICE9PSB1bmRlZmluZWQpXG4gICAgICBobE9wdGlvblBhcnRzLnB1c2goYEZyYWdtZW50RGVsaW1pdGVyPVwiJHtmcmFnbWVudERlbGltaXRlcn1cImApO1xuXG4gICAgY29uc3QgaGxPcHRpb25zID0gaGxPcHRpb25QYXJ0cy5sZW5ndGggPiAwID8gYCwgJyR7aGxPcHRpb25QYXJ0cy5qb2luKFwiLCBcIil9J2AgOiBcIlwiO1xuXG4gICAgLy8gVE9ETzogcmF3QmluZGluZyDrqZTshJzrk5wg66eM65Ok7Ja07IScIFhTUyDrsKnsp4BcbiAgICByZXR1cm4gUHVyaS5yYXdTdHJpbmcoXG4gICAgICBgdHNfaGVhZGxpbmUoJyR7Y29uZmlnfScsICR7Y29sdW1ufSwgJHtwYXJzZXJ9KCcke2NvbmZpZ30nLCAnJHtxdWVyeX0nKSR7aGxPcHRpb25zfSlgLFxuICAgICk7XG4gIH1cblxuICAvLyBTRUxFQ1QgKG92ZXJ3cml0ZSlcbiAgc2VsZWN0PFRTZWxlY3QgZXh0ZW5kcyBTZWxlY3RPYmplY3Q8VFRhYmxlcz4+KFxuICAgIHNlbGVjdE9iajogVFNlbGVjdCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBQYXJzZVNlbGVjdE9iamVjdDxUVGFibGVzLCBUU2VsZWN0Pj4ge1xuICAgIC8vIOykkeyyqSDqsJ3ssrTrpbwgZmxhdO2VmOqyjCDrs4DtmZhcbiAgICBjb25zdCBmbGF0U2VsZWN0ID0gdGhpcy5mbGF0dGVuU2VsZWN0KHNlbGVjdE9iaik7XG5cbiAgICBjb25zdCBzZWxlY3RDbGF1c2VzOiAoc3RyaW5nIHwgS25leC5SYXcpW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBjb2x1bW5PckZ1bmN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhmbGF0U2VsZWN0KSkge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5PckZ1bmN0aW9uID09PSBcIm9iamVjdFwiICYmIGNvbHVtbk9yRnVuY3Rpb24uX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIikge1xuICAgICAgICAvLyBTUUwg7ZWo7IiY7J24IOqyveyasFxuICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2godGhpcy5rbmV4LnJhdyhgJHtjb2x1bW5PckZ1bmN0aW9uLl9zcWx9IGFzICR7YWxpYXN9YCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g7J2867CYIOy7rOufvOyduCDqsr3smrBcbiAgICAgICAgY29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbk9yRnVuY3Rpb24gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoYWxpYXMgPT09IGNvbHVtblBhdGgpIHtcbiAgICAgICAgICAvLyBhbGlhc+yZgCDsu6zrn7zrqoXsnbQg6rCZ7Jy866m0IGFsaWFzIOyDneuetVxuICAgICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChjb2x1bW5QYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBhbGlhcyDsp4DsoJVcbiAgICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goYCR7Y29sdW1uUGF0aH0gYXMgJHthbGlhc31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChzZWxlY3RDbGF1c2VzKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICog7KSR7LKpIOqwneyytOulvCBmbGF0IOqwneyytOuhnCDrs4DtmZhcbiAgICog7JiIOiB7IHBhcmVudDogeyBpZDogXCJwYXJlbnQuaWRcIiwgbmFtZTogXCJwYXJlbnQubmFtZVwiIH0gfVxuICAgKiAgIOKGkiB7IHBhcmVudF9faWQ6IFwicGFyZW50LmlkXCIsIHBhcmVudF9fbmFtZTogXCJwYXJlbnQubmFtZVwiIH1cbiAgICovXG4gIHByaXZhdGUgZmxhdHRlblNlbGVjdChzZWxlY3RPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sIHByZWZpeCA9IFwiXCIpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBmbGF0U2VsZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzZWxlY3RPYmopKSB7XG4gICAgICBjb25zdCBmdWxsS2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fV9fJHtrZXl9YCA6IGtleTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhKFwiX3R5cGVcIiBpbiB2YWx1ZSkpIHtcbiAgICAgICAgLy8g7KSR7LKpIOqwneyytOyduCDqsr3smrAgLSDsnqzqt4Ag7LKY66asXG4gICAgICAgIGNvbnN0IG5lc3RlZCA9IHRoaXMuZmxhdHRlblNlbGVjdCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmxhdFNlbGVjdCwgbmVzdGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOydvOuwmCDqsJLsnbgg6rK97JqwICjsu6zrn7wg6rK966GcIOuYkOuKlCBTcWxFeHByZXNzaW9uKVxuICAgICAgICBmbGF0U2VsZWN0W2Z1bGxLZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXRTZWxlY3Q7XG4gIH1cblxuICAvLyBTRUxFQ1QgKHNlbGVjdOuKlCBvdmVyd3JpdGUsIGFwcGVuZFNlbGVjdOuKlCBhcHBlbmQpXG4gIGFwcGVuZFNlbGVjdDxUU2VsZWN0IGV4dGVuZHMgU2VsZWN0T2JqZWN0PFRUYWJsZXM+PihcbiAgICBzZWxlY3RPYmo6IFRTZWxlY3QsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdCAmIFBhcnNlU2VsZWN0T2JqZWN0PFRUYWJsZXMsIFRTZWxlY3Q+PiB7XG4gICAgLy8g7KSR7LKpIOqwneyytOulvCBmbGF07ZWY6rKMIOuzgO2ZmFxuICAgIGNvbnN0IGZsYXRTZWxlY3QgPSB0aGlzLmZsYXR0ZW5TZWxlY3Qoc2VsZWN0T2JqKTtcblxuICAgIGNvbnN0IHNlbGVjdENsYXVzZXM6IChzdHJpbmcgfCBLbmV4LlJhdylbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIGNvbHVtbk9yRnVuY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKGZsYXRTZWxlY3QpKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbk9yRnVuY3Rpb24gPT09IFwib2JqZWN0XCIgJiYgY29sdW1uT3JGdW5jdGlvbi5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiKSB7XG4gICAgICAgIHNlbGVjdENsYXVzZXMucHVzaCh0aGlzLmtuZXgucmF3KGAke2NvbHVtbk9yRnVuY3Rpb24uX3NxbH0gYXMgJHthbGlhc31gKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uT3JGdW5jdGlvbiBhcyBzdHJpbmc7XG4gICAgICAgIGlmIChhbGlhcyA9PT0gY29sdW1uUGF0aCkge1xuICAgICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChjb2x1bW5QYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goYCR7Y29sdW1uUGF0aH0gYXMgJHthbGlhc31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChzZWxlY3RDbGF1c2VzKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvLyBTRUxFQ1QgKlxuICBzZWxlY3RBbGwoKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBTZWxlY3RBbGxSZXN1bHQ8VFRhYmxlcz4+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3QoXCIqXCIpO1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIENMRUFSXG4gIGNsZWFyKHN0YXRlbWVudDogQ2xlYXJTdGF0ZW1lbnRzKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkuY2xlYXIoc3RhdGVtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGtuZXjsl5Ag7JeG7Ja07IScIOyngeygkSDqtaztmITtlahcbiAgY2xlYXJKb2luKGFsaWFzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAodGhpcy5rbmV4UXVlcnkgYXMgYW55KS5fc3RhdGVtZW50cyA9ICh0aGlzLmtuZXhRdWVyeSBhcyBhbnkpLl9zdGF0ZW1lbnRzLmZpbHRlcigoczogYW55KSA9PiB7XG4gICAgICBpZiAoXCJqb2luVHlwZVwiIGluIHMpIHtcbiAgICAgICAgY29uc3QgW19hbGlhcywgX3RhYmxlXSA9IE9iamVjdC5lbnRyaWVzKHMudGFibGUpWzBdO1xuICAgICAgICByZXR1cm4gX2FsaWFzICE9PSBhbGlhcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gSk9JTjog7ISc67iM7L+866asICsgQWxpYXNcbiAgam9pbjxUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLCBUU3ViUmVzdWx0PihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFB1cmk8VFNjaGVtYSwgYW55LCBUU3ViUmVzdWx0PiB9LFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4sXG4gICAgcmlnaHQ6IGAke1RKb2luQWxpYXN9LiR7Q29sdW1uS2V5czxUU3ViUmVzdWx0Pn1gLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU3ViUmVzdWx0PiwgLy8g7ISc67iM7L+866as7J2YIFRSZXN1bHRcbiAgICBUUmVzdWx0XG4gID47XG4gIC8vIEpPSU46IO2FjOydtOu4lCArIEFsaWFzXG4gIGpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsIFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogVEpvaW5UYWJsZSB9LFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4sXG4gICAgcmlnaHQ6IGAke1RKb2luQWxpYXN9LiR7Q29sdW1uS2V5czxUU2NoZW1hW1RKb2luVGFibGVdPn1gLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdPiwgLy8gVFRhYmxlcyDtmZXsnqUhXG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBKT0lOOiDthYzsnbTruJTrqoVcbiAgam9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4sXG4gICAgcmlnaHQ6IGAke1RKb2luVGFibGUgJiBzdHJpbmd9LiR7Q29sdW1uS2V5czxUU2NoZW1hW1RKb2luVGFibGVdPn1gLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgVFRhYmxlcyAmIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPiwgLy8g7YWM7J2067iU66qF7J20IO2CpFxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gSk9JTjog7ISc67iM7L+866asICsgQWxpYXMgKyDsvZzrsLFcbiAgam9pbjxUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLCBUU3ViUmVzdWx0PihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFB1cmk8VFNjaGVtYSwgYW55LCBUU3ViUmVzdWx0PiB9LFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pbkFsaWFzLCBUU3ViUmVzdWx0Pj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU3ViUmVzdWx0PiwgVFJlc3VsdD47XG4gIC8vIEpPSU46IO2FjOydtOu4lCArIEFsaWFzICsg7L2c67CxXG4gIGpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsIFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogVEpvaW5UYWJsZSB9LFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdPiwgVFJlc3VsdD47XG4gIC8vIEpPSU46IO2FjOydtOu4lOuqhSArIOy9nOuwsVxuICBqb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hPihcbiAgICB0YWJsZU5hbWU6IFRKb2luVGFibGUsXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luVGFibGUsIFRTY2hlbWFbVEpvaW5UYWJsZV0+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luVGFibGUsIFRTY2hlbWFbVEpvaW5UYWJsZV0+LCBUUmVzdWx0PjtcbiAgLy8gSk9JTiDsi6TsoJwg6rWs7ZiEXG4gIGpvaW4odGFibGVOYW1lT3JTcGVjOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fX2NvbW1vbkpvaW4oXCJqb2luXCIsIHRhYmxlTmFtZU9yU3BlYywgLi4uYXJncyk7XG4gIH1cblxuICAvLyBMRUZUIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzXG4gIGxlZnRKb2luPFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmcsIFRTdWJSZXN1bHQ+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogUHVyaTxUU2NoZW1hLCBhbnksIFRTdWJSZXN1bHQ+IH0sXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPixcbiAgICByaWdodDogYCR7VEpvaW5BbGlhc30uJHtDb2x1bW5LZXlzPFRTdWJSZXN1bHQ+fWAsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU3ViUmVzdWx0ICYgTGVmdEpvaW5lZE1hcmtlcj4sIFRSZXN1bHQ+OyAvLyDshJzruIzsv7zrpqzsnZggVFJlc3VsdFxuICAvLyBMRUZUIEpPSU46IO2FjOydtOu4lCArIEFsaWFzXG4gIC8vIEZLIG51bGxhYmxlIOyXrOu2gOyXkCDrlLDrnbwg7J6Q64+Z7Jy866GcIExlZnRKb2luZWRNYXJrZXIg6rKw7KCVXG4gIGxlZnRKb2luPFxuICAgIFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLFxuICAgIFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmcsXG4gICAgVExlZnQgZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICA+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogVEpvaW5UYWJsZSB9LFxuICAgIGxlZnQ6IFRMZWZ0LFxuICAgIHJpZ2h0OiBgJHtUSm9pbkFsaWFzfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXSAmIExlZnRKb2luTWFya2VyRm9yPFRUYWJsZXMsIFRMZWZ0Pj4sXG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBMRUZUIEpPSU46IO2FjOydtOu4lOuqhVxuICBsZWZ0Sm9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSwgVExlZnQgZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICB0YWJsZU5hbWU6IFRKb2luVGFibGUsXG4gICAgbGVmdDogVExlZnQsXG4gICAgcmlnaHQ6IGAke1RKb2luVGFibGUgJiBzdHJpbmd9LiR7Q29sdW1uS2V5czxUU2NoZW1hW1RKb2luVGFibGVdPn1gLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgVFRhYmxlcyAmIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdICYgTGVmdEpvaW5NYXJrZXJGb3I8VFRhYmxlcywgVExlZnQ+PixcbiAgICBUUmVzdWx0XG4gID47XG4gIC8vIExFRlQgSk9JTjog7ISc67iM7L+866asICsgQWxpYXMgKyDsvZzrsLFcbiAgbGVmdEpvaW48VEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZywgVFN1YlJlc3VsdD4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD4gfSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdCAmIExlZnRKb2luZWRNYXJrZXI+LCBUUmVzdWx0PjtcbiAgLy8gTEVGVCBKT0lOOiDthYzsnbTruJQgKyBBbGlhcyArIOy9nOuwsVxuICBsZWZ0Sm9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSwgVEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZz4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBUSm9pblRhYmxlIH0sXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0gJiBMZWZ0Sm9pbmVkTWFya2VyPiwgVFJlc3VsdD47XG4gIC8vIExFRlQgSk9JTjog7YWM7J2067iU66qFICsg7L2c67CxXG4gIGxlZnRKb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hPihcbiAgICB0YWJsZU5hbWU6IFRKb2luVGFibGUsXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luVGFibGUsIFRTY2hlbWFbVEpvaW5UYWJsZV0+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luVGFibGUsIFRTY2hlbWFbVEpvaW5UYWJsZV0gJiBMZWZ0Sm9pbmVkTWFya2VyPiwgVFJlc3VsdD47XG4gIC8vIExFRlQgSk9JTiDsi6TsoJwg6rWs7ZiEXG4gIGxlZnRKb2luKHRhYmxlTmFtZU9yU3BlYzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX19jb21tb25Kb2luKFwibGVmdEpvaW5cIiwgdGFibGVOYW1lT3JTcGVjLCAuLi5hcmdzKTtcbiAgfVxuXG4gIF9fY29tbW9uSm9pbihqb2luVHlwZTogXCJqb2luXCIgfCBcImxlZnRKb2luXCIsIHRhYmxlTmFtZU9yU3BlYzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgIGlmICh0eXBlb2YgdGFibGVOYW1lT3JTcGVjID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBDYXNlIDE6IGpvaW4oXCJwb3N0c1wiLCAuLi4pXG4gICAgICBjb25zdCB0YWJsZU5hbWUgPSB0YWJsZU5hbWVPclNwZWM7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIC8vIGpvaW4oXCJwb3N0c1wiLCBjYWxsYmFjaylcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBhcmdzWzBdO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0odGFibGVOYW1lLCAoam9pbkNsYXVzZSkgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBKb2luQ2xhdXNlR3JvdXAoam9pbkNsYXVzZSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGpvaW4oXCJwb3N0c1wiLCBsZWZ0LCByaWdodClcbiAgICAgICAgY29uc3QgW2xlZnQsIHJpZ2h0XSA9IGFyZ3M7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXSh0YWJsZU5hbWUsIGxlZnQsIHJpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0YWJsZU5hbWVPclNwZWMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIC8vIENhc2UgMjogam9pbih7IGFsaWFzOiBcInRhYmxlXCIgfSwgLi4uKSBvciBqb2luKHsgYWxpYXM6IHN1YnF1ZXJ5IH0sIC4uLilcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0YWJsZU5hbWVPclNwZWMpO1xuICAgICAgaWYgKGVudHJpZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhYmxlIHNwZWMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIGVudHJ5XCIpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0KGVudHJpZXNbMF0pO1xuICAgICAgY29uc3QgW1thbGlhcywgc3BlY11dID0gZW50cmllcztcblxuICAgICAgaWYgKHR5cGVvZiBzcGVjID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIO2FjOydtOu4lDogam9pbih7IHA6IFwicG9zdHNcIiB9LCAuLi4pXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgLy8gQ2FsbGJhY2tcbiAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3NbMF07XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHsgW2FsaWFzXTogc3BlYyB9LCAoam9pbkNsYXVzZSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEpvaW5DbGF1c2VHcm91cChqb2luQ2xhdXNlKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2ltcGxlXG4gICAgICAgICAgY29uc3QgW2xlZnQsIHJpZ2h0XSA9IGFyZ3M7XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHsgW2FsaWFzXTogc3BlYyB9LCBsZWZ0LCByaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3BlYyBpbnN0YW5jZW9mIFB1cmkpIHtcbiAgICAgICAgLy8g7ISc67iM7L+866asOiBqb2luKHsgc3E6IHN1YnF1ZXJ5IH0sIC4uLilcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAvLyBDYWxsYmFja1xuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJnc1swXTtcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0oc3BlYy5yYXdRdWVyeSgpLmFzKGFsaWFzKSwgKGpvaW5DbGF1c2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBKb2luQ2xhdXNlR3JvdXAoam9pbkNsYXVzZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpbXBsZVxuICAgICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSBhcmdzO1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXShzcGVjLnJhd1F1ZXJ5KCkuYXMoYWxpYXMpLCBsZWZ0LCByaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdGFibGUgc3BlY2lmaWNhdGlvblwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHNcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBXSEVSRTog6rCd7LK0IC0g7IKs7JqpOiAud2hlcmUoeyBcInUuaWRcIjogMSwgXCJ1LnN0YXR1c1wiOiBcImFjdGl2ZVwiIH0pXG4gIHdoZXJlKGNvbmRpdGlvbnM6IFdoZXJlQ29uZGl0aW9uPFRUYWJsZXM+KTogdGhpcztcbiAgLy8gV0hFUkU6IOy7rOufvCAtIOyCrOyaqTogLndoZXJlKFwidS5pZFwiLCAxKSwgLndoZXJlKFwidS5pZFwiLCBudWxsKVxuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gV0hFUkU6IOy7rOufvCAtIOyCrOyaqTogLndoZXJlKFwidS5pZFwiLCBcIj5cIiwgMTApLCAud2hlcmUoXCJ1LmlkXCIsIFwiIT1cIiwgbnVsbClcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yIHwgXCJsaWtlXCIgfCBcIm5vdCBsaWtlXCIsXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBXSEVSRTogU1FMIO2RnO2YhOyLnSAtIOyCrOyaqTogLndoZXJlKHB1cmkucmF3KFwiQ09OQ0FUKHUubmFtZSwgdS5lbWFpbClcIiksIFwibGlrZVwiLCBcIiV0ZXN0JVwiKVxuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgS25leC5SYXc+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yIHwgXCJsaWtlXCIgfCBcIm5vdCBsaWtlXCIsXG4gICAgdmFsdWU6IGFueSxcbiAgKTogdGhpcztcbiAgLy8gV0hFUkU6IOy7rOufvCAtIOyCrOyaqTogLndoZXJlKFwidS5pZFwiLCBcImxpa2VcIiwgXCIldGVzdCVcIilcbiAgd2hlcmUoLi4uYXJnczogW2NvbHVtbk9yQ29uZGl0aW9uczogYW55LCBvcGVyYXRvck9yVmFsdWU/OiBhbnksIHZhbHVlPzogYW55XSk6IHRoaXMge1xuICAgIGNvbnN0IFtjb2x1bW5PckNvbmRpdGlvbnMsIG9wZXJhdG9yT3JWYWx1ZSwgdmFsdWVdID0gYXJncztcbiAgICBpZiAodHlwZW9mIGNvbHVtbk9yQ29uZGl0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKG9wZXJhdG9yT3JWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU51bGwoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZShjb2x1bW5PckNvbmRpdGlvbnMsIG9wZXJhdG9yT3JWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBpZiAob3BlcmF0b3JPclZhbHVlID09PSBcIiE9XCIpIHtcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU5vdE51bGwoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvck9yVmFsdWUgPT09IFwiPVwiKSB7XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmVOdWxsKGNvbHVtbk9yQ29uZGl0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKGNvbHVtbk9yQ29uZGl0aW9ucywgb3BlcmF0b3JPclZhbHVlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKGNvbHVtbk9yQ29uZGl0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUgSU5cbiAgd2hlcmVJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVJbihjb2x1bW4sIHZhbHVlcyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8gV0hFUkUgTk9UIElOXG4gIHdoZXJlTm90SW48VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZXM6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdD4ge1xuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTm90SW4oY29sdW1uLCB2YWx1ZXMpO1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIFdIRVJFIE1BVENIXG4gIHdoZXJlTWF0Y2g8VENvbHVtbiBleHRlbmRzIEZ1bGx0ZXh0Q29sdW1uczxUVGFibGVzPj4oY29sdW1uOiBUQ29sdW1uLCB2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYE1BVENIICgke1N0cmluZyhjb2x1bW4pfSkgQUdBSU5TVCAoPylgLCBbdmFsdWVdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIEZVTExURVhUXG4gIHdoZXJlU2VhcmNoPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+IHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFRzUXVlcnlPcHRpb25zIHwgVHNRdWVyeUNvbmZpZyxcbiAgKTogdGhpcyB7XG4gICAgY29uc3Qgb3B0cyA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/ICh7IGNvbmZpZzogb3B0aW9ucyB9IGFzIFRzUXVlcnlPcHRpb25zKSA6IChvcHRpb25zID8/IHt9KTtcblxuICAgIGNvbnN0IHBhcnNlciA9IG9wdHMucGFyc2VyID8/IFwid2Vic2VhcmNoX3RvX3RzcXVlcnlcIjtcbiAgICBjb25zdCBjb25maWcgPSBvcHRzLmNvbmZpZyA/PyBcInNpbXBsZVwiO1xuICAgIGNvbnN0IGNvbHVtbkV4cHIgPVxuICAgICAgdHlwZW9mIGNvbHVtbiA9PT0gXCJvYmplY3RcIiAmJiBjb2x1bW4uX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIlxuICAgICAgICA/IGNvbHVtbi5fc3FsXG4gICAgICAgIDogU3RyaW5nKGNvbHVtbik7XG5cbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgJHtjb2x1bW5FeHByfSBAQCAke3BhcnNlcn0oPywgPylgLCBbY29uZmlnLCB2YWx1ZV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUgUkFXXG4gIHdoZXJlUmF3KHNxbDogc3RyaW5nLCBiaW5kaW5ncz86IHJlYWRvbmx5IHVua25vd25bXSk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlUmF3KHNxbCwgYmluZGluZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUg6rSE7Zi4IOq3uOujue2VkVxuICB3aGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKChidWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IG5ldyBXaGVyZUdyb3VwPFRUYWJsZXM+KGJ1aWxkZXIpO1xuICAgICAgY2FsbGJhY2soZ3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIG9yV2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS5vcldoZXJlKChidWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IG5ldyBXaGVyZUdyb3VwPFRUYWJsZXM+KGJ1aWxkZXIpO1xuICAgICAgY2FsbGJhY2soZ3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gT1JERVIgQllcbiAgb3JkZXJCeTxUQ29sdW1uIGV4dGVuZHMgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzLCBUUmVzdWx0Pj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIGRpcmVjdGlvbjogXCJhc2NcIiB8IFwiZGVzY1wiLFxuICApOiB0aGlzO1xuICBvcmRlckJ5KGNvbHVtbjogc3RyaW5nLCBkaXJlY3Rpb246IFwiYXNjXCIgfCBcImRlc2NcIiA9IFwiYXNjXCIpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS5vcmRlckJ5KGNvbHVtbiwgZGlyZWN0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOq4sOuzuCDsv7zrpqwg66mU7ISc65Oc65OkXG4gIGxpbWl0KGNvdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAoY291bnQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxpbWl0OiBtdXN0IGJlID49IDBcIik7XG4gICAgfVxuICAgIHRoaXMua25leFF1ZXJ5LmxpbWl0KGNvdW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9mZnNldChjb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgaWYgKGNvdW50IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBvZmZzZXQ6IG11c3QgYmUgPj0gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkub2Zmc2V0KGNvdW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEdST1VQIEJZXG4gIGdyb3VwQnk8VENvbHVtbnMgZXh0ZW5kcyBSZXN1bHRBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXMsIFRSZXN1bHQ+PiguLi5jb2x1bW5zOiBUQ29sdW1uc1tdKTogdGhpcztcbiAgZ3JvdXBCeSguLi5jb2x1bW5zOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5Lmdyb3VwQnkoLi4uKGNvbHVtbnMgYXMgc3RyaW5nW10pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEhBVklOR1xuICBoYXZpbmcoY29uZGl0aW9uOiBzdHJpbmcpOiB0aGlzO1xuICBoYXZpbmc8VENvbHVtbiBleHRlbmRzIFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcywgVFJlc3VsdD4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgIHZhbHVlOiBhbnksXG4gICk6IHRoaXM7XG4gIC8vIEhBVklORyDqtaztmIRcbiAgaGF2aW5nKC4uLmNvbmRpdGlvbnM6IGFueVtdKTogdGhpcyB7XG4gICAgaWYgKGNvbmRpdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBoYXZpbmcoXCJDT1VOVCgqKSA+IDEwXCIpXG4gICAgICB0aGlzLmtuZXhRdWVyeS5oYXZpbmcodGhpcy5rbmV4LnJhdyhjb25kaXRpb25zWzBdKSk7XG4gICAgfSBlbHNlIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMykge1xuICAgICAgLy8gaGF2aW5nKFwiY291bnRcIiwgXCI+XCIsIDEwKVxuICAgICAgdGhpcy5rbmV4UXVlcnkuaGF2aW5nKFxuICAgICAgICB0aGlzLmtuZXgucmF3KGNvbmRpdGlvbnNbMF0pLFxuICAgICAgICBjb25kaXRpb25zWzFdLFxuICAgICAgICB0aGlzLmtuZXgucmF3KGNvbmRpdGlvbnNbMl0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoYXZpbmcgYXJndW1lbnRzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOyLpO2WiSDrqZTshJzrk5zrk6QgLSB0aGVuYWJsZSDqtaztmIRcbiAgdGhlbjxUUmVzdWx0MSA9IEV4cGFuZDxUUmVzdWx0PltdLCBUUmVzdWx0MiA9IG5ldmVyPihcbiAgICBvbmZ1bGZpbGxlZD86ICgodmFsdWU6IEV4cGFuZDxUUmVzdWx0PltdKSA9PiBUUmVzdWx0MSB8IFByb21pc2VMaWtlPFRSZXN1bHQxPikgfCBudWxsLFxuICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPikgfCBudWxsLFxuICApOiBQcm9taXNlPFRSZXN1bHQxIHwgVFJlc3VsdDI+IHtcbiAgICBOYWl0ZS50KFwicHVyaTpleGVjdXRlZC1xdWVyeVwiLCB0aGlzLnRvUXVlcnkoKSk7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LnRoZW4ob25mdWxmaWxsZWQgYXMgYW55LCBvbnJlamVjdGVkKTtcbiAgfVxuICBjYXRjaDxUUmVzdWx0MiA9IG5ldmVyPihcbiAgICBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbCxcbiAgKTogUHJvbWlzZTxUUmVzdWx0IHwgVFJlc3VsdDI+IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkuY2F0Y2gob25yZWplY3RlZCk7XG4gIH1cbiAgZmluYWxseShvbmZpbmFsbHk/OiAoKCkgPT4gdm9pZCkgfCBudWxsKTogUHJvbWlzZTxUUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LmZpbmFsbHkob25maW5hbGx5KTtcbiAgfVxuXG4gIC8vIO2VmOuCmOunjCDsv7zrpqxcbiAgZmlyc3QoKTogUmVzb2x2ZWRQdXJpPEV4cGFuZDxUUmVzdWx0PiwgbmV2ZXI+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5maXJzdCgpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8g7L+866as7ZWcIOugiOy9lOuTnOyXkOyEnCDtirnsoJUg7Lus65+866eMIOy2lOy2nO2VnCDrsLDsl7Qg66as7YS0XG4gIHBsdWNrPFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUUmVzdWx0IHwgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzLCBUUmVzdWx0Pj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICApOiBSZXNvbHZlZFB1cmk8XG4gICAgVENvbHVtbiBleHRlbmRzIGtleW9mIFRSZXN1bHRcbiAgICAgID8gVFJlc3VsdFtUQ29sdW1uXVtdXG4gICAgICA6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICAgbmV2ZXJcbiAgPiB7XG4gICAgdGhpcy5rbmV4UXVlcnkucGx1Y2soY29sdW1uIGFzIHN0cmluZyk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyBJTlNFUlRcbiAgaW5zZXJ0KFxuICAgIGRhdGE6IEluc2VydERhdGE8U2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4sXG4gICk6IFJlc29sdmVkUHVyaTxJbnNlcnRSZXN1bHQsIFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5pbnNlcnQoZGF0YSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyBVUERBVEVcbiAgdXBkYXRlKGRhdGE6IFdoZXJlQ29uZGl0aW9uPFRUYWJsZXM+KTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIHRoaXMua25leFF1ZXJ5LnVwZGF0ZShkYXRhKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8vIEluY3JlbWVudFxuICBpbmNyZW1lbnQ8VENvbHVtbiBleHRlbmRzIE51bWVyaWNDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IG51bWJlcixcbiAgKTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNyZW1lbnQgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkuaW5jcmVtZW50KGNvbHVtbiwgdmFsdWUpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG4gIC8vIERlY3JlbWVudFxuICBkZWNyZW1lbnQ8VENvbHVtbiBleHRlbmRzIE51bWVyaWNDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IG51bWJlcixcbiAgKTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyZW1lbnQgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkuZGVjcmVtZW50KGNvbHVtbiwgdmFsdWUpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8gREVMRVRFXG4gIGRlbGV0ZSgpOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkuZGVsZXRlKCk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyDtmZXsnbgg7L+866asIOumrO2EtFxuICB0b1F1ZXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LnRvUXVlcnkoKTtcbiAgfVxuXG4gIC8vIOy/vOumrCDrlJTrsoTquYUg66Gc6re4IOy2nOugpVxuICBkZWJ1ZygpOiB0aGlzIHtcbiAgICBjb25zb2xlLmxvZyhgJHtjaGFsay5jeWFuKFwiW1B1cmkgRGVidWddXCIpfSAke2NoYWxrLnllbGxvdyh0aGlzLnRvUXVlcnkoKSl9YCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjbG9uZSgpOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFRSZXN1bHQ+IHtcbiAgICAvLyAnZHVhbCfsnYAg642U66+4IO2FjOydtOu4lOydtOupsCwg67CU66GcIOyVhOuemCDspITsl5DshJwga25leFF1ZXJ56rCAIOuNruyWtOyUjOybjOynkeuLiOuLpC5cbiAgICBjb25zdCBuZXdQdXJpID0gbmV3IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdD4odGhpcy5rbmV4LCBcImR1YWxcIik7XG4gICAgbmV3UHVyaS5rbmV4UXVlcnkgPSB0aGlzLmtuZXhRdWVyeS5jbG9uZSgpO1xuICAgIHJldHVybiBuZXdQdXJpO1xuICB9XG5cbiAgZm9ybWF0U1FMKHVuZm9ybWF0dGVkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNRTCDsmIjslb3slrQg66qp66GdXG4gICAgY29uc3Qga2V5d29yZHMgPSBbXG4gICAgICBcIlNFTEVDVFwiLFxuICAgICAgXCJGUk9NXCIsXG4gICAgICBcIldIRVJFXCIsXG4gICAgICBcIklOU0VSVFwiLFxuICAgICAgXCJJTlRPXCIsXG4gICAgICBcIlZBTFVFU1wiLFxuICAgICAgXCJVUERBVEVcIixcbiAgICAgIFwiREVMRVRFXCIsXG4gICAgICBcIkNSRUFURVwiLFxuICAgICAgXCJUQUJMRVwiLFxuICAgICAgXCJBTFRFUlwiLFxuICAgICAgXCJEUk9QXCIsXG4gICAgICBcIkpPSU5cIixcbiAgICAgIFwiT05cIixcbiAgICAgIFwiSU5ORVJcIixcbiAgICAgIFwiTEVGVFwiLFxuICAgICAgXCJSSUdIVFwiLFxuICAgICAgXCJGVUxMXCIsXG4gICAgICBcIk9VVEVSXCIsXG4gICAgICBcIkdST1VQXCIsXG4gICAgICBcIkJZXCIsXG4gICAgICBcIk9SREVSXCIsXG4gICAgICBcIkhBVklOR1wiLFxuICAgICAgXCJESVNUSU5DVFwiLFxuICAgICAgXCJMSU1JVFwiLFxuICAgICAgXCJPRkZTRVRcIixcbiAgICAgIFwiQVNcIixcbiAgICAgIFwiQU5EXCIsXG4gICAgICBcIk9SXCIsXG4gICAgICBcIk5PVFwiLFxuICAgICAgXCJJTlwiLFxuICAgICAgXCJMSUtFXCIsXG4gICAgICBcIklTXCIsXG4gICAgICBcIk5VTExcIixcbiAgICAgIFwiQ0FTRVwiLFxuICAgICAgXCJXSEVOXCIsXG4gICAgICBcIlRIRU5cIixcbiAgICAgIFwiRUxTRVwiLFxuICAgICAgXCJFTkRcIixcbiAgICAgIFwiVU5JT05cIixcbiAgICAgIFwiQUxMXCIsXG4gICAgICBcIkVYSVNUU1wiLFxuICAgICAgXCJCRVRXRUVOXCIsXG4gICAgXTtcblxuICAgIGxldCBmb3JtYXR0ZWQgPSB1bmZvcm1hdHRlZDtcblxuICAgIC8vIOyYiOyVveyWtOulvCDrjIDrrLjsnpDroZwg67OA7ZmYXG4gICAga2V5d29yZHMuZm9yRWFjaCgoa2V5d29yZCkgPT4ge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcYiR7a2V5d29yZH1cXFxcYmAsIFwiZ2lcIik7XG4gICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZShyZWdleCwga2V5d29yZC50b1VwcGVyQ2FzZSgpKTtcbiAgICB9KTtcblxuICAgIC8vIOyjvOyalCDsoIgg7JWe7JeQIOykhOuwlOq/iCDstpTqsIBcbiAgICBjb25zdCBtYWpvckNsYXVzZXMgPSBbXG4gICAgICBcIlNFTEVDVFwiLFxuICAgICAgXCJGUk9NXCIsXG4gICAgICBcIldIRVJFXCIsXG4gICAgICBcIkdST1VQIEJZXCIsXG4gICAgICBcIk9SREVSIEJZXCIsXG4gICAgICBcIkhBVklOR1wiLFxuICAgICAgXCJMSU1JVFwiLFxuICAgICAgXCJVTklPTlwiLFxuICAgIF07XG4gICAgbWFqb3JDbGF1c2VzLmZvckVhY2goKGNsYXVzZSkgPT4ge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxccysoJHtjbGF1c2V9KVxcXFxzK2AsIFwiZ2lcIik7XG4gICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZShyZWdleCwgYFxcbiR7Y2xhdXNlLnRvVXBwZXJDYXNlKCl9IGApO1xuICAgIH0pO1xuXG4gICAgLy8gSk9JTiDsoIgg7LKY66asXG4gICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoL1xccysoKD86SU5ORVJ8TEVGVHxSSUdIVHxGVUxMIE9VVEVSKVxccyspP0pPSU5cXHMrL2dpLCBcIlxcbiQxSk9JTiBcIik7XG5cbiAgICAvLyBBTkQsIE9SIOyhsOqxtCDsspjrpqxcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvXFxzKyhBTkR8T1IpXFxzKy9naSwgXCJcXG4gICQxIFwiKTtcblxuICAgIC8vIOq0hO2YuCDsspjrpqwg67CPIOuTpOyXrOyTsOq4sFxuICAgIGNvbnN0IGxpbmVzID0gZm9ybWF0dGVkLnNwbGl0KFwiXFxuXCIpO1xuICAgIGNvbnN0IGluZGVudGVkTGluZXMgPSBbXTtcbiAgICBsZXQgaW5kZW50TGV2ZWwgPSAwO1xuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgICAgaWYgKCF0cmltbWVkTGluZSkgY29udGludWU7XG5cbiAgICAgIC8vIOuLq+uKlCDqtITtmLjqsIAg7J6I7Jy866m0IOuTpOyXrOyTsOq4sCDroIjrsqgg6rCQ7IaMXG4gICAgICBjb25zdCBjbG9zaW5nUGFyZW5zID0gKHRyaW1tZWRMaW5lLm1hdGNoKC9cXCkvZykgfHwgW10pLmxlbmd0aDtcbiAgICAgIGNvbnN0IG9wZW5pbmdQYXJlbnMgPSAodHJpbW1lZExpbmUubWF0Y2goL1xcKC9nKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICBpZiAoY2xvc2luZ1BhcmVucyA+IDAgJiYgb3BlbmluZ1BhcmVucyA9PT0gMCkge1xuICAgICAgICBpbmRlbnRMZXZlbCA9IE1hdGgubWF4KDAsIGluZGVudExldmVsIC0gY2xvc2luZ1BhcmVucyk7XG4gICAgICB9XG5cbiAgICAgIC8vIO2YhOyerCDrk6Tsl6zsk7DquLAg7KCB7JqpXG4gICAgICBjb25zdCBpbmRlbnQgPSBcIiAgXCIucmVwZWF0KGluZGVudExldmVsKTtcbiAgICAgIGluZGVudGVkTGluZXMucHVzaChpbmRlbnQgKyB0cmltbWVkTGluZSk7XG5cbiAgICAgIC8vIOyXrOuKlCDqtITtmLjqsIAg7J6I7Jy866m0IOuTpOyXrOyTsOq4sCDroIjrsqgg7Kad6rCAXG4gICAgICBpZiAob3BlbmluZ1BhcmVucyA+IGNsb3NpbmdQYXJlbnMpIHtcbiAgICAgICAgaW5kZW50TGV2ZWwgKz0gb3BlbmluZ1BhcmVucyAtIGNsb3NpbmdQYXJlbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGVudGVkTGluZXMuam9pbihcIlxcblwiKS50cmltKCk7XG4gIH1cblxuICByYXcoc3FsOiBzdHJpbmcpOiBLbmV4LlJhdyB7XG4gICAgcmV0dXJuIHRoaXMua25leC5yYXcoc3FsKTtcbiAgfVxuXG4gIC8vIEtuZXgg7L+866asIOu5jOuNlCDsp4HsoJEg7KCR6re8XG4gIHJhd1F1ZXJ5KCk6IEtuZXguUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFdoZXJlR3JvdXA8VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBidWlsZGVyOiBLbmV4LlF1ZXJ5QnVpbGRlcikge31cblxuICAvLyB3aGVyZSDrqZTshJzrk5zrk6RcbiAgd2hlcmUoY29uZGl0aW9uczogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiB0aGlzO1xuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogV2hlcmVPcGVyYXRvcixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIHdoZXJlKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLndoZXJlKGFyZ3NbMF0sIC4uLmFyZ3Muc2xpY2UoMSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gb3JXaGVyZSDrqZTshJzrk5zrk6RcbiAgb3JXaGVyZShjb25kaXRpb25zOiBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPik6IHRoaXM7XG4gIG9yV2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9yV2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogV2hlcmVPcGVyYXRvcixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9yV2hlcmUoLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZShhcmdzWzBdLCAuLi5hcmdzLnNsaWNlKDEpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOykkeyyqSDqt7jro7lcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzO1xuICB3aGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZSgoc3ViQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3Qgc3ViR3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihzdWJCdWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKHN1Ykdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvcldoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcztcbiAgb3JXaGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlKChzdWJCdWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBzdWJHcm91cCA9IG5ldyBXaGVyZUdyb3VwPFRUYWJsZXM+KHN1YkJ1aWxkZXIpO1xuICAgICAgY2FsbGJhY2soc3ViR3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8vIEpPSU4g7KCIIOq3uOujueyXkOuKlCBMZWZ07JmAIFJpZ2h07JeQIOuMgO2VnCDsiJzshJzqsIAg7ZWE7JqU7ZWY7KeAIOyViuycvOuvgOuhnCwg66qo65OgIOqyveyasOydmCDsiJjrpbwg6rOE7IKw7ZW07JW87ZWoLlxuZXhwb3J0IGNsYXNzIEpvaW5DbGF1c2VHcm91cDxcbiAgVExlZnQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBUUmlnaHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FsbGJhY2s6IEtuZXguSm9pbkNsYXVzZSkge31cblxuICAvLyBPTihBTkQpOiDsu6zrn7wgPSDsu6zrn7xcbiAgb24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4pOiB0aGlzO1xuICBvbihsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Pik6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCA9IOqwklxuICBvbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIHJpZ2h0OiBFeHRyYWN0Q29sdW1uVHlwZTxUUmlnaHQsIEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCAo7Jew7IKw7J6QKSDsu6zrn7xcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICApOiB0aGlzO1xuICBvbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCAo7Jew7IKw7J6QKSDqsJJcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oQU5EKTog7L2c67CxXG4gIG9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VExlZnQsIFRSaWdodD4pID0+IHZvaWQpOiB0aGlzO1xuICBvbihjYWxsYmFjazogKG5lc3RlZDogSm9pbkNsYXVzZUdyb3VwPFRSaWdodCwgVExlZnQ+KSA9PiB2b2lkKTogdGhpcztcbiAgLy8gT04oQU5EKSDqtaztmIRcbiAgb24oLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICB0aGlzLmNhbGxiYWNrLm9uKC4uLihhcmdzIGFzIFtzdHJpbmcsIHN0cmluZ10pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9OKE9SKTog7Lus65+8ID0g7Lus65+8XG4gIG9yT24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4pOiB0aGlzO1xuICBvck9uKGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgcmlnaHQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+KTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgPSDqsJJcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgKOyXsOyCsOyekCkg7Lus65+8XG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICApOiB0aGlzO1xuICBvck9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgKOyXsOyCsOyekCkg6rCSXG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VFJpZ2h0LCBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBPTihPUik6IOy9nOuwsVxuICBvck9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VExlZnQsIFRSaWdodD4pID0+IHZvaWQpOiB0aGlzO1xuICBvck9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VFJpZ2h0LCBUTGVmdD4pID0+IHZvaWQpOiB0aGlzO1xuICAvLyBPTihPUikg6rWs7ZiEXG4gIG9yT24oLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICB0aGlzLmNhbGxiYWNrLm9yT24oLi4uKGFyZ3MgYXMgW3N0cmluZywgc3RyaW5nXSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qXG4gIFRSZXNvbHZlZDog7L+866asIOyLpO2WiSDtm4Qg67CY7ZmY65CgIOqysOqzvCDtg4DsnoVcbiAgVFJldHVybmluZzogUkVUVVJOSU5HIOygiOyXkCDsgqzsmqnrkKAg7YOA7J6FXG4qL1xuZXhwb3J0IGNsYXNzIFJlc29sdmVkUHVyaTxUUmVzb2x2ZWQsIFRSZXR1cm5pbmc+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGtuZXhRdWVyeTogS25leC5RdWVyeUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBrbmV4OiBLbmV4LFxuICApIHt9XG5cbiAgdG9RdWVyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS50b1F1ZXJ5KCk7XG4gIH1cblxuICBkZWJ1ZygpOiB0aGlzIHtcbiAgICBjb25zb2xlLmxvZyhgJHtjaGFsay5jeWFuKFwiW1B1cmkgRGVidWddXCIpfSAke2NoYWxrLnllbGxvdyh0aGlzLnRvUXVlcnkoKSl9YCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0aGVuPFRSZXN1bHQxID0gVFJlc29sdmVkLCBUUmVzdWx0MiA9IG5ldmVyPihcbiAgICBvbmZ1bGZpbGxlZD86ICgodmFsdWU6IFRSZXNvbHZlZCkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4pIHwgbnVsbCxcbiAgICBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbCxcbiAgKTogUHJvbWlzZTxUUmVzdWx0MSB8IFRSZXN1bHQyPiB7XG4gICAgTmFpdGUudChcInB1cmk6ZXhlY3V0ZWQtcXVlcnlcIiwgdGhpcy50b1F1ZXJ5KCkpO1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS50aGVuKG9uZnVsZmlsbGVkIGFzIGFueSwgb25yZWplY3RlZCk7XG4gIH1cbiAgY2F0Y2g8VFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc29sdmVkIHwgVFJlc3VsdDI+IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkuY2F0Y2gob25yZWplY3RlZCk7XG4gIH1cbiAgZmluYWxseShvbmZpbmFsbHk/OiAoKCkgPT4gdm9pZCkgfCBudWxsKTogUHJvbWlzZTxUUmVzb2x2ZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkuZmluYWxseShvbmZpbmFsbHkpO1xuICB9XG5cbiAgLy8gT04gQ09ORkxJQ1QgLSDsu6zrn7wg6riw67CYXG4gIG9uQ29uZmxpY3Q8VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFRSZXR1cm5pbmc+PihcbiAgICBjb2x1bW5zOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICBhY3Rpb24/OiBPbkNvbmZsaWN0QWN0aW9uPFRUYWJsZXM+LFxuICApOiB0aGlzIHtcbiAgICBjb25zdCB0YXJnZXQgPSBBcnJheS5pc0FycmF5KGNvbHVtbnMpID8gY29sdW1ucyA6IFtjb2x1bW5zXTtcblxuICAgIGlmICghYWN0aW9uIHx8IGFjdGlvbiA9PT0gXCJub3RoaW5nXCIpIHtcbiAgICAgIC8vIERPIE5PVEhJTkdcbiAgICAgIHRoaXMua25leFF1ZXJ5Lm9uQ29uZmxpY3QodGFyZ2V0KS5pZ25vcmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRE8gVVBEQVRFXG4gICAgICBjb25zdCB7IHVwZGF0ZSB9ID0gYWN0aW9uO1xuXG4gICAgICAvLyBhY3Rpb24udXBkYXRlIOuwsOyXtCDtmJXtg5wgOiBbXCJuYW1lXCIsIFwiZW1haWxcIl1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHVwZGF0ZSkpIHtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnkub25Db25mbGljdCh0YXJnZXQpLm1lcmdlKHVwZGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhY3Rpb24udXBkYXRlIOqwneyytCDtmJXtg5w6IHsgbmFtZTogXCJKb2huXCIsIGNvdW50OiByYXcoLi4uKSB9XG4gICAgICAgIGNvbnN0IG1lcmdlT2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModXBkYXRlKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIFwiX3R5cGVcIiBpbiB2YWx1ZSAmJlxuICAgICAgICAgICAgdmFsdWUuX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gU3FsRXhwcmVzc2lvbiDihpIga25leC5yYXcoKeuhnCDrs4DtmZhcbiAgICAgICAgICAgIG1lcmdlT2JqW2tleV0gPSB0aGlzLmtuZXgucmF3KCh2YWx1ZSBhcyBTcWxFeHByZXNzaW9uPGFueT4pLl9zcWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDsnbzrsJgg6rCSXG4gICAgICAgICAgICBtZXJnZU9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5rbmV4UXVlcnkub25Db25mbGljdCh0YXJnZXQpLm1lcmdlKG1lcmdlT2JqKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFJFVFVSTklORzogXCIqXCIgLSDsoITssrQg7Lus65+8XG4gIHJldHVybmluZyhjb2x1bW46IFwiKlwiKTogUmVzb2x2ZWRQdXJpPFRSZXR1cm5pbmdbXSwgbmV2ZXI+O1xuICAvLyBSRVRVUk5JTkc6IOuLqOydvCDsu6zrn7xcbiAgcmV0dXJuaW5nPFRDb2x1bW4gZXh0ZW5kcyBDb2x1bW5LZXlzPFRSZXR1cm5pbmc+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICk6IFJlc29sdmVkUHVyaTxQaWNrPFRSZXR1cm5pbmcsIFRDb2x1bW4+W10sIG5ldmVyPjtcbiAgLy8gUkVUVVJOSU5HOiDrs7XsiJgg7Lus65+8ICjrsLDsl7QpXG4gIHJldHVybmluZzxUQ29sdW1uIGV4dGVuZHMgQ29sdW1uS2V5czxUUmV0dXJuaW5nPj4oXG4gICAgY29sdW1uczogVENvbHVtbltdLFxuICApOiBSZXNvbHZlZFB1cmk8UGljazxUUmV0dXJuaW5nLCBUQ29sdW1uPltdLCBuZXZlcj47XG4gIC8vIFJFVFVSTklORyDqtaztmIRcbiAgcmV0dXJuaW5nKGNvbHVtbk9yQ29sdW1uczogc3RyaW5nIHwgc3RyaW5nW10pOiBSZXNvbHZlZFB1cmk8YW55W10sIG5ldmVyPiB7XG4gICAgdGhpcy5rbmV4UXVlcnkucmV0dXJuaW5nKGNvbHVtbk9yQ29sdW1ucyk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJjaGFsayIsIk5haXRlIiwiUHVyaSIsImtuZXhRdWVyeSIsImtuZXgiLCJ0YWJsZU5hbWVPclNwZWMiLCJmcm9tIiwiZW50cmllcyIsIk9iamVjdCIsImxlbmd0aCIsIkVycm9yIiwiYWxpYXMiLCJzcGVjIiwic3VicXVlcnlCdWlsZGVyIiwicmF3UXVlcnkiLCJhcyIsImNvdW50IiwiY29sdW1uIiwiX3R5cGUiLCJfcmV0dXJuIiwiX3NxbCIsInN1bSIsImF2ZyIsIm1heCIsIm1pbiIsImNvbmNhdCIsImFyZ3MiLCJqb2luIiwidXBwZXIiLCJsb3dlciIsInJhd1N0cmluZyIsInNxbCIsInJhd051bWJlciIsInJhd0Jvb2xlYW4iLCJyYXdEYXRlIiwiaGlnaGxpZ2h0IiwicXVlcnkiLCJvcHRpb25zIiwicGFyc2VyIiwiY29uZmlnIiwibWF4V29yZHMiLCJtaW5Xb3JkcyIsInNob3J0V29yZCIsImhpZ2hsaWdodEFsbCIsIm1heEZyYWdtZW50cyIsInN0YXJ0U2VsIiwic3RvcFNlbCIsImZyYWdtZW50RGVsaW1pdGVyIiwiaGxPcHRpb25QYXJ0cyIsInVuZGVmaW5lZCIsInB1c2giLCJobE9wdGlvbnMiLCJzZWxlY3QiLCJzZWxlY3RPYmoiLCJmbGF0U2VsZWN0IiwiZmxhdHRlblNlbGVjdCIsInNlbGVjdENsYXVzZXMiLCJjb2x1bW5PckZ1bmN0aW9uIiwicmF3IiwiY29sdW1uUGF0aCIsInByZWZpeCIsImtleSIsInZhbHVlIiwiZnVsbEtleSIsIm5lc3RlZCIsImFzc2lnbiIsImFwcGVuZFNlbGVjdCIsInNlbGVjdEFsbCIsImNsZWFyIiwic3RhdGVtZW50IiwiY2xlYXJKb2luIiwiX3N0YXRlbWVudHMiLCJmaWx0ZXIiLCJzIiwiX2FsaWFzIiwiX3RhYmxlIiwidGFibGUiLCJfX2NvbW1vbkpvaW4iLCJsZWZ0Sm9pbiIsImpvaW5UeXBlIiwidGFibGVOYW1lIiwiY2FsbGJhY2siLCJqb2luQ2xhdXNlIiwiSm9pbkNsYXVzZUdyb3VwIiwibGVmdCIsInJpZ2h0Iiwid2hlcmUiLCJjb2x1bW5PckNvbmRpdGlvbnMiLCJvcGVyYXRvck9yVmFsdWUiLCJ3aGVyZU51bGwiLCJ3aGVyZU5vdE51bGwiLCJ3aGVyZUluIiwidmFsdWVzIiwid2hlcmVOb3RJbiIsIndoZXJlTWF0Y2giLCJ3aGVyZVJhdyIsIlN0cmluZyIsIndoZXJlU2VhcmNoIiwib3B0cyIsImNvbHVtbkV4cHIiLCJiaW5kaW5ncyIsIndoZXJlR3JvdXAiLCJidWlsZGVyIiwiZ3JvdXAiLCJXaGVyZUdyb3VwIiwib3JXaGVyZUdyb3VwIiwib3JXaGVyZSIsIm9yZGVyQnkiLCJkaXJlY3Rpb24iLCJsaW1pdCIsIm9mZnNldCIsImdyb3VwQnkiLCJjb2x1bW5zIiwiaGF2aW5nIiwiY29uZGl0aW9ucyIsInRoZW4iLCJvbmZ1bGZpbGxlZCIsIm9ucmVqZWN0ZWQiLCJ0IiwidG9RdWVyeSIsImNhdGNoIiwiZmluYWxseSIsIm9uZmluYWxseSIsImZpcnN0IiwiUmVzb2x2ZWRQdXJpIiwicGx1Y2siLCJpbnNlcnQiLCJkYXRhIiwidXBkYXRlIiwiaW5jcmVtZW50IiwiZGVjcmVtZW50IiwiZGVsZXRlIiwiZGVidWciLCJjb25zb2xlIiwibG9nIiwiY3lhbiIsInllbGxvdyIsImNsb25lIiwibmV3UHVyaSIsImZvcm1hdFNRTCIsInVuZm9ybWF0dGVkIiwia2V5d29yZHMiLCJmb3JtYXR0ZWQiLCJmb3JFYWNoIiwia2V5d29yZCIsInJlZ2V4IiwiUmVnRXhwIiwicmVwbGFjZSIsInRvVXBwZXJDYXNlIiwibWFqb3JDbGF1c2VzIiwiY2xhdXNlIiwibGluZXMiLCJzcGxpdCIsImluZGVudGVkTGluZXMiLCJpbmRlbnRMZXZlbCIsImxpbmUiLCJ0cmltbWVkTGluZSIsInRyaW0iLCJjbG9zaW5nUGFyZW5zIiwibWF0Y2giLCJvcGVuaW5nUGFyZW5zIiwiTWF0aCIsImluZGVudCIsInJlcGVhdCIsInNsaWNlIiwic3ViQnVpbGRlciIsInN1Ykdyb3VwIiwib24iLCJvck9uIiwib25Db25mbGljdCIsImFjdGlvbiIsInRhcmdldCIsIkFycmF5IiwiaXNBcnJheSIsImlnbm9yZSIsIm1lcmdlIiwibWVyZ2VPYmoiLCJyZXR1cm5pbmciLCJjb2x1bW5PckNvbHVtbnMiXSwibWFwcGluZ3MiOiJBQUFBLHNGQUFzRixHQUN0Riw2RUFBNkUsR0FFN0UsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLE9BQU9DLFdBQVcsUUFBUTtBQUUxQixTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBNEJ2QyxPQUFPLE1BQU1DOztJQUNIQyxVQUE2QjtJQUtyQyxZQUNFLEFBQU9DLElBQVUsRUFDakJDLGVBQW9CLENBQ3BCO2FBRk9ELE9BQUFBO1FBR1AsSUFBSSxPQUFPQyxvQkFBb0IsVUFBVTtZQUN2QyxnQ0FBZ0M7WUFDaEMsSUFBSSxDQUFDRixTQUFTLEdBQUcsSUFBSSxDQUFDQyxJQUFJLENBQUNDLGlCQUFpQkMsSUFBSSxDQUFDRDtRQUNuRCxPQUFPLElBQUksT0FBT0Esb0JBQW9CLFVBQVU7WUFDOUMsTUFBTUUsVUFBVUMsT0FBT0QsT0FBTyxDQUFDRjtZQUMvQixJQUFJRSxRQUFRRSxNQUFNLEtBQUssR0FBRztnQkFDeEIsTUFBTSxJQUFJQyxNQUFNO1lBQ2xCO1lBQ0FYLE9BQU9RLE9BQU8sQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sQ0FBQ0ksT0FBT0MsS0FBSyxHQUFHTCxPQUFPLENBQUMsRUFBRTtZQUNoQyxJQUFJLE9BQU9LLFNBQVMsVUFBVTtnQkFDNUIsSUFBSSxDQUFDVCxTQUFTLEdBQUcsSUFBSSxDQUFDQyxJQUFJLENBQUNRLE1BQU1OLElBQUksQ0FBQztvQkFBRSxDQUFDSyxNQUFNLEVBQUVDO2dCQUFLO1lBQ3hELE9BQU8sSUFBSUEsZ0JBQWdCVixNQUFNO2dCQUMvQixNQUFNVyxrQkFBa0JELEtBQUtFLFFBQVE7Z0JBQ3JDLElBQUksQ0FBQ1gsU0FBUyxHQUFHLElBQUksQ0FBQ0MsSUFBSSxDQUFDRSxJQUFJLENBQUNPLGdCQUFnQkUsRUFBRSxDQUFDSjtZQUNyRCxPQUFPO2dCQUNMLE1BQU0sSUFBSUQsTUFBTTtZQUNsQjtRQUNGLE9BQU87WUFDTCxNQUFNLElBQUlBLE1BQU07UUFDbEI7SUFDRjtJQUVBLHlDQUF5QztJQUN6QyxPQUFPTSxNQUFNQyxTQUFpQixHQUFHLEVBQTJCO1FBQzFELE9BQU87WUFDTEMsT0FBTztZQUNQQyxTQUFTO1lBQ1RDLE1BQU0sQ0FBQyxNQUFNLEVBQUVILE9BQU8sVUFBVSxDQUFDO1FBQ25DO0lBQ0Y7SUFDQSxPQUFPSSxJQUFJSixNQUFjLEVBQTJCO1FBQ2xELE9BQU87WUFDTEMsT0FBTztZQUNQQyxTQUFTO1lBQ1RDLE1BQU0sQ0FBQyxJQUFJLEVBQUVILE9BQU8sQ0FBQyxDQUFDO1FBQ3hCO0lBQ0Y7SUFDQSxPQUFPSyxJQUFJTCxNQUFjLEVBQTJCO1FBQ2xELE9BQU87WUFDTEMsT0FBTztZQUNQQyxTQUFTO1lBQ1RDLE1BQU0sQ0FBQyxJQUFJLEVBQUVILE9BQU8sQ0FBQyxDQUFDO1FBQ3hCO0lBQ0Y7SUFDQSxPQUFPTSxJQUFJTixNQUFjLEVBQTJCO1FBQ2xELE9BQU87WUFDTEMsT0FBTztZQUNQQyxTQUFTO1lBQ1RDLE1BQU0sQ0FBQyxJQUFJLEVBQUVILE9BQU8sQ0FBQyxDQUFDO1FBQ3hCO0lBQ0Y7SUFDQSxPQUFPTyxJQUFJUCxNQUFjLEVBQTJCO1FBQ2xELE9BQU87WUFDTEMsT0FBTztZQUNQQyxTQUFTO1lBQ1RDLE1BQU0sQ0FBQyxJQUFJLEVBQUVILE9BQU8sQ0FBQyxDQUFDO1FBQ3hCO0lBQ0Y7SUFDQSxPQUFPUSxPQUFPLEdBQUdDLElBQWMsRUFBMkI7UUFDeEQsT0FBTztZQUNMUixPQUFPO1lBQ1BDLFNBQVM7WUFDVEMsTUFBTSxDQUFDLE9BQU8sRUFBRU0sS0FBS0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDO0lBQ0Y7SUFDQSxPQUFPQyxNQUFNWCxNQUFjLEVBQTJCO1FBQ3BELE9BQU87WUFDTEMsT0FBTztZQUNQQyxTQUFTO1lBQ1RDLE1BQU0sQ0FBQyxNQUFNLEVBQUVILE9BQU8sQ0FBQyxDQUFDO1FBQzFCO0lBQ0Y7SUFDQSxPQUFPWSxNQUFNWixNQUFjLEVBQTJCO1FBQ3BELE9BQU87WUFDTEMsT0FBTztZQUNQQyxTQUFTO1lBQ1RDLE1BQU0sQ0FBQyxNQUFNLEVBQUVILE9BQU8sQ0FBQyxDQUFDO1FBQzFCO0lBQ0Y7SUFFQSwyQkFBMkI7SUFDM0IsT0FBT2EsVUFBVUMsR0FBVyxFQUEyQjtRQUNyRCxPQUFPO1lBQUViLE9BQU87WUFBa0JDLFNBQVM7WUFBVUMsTUFBTVc7UUFBSTtJQUNqRTtJQUNBLE9BQU9DLFVBQVVELEdBQVcsRUFBMkI7UUFDckQsT0FBTztZQUFFYixPQUFPO1lBQWtCQyxTQUFTO1lBQVVDLE1BQU1XO1FBQUk7SUFDakU7SUFDQSxPQUFPRSxXQUFXRixHQUFXLEVBQTRCO1FBQ3ZELE9BQU87WUFBRWIsT0FBTztZQUFrQkMsU0FBUztZQUFXQyxNQUFNVztRQUFJO0lBQ2xFO0lBQ0EsT0FBT0csUUFBUUgsR0FBVyxFQUF5QjtRQUNqRCxPQUFPO1lBQUViLE9BQU87WUFBa0JDLFNBQVM7WUFBUUMsTUFBTVc7UUFBSTtJQUMvRDtJQUVBOzs7Ozs7Ozs7Ozs7R0FZQyxHQUNELE9BQU9JLFVBQ0xsQixNQUFjLEVBQ2RtQixLQUFhLEVBQ2JDLE9BQTBCLEVBQ0Q7UUFDekIsTUFBTSxFQUNKQyxTQUFTLHNCQUFzQixFQUMvQkMsU0FBUyxRQUFRLEVBQ2pCQyxRQUFRLEVBQ1JDLFFBQVEsRUFDUkMsU0FBUyxFQUNUQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsUUFBUSxFQUNSQyxPQUFPLEVBQ1BDLGlCQUFpQixFQUNsQixHQUFHVixXQUFXLENBQUM7UUFFaEIsTUFBTVcsZ0JBQTBCLEVBQUU7UUFFbEMsSUFBSVIsYUFBYVMsV0FBV0QsY0FBY0UsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFVixVQUFVO1FBQ3JFLElBQUlDLGFBQWFRLFdBQVdELGNBQWNFLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRVQsVUFBVTtRQUNyRSxJQUFJQyxjQUFjTyxXQUFXRCxjQUFjRSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUVSLFdBQVc7UUFDeEUsSUFBSUMsaUJBQWlCTSxXQUFXRCxjQUFjRSxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUVQLGNBQWM7UUFDakYsSUFBSUMsaUJBQWlCSyxXQUFXRCxjQUFjRSxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUVOLGNBQWM7UUFDakYsSUFBSUMsYUFBYUksV0FBV0QsY0FBY0UsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFTCxTQUFTLENBQUMsQ0FBQztRQUN2RSxJQUFJQyxZQUFZRyxXQUFXRCxjQUFjRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUVKLFFBQVEsQ0FBQyxDQUFDO1FBQ3BFLElBQUlDLHNCQUFzQkUsV0FDeEJELGNBQWNFLElBQUksQ0FBQyxDQUFDLG1CQUFtQixFQUFFSCxrQkFBa0IsQ0FBQyxDQUFDO1FBRS9ELE1BQU1JLFlBQVlILGNBQWN2QyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRXVDLGNBQWNyQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRztRQUVqRixtQ0FBbUM7UUFDbkMsT0FBT3pCLEtBQUs0QixTQUFTLENBQ25CLENBQUMsYUFBYSxFQUFFUyxPQUFPLEdBQUcsRUFBRXRCLE9BQU8sRUFBRSxFQUFFcUIsT0FBTyxFQUFFLEVBQUVDLE9BQU8sSUFBSSxFQUFFSCxNQUFNLEVBQUUsRUFBRWUsVUFBVSxDQUFDLENBQUM7SUFFekY7SUFFQSxxQkFBcUI7SUFDckJDLE9BQ0VDLFNBQWtCLEVBQzJDO1FBQzdELG1CQUFtQjtRQUNuQixNQUFNQyxhQUFhLElBQUksQ0FBQ0MsYUFBYSxDQUFDRjtRQUV0QyxNQUFNRyxnQkFBdUMsRUFBRTtRQUUvQyxLQUFLLE1BQU0sQ0FBQzdDLE9BQU84QyxpQkFBaUIsSUFBSWpELE9BQU9ELE9BQU8sQ0FBQytDLFlBQWE7WUFDbEUsSUFBSSxPQUFPRyxxQkFBcUIsWUFBWUEsaUJBQWlCdkMsS0FBSyxLQUFLLGtCQUFrQjtnQkFDdkYsYUFBYTtnQkFDYnNDLGNBQWNOLElBQUksQ0FBQyxJQUFJLENBQUM5QyxJQUFJLENBQUNzRCxHQUFHLENBQUMsR0FBR0QsaUJBQWlCckMsSUFBSSxDQUFDLElBQUksRUFBRVQsT0FBTztZQUN6RSxPQUFPO2dCQUNMLFlBQVk7Z0JBQ1osTUFBTWdELGFBQWFGO2dCQUNuQixJQUFJOUMsVUFBVWdELFlBQVk7b0JBQ3hCLDJCQUEyQjtvQkFDM0JILGNBQWNOLElBQUksQ0FBQ1M7Z0JBQ3JCLE9BQU87b0JBQ0wsV0FBVztvQkFDWEgsY0FBY04sSUFBSSxDQUFDLEdBQUdTLFdBQVcsSUFBSSxFQUFFaEQsT0FBTztnQkFDaEQ7WUFDRjtRQUNGO1FBRUEsSUFBSSxDQUFDUixTQUFTLENBQUNpRCxNQUFNLENBQUNJO1FBQ3RCLE9BQU8sSUFBSTtJQUNiO0lBRUE7Ozs7R0FJQyxHQUNELEFBQVFELGNBQWNGLFNBQThCLEVBQUVPLFNBQVMsRUFBRSxFQUF1QjtRQUN0RixNQUFNTixhQUFrQyxDQUFDO1FBRXpDLEtBQUssTUFBTSxDQUFDTyxLQUFLQyxNQUFNLElBQUl0RCxPQUFPRCxPQUFPLENBQUM4QyxXQUFZO1lBQ3BELE1BQU1VLFVBQVVILFNBQVMsR0FBR0EsT0FBTyxFQUFFLEVBQUVDLEtBQUssR0FBR0E7WUFFL0MsSUFBSSxPQUFPQyxVQUFVLFlBQVlBLFVBQVUsUUFBUSxDQUFFLENBQUEsV0FBV0EsS0FBSSxHQUFJO2dCQUN0RSxvQkFBb0I7Z0JBQ3BCLE1BQU1FLFNBQVMsSUFBSSxDQUFDVCxhQUFhLENBQUNPLE9BQU9DO2dCQUN6Q3ZELE9BQU95RCxNQUFNLENBQUNYLFlBQVlVO1lBQzVCLE9BQU87Z0JBQ0wsb0NBQW9DO2dCQUNwQ1YsVUFBVSxDQUFDUyxRQUFRLEdBQUdEO1lBQ3hCO1FBQ0Y7UUFFQSxPQUFPUjtJQUNUO0lBRUEsbURBQW1EO0lBQ25EWSxhQUNFYixTQUFrQixFQUNxRDtRQUN2RSxtQkFBbUI7UUFDbkIsTUFBTUMsYUFBYSxJQUFJLENBQUNDLGFBQWEsQ0FBQ0Y7UUFFdEMsTUFBTUcsZ0JBQXVDLEVBQUU7UUFFL0MsS0FBSyxNQUFNLENBQUM3QyxPQUFPOEMsaUJBQWlCLElBQUlqRCxPQUFPRCxPQUFPLENBQUMrQyxZQUFhO1lBQ2xFLElBQUksT0FBT0cscUJBQXFCLFlBQVlBLGlCQUFpQnZDLEtBQUssS0FBSyxrQkFBa0I7Z0JBQ3ZGc0MsY0FBY04sSUFBSSxDQUFDLElBQUksQ0FBQzlDLElBQUksQ0FBQ3NELEdBQUcsQ0FBQyxHQUFHRCxpQkFBaUJyQyxJQUFJLENBQUMsSUFBSSxFQUFFVCxPQUFPO1lBQ3pFLE9BQU87Z0JBQ0wsTUFBTWdELGFBQWFGO2dCQUNuQixJQUFJOUMsVUFBVWdELFlBQVk7b0JBQ3hCSCxjQUFjTixJQUFJLENBQUNTO2dCQUNyQixPQUFPO29CQUNMSCxjQUFjTixJQUFJLENBQUMsR0FBR1MsV0FBVyxJQUFJLEVBQUVoRCxPQUFPO2dCQUNoRDtZQUNGO1FBQ0Y7UUFFQSxJQUFJLENBQUNSLFNBQVMsQ0FBQ2lELE1BQU0sQ0FBQ0k7UUFDdEIsT0FBTyxJQUFJO0lBQ2I7SUFFQSxXQUFXO0lBQ1hXLFlBQThEO1FBQzVELElBQUksQ0FBQ2hFLFNBQVMsQ0FBQ2lELE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUk7SUFDYjtJQUVBLFFBQVE7SUFDUmdCLE1BQU1DLFNBQTBCLEVBQVE7UUFDdEMsSUFBSSxDQUFDbEUsU0FBUyxDQUFDaUUsS0FBSyxDQUFDQztRQUNyQixPQUFPLElBQUk7SUFDYjtJQUVBLG1CQUFtQjtJQUNuQkMsVUFBVTNELEtBQWEsRUFBUTtRQUM1QixJQUFJLENBQUNSLFNBQVMsQ0FBU29FLFdBQVcsR0FBRyxBQUFDLElBQUksQ0FBQ3BFLFNBQVMsQ0FBU29FLFdBQVcsQ0FBQ0MsTUFBTSxDQUFDLENBQUNDO1lBQ2hGLElBQUksY0FBY0EsR0FBRztnQkFDbkIsTUFBTSxDQUFDQyxRQUFRQyxPQUFPLEdBQUduRSxPQUFPRCxPQUFPLENBQUNrRSxFQUFFRyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNuRCxPQUFPRixXQUFXL0Q7WUFDcEIsT0FBTztnQkFDTCxPQUFPO1lBQ1Q7UUFDRjtRQUNBLE9BQU8sSUFBSTtJQUNiO0lBK0NBLGFBQWE7SUFDYmdCLEtBQUt0QixlQUFvQixFQUFFLEdBQUdxQixJQUFXLEVBQU87UUFDOUMsT0FBTyxJQUFJLENBQUNtRCxZQUFZLENBQUMsUUFBUXhFLG9CQUFvQnFCO0lBQ3ZEO0lBZ0RBLGtCQUFrQjtJQUNsQm9ELFNBQVN6RSxlQUFvQixFQUFFLEdBQUdxQixJQUFXLEVBQU87UUFDbEQsT0FBTyxJQUFJLENBQUNtRCxZQUFZLENBQUMsWUFBWXhFLG9CQUFvQnFCO0lBQzNEO0lBRUFtRCxhQUFhRSxRQUE2QixFQUFFMUUsZUFBb0IsRUFBRSxHQUFHcUIsSUFBVyxFQUFRO1FBQ3RGLElBQUksT0FBT3JCLG9CQUFvQixVQUFVO1lBQ3ZDLDZCQUE2QjtZQUM3QixNQUFNMkUsWUFBWTNFO1lBRWxCLElBQUlxQixLQUFLakIsTUFBTSxLQUFLLEtBQUssT0FBT2lCLElBQUksQ0FBQyxFQUFFLEtBQUssWUFBWTtnQkFDdEQsMEJBQTBCO2dCQUMxQixNQUFNdUQsV0FBV3ZELElBQUksQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUN2QixTQUFTLENBQUM0RSxTQUFTLENBQUNDLFdBQVcsQ0FBQ0U7b0JBQ25DRCxTQUFTLElBQUlFLGdCQUFnQkQ7Z0JBQy9CO1lBQ0YsT0FBTztnQkFDTCw2QkFBNkI7Z0JBQzdCLE1BQU0sQ0FBQ0UsTUFBTUMsTUFBTSxHQUFHM0Q7Z0JBQ3RCLElBQUksQ0FBQ3ZCLFNBQVMsQ0FBQzRFLFNBQVMsQ0FBQ0MsV0FBV0ksTUFBTUM7WUFDNUM7UUFDRixPQUFPLElBQUksT0FBT2hGLG9CQUFvQixVQUFVO1lBQzlDLDBFQUEwRTtZQUMxRSxNQUFNRSxVQUFVQyxPQUFPRCxPQUFPLENBQUNGO1lBQy9CLElBQUlFLFFBQVFFLE1BQU0sS0FBSyxHQUFHO2dCQUN4QixNQUFNLElBQUlDLE1BQU07WUFDbEI7WUFDQVgsT0FBT1EsT0FBTyxDQUFDLEVBQUU7WUFDakIsTUFBTSxDQUFDLENBQUNJLE9BQU9DLEtBQUssQ0FBQyxHQUFHTDtZQUV4QixJQUFJLE9BQU9LLFNBQVMsVUFBVTtnQkFDNUIsaUNBQWlDO2dCQUNqQyxJQUFJYyxLQUFLakIsTUFBTSxLQUFLLEtBQUssT0FBT2lCLElBQUksQ0FBQyxFQUFFLEtBQUssWUFBWTtvQkFDdEQsV0FBVztvQkFDWCxNQUFNdUQsV0FBV3ZELElBQUksQ0FBQyxFQUFFO29CQUN4QixJQUFJLENBQUN2QixTQUFTLENBQUM0RSxTQUFTLENBQUM7d0JBQUUsQ0FBQ3BFLE1BQU0sRUFBRUM7b0JBQUssR0FBRyxDQUFDc0U7d0JBQzNDRCxTQUFTLElBQUlFLGdCQUFnQkQ7b0JBQy9CO2dCQUNGLE9BQU87b0JBQ0wsU0FBUztvQkFDVCxNQUFNLENBQUNFLE1BQU1DLE1BQU0sR0FBRzNEO29CQUN0QixJQUFJLENBQUN2QixTQUFTLENBQUM0RSxTQUFTLENBQUM7d0JBQUUsQ0FBQ3BFLE1BQU0sRUFBRUM7b0JBQUssR0FBR3dFLE1BQU1DO2dCQUNwRDtZQUNGLE9BQU8sSUFBSXpFLGdCQUFnQlYsTUFBTTtnQkFDL0Isb0NBQW9DO2dCQUNwQyxJQUFJd0IsS0FBS2pCLE1BQU0sS0FBSyxLQUFLLE9BQU9pQixJQUFJLENBQUMsRUFBRSxLQUFLLFlBQVk7b0JBQ3RELFdBQVc7b0JBQ1gsTUFBTXVELFdBQVd2RCxJQUFJLENBQUMsRUFBRTtvQkFDeEIsSUFBSSxDQUFDdkIsU0FBUyxDQUFDNEUsU0FBUyxDQUFDbkUsS0FBS0UsUUFBUSxHQUFHQyxFQUFFLENBQUNKLFFBQVEsQ0FBQ3VFO3dCQUNuREQsU0FBUyxJQUFJRSxnQkFBZ0JEO29CQUMvQjtnQkFDRixPQUFPO29CQUNMLFNBQVM7b0JBQ1QsTUFBTSxDQUFDRSxNQUFNQyxNQUFNLEdBQUczRDtvQkFDdEIsSUFBSSxDQUFDdkIsU0FBUyxDQUFDNEUsU0FBUyxDQUFDbkUsS0FBS0UsUUFBUSxHQUFHQyxFQUFFLENBQUNKLFFBQVF5RSxNQUFNQztnQkFDNUQ7WUFDRixPQUFPO2dCQUNMLE1BQU0sSUFBSTNFLE1BQU07WUFDbEI7UUFDRixPQUFPO1lBQ0wsTUFBTSxJQUFJQSxNQUFNO1FBQ2xCO1FBRUEsT0FBTyxJQUFJO0lBQ2I7SUFxQkEsbURBQW1EO0lBQ25ENEUsTUFBTSxHQUFHNUQsSUFBbUUsRUFBUTtRQUNsRixNQUFNLENBQUM2RCxvQkFBb0JDLGlCQUFpQjFCLE1BQU0sR0FBR3BDO1FBQ3JELElBQUksT0FBTzZELHVCQUF1QixVQUFVO1lBQzFDLElBQUksQ0FBQ3BGLFNBQVMsQ0FBQ21GLEtBQUssQ0FBQ0M7UUFDdkIsT0FBTyxJQUFJLE9BQU96QixVQUFVLGFBQWE7WUFDdkMsSUFBSTBCLG9CQUFvQixNQUFNO2dCQUM1QixJQUFJLENBQUNyRixTQUFTLENBQUNzRixTQUFTLENBQUNGO2dCQUN6QixPQUFPLElBQUk7WUFDYjtZQUNBLElBQUksQ0FBQ3BGLFNBQVMsQ0FBQ21GLEtBQUssQ0FBQ0Msb0JBQW9CQztRQUMzQyxPQUFPLElBQUksT0FBTzFCLFVBQVUsYUFBYTtZQUN2QyxJQUFJQSxVQUFVLE1BQU07Z0JBQ2xCLElBQUkwQixvQkFBb0IsTUFBTTtvQkFDNUIsSUFBSSxDQUFDckYsU0FBUyxDQUFDdUYsWUFBWSxDQUFDSDtvQkFDNUIsT0FBTyxJQUFJO2dCQUNiLE9BQU8sSUFBSUMsb0JBQW9CLEtBQUs7b0JBQ2xDLElBQUksQ0FBQ3JGLFNBQVMsQ0FBQ3NGLFNBQVMsQ0FBQ0Y7b0JBQ3pCLE9BQU8sSUFBSTtnQkFDYjtZQUNGO1lBQ0EsSUFBSSxDQUFDcEYsU0FBUyxDQUFDbUYsS0FBSyxDQUFDQyxvQkFBb0JDLGlCQUFpQjFCO1FBQzVELE9BQU87WUFDTCxJQUFJLENBQUMzRCxTQUFTLENBQUNtRixLQUFLLENBQUNDO1FBQ3ZCO1FBQ0EsT0FBTyxJQUFJO0lBQ2I7SUFFQSxXQUFXO0lBQ1hJLFFBQ0UxRSxNQUFlLEVBQ2YyRSxNQUFzRCxFQUNyQjtRQUNqQyxJQUFJLENBQUN6RixTQUFTLENBQUN3RixPQUFPLENBQUMxRSxRQUFRMkU7UUFDL0IsT0FBTyxJQUFJO0lBQ2I7SUFFQSxlQUFlO0lBQ2ZDLFdBQ0U1RSxNQUFlLEVBQ2YyRSxNQUFzRCxFQUNyQjtRQUNqQyxJQUFJLENBQUN6RixTQUFTLENBQUMwRixVQUFVLENBQUM1RSxRQUFRMkU7UUFDbEMsT0FBTyxJQUFJO0lBQ2I7SUFFQSxjQUFjO0lBQ2RFLFdBQXFEN0UsTUFBZSxFQUFFNkMsS0FBYSxFQUFRO1FBQ3pGLElBQUksQ0FBQzNELFNBQVMsQ0FBQzRGLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRUMsT0FBTy9FLFFBQVEsYUFBYSxDQUFDLEVBQUU7WUFBQzZDO1NBQU07UUFDeEUsT0FBTyxJQUFJO0lBQ2I7SUFFQSxpQkFBaUI7SUFDakJtQyxZQUNFaEYsTUFBZSxFQUNmNkMsS0FBYSxFQUNiekIsT0FBd0MsRUFDbEM7UUFDTixNQUFNNkQsT0FDSixPQUFPN0QsWUFBWSxXQUFZO1lBQUVFLFFBQVFGO1FBQVEsSUFBd0JBLFdBQVcsQ0FBQztRQUV2RixNQUFNQyxTQUFTNEQsS0FBSzVELE1BQU0sSUFBSTtRQUM5QixNQUFNQyxTQUFTMkQsS0FBSzNELE1BQU0sSUFBSTtRQUM5QixNQUFNNEQsYUFDSixPQUFPbEYsV0FBVyxZQUFZQSxPQUFPQyxLQUFLLEtBQUssbUJBQzNDRCxPQUFPRyxJQUFJLEdBQ1g0RSxPQUFPL0U7UUFFYixJQUFJLENBQUNkLFNBQVMsQ0FBQzRGLFFBQVEsQ0FBQyxHQUFHSSxXQUFXLElBQUksRUFBRTdELE9BQU8sTUFBTSxDQUFDLEVBQUU7WUFBQ0M7WUFBUXVCO1NBQU07UUFDM0UsT0FBTyxJQUFJO0lBQ2I7SUFFQSxZQUFZO0lBQ1ppQyxTQUFTaEUsR0FBVyxFQUFFcUUsUUFBNkIsRUFBUTtRQUN6RCxJQUFJLENBQUNqRyxTQUFTLENBQUM0RixRQUFRLENBQUNoRSxLQUFLcUU7UUFDN0IsT0FBTyxJQUFJO0lBQ2I7SUFFQSxlQUFlO0lBQ2ZDLFdBQVdwQixRQUEwQyxFQUFRO1FBQzNELElBQUksQ0FBQzlFLFNBQVMsQ0FBQ21GLEtBQUssQ0FBQyxDQUFDZ0I7WUFDcEIsTUFBTUMsUUFBUSxJQUFJQyxXQUFvQkY7WUFDdENyQixTQUFTc0I7UUFDWDtRQUNBLE9BQU8sSUFBSTtJQUNiO0lBQ0FFLGFBQWF4QixRQUEwQyxFQUFRO1FBQzdELElBQUksQ0FBQzlFLFNBQVMsQ0FBQ3VHLE9BQU8sQ0FBQyxDQUFDSjtZQUN0QixNQUFNQyxRQUFRLElBQUlDLFdBQW9CRjtZQUN0Q3JCLFNBQVNzQjtRQUNYO1FBQ0EsT0FBTyxJQUFJO0lBQ2I7SUFPQUksUUFBUTFGLE1BQWMsRUFBRTJGLFlBQTRCLEtBQUssRUFBUTtRQUMvRCxJQUFJLENBQUN6RyxTQUFTLENBQUN3RyxPQUFPLENBQUMxRixRQUFRMkY7UUFDL0IsT0FBTyxJQUFJO0lBQ2I7SUFFQSxhQUFhO0lBQ2JDLE1BQU03RixLQUFhLEVBQVE7UUFDekIsSUFBSUEsUUFBUSxHQUFHO1lBQ2IsTUFBTSxJQUFJTixNQUFNO1FBQ2xCO1FBQ0EsSUFBSSxDQUFDUCxTQUFTLENBQUMwRyxLQUFLLENBQUM3RjtRQUNyQixPQUFPLElBQUk7SUFDYjtJQUVBOEYsT0FBTzlGLEtBQWEsRUFBUTtRQUMxQixJQUFJQSxRQUFRLEdBQUc7WUFDYixNQUFNLElBQUlOLE1BQU07UUFDbEI7UUFDQSxJQUFJLENBQUNQLFNBQVMsQ0FBQzJHLE1BQU0sQ0FBQzlGO1FBQ3RCLE9BQU8sSUFBSTtJQUNiO0lBSUErRixRQUFRLEdBQUdDLE9BQWlCLEVBQVE7UUFDbEMsSUFBSSxDQUFDN0csU0FBUyxDQUFDNEcsT0FBTyxJQUFLQztRQUMzQixPQUFPLElBQUk7SUFDYjtJQVNBLFlBQVk7SUFDWkMsT0FBTyxHQUFHQyxVQUFpQixFQUFRO1FBQ2pDLElBQUlBLFdBQVd6RyxNQUFNLEtBQUssR0FBRztZQUMzQiwwQkFBMEI7WUFDMUIsSUFBSSxDQUFDTixTQUFTLENBQUM4RyxNQUFNLENBQUMsSUFBSSxDQUFDN0csSUFBSSxDQUFDc0QsR0FBRyxDQUFDd0QsVUFBVSxDQUFDLEVBQUU7UUFDbkQsT0FBTyxJQUFJQSxXQUFXekcsTUFBTSxLQUFLLEdBQUc7WUFDbEMsMkJBQTJCO1lBQzNCLElBQUksQ0FBQ04sU0FBUyxDQUFDOEcsTUFBTSxDQUNuQixJQUFJLENBQUM3RyxJQUFJLENBQUNzRCxHQUFHLENBQUN3RCxVQUFVLENBQUMsRUFBRSxHQUMzQkEsVUFBVSxDQUFDLEVBQUUsRUFDYixJQUFJLENBQUM5RyxJQUFJLENBQUNzRCxHQUFHLENBQUN3RCxVQUFVLENBQUMsRUFBRTtRQUUvQixPQUFPO1lBQ0wsTUFBTSxJQUFJeEcsTUFBTTtRQUNsQjtRQUNBLE9BQU8sSUFBSTtJQUNiO0lBRUEsd0JBQXdCO0lBQ3hCeUcsS0FDRUMsV0FBcUYsRUFDckZDLFVBQXVFLEVBQ3pDO1FBQzlCcEgsTUFBTXFILENBQUMsQ0FBQyx1QkFBdUIsSUFBSSxDQUFDQyxPQUFPO1FBQzNDLE9BQU8sSUFBSSxDQUFDcEgsU0FBUyxDQUFDZ0gsSUFBSSxDQUFDQyxhQUFvQkM7SUFDakQ7SUFDQUcsTUFDRUgsVUFBdUUsRUFDMUM7UUFDN0IsT0FBTyxJQUFJLENBQUNsSCxTQUFTLENBQUNxSCxLQUFLLENBQUNIO0lBQzlCO0lBQ0FJLFFBQVFDLFNBQStCLEVBQW9CO1FBQ3pELE9BQU8sSUFBSSxDQUFDdkgsU0FBUyxDQUFDc0gsT0FBTyxDQUFDQztJQUNoQztJQUVBLFNBQVM7SUFDVEMsUUFBOEM7UUFDNUMsSUFBSSxDQUFDeEgsU0FBUyxDQUFDd0gsS0FBSztRQUNwQixPQUFPLElBQUlDLGFBQWEsSUFBSSxDQUFDekgsU0FBUyxFQUFFLElBQUksQ0FBQ0MsSUFBSTtJQUNuRDtJQUVBLDZCQUE2QjtJQUM3QnlILE1BQ0U1RyxNQUFlLEVBTWY7UUFDQSxJQUFJLENBQUNkLFNBQVMsQ0FBQzBILEtBQUssQ0FBQzVHO1FBQ3JCLE9BQU8sSUFBSTJHLGFBQWEsSUFBSSxDQUFDekgsU0FBUyxFQUFFLElBQUksQ0FBQ0MsSUFBSTtJQUNuRDtJQUVBLFNBQVM7SUFDVDBILE9BQ0VDLElBQTJDLEVBQ1k7UUFDdkQsSUFBSSxDQUFDNUgsU0FBUyxDQUFDMkgsTUFBTSxDQUFDQztRQUN0QixPQUFPLElBQUlILGFBQWEsSUFBSSxDQUFDekgsU0FBUyxFQUFFLElBQUksQ0FBQ0MsSUFBSTtJQUNuRDtJQUVBLFNBQVM7SUFDVDRILE9BQU9ELElBQTZCLEVBQW1EO1FBQ3JGLElBQUksQ0FBQzVILFNBQVMsQ0FBQzZILE1BQU0sQ0FBQ0Q7UUFDdEIsT0FBTyxJQUFJSCxhQUFhLElBQUksQ0FBQ3pILFNBQVMsRUFBRSxJQUFJLENBQUNDLElBQUk7SUFDbkQ7SUFFQSxZQUFZO0lBQ1o2SCxVQUNFaEgsTUFBZSxFQUNmNkMsS0FBYSxFQUNvQztRQUNqRCxJQUFJQSxTQUFTLEdBQUc7WUFDZCxNQUFNLElBQUlwRCxNQUFNO1FBQ2xCO1FBQ0EsSUFBSSxDQUFDUCxTQUFTLENBQUM4SCxTQUFTLENBQUNoSCxRQUFRNkM7UUFDakMsT0FBTyxJQUFJOEQsYUFBYSxJQUFJLENBQUN6SCxTQUFTLEVBQUUsSUFBSSxDQUFDQyxJQUFJO0lBQ25EO0lBQ0EsWUFBWTtJQUNaOEgsVUFDRWpILE1BQWUsRUFDZjZDLEtBQWEsRUFDb0M7UUFDakQsSUFBSUEsU0FBUyxHQUFHO1lBQ2QsTUFBTSxJQUFJcEQsTUFBTTtRQUNsQjtRQUNBLElBQUksQ0FBQ1AsU0FBUyxDQUFDK0gsU0FBUyxDQUFDakgsUUFBUTZDO1FBQ2pDLE9BQU8sSUFBSThELGFBQWEsSUFBSSxDQUFDekgsU0FBUyxFQUFFLElBQUksQ0FBQ0MsSUFBSTtJQUNuRDtJQUVBLFNBQVM7SUFDVCtILFNBQTBEO1FBQ3hELElBQUksQ0FBQ2hJLFNBQVMsQ0FBQ2dJLE1BQU07UUFDckIsT0FBTyxJQUFJUCxhQUFhLElBQUksQ0FBQ3pILFNBQVMsRUFBRSxJQUFJLENBQUNDLElBQUk7SUFDbkQ7SUFFQSxXQUFXO0lBQ1htSCxVQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQ3BILFNBQVMsQ0FBQ29ILE9BQU87SUFDL0I7SUFFQSxlQUFlO0lBQ2ZhLFFBQWM7UUFDWkMsUUFBUUMsR0FBRyxDQUFDLEdBQUd0SSxNQUFNdUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUV2SSxNQUFNd0ksTUFBTSxDQUFDLElBQUksQ0FBQ2pCLE9BQU8sS0FBSztRQUMzRSxPQUFPLElBQUk7SUFDYjtJQUVBa0IsUUFBeUM7UUFDdkMsa0RBQWtEO1FBQ2xELE1BQU1DLFVBQVUsSUFBSXhJLEtBQWdDLElBQUksQ0FBQ0UsSUFBSSxFQUFFO1FBQy9Ec0ksUUFBUXZJLFNBQVMsR0FBRyxJQUFJLENBQUNBLFNBQVMsQ0FBQ3NJLEtBQUs7UUFDeEMsT0FBT0M7SUFDVDtJQUVBQyxVQUFVQyxXQUFtQixFQUFVO1FBQ3JDLGFBQWE7UUFDYixNQUFNQyxXQUFXO1lBQ2Y7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7U0FDRDtRQUVELElBQUlDLFlBQVlGO1FBRWhCLGVBQWU7UUFDZkMsU0FBU0UsT0FBTyxDQUFDLENBQUNDO1lBQ2hCLE1BQU1DLFFBQVEsSUFBSUMsT0FBTyxDQUFDLEdBQUcsRUFBRUYsUUFBUSxHQUFHLENBQUMsRUFBRTtZQUM3Q0YsWUFBWUEsVUFBVUssT0FBTyxDQUFDRixPQUFPRCxRQUFRSSxXQUFXO1FBQzFEO1FBRUEsaUJBQWlCO1FBQ2pCLE1BQU1DLGVBQWU7WUFDbkI7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtTQUNEO1FBQ0RBLGFBQWFOLE9BQU8sQ0FBQyxDQUFDTztZQUNwQixNQUFNTCxRQUFRLElBQUlDLE9BQU8sQ0FBQyxLQUFLLEVBQUVJLE9BQU8sS0FBSyxDQUFDLEVBQUU7WUFDaERSLFlBQVlBLFVBQVVLLE9BQU8sQ0FBQ0YsT0FBTyxDQUFDLEVBQUUsRUFBRUssT0FBT0YsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNuRTtRQUVBLFlBQVk7UUFDWk4sWUFBWUEsVUFBVUssT0FBTyxDQUFDLHFEQUFxRDtRQUVuRixnQkFBZ0I7UUFDaEJMLFlBQVlBLFVBQVVLLE9BQU8sQ0FBQyxvQkFBb0I7UUFFbEQsZUFBZTtRQUNmLE1BQU1JLFFBQVFULFVBQVVVLEtBQUssQ0FBQztRQUM5QixNQUFNQyxnQkFBZ0IsRUFBRTtRQUN4QixJQUFJQyxjQUFjO1FBRWxCLEtBQUssTUFBTUMsUUFBUUosTUFBTztZQUN4QixNQUFNSyxjQUFjRCxLQUFLRSxJQUFJO1lBQzdCLElBQUksQ0FBQ0QsYUFBYTtZQUVsQix3QkFBd0I7WUFDeEIsTUFBTUUsZ0JBQWdCLEFBQUNGLENBQUFBLFlBQVlHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQUFBRCxFQUFHdEosTUFBTTtZQUM3RCxNQUFNdUosZ0JBQWdCLEFBQUNKLENBQUFBLFlBQVlHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQUFBRCxFQUFHdEosTUFBTTtZQUU3RCxJQUFJcUosZ0JBQWdCLEtBQUtFLGtCQUFrQixHQUFHO2dCQUM1Q04sY0FBY08sS0FBSzFJLEdBQUcsQ0FBQyxHQUFHbUksY0FBY0k7WUFDMUM7WUFFQSxhQUFhO1lBQ2IsTUFBTUksU0FBUyxLQUFLQyxNQUFNLENBQUNUO1lBQzNCRCxjQUFjdkcsSUFBSSxDQUFDZ0gsU0FBU047WUFFNUIsd0JBQXdCO1lBQ3hCLElBQUlJLGdCQUFnQkYsZUFBZTtnQkFDakNKLGVBQWVNLGdCQUFnQkY7WUFDakM7UUFDRjtRQUVBLE9BQU9MLGNBQWM5SCxJQUFJLENBQUMsTUFBTWtJLElBQUk7SUFDdEM7SUFFQW5HLElBQUkzQixHQUFXLEVBQVk7UUFDekIsT0FBTyxJQUFJLENBQUMzQixJQUFJLENBQUNzRCxHQUFHLENBQUMzQjtJQUN2QjtJQUVBLG1CQUFtQjtJQUNuQmpCLFdBQThCO1FBQzVCLE9BQU8sSUFBSSxDQUFDWCxTQUFTO0lBQ3ZCO0FBQ0Y7QUFFQSxPQUFPLE1BQU1xRzs7SUFDWCxZQUFZLEFBQVFGLE9BQTBCLENBQUU7YUFBNUJBLFVBQUFBO0lBQTZCO0lBYWpEaEIsTUFBTSxHQUFHNUQsSUFBVyxFQUF1QjtRQUN6QyxJQUFJLENBQUM0RSxPQUFPLENBQUNoQixLQUFLLENBQUM1RCxJQUFJLENBQUMsRUFBRSxLQUFLQSxLQUFLMEksS0FBSyxDQUFDO1FBQzFDLE9BQU8sSUFBSTtJQUNiO0lBYUExRCxRQUFRLEdBQUdoRixJQUFXLEVBQXVCO1FBQzNDLElBQUksQ0FBQzRFLE9BQU8sQ0FBQ0ksT0FBTyxDQUFDaEYsSUFBSSxDQUFDLEVBQUUsS0FBS0EsS0FBSzBJLEtBQUssQ0FBQztRQUM1QyxPQUFPLElBQUk7SUFDYjtJQUlBL0QsV0FBV3BCLFFBQTBDLEVBQXVCO1FBQzFFLElBQUksQ0FBQ3FCLE9BQU8sQ0FBQ2hCLEtBQUssQ0FBQyxDQUFDK0U7WUFDbEIsTUFBTUMsV0FBVyxJQUFJOUQsV0FBb0I2RDtZQUN6Q3BGLFNBQVNxRjtRQUNYO1FBQ0EsT0FBTyxJQUFJO0lBQ2I7SUFFQTdELGFBQWF4QixRQUEwQyxFQUF1QjtRQUM1RSxJQUFJLENBQUNxQixPQUFPLENBQUNJLE9BQU8sQ0FBQyxDQUFDMkQ7WUFDcEIsTUFBTUMsV0FBVyxJQUFJOUQsV0FBb0I2RDtZQUN6Q3BGLFNBQVNxRjtRQUNYO1FBQ0EsT0FBTyxJQUFJO0lBQ2I7QUFDRjtBQUVBLDhEQUE4RDtBQUM5RCxPQUFPLE1BQU1uRjs7SUFJWCxZQUFZLEFBQVFGLFFBQXlCLENBQUU7YUFBM0JBLFdBQUFBO0lBQTRCO0lBdUNoRCxhQUFhO0lBQ2JzRixHQUFHLEdBQUc3SSxJQUFXLEVBQVE7UUFDdkIsSUFBSSxDQUFDdUQsUUFBUSxDQUFDc0YsRUFBRSxJQUFLN0k7UUFDckIsT0FBTyxJQUFJO0lBQ2I7SUF1Q0EsWUFBWTtJQUNaOEksS0FBSyxHQUFHOUksSUFBVyxFQUFRO1FBQ3pCLElBQUksQ0FBQ3VELFFBQVEsQ0FBQ3VGLElBQUksSUFBSzlJO1FBQ3ZCLE9BQU8sSUFBSTtJQUNiO0FBQ0Y7QUFFQTs7O0FBR0EsR0FDQSxPQUFPLE1BQU1rRzs7O0lBQ1gsWUFDRSxBQUFPekgsU0FBNEIsRUFDbkMsQUFBUUMsSUFBVSxDQUNsQjthQUZPRCxZQUFBQTthQUNDQyxPQUFBQTtJQUNQO0lBRUhtSCxVQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQ3BILFNBQVMsQ0FBQ29ILE9BQU87SUFDL0I7SUFFQWEsUUFBYztRQUNaQyxRQUFRQyxHQUFHLENBQUMsR0FBR3RJLE1BQU11SSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRXZJLE1BQU13SSxNQUFNLENBQUMsSUFBSSxDQUFDakIsT0FBTyxLQUFLO1FBQzNFLE9BQU8sSUFBSTtJQUNiO0lBRUFKLEtBQ0VDLFdBQTZFLEVBQzdFQyxVQUF1RSxFQUN6QztRQUM5QnBILE1BQU1xSCxDQUFDLENBQUMsdUJBQXVCLElBQUksQ0FBQ0MsT0FBTztRQUMzQyxPQUFPLElBQUksQ0FBQ3BILFNBQVMsQ0FBQ2dILElBQUksQ0FBQ0MsYUFBb0JDO0lBQ2pEO0lBQ0FHLE1BQ0VILFVBQXVFLEVBQ3hDO1FBQy9CLE9BQU8sSUFBSSxDQUFDbEgsU0FBUyxDQUFDcUgsS0FBSyxDQUFDSDtJQUM5QjtJQUNBSSxRQUFRQyxTQUErQixFQUFzQjtRQUMzRCxPQUFPLElBQUksQ0FBQ3ZILFNBQVMsQ0FBQ3NILE9BQU8sQ0FBQ0M7SUFDaEM7SUFFQSxzQkFBc0I7SUFDdEIrQyxXQUNFekQsT0FBMEIsRUFDMUIwRCxNQUFrQyxFQUM1QjtRQUNOLE1BQU1DLFNBQVNDLE1BQU1DLE9BQU8sQ0FBQzdELFdBQVdBLFVBQVU7WUFBQ0E7U0FBUTtRQUUzRCxJQUFJLENBQUMwRCxVQUFVQSxXQUFXLFdBQVc7WUFDbkMsYUFBYTtZQUNiLElBQUksQ0FBQ3ZLLFNBQVMsQ0FBQ3NLLFVBQVUsQ0FBQ0UsUUFBUUcsTUFBTTtRQUMxQyxPQUFPO1lBQ0wsWUFBWTtZQUNaLE1BQU0sRUFBRTlDLE1BQU0sRUFBRSxHQUFHMEM7WUFFbkIsMENBQTBDO1lBQzFDLElBQUlFLE1BQU1DLE9BQU8sQ0FBQzdDLFNBQVM7Z0JBQ3pCLElBQUksQ0FBQzdILFNBQVMsQ0FBQ3NLLFVBQVUsQ0FBQ0UsUUFBUUksS0FBSyxDQUFDL0M7WUFDMUMsT0FBTztnQkFDTCx5REFBeUQ7Z0JBQ3pELE1BQU1nRCxXQUFnQyxDQUFDO2dCQUV2QyxLQUFLLE1BQU0sQ0FBQ25ILEtBQUtDLE1BQU0sSUFBSXRELE9BQU9ELE9BQU8sQ0FBQ3lILFFBQVM7b0JBQ2pELElBQ0VsRSxTQUNBLE9BQU9BLFVBQVUsWUFDakIsV0FBV0EsU0FDWEEsTUFBTTVDLEtBQUssS0FBSyxrQkFDaEI7d0JBQ0EsaUNBQWlDO3dCQUNqQzhKLFFBQVEsQ0FBQ25ILElBQUksR0FBRyxJQUFJLENBQUN6RCxJQUFJLENBQUNzRCxHQUFHLENBQUMsQUFBQ0ksTUFBNkIxQyxJQUFJO29CQUNsRSxPQUFPO3dCQUNMLE9BQU87d0JBQ1A0SixRQUFRLENBQUNuSCxJQUFJLEdBQUdDO29CQUNsQjtnQkFDRjtnQkFFQSxJQUFJLENBQUMzRCxTQUFTLENBQUNzSyxVQUFVLENBQUNFLFFBQVFJLEtBQUssQ0FBQ0M7WUFDMUM7UUFDRjtRQUVBLE9BQU8sSUFBSTtJQUNiO0lBWUEsZUFBZTtJQUNmQyxVQUFVQyxlQUFrQyxFQUE4QjtRQUN4RSxJQUFJLENBQUMvSyxTQUFTLENBQUM4SyxTQUFTLENBQUNDO1FBQ3pCLE9BQU8sSUFBSXRELGFBQWEsSUFBSSxDQUFDekgsU0FBUyxFQUFFLElBQUksQ0FBQ0MsSUFBSTtJQUNuRDtBQUNGIn0=
|
|
@@ -94,5 +94,33 @@ type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (
|
|
|
94
94
|
export type SelectAllResult<TTables extends Record<string, any>> = UnionToIntersection<{
|
|
95
95
|
[K in keyof TTables]: TTables[K] extends infer T ? T extends LeftJoinedMarker ? Partial<OmitInternalTypeKeys<T>> : OmitInternalTypeKeys<T> : never;
|
|
96
96
|
}[keyof TTables]>;
|
|
97
|
+
type TsQueryParser = "to_tsquery" | "plainto_tsquery" | "phraseto_tsquery" | "websearch_to_tsquery";
|
|
98
|
+
export type TsQueryConfig = "simple" | "english";
|
|
99
|
+
export type TsQueryOptions = {
|
|
100
|
+
parser?: TsQueryParser;
|
|
101
|
+
config?: TsQueryConfig;
|
|
102
|
+
};
|
|
103
|
+
export type HighlightOptions = {
|
|
104
|
+
/** 쿼리 변환 함수 (기본값: "websearch_to_tsquery") */
|
|
105
|
+
parser?: TsQueryParser;
|
|
106
|
+
/** 텍스트 검색 설정 (기본값: "simple") */
|
|
107
|
+
config?: TsQueryConfig;
|
|
108
|
+
/** 최대 단어 수 (기본값: 35) */
|
|
109
|
+
maxWords?: number;
|
|
110
|
+
/** 최소 단어 수 (기본값: 15) */
|
|
111
|
+
minWords?: number;
|
|
112
|
+
/** 헤드라인 시작/끝에서 제거할 짧은 단어 길이 (기본값: 3) */
|
|
113
|
+
shortWord?: number;
|
|
114
|
+
/** true면 전체 문서를 헤드라인으로 사용 (기본값: false) */
|
|
115
|
+
highlightAll?: boolean;
|
|
116
|
+
/** 표시할 최대 텍스트 조각 수 (기본값: 0, 조각 미사용) */
|
|
117
|
+
maxFragments?: number;
|
|
118
|
+
/** 쿼리 단어 시작 구분자 (기본값: "<b>") */
|
|
119
|
+
startSel?: string;
|
|
120
|
+
/** 쿼리 단어 끝 구분자 (기본값: "</b>") */
|
|
121
|
+
stopSel?: string;
|
|
122
|
+
/** 조각 구분자 (기본값: " ... ") */
|
|
123
|
+
fragmentDelimiter?: string;
|
|
124
|
+
};
|
|
97
125
|
export {};
|
|
98
126
|
//# sourceMappingURL=puri.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puri.types.d.ts","sourceRoot":"","sources":["../../src/database/puri.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"puri.types.d.ts","sourceRoot":"","sources":["../../src/database/puri.types.ts"],"names":[],"mappings":"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"}
|