@aerokit/sdk 12.78.0 → 12.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/bpm/process.js +4 -1
- package/dist/cjs/bpm/tasks.js +3 -1
- package/dist/cjs/bpm/tracer.js +3 -1
- package/dist/cjs/cms/cmis.js +105 -177
- package/dist/cjs/db/database.js +5 -1
- package/dist/cjs/db/query.js +19 -1
- package/dist/cjs/db/repository.js +2 -1
- package/dist/cjs/db/sql.js +5 -2
- package/dist/cjs/etcd/client.js +4 -1
- package/dist/cjs/http/errors/ForbiddenError.js +9 -9
- package/dist/cjs/http/errors/ValidationError.js +9 -9
- package/dist/cjs/http/request.js +2 -1
- package/dist/cjs/http/response.js +102 -188
- package/dist/cjs/http/rs/resource-http-controller.js +4 -1
- package/dist/cjs/http/rs/resource-mappings.js +6 -3
- package/dist/cjs/http/rs/resource-method.js +10 -1
- package/dist/cjs/http/rs/resource.js +11 -1
- package/dist/cjs/http/upload.js +3 -1
- package/dist/cjs/io/files.js +5 -7
- package/dist/cjs/io/streams.js +5 -1
- package/dist/cjs/io/zip.js +4 -1
- package/dist/cjs/job/scheduler.js +4 -1
- package/dist/cjs/kafka/consumer.js +3 -2
- package/dist/cjs/kafka/producer.js +3 -1
- package/dist/cjs/log/logging.js +2 -1
- package/dist/cjs/mail/client.js +2 -1
- package/dist/cjs/messaging/consumer.js +3 -1
- package/dist/cjs/messaging/producer.js +3 -1
- package/dist/cjs/mongodb/client.js +26 -1
- package/dist/cjs/mongodb/dao.js +3 -1
- package/dist/cjs/net/soap.js +15 -1
- package/dist/cjs/net/websockets.js +5 -1
- package/dist/cjs/platform/engines.js +2 -1
- package/dist/cjs/platform/os.js +7 -9
- package/dist/cjs/platform/problems.js +7 -13
- package/dist/cjs/platform/registry.js +4 -1
- package/dist/cjs/platform/repository.js +4 -1
- package/dist/cjs/platform/workspace.js +8 -1
- package/dist/cjs/redis/client.js +2 -1
- package/dist/cjs/security/oauth.js +2 -1
- package/dist/cjs/template/engines.js +6 -1
- package/dist/dts/db/query.d.ts +10 -0
- package/dist/esm/bpm/process.mjs +4 -1
- package/dist/esm/bpm/tasks.mjs +3 -1
- package/dist/esm/bpm/tracer.mjs +3 -1
- package/dist/esm/cms/cmis.mjs +105 -177
- package/dist/esm/db/database.mjs +5 -1
- package/dist/esm/db/query.mjs +19 -1
- package/dist/esm/db/repository.mjs +2 -1
- package/dist/esm/db/sql.mjs +5 -2
- package/dist/esm/etcd/client.mjs +4 -1
- package/dist/esm/http/errors/ForbiddenError.mjs +9 -9
- package/dist/esm/http/errors/ValidationError.mjs +9 -9
- package/dist/esm/http/request.mjs +2 -1
- package/dist/esm/http/response.mjs +102 -188
- package/dist/esm/http/rs/resource-http-controller.mjs +4 -1
- package/dist/esm/http/rs/resource-mappings.mjs +6 -3
- package/dist/esm/http/rs/resource-method.mjs +10 -1
- package/dist/esm/http/rs/resource.mjs +11 -1
- package/dist/esm/http/upload.mjs +3 -1
- package/dist/esm/io/files.mjs +5 -7
- package/dist/esm/io/streams.mjs +5 -1
- package/dist/esm/io/zip.mjs +4 -1
- package/dist/esm/job/scheduler.mjs +4 -1
- package/dist/esm/kafka/consumer.mjs +3 -2
- package/dist/esm/kafka/producer.mjs +3 -1
- package/dist/esm/log/logging.mjs +2 -1
- package/dist/esm/mail/client.mjs +2 -1
- package/dist/esm/messaging/consumer.mjs +3 -1
- package/dist/esm/messaging/producer.mjs +3 -1
- package/dist/esm/mongodb/client.mjs +26 -1
- package/dist/esm/mongodb/dao.mjs +3 -1
- package/dist/esm/net/soap.mjs +15 -1
- package/dist/esm/net/websockets.mjs +5 -1
- package/dist/esm/platform/engines.mjs +2 -1
- package/dist/esm/platform/os.mjs +7 -9
- package/dist/esm/platform/problems.mjs +7 -13
- package/dist/esm/platform/registry.mjs +4 -1
- package/dist/esm/platform/repository.mjs +4 -1
- package/dist/esm/platform/workspace.mjs +8 -1
- package/dist/esm/redis/client.mjs +2 -1
- package/dist/esm/security/oauth.mjs +2 -1
- package/dist/esm/template/engines.mjs +6 -1
- package/package.json +1 -1
|
@@ -3,195 +3,109 @@ const HttpResponseFacade = Java.type("org.eclipse.dirigible.components.api.http.
|
|
|
3
3
|
const OutputStreamWriter = Java.type("java.io.OutputStreamWriter");
|
|
4
4
|
const StandardCharsets = Java.type("java.nio.charset.StandardCharsets");
|
|
5
5
|
class Response {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
static
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
static
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
static
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
static
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
static
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
static
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
static
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
static
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
static
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
static
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
static
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
static
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
static
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
static {
|
|
98
|
-
this.REQUEST_TIMEOUT = 408;
|
|
99
|
-
}
|
|
100
|
-
static {
|
|
101
|
-
this.REQUEST_URI_TOO_LONG = 414;
|
|
102
|
-
}
|
|
103
|
-
static {
|
|
104
|
-
this.REQUESTED_RANGE_NOT_SATISFIABLE = 416;
|
|
105
|
-
}
|
|
106
|
-
static {
|
|
107
|
-
this.RESET_CONTENT = 205;
|
|
108
|
-
}
|
|
109
|
-
static {
|
|
110
|
-
this.SEE_OTHER = 303;
|
|
111
|
-
}
|
|
112
|
-
static {
|
|
113
|
-
this.SERVICE_UNAVAILABLE = 503;
|
|
114
|
-
}
|
|
115
|
-
static {
|
|
116
|
-
this.SWITCHING_PROTOCOLS = 101;
|
|
117
|
-
}
|
|
118
|
-
static {
|
|
119
|
-
this.TEMPORARY_REDIRECT = 307;
|
|
120
|
-
}
|
|
121
|
-
static {
|
|
122
|
-
this.UNAUTHORIZED = 401;
|
|
123
|
-
}
|
|
124
|
-
static {
|
|
125
|
-
this.UNSUPPORTED_MEDIA_TYPE = 415;
|
|
126
|
-
}
|
|
127
|
-
static {
|
|
128
|
-
this.USE_PROXY = 305;
|
|
129
|
-
}
|
|
130
|
-
static {
|
|
131
|
-
this.UNPROCESSABLE_CONTENT = 422;
|
|
132
|
-
}
|
|
133
|
-
static {
|
|
6
|
+
// --- Standard HTTP Status Code Constants (Informational, Success, Redirection, Client Error, Server Error) ---
|
|
7
|
+
static ACCEPTED = 202;
|
|
8
|
+
static BAD_GATEWAY = 502;
|
|
9
|
+
static BAD_REQUEST = 400;
|
|
10
|
+
static CONFLICT = 409;
|
|
11
|
+
static CONTINUE = 100;
|
|
12
|
+
static CREATED = 201;
|
|
13
|
+
static EXPECTATION_FAILED = 417;
|
|
14
|
+
static FORBIDDEN = 403;
|
|
15
|
+
static FOUND = 302;
|
|
16
|
+
static GATEWAY_TIMEOUT = 504;
|
|
17
|
+
static GONE = 410;
|
|
18
|
+
static HTTP_VERSION_NOT_SUPPORTED = 505;
|
|
19
|
+
static INTERNAL_SERVER_ERROR = 500;
|
|
20
|
+
static LENGTH_REQUIRED = 411;
|
|
21
|
+
static METHOD_NOT_ALLOWED = 405;
|
|
22
|
+
static MOVED_PERMANENTLY = 301;
|
|
23
|
+
static MOVED_TEMPORARILY = 302;
|
|
24
|
+
static MULTIPLE_CHOICES = 300;
|
|
25
|
+
static NO_CONTENT = 204;
|
|
26
|
+
static NON_AUTHORITATIVE_INFORMATION = 203;
|
|
27
|
+
static NOT_ACCEPTABLE = 406;
|
|
28
|
+
static NOT_FOUND = 404;
|
|
29
|
+
static NOT_IMPLEMENTED = 501;
|
|
30
|
+
static NOT_MODIFIED = 304;
|
|
31
|
+
static OK = 200;
|
|
32
|
+
static PARTIAL_CONTENT = 206;
|
|
33
|
+
static PAYMENT_REQUIRED = 402;
|
|
34
|
+
static PRECONDITION_FAILED = 412;
|
|
35
|
+
static PROXY_AUTHENTICATION_REQUIRED = 407;
|
|
36
|
+
static REQUEST_ENTITY_TOO_LARGE = 413;
|
|
37
|
+
static REQUEST_TIMEOUT = 408;
|
|
38
|
+
static REQUEST_URI_TOO_LONG = 414;
|
|
39
|
+
static REQUESTED_RANGE_NOT_SATISFIABLE = 416;
|
|
40
|
+
static RESET_CONTENT = 205;
|
|
41
|
+
static SEE_OTHER = 303;
|
|
42
|
+
static SERVICE_UNAVAILABLE = 503;
|
|
43
|
+
static SWITCHING_PROTOCOLS = 101;
|
|
44
|
+
static TEMPORARY_REDIRECT = 307;
|
|
45
|
+
static UNAUTHORIZED = 401;
|
|
46
|
+
static UNSUPPORTED_MEDIA_TYPE = 415;
|
|
47
|
+
static USE_PROXY = 305;
|
|
48
|
+
static UNPROCESSABLE_CONTENT = 422;
|
|
49
|
+
/**
|
|
50
|
+
* Mapping between HTTP response codes (string) and their corresponding reason-phrases
|
|
51
|
+
* as defined in RFC 7231, section 6.1.
|
|
52
|
+
*/
|
|
53
|
+
static HttpCodesReasons = {
|
|
54
|
+
"100": "Continue",
|
|
55
|
+
"101": "Switching Protocols",
|
|
56
|
+
"200": "OK",
|
|
57
|
+
"201": "Created",
|
|
58
|
+
"202": "Accepted",
|
|
59
|
+
"203": "Non-Authoritative Information",
|
|
60
|
+
"204": "No Content",
|
|
61
|
+
"205": "Reset Content",
|
|
62
|
+
"206": "Partial Content",
|
|
63
|
+
"300": "Multiple Choices",
|
|
64
|
+
"301": "Moved Permanently",
|
|
65
|
+
"302": "Found",
|
|
66
|
+
"303": "See Other",
|
|
67
|
+
"304": "Not Modified",
|
|
68
|
+
"305": "Use Proxy",
|
|
69
|
+
"307": "Temporary Redirect",
|
|
70
|
+
"400": "Bad Request",
|
|
71
|
+
"401": "Unauthorized",
|
|
72
|
+
"402": "Payment Required",
|
|
73
|
+
"403": "Forbidden",
|
|
74
|
+
"404": "Not Found",
|
|
75
|
+
"405": "Method Not Allowed",
|
|
76
|
+
"406": "Not Acceptable",
|
|
77
|
+
"407": "Proxy Authentication Required",
|
|
78
|
+
"408": "Request Timeout",
|
|
79
|
+
"409": "Conflict",
|
|
80
|
+
"410": "Gone",
|
|
81
|
+
"411": "Length Required",
|
|
82
|
+
"412": "Precondition Failed",
|
|
83
|
+
"413": "Payload Too Large",
|
|
84
|
+
"414": "URI Too Large",
|
|
85
|
+
"415": "Unsupported Media Type",
|
|
86
|
+
"416": "Range Not Satisfiable",
|
|
87
|
+
"417": "Expectation Failed",
|
|
88
|
+
"422": "Unprocessable Content",
|
|
89
|
+
"426": "Upgrade Required",
|
|
90
|
+
"500": "Internal Server Error",
|
|
91
|
+
"501": "Not Implemented",
|
|
92
|
+
"502": "Bad Gateway",
|
|
93
|
+
"503": "Service Unavailable",
|
|
94
|
+
"504": "Gateway Timmeout",
|
|
95
|
+
"505": "HTTP Version Not Supported",
|
|
134
96
|
/**
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
"202": "Accepted",
|
|
144
|
-
"203": "Non-Authoritative Information",
|
|
145
|
-
"204": "No Content",
|
|
146
|
-
"205": "Reset Content",
|
|
147
|
-
"206": "Partial Content",
|
|
148
|
-
"300": "Multiple Choices",
|
|
149
|
-
"301": "Moved Permanently",
|
|
150
|
-
"302": "Found",
|
|
151
|
-
"303": "See Other",
|
|
152
|
-
"304": "Not Modified",
|
|
153
|
-
"305": "Use Proxy",
|
|
154
|
-
"307": "Temporary Redirect",
|
|
155
|
-
"400": "Bad Request",
|
|
156
|
-
"401": "Unauthorized",
|
|
157
|
-
"402": "Payment Required",
|
|
158
|
-
"403": "Forbidden",
|
|
159
|
-
"404": "Not Found",
|
|
160
|
-
"405": "Method Not Allowed",
|
|
161
|
-
"406": "Not Acceptable",
|
|
162
|
-
"407": "Proxy Authentication Required",
|
|
163
|
-
"408": "Request Timeout",
|
|
164
|
-
"409": "Conflict",
|
|
165
|
-
"410": "Gone",
|
|
166
|
-
"411": "Length Required",
|
|
167
|
-
"412": "Precondition Failed",
|
|
168
|
-
"413": "Payload Too Large",
|
|
169
|
-
"414": "URI Too Large",
|
|
170
|
-
"415": "Unsupported Media Type",
|
|
171
|
-
"416": "Range Not Satisfiable",
|
|
172
|
-
"417": "Expectation Failed",
|
|
173
|
-
"422": "Unprocessable Content",
|
|
174
|
-
"426": "Upgrade Required",
|
|
175
|
-
"500": "Internal Server Error",
|
|
176
|
-
"501": "Not Implemented",
|
|
177
|
-
"502": "Bad Gateway",
|
|
178
|
-
"503": "Service Unavailable",
|
|
179
|
-
"504": "Gateway Timmeout",
|
|
180
|
-
"505": "HTTP Version Not Supported",
|
|
181
|
-
/**
|
|
182
|
-
* Utility method that accepts an HTTP code and returns its corresponding reason-phrase.
|
|
183
|
-
* @param code The HTTP status code (number).
|
|
184
|
-
* @returns The reason phrase string.
|
|
185
|
-
* @throws Error if the code is not a valid integer in the range [100-505].
|
|
186
|
-
*/
|
|
187
|
-
getReason: (code) => {
|
|
188
|
-
if (isNaN(code) || code < 100 || code > 505) {
|
|
189
|
-
throw Error("Illegal argument for code[" + code + "]. Valid HTTP codes are integer numbers in the range [100-505].");
|
|
190
|
-
}
|
|
191
|
-
return Response.HttpCodesReasons[String(code)];
|
|
97
|
+
* Utility method that accepts an HTTP code and returns its corresponding reason-phrase.
|
|
98
|
+
* @param code The HTTP status code (number).
|
|
99
|
+
* @returns The reason phrase string.
|
|
100
|
+
* @throws Error if the code is not a valid integer in the range [100-505].
|
|
101
|
+
*/
|
|
102
|
+
getReason: (code) => {
|
|
103
|
+
if (isNaN(code) || code < 100 || code > 505) {
|
|
104
|
+
throw Error("Illegal argument for code[" + code + "]. Valid HTTP codes are integer numbers in the range [100-505].");
|
|
192
105
|
}
|
|
193
|
-
|
|
194
|
-
|
|
106
|
+
return Response.HttpCodesReasons[String(code)];
|
|
107
|
+
}
|
|
108
|
+
};
|
|
195
109
|
/**
|
|
196
110
|
* Checks if the response façade is currently valid or connected to an active request context.
|
|
197
111
|
* @returns True if valid, false otherwise.
|
|
@@ -430,4 +344,4 @@ if (typeof module !== "undefined") {
|
|
|
430
344
|
export {
|
|
431
345
|
Response
|
|
432
346
|
};
|
|
433
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0dHAvcmVzcG9uc2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogUHJvdmlkZXMgYSBzdGF0aWMgZmFcdTAwRTdhZGUgKGBSZXNwb25zZWAgY2xhc3MpIGZvciBtYW5hZ2luZyB0aGUgSFRUUCByZXNwb25zZS5cbiAqIFRoaXMgY2xhc3Mgd3JhcHMgYSBuYXRpdmUgSmF2YSBIVFRQIHJlc3BvbnNlIG9iamVjdCwgb2ZmZXJpbmcgbWV0aG9kcyBmb3Igc2V0dGluZ1xuICogc3RhdHVzIGNvZGVzLCBoZWFkZXJzLCBjb29raWVzLCBhbmQgd3JpdGluZyBjb250ZW50ICh0ZXh0LCBKU09OLCBvciBiaW5hcnkpLlxuICovXG5cbmltcG9ydCB7IE91dHB1dFN0cmVhbSB9IGZyb20gXCJAYWVyb2tpdC9zZGsvaW8vc3RyZWFtc1wiXG5cbmNvbnN0IEh0dHBSZXNwb25zZUZhY2FkZSA9IEphdmEudHlwZShcIm9yZy5lY2xpcHNlLmRpcmlnaWJsZS5jb21wb25lbnRzLmFwaS5odHRwLkh0dHBSZXNwb25zZUZhY2FkZVwiKTtcbmNvbnN0IE91dHB1dFN0cmVhbVdyaXRlciA9IEphdmEudHlwZShcImphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyXCIpO1xuY29uc3QgU3RhbmRhcmRDaGFyc2V0cyA9IEphdmEudHlwZShcImphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0c1wiKTtcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgZm9yIGFuIEhUVFAgY29va2llLCBpbmNsdWRpbmcgaXRzIG5hbWUsIHZhbHVlLCBhbmQgb3B0aW9uYWwgYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb29raWUge1xuICAgIC8qKiBUaGUgbmFtZSBvZiB0aGUgY29va2llLiAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIHZhbHVlIG9mIHRoZSBjb29raWUuICovXG4gICAgdmFsdWU6IHN0cmluZztcbiAgICAvKiogS2V5LXZhbHVlIG1hcCBvZiBjb29raWUgYXR0cmlidXRlcyAoZS5nLiwgJ21heEFnZScsICdwYXRoJywgJ2RvbWFpbicsICdzZWN1cmUnLCAnaHR0cE9ubHknKS4gKi9cbiAgICBhdHRyaWJ1dGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuIH1cblxuLyoqXG4gKiBUaGUgc3RhdGljIFJlc3BvbnNlIGNsYXNzIHByb3ZpZGluZyBzdGFuZGFyZGl6ZWQgSFRUUCBzdGF0dXMgY29kZXMgYW5kIG1ldGhvZHNcbiAqIGZvciBjb25zdHJ1Y3RpbmcgdGhlIHNlcnZlcidzIHJlc3BvbnNlLlxuICovXG5leHBvcnQgY2xhc3MgUmVzcG9uc2Uge1xuXG4gICAgLy8gLS0tIFN0YW5kYXJkIEhUVFAgU3RhdHVzIENvZGUgQ29uc3RhbnRzIChJbmZvcm1hdGlvbmFsLCBTdWNjZXNzLCBSZWRpcmVjdGlvbiwgQ2xpZW50IEVycm9yLCBTZXJ2ZXIgRXJyb3IpIC0tLVxuXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBBQ0NFUFRFRCA9IDIwMjtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJBRF9HQVRFV0FZID0gNTAyO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQkFEX1JFUVVFU1QgPSA0MDA7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT05GTElDVCA9IDQwOTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPTlRJTlVFID0gMTAwO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ1JFQVRFRCA9IDIwMTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVYUEVDVEFUSU9OX0ZBSUxFRCA9IDQxNztcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZPUkJJRERFTiA9IDQwMztcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZPVU5EID0gMzAyO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR0FURVdBWV9USU1FT1VUID0gNTA0O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR09ORSA9IDQxMDtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEID0gNTA1O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5URVJOQUxfU0VSVkVSX0VSUk9SID0gNTAwO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTEVOR1RIX1JFUVVJUkVEID0gNDExO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUVUSE9EX05PVF9BTExPV0VEID0gNDA1O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9WRURfUEVSTUFORU5UTFkgPSAzMDE7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT1ZFRF9URU1QT1JBUklMWSA9IDMwMjtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1VTFRJUExFX0NIT0lDRVMgPSAzMDA7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT19DT05URU5UID0gMjA0O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04gPSAyMDM7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT1RfQUNDRVBUQUJMRSA9IDQwNjtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PVF9GT1VORCA9IDQwNDtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PVF9JTVBMRU1FTlRFRCA9IDUwMTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PVF9NT0RJRklFRCA9IDMwNDtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9LID0gMjAwO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUEFSVElBTF9DT05URU5UID0gMjA2O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUEFZTUVOVF9SRVFVSVJFRCA9IDQwMjtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBSRUNPTkRJVElPTl9GQUlMRUQgPSA0MTI7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCA9IDQwNztcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFUVVFU1RfRU5USVRZX1RPT19MQVJHRSA9IDQxMztcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFUVVFU1RfVElNRU9VVCA9IDQwODtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFUVVFU1RfVVJJX1RPT19MT05HID0gNDE0O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVRVUVTVEVEX1JBTkdFX05PVF9TQVRJU0ZJQUJMRSA9IDQxNjtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFU0VUX0NPTlRFTlQgPSAyMDU7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRUVfT1RIRVIgPSAzMDM7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVJWSUNFX1VOQVZBSUxBQkxFID0gNTAzO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1dJVENISU5HX1BST1RPQ09MUyA9IDEwMTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRFTVBPUkFSWV9SRURJUkVDVCA9IDMwNztcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVOQVVUSE9SSVpFRCA9IDQwMTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVOU1VQUE9SVEVEX01FRElBX1RZUEUgPSA0MTU7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBVU0VfUFJPWFkgPSAzMDU7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBVTlBST0NFU1NBQkxFX0NPTlRFTlQgPSA0MjI7XG5cbiAgICAvKipcbiAgICAgKiBNYXBwaW5nIGJldHdlZW4gSFRUUCByZXNwb25zZSBjb2RlcyAoc3RyaW5nKSBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyByZWFzb24tcGhyYXNlc1xuICAgICAqIGFzIGRlZmluZWQgaW4gUkZDIDcyMzEsIHNlY3Rpb24gNi4xLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSHR0cENvZGVzUmVhc29ucyA9IHtcbiAgICAgICAgXCIxMDBcIjogXCJDb250aW51ZVwiLCBcIjEwMVwiOiBcIlN3aXRjaGluZyBQcm90b2NvbHNcIiwgXCIyMDBcIjogXCJPS1wiLCBcIjIwMVwiOiBcIkNyZWF0ZWRcIixcbiAgICAgICAgXCIyMDJcIjogXCJBY2NlcHRlZFwiLCBcIjIwM1wiOiBcIk5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uXCIsIFwiMjA0XCI6IFwiTm8gQ29udGVudFwiLFxuICAgICAgICBcIjIwNVwiOiBcIlJlc2V0IENvbnRlbnRcIiwgXCIyMDZcIjogXCJQYXJ0aWFsIENvbnRlbnRcIiwgXCIzMDBcIjogXCJNdWx0aXBsZSBDaG9pY2VzXCIsXG4gICAgICAgIFwiMzAxXCI6IFwiTW92ZWQgUGVybWFuZW50bHlcIiwgXCIzMDJcIjogXCJGb3VuZFwiLCBcIjMwM1wiOiBcIlNlZSBPdGhlclwiLCBcIjMwNFwiOiBcIk5vdCBNb2RpZmllZFwiLFxuICAgICAgICBcIjMwNVwiOiBcIlVzZSBQcm94eVwiLCBcIjMwN1wiOiBcIlRlbXBvcmFyeSBSZWRpcmVjdFwiLCBcIjQwMFwiOiBcIkJhZCBSZXF1ZXN0XCIsXG4gICAgICAgIFwiNDAxXCI6IFwiVW5hdXRob3JpemVkXCIsIFwiNDAyXCI6IFwiUGF5bWVudCBSZXF1aXJlZFwiLCBcIjQwM1wiOiBcIkZvcmJpZGRlblwiLFxuICAgICAgICBcIjQwNFwiOiBcIk5vdCBGb3VuZFwiLCBcIjQwNVwiOiBcIk1ldGhvZCBOb3QgQWxsb3dlZFwiLCBcIjQwNlwiOiBcIk5vdCBBY2NlcHRhYmxlXCIsXG4gICAgICAgIFwiNDA3XCI6IFwiUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWRcIiwgXCI0MDhcIjogXCJSZXF1ZXN0IFRpbWVvdXRcIiwgXCI0MDlcIjogXCJDb25mbGljdFwiLFxuICAgICAgICBcIjQxMFwiOiBcIkdvbmVcIiwgXCI0MTFcIjogXCJMZW5ndGggUmVxdWlyZWRcIiwgXCI0MTJcIjogXCJQcmVjb25kaXRpb24gRmFpbGVkXCIsXG4gICAgICAgIFwiNDEzXCI6IFwiUGF5bG9hZCBUb28gTGFyZ2VcIiwgXCI0MTRcIjogXCJVUkkgVG9vIExhcmdlXCIsIFwiNDE1XCI6IFwiVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZVwiLFxuICAgICAgICBcIjQxNlwiOiBcIlJhbmdlIE5vdCBTYXRpc2ZpYWJsZVwiLCBcIjQxN1wiOiBcIkV4cGVjdGF0aW9uIEZhaWxlZFwiLCBcIjQyMlwiOiBcIlVucHJvY2Vzc2FibGUgQ29udGVudFwiLFxuICAgICAgICBcIjQyNlwiOiBcIlVwZ3JhZGUgUmVxdWlyZWRcIiwgXCI1MDBcIjogXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIiwgXCI1MDFcIjogXCJOb3QgSW1wbGVtZW50ZWRcIixcbiAgICAgICAgXCI1MDJcIjogXCJCYWQgR2F0ZXdheVwiLCBcIjUwM1wiOiBcIlNlcnZpY2UgVW5hdmFpbGFibGVcIiwgXCI1MDRcIjogXCJHYXRld2F5IFRpbW1lb3V0XCIsXG4gICAgICAgIFwiNTA1XCI6IFwiSFRUUCBWZXJzaW9uIE5vdCBTdXBwb3J0ZWRcIixcblxuICAgICAgICAvKipcbiAgICAgICAgKiBVdGlsaXR5IG1ldGhvZCB0aGF0IGFjY2VwdHMgYW4gSFRUUCBjb2RlIGFuZCByZXR1cm5zIGl0cyBjb3JyZXNwb25kaW5nIHJlYXNvbi1waHJhc2UuXG4gICAgICAgICogQHBhcmFtIGNvZGUgVGhlIEhUVFAgc3RhdHVzIGNvZGUgKG51bWJlcikuXG4gICAgICAgICogQHJldHVybnMgVGhlIHJlYXNvbiBwaHJhc2Ugc3RyaW5nLlxuICAgICAgICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGNvZGUgaXMgbm90IGEgdmFsaWQgaW50ZWdlciBpbiB0aGUgcmFuZ2UgWzEwMC01MDVdLlxuICAgICAgICAqL1xuICAgICAgICBnZXRSZWFzb246IChjb2RlOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGNvZGUpIHx8IGNvZGUgPCAxMDAgfHwgY29kZSA+IDUwNSkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50IGZvciBjb2RlWycgKyBjb2RlICsgJ10uIFZhbGlkIEhUVFAgY29kZXMgYXJlIGludGVnZXIgbnVtYmVycyBpbiB0aGUgcmFuZ2UgWzEwMC01MDVdLicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuSHR0cENvZGVzUmVhc29uc1tTdHJpbmcoY29kZSldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSByZXNwb25zZSBmYVx1MDBFN2FkZSBpcyBjdXJyZW50bHkgdmFsaWQgb3IgY29ubmVjdGVkIHRvIGFuIGFjdGl2ZSByZXF1ZXN0IGNvbnRleHQuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgaXNWYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5pc1ZhbGlkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplcyBhIEphdmFTY3JpcHQgb2JqZWN0IHRvIEpTT04sIHNldHMgdGhlIGBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25gIGhlYWRlcixcbiAgICAgKiBhbmQgd3JpdGVzIHRoZSBKU09OIHN0cmluZyB0byB0aGUgcmVzcG9uc2Ugb3V0cHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0gb2JqIFRoZSBKYXZhU2NyaXB0IG9iamVjdCB0byBiZSBzZXJpYWxpemVkIGFuZCBzZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMganNvbihvYmo6IGFueSk6IHZvaWQge1xuICAgICAgICBSZXNwb25zZS5hZGRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpXG4gICAgICAgIGNvbnN0IG9iakpzb24gPSBKU09OLnN0cmluZ2lmeShvYmopO1xuICAgICAgICBSZXNwb25zZS5wcmludChvYmpKc29uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgYSBzdHJpbmcgb2YgdGV4dCB0byB0aGUgcmVzcG9uc2UgYm9keSB1c2luZyAqKlVURi04KiogZW5jb2RpbmcuXG4gICAgICogTm90ZTogVGhpcyBtZXRob2QgYXV0b21hdGljYWxseSBoYW5kbGVzIGZsdXNoaW5nIHRoZSBvdXRwdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB0ZXh0IFRoZSBzdHJpbmcgY29udGVudCB0byB3cml0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHByaW50KHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0ZXh0ID0gKHRleHQgJiYgdGV4dC50b1N0cmluZygpKSB8fCBcIlwiO1xuICAgICAgICBjb25zdCBvdXQgPSBSZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKS5uYXRpdmU7XG4gICAgICAgIC8vIFVzZSBKYXZhIEkvTyB0byBlbnN1cmUgZXhwbGljaXQgVVRGLTggZW5jb2RpbmdcbiAgICAgICAgY29uc3Qgd3JpdGVyID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihvdXQsIFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpO1xuICAgICAgICB3cml0ZXIud3JpdGUodGV4dCk7XG4gICAgICAgIHdyaXRlci5mbHVzaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdyaXRlcyBhIHN0cmluZyBvZiB0ZXh0IGZvbGxvd2VkIGJ5IGEgbmV3bGluZSBjaGFyYWN0ZXIgKGBcXG5gKSB0byB0aGUgcmVzcG9uc2UgYm9keVxuICAgICAqIHVzaW5nICoqVVRGLTgqKiBlbmNvZGluZy5cbiAgICAgKiBAcGFyYW0gdGV4dCBUaGUgc3RyaW5nIGNvbnRlbnQgdG8gd3JpdGUuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBwcmludGxuKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0ZXh0ID0gKHRleHQgJiYgdGV4dC50b1N0cmluZygpKSB8fCBcIlwiO1xuICAgICAgICBjb25zdCBvdXQgPSBSZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKS5uYXRpdmU7XG4gICAgICAgIGNvbnN0IHdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3V0LCBTdGFuZGFyZENoYXJzZXRzLlVURl84KTtcbiAgICAgICAgd3JpdGVyLndyaXRlKHRleHQpO1xuICAgICAgICB3cml0ZXIud3JpdGUoXCJcXG5cIik7XG4gICAgICAgIHdyaXRlci5mbHVzaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdyaXRlcyBhbiBhcnJheSBvZiBieXRlcyBkaXJlY3RseSB0byB0aGUgcmVzcG9uc2Ugb3V0cHV0IHN0cmVhbSwgdHlwaWNhbGx5IHVzZWQgZm9yIGJpbmFyeSBkYXRhLlxuICAgICAqIEBwYXJhbSBieXRlcyBUaGUgYXJyYXkgb2YgYnl0ZXMgdG8gd3JpdGUuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB3cml0ZShieXRlczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFieXRlcykge1xuICAgICAgICAgICAgYnl0ZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBIdHRwUmVzcG9uc2VGYWNhZGUud3JpdGUoYnl0ZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgcmVzcG9uc2UgaGVhZGVycyBhbmQgc3RhdHVzIGhhdmUgYWxyZWFkeSBiZWVuIHNlbnQgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSByZXNwb25zZSBpcyBjb21taXR0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGlzQ29tbWl0dGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlRmFjYWRlLmlzQ29tbWl0dGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBDb250ZW50LVR5cGVgIGhlYWRlci5cbiAgICAgKiBAcGFyYW0gY29udGVudFR5cGUgVGhlIE1JTUUgdHlwZSBzdHJpbmcgKGUuZy4sICd0ZXh0L2h0bWwnLCAnYXBwbGljYXRpb24vcGRmJykuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBzZXRDb250ZW50VHlwZShjb250ZW50VHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIEh0dHBSZXNwb25zZUZhY2FkZS5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yY2VzIGFueSBidWZmZXJlZCBvdXRwdXQgdG8gYmUgd3JpdHRlbiB0byB0aGUgY2xpZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZmx1c2goKTogdm9pZCB7XG4gICAgICAgIEh0dHBSZXNwb25zZUZhY2FkZS5mbHVzaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgcmVzcG9uc2Ugb3V0cHV0IHN0cmVhbS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICBIdHRwUmVzcG9uc2VGYWNhZGUuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY29va2llIHRvIHRoZSByZXNwb25zZS4gVGhlIGNvb2tpZSBvYmplY3QgaXMgc2VyaWFsaXplZCB0byBKU09OIGJlZm9yZSBiZWluZyBwYXNzZWRcbiAgICAgKiB0byB0aGUgdW5kZXJseWluZyBKYXZhIGZhY2FkZS5cbiAgICAgKiBAcGFyYW0gY29va2llIFRoZSBjb29raWUgZGVmaW5pdGlvbiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBhZGRDb29raWUoY29va2llOiBDb29raWUpOiB2b2lkIHtcbiAgICAgICAgSHR0cFJlc3BvbnNlRmFjYWRlLmFkZENvb2tpZShKU09OLnN0cmluZ2lmeShjb29raWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSByZXNwb25zZSBoZWFkZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBzZXQuXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBoZWFkZXIgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjb250YWluc0hlYWRlcihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5jb250YWluc0hlYWRlcihuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmNvZGVzIGEgVVJMIGZvciB1c2UgaW4gcmVkaXJlY3RzIG9yIGZvcm1zLCBpbmNsdWRpbmcgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpZiBuZWNlc3NhcnkuXG4gICAgICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIGVuY29kZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgZW5jb2RlZCBVUkwgc3RyaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZW5jb2RlVVJMKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5lbmNvZGVVUkwodXJsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdXNlZCBmb3IgdGhlIHJlc3BvbnNlIGJvZHkuXG4gICAgICogQHJldHVybnMgVGhlIGNoYXJhY3RlciBlbmNvZGluZyBzdHJpbmcuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRDaGFyYWN0ZXJFbmNvZGluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlRmFjYWRlLmdldENoYXJhY3RlckVuY29kaW5nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5jb2RlcyBhIFVSTCBmb3IgdXNlIGluIHRoZSBgTG9jYXRpb25gIGhlYWRlciBvZiBhIHJlZGlyZWN0IHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSB1cmwgVGhlIHJlZGlyZWN0IFVSTCB0byBlbmNvZGUuXG4gICAgICogQHJldHVybnMgVGhlIGVuY29kZWQgcmVkaXJlY3QgVVJMIHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGVuY29kZVJlZGlyZWN0VVJMKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5lbmNvZGVSZWRpcmVjdFVSTCh1cmwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgYENvbnRlbnQtVHlwZWAgaGVhZGVyIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIFRoZSBjb250ZW50IHR5cGUgc3RyaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q29udGVudFR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5nZXRDb250ZW50VHlwZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbmRzIGFuIEhUVFAgZXJyb3IgcmVzcG9uc2UgdG8gdGhlIGNsaWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgc3RhdHVzIGNvZGUgYW5kIG9wdGlvbmFsIG1lc3NhZ2UuXG4gICAgICogVGhpcyBieXBhc3NlcyB0aGUgbm9ybWFsIHJlc3BvbnNlIGJvZHkgd3JpdGluZyBwcm9jZXNzLlxuICAgICAqIEBwYXJhbSBzdGF0dXMgVGhlIEhUVFAgc3RhdHVzIGNvZGUgKGUuZy4sIDQwNCwgNTAwKS5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBBbiBvcHRpb25hbCBtZXNzYWdlIHRvIGluY2x1ZGUgaW4gdGhlIGVycm9yIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgc2VuZEVycm9yKHN0YXR1czogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIEh0dHBSZXNwb25zZUZhY2FkZS5zZW5kRXJyb3Ioc3RhdHVzLCBtZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdG8gYmUgdXNlZCBmb3IgdGhlIHJlc3BvbnNlIGJvZHkgKGUuZy4sICdVVEYtOCcpLlxuICAgICAqIEBwYXJhbSBjaGFyc2V0IFRoZSBjaGFyYWN0ZXIgc2V0IHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHNldENoYXJhY3RlckVuY29kaW5nKGNoYXJzZXQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBIdHRwUmVzcG9uc2VGYWNhZGUuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoY2hhcnNldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VuZHMgYSByZWRpcmVjdCByZXNwb25zZSAoc3RhdHVzIGNvZGUgMzAyIGJ5IGRlZmF1bHQpIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIGxvY2F0aW9uIFRoZSBuZXcgVVJMIHRvIHJlZGlyZWN0IHRoZSBjbGllbnQgdG8uXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBzZW5kUmVkaXJlY3QobG9jYXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBIdHRwUmVzcG9uc2VGYWNhZGUuc2VuZFJlZGlyZWN0KGxvY2F0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgQ29udGVudC1MZW5ndGhgIGhlYWRlciBmb3IgdGhlIHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIGJvZHkgaW4gYnl0ZXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBzZXRDb250ZW50TGVuZ3RoKGxlbmd0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIEh0dHBSZXNwb25zZUZhY2FkZS5zZXRDb250ZW50TGVuZ3RoKGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIHJlc3BvbnNlIGhlYWRlciB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCB2YWx1ZS4gSWYgdGhlIGhlYWRlciBhbHJlYWR5IGV4aXN0cywgaXRzIHZhbHVlIGlzIG92ZXJ3cml0dGVuLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgc2V0SGVhZGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBIdHRwUmVzcG9uc2VGYWNhZGUuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcmVzcG9uc2UgaGVhZGVyIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHZhbHVlLiBJZiB0aGUgaGVhZGVyIGFscmVhZHkgZXhpc3RzLCBhIHNlY29uZCBoZWFkZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGFkZGVkLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgYWRkSGVhZGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBIdHRwUmVzcG9uc2VGYWNhZGUuYWRkSGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBIVFRQIHN0YXR1cyBjb2RlIGZvciB0aGUgcmVzcG9uc2UuXG4gICAgICogQHBhcmFtIHN0YXR1cyBUaGUgaW50ZWdlciBzdGF0dXMgY29kZSAoZS5nLiwgMjAwLCA0MDQpLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgc2V0U3RhdHVzKHN0YXR1czogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIEh0dHBSZXNwb25zZUZhY2FkZS5zZXRTdGF0dXMoc3RhdHVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIGJ1ZmZlcnMsIHN0YXR1cyBjb2RlLCBhbmQgaGVhZGVycyBmcm9tIHRoZSByZXNwb25zZSwgYWxsb3dpbmcgYSBuZXcgcmVzcG9uc2UgdG8gYmUgZ2VuZXJhdGVkLlxuICAgICAqIFRoaXMgaXMgb25seSBwb3NzaWJsZSBpZiB0aGUgcmVzcG9uc2UgaGFzIG5vdCB5ZXQgYmVlbiBjb21taXR0ZWQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgSHR0cFJlc3BvbnNlRmFjYWRlLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpYyBoZWFkZXIuIElmIG11bHRpcGxlIGhlYWRlcnMgd2l0aCB0aGUgc2FtZSBuYW1lIGV4aXN0LCBpdCByZXR1cm5zIHRoZSBmaXJzdCBvbmUuXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgaGVhZGVyIHZhbHVlIHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldEhlYWRlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlRmFjYWRlLmdldEhlYWRlcihuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsb2NhbGUgZm9yIHRoZSByZXNwb25zZSwgd2hpY2ggbWF5IGFmZmVjdCBsYW5ndWFnZSBhbmQgZGF0ZS90aW1lIGZvcm1hdHRpbmcuXG4gICAgICogQHBhcmFtIGxhbmd1YWdlIFRoZSBsYW5ndWFnZSBjb2RlIChlLmcuLCAnZW4nLCAnZnInKS5cbiAgICAgKiBAcGFyYW0gY291bnRyeSBUaGUgb3B0aW9uYWwgY291bnRyeSBjb2RlIChlLmcuLCAnVVMnLCAnR0InKS5cbiAgICAgKiBAcGFyYW0gdmFyaWFudCBUaGUgb3B0aW9uYWwgdmFyaWFudCBjb2RlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgc2V0TG9jYWxlKGxhbmd1YWdlOiBzdHJpbmcsIGNvdW50cnk/OiBzdHJpbmcsIHZhcmlhbnQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5zZXRMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnksIHZhcmlhbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGhlYWRlciB2YWx1ZXMgZm9yIGEgc3BlY2lmaWMgaGVhZGVyIG5hbWUgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLlxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGhlYWRlciB2YWx1ZXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRIZWFkZXJzKG5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSHR0cFJlc3BvbnNlRmFjYWRlLmdldEhlYWRlcnMobmFtZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5hbWVzIG9mIGFsbCBoZWFkZXJzIHRoYXQgaGF2ZSBiZWVuIHNldCBvbiB0aGUgcmVzcG9uc2UuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaGVhZGVyIG5hbWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SGVhZGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShIdHRwUmVzcG9uc2VGYWNhZGUuZ2V0SGVhZGVyTmFtZXMoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY3VycmVudGx5IHNldCBsb2NhbGUgc3RyaW5nIGZvciB0aGUgcmVzcG9uc2UuXG4gICAgICogQHJldHVybnMgVGhlIGxvY2FsZSBzdHJpbmcuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5nZXRMb2NhbGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB1bmRlcmx5aW5nIG91dHB1dCBzdHJlYW0gb2JqZWN0LCB3cmFwcGVkIGluIHRoZSBTREsncyBgT3V0cHV0U3RyZWFtYCBjbGFzcy5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igd3JpdGluZyByYXcgb3IgbGFyZ2UgYW1vdW50cyBvZiBkYXRhLlxuICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldE91dHB1dFN0cmVhbSgpOiBPdXRwdXRTdHJlYW0ge1xuICAgICAgICByZXR1cm4gbmV3IE91dHB1dFN0cmVhbShIdHRwUmVzcG9uc2VGYWNhZGUuZ2V0T3V0cHV0U3RyZWFtKCkpO1xuICAgIH1cbn1cblxuLy8gQHRzLWlnbm9yZVxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdC8vIEB0cy1pZ25vcmVcblx0bW9kdWxlLmV4cG9ydHMgPSBSZXNwb25zZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQU1BLFNBQVMsb0JBQW9CO0FBRTdCLE1BQU0scUJBQXFCLEtBQUssS0FBSyw4REFBOEQ7QUFDbkcsTUFBTSxxQkFBcUIsS0FBSyxLQUFLLDRCQUE0QjtBQUNqRSxNQUFNLG1CQUFtQixLQUFLLEtBQUssbUNBQW1DO0FBa0IvRCxNQUFNLFNBQVM7QUFBQSxFQUlsQjtBQUFBO0FBQUEsU0FBdUIsV0FBVztBQUFBO0FBQUEsRUFDbEM7QUFBQSxT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
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0dHAvcmVzcG9uc2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogUHJvdmlkZXMgYSBzdGF0aWMgZmFcdTAwRTdhZGUgKGBSZXNwb25zZWAgY2xhc3MpIGZvciBtYW5hZ2luZyB0aGUgSFRUUCByZXNwb25zZS5cbiAqIFRoaXMgY2xhc3Mgd3JhcHMgYSBuYXRpdmUgSmF2YSBIVFRQIHJlc3BvbnNlIG9iamVjdCwgb2ZmZXJpbmcgbWV0aG9kcyBmb3Igc2V0dGluZ1xuICogc3RhdHVzIGNvZGVzLCBoZWFkZXJzLCBjb29raWVzLCBhbmQgd3JpdGluZyBjb250ZW50ICh0ZXh0LCBKU09OLCBvciBiaW5hcnkpLlxuICovXG5cbmltcG9ydCB7IE91dHB1dFN0cmVhbSB9IGZyb20gXCJAYWVyb2tpdC9zZGsvaW8vc3RyZWFtc1wiXG5cbmNvbnN0IEh0dHBSZXNwb25zZUZhY2FkZSA9IEphdmEudHlwZShcIm9yZy5lY2xpcHNlLmRpcmlnaWJsZS5jb21wb25lbnRzLmFwaS5odHRwLkh0dHBSZXNwb25zZUZhY2FkZVwiKTtcbmNvbnN0IE91dHB1dFN0cmVhbVdyaXRlciA9IEphdmEudHlwZShcImphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyXCIpO1xuY29uc3QgU3RhbmRhcmRDaGFyc2V0cyA9IEphdmEudHlwZShcImphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0c1wiKTtcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgZm9yIGFuIEhUVFAgY29va2llLCBpbmNsdWRpbmcgaXRzIG5hbWUsIHZhbHVlLCBhbmQgb3B0aW9uYWwgYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb29raWUge1xuICAgIC8qKiBUaGUgbmFtZSBvZiB0aGUgY29va2llLiAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIHZhbHVlIG9mIHRoZSBjb29raWUuICovXG4gICAgdmFsdWU6IHN0cmluZztcbiAgICAvKiogS2V5LXZhbHVlIG1hcCBvZiBjb29raWUgYXR0cmlidXRlcyAoZS5nLiwgJ21heEFnZScsICdwYXRoJywgJ2RvbWFpbicsICdzZWN1cmUnLCAnaHR0cE9ubHknKS4gKi9cbiAgICBhdHRyaWJ1dGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuIH1cblxuLyoqXG4gKiBUaGUgc3RhdGljIFJlc3BvbnNlIGNsYXNzIHByb3ZpZGluZyBzdGFuZGFyZGl6ZWQgSFRUUCBzdGF0dXMgY29kZXMgYW5kIG1ldGhvZHNcbiAqIGZvciBjb25zdHJ1Y3RpbmcgdGhlIHNlcnZlcidzIHJlc3BvbnNlLlxuICovXG5leHBvcnQgY2xhc3MgUmVzcG9uc2Uge1xuXG4gICAgLy8gLS0tIFN0YW5kYXJkIEhUVFAgU3RhdHVzIENvZGUgQ29uc3RhbnRzIChJbmZvcm1hdGlvbmFsLCBTdWNjZXNzLCBSZWRpcmVjdGlvbiwgQ2xpZW50IEVycm9yLCBTZXJ2ZXIgRXJyb3IpIC0tLVxuXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBBQ0NFUFRFRCA9IDIwMjtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJBRF9HQVRFV0FZID0gNTAyO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQkFEX1JFUVVFU1QgPSA0MDA7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT05GTElDVCA9IDQwOTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPTlRJTlVFID0gMTAwO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ1JFQVRFRCA9IDIwMTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVYUEVDVEFUSU9OX0ZBSUxFRCA9IDQxNztcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZPUkJJRERFTiA9IDQwMztcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZPVU5EID0gMzAyO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR0FURVdBWV9USU1FT1VUID0gNTA0O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR09ORSA9IDQxMDtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEID0gNTA1O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5URVJOQUxfU0VSVkVSX0VSUk9SID0gNTAwO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTEVOR1RIX1JFUVVJUkVEID0gNDExO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUVUSE9EX05PVF9BTExPV0VEID0gNDA1O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9WRURfUEVSTUFORU5UTFkgPSAzMDE7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT1ZFRF9URU1QT1JBUklMWSA9IDMwMjtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1VTFRJUExFX0NIT0lDRVMgPSAzMDA7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT19DT05URU5UID0gMjA0O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04gPSAyMDM7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT1RfQUNDRVBUQUJMRSA9IDQwNjtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PVF9GT1VORCA9IDQwNDtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PVF9JTVBMRU1FTlRFRCA9IDUwMTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PVF9NT0RJRklFRCA9IDMwNDtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9LID0gMjAwO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUEFSVElBTF9DT05URU5UID0gMjA2O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUEFZTUVOVF9SRVFVSVJFRCA9IDQwMjtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBSRUNPTkRJVElPTl9GQUlMRUQgPSA0MTI7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCA9IDQwNztcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFUVVFU1RfRU5USVRZX1RPT19MQVJHRSA9IDQxMztcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFUVVFU1RfVElNRU9VVCA9IDQwODtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFUVVFU1RfVVJJX1RPT19MT05HID0gNDE0O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVRVUVTVEVEX1JBTkdFX05PVF9TQVRJU0ZJQUJMRSA9IDQxNjtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFU0VUX0NPTlRFTlQgPSAyMDU7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRUVfT1RIRVIgPSAzMDM7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVJWSUNFX1VOQVZBSUxBQkxFID0gNTAzO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1dJVENISU5HX1BST1RPQ09MUyA9IDEwMTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRFTVBPUkFSWV9SRURJUkVDVCA9IDMwNztcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVOQVVUSE9SSVpFRCA9IDQwMTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVOU1VQUE9SVEVEX01FRElBX1RZUEUgPSA0MTU7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBVU0VfUFJPWFkgPSAzMDU7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBVTlBST0NFU1NBQkxFX0NPTlRFTlQgPSA0MjI7XG5cbiAgICAvKipcbiAgICAgKiBNYXBwaW5nIGJldHdlZW4gSFRUUCByZXNwb25zZSBjb2RlcyAoc3RyaW5nKSBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyByZWFzb24tcGhyYXNlc1xuICAgICAqIGFzIGRlZmluZWQgaW4gUkZDIDcyMzEsIHNlY3Rpb24gNi4xLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSHR0cENvZGVzUmVhc29ucyA9IHtcbiAgICAgICAgXCIxMDBcIjogXCJDb250aW51ZVwiLCBcIjEwMVwiOiBcIlN3aXRjaGluZyBQcm90b2NvbHNcIiwgXCIyMDBcIjogXCJPS1wiLCBcIjIwMVwiOiBcIkNyZWF0ZWRcIixcbiAgICAgICAgXCIyMDJcIjogXCJBY2NlcHRlZFwiLCBcIjIwM1wiOiBcIk5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uXCIsIFwiMjA0XCI6IFwiTm8gQ29udGVudFwiLFxuICAgICAgICBcIjIwNVwiOiBcIlJlc2V0IENvbnRlbnRcIiwgXCIyMDZcIjogXCJQYXJ0aWFsIENvbnRlbnRcIiwgXCIzMDBcIjogXCJNdWx0aXBsZSBDaG9pY2VzXCIsXG4gICAgICAgIFwiMzAxXCI6IFwiTW92ZWQgUGVybWFuZW50bHlcIiwgXCIzMDJcIjogXCJGb3VuZFwiLCBcIjMwM1wiOiBcIlNlZSBPdGhlclwiLCBcIjMwNFwiOiBcIk5vdCBNb2RpZmllZFwiLFxuICAgICAgICBcIjMwNVwiOiBcIlVzZSBQcm94eVwiLCBcIjMwN1wiOiBcIlRlbXBvcmFyeSBSZWRpcmVjdFwiLCBcIjQwMFwiOiBcIkJhZCBSZXF1ZXN0XCIsXG4gICAgICAgIFwiNDAxXCI6IFwiVW5hdXRob3JpemVkXCIsIFwiNDAyXCI6IFwiUGF5bWVudCBSZXF1aXJlZFwiLCBcIjQwM1wiOiBcIkZvcmJpZGRlblwiLFxuICAgICAgICBcIjQwNFwiOiBcIk5vdCBGb3VuZFwiLCBcIjQwNVwiOiBcIk1ldGhvZCBOb3QgQWxsb3dlZFwiLCBcIjQwNlwiOiBcIk5vdCBBY2NlcHRhYmxlXCIsXG4gICAgICAgIFwiNDA3XCI6IFwiUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWRcIiwgXCI0MDhcIjogXCJSZXF1ZXN0IFRpbWVvdXRcIiwgXCI0MDlcIjogXCJDb25mbGljdFwiLFxuICAgICAgICBcIjQxMFwiOiBcIkdvbmVcIiwgXCI0MTFcIjogXCJMZW5ndGggUmVxdWlyZWRcIiwgXCI0MTJcIjogXCJQcmVjb25kaXRpb24gRmFpbGVkXCIsXG4gICAgICAgIFwiNDEzXCI6IFwiUGF5bG9hZCBUb28gTGFyZ2VcIiwgXCI0MTRcIjogXCJVUkkgVG9vIExhcmdlXCIsIFwiNDE1XCI6IFwiVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZVwiLFxuICAgICAgICBcIjQxNlwiOiBcIlJhbmdlIE5vdCBTYXRpc2ZpYWJsZVwiLCBcIjQxN1wiOiBcIkV4cGVjdGF0aW9uIEZhaWxlZFwiLCBcIjQyMlwiOiBcIlVucHJvY2Vzc2FibGUgQ29udGVudFwiLFxuICAgICAgICBcIjQyNlwiOiBcIlVwZ3JhZGUgUmVxdWlyZWRcIiwgXCI1MDBcIjogXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIiwgXCI1MDFcIjogXCJOb3QgSW1wbGVtZW50ZWRcIixcbiAgICAgICAgXCI1MDJcIjogXCJCYWQgR2F0ZXdheVwiLCBcIjUwM1wiOiBcIlNlcnZpY2UgVW5hdmFpbGFibGVcIiwgXCI1MDRcIjogXCJHYXRld2F5IFRpbW1lb3V0XCIsXG4gICAgICAgIFwiNTA1XCI6IFwiSFRUUCBWZXJzaW9uIE5vdCBTdXBwb3J0ZWRcIixcblxuICAgICAgICAvKipcbiAgICAgICAgKiBVdGlsaXR5IG1ldGhvZCB0aGF0IGFjY2VwdHMgYW4gSFRUUCBjb2RlIGFuZCByZXR1cm5zIGl0cyBjb3JyZXNwb25kaW5nIHJlYXNvbi1waHJhc2UuXG4gICAgICAgICogQHBhcmFtIGNvZGUgVGhlIEhUVFAgc3RhdHVzIGNvZGUgKG51bWJlcikuXG4gICAgICAgICogQHJldHVybnMgVGhlIHJlYXNvbiBwaHJhc2Ugc3RyaW5nLlxuICAgICAgICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGNvZGUgaXMgbm90IGEgdmFsaWQgaW50ZWdlciBpbiB0aGUgcmFuZ2UgWzEwMC01MDVdLlxuICAgICAgICAqL1xuICAgICAgICBnZXRSZWFzb246IChjb2RlOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGNvZGUpIHx8IGNvZGUgPCAxMDAgfHwgY29kZSA+IDUwNSkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50IGZvciBjb2RlWycgKyBjb2RlICsgJ10uIFZhbGlkIEhUVFAgY29kZXMgYXJlIGludGVnZXIgbnVtYmVycyBpbiB0aGUgcmFuZ2UgWzEwMC01MDVdLicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuSHR0cENvZGVzUmVhc29uc1tTdHJpbmcoY29kZSldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSByZXNwb25zZSBmYVx1MDBFN2FkZSBpcyBjdXJyZW50bHkgdmFsaWQgb3IgY29ubmVjdGVkIHRvIGFuIGFjdGl2ZSByZXF1ZXN0IGNvbnRleHQuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgaXNWYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5pc1ZhbGlkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplcyBhIEphdmFTY3JpcHQgb2JqZWN0IHRvIEpTT04sIHNldHMgdGhlIGBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25gIGhlYWRlcixcbiAgICAgKiBhbmQgd3JpdGVzIHRoZSBKU09OIHN0cmluZyB0byB0aGUgcmVzcG9uc2Ugb3V0cHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0gb2JqIFRoZSBKYXZhU2NyaXB0IG9iamVjdCB0byBiZSBzZXJpYWxpemVkIGFuZCBzZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMganNvbihvYmo6IGFueSk6IHZvaWQge1xuICAgICAgICBSZXNwb25zZS5hZGRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpXG4gICAgICAgIGNvbnN0IG9iakpzb24gPSBKU09OLnN0cmluZ2lmeShvYmopO1xuICAgICAgICBSZXNwb25zZS5wcmludChvYmpKc29uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgYSBzdHJpbmcgb2YgdGV4dCB0byB0aGUgcmVzcG9uc2UgYm9keSB1c2luZyAqKlVURi04KiogZW5jb2RpbmcuXG4gICAgICogTm90ZTogVGhpcyBtZXRob2QgYXV0b21hdGljYWxseSBoYW5kbGVzIGZsdXNoaW5nIHRoZSBvdXRwdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB0ZXh0IFRoZSBzdHJpbmcgY29udGVudCB0byB3cml0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHByaW50KHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0ZXh0ID0gKHRleHQgJiYgdGV4dC50b1N0cmluZygpKSB8fCBcIlwiO1xuICAgICAgICBjb25zdCBvdXQgPSBSZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKS5uYXRpdmU7XG4gICAgICAgIC8vIFVzZSBKYXZhIEkvTyB0byBlbnN1cmUgZXhwbGljaXQgVVRGLTggZW5jb2RpbmdcbiAgICAgICAgY29uc3Qgd3JpdGVyID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihvdXQsIFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpO1xuICAgICAgICB3cml0ZXIud3JpdGUodGV4dCk7XG4gICAgICAgIHdyaXRlci5mbHVzaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdyaXRlcyBhIHN0cmluZyBvZiB0ZXh0IGZvbGxvd2VkIGJ5IGEgbmV3bGluZSBjaGFyYWN0ZXIgKGBcXG5gKSB0byB0aGUgcmVzcG9uc2UgYm9keVxuICAgICAqIHVzaW5nICoqVVRGLTgqKiBlbmNvZGluZy5cbiAgICAgKiBAcGFyYW0gdGV4dCBUaGUgc3RyaW5nIGNvbnRlbnQgdG8gd3JpdGUuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBwcmludGxuKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0ZXh0ID0gKHRleHQgJiYgdGV4dC50b1N0cmluZygpKSB8fCBcIlwiO1xuICAgICAgICBjb25zdCBvdXQgPSBSZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKS5uYXRpdmU7XG4gICAgICAgIGNvbnN0IHdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3V0LCBTdGFuZGFyZENoYXJzZXRzLlVURl84KTtcbiAgICAgICAgd3JpdGVyLndyaXRlKHRleHQpO1xuICAgICAgICB3cml0ZXIud3JpdGUoXCJcXG5cIik7XG4gICAgICAgIHdyaXRlci5mbHVzaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdyaXRlcyBhbiBhcnJheSBvZiBieXRlcyBkaXJlY3RseSB0byB0aGUgcmVzcG9uc2Ugb3V0cHV0IHN0cmVhbSwgdHlwaWNhbGx5IHVzZWQgZm9yIGJpbmFyeSBkYXRhLlxuICAgICAqIEBwYXJhbSBieXRlcyBUaGUgYXJyYXkgb2YgYnl0ZXMgdG8gd3JpdGUuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB3cml0ZShieXRlczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFieXRlcykge1xuICAgICAgICAgICAgYnl0ZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBIdHRwUmVzcG9uc2VGYWNhZGUud3JpdGUoYnl0ZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgcmVzcG9uc2UgaGVhZGVycyBhbmQgc3RhdHVzIGhhdmUgYWxyZWFkeSBiZWVuIHNlbnQgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSByZXNwb25zZSBpcyBjb21taXR0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGlzQ29tbWl0dGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlRmFjYWRlLmlzQ29tbWl0dGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBDb250ZW50LVR5cGVgIGhlYWRlci5cbiAgICAgKiBAcGFyYW0gY29udGVudFR5cGUgVGhlIE1JTUUgdHlwZSBzdHJpbmcgKGUuZy4sICd0ZXh0L2h0bWwnLCAnYXBwbGljYXRpb24vcGRmJykuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBzZXRDb250ZW50VHlwZShjb250ZW50VHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIEh0dHBSZXNwb25zZUZhY2FkZS5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yY2VzIGFueSBidWZmZXJlZCBvdXRwdXQgdG8gYmUgd3JpdHRlbiB0byB0aGUgY2xpZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZmx1c2goKTogdm9pZCB7XG4gICAgICAgIEh0dHBSZXNwb25zZUZhY2FkZS5mbHVzaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgcmVzcG9uc2Ugb3V0cHV0IHN0cmVhbS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICBIdHRwUmVzcG9uc2VGYWNhZGUuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY29va2llIHRvIHRoZSByZXNwb25zZS4gVGhlIGNvb2tpZSBvYmplY3QgaXMgc2VyaWFsaXplZCB0byBKU09OIGJlZm9yZSBiZWluZyBwYXNzZWRcbiAgICAgKiB0byB0aGUgdW5kZXJseWluZyBKYXZhIGZhY2FkZS5cbiAgICAgKiBAcGFyYW0gY29va2llIFRoZSBjb29raWUgZGVmaW5pdGlvbiBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBhZGRDb29raWUoY29va2llOiBDb29raWUpOiB2b2lkIHtcbiAgICAgICAgSHR0cFJlc3BvbnNlRmFjYWRlLmFkZENvb2tpZShKU09OLnN0cmluZ2lmeShjb29raWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSByZXNwb25zZSBoZWFkZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBzZXQuXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBoZWFkZXIgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjb250YWluc0hlYWRlcihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5jb250YWluc0hlYWRlcihuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmNvZGVzIGEgVVJMIGZvciB1c2UgaW4gcmVkaXJlY3RzIG9yIGZvcm1zLCBpbmNsdWRpbmcgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpZiBuZWNlc3NhcnkuXG4gICAgICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIGVuY29kZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgZW5jb2RlZCBVUkwgc3RyaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZW5jb2RlVVJMKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5lbmNvZGVVUkwodXJsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdXNlZCBmb3IgdGhlIHJlc3BvbnNlIGJvZHkuXG4gICAgICogQHJldHVybnMgVGhlIGNoYXJhY3RlciBlbmNvZGluZyBzdHJpbmcuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRDaGFyYWN0ZXJFbmNvZGluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlRmFjYWRlLmdldENoYXJhY3RlckVuY29kaW5nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5jb2RlcyBhIFVSTCBmb3IgdXNlIGluIHRoZSBgTG9jYXRpb25gIGhlYWRlciBvZiBhIHJlZGlyZWN0IHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSB1cmwgVGhlIHJlZGlyZWN0IFVSTCB0byBlbmNvZGUuXG4gICAgICogQHJldHVybnMgVGhlIGVuY29kZWQgcmVkaXJlY3QgVVJMIHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGVuY29kZVJlZGlyZWN0VVJMKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5lbmNvZGVSZWRpcmVjdFVSTCh1cmwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgYENvbnRlbnQtVHlwZWAgaGVhZGVyIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIFRoZSBjb250ZW50IHR5cGUgc3RyaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q29udGVudFR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5nZXRDb250ZW50VHlwZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbmRzIGFuIEhUVFAgZXJyb3IgcmVzcG9uc2UgdG8gdGhlIGNsaWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgc3RhdHVzIGNvZGUgYW5kIG9wdGlvbmFsIG1lc3NhZ2UuXG4gICAgICogVGhpcyBieXBhc3NlcyB0aGUgbm9ybWFsIHJlc3BvbnNlIGJvZHkgd3JpdGluZyBwcm9jZXNzLlxuICAgICAqIEBwYXJhbSBzdGF0dXMgVGhlIEhUVFAgc3RhdHVzIGNvZGUgKGUuZy4sIDQwNCwgNTAwKS5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBBbiBvcHRpb25hbCBtZXNzYWdlIHRvIGluY2x1ZGUgaW4gdGhlIGVycm9yIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgc2VuZEVycm9yKHN0YXR1czogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIEh0dHBSZXNwb25zZUZhY2FkZS5zZW5kRXJyb3Ioc3RhdHVzLCBtZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdG8gYmUgdXNlZCBmb3IgdGhlIHJlc3BvbnNlIGJvZHkgKGUuZy4sICdVVEYtOCcpLlxuICAgICAqIEBwYXJhbSBjaGFyc2V0IFRoZSBjaGFyYWN0ZXIgc2V0IHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHNldENoYXJhY3RlckVuY29kaW5nKGNoYXJzZXQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBIdHRwUmVzcG9uc2VGYWNhZGUuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoY2hhcnNldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VuZHMgYSByZWRpcmVjdCByZXNwb25zZSAoc3RhdHVzIGNvZGUgMzAyIGJ5IGRlZmF1bHQpIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIGxvY2F0aW9uIFRoZSBuZXcgVVJMIHRvIHJlZGlyZWN0IHRoZSBjbGllbnQgdG8uXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBzZW5kUmVkaXJlY3QobG9jYXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBIdHRwUmVzcG9uc2VGYWNhZGUuc2VuZFJlZGlyZWN0KGxvY2F0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgQ29udGVudC1MZW5ndGhgIGhlYWRlciBmb3IgdGhlIHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIGJvZHkgaW4gYnl0ZXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBzZXRDb250ZW50TGVuZ3RoKGxlbmd0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIEh0dHBSZXNwb25zZUZhY2FkZS5zZXRDb250ZW50TGVuZ3RoKGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIHJlc3BvbnNlIGhlYWRlciB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCB2YWx1ZS4gSWYgdGhlIGhlYWRlciBhbHJlYWR5IGV4aXN0cywgaXRzIHZhbHVlIGlzIG92ZXJ3cml0dGVuLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgc2V0SGVhZGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBIdHRwUmVzcG9uc2VGYWNhZGUuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcmVzcG9uc2UgaGVhZGVyIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHZhbHVlLiBJZiB0aGUgaGVhZGVyIGFscmVhZHkgZXhpc3RzLCBhIHNlY29uZCBoZWFkZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGFkZGVkLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgYWRkSGVhZGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBIdHRwUmVzcG9uc2VGYWNhZGUuYWRkSGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBIVFRQIHN0YXR1cyBjb2RlIGZvciB0aGUgcmVzcG9uc2UuXG4gICAgICogQHBhcmFtIHN0YXR1cyBUaGUgaW50ZWdlciBzdGF0dXMgY29kZSAoZS5nLiwgMjAwLCA0MDQpLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgc2V0U3RhdHVzKHN0YXR1czogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIEh0dHBSZXNwb25zZUZhY2FkZS5zZXRTdGF0dXMoc3RhdHVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIGJ1ZmZlcnMsIHN0YXR1cyBjb2RlLCBhbmQgaGVhZGVycyBmcm9tIHRoZSByZXNwb25zZSwgYWxsb3dpbmcgYSBuZXcgcmVzcG9uc2UgdG8gYmUgZ2VuZXJhdGVkLlxuICAgICAqIFRoaXMgaXMgb25seSBwb3NzaWJsZSBpZiB0aGUgcmVzcG9uc2UgaGFzIG5vdCB5ZXQgYmVlbiBjb21taXR0ZWQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgSHR0cFJlc3BvbnNlRmFjYWRlLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpYyBoZWFkZXIuIElmIG11bHRpcGxlIGhlYWRlcnMgd2l0aCB0aGUgc2FtZSBuYW1lIGV4aXN0LCBpdCByZXR1cm5zIHRoZSBmaXJzdCBvbmUuXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgaGVhZGVyIHZhbHVlIHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldEhlYWRlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlRmFjYWRlLmdldEhlYWRlcihuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsb2NhbGUgZm9yIHRoZSByZXNwb25zZSwgd2hpY2ggbWF5IGFmZmVjdCBsYW5ndWFnZSBhbmQgZGF0ZS90aW1lIGZvcm1hdHRpbmcuXG4gICAgICogQHBhcmFtIGxhbmd1YWdlIFRoZSBsYW5ndWFnZSBjb2RlIChlLmcuLCAnZW4nLCAnZnInKS5cbiAgICAgKiBAcGFyYW0gY291bnRyeSBUaGUgb3B0aW9uYWwgY291bnRyeSBjb2RlIChlLmcuLCAnVVMnLCAnR0InKS5cbiAgICAgKiBAcGFyYW0gdmFyaWFudCBUaGUgb3B0aW9uYWwgdmFyaWFudCBjb2RlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgc2V0TG9jYWxlKGxhbmd1YWdlOiBzdHJpbmcsIGNvdW50cnk/OiBzdHJpbmcsIHZhcmlhbnQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5zZXRMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnksIHZhcmlhbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGhlYWRlciB2YWx1ZXMgZm9yIGEgc3BlY2lmaWMgaGVhZGVyIG5hbWUgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLlxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGhlYWRlciB2YWx1ZXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRIZWFkZXJzKG5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSHR0cFJlc3BvbnNlRmFjYWRlLmdldEhlYWRlcnMobmFtZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5hbWVzIG9mIGFsbCBoZWFkZXJzIHRoYXQgaGF2ZSBiZWVuIHNldCBvbiB0aGUgcmVzcG9uc2UuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaGVhZGVyIG5hbWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SGVhZGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShIdHRwUmVzcG9uc2VGYWNhZGUuZ2V0SGVhZGVyTmFtZXMoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY3VycmVudGx5IHNldCBsb2NhbGUgc3RyaW5nIGZvciB0aGUgcmVzcG9uc2UuXG4gICAgICogQHJldHVybnMgVGhlIGxvY2FsZSBzdHJpbmcuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUZhY2FkZS5nZXRMb2NhbGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB1bmRlcmx5aW5nIG91dHB1dCBzdHJlYW0gb2JqZWN0LCB3cmFwcGVkIGluIHRoZSBTREsncyBgT3V0cHV0U3RyZWFtYCBjbGFzcy5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igd3JpdGluZyByYXcgb3IgbGFyZ2UgYW1vdW50cyBvZiBkYXRhLlxuICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldE91dHB1dFN0cmVhbSgpOiBPdXRwdXRTdHJlYW0ge1xuICAgICAgICByZXR1cm4gbmV3IE91dHB1dFN0cmVhbShIdHRwUmVzcG9uc2VGYWNhZGUuZ2V0T3V0cHV0U3RyZWFtKCkpO1xuICAgIH1cbn1cblxuLy8gQHRzLWlnbm9yZVxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdC8vIEB0cy1pZ25vcmVcblx0bW9kdWxlLmV4cG9ydHMgPSBSZXNwb25zZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQU1BLFNBQVMsb0JBQW9CO0FBRTdCLE1BQU0scUJBQXFCLEtBQUssS0FBSyw4REFBOEQ7QUFDbkcsTUFBTSxxQkFBcUIsS0FBSyxLQUFLLDRCQUE0QjtBQUNqRSxNQUFNLG1CQUFtQixLQUFLLEtBQUssbUNBQW1DO0FBa0IvRCxNQUFNLFNBQVM7QUFBQTtBQUFBLEVBSWxCLE9BQXVCLFdBQVc7QUFBQSxFQUNsQyxPQUF1QixjQUFjO0FBQUEs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
|
|
@@ -20,6 +20,9 @@ function service(oConfig) {
|
|
|
20
20
|
return new HttpController(config);
|
|
21
21
|
}
|
|
22
22
|
class HttpController {
|
|
23
|
+
resource;
|
|
24
|
+
resourcePath;
|
|
25
|
+
resourceMappings;
|
|
23
26
|
/**
|
|
24
27
|
* Constructor function for HttpController instances.
|
|
25
28
|
*
|
|
@@ -285,4 +288,4 @@ export {
|
|
|
285
288
|
HttpController,
|
|
286
289
|
service
|
|
287
290
|
};
|
|
288
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2h0dHAvcnMvcmVzb3VyY2UtaHR0cC1jb250cm9sbGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZXNwb25zZSBhcyByZXNwb25zZSB9IGZyb20gXCIuLi9yZXNwb25zZVwiO1xuaW1wb3J0IHsgUmVxdWVzdCBhcyByZXF1ZXN0IH0gZnJvbSBcIi4uL3JlcXVlc3RcIjtcbmltcG9ydCB7IFJlc291cmNlTWFwcGluZ3MgfSBmcm9tIFwiLi9yZXNvdXJjZS1tYXBwaW5nc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAYWVyb2tpdC9zZGsvbG9nXCI7XG5cbi8vIERlY2xhcmF0aW9uIGZvciB0aGUgZXh0ZXJuYWwgZGlyaWdpYmxlUmVxdWlyZSBmdW5jdGlvbiBhbmQgaXRzIGRlcGVuZGVuY3lcbmRlY2xhcmUgZnVuY3Rpb24gZGlyaWdpYmxlUmVxdWlyZShtb2R1bGU6IHN0cmluZyk6IGFueTtcbmNvbnN0IHsgbWF0Y2ggfSA9IGRpcmlnaWJsZVJlcXVpcmUoXCJtb2R1bGVzL3NyYy9odHRwL3BhdGgtdG8tcmVnZXhwLzYuMi4xL2luZGV4LmpzXCIpO1xuXG5jb25zdCBsb2dnZXI6IGFueSA9IExvZ2dpbmcuZ2V0TG9nZ2VyKCdodHRwLnJzLmNvbnRyb2xsZXInKTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIHRoZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgdG8gaGFuZGxlciBmdW5jdGlvbnMgKGJlZm9yZSwgc2VydmUsIGNhdGNoKS5cbiAqL1xuaW50ZXJmYWNlIFJlcXVlc3RDb250ZXh0IHtcbiAgICBwYXRoUGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBxdWVyeVBhcmFtZXRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gICAgcmVzcG9uc2U6IGFueTtcbiAgICByZXM6IGFueTtcbiAgICByZXF1ZXN0OiBhbnk7XG4gICAgcmVxOiBhbnk7XG4gICAgLy8gQ29udGV4dCBwcm9wZXJ0aWVzIGZvciBlcnJvciBoYW5kbGluZyBtaWdodCBhbHNvIGJlIGF0dGFjaGVkIGhlcmVcbiAgICBzdXBwcmVzc1N0YWNrPzogYm9vbGVhbjtcbiAgICBodHRwRXJyb3JDb2RlPzogbnVtYmVyO1xuICAgIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgICBlcnJvck5hbWU/OiBzdHJpbmc7XG4gICAgZXJyb3JDb2RlPzogYW55O1xufVxuXG5mdW5jdGlvbiBnZXRSZXF1ZXN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG59XG5mdW5jdGlvbiBnZXRSZXNwb25zZSgpOiBhbnkge1xuICAgIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2VydmljZSAoSHR0cENvbnRyb2xsZXIpIGluc3RhbmNlLCBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggb01hcHBpbmdzLlxuICpcbiAqIEBwYXJhbSBvQ29uZmlnIENvbmZpZ3VyYXRpb24gb2JqZWN0IG9yIGNvbmZpZ3VyYXRpb24gYnVpbGRlciB3aXRoIGNvbmZpZ3VyYXRpb24oKSBnZXR0ZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIG5ldyBIdHRwQ29udHJvbGxlciBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2Uob0NvbmZpZz86IGFueSk6IEh0dHBDb250cm9sbGVyIHtcbiAgICBsZXQgY29uZmlnOiBSZXNvdXJjZU1hcHBpbmdzIHwgYW55O1xuICAgIGlmIChvQ29uZmlnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvQ29uZmlnID09PSAnb2JqZWN0JyB8fCBvQ29uZmlnIGluc3RhbmNlb2YgUmVzb3VyY2VNYXBwaW5ncykge1xuICAgICAgICAgICAgY29uZmlnID0gb0NvbmZpZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEh0dHBDb250cm9sbGVyKGNvbmZpZyk7XG59XG5cbi8qKlxuICogVGhlIG1haW4gY2xhc3MgZm9yIGhhbmRsaW5nIEhUVFAgcmVxdWVzdHMgYW5kIHJvdXRpbmcgdGhlbSB0byB0aGUgY29ycmVjdCByZXNvdXJjZSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBDb250cm9sbGVyIHtcblxuICAgIHJlc291cmNlOiBGdW5jdGlvbjtcbiAgICByZXNvdXJjZVBhdGg6IEZ1bmN0aW9uO1xuICAgIHJlc291cmNlTWFwcGluZ3M6IFJlc291cmNlTWFwcGluZ3M7XG5cbiAgICAvLyBJbmRleCBzaWduYXR1cmUgdG8gYWxsb3cgZHluYW1pYyBtZXRob2QgYXNzaWdubWVudCBpbiB0aGUgY29uc3RydWN0b3JcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgSHR0cENvbnRyb2xsZXIgaW5zdGFuY2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9NYXBwaW5ncyBUaGUgbWFwcGluZ3MgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBjb250cm9sbGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9NYXBwaW5ncz86IFJlc291cmNlTWFwcGluZ3MgfCBhbnkpIHtcbiAgICAgICAgaWYgKG9NYXBwaW5ncyBpbnN0YW5jZW9mIFJlc291cmNlTWFwcGluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VNYXBwaW5ncyA9IG9NYXBwaW5ncztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb01hcHBpbmdzID09PSAnb2JqZWN0JyB8fCBvTWFwcGluZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1hcHBpbmdzID0gbmV3IFJlc291cmNlTWFwcGluZ3Mob01hcHBpbmdzLCB0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gaWYgaW5wdXQgaXMgdW5leHBlY3RlZFxuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1hcHBpbmdzID0gbmV3IFJlc291cmNlTWFwcGluZ3Moe30sIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWxpYXMgZm9yIHJlc291cmNlTWFwcGluZ3MucmVzb3VyY2VcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VQYXRoID0gdGhpcy5yZXNvdXJjZU1hcHBpbmdzLnJlc291cmNlUGF0aC5iaW5kKHRoaXMucmVzb3VyY2VNYXBwaW5ncyk7XG5cbiAgICAgICAgLy8gd2VhdmUtaW4gSFRUUCBtZXRob2QtYmFzZWQgZmFjdG9yeSBmdW5jdGlvbnMgLSBzaG9ydGN1dCBmb3Igc2VydmljZSgpLnJlc291cmNlKHNQYXRoKS5tZXRob2RcbiAgICAgICAgWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3JlbW92ZScsICdtZXRob2QnXS5mb3JFYWNoKChzTWV0aG9kTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzW3NNZXRob2ROYW1lXSA9ICguLi5hbGxBcmd1bWVudHM6IGFueVtdKTogSHR0cENvbnRyb2xsZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbGxBcmd1bWVudHMubGVuZ3RoIDwgMSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0luc3VmZmljaWVudCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gSHR0cENvbnRyb2xsZXIgbWV0aG9kICcgKyBzTWV0aG9kTmFtZSArICcuJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBzUGF0aCBpcyBhbHdheXMgdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgICAgICAgICAgICAgbGV0IHNQYXRoID0gYWxsQXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChzUGF0aCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBzUGF0aCA9IFwiXCI7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBhcmd1bWVudHMgKHNWZXJiLCBhcnJDb25zdW1lcywgYXJyUHJvZHVjZXMpIGFyZSB1c2VkIGJ5IFJlc291cmNlTWFwcGluZ3MuZmluZC9yZXNvdXJjZVxuICAgICAgICAgICAgICAgIGNvbnN0IHNWZXJiID0gYWxsQXJndW1lbnRzWzFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyckNvbnN1bWVzID0gYWxsQXJndW1lbnRzWzJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyclByb2R1Y2VzID0gYWxsQXJndW1lbnRzWzNdO1xuXG4gICAgICAgICAgICAgICAgLy8gRmluZCBleGlzdGluZyByZXNvdXJjZSBvciBjcmVhdGUgYSBuZXcgb25lIGJhc2VkIG9uIHRoZSBwYXRoIChhbmQgb3RoZXIgb3B0aW9uYWwgY29uc3RyYWludHMpXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2U6IGFueSA9IHRoaXMucmVzb3VyY2VNYXBwaW5ncy5maW5kKHNQYXRoLCBzVmVyYiwgYXJyQ29uc3VtZXMsIGFyclByb2R1Y2VzKSB8fCB0aGlzLnJlc291cmNlTWFwcGluZ3MucmVzb3VyY2Uoc1BhdGgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUGFzcyBhbGwgYXJndW1lbnRzICpleGNlcHQqIHRoZSBzUGF0aCB0byB0aGUgY29ycmVzcG9uZGluZyBtZXRob2Qgb2YgdGhlIHJlc291cmNlXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VNZXRob2RBcmdzID0gYWxsQXJndW1lbnRzLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG1ldGhvZCBvbiB0aGUgcmVzb3VyY2UgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICByZXNvdXJjZVtzTWV0aG9kTmFtZV0uYXBwbHkocmVzb3VyY2UsIHJlc291cmNlTWV0aG9kQXJncyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgZXhlY3V0ZS5cbiAgICAgKi9cbiAgICBsaXN0ZW4ocmVxdWVzdDogYW55LCByZXNwb25zZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZShyZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHJlcXVlc3QgaGFuZGxpbmcgbG9naWMsIGZpbmRpbmcgdGhlIGJlc3QgbWF0Y2hpbmcgcmVzb3VyY2UgYW5kIGhhbmRsZXIuXG4gICAgICovXG4gICAgZXhlY3V0ZShyZXF1ZXN0PzogYW55LCByZXNwb25zZT86IGFueSk6IHZvaWQge1xuICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdCB8fCBnZXRSZXF1ZXN0KCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYXRoOiBzdHJpbmcgPSByZXF1ZXN0LmdldFJlc291cmNlUGF0aCgpO1xuICAgICAgICBjb25zdCBtZXRob2Q6IHN0cmluZyA9IHJlcXVlc3QuZ2V0TWV0aG9kKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgX29Db25maWd1cmF0aW9uOiBhbnkgPSB0aGlzLnJlc291cmNlTWFwcGluZ3MuY29uZmlndXJhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZXM6IGFueVtdID0gbWF0Y2hSZXF1ZXN0VXJsKHJlcXVlc3RQYXRoLCBtZXRob2QsIF9vQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGxldCByZXNvdXJjZUhhbmRsZXI6IGFueTtcblxuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzWzBdKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiSGFuZGxlcnM6IGFueVtdID0gX29Db25maWd1cmF0aW9uW21hdGNoZXNbMF0uZF1bbWV0aG9kXTtcbiAgICAgICAgICAgIGlmICh2ZXJiSGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZUhhbmRsZXIgPSB2ZXJiSGFuZGxlcnMuZmlsdGVyKChoYW5kbGVyRGVmKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaE1lZGlhVHlwZShyZXF1ZXN0LCBoYW5kbGVyRGVmLnByb2R1Y2VzLCBoYW5kbGVyRGVmLmNvbnN1bWVzKTtcbiAgICAgICAgICAgICAgICB9KVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UgfHwgZ2V0UmVzcG9uc2UoKTtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSByZXF1ZXN0LmdldFF1ZXJ5UGFyYW1ldGVyc01hcCgpIHx8IHt9O1xuICAgICAgICBjb25zdCBhY2NlcHRzSGVhZGVyOiBzdHJpbmdbXSA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0SGVhZGVyKCdBY2NlcHQnKSkgfHwgW107XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlSGVhZGVyOiBzdHJpbmdbXSA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKSkgfHwgW107XG4gICAgICAgIGNvbnN0IHJlc291cmNlUGF0aDogc3RyaW5nID0gcmVxdWVzdFBhdGg7XG5cbiAgICAgICAgaWYgKHJlc291cmNlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgY3R4OiBSZXF1ZXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBcInBhdGhQYXJhbWV0ZXJzXCI6IHt9LFxuICAgICAgICAgICAgICAgIFwicXVlcnlQYXJhbWV0ZXJzXCI6IHt9LFxuICAgICAgICAgICAgICAgIFwicmVzcG9uc2VcIjogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgXCJyZXNcIjogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgXCJyZXF1ZXN0XCI6IHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgXCJyZXFcIjogcmVxdWVzdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzWzBdLnBhdGhQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBjdHgucGF0aFBhcmFtZXRlcnMgPSBtYXRjaGVzWzBdLnBhdGhQYXJhbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHgucXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbXM7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vb3AgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgICAgICAgICBsZXQgX2JlZm9yZTogRnVuY3Rpb24sIF9zZXJ2ZTogRnVuY3Rpb24sIF9jYXRjaDogRnVuY3Rpb24sIF9maW5hbGx5OiBGdW5jdGlvbjtcbiAgICAgICAgICAgIF9iZWZvcmUgPSByZXNvdXJjZUhhbmRsZXIuYmVmb3JlIHx8IG5vb3A7XG4gICAgICAgICAgICBfc2VydmUgPSByZXNvdXJjZUhhbmRsZXIuaGFuZGxlciB8fCByZXNvdXJjZUhhbmRsZXIuc2VydmUgfHwgbm9vcDtcbiAgICAgICAgICAgIF9jYXRjaCA9IHJlc291cmNlSGFuZGxlci5jYXRjaCB8fCBjYXRjaEVycm9ySGFuZGxlci5iaW5kKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGVIZWFkZXIuam9pbignLCcpLFxuICAgICAgICAgICAgICAgIGFjY2VwdHM6IGFjY2VwdHNIZWFkZXIuam9pbignLCcpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF9maW5hbGx5ID0gcmVzb3VyY2VIYW5kbGVyLmZpbmFsbHkgfHwgbm9vcDtcblxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tBcmdzOiBhbnlbXSA9IFtjdHgsIHJlcXVlc3QsIHJlc3BvbnNlLCByZXNvdXJjZUhhbmRsZXIsIHRoaXNdO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZSgnQmVmb3JlIHNlcnZpbmcgcmVxdWVzdCBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgICAgIF9iZWZvcmUuYXBwbHkodGhpcywgY2FsbGJhY2tBcmdzKTtcblxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuaXNDb21taXR0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoJ1NlcnZpbmcgcmVxdWVzdCBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICBfc2VydmUuYXBwbHkodGhpcywgY2FsbGJhY2tBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKCdTZXJ2aW5nIHJlcXVlc3QgZm9yIFJlc291cmNlW3t9XSwgTWV0aG9kW3t9XSwgQ29udGVudC1UeXBlW3t9XSwgQWNjZXB0W3t9XSBmaW5pc2hlZCcsIHJlc291cmNlUGF0aCwgbWV0aG9kLnRvVXBwZXJDYXNlKCksIGNvbnRlbnRUeXBlSGVhZGVyLCBhY2NlcHRzSGVhZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQXJncy5zcGxpY2UoMSwgMCwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgX2NhdGNoLmFwcGx5KHRoaXMsIGNhbGxiYWNrQXJncyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoX2NhdGNoRXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VydmluZyByZXF1ZXN0IGZvciBSZXNvdXJjZVt7fV0sIE1ldGhvZFt7fV0sIENvbnRlbnQtVHlwZVt7fV0sIEFjY2VwdFt7fV0gZXJyb3IgaGFuZGxlciB0aHJldyBlcnJvcicsIF9jYXRjaEVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IF9jYXRjaEVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIEh0dHBDb250cm9sbGVyLnByb3RvdHlwZS5jbG9zZVJlc3BvbnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgX2ZpbmFsbHkuYXBwbHkodGhpcywgW10pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF9maW5hbGx5RXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VydmluZyByZXF1ZXN0IGZvciBSZXNvdXJjZVt7fV0sIE1ldGhvZFt7fV0sIENvbnRlbnQtVHlwZVt7fV0sIEFjY2VwdFt7fV0gcG9zdCBoYW5kbGVyIHRocmV3IGVycm9yJywgX2ZpbmFsbHlFcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTm8gc3VpdGFibGUgcmVzb3VyY2UgaGFuZGxlciBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dIGZvdW5kJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuXHRcdFx0bG9nZ2VyLmVycm9yKCdSZWdpc3RlcmVkIHJlc291cmNlIGhhbmRsZXJzIGZvciBSZXNvdXJjZVt7fV0gYXJlIFt7fV0nLCByZXNvdXJjZVBhdGgsIEpTT04uc3RyaW5naWZ5KF9vQ29uZmlndXJhdGlvbikpO1xuICAgICAgICAgICAgdGhpcy5zZW5kRXJyb3IocmVzcG9uc2UuQkFEX1JFUVVFU1QsIHVuZGVmaW5lZCwgJ0JhZCBSZXF1ZXN0JywgJ05vIHN1aXRhYmxlIHByb2Nlc3NvciBmb3IgdGhpcyByZXF1ZXN0LicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgUmVzb3VyY2VNYXBwaW5ncyBpbnN0YW5jZSBvZiB0aGlzIGNvbnRyb2xsZXIuXG4gICAgICovXG4gICAgbWFwcGluZ3MoKTogUmVzb3VyY2VNYXBwaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlTWFwcGluZ3M7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNlbmRzIGFuIGVycm9yIHJlc3BvbnNlIHRvIHRoZSBjbGllbnQsIGZvcm1hdHRlZCBiYXNlZCBvbiB0aGUgYWNjZXB0ZWQgbWVkaWEgdHlwZS5cbiAgICAgKi9cbiAgICBzZW5kRXJyb3IoaHR0cEVycm9yQ29kZTogbnVtYmVyLCBhcHBsaWNhdGlvbkVycm9yQ29kZTogYW55LCBlcnJvck5hbWU6IHN0cmluZywgZXJyb3JEZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWNjZXB0TWVkaWFUeXBlczogc3RyaW5nW10gPSBub3JtYWxpemVNZWRpYVR5cGVIZWFkZXJWYWx1ZShyZXF1ZXN0LmdldEhlYWRlcignQWNjZXB0JykpIHx8IFsnYXBwbGljYXRpb24vanNvbiddO1xuICAgICAgICBjb25zdCBpc0h0bWw6IGJvb2xlYW4gPSBjbGllbnRBY2NlcHRNZWRpYVR5cGVzLnNvbWUoKGFjY2VwdE1lZGlhVHlwZSkgPT4gaXNNaW1lVHlwZUNvbXBhdGlibGUoJyovaHRtbCcsIGFjY2VwdE1lZGlhVHlwZSkpO1xuXG4gICAgICAgIHJlc3BvbnNlLnNldFN0YXR1cyhodHRwRXJyb3JDb2RlIHx8IHJlc3BvbnNlLklOVEVSTkFMX1NFUlZFUl9FUlJPUik7XG5cbiAgICAgICAgaWYgKGlzSHRtbCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZTogc3RyaW5nID0gZXJyb3JOYW1lICsgKGFwcGxpY2F0aW9uRXJyb3JDb2RlICE9PSB1bmRlZmluZWQgPyAnWycgKyBhcHBsaWNhdGlvbkVycm9yQ29kZSArICddJyA6ICcnKSArIChlcnJvckRldGFpbHMgPyAnOiAnICsgZXJyb3JEZXRhaWxzIDogJycpO1xuICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKGh0dHBFcnJvckNvZGUgfHwgcmVzcG9uc2UuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCBtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICAgICAgXCJjb2RlXCI6IGFwcGxpY2F0aW9uRXJyb3JDb2RlLFxuICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogZXJyb3JOYW1lLFxuICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBlcnJvckRldGFpbHNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgcmVzcG9uc2UucHJpbnQoSlNPTi5zdHJpbmdpZnkoYm9keSwgbnVsbCwgMikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VSZXNwb25zZSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGbHVzaGVzIGFuZCBjbG9zZXMgdGhlIEhUVFAgcmVzcG9uc2Ugc3RyZWFtLlxuICAgICAqL1xuICAgIGNsb3NlUmVzcG9uc2UoKTogdm9pZCB7XG4gICAgICAgIHJlc3BvbnNlLmZsdXNoKCk7XG4gICAgICAgIHJlc3BvbnNlLmNsb3NlKCk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDdXN0b20gc29ydCBmdW5jdGlvbiBmb3IgbWF0Y2hlZCByb3V0ZSBkZWZpbml0aW9ucywgcHJlZmVycmluZyBleGFjdCBtYXRjaGVzIG92ZXIgdGhvc2Ugd2l0aCBwbGFjZWhvbGRlcnMuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZWRSb3V0ZURlZmluaXRpb25zU29ydGVyKHA6IGFueSwgbjogYW55KTogbnVtYmVyIHtcbiAgICBwLncgPSBjYWxjdWxhdGVNYXRjaGVkUm91dGVXZWlnaHQocCk7XG4gICAgbi53ID0gY2FsY3VsYXRlTWF0Y2hlZFJvdXRlV2VpZ2h0KG4pO1xuXG4gICAgaWYgKG4udyA9PT0gcC53KSB7XG4gICAgICAgIC8vIFRoZSBvbmUgd2l0aCBsZXNzIHBsYWNlaG9sZGVycyB3aW5zXG4gICAgICAgIGNvbnN0IG0xID0gcC5kLm1hdGNoKC97KC4qPyl9L2cpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnNDb3VudDEgPSBtMSAhPT0gbnVsbCA/IG0xLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IG0yID0gbi5kLm1hdGNoKC97KC4qPyl9L2cpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnNDb3VudDIgPSBtMiAhPT0gbnVsbCA/IG0yLmxlbmd0aCA6IDA7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcnNDb3VudDEgPiBwbGFjZWhvbGRlcnNDb3VudDIpIHtcbiAgICAgICAgICAgIG4udyA9IG4udyArIDE7XG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2Vob2xkZXJzQ291bnQxIDwgcGxhY2Vob2xkZXJzQ291bnQyKSB7XG4gICAgICAgICAgICBwLncgPSBwLncgKyAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuLncgLSBwLnc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaW5pdGlhbCB3ZWlnaHQgb2YgYSBtYXRjaGVkIHJvdXRlIGRlZmluaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZU1hdGNoZWRSb3V0ZVdlaWdodChtYXRjaGVkUm91dGU6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIChtYXRjaGVkUm91dGUucGFyYW1zICYmIE9iamVjdC5rZXlzKG1hdGNoZWRSb3V0ZS5wYXJhbXMpLmxlbmd0aCA+IDApID8gMCA6IDE7IC8vIGFsd2F5cyBwcmVmZXIgZXhhY3Qgcm91dGUgZGVmaW5pdGlvbnMgLSBzZXQgd2VpZ2h0IHRvIDFcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHBhdGggcGFyYW1ldGVycyBkZWNsYXJlZCBpbiBicmFjZXMgKGUuZy4sICcvYXBpL3twYXRoUGFyYW19JykgdG8gcGF0aC10by1yZWdleHAgZm9ybWF0IChlLmcuLCAnL2FwaS86cGF0aFBhcmFtJykuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhQYXJhbXNEZWNsYXJlZEluQnJhY2VzKHBhdGhEZWZpbml0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdGhQYXJhbXNJbkJyYWNlc01hdGNoZXIgPSAvKHsoXFx3KlxcKj8pfSkvZzsgLy8gbWF0Y2hlcyBjYXNlcyBsaWtlICcvYXBpL3twYXRoUGFyYW19JyBvciAnL2FwaS97cGF0aFBhcmFtKn0nXG4gICAgcmV0dXJuIHBhdGhEZWZpbml0aW9uLnJlcGxhY2UocGF0aFBhcmFtc0luQnJhY2VzTWF0Y2hlciwgXCI6JDJcIik7IC8vIHRyYW5zZm9ybXMgbWF0Y2hlZCBjYXNlcyB0byAnL2FwaS86cGF0aFBhcmFtJyBvciAnL2FwaS86cGF0aFBhcmFtKidcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgcm91dGVzIGluIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgbWF0Y2ggdGhlIHJlcXVlc3QgcGF0aCBhbmQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBtYXRjaFJlcXVlc3RVcmwocmVxdWVzdFBhdGg6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGNmZzogYW55KTogYW55W10ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjZmcpXG4gICAgICAgIC5maWx0ZXIoKFtfLCBoYW5kbGVyc10pID0+IGhhbmRsZXJzICYmIChoYW5kbGVycyBhcyBhbnkpW21ldGhvZF0pXG4gICAgICAgIC5tYXAoKFtwYXRoLCBfXSkgPT4gcGF0aClcbiAgICAgICAgLnJlZHVjZSgobWF0Y2hlczogYW55W10sIHBhdGg6IHN0cmluZykgPT4gbWF0Y2hpbmdSb3V0ZURlZmluaXRpb25zUmVkdWNlcihtYXRjaGVzLCBwYXRoLCByZXF1ZXN0UGF0aCksIFtdKVxuICAgICAgICAuc29ydChtYXRjaGVkUm91dGVEZWZpbml0aW9uc1NvcnRlcik7XG59XG5cbi8qKlxuICogUmVkdWNlciBmdW5jdGlvbiB0byBhdHRlbXB0IG1hdGNoaW5nIGEgZGVmaW5lZCBwYXRoIGFnYWluc3QgdGhlIHJlcXVlc3QgcGF0aCB1c2luZyBwYXRoLXRvLXJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hpbmdSb3V0ZURlZmluaXRpb25zUmVkdWNlcihtYXRjaGVkRGVmaW5pdGlvbnM6IGFueVtdLCBkZWZpbmVkUGF0aDogc3RyaW5nLCByZXF1ZXN0UGF0aDogc3RyaW5nKTogYW55W10ge1xuICAgIC8vICdtYXRjaCcgZnJvbSBwYXRoLXRvLXJlZ2V4cCBpcyB1c2VkIGhlcmVcbiAgICBjb25zdCBwYXRoTWF0Y2hlciA9IG1hdGNoKHRyYW5zZm9ybVBhdGhQYXJhbXNEZWNsYXJlZEluQnJhY2VzKGRlZmluZWRQYXRoKSk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IHBhdGhNYXRjaGVyKHJlcXVlc3RQYXRoKTtcblxuICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgIC8vIEVuc3VyZSBwYXRoUGFyYW1zIGlzIGFuIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnNcbiAgICAgICAgY29uc3QgcGF0aFBhcmFtcyA9IG1hdGNoZWQucGFyYW1zO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZWREZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgcDogcmVxdWVzdFBhdGgsXG4gICAgICAgICAgICBkOiBkZWZpbmVkUGF0aCxcbiAgICAgICAgICAgIHBhdGhQYXJhbXM6IHBhdGhQYXJhbXNcbiAgICAgICAgfTtcbiAgICAgICAgbWF0Y2hlZERlZmluaXRpb25zLnB1c2gobWF0Y2hlZERlZmluaXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZERlZmluaXRpb25zO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW4gSFRUUCBtZWRpYSB0eXBlIGhlYWRlciB2YWx1ZSAoZS5nLiwgXCJ0ZXh0L3BsYWluOyBxPTAuOSwgYXBwbGljYXRpb24vanNvblwiKS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWVkaWFUeXBlSGVhZGVyVmFsdWUoc01lZGlhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoc01lZGlhVHlwZSA9PT0gdW5kZWZpbmVkIHx8IHNNZWRpYVR5cGUgPT09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBjb252ZXJ0IHRvIGFycmF5IG9mIGluZGl2aWR1YWwgdHlwZXNcbiAgICBsZXQgYXJyTWVkaWFUeXBlID0gc01lZGlhVHlwZS5zcGxpdCgnLCcpO1xuICAgIGFyck1lZGlhVHlwZSA9IGFyck1lZGlhVHlwZS5tYXAoKG1pbWVUeXBlRW50cnkpID0+IHtcbiAgICAgICAgLy8gcmVtb3ZlIGVzY2FwaW5nLCByZW1vdmUgcXVhbGl0eSBvciBvdGhlciBhdHRyaWJ1dGVzIChlLmcuLCAnOyBxPTAuOScpXG4gICAgICAgIHJldHVybiBtaW1lVHlwZUVudHJ5LnJlcGxhY2UoJ1xcXFwnLCAnJykuc3BsaXQoJzsnKVswXS50cmltKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFyck1lZGlhVHlwZS5maWx0ZXIodHlwZSA9PiB0eXBlLmxlbmd0aCA+IDApO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNvdXJjZSBNSU1FIHR5cGUgaXMgY29tcGF0aWJsZSB3aXRoIGEgdGFyZ2V0IE1JTUUgdHlwZSwgc3VwcG9ydGluZyB3aWxkY2FyZHMgKCopLlxuICovXG5mdW5jdGlvbiBpc01pbWVUeXBlQ29tcGF0aWJsZShzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoc291cmNlID09PSB0YXJnZXQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgdGFyZ2V0TSA9IHRhcmdldC5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHNvdXJjZU0gPSBzb3VyY2Uuc3BsaXQoJy8nKTtcblxuICAgIC8vIFRhcmdldCBpcyB3aWxkY2FyZCB0eXBlLCBTb3VyY2UgaGFzIGEgc3BlY2lmaWMgc3VidHlwZSAoZS5nLiwgdGFyZ2V0PSovanNvbiwgc291cmNlPWFwcGxpY2F0aW9uL2pzb24pXG4gICAgaWYgKHRhcmdldE1bMF0gPT09ICcqJyAmJiB0YXJnZXRNWzFdID09PSBzb3VyY2VNWzFdKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBTb3VyY2UgaXMgd2lsZGNhcmQgdHlwZSwgVGFyZ2V0IGhhcyBhIHNwZWNpZmljIHN1YnR5cGUgKGUuZy4sIHNvdXJjZT0qL2pzb24sIHRhcmdldD1hcHBsaWNhdGlvbi9qc29uKVxuICAgIGlmIChzb3VyY2VNWzBdID09PSAnKicgJiYgdGFyZ2V0TVsxXSA9PT0gc291cmNlTVsxXSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBUYXJnZXQgaXMgd2lsZGNhcmQgc3VidHlwZSwgU291cmNlIGhhcyBhIHNwZWNpZmljIHR5cGUgKGUuZy4sIHRhcmdldD1hcHBsaWNhdGlvbi8qLCBzb3VyY2U9YXBwbGljYXRpb24vanNvbilcbiAgICBpZiAodGFyZ2V0TVsxXSA9PT0gJyonICYmIHRhcmdldE1bMF0gPT09IHNvdXJjZU1bMF0pXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIFNvdXJjZSBpcyB3aWxkY2FyZCBzdWJ0eXBlLCBUYXJnZXQgaGFzIGEgc3BlY2lmaWMgdHlwZSAoZS5nLiwgc291cmNlPWFwcGxpY2F0aW9uLyosIHRhcmdldD1hcHBsaWNhdGlvbi9qc29uKVxuICAgIGlmIChzb3VyY2VNWzFdID09PSAnKicgJiYgdGFyZ2V0TVswXSA9PT0gc291cmNlTVswXSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGVmYXVsdCBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uLlxuICovXG5jb25zdCBjYXRjaEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICh0aGlzOiBIdHRwQ29udHJvbGxlciwgbG9nY3R4OiBhbnksIGN0eDogUmVxdWVzdENvbnRleHQsIGVycjogYW55LCByZXF1ZXN0OiBhbnksIHJlc3BvbnNlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY3R4LnN1cHByZXNzU3RhY2spIHtcbiAgICAgICAgY29uc3QgZGV0YWlsc01zZyA9IChjdHguZXJyb3JOYW1lIHx8IFwiXCIpICsgKGN0eC5lcnJvckNvZGUgPyBcIiBbXCIgKyBjdHguZXJyb3JDb2RlICsgXCJdXCIgOiBcIlwiKSArIChjdHguZXJyb3JNZXNzYWdlID8gXCI6IFwiICsgY3R4LmVycm9yTWVzc2FnZSA6IFwiXCIpO1xuICAgICAgICBsb2dnZXIuaW5mbygnU2VydmluZyByZXNvdXJjZVt7fV0sIFZlcmJbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dIGZpbmlzaGVkIGluIGVycm9yLiB7fScsIGxvZ2N0eC5wYXRoLCBsb2djdHgubWV0aG9kLCBsb2djdHguY29udGVudFR5cGUsIGxvZ2N0eC5hY2NlcHRzLCBkZXRhaWxzTXNnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1NlcnZpbmcgcmVzb3VyY2Vbe31dLCBWZXJiW3t9XSwgQ29udGVudC1UeXBlW3t9XSwgQWNjZXB0W3t9XSBmaW5pc2hlZCBpbiBlcnJvcicsIGxvZ2N0eC5wYXRoLCBsb2djdHgubWV0aG9kLCBsb2djdHguY29udGVudFR5cGUsIGxvZ2N0eC5hY2NlcHRzLCBlcnIpO1xuICAgIH1cblxuICAgIGNvbnN0IGh0dHBFcnJvckNvZGUgPSBjdHguaHR0cEVycm9yQ29kZSB8fCByZXNwb25zZS5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gY3R4LmVycm9yTWVzc2FnZSB8fCAoZXJyICYmIGVyci5tZXNzYWdlKTtcbiAgICBjb25zdCBlcnJvck5hbWUgPSBjdHguZXJyb3JOYW1lIHx8IChlcnIgJiYgZXJyLm5hbWUpO1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGN0eC5lcnJvckNvZGU7XG5cbiAgICB0aGlzLnNlbmRFcnJvcihodHRwRXJyb3JDb2RlLCBlcnJvckNvZGUsIGVycm9yTmFtZSwgZXJyb3JNZXNzYWdlKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSByZXF1ZXN0IG1lZGlhIHR5cGVzIG1hdGNoIHRoZSByZXNvdXJjZSBoYW5kbGVyJ3MgY29uc3VtZXMgYW5kIHByb2R1Y2VzIGNvbnN0cmFpbnRzLlxuICovXG5jb25zdCBtYXRjaE1lZGlhVHlwZSA9IGZ1bmN0aW9uIChyZXF1ZXN0OiBhbnksIHByb2R1Y2VzTWVkaWFUeXBlczogc3RyaW5nW10sIGNvbnN1bWVzTWVkaWFUeXBlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBsZXQgaXNQcm9kdWNlTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGFjY2VwdHNNZWRpYVR5cGVzID0gbm9ybWFsaXplTWVkaWFUeXBlSGVhZGVyVmFsdWUocmVxdWVzdC5nZXRIZWFkZXIoJ0FjY2VwdCcpKTtcblxuICAgIC8vIDEuIENoZWNrIFByb2R1Y2VzIChBY2NlcHRzIGhlYWRlcilcbiAgICBpZiAoIWFjY2VwdHNNZWRpYVR5cGVzIHx8IGFjY2VwdHNNZWRpYVR5cGVzLmxlbmd0aCA9PT0gMCB8fCBhY2NlcHRzTWVkaWFUeXBlcy5pbmNsdWRlcygnKi8qJykpIHtcbiAgICAgICAgLy8gT3V0cHV0IG1lZGlhIHR5cGUgaXMgbm90IHJlc3RyaWN0ZWQgYnkgY2xpZW50IG9yIGNsaWVudCBhY2NlcHRzIGFueXRoaW5nXG4gICAgICAgIGlzUHJvZHVjZU1hdGNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9kdWNlc01lZGlhVHlwZXMgJiYgcHJvZHVjZXNNZWRpYVR5cGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFByb2R1Y2VzTUlNRSA9IGFjY2VwdHNNZWRpYVR5cGVzLmZpbHRlcigoYWNjZXB0c01lZGlhVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlc01lZGlhVHlwZXMuc29tZSgocHJvZHVjZXNNZWRpYVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWltZVR5cGVDb21wYXRpYmxlKGFjY2VwdHNNZWRpYVR5cGUsIHByb2R1Y2VzTWVkaWFUeXBlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXNQcm9kdWNlTWF0Y2hlZCA9IG1hdGNoZWRQcm9kdWNlc01JTUUgJiYgbWF0Y2hlZFByb2R1Y2VzTUlNRS5sZW5ndGggPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzb3VyY2UgZG9lc24ndCBzcGVjaWZ5IHByb2R1Y2VzLCBzbyBpdCBtYXRjaGVzIGlmIHRoZSBjbGllbnQgYWNjZXB0cyBhbnl0aGluZyBvciBpZiBwcm9kdWNlcyBpcyBhbiBlbXB0eSBhcnJheVxuICAgICAgICAgICAgaXNQcm9kdWNlTWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBDb25zdW1lcyAoQ29udGVudC1UeXBlIGhlYWRlcilcbiAgICBsZXQgaXNDb25zdW1lTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlTWVkaWFUeXBlcyA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0Q29udGVudFR5cGUoKSk7XG5cbiAgICBpZiAoIWNvbnN1bWVzTWVkaWFUeXBlcyB8fCBjb25zdW1lc01lZGlhVHlwZXMubGVuZ3RoID09PSAwIHx8IGNvbnN1bWVzTWVkaWFUeXBlcy5pbmNsdWRlcygnKi8qJykpIHtcbiAgICAgICAgLy8gSW5wdXQgbWVkaWEgdHlwZSBpcyBub3QgcmVzdHJpY3RlZCBieSByZXNvdXJjZSBvciByZXNvdXJjZSBhY2NlcHRzIGFueXRoaW5nXG4gICAgICAgIGlzQ29uc3VtZU1hdGNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjb250ZW50VHlwZU1lZGlhVHlwZXMgJiYgY29uc3VtZXNNZWRpYVR5cGVzICYmIGNvbnN1bWVzTWVkaWFUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb25zdW1lc01JTUUgPSBjb250ZW50VHlwZU1lZGlhVHlwZXMuZmlsdGVyKChjb250ZW50VHlwZU1lZGlhVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdW1lc01lZGlhVHlwZXMuc29tZSgoY29uc3VtZXNNZWRpYVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWltZVR5cGVDb21wYXRpYmxlKGNvbnRlbnRUeXBlTWVkaWFUeXBlLCBjb25zdW1lc01lZGlhVHlwZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlzQ29uc3VtZU1hdGNoZWQgPSBtYXRjaGVkQ29uc3VtZXNNSU1FICYmIG1hdGNoZWRDb25zdW1lc01JTUUubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc1Byb2R1Y2VNYXRjaGVkICYmIGlzQ29uc3VtZU1hdGNoZWQ7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxZQUFZLGdCQUFnQjtBQUNyQyxTQUFTLFdBQVcsZUFBZTtBQUNuQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLGVBQWU7QUFJeEIsTUFBTSxFQUFFLE1BQU0sSUFBSSxpQkFBaUIsZ0RBQWdEO0FBRW5GLE1BQU0sU0FBYyxRQUFRLFVBQVUsb0JBQW9CO0FBb0IxRCxTQUFTLGFBQWtCO0FBQ3ZCLFNBQU87QUFDWDtBQUNBLFNBQVMsY0FBbUI7QUFDeEIsU0FBTztBQUNYO0FBUU8sU0FBUyxRQUFRLFNBQStCO0FBQ25ELE1BQUk7QUFDSixNQUFJLFlBQVksUUFBVztBQUN2QixRQUFJLE9BQU8sWUFBWSxZQUFZLG1CQUFtQixrQkFBa0I7QUFDcEUsZUFBUztBQUFBLElBQ2I7QUFBQSxFQUNKO0FBQ0EsU0FBTyxJQUFJLGVBQWUsTUFBTTtBQUNwQztBQUtPLE1BQU0sZUFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWN4QixZQUFZLFdBQW9DO0FBQzVDLFFBQUkscUJBQXFCLGtCQUFrQjtBQUN2QyxXQUFLLG1CQUFtQjtBQUFBLElBQzVCLFdBQVcsT0FBTyxjQUFjLFlBQVksY0FBYyxRQUFXO0FBQ2pFLFdBQUssbUJBQW1CLElBQUksaUJBQWlCLFdBQVcsSUFBSTtBQUFBLElBQ2hFLE9BQU87QUFFSCxXQUFLLG1CQUFtQixJQUFJLGlCQUFpQixDQUFDLEdBQUcsSUFBSTtBQUFBLElBQ3pEO0FBR0EsU0FBSyxXQUFXLEtBQUssZUFBZSxLQUFLLGlCQUFpQixhQUFhLEtBQUssS0FBSyxnQkFBZ0I7QUFHakcsS0FBQyxPQUFPLFFBQVEsT0FBTyxVQUFVLFVBQVUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxnQkFBd0I7QUFDbEYsV0FBSyxXQUFXLElBQUksSUFBSSxpQkFBd0M7QUFDNUQsWUFBSSxhQUFhLFNBQVM7QUFDdEIsZ0JBQU0sTUFBTSw4REFBOEQsY0FBYyxHQUFHO0FBRy9GLFlBQUksUUFBUSxhQUFhLENBQUM7QUFDMUIsWUFBSSxVQUFVO0FBQ1Ysa0JBQVE7QUFHWixjQUFNLFFBQVEsYUFBYSxDQUFDO0FBQzVCLGNBQU0sY0FBYyxhQUFhLENBQUM7QUFDbEMsY0FBTSxjQUFjLGFBQWEsQ0FBQztBQUdsQyxjQUFNLFdBQWdCLEtBQUssaUJBQWlCLEtBQUssT0FBTyxPQUFPLGFBQWEsV0FBVyxLQUFLLEtBQUssaUJBQWlCLFNBQVMsS0FBSztBQUdoSSxjQUFNLHFCQUFxQixhQUFhLE1BQU0sQ0FBQztBQUcvQyxpQkFBUyxXQUFXLEVBQUUsTUFBTSxVQUFVLGtCQUFrQjtBQUV4RCxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0osQ0FBQztBQUFBLEVBQ0w7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE9BQU9BLFVBQWNDLFdBQXFCO0FBQ3RDLFNBQUssUUFBUUQsVUFBU0MsU0FBUTtBQUFBLEVBQ2xDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxRQUFRRCxVQUFlQyxXQUFzQjtBQUN6QyxJQUFBRCxXQUFVQSxZQUFXLFdBQVc7QUFDaEMsVUFBTSxjQUFzQkEsU0FBUSxnQkFBZ0I7QUFDcEQsVUFBTSxTQUFpQkEsU0FBUSxVQUFVLEVBQUUsWUFBWTtBQUN2RCxVQUFNLGtCQUF1QixLQUFLLGlCQUFpQixjQUFjO0FBRWpFLFVBQU0sVUFBaUIsZ0JBQWdCLGFBQWEsUUFBUSxlQUFlO0FBQzNFLFFBQUk7QUFFSixRQUFJLFdBQVcsUUFBUSxDQUFDLEdBQUc7QUFDdkIsWUFBTSxlQUFzQixnQkFBZ0IsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU07QUFDaEUsVUFBSSxjQUFjO0FBQ2QsMEJBQWtCLGFBQWEsT0FBTyxDQUFDLGVBQWU7QUFDbEQsaUJBQU8sZUFBZUEsVUFBUyxXQUFXLFVBQVUsV0FBVyxRQUFRO0FBQUEsUUFDM0UsQ0FBQyxFQUFFLENBQUM7QUFBQSxNQUNSO0FBQUEsSUFDSjtBQUVBLElBQUFDLFlBQVdBLGFBQVksWUFBWTtBQUNuQyxVQUFNLGNBQXNDRCxTQUFRLHNCQUFzQixLQUFLLENBQUM7QUFDaEYsVUFBTSxnQkFBMEIsOEJBQThCQSxTQUFRLFVBQVUsUUFBUSxDQUFDLEtBQUssQ0FBQztBQUMvRixVQUFNLG9CQUE4Qiw4QkFBOEJBLFNBQVEsVUFBVSxjQUFjLENBQUMsS0FBSyxDQUFDO0FBQ3pHLFVBQU0sZUFBdUI7QUFFN0IsUUFBSSxpQkFBaUI7QUFDakIsWUFBTSxNQUFzQjtBQUFBLFFBQ3hCLGtCQUFrQixDQUFDO0FBQUEsUUFDbkIsbUJBQW1CLENBQUM7QUFBQSxRQUNwQixZQUFZQztBQUFBLFFBQ1osT0FBT0E7QUFBQSxRQUNQLFdBQVdEO0FBQUEsUUFDWCxPQUFPQTtBQUFBLE1BQ1g7QUFDQSxVQUFJLFFBQVEsQ0FBQyxFQUFFLFlBQVk7QUFDdkIsWUFBSSxpQkFBaUIsUUFBUSxDQUFDLEVBQUU7QUFBQSxNQUNwQztBQUNBLFVBQUksa0JBQWtCO0FBRXRCLFlBQU0sT0FBTyxXQUFZO0FBQUEsTUFBRTtBQUMzQixVQUFJLFNBQW1CLFFBQWtCLFFBQWtCO0FBQzNELGdCQUFVLGdCQUFnQixVQUFVO0FBQ3BDLGVBQVMsZ0JBQWdCLFdBQVcsZ0JBQWdCLFNBQVM7QUFDN0QsZUFBUyxnQkFBZ0IsU0FBUyxrQkFBa0IsS0FBSyxNQUFNO0FBQUEsUUFDM0QsTUFBTTtBQUFBLFFBQ04sUUFBUSxPQUFPLFlBQVk7QUFBQSxRQUMzQixhQUFhLGtCQUFrQixLQUFLLEdBQUc7QUFBQSxRQUN2QyxTQUFTLGNBQWMsS0FBSyxHQUFHO0FBQUEsTUFDbkMsQ0FBQztBQUNELGlCQUFXLGdCQUFnQixXQUFXO0FBRXRDLFlBQU0sZUFBc0IsQ0FBQyxLQUFLQSxVQUFTQyxXQUFVLGlCQUFpQixJQUFJO0FBRTFFLFVBQUk7QUFDQSxlQUFPLE1BQU0scUZBQXFGLGNBQWMsT0FBTyxZQUFZLEdBQUcsbUJBQW1CLGFBQWE7QUFDdEssZ0JBQVEsTUFBTSxNQUFNLFlBQVk7QUFFaEMsWUFBSSxDQUFDQSxVQUFTLFlBQVksR0FBRztBQUN6QixpQkFBTyxNQUFNLDhFQUE4RSxjQUFjLE9BQU8sWUFBWSxHQUFHLG1CQUFtQixhQUFhO0FBQy9KLGlCQUFPLE1BQU0sTUFBTSxZQUFZO0FBQy9CLGlCQUFPLE1BQU0sdUZBQXVGLGNBQWMsT0FBTyxZQUFZLEdBQUcsbUJBQW1CLGFBQWE7QUFBQSxRQUM1SztBQUFBLE1BQ0osU0FBUyxLQUFVO0FBQ2YsWUFBSTtBQUNBLHVCQUFhLE9BQU8sR0FBRyxHQUFHLEdBQUc7QUFDN0IsaUJBQU8sTUFBTSxNQUFNLFlBQVk7QUFBQSxRQUNuQyxTQUFTLFdBQVc7QUFDaEIsaUJBQU8sTUFBTSx3R0FBd0csU0FBUztBQUM5SCxnQkFBTTtBQUFBLFFBQ1Y7QUFBQSxNQUNKLFVBQUU7QUFDRSx1QkFBZSxVQUFVLGNBQWMsS0FBSyxJQUFJO0FBQ2hELFlBQUk7QUFDQSxtQkFBUyxNQUFNLE1BQU0sQ0FBQyxDQUFDO0FBQUEsUUFDM0IsU0FBUyxhQUFhO0FBQ2xCLGlCQUFPLE1BQU0sdUdBQXVHLFdBQVc7QUFBQSxRQUNuSTtBQUFBLE1BQ0o7QUFBQSxJQUNKLE9BQU87QUFDSCxhQUFPLE1BQU0saUdBQWlHLGNBQWMsT0FBTyxZQUFZLEdBQUcsbUJBQW1CLGFBQWE7QUFDM0wsYUFBTyxNQUFNLDBEQUEwRCxjQUFjLEtBQUssVUFBVSxlQUFlLENBQUM7QUFDM0csV0FBSyxVQUFVQSxVQUFTLGFBQWEsUUFBVyxlQUFlLHlDQUF5QztBQUFBLElBQzVHO0FBQUEsRUFDSjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsV0FBNkI7QUFDekIsV0FBTyxLQUFLO0FBQUEsRUFDaEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLFVBQVUsZUFBdUIsc0JBQTJCLFdBQW1CLGNBQTRCO0FBQ3ZHLFVBQU0seUJBQW1DLDhCQUE4QixRQUFRLFVBQVUsUUFBUSxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7QUFDMUgsVUFBTSxTQUFrQix1QkFBdUIsS0FBSyxDQUFDLG9CQUFvQixxQkFBcUIsVUFBVSxlQUFlLENBQUM7QUFFeEgsYUFBUyxVQUFVLGlCQUFpQixTQUFTLHFCQUFxQjtBQUVsRSxRQUFJLFFBQVE7QUFDUixZQUFNLFVBQWtCLGFBQWEseUJBQXlCLFNBQVksTUFBTSx1QkFBdUIsTUFBTSxPQUFPLGVBQWUsT0FBTyxlQUFlO0FBQ3pKLGVBQVMsVUFBVSxpQkFBaUIsU0FBUyx1QkFBdUIsT0FBTztBQUFBLElBQy9FLE9BQU87QUFDSCxZQUFNLE9BQU87QUFBQSxRQUNULFFBQVE7QUFBQSxRQUNSLFNBQVM7QUFBQSxRQUNULFdBQVc7QUFBQSxNQUNmO0FBQ0EsZUFBUyxVQUFVLGdCQUFnQixrQkFBa0I7QUFDckQsZUFBUyxNQUFNLEtBQUssVUFBVSxNQUFNLE1BQU0sQ0FBQyxDQUFDO0FBQUEsSUFDaEQ7QUFDQSxTQUFLLGNBQWM7QUFBQSxFQUN2QjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsZ0JBQXNCO0FBQ2xCLGFBQVMsTUFBTTtBQUNmLGFBQVMsTUFBTTtBQUFBLEVBQ25CO0FBQ0o7QUFLQSxTQUFTLDhCQUE4QixHQUFRLEdBQWdCO0FBQzNELElBQUUsSUFBSSw0QkFBNEIsQ0FBQztBQUNuQyxJQUFFLElBQUksNEJBQTRCLENBQUM7QUFFbkMsTUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHO0FBRWIsVUFBTSxLQUFLLEVBQUUsRUFBRSxNQUFNLFVBQVU7QUFDL0IsVUFBTSxxQkFBcUIsT0FBTyxPQUFPLEdBQUcsU0FBUztBQUNyRCxVQUFNLEtBQUssRUFBRSxFQUFFLE1BQU0sVUFBVTtBQUMvQixVQUFNLHFCQUFxQixPQUFPLE9BQU8sR0FBRyxTQUFTO0FBQ3JELFFBQUkscUJBQXFCLG9CQUFvQjtBQUN6QyxRQUFFLElBQUksRUFBRSxJQUFJO0FBQUEsSUFDaEIsV0FBVyxxQkFBcUIsb0JBQW9CO0FBQ2hELFFBQUUsSUFBSSxFQUFFLElBQUk7QUFBQSxJQUNoQjtBQUFBLEVBQ0o7QUFDQSxTQUFPLEVBQUUsSUFBSSxFQUFFO0FBQ25CO0FBS0EsU0FBUyw0QkFBNEIsY0FBMkI7QUFDNUQsU0FBUSxhQUFhLFVBQVUsT0FBTyxLQUFLLGFBQWEsTUFBTSxFQUFFLFNBQVMsSUFBSyxJQUFJO0FBQ3RGO0FBS0EsU0FBUyxvQ0FBb0MsZ0JBQWdDO0FBQ3pFLFFBQU0sNEJBQTRCO0FBQ2xDLFNBQU8sZUFBZSxRQUFRLDJCQUEyQixLQUFLO0FBQ2xFO0FBS0EsU0FBUyxnQkFBZ0IsYUFBcUIsUUFBZ0IsS0FBaUI7QUFDM0UsU0FBTyxPQUFPLFFBQVEsR0FBRyxFQUNwQixPQUFPLENBQUMsQ0FBQyxHQUFHLFFBQVEsTUFBTSxZQUFhLFNBQWlCLE1BQU0sQ0FBQyxFQUMvRCxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQ3ZCLE9BQU8sQ0FBQyxTQUFnQixTQUFpQixnQ0FBZ0MsU0FBUyxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFDeEcsS0FBSyw2QkFBNkI7QUFDM0M7QUFLQSxTQUFTLGdDQUFnQyxvQkFBMkIsYUFBcUIsYUFBNEI7QUFFakgsUUFBTSxjQUFjLE1BQU0sb0NBQW9DLFdBQVcsQ0FBQztBQUMxRSxRQUFNLFVBQVUsWUFBWSxXQUFXO0FBRXZDLE1BQUksU0FBUztBQUVULFVBQU0sYUFBYSxRQUFRO0FBRTNCLFVBQU0sb0JBQW9CO0FBQUEsTUFDdEIsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0g7QUFBQSxJQUNKO0FBQ0EsdUJBQW1CLEtBQUssaUJBQWlCO0FBQUEsRUFDN0M7QUFDQSxTQUFPO0FBQ1g7QUFLQSxTQUFTLDhCQUE4QixZQUE2RDtBQUNoRyxNQUFJLGVBQWUsVUFBYSxlQUFlO0FBQzNDO0FBRUosTUFBSSxlQUFlLFdBQVcsTUFBTSxHQUFHO0FBQ3ZDLGlCQUFlLGFBQWEsSUFBSSxDQUFDLGtCQUFrQjtBQUUvQyxXQUFPLGNBQWMsUUFBUSxNQUFNLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSztBQUFBLEVBQzlELENBQUM7QUFDRCxTQUFPLGFBQWEsT0FBTyxVQUFRLEtBQUssU0FBUyxDQUFDO0FBQ3REO0FBS0EsU0FBUyxxQkFBcUIsUUFBZ0IsUUFBeUI7QUFDbkUsTUFBSSxXQUFXO0FBQ1gsV0FBTztBQUVYLFFBQU0sVUFBVSxPQUFPLE1BQU0sR0FBRztBQUNoQyxRQUFNLFVBQVUsT0FBTyxNQUFNLEdBQUc7QUFHaEMsTUFBSSxRQUFRLENBQUMsTUFBTSxPQUFPLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM5QyxXQUFPO0FBRVgsTUFBSSxRQUFRLENBQUMsTUFBTSxPQUFPLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM5QyxXQUFPO0FBR1gsTUFBSSxRQUFRLENBQUMsTUFBTSxPQUFPLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM5QyxXQUFPO0FBRVgsTUFBSSxRQUFRLENBQUMsTUFBTSxPQUFPLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM5QyxXQUFPO0FBRVgsU0FBTztBQUNYO0FBS0EsTUFBTSxvQkFBb0IsU0FBZ0MsUUFBYSxLQUFxQixLQUFVRCxVQUFjQyxXQUFxQjtBQUNySSxNQUFJLElBQUksZUFBZTtBQUNuQixVQUFNLGNBQWMsSUFBSSxhQUFhLE9BQU8sSUFBSSxZQUFZLE9BQU8sSUFBSSxZQUFZLE1BQU0sT0FBTyxJQUFJLGVBQWUsT0FBTyxJQUFJLGVBQWU7QUFDN0ksV0FBTyxLQUFLLHNGQUFzRixPQUFPLE1BQU0sT0FBTyxRQUFRLE9BQU8sYUFBYSxPQUFPLFNBQVMsVUFBVTtBQUFBLEVBQ2hMLE9BQU87QUFDSCxXQUFPLE1BQU0sa0ZBQWtGLE9BQU8sTUFBTSxPQUFPLFFBQVEsT0FBTyxhQUFhLE9BQU8sU0FBUyxHQUFHO0FBQUEsRUFDdEs7QUFFQSxRQUFNLGdCQUFnQixJQUFJLGlCQUFpQkEsVUFBUztBQUNwRCxRQUFNLGVBQWUsSUFBSSxnQkFBaUIsT0FBTyxJQUFJO0FBQ3JELFFBQU0sWUFBWSxJQUFJLGFBQWMsT0FBTyxJQUFJO0FBQy9DLFFBQU0sWUFBWSxJQUFJO0FBRXRCLE9BQUssVUFBVSxlQUFlLFdBQVcsV0FBVyxZQUFZO0FBQ3BFO0FBS0EsTUFBTSxpQkFBaUIsU0FBVUQsVUFBYyxvQkFBOEIsb0JBQXVDO0FBQ2hILE1BQUksbUJBQW1CO0FBQ3ZCLFFBQU0sb0JBQW9CLDhCQUE4QkEsU0FBUSxVQUFVLFFBQVEsQ0FBQztBQUduRixNQUFJLENBQUMscUJBQXFCLGtCQUFrQixXQUFXLEtBQUssa0JBQWtCLFNBQVMsS0FBSyxHQUFHO0FBRTNGLHVCQUFtQjtBQUFBLEVBQ3ZCLE9BQU87QUFDSCxRQUFJLHNCQUFzQixtQkFBbUIsUUFBUTtBQUNqRCxZQUFNLHNCQUFzQixrQkFBa0IsT0FBTyxDQUFDLHFCQUFxQjtBQUN2RSxlQUFPLG1CQUFtQixLQUFLLENBQUMsc0JBQXNCO0FBQ2xELGlCQUFPLHFCQUFxQixrQkFBa0IsaUJBQWlCO0FBQUEsUUFDbkUsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUNELHlCQUFtQix1QkFBdUIsb0JBQW9CLFNBQVM7QUFBQSxJQUMzRSxPQUFPO0FBRUgseUJBQW1CO0FBQUEsSUFDdkI7QUFBQSxFQUNKO0FBR0EsTUFBSSxtQkFBbUI7QUFDdkIsUUFBTSx3QkFBd0IsOEJBQThCQSxTQUFRLGVBQWUsQ0FBQztBQUVwRixNQUFJLENBQUMsc0JBQXNCLG1CQUFtQixXQUFXLEtBQUssbUJBQW1CLFNBQVMsS0FBSyxHQUFHO0FBRTlGLHVCQUFtQjtBQUFBLEVBQ3ZCLE9BQU87QUFDSCxRQUFJLHlCQUF5QixzQkFBc0IsbUJBQW1CLFFBQVE7QUFDMUUsWUFBTSxzQkFBc0Isc0JBQXNCLE9BQU8sQ0FBQyx5QkFBeUI7QUFDL0UsZUFBTyxtQkFBbUIsS0FBSyxDQUFDLHNCQUFzQjtBQUNsRCxpQkFBTyxxQkFBcUIsc0JBQXNCLGlCQUFpQjtBQUFBLFFBQ3ZFLENBQUM7QUFBQSxNQUNMLENBQUM7QUFDRCx5QkFBbUIsdUJBQXVCLG9CQUFvQixTQUFTO0FBQUEsSUFDM0U7QUFBQSxFQUNKO0FBRUEsU0FBTyxvQkFBb0I7QUFDL0I7IiwKICAibmFtZXMiOiBbInJlcXVlc3QiLCAicmVzcG9uc2UiXQp9Cg==
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2h0dHAvcnMvcmVzb3VyY2UtaHR0cC1jb250cm9sbGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZXNwb25zZSBhcyByZXNwb25zZSB9IGZyb20gXCIuLi9yZXNwb25zZVwiO1xuaW1wb3J0IHsgUmVxdWVzdCBhcyByZXF1ZXN0IH0gZnJvbSBcIi4uL3JlcXVlc3RcIjtcbmltcG9ydCB7IFJlc291cmNlTWFwcGluZ3MgfSBmcm9tIFwiLi9yZXNvdXJjZS1tYXBwaW5nc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAYWVyb2tpdC9zZGsvbG9nXCI7XG5cbi8vIERlY2xhcmF0aW9uIGZvciB0aGUgZXh0ZXJuYWwgZGlyaWdpYmxlUmVxdWlyZSBmdW5jdGlvbiBhbmQgaXRzIGRlcGVuZGVuY3lcbmRlY2xhcmUgZnVuY3Rpb24gZGlyaWdpYmxlUmVxdWlyZShtb2R1bGU6IHN0cmluZyk6IGFueTtcbmNvbnN0IHsgbWF0Y2ggfSA9IGRpcmlnaWJsZVJlcXVpcmUoXCJtb2R1bGVzL3NyYy9odHRwL3BhdGgtdG8tcmVnZXhwLzYuMi4xL2luZGV4LmpzXCIpO1xuXG5jb25zdCBsb2dnZXI6IGFueSA9IExvZ2dpbmcuZ2V0TG9nZ2VyKCdodHRwLnJzLmNvbnRyb2xsZXInKTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIHRoZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgdG8gaGFuZGxlciBmdW5jdGlvbnMgKGJlZm9yZSwgc2VydmUsIGNhdGNoKS5cbiAqL1xuaW50ZXJmYWNlIFJlcXVlc3RDb250ZXh0IHtcbiAgICBwYXRoUGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBxdWVyeVBhcmFtZXRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gICAgcmVzcG9uc2U6IGFueTtcbiAgICByZXM6IGFueTtcbiAgICByZXF1ZXN0OiBhbnk7XG4gICAgcmVxOiBhbnk7XG4gICAgLy8gQ29udGV4dCBwcm9wZXJ0aWVzIGZvciBlcnJvciBoYW5kbGluZyBtaWdodCBhbHNvIGJlIGF0dGFjaGVkIGhlcmVcbiAgICBzdXBwcmVzc1N0YWNrPzogYm9vbGVhbjtcbiAgICBodHRwRXJyb3JDb2RlPzogbnVtYmVyO1xuICAgIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgICBlcnJvck5hbWU/OiBzdHJpbmc7XG4gICAgZXJyb3JDb2RlPzogYW55O1xufVxuXG5mdW5jdGlvbiBnZXRSZXF1ZXN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG59XG5mdW5jdGlvbiBnZXRSZXNwb25zZSgpOiBhbnkge1xuICAgIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2VydmljZSAoSHR0cENvbnRyb2xsZXIpIGluc3RhbmNlLCBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggb01hcHBpbmdzLlxuICpcbiAqIEBwYXJhbSBvQ29uZmlnIENvbmZpZ3VyYXRpb24gb2JqZWN0IG9yIGNvbmZpZ3VyYXRpb24gYnVpbGRlciB3aXRoIGNvbmZpZ3VyYXRpb24oKSBnZXR0ZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIG5ldyBIdHRwQ29udHJvbGxlciBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2Uob0NvbmZpZz86IGFueSk6IEh0dHBDb250cm9sbGVyIHtcbiAgICBsZXQgY29uZmlnOiBSZXNvdXJjZU1hcHBpbmdzIHwgYW55O1xuICAgIGlmIChvQ29uZmlnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvQ29uZmlnID09PSAnb2JqZWN0JyB8fCBvQ29uZmlnIGluc3RhbmNlb2YgUmVzb3VyY2VNYXBwaW5ncykge1xuICAgICAgICAgICAgY29uZmlnID0gb0NvbmZpZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEh0dHBDb250cm9sbGVyKGNvbmZpZyk7XG59XG5cbi8qKlxuICogVGhlIG1haW4gY2xhc3MgZm9yIGhhbmRsaW5nIEhUVFAgcmVxdWVzdHMgYW5kIHJvdXRpbmcgdGhlbSB0byB0aGUgY29ycmVjdCByZXNvdXJjZSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBDb250cm9sbGVyIHtcblxuICAgIHJlc291cmNlOiBGdW5jdGlvbjtcbiAgICByZXNvdXJjZVBhdGg6IEZ1bmN0aW9uO1xuICAgIHJlc291cmNlTWFwcGluZ3M6IFJlc291cmNlTWFwcGluZ3M7XG5cbiAgICAvLyBJbmRleCBzaWduYXR1cmUgdG8gYWxsb3cgZHluYW1pYyBtZXRob2QgYXNzaWdubWVudCBpbiB0aGUgY29uc3RydWN0b3JcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgSHR0cENvbnRyb2xsZXIgaW5zdGFuY2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9NYXBwaW5ncyBUaGUgbWFwcGluZ3MgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBjb250cm9sbGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9NYXBwaW5ncz86IFJlc291cmNlTWFwcGluZ3MgfCBhbnkpIHtcbiAgICAgICAgaWYgKG9NYXBwaW5ncyBpbnN0YW5jZW9mIFJlc291cmNlTWFwcGluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VNYXBwaW5ncyA9IG9NYXBwaW5ncztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb01hcHBpbmdzID09PSAnb2JqZWN0JyB8fCBvTWFwcGluZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1hcHBpbmdzID0gbmV3IFJlc291cmNlTWFwcGluZ3Mob01hcHBpbmdzLCB0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gaWYgaW5wdXQgaXMgdW5leHBlY3RlZFxuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1hcHBpbmdzID0gbmV3IFJlc291cmNlTWFwcGluZ3Moe30sIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWxpYXMgZm9yIHJlc291cmNlTWFwcGluZ3MucmVzb3VyY2VcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VQYXRoID0gdGhpcy5yZXNvdXJjZU1hcHBpbmdzLnJlc291cmNlUGF0aC5iaW5kKHRoaXMucmVzb3VyY2VNYXBwaW5ncyk7XG5cbiAgICAgICAgLy8gd2VhdmUtaW4gSFRUUCBtZXRob2QtYmFzZWQgZmFjdG9yeSBmdW5jdGlvbnMgLSBzaG9ydGN1dCBmb3Igc2VydmljZSgpLnJlc291cmNlKHNQYXRoKS5tZXRob2RcbiAgICAgICAgWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3JlbW92ZScsICdtZXRob2QnXS5mb3JFYWNoKChzTWV0aG9kTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzW3NNZXRob2ROYW1lXSA9ICguLi5hbGxBcmd1bWVudHM6IGFueVtdKTogSHR0cENvbnRyb2xsZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbGxBcmd1bWVudHMubGVuZ3RoIDwgMSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0luc3VmZmljaWVudCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gSHR0cENvbnRyb2xsZXIgbWV0aG9kICcgKyBzTWV0aG9kTmFtZSArICcuJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBzUGF0aCBpcyBhbHdheXMgdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgICAgICAgICAgICAgbGV0IHNQYXRoID0gYWxsQXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChzUGF0aCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBzUGF0aCA9IFwiXCI7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBhcmd1bWVudHMgKHNWZXJiLCBhcnJDb25zdW1lcywgYXJyUHJvZHVjZXMpIGFyZSB1c2VkIGJ5IFJlc291cmNlTWFwcGluZ3MuZmluZC9yZXNvdXJjZVxuICAgICAgICAgICAgICAgIGNvbnN0IHNWZXJiID0gYWxsQXJndW1lbnRzWzFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyckNvbnN1bWVzID0gYWxsQXJndW1lbnRzWzJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyclByb2R1Y2VzID0gYWxsQXJndW1lbnRzWzNdO1xuXG4gICAgICAgICAgICAgICAgLy8gRmluZCBleGlzdGluZyByZXNvdXJjZSBvciBjcmVhdGUgYSBuZXcgb25lIGJhc2VkIG9uIHRoZSBwYXRoIChhbmQgb3RoZXIgb3B0aW9uYWwgY29uc3RyYWludHMpXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2U6IGFueSA9IHRoaXMucmVzb3VyY2VNYXBwaW5ncy5maW5kKHNQYXRoLCBzVmVyYiwgYXJyQ29uc3VtZXMsIGFyclByb2R1Y2VzKSB8fCB0aGlzLnJlc291cmNlTWFwcGluZ3MucmVzb3VyY2Uoc1BhdGgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUGFzcyBhbGwgYXJndW1lbnRzICpleGNlcHQqIHRoZSBzUGF0aCB0byB0aGUgY29ycmVzcG9uZGluZyBtZXRob2Qgb2YgdGhlIHJlc291cmNlXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VNZXRob2RBcmdzID0gYWxsQXJndW1lbnRzLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG1ldGhvZCBvbiB0aGUgcmVzb3VyY2UgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICByZXNvdXJjZVtzTWV0aG9kTmFtZV0uYXBwbHkocmVzb3VyY2UsIHJlc291cmNlTWV0aG9kQXJncyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgZXhlY3V0ZS5cbiAgICAgKi9cbiAgICBsaXN0ZW4ocmVxdWVzdDogYW55LCByZXNwb25zZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZShyZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHJlcXVlc3QgaGFuZGxpbmcgbG9naWMsIGZpbmRpbmcgdGhlIGJlc3QgbWF0Y2hpbmcgcmVzb3VyY2UgYW5kIGhhbmRsZXIuXG4gICAgICovXG4gICAgZXhlY3V0ZShyZXF1ZXN0PzogYW55LCByZXNwb25zZT86IGFueSk6IHZvaWQge1xuICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdCB8fCBnZXRSZXF1ZXN0KCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYXRoOiBzdHJpbmcgPSByZXF1ZXN0LmdldFJlc291cmNlUGF0aCgpO1xuICAgICAgICBjb25zdCBtZXRob2Q6IHN0cmluZyA9IHJlcXVlc3QuZ2V0TWV0aG9kKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgX29Db25maWd1cmF0aW9uOiBhbnkgPSB0aGlzLnJlc291cmNlTWFwcGluZ3MuY29uZmlndXJhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZXM6IGFueVtdID0gbWF0Y2hSZXF1ZXN0VXJsKHJlcXVlc3RQYXRoLCBtZXRob2QsIF9vQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGxldCByZXNvdXJjZUhhbmRsZXI6IGFueTtcblxuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzWzBdKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiSGFuZGxlcnM6IGFueVtdID0gX29Db25maWd1cmF0aW9uW21hdGNoZXNbMF0uZF1bbWV0aG9kXTtcbiAgICAgICAgICAgIGlmICh2ZXJiSGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZUhhbmRsZXIgPSB2ZXJiSGFuZGxlcnMuZmlsdGVyKChoYW5kbGVyRGVmKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaE1lZGlhVHlwZShyZXF1ZXN0LCBoYW5kbGVyRGVmLnByb2R1Y2VzLCBoYW5kbGVyRGVmLmNvbnN1bWVzKTtcbiAgICAgICAgICAgICAgICB9KVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UgfHwgZ2V0UmVzcG9uc2UoKTtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSByZXF1ZXN0LmdldFF1ZXJ5UGFyYW1ldGVyc01hcCgpIHx8IHt9O1xuICAgICAgICBjb25zdCBhY2NlcHRzSGVhZGVyOiBzdHJpbmdbXSA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0SGVhZGVyKCdBY2NlcHQnKSkgfHwgW107XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlSGVhZGVyOiBzdHJpbmdbXSA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKSkgfHwgW107XG4gICAgICAgIGNvbnN0IHJlc291cmNlUGF0aDogc3RyaW5nID0gcmVxdWVzdFBhdGg7XG5cbiAgICAgICAgaWYgKHJlc291cmNlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgY3R4OiBSZXF1ZXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBcInBhdGhQYXJhbWV0ZXJzXCI6IHt9LFxuICAgICAgICAgICAgICAgIFwicXVlcnlQYXJhbWV0ZXJzXCI6IHt9LFxuICAgICAgICAgICAgICAgIFwicmVzcG9uc2VcIjogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgXCJyZXNcIjogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgXCJyZXF1ZXN0XCI6IHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgXCJyZXFcIjogcmVxdWVzdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzWzBdLnBhdGhQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBjdHgucGF0aFBhcmFtZXRlcnMgPSBtYXRjaGVzWzBdLnBhdGhQYXJhbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHgucXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbXM7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vb3AgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgICAgICAgICBsZXQgX2JlZm9yZTogRnVuY3Rpb24sIF9zZXJ2ZTogRnVuY3Rpb24sIF9jYXRjaDogRnVuY3Rpb24sIF9maW5hbGx5OiBGdW5jdGlvbjtcbiAgICAgICAgICAgIF9iZWZvcmUgPSByZXNvdXJjZUhhbmRsZXIuYmVmb3JlIHx8IG5vb3A7XG4gICAgICAgICAgICBfc2VydmUgPSByZXNvdXJjZUhhbmRsZXIuaGFuZGxlciB8fCByZXNvdXJjZUhhbmRsZXIuc2VydmUgfHwgbm9vcDtcbiAgICAgICAgICAgIF9jYXRjaCA9IHJlc291cmNlSGFuZGxlci5jYXRjaCB8fCBjYXRjaEVycm9ySGFuZGxlci5iaW5kKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGVIZWFkZXIuam9pbignLCcpLFxuICAgICAgICAgICAgICAgIGFjY2VwdHM6IGFjY2VwdHNIZWFkZXIuam9pbignLCcpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF9maW5hbGx5ID0gcmVzb3VyY2VIYW5kbGVyLmZpbmFsbHkgfHwgbm9vcDtcblxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tBcmdzOiBhbnlbXSA9IFtjdHgsIHJlcXVlc3QsIHJlc3BvbnNlLCByZXNvdXJjZUhhbmRsZXIsIHRoaXNdO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZSgnQmVmb3JlIHNlcnZpbmcgcmVxdWVzdCBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgICAgIF9iZWZvcmUuYXBwbHkodGhpcywgY2FsbGJhY2tBcmdzKTtcblxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuaXNDb21taXR0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoJ1NlcnZpbmcgcmVxdWVzdCBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICBfc2VydmUuYXBwbHkodGhpcywgY2FsbGJhY2tBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKCdTZXJ2aW5nIHJlcXVlc3QgZm9yIFJlc291cmNlW3t9XSwgTWV0aG9kW3t9XSwgQ29udGVudC1UeXBlW3t9XSwgQWNjZXB0W3t9XSBmaW5pc2hlZCcsIHJlc291cmNlUGF0aCwgbWV0aG9kLnRvVXBwZXJDYXNlKCksIGNvbnRlbnRUeXBlSGVhZGVyLCBhY2NlcHRzSGVhZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQXJncy5zcGxpY2UoMSwgMCwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgX2NhdGNoLmFwcGx5KHRoaXMsIGNhbGxiYWNrQXJncyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoX2NhdGNoRXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VydmluZyByZXF1ZXN0IGZvciBSZXNvdXJjZVt7fV0sIE1ldGhvZFt7fV0sIENvbnRlbnQtVHlwZVt7fV0sIEFjY2VwdFt7fV0gZXJyb3IgaGFuZGxlciB0aHJldyBlcnJvcicsIF9jYXRjaEVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IF9jYXRjaEVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIEh0dHBDb250cm9sbGVyLnByb3RvdHlwZS5jbG9zZVJlc3BvbnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgX2ZpbmFsbHkuYXBwbHkodGhpcywgW10pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF9maW5hbGx5RXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VydmluZyByZXF1ZXN0IGZvciBSZXNvdXJjZVt7fV0sIE1ldGhvZFt7fV0sIENvbnRlbnQtVHlwZVt7fV0sIEFjY2VwdFt7fV0gcG9zdCBoYW5kbGVyIHRocmV3IGVycm9yJywgX2ZpbmFsbHlFcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTm8gc3VpdGFibGUgcmVzb3VyY2UgaGFuZGxlciBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dIGZvdW5kJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuXHRcdFx0bG9nZ2VyLmVycm9yKCdSZWdpc3RlcmVkIHJlc291cmNlIGhhbmRsZXJzIGZvciBSZXNvdXJjZVt7fV0gYXJlIFt7fV0nLCByZXNvdXJjZVBhdGgsIEpTT04uc3RyaW5naWZ5KF9vQ29uZmlndXJhdGlvbikpO1xuICAgICAgICAgICAgdGhpcy5zZW5kRXJyb3IocmVzcG9uc2UuQkFEX1JFUVVFU1QsIHVuZGVmaW5lZCwgJ0JhZCBSZXF1ZXN0JywgJ05vIHN1aXRhYmxlIHByb2Nlc3NvciBmb3IgdGhpcyByZXF1ZXN0LicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgUmVzb3VyY2VNYXBwaW5ncyBpbnN0YW5jZSBvZiB0aGlzIGNvbnRyb2xsZXIuXG4gICAgICovXG4gICAgbWFwcGluZ3MoKTogUmVzb3VyY2VNYXBwaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlTWFwcGluZ3M7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNlbmRzIGFuIGVycm9yIHJlc3BvbnNlIHRvIHRoZSBjbGllbnQsIGZvcm1hdHRlZCBiYXNlZCBvbiB0aGUgYWNjZXB0ZWQgbWVkaWEgdHlwZS5cbiAgICAgKi9cbiAgICBzZW5kRXJyb3IoaHR0cEVycm9yQ29kZTogbnVtYmVyLCBhcHBsaWNhdGlvbkVycm9yQ29kZTogYW55LCBlcnJvck5hbWU6IHN0cmluZywgZXJyb3JEZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWNjZXB0TWVkaWFUeXBlczogc3RyaW5nW10gPSBub3JtYWxpemVNZWRpYVR5cGVIZWFkZXJWYWx1ZShyZXF1ZXN0LmdldEhlYWRlcignQWNjZXB0JykpIHx8IFsnYXBwbGljYXRpb24vanNvbiddO1xuICAgICAgICBjb25zdCBpc0h0bWw6IGJvb2xlYW4gPSBjbGllbnRBY2NlcHRNZWRpYVR5cGVzLnNvbWUoKGFjY2VwdE1lZGlhVHlwZSkgPT4gaXNNaW1lVHlwZUNvbXBhdGlibGUoJyovaHRtbCcsIGFjY2VwdE1lZGlhVHlwZSkpO1xuXG4gICAgICAgIHJlc3BvbnNlLnNldFN0YXR1cyhodHRwRXJyb3JDb2RlIHx8IHJlc3BvbnNlLklOVEVSTkFMX1NFUlZFUl9FUlJPUik7XG5cbiAgICAgICAgaWYgKGlzSHRtbCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZTogc3RyaW5nID0gZXJyb3JOYW1lICsgKGFwcGxpY2F0aW9uRXJyb3JDb2RlICE9PSB1bmRlZmluZWQgPyAnWycgKyBhcHBsaWNhdGlvbkVycm9yQ29kZSArICddJyA6ICcnKSArIChlcnJvckRldGFpbHMgPyAnOiAnICsgZXJyb3JEZXRhaWxzIDogJycpO1xuICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKGh0dHBFcnJvckNvZGUgfHwgcmVzcG9uc2UuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCBtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICAgICAgXCJjb2RlXCI6IGFwcGxpY2F0aW9uRXJyb3JDb2RlLFxuICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogZXJyb3JOYW1lLFxuICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBlcnJvckRldGFpbHNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgcmVzcG9uc2UucHJpbnQoSlNPTi5zdHJpbmdpZnkoYm9keSwgbnVsbCwgMikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VSZXNwb25zZSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGbHVzaGVzIGFuZCBjbG9zZXMgdGhlIEhUVFAgcmVzcG9uc2Ugc3RyZWFtLlxuICAgICAqL1xuICAgIGNsb3NlUmVzcG9uc2UoKTogdm9pZCB7XG4gICAgICAgIHJlc3BvbnNlLmZsdXNoKCk7XG4gICAgICAgIHJlc3BvbnNlLmNsb3NlKCk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDdXN0b20gc29ydCBmdW5jdGlvbiBmb3IgbWF0Y2hlZCByb3V0ZSBkZWZpbml0aW9ucywgcHJlZmVycmluZyBleGFjdCBtYXRjaGVzIG92ZXIgdGhvc2Ugd2l0aCBwbGFjZWhvbGRlcnMuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZWRSb3V0ZURlZmluaXRpb25zU29ydGVyKHA6IGFueSwgbjogYW55KTogbnVtYmVyIHtcbiAgICBwLncgPSBjYWxjdWxhdGVNYXRjaGVkUm91dGVXZWlnaHQocCk7XG4gICAgbi53ID0gY2FsY3VsYXRlTWF0Y2hlZFJvdXRlV2VpZ2h0KG4pO1xuXG4gICAgaWYgKG4udyA9PT0gcC53KSB7XG4gICAgICAgIC8vIFRoZSBvbmUgd2l0aCBsZXNzIHBsYWNlaG9sZGVycyB3aW5zXG4gICAgICAgIGNvbnN0IG0xID0gcC5kLm1hdGNoKC97KC4qPyl9L2cpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnNDb3VudDEgPSBtMSAhPT0gbnVsbCA/IG0xLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IG0yID0gbi5kLm1hdGNoKC97KC4qPyl9L2cpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnNDb3VudDIgPSBtMiAhPT0gbnVsbCA/IG0yLmxlbmd0aCA6IDA7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcnNDb3VudDEgPiBwbGFjZWhvbGRlcnNDb3VudDIpIHtcbiAgICAgICAgICAgIG4udyA9IG4udyArIDE7XG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2Vob2xkZXJzQ291bnQxIDwgcGxhY2Vob2xkZXJzQ291bnQyKSB7XG4gICAgICAgICAgICBwLncgPSBwLncgKyAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuLncgLSBwLnc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaW5pdGlhbCB3ZWlnaHQgb2YgYSBtYXRjaGVkIHJvdXRlIGRlZmluaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZU1hdGNoZWRSb3V0ZVdlaWdodChtYXRjaGVkUm91dGU6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIChtYXRjaGVkUm91dGUucGFyYW1zICYmIE9iamVjdC5rZXlzKG1hdGNoZWRSb3V0ZS5wYXJhbXMpLmxlbmd0aCA+IDApID8gMCA6IDE7IC8vIGFsd2F5cyBwcmVmZXIgZXhhY3Qgcm91dGUgZGVmaW5pdGlvbnMgLSBzZXQgd2VpZ2h0IHRvIDFcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHBhdGggcGFyYW1ldGVycyBkZWNsYXJlZCBpbiBicmFjZXMgKGUuZy4sICcvYXBpL3twYXRoUGFyYW19JykgdG8gcGF0aC10by1yZWdleHAgZm9ybWF0IChlLmcuLCAnL2FwaS86cGF0aFBhcmFtJykuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhQYXJhbXNEZWNsYXJlZEluQnJhY2VzKHBhdGhEZWZpbml0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdGhQYXJhbXNJbkJyYWNlc01hdGNoZXIgPSAvKHsoXFx3KlxcKj8pfSkvZzsgLy8gbWF0Y2hlcyBjYXNlcyBsaWtlICcvYXBpL3twYXRoUGFyYW19JyBvciAnL2FwaS97cGF0aFBhcmFtKn0nXG4gICAgcmV0dXJuIHBhdGhEZWZpbml0aW9uLnJlcGxhY2UocGF0aFBhcmFtc0luQnJhY2VzTWF0Y2hlciwgXCI6JDJcIik7IC8vIHRyYW5zZm9ybXMgbWF0Y2hlZCBjYXNlcyB0byAnL2FwaS86cGF0aFBhcmFtJyBvciAnL2FwaS86cGF0aFBhcmFtKidcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgcm91dGVzIGluIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgbWF0Y2ggdGhlIHJlcXVlc3QgcGF0aCBhbmQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBtYXRjaFJlcXVlc3RVcmwocmVxdWVzdFBhdGg6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGNmZzogYW55KTogYW55W10ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjZmcpXG4gICAgICAgIC5maWx0ZXIoKFtfLCBoYW5kbGVyc10pID0+IGhhbmRsZXJzICYmIChoYW5kbGVycyBhcyBhbnkpW21ldGhvZF0pXG4gICAgICAgIC5tYXAoKFtwYXRoLCBfXSkgPT4gcGF0aClcbiAgICAgICAgLnJlZHVjZSgobWF0Y2hlczogYW55W10sIHBhdGg6IHN0cmluZykgPT4gbWF0Y2hpbmdSb3V0ZURlZmluaXRpb25zUmVkdWNlcihtYXRjaGVzLCBwYXRoLCByZXF1ZXN0UGF0aCksIFtdKVxuICAgICAgICAuc29ydChtYXRjaGVkUm91dGVEZWZpbml0aW9uc1NvcnRlcik7XG59XG5cbi8qKlxuICogUmVkdWNlciBmdW5jdGlvbiB0byBhdHRlbXB0IG1hdGNoaW5nIGEgZGVmaW5lZCBwYXRoIGFnYWluc3QgdGhlIHJlcXVlc3QgcGF0aCB1c2luZyBwYXRoLXRvLXJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hpbmdSb3V0ZURlZmluaXRpb25zUmVkdWNlcihtYXRjaGVkRGVmaW5pdGlvbnM6IGFueVtdLCBkZWZpbmVkUGF0aDogc3RyaW5nLCByZXF1ZXN0UGF0aDogc3RyaW5nKTogYW55W10ge1xuICAgIC8vICdtYXRjaCcgZnJvbSBwYXRoLXRvLXJlZ2V4cCBpcyB1c2VkIGhlcmVcbiAgICBjb25zdCBwYXRoTWF0Y2hlciA9IG1hdGNoKHRyYW5zZm9ybVBhdGhQYXJhbXNEZWNsYXJlZEluQnJhY2VzKGRlZmluZWRQYXRoKSk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IHBhdGhNYXRjaGVyKHJlcXVlc3RQYXRoKTtcblxuICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgIC8vIEVuc3VyZSBwYXRoUGFyYW1zIGlzIGFuIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnNcbiAgICAgICAgY29uc3QgcGF0aFBhcmFtcyA9IG1hdGNoZWQucGFyYW1zO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZWREZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgcDogcmVxdWVzdFBhdGgsXG4gICAgICAgICAgICBkOiBkZWZpbmVkUGF0aCxcbiAgICAgICAgICAgIHBhdGhQYXJhbXM6IHBhdGhQYXJhbXNcbiAgICAgICAgfTtcbiAgICAgICAgbWF0Y2hlZERlZmluaXRpb25zLnB1c2gobWF0Y2hlZERlZmluaXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZERlZmluaXRpb25zO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW4gSFRUUCBtZWRpYSB0eXBlIGhlYWRlciB2YWx1ZSAoZS5nLiwgXCJ0ZXh0L3BsYWluOyBxPTAuOSwgYXBwbGljYXRpb24vanNvblwiKS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWVkaWFUeXBlSGVhZGVyVmFsdWUoc01lZGlhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoc01lZGlhVHlwZSA9PT0gdW5kZWZpbmVkIHx8IHNNZWRpYVR5cGUgPT09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBjb252ZXJ0IHRvIGFycmF5IG9mIGluZGl2aWR1YWwgdHlwZXNcbiAgICBsZXQgYXJyTWVkaWFUeXBlID0gc01lZGlhVHlwZS5zcGxpdCgnLCcpO1xuICAgIGFyck1lZGlhVHlwZSA9IGFyck1lZGlhVHlwZS5tYXAoKG1pbWVUeXBlRW50cnkpID0+IHtcbiAgICAgICAgLy8gcmVtb3ZlIGVzY2FwaW5nLCByZW1vdmUgcXVhbGl0eSBvciBvdGhlciBhdHRyaWJ1dGVzIChlLmcuLCAnOyBxPTAuOScpXG4gICAgICAgIHJldHVybiBtaW1lVHlwZUVudHJ5LnJlcGxhY2UoJ1xcXFwnLCAnJykuc3BsaXQoJzsnKVswXS50cmltKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFyck1lZGlhVHlwZS5maWx0ZXIodHlwZSA9PiB0eXBlLmxlbmd0aCA+IDApO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNvdXJjZSBNSU1FIHR5cGUgaXMgY29tcGF0aWJsZSB3aXRoIGEgdGFyZ2V0IE1JTUUgdHlwZSwgc3VwcG9ydGluZyB3aWxkY2FyZHMgKCopLlxuICovXG5mdW5jdGlvbiBpc01pbWVUeXBlQ29tcGF0aWJsZShzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoc291cmNlID09PSB0YXJnZXQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgdGFyZ2V0TSA9IHRhcmdldC5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHNvdXJjZU0gPSBzb3VyY2Uuc3BsaXQoJy8nKTtcblxuICAgIC8vIFRhcmdldCBpcyB3aWxkY2FyZCB0eXBlLCBTb3VyY2UgaGFzIGEgc3BlY2lmaWMgc3VidHlwZSAoZS5nLiwgdGFyZ2V0PSovanNvbiwgc291cmNlPWFwcGxpY2F0aW9uL2pzb24pXG4gICAgaWYgKHRhcmdldE1bMF0gPT09ICcqJyAmJiB0YXJnZXRNWzFdID09PSBzb3VyY2VNWzFdKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBTb3VyY2UgaXMgd2lsZGNhcmQgdHlwZSwgVGFyZ2V0IGhhcyBhIHNwZWNpZmljIHN1YnR5cGUgKGUuZy4sIHNvdXJjZT0qL2pzb24sIHRhcmdldD1hcHBsaWNhdGlvbi9qc29uKVxuICAgIGlmIChzb3VyY2VNWzBdID09PSAnKicgJiYgdGFyZ2V0TVsxXSA9PT0gc291cmNlTVsxXSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBUYXJnZXQgaXMgd2lsZGNhcmQgc3VidHlwZSwgU291cmNlIGhhcyBhIHNwZWNpZmljIHR5cGUgKGUuZy4sIHRhcmdldD1hcHBsaWNhdGlvbi8qLCBzb3VyY2U9YXBwbGljYXRpb24vanNvbilcbiAgICBpZiAodGFyZ2V0TVsxXSA9PT0gJyonICYmIHRhcmdldE1bMF0gPT09IHNvdXJjZU1bMF0pXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIFNvdXJjZSBpcyB3aWxkY2FyZCBzdWJ0eXBlLCBUYXJnZXQgaGFzIGEgc3BlY2lmaWMgdHlwZSAoZS5nLiwgc291cmNlPWFwcGxpY2F0aW9uLyosIHRhcmdldD1hcHBsaWNhdGlvbi9qc29uKVxuICAgIGlmIChzb3VyY2VNWzFdID09PSAnKicgJiYgdGFyZ2V0TVswXSA9PT0gc291cmNlTVswXSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGVmYXVsdCBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uLlxuICovXG5jb25zdCBjYXRjaEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICh0aGlzOiBIdHRwQ29udHJvbGxlciwgbG9nY3R4OiBhbnksIGN0eDogUmVxdWVzdENvbnRleHQsIGVycjogYW55LCByZXF1ZXN0OiBhbnksIHJlc3BvbnNlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY3R4LnN1cHByZXNzU3RhY2spIHtcbiAgICAgICAgY29uc3QgZGV0YWlsc01zZyA9IChjdHguZXJyb3JOYW1lIHx8IFwiXCIpICsgKGN0eC5lcnJvckNvZGUgPyBcIiBbXCIgKyBjdHguZXJyb3JDb2RlICsgXCJdXCIgOiBcIlwiKSArIChjdHguZXJyb3JNZXNzYWdlID8gXCI6IFwiICsgY3R4LmVycm9yTWVzc2FnZSA6IFwiXCIpO1xuICAgICAgICBsb2dnZXIuaW5mbygnU2VydmluZyByZXNvdXJjZVt7fV0sIFZlcmJbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dIGZpbmlzaGVkIGluIGVycm9yLiB7fScsIGxvZ2N0eC5wYXRoLCBsb2djdHgubWV0aG9kLCBsb2djdHguY29udGVudFR5cGUsIGxvZ2N0eC5hY2NlcHRzLCBkZXRhaWxzTXNnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1NlcnZpbmcgcmVzb3VyY2Vbe31dLCBWZXJiW3t9XSwgQ29udGVudC1UeXBlW3t9XSwgQWNjZXB0W3t9XSBmaW5pc2hlZCBpbiBlcnJvcicsIGxvZ2N0eC5wYXRoLCBsb2djdHgubWV0aG9kLCBsb2djdHguY29udGVudFR5cGUsIGxvZ2N0eC5hY2NlcHRzLCBlcnIpO1xuICAgIH1cblxuICAgIGNvbnN0IGh0dHBFcnJvckNvZGUgPSBjdHguaHR0cEVycm9yQ29kZSB8fCByZXNwb25zZS5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gY3R4LmVycm9yTWVzc2FnZSB8fCAoZXJyICYmIGVyci5tZXNzYWdlKTtcbiAgICBjb25zdCBlcnJvck5hbWUgPSBjdHguZXJyb3JOYW1lIHx8IChlcnIgJiYgZXJyLm5hbWUpO1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGN0eC5lcnJvckNvZGU7XG5cbiAgICB0aGlzLnNlbmRFcnJvcihodHRwRXJyb3JDb2RlLCBlcnJvckNvZGUsIGVycm9yTmFtZSwgZXJyb3JNZXNzYWdlKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSByZXF1ZXN0IG1lZGlhIHR5cGVzIG1hdGNoIHRoZSByZXNvdXJjZSBoYW5kbGVyJ3MgY29uc3VtZXMgYW5kIHByb2R1Y2VzIGNvbnN0cmFpbnRzLlxuICovXG5jb25zdCBtYXRjaE1lZGlhVHlwZSA9IGZ1bmN0aW9uIChyZXF1ZXN0OiBhbnksIHByb2R1Y2VzTWVkaWFUeXBlczogc3RyaW5nW10sIGNvbnN1bWVzTWVkaWFUeXBlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBsZXQgaXNQcm9kdWNlTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGFjY2VwdHNNZWRpYVR5cGVzID0gbm9ybWFsaXplTWVkaWFUeXBlSGVhZGVyVmFsdWUocmVxdWVzdC5nZXRIZWFkZXIoJ0FjY2VwdCcpKTtcblxuICAgIC8vIDEuIENoZWNrIFByb2R1Y2VzIChBY2NlcHRzIGhlYWRlcilcbiAgICBpZiAoIWFjY2VwdHNNZWRpYVR5cGVzIHx8IGFjY2VwdHNNZWRpYVR5cGVzLmxlbmd0aCA9PT0gMCB8fCBhY2NlcHRzTWVkaWFUeXBlcy5pbmNsdWRlcygnKi8qJykpIHtcbiAgICAgICAgLy8gT3V0cHV0IG1lZGlhIHR5cGUgaXMgbm90IHJlc3RyaWN0ZWQgYnkgY2xpZW50IG9yIGNsaWVudCBhY2NlcHRzIGFueXRoaW5nXG4gICAgICAgIGlzUHJvZHVjZU1hdGNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9kdWNlc01lZGlhVHlwZXMgJiYgcHJvZHVjZXNNZWRpYVR5cGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFByb2R1Y2VzTUlNRSA9IGFjY2VwdHNNZWRpYVR5cGVzLmZpbHRlcigoYWNjZXB0c01lZGlhVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlc01lZGlhVHlwZXMuc29tZSgocHJvZHVjZXNNZWRpYVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWltZVR5cGVDb21wYXRpYmxlKGFjY2VwdHNNZWRpYVR5cGUsIHByb2R1Y2VzTWVkaWFUeXBlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXNQcm9kdWNlTWF0Y2hlZCA9IG1hdGNoZWRQcm9kdWNlc01JTUUgJiYgbWF0Y2hlZFByb2R1Y2VzTUlNRS5sZW5ndGggPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzb3VyY2UgZG9lc24ndCBzcGVjaWZ5IHByb2R1Y2VzLCBzbyBpdCBtYXRjaGVzIGlmIHRoZSBjbGllbnQgYWNjZXB0cyBhbnl0aGluZyBvciBpZiBwcm9kdWNlcyBpcyBhbiBlbXB0eSBhcnJheVxuICAgICAgICAgICAgaXNQcm9kdWNlTWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBDb25zdW1lcyAoQ29udGVudC1UeXBlIGhlYWRlcilcbiAgICBsZXQgaXNDb25zdW1lTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlTWVkaWFUeXBlcyA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0Q29udGVudFR5cGUoKSk7XG5cbiAgICBpZiAoIWNvbnN1bWVzTWVkaWFUeXBlcyB8fCBjb25zdW1lc01lZGlhVHlwZXMubGVuZ3RoID09PSAwIHx8IGNvbnN1bWVzTWVkaWFUeXBlcy5pbmNsdWRlcygnKi8qJykpIHtcbiAgICAgICAgLy8gSW5wdXQgbWVkaWEgdHlwZSBpcyBub3QgcmVzdHJpY3RlZCBieSByZXNvdXJjZSBvciByZXNvdXJjZSBhY2NlcHRzIGFueXRoaW5nXG4gICAgICAgIGlzQ29uc3VtZU1hdGNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjb250ZW50VHlwZU1lZGlhVHlwZXMgJiYgY29uc3VtZXNNZWRpYVR5cGVzICYmIGNvbnN1bWVzTWVkaWFUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb25zdW1lc01JTUUgPSBjb250ZW50VHlwZU1lZGlhVHlwZXMuZmlsdGVyKChjb250ZW50VHlwZU1lZGlhVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdW1lc01lZGlhVHlwZXMuc29tZSgoY29uc3VtZXNNZWRpYVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWltZVR5cGVDb21wYXRpYmxlKGNvbnRlbnRUeXBlTWVkaWFUeXBlLCBjb25zdW1lc01lZGlhVHlwZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlzQ29uc3VtZU1hdGNoZWQgPSBtYXRjaGVkQ29uc3VtZXNNSU1FICYmIG1hdGNoZWRDb25zdW1lc01JTUUubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc1Byb2R1Y2VNYXRjaGVkICYmIGlzQ29uc3VtZU1hdGNoZWQ7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxZQUFZLGdCQUFnQjtBQUNyQyxTQUFTLFdBQVcsZUFBZTtBQUNuQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLGVBQWU7QUFJeEIsTUFBTSxFQUFFLE1BQU0sSUFBSSxpQkFBaUIsZ0RBQWdEO0FBRW5GLE1BQU0sU0FBYyxRQUFRLFVBQVUsb0JBQW9CO0FBb0IxRCxT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
|