@finbourne/lusid-sdk-angular18 0.11.10025 → 0.11.10043

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.
Files changed (49) hide show
  1. package/esm2022/lib/.generated/api/aggregation.service.mjs +66 -1
  2. package/esm2022/lib/.generated/model/aggregateNumericTolerance.mjs +12 -0
  3. package/esm2022/lib/.generated/model/allocation.mjs +1 -1
  4. package/esm2022/lib/.generated/model/cashFlowDetail.mjs +1 -1
  5. package/esm2022/lib/.generated/model/contiguousActivityWindow.mjs +2 -0
  6. package/esm2022/lib/.generated/model/coreAttributeOptionalityTolerance.mjs +12 -0
  7. package/esm2022/lib/.generated/model/coreDateTolerance.mjs +12 -0
  8. package/esm2022/lib/.generated/model/coreStringCrossTolerance.mjs +12 -0
  9. package/esm2022/lib/.generated/model/currencyGroupResponse.mjs +1 -1
  10. package/esm2022/lib/.generated/model/decimalComplianceParameter.mjs +1 -1
  11. package/esm2022/lib/.generated/model/models.mjs +9 -1
  12. package/esm2022/lib/.generated/model/order.mjs +1 -1
  13. package/esm2022/lib/.generated/model/orderGraphBlock.mjs +1 -1
  14. package/esm2022/lib/.generated/model/placement.mjs +1 -1
  15. package/esm2022/lib/.generated/model/placementUpdateRequest.mjs +1 -1
  16. package/esm2022/lib/.generated/model/queryableKeysForMetricsRequest.mjs +2 -0
  17. package/esm2022/lib/.generated/model/queryableKeysForMetricsResponse.mjs +2 -0
  18. package/esm2022/lib/.generated/model/recActivitySinceEffectiveAt.mjs +12 -0
  19. package/esm2022/lib/.generated/model/recActivityWindow.mjs +1 -11
  20. package/esm2022/lib/.generated/model/terminationEvent.mjs +1 -1
  21. package/esm2022/lib/.generated/model/toleranceBase.mjs +1 -11
  22. package/esm2022/lib/.generated/model/tradingConventions.mjs +1 -1
  23. package/esm2022/lib/.generated/model/upsertCurrencyGroupRequest.mjs +1 -1
  24. package/fesm2022/finbourne-lusid-sdk-angular18.mjs +109 -11
  25. package/fesm2022/finbourne-lusid-sdk-angular18.mjs.map +2 -2
  26. package/lib/.generated/api/aggregation.service.d.ts +28 -0
  27. package/lib/.generated/model/aggregateNumericTolerance.d.ts +40 -0
  28. package/lib/.generated/model/allocation.d.ts +4 -0
  29. package/lib/.generated/model/cashFlowDetail.d.ts +8 -0
  30. package/lib/.generated/model/contiguousActivityWindow.d.ts +21 -0
  31. package/lib/.generated/model/coreAttributeOptionalityTolerance.d.ts +24 -0
  32. package/lib/.generated/model/coreDateTolerance.d.ts +32 -0
  33. package/lib/.generated/model/coreStringCrossTolerance.d.ts +32 -0
  34. package/lib/.generated/model/currencyGroupResponse.d.ts +2 -2
  35. package/lib/.generated/model/decimalComplianceParameter.d.ts +4 -0
  36. package/lib/.generated/model/models.d.ts +8 -0
  37. package/lib/.generated/model/order.d.ts +4 -0
  38. package/lib/.generated/model/orderGraphBlock.d.ts +4 -0
  39. package/lib/.generated/model/placement.d.ts +4 -0
  40. package/lib/.generated/model/placementUpdateRequest.d.ts +8 -4
  41. package/lib/.generated/model/queryableKeysForMetricsRequest.d.ts +29 -0
  42. package/lib/.generated/model/queryableKeysForMetricsResponse.d.ts +28 -0
  43. package/lib/.generated/model/recActivitySinceEffectiveAt.d.ts +23 -0
  44. package/lib/.generated/model/recActivityWindow.d.ts +5 -14
  45. package/lib/.generated/model/terminationEvent.d.ts +1 -1
  46. package/lib/.generated/model/toleranceBase.d.ts +10 -10
  47. package/lib/.generated/model/tradingConventions.d.ts +4 -0
  48. package/lib/.generated/model/upsertCurrencyGroupRequest.d.ts +2 -2
  49. package/package.json +1 -1
@@ -218,6 +218,71 @@ export class AggregationService {
218
218
  reportProgress: reportProgress
219
219
  });
220
220
  }
221
+ getQueryableKeysForMetrics(requestParameters, observe = 'body', reportProgress = false, options) {
222
+ const queryableKeysForMetricsRequest = requestParameters?.queryableKeysForMetricsRequest;
223
+ let localVarHeaders = this.defaultHeaders;
224
+ let localVarCredential;
225
+ // authentication (oauth2) required
226
+ localVarCredential = this.configuration.lookupCredential('oauth2');
227
+ if (localVarCredential) {
228
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
229
+ }
230
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
231
+ if (localVarHttpHeaderAcceptSelected === undefined) {
232
+ // to determine the Accept header
233
+ const httpHeaderAccepts = [
234
+ 'text/plain',
235
+ 'application/json',
236
+ 'text/json'
237
+ ];
238
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
239
+ }
240
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
241
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
242
+ }
243
+ let localVarHttpContext = options && options.context;
244
+ if (localVarHttpContext === undefined) {
245
+ localVarHttpContext = new HttpContext();
246
+ }
247
+ let localVarTransferCache = options && options.transferCache;
248
+ if (localVarTransferCache === undefined) {
249
+ localVarTransferCache = true;
250
+ }
251
+ // to determine the Content-Type header
252
+ const consumes = [
253
+ 'application/json-patch+json',
254
+ 'application/json',
255
+ 'text/json',
256
+ 'application/*+json'
257
+ ];
258
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
259
+ if (httpContentTypeSelected !== undefined) {
260
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
261
+ }
262
+ let responseType_ = 'json';
263
+ if (localVarHttpHeaderAcceptSelected) {
264
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
265
+ responseType_ = 'text';
266
+ }
267
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
268
+ responseType_ = 'json';
269
+ }
270
+ else {
271
+ responseType_ = 'blob';
272
+ }
273
+ }
274
+ let localVarPath = `/api/aggregation/$queryablekeys`;
275
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
276
+ context: localVarHttpContext,
277
+ body: queryableKeysForMetricsRequest,
278
+ responseType: responseType_,
279
+ withCredentials: this.configuration.withCredentials,
280
+ headers: localVarHeaders,
281
+ observe: observe,
282
+ transferCache: localVarTransferCache,
283
+ reportProgress: reportProgress
284
+ });
285
+ }
221
286
  getValuation(requestParameters, observe = 'body', reportProgress = false, options) {
222
287
  const valuationRequest = requestParameters?.valuationRequest;
223
288
  let localVarHeaders = this.defaultHeaders;
@@ -364,4 +429,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
364
429
  }] }, { type: i2.Configuration, decorators: [{
365
430
  type: Optional
366
431
  }] }] });
367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZpbmJvdXJuZS9sdXNpZC1zZGstYW5ndWxhcjE4L3NyYy9saWIvLmdlbmVyYXRlZC9hcGkvYWdncmVnYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFDVSxXQUFXLEVBQ3hELE1BQVksc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQStCLFlBQVksQ0FBQztBQW9CL0UsYUFBYTtBQUNiLE9BQU8sRUFBRSxTQUFTLEVBQXNCLE1BQTBCLGNBQWMsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQTBDLGtCQUFrQixDQUFDOzs7O0FBbUNyRixNQUFNLE9BQU8sa0JBQWtCO0lBT0w7SUFMWixRQUFRLEdBQUcsMkJBQTJCLENBQUM7SUFDMUMsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDcEMsT0FBTyxDQUFxQjtJQUVuQyxZQUFzQixVQUFzQixFQUFnQyxRQUF5QixFQUFjLGFBQTRCO1FBQXpILGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFD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Z0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLG9DQUFvQyxDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQTBCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUMzRztZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsSUFBSSxFQUFFLHNCQUFzQjtZQUM1QixZQUFZLEVBQU8sYUFBYTtZQUNoQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQzt1R0E1WlEsa0JBQWtCLDRDQU9zQyxTQUFTOzJHQVBqRSxrQkFBa0IsY0FGakIsTUFBTTs7MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUWtELFFBQVE7OzBCQUFHLE1BQU07MkJBQUMsU0FBUzs7MEJBQThCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExVU0lEIEFQSVxuICogIyBJbnRyb2R1Y3Rpb24gIFRoaXMgcGFnZSBkb2N1bWVudHMgdGhlIFtMVVNJRCBBUElzXSguLi8uLi8uLi9hcGkvc3dhZ2dlciksIHdoaWNoIGFsbG93cyBhdXRob3Jpc2VkIGNsaWVudHMgdG8gcXVlcnkgYW5kIHVwZGF0ZSB0aGVpciBkYXRhIHdpdGhpbiB0aGUgTFVTSUQgcGxhdGZvcm0uICBTREtzIHRvIGludGVyYWN0IHdpdGggdGhlIExVU0lEIEFQSXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgZm9sbG93aW5nIGxhbmd1YWdlcyBhbmQgZnJhbWV3b3JrczogICogW0MjXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1jc2hhcnApICogW0phdmFdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWphdmEpICogW0phdmFTY3JpcHRdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWpzKSAqIFtQeXRob25dKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLXB5dGhvbikgKiBbQW5ndWxhcl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstYW5ndWxhcikgIFRoZSBMVVNJRCBwbGF0Zm9ybSBpcyBtYWRlIHVwIG9mIGEgbnVtYmVyIG9mIHN1Yi1hcHBsaWNhdGlvbnMuIFlvdSBjYW4gZmluZCB0aGUgQVBJIC8gc3dhZ2dlciBkb2N1bWVudGF0aW9uIGJ5IGZvbGxvd2luZyB0aGUgbGlua3MgaW4gdGhlIHRhYmxlIGJlbG93LiAgIHwgQXBwbGljYXRpb24gICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFQSSAvIFN3YWdnZXIgRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfCBMVVNJRCAgICAgICAgIHwgT3BlbiwgQVBJLWZpcnN0LCBkZXZlbG9wZXItZnJpZW5kbHkgaW52ZXN0bWVudCBkYXRhIHBsYXRmb3JtLiAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2FwaS9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgICAgICB8IHwgV2ViIGFwcCAgICAgICB8IFVzZXItZmFjaW5nIGZyb250IGVuZCBmb3IgTFVTSUQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9hcHAvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgICAgfCB8IFNjaGVkdWxlciAgICAgfCBBdXRvbWF0ZWQgam9iIHNjaGVkdWxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vc2NoZWR1bGVyMi9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgIHwgfCBJbnNpZ2h0cyAgICAgIHwgTW9uaXRvcmluZyBhbmQgdHJvdWJsZXNob290aW5nIHNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2luc2lnaHRzL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICB8IHwgSWRlbnRpdHkgICAgICB8IElkZW50aXR5IG1hbmFnZW1lbnQgZm9yIExVU0lEIChpbiBjb25qdW5jdGlvbiB3aXRoIEFjY2VzcykgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9pZGVudGl0eS9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgfCB8IEFjY2VzcyAgICAgICAgfCBBY2Nlc3MgY29udHJvbCBmb3IgTFVTSUQgKGluIGNvbmp1bmN0aW9uIHdpdGggSWRlbnRpdHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vYWNjZXNzL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgIHwgfCBEcml2ZSAgICAgICAgIHwgU2VjdXJlIGZpbGUgcmVwb3NpdG9yeSBhbmQgbWFuYWdlciBmb3IgY29sbGFib3JhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2RyaXZlL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgICB8IHwgTHVtaW5lc2NlICAgICB8IERhdGEgdmlydHVhbGlzYXRpb24gc2VydmljZSAocXVlcnkgZGF0YSBmcm9tIG11bHRpcGxlIHByb3ZpZGVycywgaW5jbHVkaW5nIExVU0lEKSB8IFtTd2FnZ2VyXSguLi8uLi8uLi9ob25leWNvbWIvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgfCB8IE5vdGlmaWNhdGlvbiAgfCBOb3RpZmljYXRpb24gc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vbm90aWZpY2F0aW9uL3N3YWdnZXIvaW5kZXguaHRtbCkgIHwgfCBDb25maWd1cmF0aW9uIHwgRmlsZSBzdG9yZSBmb3Igc2VjcmV0cyBhbmQgb3RoZXIgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vc3dhZ2dlci9pbmRleC5odG1sKSB8IHwgV29ya2Zsb3cgICAgICB8IFdvcmtmbG93IHNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi93b3JrZmxvdy9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgfCAgICMgRXJyb3IgQ29kZXMgIHwgQ29kZXxOYW1lfERlc2NyaXB0aW9uIHwgfCAtLS18LS0tfC0tLSB8IHwgPGEgbmFtZT1cXFwiLTEwXFxcIj4tMTA8L2E+fFNlcnZlciBDb25maWd1cmF0aW9uIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIi0xXFxcIj4tMTwvYT58VW5rbm93biBlcnJvcnxBbiB1bmV4cGVjdGVkIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBvbiBvdXIgc2lkZS4gfCB8IDxhIG5hbWU9XFxcIjEwMlxcXCI+MTAyPC9hPnxWZXJzaW9uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDNcXFwiPjEwMzwvYT58QXBpIFJhdGUgTGltaXQgVmlvbGF0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjEwNFxcXCI+MTA0PC9hPnxJbnN0cnVtZW50IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDVcXFwiPjEwNTwvYT58UHJvcGVydHkgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwNlxcXCI+MTA2PC9hPnxQb3J0Zm9saW8gUmVjdXJzaW9uIERlcHRofCAgfCB8IDxhIG5hbWU9XFxcIjEwOFxcXCI+MTA4PC9hPnxHcm91cCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTA5XFxcIj4xMDk8L2E+fFBvcnRmb2xpbyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTEwXFxcIj4xMTA8L2E+fFByb3BlcnR5IFNjaGVtYSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTExXFxcIj4xMTE8L2E+fFBvcnRmb2xpbyBBbmNlc3RyeSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTEyXFxcIj4xMTI8L2E+fFBvcnRmb2xpbyBXaXRoIElkIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjExM1xcXCI+MTEzPC9hPnxPcnBoYW5lZCBQb3J0Zm9saW98ICB8IHwgPGEgbmFtZT1cXFwiMTE5XFxcIj4xMTk8L2E+fE1pc3NpbmcgQmFzZSBDbGFpbXN8ICB8IHwgPGEgbmFtZT1cXFwiMTIxXFxcIj4xMjE8L2E+fFByb3BlcnR5IE5vdCBEZWZpbmVkfCAgfCB8IDxhIG5hbWU9XFxcIjEyMlxcXCI+MTIyPC9hPnxDYW5ub3QgRGVsZXRlIFN5c3RlbSBQcm9wZXJ0eXwgIHwgfCA8YSBuYW1lPVxcXCIxMjNcXFwiPjEyMzwvYT58Q2Fubm90IE1vZGlmeSBJbW11dGFibGUgUHJvcGVydHkgRmllbGR8ICB8IHwgPGEgbmFtZT1cXFwiMTI0XFxcIj4xMjQ8L2E+fFByb3BlcnR5IEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjEyNVxcXCI+MTI1PC9hPnxJbnZhbGlkIFByb3BlcnR5IExpZmUgVGltZXwgIHwgfCA8YSBuYW1lPVxcXCIxMjZcXFwiPjEyNjwvYT58UHJvcGVydHkgQ29uc3RyYWludCBTdHlsZSBFeGNsdWRlcyBQcm9wZXJ0aWVzfCAgfCB8IDxhIG5hbWU9XFxcIjEyN1xcXCI+MTI3PC9hPnxDYW5ub3QgTW9kaWZ5IERlZmF1bHQgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEyOFxcXCI+MTI4PC9hPnxHcm91cCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMjlcXFwiPjEyOTwvYT58Tm8gU3VjaCBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTMwXFxcIj4xMzA8L2E+fFVuZGVmaW5lZCBWYWx1ZSBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEzMVxcXCI+MTMxPC9hPnxVbnN1cHBvcnRlZCBWYWx1ZSBUeXBlIERlZmluZWQgT24gRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEzMlxcXCI+MTMyPC9hPnxWYWxpZGF0aW9uIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjEzM1xcXCI+MTMzPC9hPnxMb29wIERldGVjdGVkIEluIEdyb3VwIEhpZXJhcmNoeXwgIHwgfCA8YSBuYW1lPVxcXCIxMzRcXFwiPjEzNDwvYT58VW5kZWZpbmVkIEFjY2VwdGFibGUgVmFsdWVzfCAgfCB8IDxhIG5hbWU9XFxcIjEzNVxcXCI+MTM1PC9hPnxTdWIgR3JvdXAgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTM4XFxcIj4xMzg8L2E+fFByaWNlIFNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTM5XFxcIj4xMzk8L2E+fEFuYWx5dGljIFN0b3JlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxNDFcXFwiPjE0MTwvYT58QW5hbHl0aWMgU3RvcmUgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTQzXFxcIj4xNDM8L2E+fENsaWVudCBJbnN0cnVtZW50IEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE0NFxcXCI+MTQ0PC9hPnxEdXBsaWNhdGUgSW4gUGFyYW1ldGVyIFNldHwgIHwgfCA8YSBuYW1lPVxcXCIxNDdcXFwiPjE0NzwvYT58UmVzdWx0cyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTQ4XFxcIj4xNDg8L2E+fE9yZGVyIEZpZWxkIE5vdCBJbiBSZXN1bHQgU2V0fCAgfCB8IDxhIG5hbWU9XFxcIjE0OVxcXCI+MTQ5PC9hPnxPcGVyYXRpb24gRmFpbGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE1MFxcXCI+MTUwPC9hPnxFbGFzdGljIFNlYXJjaCBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIxNTFcXFwiPjE1MTwvYT58SW52YWxpZCBQYXJhbWV0ZXIgVmFsdWV8ICB8IHwgPGEgbmFtZT1cXFwiMTUzXFxcIj4xNTM8L2E+fENvbW1hbmQgUHJvY2Vzc2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE1NFxcXCI+MTU0PC9hPnxFbnRpdHkgU3RhdGUgQ29uc3RydWN0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTU1XFxcIj4xNTU8L2E+fEVudGl0eSBUaW1lbGluZSBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNTZcXFwiPjE1NjwvYT58Q29uY3VycmVuY3kgQ29uZmxpY3QgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTdcXFwiPjE1NzwvYT58SW52YWxpZCBSZXF1ZXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE1OFxcXCI+MTU4PC9hPnxFdmVudCBQdWJsaXNoIFVua25vd258ICB8IHwgPGEgbmFtZT1cXFwiMTU5XFxcIj4xNTk8L2E+fEV2ZW50IFF1ZXJ5IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTYwXFxcIj4xNjA8L2E+fEJsb2IgRGlkIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNjJcXFwiPjE2MjwvYT58U3ViIFN5c3RlbSBSZXF1ZXN0IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTYzXFxcIj4xNjM8L2E+fFN1YiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2NVxcXCI+MTY1PC9hPnxGYWlsZWQgVG8gRGVsZXRlfCAgfCB8IDxhIG5hbWU9XFxcIjE2NlxcXCI+MTY2PC9hPnxVcHNlcnQgQ2xpZW50IEluc3RydW1lbnQgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjdcXFwiPjE2NzwvYT58SWxsZWdhbCBBcyBBdCBJbnRlcnZhbHwgIHwgfCA8YSBuYW1lPVxcXCIxNjhcXFwiPjE2ODwvYT58SWxsZWdhbCBCaXRlbXBvcmFsIFF1ZXJ5fCAgfCB8IDxhIG5hbWU9XFxcIjE2OVxcXCI+MTY5PC9hPnxJbnZhbGlkIEFsdGVybmF0ZSBJZHwgIHwgfCA8YSBuYW1lPVxcXCIxNzBcXFwiPjE3MDwvYT58Q2Fubm90IEFkZCBOb24tV3JpdGFibGUgUHJvcGVydGllcyBUbyBFbnRpdHl8ICB8IHwgPGEgbmFtZT1cXFwiMTcxXFxcIj4xNzE8L2E+fEVudGl0eSBBbHJlYWR5IEV4aXN0cyBJbiBHcm91cHwgIHwgfCA8YSBuYW1lPVxcXCIxNzJcXFwiPjE3MjwvYT58RW50aXR5IFdpdGggSWQgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTczXFxcIj4xNzM8L2E+fEVudGl0eSBXaXRoIElkIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE3NFxcXCI+MTc0PC9hPnxEZXJpdmVkIFBvcnRmb2xpbyBEZXRhaWxzIERvIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNzVcXFwiPjE3NTwvYT58RW50aXR5IE5vdCBJbiBHcm91cHwgIHwgfCA8YSBuYW1lPVxcXCIxNzZcXFwiPjE3NjwvYT58UG9ydGZvbGlvIFdpdGggTmFtZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNzdcXFwiPjE3NzwvYT58SW52YWxpZCBUcmFuc2FjdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiMTc4XFxcIj4xNzg8L2E+fFJlZmVyZW5jZSBQb3J0Zm9saW8gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE3OVxcXCI+MTc5PC9hPnxEdXBsaWNhdGUgSWR8ICB8IHwgPGEgbmFtZT1cXFwiMTgwXFxcIj4xODA8L2E+fENvbW1hbmQgUmV0cmlldmFsIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTgxXFxcIj4xODE8L2E+fERhdGEgRmlsdGVyIEFwcGxpY2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTgyXFxcIj4xODI8L2E+fFNlYXJjaCBGYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTgzXFxcIj4xODM8L2E+fE1vdmVtZW50cyBFbmdpbmUgQ29uZmlndXJhdGlvbiBLZXkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxODRcXFwiPjE4NDwvYT58RnggUmF0ZSBTb3VyY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE4NVxcXCI+MTg1PC9hPnxBY2NydWFsIFNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTg2XFxcIj4xODY8L2E+fEFjY2VzcyBEZW5pZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTg3XFxcIj4xODc8L2E+fEludmFsaWQgSWRlbnRpdHkgVG9rZW58ICB8IHwgPGEgbmFtZT1cXFwiMTg4XFxcIj4xODg8L2E+fEludmFsaWQgUmVxdWVzdCBIZWFkZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjE4OVxcXCI+MTg5PC9hPnxQcmljZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTkwXFxcIj4xOTA8L2E+fEludmFsaWQgU3ViIEhvbGRpbmcgS2V5cyBQcm92aWRlZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTFcXFwiPjE5MTwvYT58RHVwbGljYXRlIFN1YiBIb2xkaW5nIEtleXMgUHJvdmlkZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTkyXFxcIj4xOTI8L2E+fEN1dCBEZWZpbml0aW9uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTNcXFwiPjE5MzwvYT58Q3V0IERlZmluaXRpb24gSW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTRcXFwiPjE5NDwvYT58VGltZSBWYXJpYW50IFByb3BlcnR5IERlbGV0aW9uIERhdGUgVW5zcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTk1XFxcIj4xOTU8L2E+fFBlcnBldHVhbCBQcm9wZXJ0eSBEZWxldGlvbiBEYXRlIFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTZcXFwiPjE5NjwvYT58VGltZSBWYXJpYW50IFByb3BlcnR5IFVwc2VydCBEYXRlIFVuc3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5N1xcXCI+MTk3PC9hPnxQZXJwZXR1YWwgUHJvcGVydHkgVXBzZXJ0IERhdGUgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjIwMFxcXCI+MjAwPC9hPnxJbnZhbGlkIFVuaXQgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDFcXFwiPjIwMTwvYT58SW52YWxpZCBUeXBlIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjAyXFxcIj4yMDI8L2E+fEludmFsaWQgVmFsdWUgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDNcXFwiPjIwMzwvYT58VW5pdCBOb3QgRGVmaW5lZCBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNFxcXCI+MjA0PC9hPnxVbml0cyBOb3QgU3VwcG9ydGVkIE9uIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDVcXFwiPjIwNTwvYT58Q2Fubm90IFNwZWNpZnkgVW5pdHMgT24gRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNlxcXCI+MjA2PC9hPnxVbml0IFNjaGVtYSBJbmNvbnNpc3RlbnQgV2l0aCBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA3XFxcIj4yMDc8L2E+fFVuaXQgRGVmaW5pdGlvbiBOb3QgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjIwOFxcXCI+MjA4PC9hPnxEdXBsaWNhdGUgVW5pdCBEZWZpbml0aW9ucyBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjA5XFxcIj4yMDk8L2E+fEludmFsaWQgVW5pdHMgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMTBcXFwiPjIxMDwvYT58SW52YWxpZCBJbnN0cnVtZW50IElkZW50aWZpZXIgVW5pdHwgIHwgfCA8YSBuYW1lPVxcXCIyMTFcXFwiPjIxMTwvYT58SG9sZGluZ3MgQWRqdXN0bWVudCBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIyMTJcXFwiPjIxMjwvYT58Q291bGQgTm90IEJ1aWxkIEV4Y2VsIFVybHwgIHwgfCA8YSBuYW1lPVxcXCIyMTNcXFwiPjIxMzwvYT58Q291bGQgTm90IEdldCBFeGNlbCBWZXJzaW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIxNFxcXCI+MjE0PC9hPnxJbnN0cnVtZW50IEJ5IENvZGUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjIxNVxcXCI+MjE1PC9hPnxFbnRpdHkgU2NoZW1hIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjIxNlxcXCI+MjE2PC9hPnxGZWF0dXJlIE5vdCBTdXBwb3J0ZWQgT24gUG9ydGZvbGlvIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjE3XFxcIj4yMTc8L2E+fFF1b3RlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIyMThcXFwiPjIxODwvYT58SW52YWxpZCBRdW90ZSBJZGVudGlmaWVyfCAgfCB8IDxhIG5hbWU9XFxcIjIxOVxcXCI+MjE5PC9hPnxJbnZhbGlkIE1ldHJpYyBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIyMFxcXCI+MjIwPC9hPnxJbnZhbGlkIEluc3RydW1lbnQgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMjFcXFwiPjIyMTwvYT58SW5zdHJ1bWVudCBVcHNlcnQgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyMjJcXFwiPjIyMjwvYT58UmVmZXJlbmNlIFBvcnRmb2xpbyBSZXF1ZXN0IE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjIzXFxcIj4yMjM8L2E+fFRyYW5zYWN0aW9uIFBvcnRmb2xpbyBSZXF1ZXN0IE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjI0XFxcIj4yMjQ8L2E+fEludmFsaWQgUHJvcGVydHkgVmFsdWUgQXNzaWdubWVudHwgIHwgfCA8YSBuYW1lPVxcXCIyMzBcXFwiPjIzMDwvYT58VHJhbnNhY3Rpb24gVHlwZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMjMxXFxcIj4yMzE8L2E+fFRyYW5zYWN0aW9uIFR5cGUgRHVwbGljYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjMyXFxcIj4yMzI8L2E+fFBvcnRmb2xpbyBEb2VzIE5vdCBFeGlzdCBBdCBHaXZlbiBEYXRlfCAgfCB8IDxhIG5hbWU9XFxcIjIzM1xcXCI+MjMzPC9hPnxRdWVyeSBQYXJzZXIgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyMzRcXFwiPjIzNDwvYT58RHVwbGljYXRlIENvbnN0aXR1ZW50fCAgfCB8IDxhIG5hbWU9XFxcIjIzNVxcXCI+MjM1PC9hPnxVbnJlc29sdmVkIEluc3RydW1lbnQgQ29uc3RpdHVlbnR8ICB8IHwgPGEgbmFtZT1cXFwiMjM2XFxcIj4yMzY8L2E+fFVucmVzb2x2ZWQgSW5zdHJ1bWVudCBJbiBUcmFuc2l0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIzN1xcXCI+MjM3PC9hPnxNaXNzaW5nIFNpZGUgRGVmaW5pdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiMjQwXFxcIj4yNDA8L2E+fER1cGxpY2F0ZSBDYWxjdWxhdGlvbnMgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyOTlcXFwiPjI5OTwvYT58SW52YWxpZCBSZWNpcGV8ICB8IHwgPGEgbmFtZT1cXFwiMzAwXFxcIj4zMDA8L2E+fE1pc3NpbmcgUmVjaXBlfCAgfCB8IDxhIG5hbWU9XFxcIjMwMVxcXCI+MzAxPC9hPnxEZXBlbmRlbmNpZXN8ICB8IHwgPGEgbmFtZT1cXFwiMzA0XFxcIj4zMDQ8L2E+fFBvcnRmb2xpbyBQcmVwcm9jZXNzIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEwXFxcIj4zMTA8L2E+fFZhbHVhdGlvbiBFbmdpbmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTFcXFwiPjMxMTwvYT58VGFzayBGYWN0b3J5IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEyXFxcIj4zMTI8L2E+fFRhc2sgRXZhbHVhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxM1xcXCI+MzEzPC9hPnxUYXNrIEdlbmVyYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTRcXFwiPjMxNDwvYT58RW5naW5lIENvbmZpZ3VyYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTVcXFwiPjMxNTwvYT58TW9kZWwgU3BlY2lmaWNhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMyMFxcXCI+MzIwPC9hPnxNYXJrZXQgRGF0YSBLZXkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMjFcXFwiPjMyMTwvYT58TWFya2V0IFJlc29sdmVyIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzIyXFxcIj4zMjI8L2E+fE1hcmtldCBEYXRhIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzMwXFxcIj4zMzA8L2E+fEN1cnZlIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzMxXFxcIj4zMzE8L2E+fFZvbGF0aWxpdHkgU3VyZmFjZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMzMlxcXCI+MzMyPC9hPnxWb2xhdGlsaXR5IEN1YmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNTBcXFwiPjM1MDwvYT58SW5zdHJ1bWVudCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM1MVxcXCI+MzUxPC9hPnxDYXNoIEZsb3dzIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzUyXFxcIj4zNTI8L2E+fFJlZmVyZW5jZSBEYXRhIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzYwXFxcIj4zNjA8L2E+fEFnZ3JlZ2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzYxXFxcIj4zNjE8L2E+fEFnZ3JlZ2F0aW9uIE1lYXN1cmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzBcXFwiPjM3MDwvYT58UmVzdWx0IFJldHJpZXZhbCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MVxcXCI+MzcxPC9hPnxSZXN1bHQgUHJvY2Vzc2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MlxcXCI+MzcyPC9hPnxWZW5kb3IgUmVzdWx0IFByb2Nlc3NpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzNcXFwiPjM3MzwvYT58VmVuZG9yIFJlc3VsdCBNYXBwaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzc0XFxcIj4zNzQ8L2E+fFZlbmRvciBMaWJyYXJ5IFVuYXV0aG9yaXNlZHwgIHwgfCA8YSBuYW1lPVxcXCIzNzVcXFwiPjM3NTwvYT58VmVuZG9yIENvbm5lY3Rpdml0eSBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIzNzZcXFwiPjM3NjwvYT58VmVuZG9yIEludGVyZmFjZSBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIzNzdcXFwiPjM3NzwvYT58VmVuZG9yIFByaWNpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzhcXFwiPjM3ODwvYT58VmVuZG9yIFRyYW5zbGF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzc5XFxcIj4zNzk8L2E+fFZlbmRvciBLZXkgTWFwcGluZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM4MFxcXCI+MzgwPC9hPnxWZW5kb3IgUmVmbGVjdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM4MVxcXCI+MzgxPC9hPnxWZW5kb3IgUHJvY2VzcyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM4MlxcXCI+MzgyPC9hPnxWZW5kb3IgU3lzdGVtIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzkwXFxcIj4zOTA8L2E+fEF0dGVtcHQgVG8gVXBzZXJ0IER1cGxpY2F0ZSBRdW90ZXN8ICB8IHwgPGEgbmFtZT1cXFwiMzkxXFxcIj4zOTE8L2E+fENvcnBvcmF0ZSBBY3Rpb24gU291cmNlIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjM5MlxcXCI+MzkyPC9hPnxDb3Jwb3JhdGUgQWN0aW9uIFNvdXJjZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIzOTNcXFwiPjM5MzwvYT58SW5zdHJ1bWVudCBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjM5NFxcXCI+Mzk0PC9hPnxQcm9wZXJ0aWVzIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIzOTVcXFwiPjM5NTwvYT58QmF0Y2ggT3BlcmF0aW9uIEFib3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNDAwXFxcIj40MDA8L2E+fEludmFsaWQgSXNvNDIxNyBDdXJyZW5jeSBDb2RlfCAgfCB8IDxhIG5hbWU9XFxcIjQwMVxcXCI+NDAxPC9hPnxDYW5ub3QgQXNzaWduIEluc3RydW1lbnQgSWRlbnRpZmllciBUbyBDdXJyZW5jeXwgIHwgfCA8YSBuYW1lPVxcXCI0MDJcXFwiPjQwMjwvYT58Q2Fubm90IEFzc2lnbiBDdXJyZW5jeSBJZGVudGlmaWVyIFRvIE5vbiBDdXJyZW5jeXwgIHwgfCA8YSBuYW1lPVxcXCI0MDNcXFwiPjQwMzwvYT58Q3VycmVuY3kgSW5zdHJ1bWVudCBDYW5ub3QgQmUgRGVsZXRlZHwgIHwgfCA8YSBuYW1lPVxcXCI0MDRcXFwiPjQwNDwvYT58Q3VycmVuY3kgSW5zdHJ1bWVudCBDYW5ub3QgSGF2ZSBFY29ub21pYyBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjQwNVxcXCI+NDA1PC9hPnxDdXJyZW5jeSBJbnN0cnVtZW50IENhbm5vdCBIYXZlIExvb2t0aHJvdWdoIFBvcnRmb2xpb3wgIHwgfCA8YSBuYW1lPVxcXCI0MDZcXFwiPjQwNjwvYT58Q2Fubm90IENyZWF0ZSBDdXJyZW5jeSBJbnN0cnVtZW50IFdpdGggTXVsdGlwbGUgSWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiNDA3XFxcIj40MDc8L2E+fFNwZWNpZmllZCBDdXJyZW5jeSBJcyBVbmRlZmluZWR8ICB8IHwgPGEgbmFtZT1cXFwiNDEwXFxcIj40MTA8L2E+fEluZGV4IERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjQxMVxcXCI+NDExPC9hPnxTb3J0IEZpZWxkIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjQxM1xcXCI+NDEzPC9hPnxOZWdhdGl2ZSBQYWdpbmF0aW9uIFBhcmFtZXRlcnN8ICB8IHwgPGEgbmFtZT1cXFwiNDE0XFxcIj40MTQ8L2E+fEludmFsaWQgU2VhcmNoIFN5bnRheHwgIHwgfCA8YSBuYW1lPVxcXCI0MTVcXFwiPjQxNTwvYT58RmlsdGVyIEV4ZWN1dGlvbiBUaW1lb3V0fCAgfCB8IDxhIG5hbWU9XFxcIjQyMFxcXCI+NDIwPC9hPnxTaWRlIERlZmluaXRpb24gSW5jb25zaXN0ZW50fCAgfCB8IDxhIG5hbWU9XFxcIjQ1MFxcXCI+NDUwPC9hPnxJbnZhbGlkIFF1b3RlIEFjY2VzcyBNZXRhZGF0YSBSdWxlfCAgfCB8IDxhIG5hbWU9XFxcIjQ1MVxcXCI+NDUxPC9hPnxBY2Nlc3MgTWV0YWRhdGEgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjQ1MlxcXCI+NDUyPC9hPnxJbnZhbGlkIEFjY2VzcyBNZXRhZGF0YSBJZGVudGlmaWVyfCAgfCB8IDxhIG5hbWU9XFxcIjQ2MFxcXCI+NDYwPC9hPnxTdGFuZGFyZCBSZXNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDYxXFxcIj40NjE8L2E+fFN0YW5kYXJkIFJlc291cmNlIENvbmZsaWN0fCAgfCB8IDxhIG5hbWU9XFxcIjQ2MlxcXCI+NDYyPC9hPnxDYWxlbmRhciBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDYzXFxcIj40NjM8L2E+fERhdGUgSW4gQSBDYWxlbmRhciBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDY0XFxcIj40NjQ8L2E+fEludmFsaWQgRGF0ZSBTb3VyY2UgRGF0YXwgIHwgfCA8YSBuYW1lPVxcXCI0NjVcXFwiPjQ2NTwvYT58SW52YWxpZCBUaW1lem9uZXwgIHwgfCA8YSBuYW1lPVxcXCI2MDFcXFwiPjYwMTwvYT58UGVyc29uIElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiNjAyXFxcIj42MDI8L2E+fFBlcnNvbiBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjAzXFxcIj42MDM8L2E+fENhbm5vdCBTZXQgSWRlbnRpZmllcnwgIHwgfCA8YSBuYW1lPVxcXCI2MTdcXFwiPjYxNzwvYT58SW52YWxpZCBSZWNpcGUgU3BlY2lmaWNhdGlvbiBJbiBSZXF1ZXN0fCAgfCB8IDxhIG5hbWU9XFxcIjYxOFxcXCI+NjE4PC9hPnxJbmxpbmUgUmVjaXBlIERlc2VyaWFsaXNhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjYxOVxcXCI+NjE5PC9hPnxJZGVudGlmaWVyIFR5cGVzIE5vdCBTZXQgRm9yIEVudGl0eXwgIHwgfCA8YSBuYW1lPVxcXCI2MjBcXFwiPjYyMDwvYT58Q2Fubm90IERlbGV0ZSBBbGwgQ2xpZW50IERlZmluZWQgSWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiNjUwXFxcIj42NTA8L2E+fFRoZSBPcmRlciByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNjU0XFxcIj42NTQ8L2E+fFRoZSBBbGxvY2F0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI2NTVcXFwiPjY1NTwvYT58Q2Fubm90IGJ1aWxkIHRoZSBmeCBmb3J3YXJkIHRhcmdldCB3aXRoIHRoZSBnaXZlbiBob2xkaW5ncy58ICB8IHwgPGEgbmFtZT1cXFwiNjU2XFxcIj42NTY8L2E+fEdyb3VwIGRvZXMgbm90IGNvbnRhaW4gZXhwZWN0ZWQgZW50aXRpZXMufCAgfCB8IDxhIG5hbWU9XFxcIjY2NVxcXCI+NjY1PC9hPnxEZXN0aW5hdGlvbiBkaXJlY3Rvcnkgbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY2N1xcXCI+NjY3PC9hPnxSZWxhdGlvbiBkZWZpbml0aW9uIGFscmVhZHkgZXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjY3MlxcXCI+NjcyPC9hPnxDb3VsZCBub3QgcmV0cmlldmUgZmlsZSBjb250ZW50c3wgIHwgfCA8YSBuYW1lPVxcXCI2NzNcXFwiPjY3MzwvYT58TWlzc2luZyBlbnRpdGxlbWVudHMgZm9yIGVudGl0aWVzIGluIEdyb3VwfCAgfCB8IDxhIG5hbWU9XFxcIjY3NFxcXCI+Njc0PC9hPnxOZXh0IEJlc3QgQWN0aW9uIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2NzZcXFwiPjY3NjwvYT58UmVsYXRpb24gZGVmaW5pdGlvbiBub3QgZGVmaW5lZHwgIHwgfCA8YSBuYW1lPVxcXCI2NzdcXFwiPjY3NzwvYT58SW52YWxpZCBlbnRpdHkgaWRlbnRpZmllciBmb3IgcmVsYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNjgxXFxcIj42ODE8L2E+fFNvcnRpbmcgYnkgc3BlY2lmaWVkIGZpZWxkIG5vdCBzdXBwb3J0ZWR8T25lIG9yIG1vcmUgb2YgdGhlIHByb3ZpZGVkIGZpZWxkcyB0byBvcmRlciBieSB3ZXJlIGVpdGhlciBpbnZhbGlkIG9yIG5vdCBzdXBwb3J0ZWQuIHwgfCA8YSBuYW1lPVxcXCI2ODJcXFwiPjY4MjwvYT58VG9vIG1hbnkgZmllbGRzIHRvIHNvcnQgYnl8VGhlIG51bWJlciBvZiBmaWVsZHMgdG8gc29ydCB0aGUgZGF0YSBieSBleGNlZWRzIHRoZSBudW1iZXIgYWxsb3dlZCBieSB0aGUgZW5kcG9pbnQgfCB8IDxhIG5hbWU9XFxcIjY4NFxcXCI+Njg0PC9hPnxTZXF1ZW5jZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjg1XFxcIj42ODU8L2E+fFNlcXVlbmNlIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjY4NlxcXCI+Njg2PC9hPnxOb24tY3ljbGluZyBzZXF1ZW5jZSBoYXMgYmVlbiBleGhhdXN0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjg3XFxcIj42ODc8L2E+fExlZ2FsIEVudGl0eSBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjY4OFxcXCI+Njg4PC9hPnxMZWdhbCBFbnRpdHkgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY4OVxcXCI+Njg5PC9hPnxUaGUgc3VwcGxpZWQgcGFnaW5hdGlvbiB0b2tlbiBpcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjY5MFxcXCI+NjkwPC9hPnxQcm9wZXJ0eSBUeXBlIElzIE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjkxXFxcIj42OTE8L2E+fE11bHRpcGxlIFRheC1sb3RzIEZvciBDdXJyZW5jeSBUeXBlIElzIE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjkyXFxcIj42OTI8L2E+fFRoaXMgZW5kcG9pbnQgZG9lcyBub3Qgc3VwcG9ydCBpbXBlcnNvbmF0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjY5M1xcXCI+NjkzPC9hPnxFbnRpdHkgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBSZWxhdGlvbnNoaXB8ICB8IHwgPGEgbmFtZT1cXFwiNjk0XFxcIj42OTQ8L2E+fFJlbGF0aW9uc2hpcCBWYWxpZGF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNjk1XFxcIj42OTU8L2E+fFJlbGF0aW9uc2hpcCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjk3XFxcIj42OTc8L2E+fERlcml2ZWQgUHJvcGVydHkgRm9ybXVsYSBObyBMb25nZXIgVmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNjk4XFxcIj42OTg8L2E+fFN0b3J5IGlzIG5vdCBhdmFpbGFibGV8ICB8IHwgPGEgbmFtZT1cXFwiNzAzXFxcIj43MDM8L2E+fENvcnBvcmF0ZSBBY3Rpb24gRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNzIwXFxcIj43MjA8L2E+fFRoZSBwcm92aWRlZCBzb3J0IGFuZCBmaWx0ZXIgY29tYmluYXRpb24gaXMgbm90IHZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjcyMVxcXCI+NzIxPC9hPnxBMkIgZ2VuZXJhdGlvbiBmYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiNzIyXFxcIj43MjI8L2E+fEFnZ3JlZ2F0ZWQgUmV0dXJuIENhbGN1bGF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNzIzXFxcIj43MjM8L2E+fEN1c3RvbSBFbnRpdHkgRGVmaW5pdGlvbiBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjcyNFxcXCI+NzI0PC9hPnxDdXN0b20gRW50aXR5IERlZmluaXRpb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjcyNVxcXCI+NzI1PC9hPnxUaGUgUGxhY2VtZW50IHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjZcXFwiPjcyNjwvYT58VGhlIEV4ZWN1dGlvbiByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzI3XFxcIj43Mjc8L2E+fFRoZSBCbG9jayByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzI4XFxcIj43Mjg8L2E+fFRoZSBQYXJ0aWNpcGF0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjlcXFwiPjcyOTwvYT58VGhlIFBhY2thZ2UgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjczMFxcXCI+NzMwPC9hPnxUaGUgT3JkZXJJbnN0cnVjdGlvbiByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzMyXFxcIj43MzI8L2E+fEN1c3RvbSBFbnRpdHkgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzNcXFwiPjczMzwvYT58Q3VzdG9tIEVudGl0eSBJZGVudGlmaWVyIGFscmVhZHkgaW4gdXNlLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzVcXFwiPjczNTwvYT58Q2FsY3VsYXRpb24gRmFpbGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzZcXFwiPjczNjwvYT58QW4gZXhwZWN0ZWQga2V5IG9uIEh0dHBSZXNwb25zZSBpcyBtaXNzaW5nLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzdcXFwiPjczNzwvYT58QSByZXF1aXJlZCBmZWUgZGV0YWlsIGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjczOFxcXCI+NzM4PC9hPnxaZXJvIHJvd3Mgd2VyZSByZXR1cm5lZCBmcm9tIEx1bWluZXNjZXwgIHwgfCA8YSBuYW1lPVxcXCI3MzlcXFwiPjczOTwvYT58UHJvdmlkZWQgV2Vla2VuZCBNYXNrIHdhcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjc0MlxcXCI+NzQyPC9hPnxDdXN0b20gRW50aXR5IGZpZWxkcyBkbyBub3QgbWF0Y2ggdGhlIGRlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNzQ2XFxcIj43NDY8L2E+fFRoZSBwcm92aWRlZCBzZXF1ZW5jZSBpcyBub3QgdmFsaWQufCAgfCB8IDxhIG5hbWU9XFxcIjc1MVxcXCI+NzUxPC9hPnxUaGUgdHlwZSBvZiB0aGUgQ3VzdG9tIEVudGl0eSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgdHlwZSBwcm92aWRlZCBpbiB0aGUgZGVmaW5pdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiNzUyXFxcIj43NTI8L2E+fEx1bWluZXNjZSBwcm9jZXNzIHJldHVybmVkIGFuIGVycm9yLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTNcXFwiPjc1MzwvYT58RmlsZSBuYW1lIG9yIGNvbnRlbnQgaW5jb21wYXRpYmxlIHdpdGggb3BlcmF0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTVcXFwiPjc1NTwvYT58U2NoZW1hIG9mIHJlc3BvbnNlIGZyb20gRHJpdmUgaXMgbm90IGFzIGV4cGVjdGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTdcXFwiPjc1NzwvYT58U2NoZW1hIG9mIHJlc3BvbnNlIGZyb20gTHVtaW5lc2NlIGlzIG5vdCBhcyBleHBlY3RlZC58ICB8IHwgPGEgbmFtZT1cXFwiNzU4XFxcIj43NTg8L2E+fEx1bWluZXNjZSB0aW1lZCBvdXQufCAgfCB8IDxhIG5hbWU9XFxcIjc2M1xcXCI+NzYzPC9hPnxJbnZhbGlkIEx1c2lkIEVudGl0eSBJZGVudGlmaWVyIFVuaXR8ICB8IHwgPGEgbmFtZT1cXFwiNzY4XFxcIj43Njg8L2E+fEZlZSBydWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzY5XFxcIj43Njk8L2E+fENhbm5vdCB1cGRhdGUgdGhlIGJhc2UgY3VycmVuY3kgb2YgYSBwb3J0Zm9saW8gd2l0aCB0cmFuc2FjdGlvbnMgbG9hZGVkfCAgfCB8IDxhIG5hbWU9XFxcIjc3MVxcXCI+NzcxPC9hPnxUcmFuc2FjdGlvbiBjb25maWd1cmF0aW9uIHNvdXJjZSBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNzc0XFxcIj43NzQ8L2E+fENvbXBsaWFuY2UgcnVsZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjc3NVxcXCI+Nzc1PC9hPnxGdW5kIGFjY291bnRpbmcgZG9jdW1lbnQgY2Fubm90IGJlIHByb2Nlc3NlZC58ICB8IHwgPGEgbmFtZT1cXFwiNzc4XFxcIj43Nzg8L2E+fFVuYWJsZSB0byBsb29rIHVwIEZYIHJhdGUgZnJvbSB0cmFkZSBjY3kgdG8gcG9ydGZvbGlvIGNjeSBmb3Igc29tZSBvZiB0aGUgdHJhZGVzLnwgIHwgfCA8YSBuYW1lPVxcXCI3ODJcXFwiPjc4MjwvYT58VGhlIFByb3BlcnR5IGRlZmluaXRpb24gZGF0YVR5cGUgaXMgbm90IG1hdGNoaW5nIHRoZSBkZXJpdmF0aW9uIGZvcm11bGEgZGF0YVR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiNzgzXFxcIj43ODM8L2E+fFRoZSBQcm9wZXJ0eSBkZWZpbml0aW9uIGRvbWFpbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBkZXJpdmVkIHByb3BlcnRpZXN8ICB8IHwgPGEgbmFtZT1cXFwiNzg4XFxcIj43ODg8L2E+fENvbXBsaWFuY2UgcnVuIG5vdCBmb3VuZCBmYWlsdXJlLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTBcXFwiPjc5MDwvYT58Q3VzdG9tIEVudGl0eSBoYXMgbWlzc2luZyBvciBpbnZhbGlkIGlkZW50aWZpZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjc5MVxcXCI+NzkxPC9hPnxDdXN0b20gRW50aXR5IGRlZmluaXRpb24gYWxyZWFkeSBleGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiNzkyXFxcIj43OTI8L2E+fENvbXBsaWFuY2UgUHJvcGVydHlLZXkgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzkzXFxcIj43OTM8L2E+fENvbXBsaWFuY2UgQ3JpdGVyaWEgVmFsdWUgZm9yIG1hdGNoaW5nIGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjc5NVxcXCI+Nzk1PC9hPnxDYW5ub3QgZGVsZXRlIGlkZW50aWZpZXIgZGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI3OTZcXFwiPjc5NjwvYT58VGF4IHJ1bGUgc2V0IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzk3XFxcIj43OTc8L2E+fEEgdGF4IHJ1bGUgc2V0IHdpdGggdGhpcyBpZCBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiNzk4XFxcIj43OTg8L2E+fE11bHRpcGxlIHJ1bGUgc2V0cyBmb3IgdGhlIHNhbWUgcHJvcGVydHkga2V5IGFyZSBhcHBsaWNhYmxlLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTlcXFwiPjc5OTwvYT58VGhlIHJlcXVlc3QgbXVzdCBjb250YWluIGEgZGF0ZSBvciBkaWFyeSBlbnRyeS58ICB8IHwgPGEgbmFtZT1cXFwiODAwXFxcIj44MDA8L2E+fENhbiBub3QgdXBzZXJ0IGFuIGluc3RydW1lbnQgZXZlbnQgb2YgdGhpcyB0eXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDFcXFwiPjgwMTwvYT58VGhlIGluc3RydW1lbnQgZXZlbnQgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwMlxcXCI+ODAyPC9hPnxUaGUgSW5zdHJ1bWVudCBldmVudCBpcyBtaXNzaW5nIHNhbGllbnQgaW5mb3JtYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjgwM1xcXCI+ODAzPC9hPnxUaGUgSW5zdHJ1bWVudCBldmVudCBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDRcXFwiPjgwNDwvYT58U29tZSBkYXRhIHJlcXVlc3RlZCBkb2VzIG5vdCBmb2xsb3cgdGhlIG9yZGVyIGdyYXBoIGFzc3VtcHRpb25zLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDVcXFwiPjgwNTwvYT58VGhlIGluc3RydW1lbnQgZXZlbnQgdHlwZSBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODA2XFxcIj44MDY8L2E+fFRoZSB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDdcXFwiPjgwNzwvYT58VGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gdGVtcGxhdGUgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwOFxcXCI+ODA4PC9hPnxUaGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgxMVxcXCI+ODExPC9hPnxBIHByaWNlIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgYW4gb3JkZXIufCAgfCB8IDxhIG5hbWU9XFxcIjgxMlxcXCI+ODEyPC9hPnxBIHByaWNlIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgYW4gYWxsb2NhdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODEzXFxcIj44MTM8L2E+fENoYXJ0IG9mIEFjY291bnRzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODE0XFxcIj44MTQ8L2E+fEFjY291bnQgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTVcXFwiPjgxNTwvYT58QWJvciBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxNlxcXCI+ODE2PC9hPnxBYm9yIENvbmZpZ3VyYXRpb24gbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTdcXFwiPjgxNzwvYT58UmVjb25jaWxpYXRpb24gbWFwcGluZyBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiODE4XFxcIj44MTg8L2E+fEF0dHJpYnV0ZSB0eXBlIGNvdWxkIG5vdCBiZSBkZWxldGVkIGJlY2F1c2UgaXQgZG9lc25cXCd0IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MTlcXFwiPjgxOTwvYT58UmVjb25jaWxpYXRpb24gbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MjBcXFwiPjgyMDwvYT58Q3VzdG9kaWFuIEFjY291bnQgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MjFcXFwiPjgyMTwvYT58QWxsb2NhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjgyMlxcXCI+ODIyPC9hPnxSZWNvbmNpbGlhdGlvbiBydW4gbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjgyM1xcXCI+ODIzPC9hPnxSZWNvbmNpbGlhdGlvbiBicmVhayBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiODI0XFxcIj44MjQ8L2E+fEVudGl0eSBsaW5rIHR5cGUgY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBkb2VzblxcJ3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgyOFxcXCI+ODI4PC9hPnxBZGRyZXNzIGtleSBkZWZpbml0aW9uIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODI5XFxcIj44Mjk8L2E+fENvbXBsaWFuY2UgdGVtcGxhdGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzBcXFwiPjgzMDwvYT58QWN0aW9uIG5vdCBzdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiODMxXFxcIj44MzE8L2E+fFJlZmVyZW5jZSBsaXN0IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODMyXFxcIj44MzI8L2E+fFBvc3RpbmcgTW9kdWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODMzXFxcIj44MzM8L2E+fFRoZSB0eXBlIG9mIHBhcmFtZXRlciBwcm92aWRlZCBkaWQgbm90IG1hdGNoIHRoYXQgcmVxdWlyZWQgYnkgdGhlIGNvbXBsaWFuY2UgcnVsZS58ICB8IHwgPGEgbmFtZT1cXFwiODM0XFxcIj44MzQ8L2E+fFRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IGEgcnVsZSBkaWQgbm90IG1hdGNoIHRob3NlIHJlcXVpcmVkIGJ5IGl0cyB0ZW1wbGF0ZS58ICB8IHwgPGEgbmFtZT1cXFwiODM1XFxcIj44MzU8L2E+fFRoZSBlbnRpdHkgaGFzIGEgcHJvcGVydHkgaW4gYSBkb21haW4gdGhhdCBpcyBub3Qgc3VwcHJ0ZWQgZm9yIHRoYXQgZW50aXR5IHR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjgzNlxcXCI+ODM2PC9hPnxTdHJ1Y3R1cmVkIHJlc3VsdCBkYXRhIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODM3XFxcIj44Mzc8L2E+fERpYXJ5IGVudHJ5IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODM4XFxcIj44Mzg8L2E+fERpYXJ5IGVudHJ5IGNvdWxkIG5vdCBiZSBjcmVhdGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzlcXFwiPjgzOTwvYT58RGlhcnkgZW50cnkgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjg2MVxcXCI+ODYxPC9hPnxDb21wbGlhbmNlIHJ1biBzdW1tYXJ5IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODY5XFxcIj44Njk8L2E+fENvbmZsaWN0aW5nIGluc3RydW1lbnQgcHJvcGVydGllcyBpbiBiYXRjaC58ICB8IHwgPGEgbmFtZT1cXFwiODcwXFxcIj44NzA8L2E+fENvbXBsaWFuY2UgcnVuIHN1bW1hcnkgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjg3MVxcXCI+ODcxPC9hPnxUaGUgc3BlY2lmaWVkIGltcGVyc29uYXRlZCB1c2VyIGRvZXMgbm90IGV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjg3NFxcXCI+ODc0PC9hPnxQcm92aWRlZCBQcm9wZXJ0eSBEb21haW4gaXMgbm90IHN1cHBvcnRlZCBmb3IgZW50aXR5IGZpbHRlci58ICB8IHwgPGEgbmFtZT1cXFwiODc1XFxcIj44NzU8L2E+fENhbm5vdCBEZWxldGUgU3lzdGVtIFJlZmVyZW5jZSBMaXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4NzZcXFwiPjg3NjwvYT58Q2xlYXJkb3duIE1vZHVsZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjg3OVxcXCI+ODc5PC9hPnxQb3J0Zm9saW9zIGRvIG5vdCBoYXZlIHRoZSBzYW1lIGJhc2UgY3VycmVuY3l8ICB8IHwgPGEgbmFtZT1cXFwiODgwXFxcIj44ODA8L2E+fFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY29tcGxpYW5jZSBleHByZXNzaW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODFcXFwiPjg4MTwvYT58QmxvY2sgb3ZlcnBsYWNlZC58ICB8IHwgPGEgbmFtZT1cXFwiODgyXFxcIj44ODI8L2E+fE9yZGVyIG5vdCBhcHByb3ZlZC58ICB8IHwgPGEgbmFtZT1cXFwiODgzXFxcIj44ODM8L2E+fENhbm5vdCB1cGRhdGUgdGhlIHNoYXJlZCBmaWVsZHMgb2YgYSBibG9jayB3aXRoIGFzc29jaWF0ZWQgb3JkZXJzLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODZcXFwiPjg4NjwvYT58Q2Fubm90IGxvY2sgdGhlIHBlcmlvZC58ICB8IHwgPGEgbmFtZT1cXFwiODg3XFxcIj44ODc8L2E+fENhbm5vdCBhcHBseSBjbGVhciBkb3duIG1vZHVsZS58ICB8IHwgPGEgbmFtZT1cXFwiODg4XFxcIj44ODg8L2E+fENhbm5vdCB1cHNlcnQgSW5zdHJ1bWVudCBFdmVudCBJbnN0cnVjdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODg5XFxcIj44ODk8L2E+fENhbm5vdCByZWFkIEluc3RydW1lbnQgRXZlbnQgSW5zdHJ1Y3Rpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjg5NVxcXCI+ODk1PC9hPnxUaGUgQ2FwaXRhbCBSYXRpbyBDYWxjdWxhdGlvbiBJcyBXcm9uZy58ICB8IHwgPGEgbmFtZT1cXFwiOTEwXFxcIj45MTA8L2E+fENhbm5vdCB1cGRhdGUgYSBibG9jayByZWZlcmVuY2VkIGJ5IGEgcGxhY2VtZW50LnwgIHwgfCA8YSBuYW1lPVxcXCI5MTFcXFwiPjkxMTwvYT58QSBGdW5kIHRoYXQgcmVmZXJlbmNlcyB0aGlzIEFib3IgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjkxMlxcXCI+OTEyPC9hPnxDYW5ub3QgYWRkIGRlY2lzaW9uIHRvIFN0YWdlZCBNb2RpZmljYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjkxM1xcXCI+OTEzPC9hPnxUaGUgU3RhZ2VkIE1vZGlmaWNhdGlvbiBjb3VsZCBub3QgYmUgYXBwbGllZC58ICB8IHwgPGEgbmFtZT1cXFwiOTE0XFxcIj45MTQ8L2E+fEFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkxNVxcXCI+OTE1PC9hPnxDYW5ub3QgdXBzZXJ0IG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lIHByb3BlcnR5IGluIG9uZSByZXF1ZXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI5MTZcXFwiPjkxNjwvYT58UGxhY2VtZW50IGFuZCBkaXJlY3QgZGVzY2VuZGVudHMgaGF2ZSBtb3JlIGV4ZWN1dGVkIHF1YW50aXR5IHRoYW4gdG90YWwgcGxhY2VtZW50IHF1YW50aXR5LnwgIHwgfCA8YSBuYW1lPVxcXCI5MTdcXFwiPjkxNzwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCB3aXRoIHRoaXMgRW50cnlUeXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI5MThcXFwiPjkxODwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCBpbiB0aGlzIFN0YXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTlcXFwiPjkxOTwvYT58UGxhY2VtZW50IGNvdWxkIG5vdCBiZSBjYW5jZWxsZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkyMFxcXCI+OTIwPC9hPnxTaGFyZSBDbGFzcyBub3QgY29uZmlndXJlZCBpbiBGdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjkyMVxcXCI+OTIxPC9hPnxTaGFyZSBDbGFzcyBTdWIgSG9sZGluZyBLZXkgbm90IGNvbmZpZ3VyZWQgaW4gUG9ydGZvbGlvfCAgfCB8IDxhIG5hbWU9XFxcIjkyMlxcXCI+OTIyPC9hPnxDb3VsZCBub3QgdXBkYXRlIGFuIG9yZGVyLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjNcXFwiPjkyMzwvYT58TXVsdGlwbGUgc2V0cyBvZiBTaGFyZSBDbGFzcyBTdWIgSG9sZGluZyBLZXlzIGNvbmZpZ3VyZWQgYWNyb3NzIHRoZSBQb3J0Zm9saW9zIG9mIGEgRnVuZC58ICB8IHwgPGEgbmFtZT1cXFwiOTI0XFxcIj45MjQ8L2E+fE9uZSBvciBtb3JlIG1hdHJpeCBjZWxscyBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIG1hdHJpeC58ICB8IHwgPGEgbmFtZT1cXFwiOTI1XFxcIj45MjU8L2E+fFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgcHJvdmlkZWQgbWF0cml4IGRlZmluaXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjkyNlxcXCI+OTI2PC9hPnxNYXRyaXggZGVmaW5pdGlvbiBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiOTI3XFxcIj45Mjc8L2E+fE1hdHJpeCBkZWZpbml0aW9uIGNvdWxkIG5vdCBiZSBkZWxldGVkIGJlY2F1c2UgaXQgZG9lc25cXCd0IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI5MjhcXFwiPjkyODwvYT58RGF0YVR5cGUgd2l0aCBJZCBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiOTI5XFxcIj45Mjk8L2E+fFNxdWFyZSBtYXRyaXggaXMgaW5jb21wbGV0ZS58ICB8IHwgPGEgbmFtZT1cXFwiOTMwXFxcIj45MzA8L2E+fEEgY29uZGl0aW9uYWwgbGljZW5zZSB0ZXJtIGhhcyBiZWVuIGV4Y2VlZGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzFcXFwiPjkzMTwvYT58VGhlIEN1c3RvbSBEYXRhIE1vZGVsIHJlcXVlc3RlZCBpcyBub3QgaW50ZW5kZWQgZm9yIHRoZSBlbnRpdHkgcHJvdmlkZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkzMlxcXCI+OTMyPC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGRvZXMgbm90IGhhdmUgYSBtYW5kYXRvcnkgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IHRoZSBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTMzXFxcIj45MzM8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgaGFzIGEgcHJvcGVydHkgbm90IGFsbG93ZWQgYnkgdGhlIHNwZWNpZmllZCBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTM0XFxcIj45MzQ8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgZG9lcyBub3QgaGF2ZSBhIG1hbmRhdG9yeSBpZGVudGlmaWVyIHNwZWNpZmllZCBieSB0aGUgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjkzNVxcXCI+OTM1PC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGhhcyBhbiBpZGVudGlmaWVyIG5vdCBhbGxvd2VkIGJ5IHRoZSBzcGVjaWZpZWQgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjkzNlxcXCI+OTM2PC9hPnxUaGUgQ3VzdG9tIERhdGEgTW9kZWwgaW5jbHVkZWQgYW4gYWxpYXMgb3Igc29ydC1ieSBhdHRyaWJ1dGUgdGhhdCB3YXMgbm90IG9uIHRoZSBkZWZpbml0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzdcXFwiPjkzNzwvYT58VGhlIENsb3NlZFBlcmlvZCB3aXRoIHRoZSBJZCBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgVGltZWxpbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTM4XFxcIj45Mzg8L2E+fFRoZSBuZXcgQ2xvc2VkIFBlcmlvZCB3b3VsZCBjYXVzZSB0aGUgVGltZWxpbmUgdG8gaGF2ZSBub24tY29udGlndW91cyBDbG9zZWQgUGVyaW9kc3wgIHwgfCA8YSBuYW1lPVxcXCI5MzlcXFwiPjkzOTwvYT58QmxvY2tlZCBieSBhIE5ldHdvcmsgWm9uZXwgIHwgfCA8YSBuYW1lPVxcXCI5NDBcXFwiPjk0MDwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBkb2VzIG5vdCBtZWV0IHRoZSBjb25kaXRpb25zIG9mIHRoZSBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTQxXFxcIj45NDE8L2E+fE9yZGVyIG5vdCBjb21wbGlhbnQufCAgfCB8IDxhIG5hbWU9XFxcIjk0MlxcXCI+OTQyPC9hPnxBY3Rpb24gd291bGQgY3JlYXRlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS58ICB8IHwgPGEgbmFtZT1cXFwiOTQ0XFxcIj45NDQ8L2E+fERlcml2ZWQgUHJvcGVydHkgY2FsY3VsYXRpb24gbm90IGNvbXBsZXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDVcXFwiPjk0NTwvYT58RGVyaXZlZCBQcm9wZXJ0eSBpcyBub3QgZmlsdGVyYWJsZS58ICB8IHwgPGEgbmFtZT1cXFwiOTQ2XFxcIj45NDY8L2E+fFRoZSBjb25kaXRpb25zIHByb3ZpZGVkIGhhdmUgb25lIG9yIG1vcmUgZXJyb3JzLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDdcXFwiPjk0NzwvYT58VGhlIHByb3BlcnR5L2lkZW50aWZpZXIgZG9tYWluIGFuZCBlbnRpdHkgZG9tYWluIGRvIG5vdCBtYXRjaC58ICB8IHwgPGEgbmFtZT1cXFwiOTQ4XFxcIj45NDg8L2E+fEludmFsaWQgVGltZWxpbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTQ5XFxcIj45NDk8L2E+fEZpbHRlcmFibGUgRGVyaXZlZCBQcm9wZXJ0eSBsaW1pdCByZWFjaGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5NTBcXFwiPjk1MDwvYT58SW52ZXN0b3IgUmVjb3JkIElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiOTUxXFxcIj45NTE8L2E+fEludmVzdG9yIFJlY29yZCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiOTUyXFxcIj45NTI8L2E+fEludmVzdG1lbnQgQWNjb3VudCBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjk1M1xcXCI+OTUzPC9hPnxJbnZlc3RtZW50IEFjY291bnQgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjk1NFxcXCI+OTU0PC9hPnxDb3VsZCBOb3QgU3dlZXAgQmxvY2t8ICB8IHwgPGEgbmFtZT1cXFwiOTU1XFxcIj45NTU8L2E+fEVudGl0eSBVbmlxdWUgSWQgaGFzIHRoZSB3cm9uZyBmb3JtYXR8ICB8IHwgPGEgbmFtZT1cXFwiOTU2XFxcIj45NTY8L2E+fFBvc3QgQ2xvc2UgQWN0aXZpdHkgaXMgaW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI5NTdcXFwiPjk1NzwvYT58VGhlIENsb3NlZFBlcmlvZCB3aXRoIHRoZSBJZCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgVGltZWxpbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTU4XFxcIj45NTg8L2E+fEludmFsaWQgU2V0dGxlbWVudCBJbnN0cnVjdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiOTU5XFxcIj45NTk8L2E+fE9yZGVyIHJlcXVpcmVzIHF1YW50aXR5LnwgIHwgfCA8YSBuYW1lPVxcXCI5NjBcXFwiPjk2MDwvYT58SW52YWxpZCBEYXRhUG9pbnQgVmFsdWUgQXNzaWdubWVudHwgIHwgfCA8YSBuYW1lPVxcXCI5NjFcXFwiPjk2MTwvYT58SW52YWxpZCBSZWxhdGlvbmFsIERhdGFzZXQgRmllbGQgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI5NjJcXFwiPjk2MjwvYT58UmVsYXRpb25hbCBEYXRhc2V0IERlZmluaXRpb24gRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiOTYzXFxcIj45NjM8L2E+fFRpbWVsaW5lIEJvb2ttYXJrIE5vdCBJbiBPcGVuIFBlcmlvZHwgIHwgfCA8YSBuYW1lPVxcXCI5NjRcXFwiPjk2NDwvYT58VGhlIEN1c3RvbSBEYXRhIE1vZGVsIHNwZWNpZmllZCBpZGVudGlmaWVycyBidXQgdGhlIGVudGl0eSBkb2VzIG5vdCBzdXBwb3J0IGlkZW50aWZpZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjk2NVxcXCI+OTY1PC9hPnxUaGUgc29ydCBieSBwcm92aWRlZCBoYXMgb25lIG9yIG1vcmUgZXJyb3JzfCAgfCB8IDxhIG5hbWU9XFxcIjk2NlxcXCI+OTY2PC9hPnxJbnZhbGlkIEN1c3RvbSBEYXRhIE1vZGVsIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiOTY3XFxcIj45Njc8L2E+fFJ1bGUgc2V0IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBDaGVjayBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjk2OFxcXCI+OTY4PC9hPnxUaGUgQ2xvc2VkIFBlcmlvZCBpcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjk2OVxcXCI+OTY5PC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhpcyBTdG9wIFByaWNlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzBcXFwiPjk3MDwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCB3aXRoIHRoaXMgTGltaXQgUHJpY2UufCAgfCB8IDxhIG5hbWU9XFxcIjk3MVxcXCI+OTcxPC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhlIGN1cnJlbnQgVHlwZS58ICB8IHwgPGEgbmFtZT1cXFwiOTc0XFxcIj45NzQ8L2E+fENhbm5vdCBQbGFjZUJsb2NrcyBhZ2FpbnN0IGFuIFxcJ1Vuc29saWNpdGVkXFwnIEJsb2NrIChibG9jayBjb250YWluaW5nIDAgT3JkZXJzKS58ICB8IHwgPGEgbmFtZT1cXFwiOTc1XFxcIj45NzU8L2E+fE5vIFBvcnRmb2xpbyBHcm91cCBTZWxlY3RlZHwgIHwgfCA8YSBuYW1lPVxcXCI5NzZcXFwiPjk3NjwvYT58QW1iaWd1b3VzIFNjb3BlfCAgfCBcbiAqXG4gKiBDb250YWN0OiBpbmZvQGZpbmJvdXJuZS5jb21cbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsXG4gICAgICAgICBIdHRwUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cFBhcmFtZXRlckNvZGVjLCBIdHRwQ29udGV4dCBcbiAgICAgICAgfSAgICAgICBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMgfSAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vZW5jb2Rlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcyc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25SZWNpcGUgfSBmcm9tICcuLi9tb2RlbC9jb25maWd1cmF0aW9uUmVjaXBlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IENyZWF0ZVJlY2lwZVJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC9jcmVhdGVSZWNpcGVSZXF1ZXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IElubGluZVZhbHVhdGlvblJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC9pbmxpbmVWYWx1YXRpb25SZXF1ZXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IExpc3RBZ2dyZWdhdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvbGlzdEFnZ3JlZ2F0aW9uUmVzcG9uc2UnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgTHVzaWRQcm9ibGVtRGV0YWlscyB9IGZyb20gJy4uL21vZGVsL2x1c2lkUHJvYmxlbURldGFpbHMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgTHVzaWRWYWxpZGF0aW9uUHJvYmxlbURldGFpbHMgfSBmcm9tICcuLi9tb2RlbC9sdXNpZFZhbGlkYXRpb25Qcm9ibGVtRGV0YWlscyc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBSZXNvdXJjZUxpc3RPZkFnZ3JlZ2F0aW9uUXVlcnkgfSBmcm9tICcuLi9tb2RlbC9yZXNvdXJjZUxpc3RPZkFnZ3JlZ2F0aW9uUXVlcnknO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVmFsdWF0aW9uUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL3ZhbHVhdGlvblJlcXVlc3QnO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vdmFyaWFibGVzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlQ29uZmlndXJhdGlvblJlY2lwZVJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgc2NvcGUgb2YgdGhlIHBvcnRmb2xpbyAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb2RlIG9mIHRoZSBwb3J0Zm9saW8gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSByZXF1ZXN0IHNwZWNpZnlpbmcgdGhlIHBhcmFtZXRlcnMgdG8gZ2VuZXJhdGluZyB0aGUgcmVjaXBlICovXG4gICAgY3JlYXRlUmVjaXBlUmVxdWVzdD86IENyZWF0ZVJlY2lwZVJlcXVlc3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UXVlcnlhYmxlS2V5c1JlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgcGFnaW5hdGlvbiB0b2tlbiB0byB1c2UgdG8gY29udGludWUgbGlzdGluZyBxdWVyeWFibGUga2V5cyBmcm9tIGEgcHJldmlvdXMgY2FsbCB0byBsaXN0IHF1ZXJ5YWJsZSBrZXlzLiAgICAgICAgICAgICAgVGhpcyB2YWx1ZSBpcyByZXR1cm5lZCBmcm9tIHRoZSBwcmV2aW91cyBjYWxsLiAqL1xuICAgIHBhZ2U/OiBzdHJpbmc7XG4gICAgLyoqIFdoZW4gcGFnaW5hdGluZywgbGltaXQgdGhlIG51bWJlciBvZiByZXR1cm5lZCByZXN1bHRzIHRvIHRoaXMgbWFueS4gKi9cbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICAvKiogRXhwcmVzc2lvbiB0byBmaWx0ZXIgdGhlIHJlc3VsdCBzZXQuICAgICAgICAgICAgICBSZWFkIG1vcmUgYWJvdXQgZmlsdGVyaW5nIHJlc3VsdHMgZnJvbSBMVVNJRCBoZXJlIGh0dHBzOi8vc3VwcG9ydC5sdXNpZC5jb20vZmlsdGVyaW5nLXJlc3VsdHMtZnJvbS1sdXNpZC4gKi9cbiAgICBmaWx0ZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0VmFsdWF0aW9uUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSByZXF1ZXN0IHNwZWNpZnlpbmcgdGhlIHNldCBvZiBwb3J0Zm9saW9zIGFuZCBkYXRlcyBvbiB3aGljaCB0byBjYWxjdWxhdGUgYSBzZXQgb2YgdmFsdWF0aW9uIG1ldHJpY3MgKi9cbiAgICB2YWx1YXRpb25SZXF1ZXN0PzogVmFsdWF0aW9uUmVxdWVzdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRWYWx1YXRpb25PZldlaWdodGVkSW5zdHJ1bWVudHNSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHJlcXVlc3Qgc3BlY2lmeWluZyB0aGUgc2V0IG9mIHBvcnRmb2xpb3MgYW5kIGRhdGVzIG9uIHdoaWNoIHRvIGNhbGN1bGF0ZSBhIHNldCBvZiB2YWx1YXRpb24gbWV0cmljcyAqL1xuICAgIGlubGluZVZhbHVhdGlvblJlcXVlc3Q/OiBJbmxpbmVWYWx1YXRpb25SZXF1ZXN0O1xufVxuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0aW9uU2VydmljZSB7XG5cbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSAnaHR0cHM6Ly93d3cubHVzaWQuY29tL2FwaSc7XG4gICAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIHB1YmxpYyBlbmNvZGVyOiBIdHRwUGFyYW1ldGVyQ29kZWM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QmFzZVBhdGggPSBBcnJheS5pc0FycmF5KGJhc2VQYXRoKSA/IGJhc2VQYXRoWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpcnN0QmFzZVBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSBmaXJzdEJhc2VQYXRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGJhc2VQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5jb2RlciA9IHRoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVyIHx8IG5ldyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMoKTtcbiAgICB9XG5cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBwcml2YXRlIGFkZFRvSHR0cFBhcmFtcyhodHRwUGFyYW1zOiBIdHRwUGFyYW1zLCB2YWx1ZTogYW55LCBrZXk/OiBzdHJpbmcpOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlPzogYW55LCBrZXk/OiBzdHJpbmcpOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgKHZhbHVlIGFzIGFueVtdKS5mb3JFYWNoKCBlbGVtID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCBlbGVtLCBrZXkpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChrZXksICh2YWx1ZSBhcyBEYXRlKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIERhdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaCggayA9PiBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoXG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbXMsIHZhbHVlW2tdLCBrZXkgIT0gbnVsbCA/IGAke2tleX0uJHtrfWAgOiBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBub3Qgb2JqZWN0IG9yIGFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFWFBFUklNRU5UQUxdIEdlbmVyYXRlQ29uZmlndXJhdGlvblJlY2lwZTogR2VuZXJhdGVzIGEgcmVjaXBlIHN1ZmZpY2llbnQgdG8gcGVyZm9ybSB2YWx1YXRpb25zIGZvciB0aGUgZ2l2ZW4gcG9ydGZvbGlvLlxuICAgICAqIEdpdmVuIGEgc2V0IG9mIHNjb3BlcywgYSBwb3J0Zm9saW8gSWQgYW5kIGEgYmFzaWMgcmVjaXBlLCB0aGlzIGVuZHBvaW50IGdlbmVyYXRlcyBhIGNvbmZpZ3VyYXRpb24gcmVjaXBlIHdpdGggcmVsZXZhbnQgcnVsZXMgdGhhdCBjYW4gdmFsdWUgdGhlIGluc3RydW1lbnRzIGluIHRoZSBwb3J0Zm9saW8uXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdlbmVyYXRlQ29uZmlndXJhdGlvblJlY2lwZShyZXF1ZXN0UGFyYW1ldGVycz86IEdlbmVyYXRlQ29uZmlndXJhdGlvblJlY2lwZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxDb25maWd1cmF0aW9uUmVjaXBlPjtcbiAgICBwdWJsaWMgZ2VuZXJhdGVDb25maWd1cmF0aW9uUmVjaXBlKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2VuZXJhdGVDb25maWd1cmF0aW9uUmVjaXBlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8Q29uZmlndXJhdGlvblJlY2lwZT4+O1xuICAgIHB1YmxpYyBnZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZWNpcGUocmVxdWVzdFBhcmFtZXRlcnM/OiBHZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZWNpcGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8Q29uZmlndXJhdGlvblJlY2lwZT4+O1xuICAgIHB1YmxpYyBnZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZWNpcGUocmVxdWVzdFBhcmFtZXRlcnM/OiBHZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZWNpcGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZWNpcGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZWNpcGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlYXRlUmVjaXBlUmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jcmVhdGVSZWNpcGVSZXF1ZXN0O1xuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9hZ2dyZWdhdGlvbi8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyRnZW5lcmF0ZWNvbmZpZ3VyYXRpb25yZWNpcGVgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8Q29uZmlndXJhdGlvblJlY2lwZT4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGNyZWF0ZVJlY2lwZVJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRRdWVyeWFibGVLZXlzOiBRdWVyeSB0aGUgc2V0IG9mIHN1cHBvcnRlZCBcXCZxdW90O2FkZHJlc3Nlc1xcJnF1b3Q7IHRoYXQgY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUgYWdncmVnYXRpb24gZW5kcG9pbnQuXG4gICAgICogV2hlbiBhIHJlcXVlc3QgaXMgbWFkZSBmb3IgYWdncmVnYXRpb24sIHRoZSB1c2VyIG5lZWRzIHRvIGtub3cgd2hhdCBrZXlzIGNhbiBiZSBwYXNzZWQgdG8gaXQgZm9yIHF1ZXJ5YWJsZSBkYXRhLiBUaGlzIGVuZHBvaW50IGFsbG93cyB0byBxdWVyaWVzIHRvIHByb3ZpZGUgdGhlIHNldCBvZiBrZXlzLCAgd2hhdCB0aGV5IGFyZSBhbmQgd2hhdCB0aGV5IHJldHVybi5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UXVlcnlhYmxlS2V5cyhyZXF1ZXN0UGFyYW1ldGVycz86IEdldFF1ZXJ5YWJsZUtleXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8UmVzb3VyY2VMaXN0T2ZBZ2dyZWdhdGlvblF1ZXJ5PjtcbiAgICBwdWJsaWMgZ2V0UXVlcnlhYmxlS2V5cyhyZXF1ZXN0UGFyYW1ldGVycz86IEdldFF1ZXJ5YWJsZUtleXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxSZXNvdXJjZUxpc3RPZkFnZ3JlZ2F0aW9uUXVlcnk+PjtcbiAgICBwdWJsaWMgZ2V0UXVlcnlhYmxlS2V5cyhyZXF1ZXN0UGFyYW1ldGVycz86IEdldFF1ZXJ5YWJsZUtleXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8UmVzb3VyY2VMaXN0T2ZBZ2dyZWdhdGlvblF1ZXJ5Pj47XG4gICAgcHVibGljIGdldFF1ZXJ5YWJsZUtleXMocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRRdWVyeWFibGVLZXlzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBwYWdlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnBhZ2U7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSByZXF1ZXN0UGFyYW1ldGVycz8uZmlsdGVyO1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKHBhZ2UgIT09IHVuZGVmaW5lZCAmJiBwYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+cGFnZSwgJ3BhZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgIT09IHVuZGVmaW5lZCAmJiBsaW1pdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmxpbWl0LCAnbGltaXQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyICE9PSB1bmRlZmluZWQgJiYgZmlsdGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+ZmlsdGVyLCAnZmlsdGVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9yZXN1bHRzL3F1ZXJ5YWJsZS9rZXlzYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFJlc291cmNlTGlzdE9mQWdncmVnYXRpb25RdWVyeT4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldFZhbHVhdGlvbjogUGVyZm9ybSB2YWx1YXRpb24gZm9yIGEgbGlzdCBvZiBwb3J0Zm9saW9zIGFuZC9vciBwb3J0Zm9saW8gZ3JvdXBzXG4gICAgICogUGVyZm9ybSB2YWx1YXRpb24gb24gc3BlY2lmaWVkIGxpc3Qgb2YgcG9ydGZvbGlvIGFuZC9vciBwb3J0Zm9saW8gZ3JvdXBzIGZvciBhIHNldCBvZiBkYXRlcy5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VmFsdWF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0VmFsdWF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPExpc3RBZ2dyZWdhdGlvblJlc3BvbnNlPjtcbiAgICBwdWJsaWMgZ2V0VmFsdWF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0VmFsdWF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8TGlzdEFnZ3JlZ2F0aW9uUmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgZ2V0VmFsdWF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0VmFsdWF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PExpc3RBZ2dyZWdhdGlvblJlc3BvbnNlPj47XG4gICAgcHVibGljIGdldFZhbHVhdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IEdldFZhbHVhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgdmFsdWF0aW9uUmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy52YWx1YXRpb25SZXF1ZXN0O1xuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9hZ2dyZWdhdGlvbi8kdmFsdWF0aW9uYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PExpc3RBZ2dyZWdhdGlvblJlc3BvbnNlPigncG9zdCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgYm9keTogdmFsdWF0aW9uUmVxdWVzdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldFZhbHVhdGlvbk9mV2VpZ2h0ZWRJbnN0cnVtZW50czogUGVyZm9ybSB2YWx1YXRpb24gZm9yIGFuIGlubGluZWQgcG9ydGZvbGlvXG4gICAgICogUGVyZm9ybSB2YWx1YXRpb24gb24gdGhlIHBvcnRmb2xpbyB0aGF0IGlzIGRlZmluZWQgYnkgdGhlIHdlaWdodGVkIHNldCBvZiBpbnN0cnVtZW50cyBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldFZhbHVhdGlvbk9mV2VpZ2h0ZWRJbnN0cnVtZW50cyhyZXF1ZXN0UGFyYW1ldGVycz86IEdldFZhbHVhdGlvbk9mV2VpZ2h0ZWRJbnN0cnVtZW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxMaXN0QWdncmVnYXRpb25SZXNwb25zZT47XG4gICAgcHVibGljIGdldFZhbHVhdGlvbk9mV2VpZ2h0ZWRJbnN0cnVtZW50cyhyZXF1ZXN0UGFyYW1ldGVycz86IEdldFZhbHVhdGlvbk9mV2VpZ2h0ZWRJbnN0cnVtZW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPExpc3RBZ2dyZWdhdGlvblJlc3BvbnNlPj47XG4gICAgcHVibGljIGdldFZhbHVhdGlvbk9mV2VpZ2h0ZWRJbnN0cnVtZW50cyhyZXF1ZXN0UGFyYW1ldGVycz86IEdldFZhbHVhdGlvbk9mV2VpZ2h0ZWRJbnN0cnVtZW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxMaXN0QWdncmVnYXRpb25SZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRWYWx1YXRpb25PZldlaWdodGVkSW5zdHJ1bWVudHMocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRWYWx1YXRpb25PZldlaWdodGVkSW5zdHJ1bWVudHNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGlubGluZVZhbHVhdGlvblJlcXVlc3QgPSByZXF1ZXN0UGFyYW1ldGVycz8uaW5saW5lVmFsdWF0aW9uUmVxdWVzdDtcblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ3RleHQvanNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vKitqc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvYWdncmVnYXRpb24vJHZhbHVhdGlvbmlubGluZWRgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8TGlzdEFnZ3JlZ2F0aW9uUmVzcG9uc2U+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiBpbmxpbmVWYWx1YXRpb25SZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iXX0=
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZpbmJvdXJuZS9sdXNpZC1zZGstYW5ndWxhcjE4L3NyYy9saWIvLmdlbmVyYXRlZC9hcGkvYWdncmVnYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFDVSxXQUFXLEVBQ3hELE1BQVksc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQStCLFlBQVksQ0FBQztBQXdCL0UsYUFBYTtBQUNiLE9BQU8sRUFBRSxTQUFTLEVBQXNCLE1BQTBCLGNBQWMsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQTBDLGtCQUFrQixDQUFDOzs7O0FBd0NyRixNQUFNLE9BQU8sa0JBQWtCO0lBT0w7SUFMWixRQUFRLEdBQUcsMkJBQTJCLENBQUM7SUFDMUMsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDcEMsT0FBTyxDQUFxQjtJQUVuQyxZQUFzQixVQUFzQixFQUFnQyxRQUF5QixFQUFjLGFBQTRCO1FBQXpILGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3hFLElBQUksYUFBYSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixRQUFRLEdBQUcsYUFBYSxDQUFDO1lBQzdCLENBQUM7WUFFRCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxJQUFJLElBQUksd0JBQXdCLEVBQUUsQ0FBQztJQUNoRixDQUFDO0lBR0QsYUFBYTtJQUNMLGVBQWUsQ0FBQyxVQUFzQixFQUFFLEtBQVUsRUFBRSxHQUFZO1FBQ3BFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDL0QsVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEUsQ0FBQzthQUFNLENBQUM7WUFDSixVQUFVLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxVQUFzQixFQUFFLEtBQVcsRUFBRSxHQUFZO1FBQzlFLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hCLE9BQU8sVUFBVSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN0QixLQUFlLENBQUMsT0FBTyxDQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekcsQ0FBQztpQkFBTSxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ2QsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFHLEtBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hGLENBQUM7cUJBQU0sQ0FBQztvQkFDTCxNQUFNLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FDdkUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRSxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFZTSwyQkFBMkIsQ0FBQyxpQkFBNEQsRUFBRSxVQUFlLE1BQU0sRUFBRSxpQkFBMEIsS0FBSyxFQUFFLE9BQThIO1FBQ25SLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixFQUFFLEtBQUssQ0FBQztRQUN2QyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsMEZBQTBGLENBQUMsQ0FBQztRQUNoSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1FBQ3JDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5RkFBeUYsQ0FBQyxDQUFDO1FBQy9HLENBQUM7UUFDRCxNQUFNLG1CQUFtQixHQUFHLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDO1FBRW5FLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFMUMsSUFBSSxrQkFBc0MsQ0FBQztRQUMzQyxtQ0FBbUM7UUFDbkMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDckIsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFFRCxJQUFJLGdDQUFnQyxHQUF1QixPQUFPLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQy9GLElBQUksZ0NBQWdDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsaUNBQWlDO1lBQ2pDLE1BQU0saUJBQWlCLEdBQWE7Z0JBQ2hDLFlBQVk7Z0JBQ1osa0JBQWtCO2dCQUNsQixXQUFXO2FBQ2QsQ0FBQztZQUNGLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQ0QsSUFBSSxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBRUQsSUFBSSxtQkFBbUIsR0FBNEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDOUUsSUFBSSxtQkFBbUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxtQkFBbUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLHFCQUFxQixHQUF3QixPQUFPLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUNsRixJQUFJLHFCQUFxQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNqQyxDQUFDO1FBR0QsdUNBQXVDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFhO1lBQ3ZCLDZCQUE2QjtZQUM3QixrQkFBa0I7WUFDbEIsV0FBVztZQUNYLG9CQUFvQjtTQUN2QixDQUFDO1FBQ0YsTUFBTSx1QkFBdUIsR0FBdUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RyxJQUFJLHVCQUF1QixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFFRCxJQUFJLGFBQWEsR0FBNkIsTUFBTSxDQUFDO1FBQ3JELElBQUksZ0NBQWdDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLGdDQUFnQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pFLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLFlBQVksR0FBRyxvQkFBb0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQywrQkFBK0IsQ0FBQztRQUNuWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFzQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsRUFDdkc7WUFDSSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLElBQUksRUFBRSxtQkFBbUI7WUFDekIsWUFBWSxFQUFPLGFBQWE7WUFDaEMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNuRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsT0FBTztZQUNoQixhQUFhLEVBQUUscUJBQXFCO1lBQ3BDLGNBQWMsRUFBRSxjQUFjO1NBQ2pDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFZTSxnQkFBZ0IsQ0FBQyxpQkFBaUQsRUFBRSxVQUFlLE1BQU0sRUFBRSxpQkFBMEIsS0FBSyxFQUFFLE9BQThIO1FBQzdQLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixFQUFFLElBQUksQ0FBQztRQUNyQyxNQUFNLEtBQUssR0FBRyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO1FBRXpDLElBQUksdUJBQXVCLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4Qyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUMvRCxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFDL0QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzVDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQy9ELE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUUxQyxJQUFJLGtCQUFzQyxDQUFDO1FBQzNDLG1DQUFtQztRQUNuQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsU0FBUyxHQUFHLGtCQUFrQixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELElBQUksZ0NBQWdDLEdBQXVCLE9BQU8sSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDL0YsSUFBSSxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxpQ0FBaUM7WUFDakMsTUFBTSxpQkFBaUIsR0FBYTtnQkFDaEMsWUFBWTtnQkFDWixrQkFBa0I7Z0JBQ2xCLFdBQVc7YUFDZCxDQUFDO1lBQ0YsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFDRCxJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pELGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFFRCxJQUFJLG1CQUFtQixHQUE0QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM5RSxJQUFJLG1CQUFtQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLG1CQUFtQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUkscUJBQXFCLEdBQXdCLE9BQU8sSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQ2xGLElBQUkscUJBQXFCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUM7UUFHRCxJQUFJLGFBQWEsR0FBNkIsTUFBTSxDQUFDO1FBQ3JELElBQUksZ0NBQWdDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLGdDQUFnQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pFLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLFlBQVksR0FBRyw2QkFBNkIsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFpQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsRUFDakg7WUFDSSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLE1BQU0sRUFBRSx1QkFBdUI7WUFDL0IsWUFBWSxFQUFPLGFBQWE7WUFDaEMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNuRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsT0FBTztZQUNoQixhQUFhLEVBQUUscUJBQXFCO1lBQ3BDLGNBQWMsRUFBRSxjQUFjO1NBQ2pDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFZTSwwQkFBMEIsQ0FBQyxpQkFBMkQsRUFBRSxVQUFlLE1BQU0sRUFBRSxpQkFBMEIsS0FBSyxFQUFFLE9BQThIO1FBQ2pSLE1BQU0sOEJBQThCLEdBQUcsaUJBQWlCLEVBQUUsOEJBQThCLENBQUM7UUFFekYsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUUxQyxJQUFJLGtCQUFzQyxDQUFDO1FBQzNDLG1DQUFtQztRQUNuQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsU0FBUyxHQUFHLGtCQUFrQixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELElBQUksZ0NBQWdDLEdBQXVCLE9BQU8sSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDL0YsSUFBSSxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxpQ0FBaUM7WUFDakMsTUFBTSxpQkFBaUIsR0FBYTtnQkFDaEMsWUFBWTtnQkFDWixrQkFBa0I7Z0JBQ2xCLFdBQVc7YUFDZCxDQUFDO1lBQ0YsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFDRCxJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pELGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFFRCxJQUFJLG1CQUFtQixHQUE0QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM5RSxJQUFJLG1CQUFtQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLG1CQUFtQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUkscUJBQXFCLEdBQXdCLE9BQU8sSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQ2xGLElBQUkscUJBQXFCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUM7UUFHRCx1Q0FBdUM7UUFDdkMsTUFBTSxRQUFRLEdBQWE7WUFDdkIsNkJBQTZCO1lBQzdCLGtCQUFrQjtZQUNsQixXQUFXO1lBQ1gsb0JBQW9CO1NBQ3ZCLENBQUM7UUFDRixNQUFNLHVCQUF1QixHQUF1QixJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pHLElBQUksdUJBQXVCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUVELElBQUksYUFBYSxHQUE2QixNQUFNLENBQUM7UUFDckQsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ25DLElBQUksZ0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLGlDQUFpQyxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQWtDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUNuSDtZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsSUFBSSxFQUFFLDhCQUE4QjtZQUNwQyxZQUFZLEVBQU8sYUFBYTtZQUNoQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQVlNLFlBQVksQ0FBQyxpQkFBNkMsRUFBRSxVQUFlLE1BQU0sRUFBRSxpQkFBMEIsS0FBSyxFQUFFLE9BQThIO1FBQ3JQLE1BQU0sZ0JBQWdCLEdBQUcsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUM7UUFFN0QsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUUxQyxJQUFJLGtCQUFzQyxDQUFDO1FBQzNDLG1DQUFtQztRQUNuQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsU0FBUyxHQUFHLGtCQUFrQixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELElBQUksZ0NBQWdDLEdBQXVCLE9BQU8sSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDL0YsSUFBSSxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxpQ0FBaUM7WUFDakMsTUFBTSxpQkFBaUIsR0FBYTtnQkFDaEMsWUFBWTtnQkFDWixrQkFBa0I7Z0JBQ2xCLFdBQVc7YUFDZCxDQUFDO1lBQ0YsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFDRCxJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pELGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFFRCxJQUFJLG1CQUFtQixHQUE0QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM5RSxJQUFJLG1CQUFtQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLG1CQUFtQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUkscUJBQXFCLEdBQXdCLE9BQU8sSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQ2xGLElBQUkscUJBQXFCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUM7UUFHRCx1Q0FBdUM7UUFDdkMsTUFBTSxRQUFRLEdBQWE7WUFDdkIsNkJBQTZCO1lBQzdCLGtCQUFrQjtZQUNsQixXQUFXO1lBQ1gsb0JBQW9CO1NBQ3ZCLENBQUM7UUFDRixNQUFNLHVCQUF1QixHQUF1QixJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pHLElBQUksdUJBQXVCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUVELElBQUksYUFBYSxHQUE2QixNQUFNLENBQUM7UUFDckQsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ25DLElBQUksZ0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLDZCQUE2QixDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQTBCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUMzRztZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixZQUFZLEVBQU8sYUFBYTtZQUNoQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQVlNLGlDQUFpQyxDQUFDLGlCQUFrRSxFQUFFLFVBQWUsTUFBTSxFQUFFLGlCQUEwQixLQUFLLEVBQUUsT0FBOEg7UUFDL1IsTUFBTSxzQkFBc0IsR0FBRyxpQkFBaUIsRUFBRSxzQkFBc0IsQ0FBQztRQUV6RSxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRTFDLElBQUksa0JBQXNDLENBQUM7UUFDM0MsbUNBQW1DO1FBQ25DLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBRUQsSUFBSSxnQ0FBZ0MsR0FBdUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvRixJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pELGlDQUFpQztZQUNqQyxNQUFNLGlCQUFpQixHQUFhO2dCQUNoQyxZQUFZO2dCQUNaLGtCQUFrQjtnQkFDbEIsV0FBVzthQUNkLENBQUM7WUFDRixnQ0FBZ0MsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUNELElBQUksZ0NBQWdDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELElBQUksbUJBQW1CLEdBQTRCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlFLElBQUksbUJBQW1CLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEMsbUJBQW1CLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxxQkFBcUIsR0FBd0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDbEYsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDakMsQ0FBQztRQUdELHVDQUF1QztRQUN2QyxNQUFNLFFBQVEsR0FBYTtZQUN2Qiw2QkFBNkI7WUFDN0Isa0JBQWtCO1lBQ2xCLFdBQVc7WUFDWCxvQkFBb0I7U0FDdkIsQ0FBQztRQUNGLE1BQU0sdUJBQXVCLEdBQXVCLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekcsSUFBSSx1QkFBdUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBRUQsSUFBSSxhQUFhLEdBQTZCLE1BQU0sQ0FBQztRQUNyRCxJQUFJLGdDQUFnQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxDQUFDO2dCQUN6RSxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxZQUFZLEdBQUcsb0NBQW9DLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBMEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsWUFBWSxFQUFFLEVBQzNHO1lBQ0ksT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixJQUFJLEVBQUUsc0JBQXNCO1lBQzVCLFlBQVksRUFBTyxhQUFhO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbkQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsYUFBYSxFQUFFLHFCQUFxQjtZQUNwQyxjQUFjLEVBQUUsY0FBYztTQUNqQyxDQUNKLENBQUM7SUFDTixDQUFDO3VHQWpmUSxrQkFBa0IsNENBT3NDLFNBQVM7MkdBUGpFLGtCQUFrQixjQUZqQixNQUFNOzsyRkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFRa0QsUUFBUTs7MEJBQUcsTUFBTTsyQkFBQyxTQUFTOzswQkFBOEIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTFVTSUQgQVBJXG4gKiAjIEludHJvZHVjdGlvbiAgVGhpcyBwYWdlIGRvY3VtZW50cyB0aGUgW0xVU0lEIEFQSXNdKC4uLy4uLy4uL2FwaS9zd2FnZ2VyKSwgd2hpY2ggYWxsb3dzIGF1dGhvcmlzZWQgY2xpZW50cyB0byBxdWVyeSBhbmQgdXBkYXRlIHRoZWlyIGRhdGEgd2l0aGluIHRoZSBMVVNJRCBwbGF0Zm9ybS4gIFNES3MgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgTFVTSUQgQVBJcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBmb2xsb3dpbmcgbGFuZ3VhZ2VzIGFuZCBmcmFtZXdvcmtzOiAgKiBbQyNdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWNzaGFycCkgKiBbSmF2YV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstamF2YSkgKiBbSmF2YVNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstanMpICogW1B5dGhvbl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstcHl0aG9uKSAqIFtBbmd1bGFyXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1hbmd1bGFyKSAgVGhlIExVU0lEIHBsYXRmb3JtIGlzIG1hZGUgdXAgb2YgYSBudW1iZXIgb2Ygc3ViLWFwcGxpY2F0aW9ucy4gWW91IGNhbiBmaW5kIHRoZSBBUEkgLyBzd2FnZ2VyIGRvY3VtZW50YXRpb24gYnkgZm9sbG93aW5nIHRoZSBsaW5rcyBpbiB0aGUgdGFibGUgYmVsb3cuICAgfCBBcHBsaWNhdGlvbiAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQVBJIC8gU3dhZ2dlciBEb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8IExVU0lEICAgICAgICAgfCBPcGVuLCBBUEktZmlyc3QsIGRldmVsb3Blci1mcmllbmRseSBpbnZlc3RtZW50IGRhdGEgcGxhdGZvcm0uICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vYXBpL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgICAgIHwgfCBXZWIgYXBwICAgICAgIHwgVXNlci1mYWNpbmcgZnJvbnQgZW5kIGZvciBMVVNJRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2FwcC9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgICAgICB8IHwgU2NoZWR1bGVyICAgICB8IEF1dG9tYXRlZCBqb2Igc2NoZWR1bGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9zY2hlZHVsZXIyL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgfCB8IEluc2lnaHRzICAgICAgfCBNb25pdG9yaW5nIGFuZCB0cm91Ymxlc2hvb3Rpbmcgc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vaW5zaWdodHMvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgIHwgfCBJZGVudGl0eSAgICAgIHwgSWRlbnRpdHkgbWFuYWdlbWVudCBmb3IgTFVTSUQgKGluIGNvbmp1bmN0aW9uIHdpdGggQWNjZXNzKSAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2lkZW50aXR5L3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICB8IHwgQWNjZXNzICAgICAgICB8IEFjY2VzcyBjb250cm9sIGZvciBMVVNJRCAoaW4gY29uanVuY3Rpb24gd2l0aCBJZGVudGl0eSkgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9hY2Nlc3Mvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgfCB8IERyaXZlICAgICAgICAgfCBTZWN1cmUgZmlsZSByZXBvc2l0b3J5IGFuZCBtYW5hZ2VyIGZvciBjb2xsYWJvcmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vZHJpdmUvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgIHwgfCBMdW1pbmVzY2UgICAgIHwgRGF0YSB2aXJ0dWFsaXNhdGlvbiBzZXJ2aWNlIChxdWVyeSBkYXRhIGZyb20gbXVsdGlwbGUgcHJvdmlkZXJzLCBpbmNsdWRpbmcgTFVTSUQpIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2hvbmV5Y29tYi9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICB8IHwgTm90aWZpY2F0aW9uICB8IE5vdGlmaWNhdGlvbiBzZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9ub3RpZmljYXRpb24vc3dhZ2dlci9pbmRleC5odG1sKSAgfCB8IENvbmZpZ3VyYXRpb24gfCBGaWxlIHN0b3JlIGZvciBzZWNyZXRzIGFuZCBvdGhlciBzZW5zaXRpdmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vY29uZmlndXJhdGlvbi9zd2FnZ2VyL2luZGV4Lmh0bWwpIHwgfCBXb3JrZmxvdyAgICAgIHwgV29ya2Zsb3cgc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL3dvcmtmbG93L3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICB8ICAgIyBFcnJvciBDb2RlcyAgfCBDb2RlfE5hbWV8RGVzY3JpcHRpb24gfCB8IC0tLXwtLS18LS0tIHwgfCA8YSBuYW1lPVxcXCItMTBcXFwiPi0xMDwvYT58U2VydmVyIENvbmZpZ3VyYXRpb24gRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiLTFcXFwiPi0xPC9hPnxVbmtub3duIGVycm9yfEFuIHVuZXhwZWN0ZWQgZXJyb3Igd2FzIGVuY291bnRlcmVkIG9uIG91ciBzaWRlLiB8IHwgPGEgbmFtZT1cXFwiMTAyXFxcIj4xMDI8L2E+fFZlcnNpb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwM1xcXCI+MTAzPC9hPnxBcGkgUmF0ZSBMaW1pdCBWaW9sYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMTA0XFxcIj4xMDQ8L2E+fEluc3RydW1lbnQgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwNVxcXCI+MTA1PC9hPnxQcm9wZXJ0eSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTA2XFxcIj4xMDY8L2E+fFBvcnRmb2xpbyBSZWN1cnNpb24gRGVwdGh8ICB8IHwgPGEgbmFtZT1cXFwiMTA4XFxcIj4xMDg8L2E+fEdyb3VwIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDlcXFwiPjEwOTwvYT58UG9ydGZvbGlvIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMTBcXFwiPjExMDwvYT58UHJvcGVydHkgU2NoZW1hIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMTFcXFwiPjExMTwvYT58UG9ydGZvbGlvIEFuY2VzdHJ5IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMTJcXFwiPjExMjwvYT58UG9ydGZvbGlvIFdpdGggSWQgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTEzXFxcIj4xMTM8L2E+fE9ycGhhbmVkIFBvcnRmb2xpb3wgIHwgfCA8YSBuYW1lPVxcXCIxMTlcXFwiPjExOTwvYT58TWlzc2luZyBCYXNlIENsYWltc3wgIHwgfCA8YSBuYW1lPVxcXCIxMjFcXFwiPjEyMTwvYT58UHJvcGVydHkgTm90IERlZmluZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTIyXFxcIj4xMjI8L2E+fENhbm5vdCBEZWxldGUgU3lzdGVtIFByb3BlcnR5fCAgfCB8IDxhIG5hbWU9XFxcIjEyM1xcXCI+MTIzPC9hPnxDYW5ub3QgTW9kaWZ5IEltbXV0YWJsZSBQcm9wZXJ0eSBGaWVsZHwgIHwgfCA8YSBuYW1lPVxcXCIxMjRcXFwiPjEyNDwvYT58UHJvcGVydHkgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTI1XFxcIj4xMjU8L2E+fEludmFsaWQgUHJvcGVydHkgTGlmZSBUaW1lfCAgfCB8IDxhIG5hbWU9XFxcIjEyNlxcXCI+MTI2PC9hPnxQcm9wZXJ0eSBDb25zdHJhaW50IFN0eWxlIEV4Y2x1ZGVzIFByb3BlcnRpZXN8ICB8IHwgPGEgbmFtZT1cXFwiMTI3XFxcIj4xMjc8L2E+fENhbm5vdCBNb2RpZnkgRGVmYXVsdCBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTI4XFxcIj4xMjg8L2E+fEdyb3VwIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjEyOVxcXCI+MTI5PC9hPnxObyBTdWNoIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIxMzBcXFwiPjEzMDwvYT58VW5kZWZpbmVkIFZhbHVlIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTMxXFxcIj4xMzE8L2E+fFVuc3VwcG9ydGVkIFZhbHVlIFR5cGUgRGVmaW5lZCBPbiBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTMyXFxcIj4xMzI8L2E+fFZhbGlkYXRpb24gRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiMTMzXFxcIj4xMzM8L2E+fExvb3AgRGV0ZWN0ZWQgSW4gR3JvdXAgSGllcmFyY2h5fCAgfCB8IDxhIG5hbWU9XFxcIjEzNFxcXCI+MTM0PC9hPnxVbmRlZmluZWQgQWNjZXB0YWJsZSBWYWx1ZXN8ICB8IHwgPGEgbmFtZT1cXFwiMTM1XFxcIj4xMzU8L2E+fFN1YiBHcm91cCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMzhcXFwiPjEzODwvYT58UHJpY2UgU291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMzlcXFwiPjEzOTwvYT58QW5hbHl0aWMgU3RvcmUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE0MVxcXCI+MTQxPC9hPnxBbmFseXRpYyBTdG9yZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNDNcXFwiPjE0MzwvYT58Q2xpZW50IEluc3RydW1lbnQgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTQ0XFxcIj4xNDQ8L2E+fER1cGxpY2F0ZSBJbiBQYXJhbWV0ZXIgU2V0fCAgfCB8IDxhIG5hbWU9XFxcIjE0N1xcXCI+MTQ3PC9hPnxSZXN1bHRzIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxNDhcXFwiPjE0ODwvYT58T3JkZXIgRmllbGQgTm90IEluIFJlc3VsdCBTZXR8ICB8IHwgPGEgbmFtZT1cXFwiMTQ5XFxcIj4xNDk8L2E+fE9wZXJhdGlvbiBGYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTUwXFxcIj4xNTA8L2E+fEVsYXN0aWMgU2VhcmNoIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjE1MVxcXCI+MTUxPC9hPnxJbnZhbGlkIFBhcmFtZXRlciBWYWx1ZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTNcXFwiPjE1MzwvYT58Q29tbWFuZCBQcm9jZXNzaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTU0XFxcIj4xNTQ8L2E+fEVudGl0eSBTdGF0ZSBDb25zdHJ1Y3Rpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTVcXFwiPjE1NTwvYT58RW50aXR5IFRpbWVsaW5lIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE1NlxcXCI+MTU2PC9hPnxDb25jdXJyZW5jeSBDb25mbGljdCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE1N1xcXCI+MTU3PC9hPnxJbnZhbGlkIFJlcXVlc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTU4XFxcIj4xNTg8L2E+fEV2ZW50IFB1Ymxpc2ggVW5rbm93bnwgIHwgfCA8YSBuYW1lPVxcXCIxNTlcXFwiPjE1OTwvYT58RXZlbnQgUXVlcnkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjBcXFwiPjE2MDwvYT58QmxvYiBEaWQgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE2MlxcXCI+MTYyPC9hPnxTdWIgU3lzdGVtIFJlcXVlc3QgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjNcXFwiPjE2MzwvYT58U3ViIFN5c3RlbSBDb25maWd1cmF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTY1XFxcIj4xNjU8L2E+fEZhaWxlZCBUbyBEZWxldGV8ICB8IHwgPGEgbmFtZT1cXFwiMTY2XFxcIj4xNjY8L2E+fFVwc2VydCBDbGllbnQgSW5zdHJ1bWVudCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2N1xcXCI+MTY3PC9hPnxJbGxlZ2FsIEFzIEF0IEludGVydmFsfCAgfCB8IDxhIG5hbWU9XFxcIjE2OFxcXCI+MTY4PC9hPnxJbGxlZ2FsIEJpdGVtcG9yYWwgUXVlcnl8ICB8IHwgPGEgbmFtZT1cXFwiMTY5XFxcIj4xNjk8L2E+fEludmFsaWQgQWx0ZXJuYXRlIElkfCAgfCB8IDxhIG5hbWU9XFxcIjE3MFxcXCI+MTcwPC9hPnxDYW5ub3QgQWRkIE5vbi1Xcml0YWJsZSBQcm9wZXJ0aWVzIFRvIEVudGl0eXwgIHwgfCA8YSBuYW1lPVxcXCIxNzFcXFwiPjE3MTwvYT58RW50aXR5IEFscmVhZHkgRXhpc3RzIEluIEdyb3VwfCAgfCB8IDxhIG5hbWU9XFxcIjE3MlxcXCI+MTcyPC9hPnxFbnRpdHkgV2l0aCBJZCBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNzNcXFwiPjE3MzwvYT58RW50aXR5IFdpdGggSWQgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTc0XFxcIj4xNzQ8L2E+fERlcml2ZWQgUG9ydGZvbGlvIERldGFpbHMgRG8gTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE3NVxcXCI+MTc1PC9hPnxFbnRpdHkgTm90IEluIEdyb3VwfCAgfCB8IDxhIG5hbWU9XFxcIjE3NlxcXCI+MTc2PC9hPnxQb3J0Zm9saW8gV2l0aCBOYW1lIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE3N1xcXCI+MTc3PC9hPnxJbnZhbGlkIFRyYW5zYWN0aW9uc3wgIHwgfCA8YSBuYW1lPVxcXCIxNzhcXFwiPjE3ODwvYT58UmVmZXJlbmNlIFBvcnRmb2xpbyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTc5XFxcIj4xNzk8L2E+fER1cGxpY2F0ZSBJZHwgIHwgfCA8YSBuYW1lPVxcXCIxODBcXFwiPjE4MDwvYT58Q29tbWFuZCBSZXRyaWV2YWwgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxODFcXFwiPjE4MTwvYT58RGF0YSBGaWx0ZXIgQXBwbGljYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxODJcXFwiPjE4MjwvYT58U2VhcmNoIEZhaWxlZHwgIHwgfCA8YSBuYW1lPVxcXCIxODNcXFwiPjE4MzwvYT58TW92ZW1lbnRzIEVuZ2luZSBDb25maWd1cmF0aW9uIEtleSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE4NFxcXCI+MTg0PC9hPnxGeCBSYXRlIFNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTg1XFxcIj4xODU8L2E+fEFjY3J1YWwgU291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxODZcXFwiPjE4NjwvYT58QWNjZXNzIERlbmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxODdcXFwiPjE4NzwvYT58SW52YWxpZCBJZGVudGl0eSBUb2tlbnwgIHwgfCA8YSBuYW1lPVxcXCIxODhcXFwiPjE4ODwvYT58SW52YWxpZCBSZXF1ZXN0IEhlYWRlcnN8ICB8IHwgPGEgbmFtZT1cXFwiMTg5XFxcIj4xODk8L2E+fFByaWNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTBcXFwiPjE5MDwvYT58SW52YWxpZCBTdWIgSG9sZGluZyBLZXlzIFByb3ZpZGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5MVxcXCI+MTkxPC9hPnxEdXBsaWNhdGUgU3ViIEhvbGRpbmcgS2V5cyBQcm92aWRlZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTJcXFwiPjE5MjwvYT58Q3V0IERlZmluaXRpb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE5M1xcXCI+MTkzPC9hPnxDdXQgRGVmaW5pdGlvbiBJbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjE5NFxcXCI+MTk0PC9hPnxUaW1lIFZhcmlhbnQgUHJvcGVydHkgRGVsZXRpb24gRGF0ZSBVbnNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTVcXFwiPjE5NTwvYT58UGVycGV0dWFsIFByb3BlcnR5IERlbGV0aW9uIERhdGUgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5NlxcXCI+MTk2PC9hPnxUaW1lIFZhcmlhbnQgUHJvcGVydHkgVXBzZXJ0IERhdGUgVW5zcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTk3XFxcIj4xOTc8L2E+fFBlcnBldHVhbCBQcm9wZXJ0eSBVcHNlcnQgRGF0ZSBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjAwXFxcIj4yMDA8L2E+fEludmFsaWQgVW5pdCBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwMVxcXCI+MjAxPC9hPnxJbnZhbGlkIFR5cGUgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDJcXFwiPjIwMjwvYT58SW52YWxpZCBWYWx1ZSBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwM1xcXCI+MjAzPC9hPnxVbml0IE5vdCBEZWZpbmVkIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA0XFxcIj4yMDQ8L2E+fFVuaXRzIE5vdCBTdXBwb3J0ZWQgT24gRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNVxcXCI+MjA1PC9hPnxDYW5ub3QgU3BlY2lmeSBVbml0cyBPbiBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA2XFxcIj4yMDY8L2E+fFVuaXQgU2NoZW1hIEluY29uc2lzdGVudCBXaXRoIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDdcXFwiPjIwNzwvYT58VW5pdCBEZWZpbml0aW9uIE5vdCBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjA4XFxcIj4yMDg8L2E+fER1cGxpY2F0ZSBVbml0IERlZmluaXRpb25zIFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIyMDlcXFwiPjIwOTwvYT58SW52YWxpZCBVbml0cyBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIxMFxcXCI+MjEwPC9hPnxJbnZhbGlkIEluc3RydW1lbnQgSWRlbnRpZmllciBVbml0fCAgfCB8IDxhIG5hbWU9XFxcIjIxMVxcXCI+MjExPC9hPnxIb2xkaW5ncyBBZGp1c3RtZW50IERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjIxMlxcXCI+MjEyPC9hPnxDb3VsZCBOb3QgQnVpbGQgRXhjZWwgVXJsfCAgfCB8IDxhIG5hbWU9XFxcIjIxM1xcXCI+MjEzPC9hPnxDb3VsZCBOb3QgR2V0IEV4Y2VsIFZlcnNpb258ICB8IHwgPGEgbmFtZT1cXFwiMjE0XFxcIj4yMTQ8L2E+fEluc3RydW1lbnQgQnkgQ29kZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMjE1XFxcIj4yMTU8L2E+fEVudGl0eSBTY2hlbWEgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMjE2XFxcIj4yMTY8L2E+fEZlYXR1cmUgTm90IFN1cHBvcnRlZCBPbiBQb3J0Zm9saW8gVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMTdcXFwiPjIxNzwvYT58UXVvdGUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjIxOFxcXCI+MjE4PC9hPnxJbnZhbGlkIFF1b3RlIElkZW50aWZpZXJ8ICB8IHwgPGEgbmFtZT1cXFwiMjE5XFxcIj4yMTk8L2E+fEludmFsaWQgTWV0cmljIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjIwXFxcIj4yMjA8L2E+fEludmFsaWQgSW5zdHJ1bWVudCBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIyMVxcXCI+MjIxPC9hPnxJbnN0cnVtZW50IFVwc2VydCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjIyMlxcXCI+MjIyPC9hPnxSZWZlcmVuY2UgUG9ydGZvbGlvIFJlcXVlc3QgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCIyMjNcXFwiPjIyMzwvYT58VHJhbnNhY3Rpb24gUG9ydGZvbGlvIFJlcXVlc3QgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCIyMjRcXFwiPjIyNDwvYT58SW52YWxpZCBQcm9wZXJ0eSBWYWx1ZSBBc3NpZ25tZW50fCAgfCB8IDxhIG5hbWU9XFxcIjIzMFxcXCI+MjMwPC9hPnxUcmFuc2FjdGlvbiBUeXBlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIyMzFcXFwiPjIzMTwvYT58VHJhbnNhY3Rpb24gVHlwZSBEdXBsaWNhdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMzJcXFwiPjIzMjwvYT58UG9ydGZvbGlvIERvZXMgTm90IEV4aXN0IEF0IEdpdmVuIERhdGV8ICB8IHwgPGEgbmFtZT1cXFwiMjMzXFxcIj4yMzM8L2E+fFF1ZXJ5IFBhcnNlciBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjIzNFxcXCI+MjM0PC9hPnxEdXBsaWNhdGUgQ29uc3RpdHVlbnR8ICB8IHwgPGEgbmFtZT1cXFwiMjM1XFxcIj4yMzU8L2E+fFVucmVzb2x2ZWQgSW5zdHJ1bWVudCBDb25zdGl0dWVudHwgIHwgfCA8YSBuYW1lPVxcXCIyMzZcXFwiPjIzNjwvYT58VW5yZXNvbHZlZCBJbnN0cnVtZW50IEluIFRyYW5zaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjM3XFxcIj4yMzc8L2E+fE1pc3NpbmcgU2lkZSBEZWZpbml0aW9uc3wgIHwgfCA8YSBuYW1lPVxcXCIyNDBcXFwiPjI0MDwvYT58RHVwbGljYXRlIENhbGN1bGF0aW9ucyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjI5OVxcXCI+Mjk5PC9hPnxJbnZhbGlkIFJlY2lwZXwgIHwgfCA8YSBuYW1lPVxcXCIzMDBcXFwiPjMwMDwvYT58TWlzc2luZyBSZWNpcGV8ICB8IHwgPGEgbmFtZT1cXFwiMzAxXFxcIj4zMDE8L2E+fERlcGVuZGVuY2llc3wgIHwgfCA8YSBuYW1lPVxcXCIzMDRcXFwiPjMwNDwvYT58UG9ydGZvbGlvIFByZXByb2Nlc3MgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTBcXFwiPjMxMDwvYT58VmFsdWF0aW9uIEVuZ2luZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxMVxcXCI+MzExPC9hPnxUYXNrIEZhY3RvcnkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTJcXFwiPjMxMjwvYT58VGFzayBFdmFsdWF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEzXFxcIj4zMTM8L2E+fFRhc2sgR2VuZXJhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxNFxcXCI+MzE0PC9hPnxFbmdpbmUgQ29uZmlndXJhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxNVxcXCI+MzE1PC9hPnxNb2RlbCBTcGVjaWZpY2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzIwXFxcIj4zMjA8L2E+fE1hcmtldCBEYXRhIEtleSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMyMVxcXCI+MzIxPC9hPnxNYXJrZXQgUmVzb2x2ZXIgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMjJcXFwiPjMyMjwvYT58TWFya2V0IERhdGEgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMzBcXFwiPjMzMDwvYT58Q3VydmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMzFcXFwiPjMzMTwvYT58Vm9sYXRpbGl0eSBTdXJmYWNlIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzMyXFxcIj4zMzI8L2E+fFZvbGF0aWxpdHkgQ3ViZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM1MFxcXCI+MzUwPC9hPnxJbnN0cnVtZW50IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzUxXFxcIj4zNTE8L2E+fENhc2ggRmxvd3MgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNTJcXFwiPjM1MjwvYT58UmVmZXJlbmNlIERhdGEgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNjBcXFwiPjM2MDwvYT58QWdncmVnYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNjFcXFwiPjM2MTwvYT58QWdncmVnYXRpb24gTWVhc3VyZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MFxcXCI+MzcwPC9hPnxSZXN1bHQgUmV0cmlldmFsIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzcxXFxcIj4zNzE8L2E+fFJlc3VsdCBQcm9jZXNzaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzcyXFxcIj4zNzI8L2E+fFZlbmRvciBSZXN1bHQgUHJvY2Vzc2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3M1xcXCI+MzczPC9hPnxWZW5kb3IgUmVzdWx0IE1hcHBpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzRcXFwiPjM3NDwvYT58VmVuZG9yIExpYnJhcnkgVW5hdXRob3Jpc2VkfCAgfCB8IDxhIG5hbWU9XFxcIjM3NVxcXCI+Mzc1PC9hPnxWZW5kb3IgQ29ubmVjdGl2aXR5IEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjM3NlxcXCI+Mzc2PC9hPnxWZW5kb3IgSW50ZXJmYWNlIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjM3N1xcXCI+Mzc3PC9hPnxWZW5kb3IgUHJpY2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3OFxcXCI+Mzc4PC9hPnxWZW5kb3IgVHJhbnNsYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzlcXFwiPjM3OTwvYT58VmVuZG9yIEtleSBNYXBwaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzgwXFxcIj4zODA8L2E+fFZlbmRvciBSZWZsZWN0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzgxXFxcIj4zODE8L2E+fFZlbmRvciBQcm9jZXNzIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzgyXFxcIj4zODI8L2E+fFZlbmRvciBTeXN0ZW0gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzOTBcXFwiPjM5MDwvYT58QXR0ZW1wdCBUbyBVcHNlcnQgRHVwbGljYXRlIFF1b3Rlc3wgIHwgfCA8YSBuYW1lPVxcXCIzOTFcXFwiPjM5MTwvYT58Q29ycG9yYXRlIEFjdGlvbiBTb3VyY2UgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMzkyXFxcIj4zOTI8L2E+fENvcnBvcmF0ZSBBY3Rpb24gU291cmNlIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjM5M1xcXCI+MzkzPC9hPnxJbnN0cnVtZW50IElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiMzk0XFxcIj4zOTQ8L2E+fFByb3BlcnRpZXMgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjM5NVxcXCI+Mzk1PC9hPnxCYXRjaCBPcGVyYXRpb24gQWJvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI0MDBcXFwiPjQwMDwvYT58SW52YWxpZCBJc280MjE3IEN1cnJlbmN5IENvZGV8ICB8IHwgPGEgbmFtZT1cXFwiNDAxXFxcIj40MDE8L2E+fENhbm5vdCBBc3NpZ24gSW5zdHJ1bWVudCBJZGVudGlmaWVyIFRvIEN1cnJlbmN5fCAgfCB8IDxhIG5hbWU9XFxcIjQwMlxcXCI+NDAyPC9hPnxDYW5ub3QgQXNzaWduIEN1cnJlbmN5IElkZW50aWZpZXIgVG8gTm9uIEN1cnJlbmN5fCAgfCB8IDxhIG5hbWU9XFxcIjQwM1xcXCI+NDAzPC9hPnxDdXJyZW5jeSBJbnN0cnVtZW50IENhbm5vdCBCZSBEZWxldGVkfCAgfCB8IDxhIG5hbWU9XFxcIjQwNFxcXCI+NDA0PC9hPnxDdXJyZW5jeSBJbnN0cnVtZW50IENhbm5vdCBIYXZlIEVjb25vbWljIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNDA1XFxcIj40MDU8L2E+fEN1cnJlbmN5IEluc3RydW1lbnQgQ2Fubm90IEhhdmUgTG9va3Rocm91Z2ggUG9ydGZvbGlvfCAgfCB8IDxhIG5hbWU9XFxcIjQwNlxcXCI+NDA2PC9hPnxDYW5ub3QgQ3JlYXRlIEN1cnJlbmN5IEluc3RydW1lbnQgV2l0aCBNdWx0aXBsZSBJZGVudGlmaWVyc3wgIHwgfCA8YSBuYW1lPVxcXCI0MDdcXFwiPjQwNzwvYT58U3BlY2lmaWVkIEN1cnJlbmN5IElzIFVuZGVmaW5lZHwgIHwgfCA8YSBuYW1lPVxcXCI0MTBcXFwiPjQxMDwvYT58SW5kZXggRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNDExXFxcIj40MTE8L2E+fFNvcnQgRmllbGQgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNDEzXFxcIj40MTM8L2E+fE5lZ2F0aXZlIFBhZ2luYXRpb24gUGFyYW1ldGVyc3wgIHwgfCA8YSBuYW1lPVxcXCI0MTRcXFwiPjQxNDwvYT58SW52YWxpZCBTZWFyY2ggU3ludGF4fCAgfCB8IDxhIG5hbWU9XFxcIjQxNVxcXCI+NDE1PC9hPnxGaWx0ZXIgRXhlY3V0aW9uIFRpbWVvdXR8ICB8IHwgPGEgbmFtZT1cXFwiNDIwXFxcIj40MjA8L2E+fFNpZGUgRGVmaW5pdGlvbiBJbmNvbnNpc3RlbnR8ICB8IHwgPGEgbmFtZT1cXFwiNDUwXFxcIj40NTA8L2E+fEludmFsaWQgUXVvdGUgQWNjZXNzIE1ldGFkYXRhIFJ1bGV8ICB8IHwgPGEgbmFtZT1cXFwiNDUxXFxcIj40NTE8L2E+fEFjY2VzcyBNZXRhZGF0YSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDUyXFxcIj40NTI8L2E+fEludmFsaWQgQWNjZXNzIE1ldGFkYXRhIElkZW50aWZpZXJ8ICB8IHwgPGEgbmFtZT1cXFwiNDYwXFxcIj40NjA8L2E+fFN0YW5kYXJkIFJlc291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NjFcXFwiPjQ2MTwvYT58U3RhbmRhcmQgUmVzb3VyY2UgQ29uZmxpY3R8ICB8IHwgPGEgbmFtZT1cXFwiNDYyXFxcIj40NjI8L2E+fENhbGVuZGFyIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NjNcXFwiPjQ2MzwvYT58RGF0ZSBJbiBBIENhbGVuZGFyIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NjRcXFwiPjQ2NDwvYT58SW52YWxpZCBEYXRlIFNvdXJjZSBEYXRhfCAgfCB8IDxhIG5hbWU9XFxcIjQ2NVxcXCI+NDY1PC9hPnxJbnZhbGlkIFRpbWV6b25lfCAgfCB8IDxhIG5hbWU9XFxcIjYwMVxcXCI+NjAxPC9hPnxQZXJzb24gSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI2MDJcXFwiPjYwMjwvYT58UGVyc29uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2MDNcXFwiPjYwMzwvYT58Q2Fubm90IFNldCBJZGVudGlmaWVyfCAgfCB8IDxhIG5hbWU9XFxcIjYxN1xcXCI+NjE3PC9hPnxJbnZhbGlkIFJlY2lwZSBTcGVjaWZpY2F0aW9uIEluIFJlcXVlc3R8ICB8IHwgPGEgbmFtZT1cXFwiNjE4XFxcIj42MTg8L2E+fElubGluZSBSZWNpcGUgRGVzZXJpYWxpc2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNjE5XFxcIj42MTk8L2E+fElkZW50aWZpZXIgVHlwZXMgTm90IFNldCBGb3IgRW50aXR5fCAgfCB8IDxhIG5hbWU9XFxcIjYyMFxcXCI+NjIwPC9hPnxDYW5ub3QgRGVsZXRlIEFsbCBDbGllbnQgRGVmaW5lZCBJZGVudGlmaWVyc3wgIHwgfCA8YSBuYW1lPVxcXCI2NTBcXFwiPjY1MDwvYT58VGhlIE9yZGVyIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI2NTRcXFwiPjY1NDwvYT58VGhlIEFsbG9jYXRpb24gcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjY1NVxcXCI+NjU1PC9hPnxDYW5ub3QgYnVpbGQgdGhlIGZ4IGZvcndhcmQgdGFyZ2V0IHdpdGggdGhlIGdpdmVuIGhvbGRpbmdzLnwgIHwgfCA8YSBuYW1lPVxcXCI2NTZcXFwiPjY1NjwvYT58R3JvdXAgZG9lcyBub3QgY29udGFpbiBleHBlY3RlZCBlbnRpdGllcy58ICB8IHwgPGEgbmFtZT1cXFwiNjY1XFxcIj42NjU8L2E+fERlc3RpbmF0aW9uIGRpcmVjdG9yeSBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjY3XFxcIj42Njc8L2E+fFJlbGF0aW9uIGRlZmluaXRpb24gYWxyZWFkeSBleGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiNjcyXFxcIj42NzI8L2E+fENvdWxkIG5vdCByZXRyaWV2ZSBmaWxlIGNvbnRlbnRzfCAgfCB8IDxhIG5hbWU9XFxcIjY3M1xcXCI+NjczPC9hPnxNaXNzaW5nIGVudGl0bGVtZW50cyBmb3IgZW50aXRpZXMgaW4gR3JvdXB8ICB8IHwgPGEgbmFtZT1cXFwiNjc0XFxcIj42NzQ8L2E+fE5leHQgQmVzdCBBY3Rpb24gbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY3NlxcXCI+Njc2PC9hPnxSZWxhdGlvbiBkZWZpbml0aW9uIG5vdCBkZWZpbmVkfCAgfCB8IDxhIG5hbWU9XFxcIjY3N1xcXCI+Njc3PC9hPnxJbnZhbGlkIGVudGl0eSBpZGVudGlmaWVyIGZvciByZWxhdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI2ODFcXFwiPjY4MTwvYT58U29ydGluZyBieSBzcGVjaWZpZWQgZmllbGQgbm90IHN1cHBvcnRlZHxPbmUgb3IgbW9yZSBvZiB0aGUgcHJvdmlkZWQgZmllbGRzIHRvIG9yZGVyIGJ5IHdlcmUgZWl0aGVyIGludmFsaWQgb3Igbm90IHN1cHBvcnRlZC4gfCB8IDxhIG5hbWU9XFxcIjY4MlxcXCI+NjgyPC9hPnxUb28gbWFueSBmaWVsZHMgdG8gc29ydCBieXxUaGUgbnVtYmVyIG9mIGZpZWxkcyB0byBzb3J0IHRoZSBkYXRhIGJ5IGV4Y2VlZHMgdGhlIG51bWJlciBhbGxvd2VkIGJ5IHRoZSBlbmRwb2ludCB8IHwgPGEgbmFtZT1cXFwiNjg0XFxcIj42ODQ8L2E+fFNlcXVlbmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2ODVcXFwiPjY4NTwvYT58U2VxdWVuY2UgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiNjg2XFxcIj42ODY8L2E+fE5vbi1jeWNsaW5nIHNlcXVlbmNlIGhhcyBiZWVuIGV4aGF1c3RlZHwgIHwgfCA8YSBuYW1lPVxcXCI2ODdcXFwiPjY4NzwvYT58TGVnYWwgRW50aXR5IElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiNjg4XFxcIj42ODg8L2E+fExlZ2FsIEVudGl0eSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjg5XFxcIj42ODk8L2E+fFRoZSBzdXBwbGllZCBwYWdpbmF0aW9uIHRva2VuIGlzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNjkwXFxcIj42OTA8L2E+fFByb3BlcnR5IFR5cGUgSXMgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTFcXFwiPjY5MTwvYT58TXVsdGlwbGUgVGF4LWxvdHMgRm9yIEN1cnJlbmN5IFR5cGUgSXMgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTJcXFwiPjY5MjwvYT58VGhpcyBlbmRwb2ludCBkb2VzIG5vdCBzdXBwb3J0IGltcGVyc29uYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNjkzXFxcIj42OTM8L2E+fEVudGl0eSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJlbGF0aW9uc2hpcHwgIHwgfCA8YSBuYW1lPVxcXCI2OTRcXFwiPjY5NDwvYT58UmVsYXRpb25zaGlwIFZhbGlkYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCI2OTVcXFwiPjY5NTwvYT58UmVsYXRpb25zaGlwIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTdcXFwiPjY5NzwvYT58RGVyaXZlZCBQcm9wZXJ0eSBGb3JtdWxhIE5vIExvbmdlciBWYWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI2OThcXFwiPjY5ODwvYT58U3RvcnkgaXMgbm90IGF2YWlsYWJsZXwgIHwgfCA8YSBuYW1lPVxcXCI3MDNcXFwiPjcwMzwvYT58Q29ycG9yYXRlIEFjdGlvbiBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI3MjBcXFwiPjcyMDwvYT58VGhlIHByb3ZpZGVkIHNvcnQgYW5kIGZpbHRlciBjb21iaW5hdGlvbiBpcyBub3QgdmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNzIxXFxcIj43MjE8L2E+fEEyQiBnZW5lcmF0aW9uIGZhaWxlZHwgIHwgfCA8YSBuYW1lPVxcXCI3MjJcXFwiPjcyMjwvYT58QWdncmVnYXRlZCBSZXR1cm4gQ2FsY3VsYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCI3MjNcXFwiPjcyMzwvYT58Q3VzdG9tIEVudGl0eSBEZWZpbml0aW9uIElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiNzI0XFxcIj43MjQ8L2E+fEN1c3RvbSBFbnRpdHkgRGVmaW5pdGlvbiBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNzI1XFxcIj43MjU8L2E+fFRoZSBQbGFjZW1lbnQgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjcyNlxcXCI+NzI2PC9hPnxUaGUgRXhlY3V0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjdcXFwiPjcyNzwvYT58VGhlIEJsb2NrIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjhcXFwiPjcyODwvYT58VGhlIFBhcnRpY2lwYXRpb24gcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjcyOVxcXCI+NzI5PC9hPnxUaGUgUGFja2FnZSByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzMwXFxcIj43MzA8L2E+fFRoZSBPcmRlckluc3RydWN0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzJcXFwiPjczMjwvYT58Q3VzdG9tIEVudGl0eSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjczM1xcXCI+NzMzPC9hPnxDdXN0b20gRW50aXR5IElkZW50aWZpZXIgYWxyZWFkeSBpbiB1c2UufCAgfCB8IDxhIG5hbWU9XFxcIjczNVxcXCI+NzM1PC9hPnxDYWxjdWxhdGlvbiBGYWlsZWQufCAgfCB8IDxhIG5hbWU9XFxcIjczNlxcXCI+NzM2PC9hPnxBbiBleHBlY3RlZCBrZXkgb24gSHR0cFJlc3BvbnNlIGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjczN1xcXCI+NzM3PC9hPnxBIHJlcXVpcmVkIGZlZSBkZXRhaWwgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzM4XFxcIj43Mzg8L2E+fFplcm8gcm93cyB3ZXJlIHJldHVybmVkIGZyb20gTHVtaW5lc2NlfCAgfCB8IDxhIG5hbWU9XFxcIjczOVxcXCI+NzM5PC9hPnxQcm92aWRlZCBXZWVrZW5kIE1hc2sgd2FzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNzQyXFxcIj43NDI8L2E+fEN1c3RvbSBFbnRpdHkgZmllbGRzIGRvIG5vdCBtYXRjaCB0aGUgZGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI3NDZcXFwiPjc0NjwvYT58VGhlIHByb3ZpZGVkIHNlcXVlbmNlIGlzIG5vdCB2YWxpZC58ICB8IHwgPGEgbmFtZT1cXFwiNzUxXFxcIj43NTE8L2E+fFRoZSB0eXBlIG9mIHRoZSBDdXN0b20gRW50aXR5IGlzIGRpZmZlcmVudCB0aGFuIHRoZSB0eXBlIHByb3ZpZGVkIGluIHRoZSBkZWZpbml0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTJcXFwiPjc1MjwvYT58THVtaW5lc2NlIHByb2Nlc3MgcmV0dXJuZWQgYW4gZXJyb3IufCAgfCB8IDxhIG5hbWU9XFxcIjc1M1xcXCI+NzUzPC9hPnxGaWxlIG5hbWUgb3IgY29udGVudCBpbmNvbXBhdGlibGUgd2l0aCBvcGVyYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjc1NVxcXCI+NzU1PC9hPnxTY2hlbWEgb2YgcmVzcG9uc2UgZnJvbSBEcml2ZSBpcyBub3QgYXMgZXhwZWN0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjc1N1xcXCI+NzU3PC9hPnxTY2hlbWEgb2YgcmVzcG9uc2UgZnJvbSBMdW1pbmVzY2UgaXMgbm90IGFzIGV4cGVjdGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NThcXFwiPjc1ODwvYT58THVtaW5lc2NlIHRpbWVkIG91dC58ICB8IHwgPGEgbmFtZT1cXFwiNzYzXFxcIj43NjM8L2E+fEludmFsaWQgTHVzaWQgRW50aXR5IElkZW50aWZpZXIgVW5pdHwgIHwgfCA8YSBuYW1lPVxcXCI3NjhcXFwiPjc2ODwvYT58RmVlIHJ1bGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3NjlcXFwiPjc2OTwvYT58Q2Fubm90IHVwZGF0ZSB0aGUgYmFzZSBjdXJyZW5jeSBvZiBhIHBvcnRmb2xpbyB3aXRoIHRyYW5zYWN0aW9ucyBsb2FkZWR8ICB8IHwgPGEgbmFtZT1cXFwiNzcxXFxcIj43NzE8L2E+fFRyYW5zYWN0aW9uIGNvbmZpZ3VyYXRpb24gc291cmNlIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI3NzRcXFwiPjc3NDwvYT58Q29tcGxpYW5jZSBydWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzc1XFxcIj43NzU8L2E+fEZ1bmQgYWNjb3VudGluZyBkb2N1bWVudCBjYW5ub3QgYmUgcHJvY2Vzc2VkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NzhcXFwiPjc3ODwvYT58VW5hYmxlIHRvIGxvb2sgdXAgRlggcmF0ZSBmcm9tIHRyYWRlIGNjeSB0byBwb3J0Zm9saW8gY2N5IGZvciBzb21lIG9mIHRoZSB0cmFkZXMufCAgfCB8IDxhIG5hbWU9XFxcIjc4MlxcXCI+NzgyPC9hPnxUaGUgUHJvcGVydHkgZGVmaW5pdGlvbiBkYXRhVHlwZSBpcyBub3QgbWF0Y2hpbmcgdGhlIGRlcml2YXRpb24gZm9ybXVsYSBkYXRhVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCI3ODNcXFwiPjc4MzwvYT58VGhlIFByb3BlcnR5IGRlZmluaXRpb24gZG9tYWluIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRlcml2ZWQgcHJvcGVydGllc3wgIHwgfCA8YSBuYW1lPVxcXCI3ODhcXFwiPjc4ODwvYT58Q29tcGxpYW5jZSBydW4gbm90IGZvdW5kIGZhaWx1cmUufCAgfCB8IDxhIG5hbWU9XFxcIjc5MFxcXCI+NzkwPC9hPnxDdXN0b20gRW50aXR5IGhhcyBtaXNzaW5nIG9yIGludmFsaWQgaWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiNzkxXFxcIj43OTE8L2E+fEN1c3RvbSBFbnRpdHkgZGVmaW5pdGlvbiBhbHJlYWR5IGV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCI3OTJcXFwiPjc5MjwvYT58Q29tcGxpYW5jZSBQcm9wZXJ0eUtleSBpcyBtaXNzaW5nLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTNcXFwiPjc5MzwvYT58Q29tcGxpYW5jZSBDcml0ZXJpYSBWYWx1ZSBmb3IgbWF0Y2hpbmcgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzk1XFxcIj43OTU8L2E+fENhbm5vdCBkZWxldGUgaWRlbnRpZmllciBkZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjc5NlxcXCI+Nzk2PC9hPnxUYXggcnVsZSBzZXQgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTdcXFwiPjc5NzwvYT58QSB0YXggcnVsZSBzZXQgd2l0aCB0aGlzIGlkIGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI3OThcXFwiPjc5ODwvYT58TXVsdGlwbGUgcnVsZSBzZXRzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eSBrZXkgYXJlIGFwcGxpY2FibGUufCAgfCB8IDxhIG5hbWU9XFxcIjc5OVxcXCI+Nzk5PC9hPnxUaGUgcmVxdWVzdCBtdXN0IGNvbnRhaW4gYSBkYXRlIG9yIGRpYXJ5IGVudHJ5LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDBcXFwiPjgwMDwvYT58Q2FuIG5vdCB1cHNlcnQgYW4gaW5zdHJ1bWVudCBldmVudCBvZiB0aGlzIHR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjgwMVxcXCI+ODAxPC9hPnxUaGUgaW5zdHJ1bWVudCBldmVudCBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODAyXFxcIj44MDI8L2E+fFRoZSBJbnN0cnVtZW50IGV2ZW50IGlzIG1pc3Npbmcgc2FsaWVudCBpbmZvcm1hdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODAzXFxcIj44MDM8L2E+fFRoZSBJbnN0cnVtZW50IGV2ZW50IGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQufCAgfCB8IDxhIG5hbWU9XFxcIjgwNFxcXCI+ODA0PC9hPnxTb21lIGRhdGEgcmVxdWVzdGVkIGRvZXMgbm90IGZvbGxvdyB0aGUgb3JkZXIgZ3JhcGggYXNzdW1wdGlvbnMufCAgfCB8IDxhIG5hbWU9XFxcIjgwNVxcXCI+ODA1PC9hPnxUaGUgaW5zdHJ1bWVudCBldmVudCB0eXBlIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDZcXFwiPjgwNjwvYT58VGhlIHRyYW5zYWN0aW9uIHRlbXBsYXRlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwN1xcXCI+ODA3PC9hPnxUaGUgZGVmYXVsdCB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODA4XFxcIj44MDg8L2E+fFRoZSB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODExXFxcIj44MTE8L2E+fEEgcHJpY2UgY291bGQgbm90IGJlIGZvdW5kIGZvciBhbiBvcmRlci58ICB8IHwgPGEgbmFtZT1cXFwiODEyXFxcIj44MTI8L2E+fEEgcHJpY2UgY291bGQgbm90IGJlIGZvdW5kIGZvciBhbiBhbGxvY2F0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTNcXFwiPjgxMzwvYT58Q2hhcnQgb2YgQWNjb3VudHMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTRcXFwiPjgxNDwvYT58QWNjb3VudCBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxNVxcXCI+ODE1PC9hPnxBYm9yIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODE2XFxcIj44MTY8L2E+fEFib3IgQ29uZmlndXJhdGlvbiBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxN1xcXCI+ODE3PC9hPnxSZWNvbmNpbGlhdGlvbiBtYXBwaW5nIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI4MThcXFwiPjgxODwvYT58QXR0cmlidXRlIHR5cGUgY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBkb2VzblxcJ3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgxOVxcXCI+ODE5PC9hPnxSZWNvbmNpbGlhdGlvbiBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgyMFxcXCI+ODIwPC9hPnxDdXN0b2RpYW4gQWNjb3VudCBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgyMVxcXCI+ODIxPC9hPnxBbGxvY2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiODIyXFxcIj44MjI8L2E+fFJlY29uY2lsaWF0aW9uIHJ1biBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiODIzXFxcIj44MjM8L2E+fFJlY29uY2lsaWF0aW9uIGJyZWFrIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI4MjRcXFwiPjgyNDwvYT58RW50aXR5IGxpbmsgdHlwZSBjb3VsZCBub3QgYmUgZGVsZXRlZCBiZWNhdXNlIGl0IGRvZXNuXFwndCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODI4XFxcIj44Mjg8L2E+fEFkZHJlc3Mga2V5IGRlZmluaXRpb24gbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MjlcXFwiPjgyOTwvYT58Q29tcGxpYW5jZSB0ZW1wbGF0ZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgzMFxcXCI+ODMwPC9hPnxBY3Rpb24gbm90IHN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI4MzFcXFwiPjgzMTwvYT58UmVmZXJlbmNlIGxpc3Qgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzJcXFwiPjgzMjwvYT58UG9zdGluZyBNb2R1bGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzNcXFwiPjgzMzwvYT58VGhlIHR5cGUgb2YgcGFyYW1ldGVyIHByb3ZpZGVkIGRpZCBub3QgbWF0Y2ggdGhhdCByZXF1aXJlZCBieSB0aGUgY29tcGxpYW5jZSBydWxlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzRcXFwiPjgzNDwvYT58VGhlIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgYSBydWxlIGRpZCBub3QgbWF0Y2ggdGhvc2UgcmVxdWlyZWQgYnkgaXRzIHRlbXBsYXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzVcXFwiPjgzNTwvYT58VGhlIGVudGl0eSBoYXMgYSBwcm9wZXJ0eSBpbiBhIGRvbWFpbiB0aGF0IGlzIG5vdCBzdXBwcnRlZCBmb3IgdGhhdCBlbnRpdHkgdHlwZS58ICB8IHwgPGEgbmFtZT1cXFwiODM2XFxcIj44MzY8L2E+fFN0cnVjdHVyZWQgcmVzdWx0IGRhdGEgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzdcXFwiPjgzNzwvYT58RGlhcnkgZW50cnkgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzhcXFwiPjgzODwvYT58RGlhcnkgZW50cnkgY291bGQgbm90IGJlIGNyZWF0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjgzOVxcXCI+ODM5PC9hPnxEaWFyeSBlbnRyeSBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiODYxXFxcIj44NjE8L2E+fENvbXBsaWFuY2UgcnVuIHN1bW1hcnkgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4NjlcXFwiPjg2OTwvYT58Q29uZmxpY3RpbmcgaW5zdHJ1bWVudCBwcm9wZXJ0aWVzIGluIGJhdGNoLnwgIHwgfCA8YSBuYW1lPVxcXCI4NzBcXFwiPjg3MDwvYT58Q29tcGxpYW5jZSBydW4gc3VtbWFyeSBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiODcxXFxcIj44NzE8L2E+fFRoZSBzcGVjaWZpZWQgaW1wZXJzb25hdGVkIHVzZXIgZG9lcyBub3QgZXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiODc0XFxcIj44NzQ8L2E+fFByb3ZpZGVkIFByb3BlcnR5IERvbWFpbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBlbnRpdHkgZmlsdGVyLnwgIHwgfCA8YSBuYW1lPVxcXCI4NzVcXFwiPjg3NTwvYT58Q2Fubm90IERlbGV0ZSBTeXN0ZW0gUmVmZXJlbmNlIExpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjg3NlxcXCI+ODc2PC9hPnxDbGVhcmRvd24gTW9kdWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODc5XFxcIj44Nzk8L2E+fFBvcnRmb2xpb3MgZG8gbm90IGhhdmUgdGhlIHNhbWUgYmFzZSBjdXJyZW5jeXwgIHwgfCA8YSBuYW1lPVxcXCI4ODBcXFwiPjg4MDwvYT58VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjb21wbGlhbmNlIGV4cHJlc3Npb24ufCAgfCB8IDxhIG5hbWU9XFxcIjg4MVxcXCI+ODgxPC9hPnxCbG9jayBvdmVycGxhY2VkLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODJcXFwiPjg4MjwvYT58T3JkZXIgbm90IGFwcHJvdmVkLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODNcXFwiPjg4MzwvYT58Q2Fubm90IHVwZGF0ZSB0aGUgc2hhcmVkIGZpZWxkcyBvZiBhIGJsb2NrIHdpdGggYXNzb2NpYXRlZCBvcmRlcnMufCAgfCB8IDxhIG5hbWU9XFxcIjg4NlxcXCI+ODg2PC9hPnxDYW5ub3QgbG9jayB0aGUgcGVyaW9kLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODdcXFwiPjg4NzwvYT58Q2Fubm90IGFwcGx5IGNsZWFyIGRvd24gbW9kdWxlLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODhcXFwiPjg4ODwvYT58Q2Fubm90IHVwc2VydCBJbnN0cnVtZW50IEV2ZW50IEluc3RydWN0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODlcXFwiPjg4OTwvYT58Q2Fubm90IHJlYWQgSW5zdHJ1bWVudCBFdmVudCBJbnN0cnVjdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODk1XFxcIj44OTU8L2E+fFRoZSBDYXBpdGFsIFJhdGlvIENhbGN1bGF0aW9uIElzIFdyb25nLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTBcXFwiPjkxMDwvYT58Q2Fubm90IHVwZGF0ZSBhIGJsb2NrIHJlZmVyZW5jZWQgYnkgYSBwbGFjZW1lbnQufCAgfCB8IDxhIG5hbWU9XFxcIjkxMVxcXCI+OTExPC9hPnxBIEZ1bmQgdGhhdCByZWZlcmVuY2VzIHRoaXMgQWJvciBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiOTEyXFxcIj45MTI8L2E+fENhbm5vdCBhZGQgZGVjaXNpb24gdG8gU3RhZ2VkIE1vZGlmaWNhdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiOTEzXFxcIj45MTM8L2E+fFRoZSBTdGFnZWQgTW9kaWZpY2F0aW9uIGNvdWxkIG5vdCBiZSBhcHBsaWVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTRcXFwiPjkxNDwvYT58QWN0aW9uIGNhbm5vdCBiZSBleGVjdXRlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTE1XFxcIj45MTU8L2E+fENhbm5vdCB1cHNlcnQgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgcHJvcGVydHkgaW4gb25lIHJlcXVlc3QufCAgfCB8IDxhIG5hbWU9XFxcIjkxNlxcXCI+OTE2PC9hPnxQbGFjZW1lbnQgYW5kIGRpcmVjdCBkZXNjZW5kZW50cyBoYXZlIG1vcmUgZXhlY3V0ZWQgcXVhbnRpdHkgdGhhbiB0b3RhbCBwbGFjZW1lbnQgcXVhbnRpdHkufCAgfCB8IDxhIG5hbWU9XFxcIjkxN1xcXCI+OTE3PC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhpcyBFbnRyeVR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjkxOFxcXCI+OTE4PC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IGluIHRoaXMgU3RhdGUufCAgfCB8IDxhIG5hbWU9XFxcIjkxOVxcXCI+OTE5PC9hPnxQbGFjZW1lbnQgY291bGQgbm90IGJlIGNhbmNlbGxlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTIwXFxcIj45MjA8L2E+fFNoYXJlIENsYXNzIG5vdCBjb25maWd1cmVkIGluIEZ1bmR8ICB8IHwgPGEgbmFtZT1cXFwiOTIxXFxcIj45MjE8L2E+fFNoYXJlIENsYXNzIFN1YiBIb2xkaW5nIEtleSBub3QgY29uZmlndXJlZCBpbiBQb3J0Zm9saW98ICB8IHwgPGEgbmFtZT1cXFwiOTIyXFxcIj45MjI8L2E+fENvdWxkIG5vdCB1cGRhdGUgYW4gb3JkZXIufCAgfCB8IDxhIG5hbWU9XFxcIjkyM1xcXCI+OTIzPC9hPnxNdWx0aXBsZSBzZXRzIG9mIFNoYXJlIENsYXNzIFN1YiBIb2xkaW5nIEtleXMgY29uZmlndXJlZCBhY3Jvc3MgdGhlIFBvcnRmb2xpb3Mgb2YgYSBGdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjRcXFwiPjkyNDwvYT58T25lIG9yIG1vcmUgbWF0cml4IGNlbGxzIGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgbWF0cml4LnwgIHwgfCA8YSBuYW1lPVxcXCI5MjVcXFwiPjkyNTwvYT58VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBwcm92aWRlZCBtYXRyaXggZGVmaW5pdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiOTI2XFxcIj45MjY8L2E+fE1hdHJpeCBkZWZpbml0aW9uIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI5MjdcXFwiPjkyNzwvYT58TWF0cml4IGRlZmluaXRpb24gY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBkb2VzblxcJ3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjkyOFxcXCI+OTI4PC9hPnxEYXRhVHlwZSB3aXRoIElkIGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjlcXFwiPjkyOTwvYT58U3F1YXJlIG1hdHJpeCBpcyBpbmNvbXBsZXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzBcXFwiPjkzMDwvYT58QSBjb25kaXRpb25hbCBsaWNlbnNlIHRlcm0gaGFzIGJlZW4gZXhjZWVkZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkzMVxcXCI+OTMxPC9hPnxUaGUgQ3VzdG9tIERhdGEgTW9kZWwgcmVxdWVzdGVkIGlzIG5vdCBpbnRlbmRlZCBmb3IgdGhlIGVudGl0eSBwcm92aWRlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTMyXFxcIj45MzI8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgZG9lcyBub3QgaGF2ZSBhIG1hbmRhdG9yeSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkgdGhlIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzNcXFwiPjkzMzwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBoYXMgYSBwcm9wZXJ0eSBub3QgYWxsb3dlZCBieSB0aGUgc3BlY2lmaWVkIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzRcXFwiPjkzNDwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBkb2VzIG5vdCBoYXZlIGEgbWFuZGF0b3J5IGlkZW50aWZpZXIgc3BlY2lmaWVkIGJ5IHRoZSBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTM1XFxcIj45MzU8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgaGFzIGFuIGlkZW50aWZpZXIgbm90IGFsbG93ZWQgYnkgdGhlIHNwZWNpZmllZCBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTM2XFxcIj45MzY8L2E+fFRoZSBDdXN0b20gRGF0YSBNb2RlbCBpbmNsdWRlZCBhbiBhbGlhcyBvciBzb3J0LWJ5IGF0dHJpYnV0ZSB0aGF0IHdhcyBub3Qgb24gdGhlIGRlZmluaXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjkzN1xcXCI+OTM3PC9hPnxUaGUgQ2xvc2VkUGVyaW9kIHdpdGggdGhlIElkIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBUaW1lbGluZXwgIHwgfCA8YSBuYW1lPVxcXCI5MzhcXFwiPjkzODwvYT58VGhlIG5ldyBDbG9zZWQgUGVyaW9kIHdvdWxkIGNhdXNlIHRoZSBUaW1lbGluZSB0byBoYXZlIG5vbi1jb250aWd1b3VzIENsb3NlZCBQZXJpb2RzfCAgfCB8IDxhIG5hbWU9XFxcIjkzOVxcXCI+OTM5PC9hPnxCbG9ja2VkIGJ5IGEgTmV0d29yayBab25lfCAgfCB8IDxhIG5hbWU9XFxcIjk0MFxcXCI+OTQwPC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGRvZXMgbm90IG1lZXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDFcXFwiPjk0MTwvYT58T3JkZXIgbm90IGNvbXBsaWFudC58ICB8IHwgPGEgbmFtZT1cXFwiOTQyXFxcIj45NDI8L2E+fEFjdGlvbiB3b3VsZCBjcmVhdGUgYSBjaXJjdWxhciBkZXBlbmRlbmN5LnwgIHwgfCA8YSBuYW1lPVxcXCI5NDRcXFwiPjk0NDwvYT58RGVyaXZlZCBQcm9wZXJ0eSBjYWxjdWxhdGlvbiBub3QgY29tcGxldGUufCAgfCB8IDxhIG5hbWU9XFxcIjk0NVxcXCI+OTQ1PC9hPnxEZXJpdmVkIFByb3BlcnR5IGlzIG5vdCBmaWx0ZXJhYmxlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDZcXFwiPjk0NjwvYT58VGhlIGNvbmRpdGlvbnMgcHJvdmlkZWQgaGF2ZSBvbmUgb3IgbW9yZSBlcnJvcnMufCAgfCB8IDxhIG5hbWU9XFxcIjk0N1xcXCI+OTQ3PC9hPnxUaGUgcHJvcGVydHkvaWRlbnRpZmllciBkb21haW4gYW5kIGVudGl0eSBkb21haW4gZG8gbm90IG1hdGNoLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDhcXFwiPjk0ODwvYT58SW52YWxpZCBUaW1lbGluZXwgIHwgfCA8YSBuYW1lPVxcXCI5NDlcXFwiPjk0OTwvYT58RmlsdGVyYWJsZSBEZXJpdmVkIFByb3BlcnR5IGxpbWl0IHJlYWNoZWQufCAgfCB8IDxhIG5hbWU9XFxcIjk1MFxcXCI+OTUwPC9hPnxJbnZlc3RvciBSZWNvcmQgSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI5NTFcXFwiPjk1MTwvYT58SW52ZXN0b3IgUmVjb3JkIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI5NTJcXFwiPjk1MjwvYT58SW52ZXN0bWVudCBBY2NvdW50IElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiOTUzXFxcIj45NTM8L2E+fEludmVzdG1lbnQgQWNjb3VudCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiOTU0XFxcIj45NTQ8L2E+fENvdWxkIE5vdCBTd2VlcCBCbG9ja3wgIHwgfCA8YSBuYW1lPVxcXCI5NTVcXFwiPjk1NTwvYT58RW50aXR5IFVuaXF1ZSBJZCBoYXMgdGhlIHdyb25nIGZvcm1hdHwgIHwgfCA8YSBuYW1lPVxcXCI5NTZcXFwiPjk1NjwvYT58UG9zdCBDbG9zZSBBY3Rpdml0eSBpcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjk1N1xcXCI+OTU3PC9hPnxUaGUgQ2xvc2VkUGVyaW9kIHdpdGggdGhlIElkIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBUaW1lbGluZXwgIHwgfCA8YSBuYW1lPVxcXCI5NThcXFwiPjk1ODwvYT58SW52YWxpZCBTZXR0bGVtZW50IEluc3RydWN0aW9uc3wgIHwgfCA8YSBuYW1lPVxcXCI5NTlcXFwiPjk1OTwvYT58T3JkZXIgcmVxdWlyZXMgcXVhbnRpdHkufCAgfCB8IDxhIG5hbWU9XFxcIjk2MFxcXCI+OTYwPC9hPnxJbnZhbGlkIERhdGFQb2ludCBWYWx1ZSBBc3NpZ25tZW50fCAgfCB8IDxhIG5hbWU9XFxcIjk2MVxcXCI+OTYxPC9hPnxJbnZhbGlkIFJlbGF0aW9uYWwgRGF0YXNldCBGaWVsZCBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjk2MlxcXCI+OTYyPC9hPnxSZWxhdGlvbmFsIERhdGFzZXQgRGVmaW5pdGlvbiBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI5NjNcXFwiPjk2MzwvYT58VGltZWxpbmUgQm9va21hcmsgTm90IEluIE9wZW4gUGVyaW9kfCAgfCB8IDxhIG5hbWU9XFxcIjk2NFxcXCI+OTY0PC9hPnxUaGUgQ3VzdG9tIERhdGEgTW9kZWwgc3BlY2lmaWVkIGlkZW50aWZpZXJzIGJ1dCB0aGUgZW50aXR5IGRvZXMgbm90IHN1cHBvcnQgaWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiOTY1XFxcIj45NjU8L2E+fFRoZSBzb3J0IGJ5IHByb3ZpZGVkIGhhcyBvbmUgb3IgbW9yZSBlcnJvcnN8ICB8IHwgPGEgbmFtZT1cXFwiOTY2XFxcIj45NjY8L2E+fEludmFsaWQgQ3VzdG9tIERhdGEgTW9kZWwgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI5NjdcXFwiPjk2NzwvYT58UnVsZSBzZXQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIENoZWNrIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiOTY4XFxcIj45Njg8L2E+fFRoZSBDbG9zZWQgUGVyaW9kIGlzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiOTY5XFxcIj45Njk8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgd2l0aCB0aGlzIFN0b3AgUHJpY2UufCAgfCB8IDxhIG5hbWU9XFxcIjk3MFxcXCI+OTcwPC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhpcyBMaW1pdCBQcmljZS58ICB8IHwgPGEgbmFtZT1cXFwiOTcxXFxcIj45NzE8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgd2l0aCB0aGUgY3VycmVudCBUeXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzRcXFwiPjk3NDwvYT58Q2Fubm90IFBsYWNlQmxvY2tzIGFnYWluc3QgYW4gXFwnVW5zb2xpY2l0ZWRcXCcgQmxvY2sgKGJsb2NrIGNvbnRhaW5pbmcgMCBPcmRlcnMpLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzVcXFwiPjk3NTwvYT58Tm8gUG9ydGZvbGlvIEdyb3VwIFNlbGVjdGVkfCAgfCB8IDxhIG5hbWU9XFxcIjk3NlxcXCI+OTc2PC9hPnxBbWJpZ3VvdXMgU2NvcGV8ICB8IFxuICpcbiAqIENvbnRhY3Q6IGluZm9AZmluYm91cm5lLmNvbVxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyxcbiAgICAgICAgIEh0dHBSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwUGFyYW1ldGVyQ29kZWMsIEh0dHBDb250ZXh0IFxuICAgICAgICB9ICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYyB9ICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9lbmNvZGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdyeGpzJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQ29uZmlndXJhdGlvblJlY2lwZSB9IGZyb20gJy4uL21vZGVsL2NvbmZpZ3VyYXRpb25SZWNpcGUnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQ3JlYXRlUmVjaXBlUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2NyZWF0ZVJlY2lwZVJlcXVlc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgSW5saW5lVmFsdWF0aW9uUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2lubGluZVZhbHVhdGlvblJlcXVlc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgTGlzdEFnZ3JlZ2F0aW9uUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9saXN0QWdncmVnYXRpb25SZXNwb25zZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBMdXNpZFByb2JsZW1EZXRhaWxzIH0gZnJvbSAnLi4vbW9kZWwvbHVzaWRQcm9ibGVtRGV0YWlscyc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBMdXNpZFZhbGlkYXRpb25Qcm9ibGVtRGV0YWlscyB9IGZyb20gJy4uL21vZGVsL2x1c2lkVmFsaWRhdGlvblByb2JsZW1EZXRhaWxzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFF1ZXJ5YWJsZUtleXNGb3JNZXRyaWNzUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL3F1ZXJ5YWJsZUtleXNGb3JNZXRyaWNzUmVxdWVzdCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBRdWVyeWFibGVLZXlzRm9yTWV0cmljc1Jlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvcXVlcnlhYmxlS2V5c0Zvck1ldHJpY3NSZXNwb25zZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBSZXNvdXJjZUxpc3RPZkFnZ3JlZ2F0aW9uUXVlcnkgfSBmcm9tICcuLi9tb2RlbC9yZXNvdXJjZUxpc3RPZkFnZ3JlZ2F0aW9uUXVlcnknO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVmFsdWF0aW9uUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL3ZhbHVhdGlvblJlcXVlc3QnO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vdmFyaWFibGVzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlQ29uZmlndXJhdGlvblJlY2lwZVJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgc2NvcGUgb2YgdGhlIHBvcnRmb2xpbyAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb2RlIG9mIHRoZSBwb3J0Zm9saW8gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSByZXF1ZXN0IHNwZWNpZnlpbmcgdGhlIHBhcmFtZXRlcnMgdG8gZ2VuZXJhdGluZyB0aGUgcmVjaXBlICovXG4gICAgY3JlYXRlUmVjaXBlUmVxdWVzdD86IENyZWF0ZVJlY2lwZVJlcXVlc3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UXVlcnlhYmxlS2V5c1JlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgcGFnaW5hdGlvbiB0b2tlbiB0byB1c2UgdG8gY29udGludWUgbGlzdGluZyBxdWVyeWFibGUga2V5cyBmcm9tIGEgcHJldmlvdXMgY2FsbCB0byBsaXN0IHF1ZXJ5YWJsZSBrZXlzLiAgICAgICAgICAgICAgVGhpcyB2YWx1ZSBpcyByZXR1cm5lZCBmcm9tIHRoZSBwcmV2aW91cyBjYWxsLiAqL1xuICAgIHBhZ2U/OiBzdHJpbmc7XG4gICAgLyoqIFdoZW4gcGFnaW5hdGluZywgbGltaXQgdGhlIG51bWJlciBvZiByZXR1cm5lZCByZXN1bHRzIHRvIHRoaXMgbWFueS4gKi9cbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICAvKiogRXhwcmVzc2lvbiB0byBmaWx0ZXIgdGhlIHJlc3VsdCBzZXQuICAgICAgICAgICAgICBSZWFkIG1vcmUgYWJvdXQgZmlsdGVyaW5nIHJlc3VsdHMgZnJvbSBMVVNJRCBoZXJlIGh0dHBzOi8vc3VwcG9ydC5sdXNpZC5jb20vZmlsdGVyaW5nLXJlc3VsdHMtZnJvbS1sdXNpZC4gKi9cbiAgICBmaWx0ZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UXVlcnlhYmxlS2V5c0Zvck1ldHJpY3NSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNldCBvZiBtZXRyaWNzIHdob3NlIHF1ZXJ5YWJsZSBrZXlzIGFyZSB0byBiZSBkZXNjcmliZWQgKi9cbiAgICBxdWVyeWFibGVLZXlzRm9yTWV0cmljc1JlcXVlc3Q/OiBRdWVyeWFibGVLZXlzRm9yTWV0cmljc1JlcXVlc3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0VmFsdWF0aW9uUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSByZXF1ZXN0IHNwZWNpZnlpbmcgdGhlIHNldCBvZiBwb3J0Zm9saW9zIGFuZCBkYXRlcyBvbiB3aGljaCB0byBjYWxjdWxhdGUgYSBzZXQgb2YgdmFsdWF0aW9uIG1ldHJpY3MgKi9cbiAgICB2YWx1YXRpb25SZXF1ZXN0PzogVmFsdWF0aW9uUmVxdWVzdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRWYWx1YXRpb25PZldlaWdodGVkSW5zdHJ1bWVudHNSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHJlcXVlc3Qgc3BlY2lmeWluZyB0aGUgc2V0IG9mIHBvcnRmb2xpb3MgYW5kIGRhdGVzIG9uIHdoaWNoIHRvIGNhbGN1bGF0ZSBhIHNldCBvZiB2YWx1YXRpb24gbWV0cmljcyAqL1xuICAgIGlubGluZVZhbHVhdGlvblJlcXVlc3Q/OiBJbmxpbmVWYWx1YXRpb25SZXF1ZXN0O1xufVxuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0aW9uU2VydmljZSB7XG5cbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSAnaHR0cHM6Ly93d3cubHVzaWQuY29tL2FwaSc7XG4gICAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIHB1YmxpYyBlbmNvZGVyOiBIdHRwUGFyYW1ldGVyQ29kZWM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QmFzZVBhdGggPSBBcnJheS5pc0FycmF5KGJhc2VQYXRoKSA/IGJhc2VQYXRoWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpcnN0QmFzZVBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSBmaXJzdEJhc2VQYXRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGJhc2VQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5jb2RlciA9IHRoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVyIHx8IG5ldyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMoKTtcbiAgICB9XG5cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBwcml2YXRlIGFkZFRvSHR0cFBhcmFtcyhodHRwUGFyYW1zOiBIdHRwUGFyYW1zLCB2YWx1ZTogYW55LCBrZXk/OiBzdHJpbmcpOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlPzogYW55LCBrZXk/OiBzdHJpbmcpOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgKHZhbHVlIGFzIGFueVtdKS5mb3JFYWNoKCBlbGVtID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCBlbGVtLCBrZXkpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChrZXksICh2YWx1ZSBhcyBEYXRlKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIERhdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaCggayA9PiBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoXG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbXMsIHZhbHVlW2tdLCBrZXkgIT0gbnVsbCA/IGAke2tleX0uJHtrfWAgOiBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBub3Qgb2JqZWN0IG9yIGFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFWFBFUklNRU5UQUxdIEdlbmVyYXRlQ29uZmlndXJhdGlvblJlY2lwZTogR2VuZXJhdGVzIGEgcmVjaXBlIHN1ZmZpY2llbnQgdG8gcGVyZm9ybSB2YWx1YXRpb25zIGZvciB0aGUgZ2l2ZW4gcG9ydGZvbGlvLlxuICAgICAqIEdpdmVuIGEgc2V0IG9mIHNjb3BlcywgYSBwb3J0Zm9saW8gSWQgYW5kIGEgYmFzaWMgcmVjaXBlLCB0aGlzIGVuZHBvaW50IGdlbmVyYXRlcyBhIGNvbmZpZ3VyYXRpb24gcmVjaXBlIHdpdGggcmVsZXZhbnQgcnVsZXMgdGhhdCBjYW4gdmFsdWUgdGhlIGluc3RydW1lbnRzIGluIHRoZSBwb3J0Zm9saW8uXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdlbmVyYXRlQ29uZmlndXJhdGlvblJlY2lwZShyZXF1ZXN0UGFyYW1ldGVycz86IEdlbmVyYXRlQ29uZmlndXJhdGlvblJlY2lwZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxDb25maWd1cmF0aW9uUmVjaXBlPjtcbiAgICBwdWJsaWMgZ2VuZXJhdGVDb25maWd1cmF0aW9uUmVjaXBlKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2VuZXJhdGVDb25maWd1cmF0aW9uUmVjaXBlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8Q29uZmlndXJhdGlvblJlY2lwZT4+O1xuICAgIHB1YmxpYyBnZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZWNpcGUocmVxdWVzdFBhcmFtZXRlcnM/OiBHZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZWNpcGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8Q29uZmlndXJhdGlvblJlY2lwZT4+O1xuICAgIHB1YmxpYyBnZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZWNpcGUocmVxdWVzdFBhcmFtZXRlcnM/OiBHZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZWNpcGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZWNpcGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZWNpcGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlYXRlUmVjaXBlUmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jcmVhdGVSZWNpcGVSZXF1ZXN0O1xuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9hZ2dyZWdhdGlvbi8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyRnZW5lcmF0ZWNvbmZpZ3VyYXRpb25yZWNpcGVgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8Q29uZmlndXJhdGlvblJlY2lwZT4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGNyZWF0ZVJlY2lwZVJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRRdWVyeWFibGVLZXlzOiBRdWVyeSB0aGUgc2V0IG9mIHN1cHBvcnRlZCBcXCZxdW90O2FkZHJlc3Nlc1xcJnF1b3Q7IHRoYXQgY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUgYWdncmVnYXRpb24gZW5kcG9pbnQuXG4gICAgICogV2hlbiBhIHJlcXVlc3QgaXMgbWFkZSBmb3IgYWdncmVnYXRpb24sIHRoZSB1c2VyIG5lZWRzIHRvIGtub3cgd2hhdCBrZXlzIGNhbiBiZSBwYXNzZWQgdG8gaXQgZm9yIHF1ZXJ5YWJsZSBkYXRhLiBUaGlzIGVuZHBvaW50IGFsbG93cyB0byBxdWVyaWVzIHRvIHByb3ZpZGUgdGhlIHNldCBvZiBrZXlzLCAgd2hhdCB0aGV5IGFyZSBhbmQgd2hhdCB0aGV5IHJldHVybi5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UXVlcnlhYmxlS2V5cyhyZXF1ZXN0UGFyYW1ldGVycz86IEdldFF1ZXJ5YWJsZUtleXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8UmVzb3VyY2VMaXN0T2ZBZ2dyZWdhdGlvblF1ZXJ5PjtcbiAgICBwdWJsaWMgZ2V0UXVlcnlhYmxlS2V5cyhyZXF1ZXN0UGFyYW1ldGVycz86IEdldFF1ZXJ5YWJsZUtleXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxSZXNvdXJjZUxpc3RPZkFnZ3JlZ2F0aW9uUXVlcnk+PjtcbiAgICBwdWJsaWMgZ2V0UXVlcnlhYmxlS2V5cyhyZXF1ZXN0UGFyYW1ldGVycz86IEdldFF1ZXJ5YWJsZUtleXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8UmVzb3VyY2VMaXN0T2ZBZ2dyZWdhdGlvblF1ZXJ5Pj47XG4gICAgcHVibGljIGdldFF1ZXJ5YWJsZUtleXMocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRRdWVyeWFibGVLZXlzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBwYWdlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnBhZ2U7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSByZXF1ZXN0UGFyYW1ldGVycz8uZmlsdGVyO1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKHBhZ2UgIT09IHVuZGVmaW5lZCAmJiBwYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+cGFnZSwgJ3BhZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgIT09IHVuZGVmaW5lZCAmJiBsaW1pdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmxpbWl0LCAnbGltaXQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyICE9PSB1bmRlZmluZWQgJiYgZmlsdGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+ZmlsdGVyLCAnZmlsdGVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9yZXN1bHRzL3F1ZXJ5YWJsZS9rZXlzYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFJlc291cmNlTGlzdE9mQWdncmVnYXRpb25RdWVyeT4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFWFBFUklNRU5UQUxdIEdldFF1ZXJ5YWJsZUtleXNGb3JNZXRyaWNzOiBRdWVyeSB0aGUgcXVlcnlhYmxlIGtleXMgYmVoaW5kIGEgZ2l2ZW4gc2V0IG9mIHZhbHVhdGlvbiBtZXRyaWNzLlxuICAgICAqIERlc2NyaWJlcyB3aGF0IGEgdmFsdWF0aW9uIHdvdWxkIHJldHVybiBmb3IgZWFjaCBvZiB0aGUgc3VwcGxpZWQgbWV0cmljcywgc28gdGhhdCBhIGNhbGxlciBjYW4gIHByZXBhcmUgZm9yIHRoZSByZXNwb25zZSwgYW5kIHJlbmRlciBpdCwgd2l0aG91dCBoYXZpbmcgdG8gYXNrIGZvciB0aGUgdmFsdWF0aW9uIGZpcnN0LiBUaGUgIG1ldHJpY3MgYXJlIGdpdmVuIGV4YWN0bHkgYXMgdGhleSB3b3VsZCBiZSBzdXBwbGllZCB0byB0aGUgbWV0cmljcyBvZiBhIHZhbHVhdGlvbiByZXF1ZXN0LiAgICAgICAgICAgICAgICBFYWNoIG1ldHJpYyBpcyByZXBvcnRlZCBvbiBpbmRpdmlkdWFsbHksIGtleWVkIGJ5IGl0cyBub3JtYWxpc2VkIGFkZHJlc3Mga2V5OiB0aG9zZSB0aGF0IHJlc29sdmUgIGFwcGVhciB1bmRlciBtZXRyaWNzIHdpdGggdGhlaXIgcXVlcnlhYmxlIGtleSBkZWZpbml0aW9uLCBhbmQgdGhlIHJlc3QgYXBwZWFyIHVuZGVyIGZhaWxlZCB3aXRoIHRoZSAgcmVhc29uLiBBIG1ldHJpYyB0aGF0IGRvZXMgbm90IGV4aXN0LCBvciB0aGF0IHlvdSBhcmUgbm90IGVudGl0bGVkIHRvIHJlYWQsIGlzIHJlcG9ydGVkIGFzIGZhaWxlZDsgIHRoZSB0d28gY2FzZXMgYXJlIG5vdCBkaXN0aW5ndWlzaGVkIGZyb20gb25lIGFub3RoZXIuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldFF1ZXJ5YWJsZUtleXNGb3JNZXRyaWNzKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0UXVlcnlhYmxlS2V5c0Zvck1ldHJpY3NSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8UXVlcnlhYmxlS2V5c0Zvck1ldHJpY3NSZXNwb25zZT47XG4gICAgcHVibGljIGdldFF1ZXJ5YWJsZUtleXNGb3JNZXRyaWNzKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0UXVlcnlhYmxlS2V5c0Zvck1ldHJpY3NSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxRdWVyeWFibGVLZXlzRm9yTWV0cmljc1Jlc3BvbnNlPj47XG4gICAgcHVibGljIGdldFF1ZXJ5YWJsZUtleXNGb3JNZXRyaWNzKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0UXVlcnlhYmxlS2V5c0Zvck1ldHJpY3NSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8UXVlcnlhYmxlS2V5c0Zvck1ldHJpY3NSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRRdWVyeWFibGVLZXlzRm9yTWV0cmljcyhyZXF1ZXN0UGFyYW1ldGVycz86IEdldFF1ZXJ5YWJsZUtleXNGb3JNZXRyaWNzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBxdWVyeWFibGVLZXlzRm9yTWV0cmljc1JlcXVlc3QgPSByZXF1ZXN0UGFyYW1ldGVycz8ucXVlcnlhYmxlS2V5c0Zvck1ldHJpY3NSZXF1ZXN0O1xuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9hZ2dyZWdhdGlvbi8kcXVlcnlhYmxla2V5c2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxRdWVyeWFibGVLZXlzRm9yTWV0cmljc1Jlc3BvbnNlPigncG9zdCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgYm9keTogcXVlcnlhYmxlS2V5c0Zvck1ldHJpY3NSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0VmFsdWF0aW9uOiBQZXJmb3JtIHZhbHVhdGlvbiBmb3IgYSBsaXN0IG9mIHBvcnRmb2xpb3MgYW5kL29yIHBvcnRmb2xpbyBncm91cHNcbiAgICAgKiBQZXJmb3JtIHZhbHVhdGlvbiBvbiBzcGVjaWZpZWQgbGlzdCBvZiBwb3J0Zm9saW8gYW5kL29yIHBvcnRmb2xpbyBncm91cHMgZm9yIGEgc2V0IG9mIGRhdGVzLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWYWx1YXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRWYWx1YXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8TGlzdEFnZ3JlZ2F0aW9uUmVzcG9uc2U+O1xuICAgIHB1YmxpYyBnZXRWYWx1YXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRWYWx1YXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxMaXN0QWdncmVnYXRpb25SZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRWYWx1YXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRWYWx1YXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8TGlzdEFnZ3JlZ2F0aW9uUmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgZ2V0VmFsdWF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0VmFsdWF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCB2YWx1YXRpb25SZXF1ZXN0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LnZhbHVhdGlvblJlcXVlc3Q7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd0ZXh0L2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLyoranNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2FnZ3JlZ2F0aW9uLyR2YWx1YXRpb25gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8TGlzdEFnZ3JlZ2F0aW9uUmVzcG9uc2U+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiB2YWx1YXRpb25SZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0VmFsdWF0aW9uT2ZXZWlnaHRlZEluc3RydW1lbnRzOiBQZXJmb3JtIHZhbHVhdGlvbiBmb3IgYW4gaW5saW5lZCBwb3J0Zm9saW9cbiAgICAgKiBQZXJmb3JtIHZhbHVhdGlvbiBvbiB0aGUgcG9ydGZvbGlvIHRoYXQgaXMgZGVmaW5lZCBieSB0aGUgd2VpZ2h0ZWQgc2V0IG9mIGluc3RydW1lbnRzIHBhc3NlZCB0byB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VmFsdWF0aW9uT2ZXZWlnaHRlZEluc3RydW1lbnRzKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0VmFsdWF0aW9uT2ZXZWlnaHRlZEluc3RydW1lbnRzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPExpc3RBZ2dyZWdhdGlvblJlc3BvbnNlPjtcbiAgICBwdWJsaWMgZ2V0VmFsdWF0aW9uT2ZXZWlnaHRlZEluc3RydW1lbnRzKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0VmFsdWF0aW9uT2ZXZWlnaHRlZEluc3RydW1lbnRzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8TGlzdEFnZ3JlZ2F0aW9uUmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgZ2V0VmFsdWF0aW9uT2ZXZWlnaHRlZEluc3RydW1lbnRzKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0VmFsdWF0aW9uT2ZXZWlnaHRlZEluc3RydW1lbnRzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PExpc3RBZ2dyZWdhdGlvblJlc3BvbnNlPj47XG4gICAgcHVibGljIGdldFZhbHVhdGlvbk9mV2VpZ2h0ZWRJbnN0cnVtZW50cyhyZXF1ZXN0UGFyYW1ldGVycz86IEdldFZhbHVhdGlvbk9mV2VpZ2h0ZWRJbnN0cnVtZW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaW5saW5lVmFsdWF0aW9uUmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pbmxpbmVWYWx1YXRpb25SZXF1ZXN0O1xuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9hZ2dyZWdhdGlvbi8kdmFsdWF0aW9uaW5saW5lZGA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxMaXN0QWdncmVnYXRpb25SZXNwb25zZT4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGlubGluZVZhbHVhdGlvblJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbn1cbiJdfQ==