tango-app-ui-manage-billing 3.3.19 → 3.3.21

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 (31) hide show
  1. package/esm2022/lib/components/billing-summary/billing-summary.component.mjs +25 -17
  2. package/esm2022/lib/components/brand-invoices/brand-invoices.component.mjs +13 -5
  3. package/esm2022/lib/components/daily-pricing/daily-pricing.component.mjs +71 -7
  4. package/esm2022/lib/components/daily-pricing/generate-invoice-modal/generate-invoice-modal.component.mjs +3 -3
  5. package/esm2022/lib/components/daily-pricing/new-stores-modal/new-stores-modal.component.mjs +25 -0
  6. package/esm2022/lib/components/invoice-preview/invoice-preview.component.mjs +3 -3
  7. package/esm2022/lib/components/plans-subscription/payments-subscription.component.mjs +184 -13
  8. package/esm2022/lib/components/plans-subscription/subscription-popups/upload-document/upload-document.component.mjs +82 -0
  9. package/esm2022/lib/components/purchase-order/purchase-order-details/purchase-order-details.component.mjs +62 -0
  10. package/esm2022/lib/components/purchase-order/purchase-order-form/purchase-order-form.component.mjs +87 -0
  11. package/esm2022/lib/components/purchase-order/purchase-order.component.mjs +104 -0
  12. package/esm2022/lib/components/services/billing.service.mjs +15 -1
  13. package/esm2022/lib/components/tango-manage-billing/edit-invoice/edit-invoice.component.mjs +25 -3
  14. package/esm2022/lib/services/payment-subscription.service.mjs +17 -6
  15. package/esm2022/lib/tango-manage-billing.module.mjs +16 -1
  16. package/fesm2022/tango-app-ui-manage-billing.mjs +724 -96
  17. package/fesm2022/tango-app-ui-manage-billing.mjs.map +1 -1
  18. package/lib/components/billing-summary/billing-summary.component.d.ts +1 -0
  19. package/lib/components/brand-invoices/brand-invoices.component.d.ts +3 -0
  20. package/lib/components/daily-pricing/daily-pricing.component.d.ts +6 -0
  21. package/lib/components/daily-pricing/new-stores-modal/new-stores-modal.component.d.ts +10 -0
  22. package/lib/components/plans-subscription/payments-subscription.component.d.ts +15 -0
  23. package/lib/components/plans-subscription/subscription-popups/upload-document/upload-document.component.d.ts +23 -0
  24. package/lib/components/purchase-order/purchase-order-details/purchase-order-details.component.d.ts +18 -0
  25. package/lib/components/purchase-order/purchase-order-form/purchase-order-form.component.d.ts +25 -0
  26. package/lib/components/purchase-order/purchase-order.component.d.ts +28 -0
  27. package/lib/components/services/billing.service.d.ts +3 -0
  28. package/lib/components/tango-manage-billing/edit-invoice/edit-invoice.component.d.ts +2 -0
  29. package/lib/services/payment-subscription.service.d.ts +4 -0
  30. package/lib/tango-manage-billing.module.d.ts +42 -37
  31. package/package.json +1 -1
@@ -180,6 +180,12 @@ export class BillingService {
180
180
  additionalProducts(clientId) {
181
181
  return this.http.get(`${this.brandsBillingApiUrl}/additionalProducts?clientId=${clientId}`);
182
182
  }
183
+ // Per-product detailed Excel export for the Additional Products section.
184
+ // date (YYYY-MM-DD) is optional — used by products that report by a day.
185
+ additionalProductExport(clientId, product, date) {
186
+ const dateParam = date ? `&date=${date}` : '';
187
+ return this.http.get(`${this.brandsBillingApiUrl}/additionalProductExport?clientId=${clientId}&product=${product}${dateParam}`, { responseType: 'arraybuffer' });
188
+ }
183
189
  latestDailyPricingExport(data) {
184
190
  return this.http.post(`${this.brandsBillingApiUrl}/latestDailyPricing`, data, { responseType: 'arraybuffer' });
185
191
  }
@@ -274,6 +280,14 @@ export class BillingService {
274
280
  getAllBillingGroups(clientId) {
275
281
  return this.http.get(`${this.billingApiUrl}/get-all-billing-groups?clientId=${clientId}`);
276
282
  }
283
+ // ===== Purchase Orders (brand-view Purchase Order tab) =====
284
+ getPurchaseOrders(clientId) {
285
+ return this.http.get(`${this.billingApiUrl}/purchase-orders?clientId=${clientId}`);
286
+ }
287
+ createPurchaseOrder(data) {
288
+ // data is FormData (may include a PO PDF file).
289
+ return this.http.post(`${this.billingApiUrl}/purchase-orders`, data);
290
+ }
277
291
  // ===== Payment Reminders (Billing Settings) =====
278
292
  getPaymentReminder(clientId) {
279
293
  return this.http.get(`${this.billingApiUrl}/payment-reminder/${clientId}`);
@@ -341,4 +355,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
341
355
  providedIn: 'root'
342
356
  }]
343
357
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.GlobalStateService }] });
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLWJpbGxpbmcvc3JjL2xpYi9jb21wb25lbnRzL3NlcnZpY2VzL2JpbGxpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQThCLE1BQU0sTUFBTSxDQUFDO0FBQ25HLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDOzs7O0FBRTdCLE1BQU0sVUFBVSxHQUFHLGlGQUFpRixDQUFDO0FBQ3JHLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQztBQU1oQyxNQUFNLE9BQU8sY0FBYztJQVdMO0lBQTBCO0lBVjlDLGFBQWEsQ0FBUTtJQUNyQix5QkFBeUIsQ0FBSztJQUV0QixpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNoRSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXBELHNCQUFzQixHQUFHLElBQUksZUFBZSxDQUFNLEVBQUMsS0FBSyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQ3JGLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQTtJQUNoRCxhQUFhLENBQU07SUFDbkIsbUJBQW1CLENBQU07SUFDekIsWUFBb0IsSUFBZ0IsRUFBVSxFQUFzQjtRQUFoRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDbEUsSUFBSSxDQUFDLEVBQUUsQ0FB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Q3hFLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxFQUFVO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxvQkFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNyRSxDQUFDO0lBQ0QsYUFBYSxDQUFDLElBQVM7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFDRCxhQUFhLENBQUMsSUFBUztRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQUNELG9CQUFvQixDQUFDLFFBQWdCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSx5QkFBeUIsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsUUFBZ0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLHNCQUFzQixRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzdFLENBQUM7SUFDRCxhQUFhLENBQUMsU0FBaUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLGtCQUFrQixTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQzdFLENBQUM7d0dBalZZLGNBQWM7NEdBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlVW50aWwsIGNhdGNoRXJyb3IsIG1hcCx0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xuXG5jb25zdCBFWENFTF9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuY29uc3QgRVhDRUxfRVhURU5TSU9OID0gJy54bHN4JztcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xuIFxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQmlsbGluZ1NlcnZpY2Uge1xuICBpbnZvaWNlQXBpVXJsOnN0cmluZztcbiAgcGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybDphbnk7XG5cbiAgcHJpdmF0ZSByZWxvYWREYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWxvYWREYXRhJCA9IHRoaXMucmVsb2FkRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcGF5bWVudGludm9pY2VGb3JtRGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7dmFsdWU6bnVsbCwgdHlwZTpudWxsLCBmb3JtOm51bGx9KVxuICBkcm9wRG93blRyaWdnZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbClcbiAgYmlsbGluZ0FwaVVybDogYW55O1xuICBicmFuZHNCaWxsaW5nQXBpVXJsOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlKSB7XG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlbnYpID0+IHtcbiAgICAgIGlmIChlbnYpIHtcbiAgICAgICAgdGhpcy5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsID0gZW52LnBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmw7XG4gICAgICAgIHRoaXMuaW52b2ljZUFwaVVybCA9IGVudi5pbnZvaWNlQXBpVXJsXG4gICAgICAgIHRoaXMuYmlsbGluZ0FwaVVybCA9IGVudi5iaWxsaW5nQXBpVXJsXG4gICAgICAgIHRoaXMuYnJhbmRzQmlsbGluZ0FwaVVybCA9IGVudi5icmFuZHNCaWxsaW5nQXBpVXJsXG5cbiAgICAgICAgLy8gdGhpcy5jbGllbnRJZC5uZXh0KCcxMScpXG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gdGhpcy5ncy5zZWxlY3RlZENsaWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlOmFueSk9PntcbiAgICAvLyAgIGlmKGUpe1xuICAgIC8vICAgICBjb25zb2xlLmxvZyhlLCdlJyk7XG4gICAgLy8gICB9XG4gICAgLy8gfSlcbiAgfVxuICB0cmlnZ2VyUmVsb2FkKCkge1xuICAgIHRoaXMucmVsb2FkRGF0YVN1YmplY3QubmV4dCh0cnVlKTtcbiAgfVxuXG4gIFxuICBwdWJsaWMgZXhwb3J0QXNFeGNlbEZpbGUoanNvbjogYW55W10sIGV4Y2VsRmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHdvcmtzaGVldDogWExTWC5Xb3JrU2hlZXQgPSBYTFNYLnV0aWxzLmpzb25fdG9fc2hlZXQoanNvbik7XG4gICAgY29uc3Qgd29ya2Jvb2s6IFhMU1guV29ya0Jvb2sgPSB7IFNoZWV0czogeyAnZGF0YSc6IHdvcmtzaGVldCB9LCBTaGVldE5hbWVzOiBbJ2RhdGEnXSB9O1xuICAgIGNvbnN0IGV4Y2VsQnVmZmVyOiBhbnkgPSBYTFNYLndyaXRlKHdvcmtib29rLCB7IGJvb2tUeXBlOiAneGxzeCcsIHR5cGU6ICdhcnJheScgfSk7XG4gICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIGV4Y2VsRmlsZU5hbWUpO1xuICB9XG4gXG4gIHB1YmxpYyBzYXZlQXNFeGNlbEZpbGUoYnVmZmVyOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcbiAgICAgIHR5cGU6IEVYQ0VMX1RZUEVcbiAgICB9KTtcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIGZpbGVOYW1lICsgJ2xpc3QnKyBFWENFTF9FWFRFTlNJT04pO1xuICB9XG4gXG4gIHB1YmxpYyBzYXZlQXNUZW1wbGF0ZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xuICAgICAgdHlwZTogRVhDRUxfVFlQRVxuICAgIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyBFWENFTF9FWFRFTlNJT04pO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4vLyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbi8vICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuLy8gICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4vLyB9XG4vLyA9PT09PSBFc3RpbWF0ZXMgKEVzdGltYXRlIHRhYikgPT09PT1cbmVzdGltYXRlTGlzdChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS9saXN0YCwgZGF0YSlcbn1cbmVzdGltYXRlTGlzdEV4cG9ydChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS9saXN0YCwgZGF0YSwgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicgfSlcbn1cbmNyZWF0ZUVzdGltYXRlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlL2NyZWF0ZWAsIGRhdGEpXG59XG51cGRhdGVFc3RpbWF0ZShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS91cGRhdGVgLCBkYXRhKVxufVxuZ2V0RXN0aW1hdGUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vZXN0aW1hdGUvJHtpZH1gKVxufVxuZXN0aW1hdGVTdGF0dXNVcGRhdGUoZGF0YTogeyBlc3RpbWF0ZUlkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS9zdGF0dXNVcGRhdGVgLCBkYXRhKVxufVxuc2VuZEVzdGltYXRlKGVzdGltYXRlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlL3NlbmRgLCB7IGVzdGltYXRlSWQgfSlcbn1cbmRlbGV0ZUVzdGltYXRlKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlLyR7aWR9YClcbn1cbmRvd25sb2FkRXN0aW1hdGUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlL2Rvd25sb2FkLyR7aWR9YCwge30sIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXG59XG5pbnZvaWNlVGFibGVEYXRhKCBkYXRhOmFueSk6T2JzZXJ2YWJsZTxhbnk+e1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9jbGllbnRJbnZvaWNlTGlzdGAsIGRhdGEpXG59XG51cGRhdGVDbGllbnRGaWx0ZXJzKGZpbHRlcnM6YW55KXtcbiAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KGZpbHRlcnMpO1xufVxuaW52b2ljZVRhYmxlRGF0YUV4cG9ydCggZGF0YTphbnkpOk9ic2VydmFibGU8YW55PntcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vY2xpZW50SW52b2ljZUxpc3RgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmNsaWVudEJpbGxpbmdJbmZvKHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHBcbiAgICAuZ2V0KGAke3RoaXMucGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybH0vY2xpZW50QmlsbGluZ1N1YnNjcmlwdGlvbkluZm8vJHtwYXJhbXN9YClcbn1cbmludm9pY2VEb3dubG9hZChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9pbnZvaWNlRG93bmxvYWQvJHtkYXRhLl9pZH1gLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJ1bGtJbnZvaWNlRG93bmxvYWQoZGF0YTogeyBpbnZvaWNlSWRzOiBzdHJpbmdbXSB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vaW52b2ljZURvd25sb2FkL2J1bGtgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmFwcHJvdmVJbnZvaWNlQ3NtKGludm9pY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYXBwcm92ZUludm9pY2VDc21gLCB7IGludm9pY2VJZCB9KVxufVxuYXBwcm92ZUludm9pY2VGaW5hbmNlKGludm9pY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYXBwcm92ZUludm9pY2VGaW5hbmNlYCwgeyBpbnZvaWNlSWQgfSlcbn1cbmFwcHJvdmVJbnZvaWNlQXBwcm92YWwoaW52b2ljZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9hcHByb3ZlSW52b2ljZUFwcHJvdmFsYCwgeyBpbnZvaWNlSWQgfSlcbn1cbmdldEludm9pY2VIZWFkcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2dldEludm9pY2VIZWFkc2ApXG59XG51cGRhdGVJbnZvaWNlSGVhZHMoZGF0YTogeyByb2xlOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmcgfCBzdHJpbmdbXSB9W10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS91cGRhdGVJbnZvaWNlSGVhZHNgLCB7IGRhdGEgfSlcbn1cbmludm9pY2VyZWdlcmF0ZShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9yZWdlcmF0ZUludm9pY2VgLCBkYXRhKVxufVxuXG5wYXltZW50U3RhdHVzQ2hhbmdlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L3BheW1lbnRTdGF0dXNDaGFuZ2VgLCBkYXRhKVxufVxuXG4vLyBSZWNvcmQgYSBmdWxsIG9yIHBhcnRpYWwgcGF5bWVudCBhZ2FpbnN0IGFuIGludm9pY2UuIFNlcnZlciBhcHBlbmRzIHRvXG4vLyBwYXltZW50SGlzdG9yeSwgaW5jcmVtZW50cyBwYWlkQW1vdW50LCBhbmQgcmVjb21wdXRlcyBwYXltZW50U3RhdHVzXG4vLyAodW5wYWlkL3BhcnRpYWwvcGFpZCkuIFJldHVybnMgeyBwYWlkQW1vdW50LCBwZW5kaW5nQW1vdW50LCBwYXltZW50U3RhdHVzIH0uXG5yZWNvcmRQYXltZW50KGRhdGE6IHtcbiAgaW52b2ljZUlkOiBzdHJpbmc7XG4gIGFtb3VudDogbnVtYmVyO1xuICBkYXRlPzogc3RyaW5nIHwgRGF0ZTtcbiAgbWV0aG9kPzogc3RyaW5nO1xuICByZWZlcmVuY2U/OiBzdHJpbmc7XG4gIG5vdGVzPzogc3RyaW5nO1xufSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L3JlY29yZFBheW1lbnRgLCBkYXRhKTtcbn1cbmludm9pY2VTZW50KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2ludm9pY2VEb3dubG9hZC8ke2RhdGEuX2lkfWAsIGRhdGEpXG59XG5nZXRpbnZvaWNlKGlkPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsfS9jcmVkaXROb3Rlcy9pbnZvaWNlTGlzdC8ke2lkfWApXG59XG50cmFuc2FjdGlvbkxpc3QoZGF0YT86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2NyZWRpdFRyYW5zYWN0aW9ubGlzdGAsZGF0YSlcbn1cbnRyYW5zYWN0aW9uVGFibGVFeHBvcnQoZGF0YT86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2NyZWRpdFRyYW5zYWN0aW9ubGlzdGAsZGF0YSx7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmNyZWRpdG5vdGV1cGRhdGUoIGRhdGE6YW55KTpPYnNlcnZhYmxlPGFueT57XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmx9L2NyZWRpdE5vdGVzYCwgZGF0YSlcbn1cbmFwcGx5RGlzY291bnQoIGRhdGE6YW55KTpPYnNlcnZhYmxlPGFueT57XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2FwcGx5RGlzY291bnRgLCBkYXRhKVxufVxub25lVGltZUZlZSggZGF0YTphbnksaW52b2ljZUlkOmFueSk6T2JzZXJ2YWJsZTxhbnk+e1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9vbmV0aW1lLXBheW1lbnQvJHtpbnZvaWNlSWR9YCwgZGF0YSlcbn1cbnBlbmRpbmdJbnZvaWNlcyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9wZW5kaW5nSW52b2ljZXNgLCBkYXRhKVxufVxuYnJhbmRzQmlsbGluZ0xpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnJhbmRzQmlsbGluZ0xpc3RgLCBkYXRhKVxufVxuYnJhbmRzQmlsbGluZ0xpc3RFeHBvcnQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnJhbmRzQmlsbGluZ0xpc3RgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJyYW5kSW52b2ljZUxpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnJhbmRJbnZvaWNlTGlzdGAsIGRhdGEpXG59XG5icmFuZEludm9pY2VMaXN0RXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2JyYW5kSW52b2ljZUxpc3RgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmxhdGVzdERhaWx5UHJpY2luZyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9sYXRlc3REYWlseVByaWNpbmdgLCBkYXRhKVxufVxuLy8gQWRkaXRpb25hbCAobm9uLXN0YW5kYXJkKSBwcm9kdWN0cyBiaWxsZWQgcGVyIHN0b3JlIGZvciBhIHNwZWNpZmljIGNsaWVudFxuLy8gKGN1cnJlbnRseSBvbmx5IGNsaWVudElkIDExKS4gUmV0dXJucyB7IGN1cnJlbmN5LCBwcm9kdWN0c1tdIH0uXG5hZGRpdGlvbmFsUHJvZHVjdHMoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYWRkaXRpb25hbFByb2R1Y3RzP2NsaWVudElkPSR7Y2xpZW50SWR9YClcbn1cbmxhdGVzdERhaWx5UHJpY2luZ0V4cG9ydChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9sYXRlc3REYWlseVByaWNpbmdgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJyYW5kQmlsbGluZ0dyb3VwcyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9icmFuZEJpbGxpbmdHcm91cHNgLCBkYXRhKVxufVxuYnJhbmRCaWxsaW5nR3JvdXBzRXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2JyYW5kQmlsbGluZ0dyb3Vwc2AsIGRhdGEsIHtyZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcid9KVxufVxuYnVsa0Rvd25sb2FkQmlsbGluZ0dyb3VwcyhjbGllbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IGNsaWVudElkIH0pO1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2J1bGstZG93bmxvYWQtYmlsbGluZy1ncm91cHM/JHtwYXJhbXMudG9TdHJpbmcoKX1gLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJ1bGtVcGRhdGVCaWxsaW5nR3JvdXBzKGZpbGU6IEZpbGUsIGNsaWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAvLyBSZWFkIHRoZSBmaWxlIGFzIGJhc2U2NCBhbmQgUE9TVCBhcyBKU09OLiBNdWx0aXBhcnQvZm9ybS1kYXRhIHdhcyBoaXR0aW5nXG4gIC8vIG11bHRlciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGZvcm1cIiBlcnJvcnM7IHN3aXRjaGluZyB0byBKU09OIHNpZGVzdGVwcyB0aGVcbiAgLy8gbXVsdGVyIHBpcGVsaW5lIGVudGlyZWx5LiBCb2R5LXBhcnNlciBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgYXQgNTAwTUIuXG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiBzdWJzY3JpYmVyLmVycm9yKHJlYWRlci5lcnJvcik7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgLy8gZGF0YVVSTCBpcyBcImRhdGE6PG1pbWU+O2Jhc2U2NCw8cGF5bG9hZD5cIiDigJQgc3RyaXAgdGhlIHByZWZpeC5cbiAgICAgIGNvbnN0IGJhc2U2NCA9IHJlc3VsdC5pbmNsdWRlcygnLCcpID8gcmVzdWx0LnNwbGl0KCcsJylbMV0gOiByZXN1bHQ7XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBjbGllbnRJZCxcbiAgICAgICAgZmlsZW5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgZmlsZUJhc2U2NDogYmFzZTY0LFxuICAgICAgfTtcbiAgICAgIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnVsay11cGRhdGUtYmlsbGluZy1ncm91cHNgLCBwYXlsb2FkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzKSA9PiB7IHN1YnNjcmliZXIubmV4dChyZXMpOyBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVyciksXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICB9KTtcbn1cbi8vID09PT09IEJhbmstc3RhdGVtZW50IHJlY29uY2lsaWF0aW9uIChUcmFuc2FjdGlvbnMgdGFiKSA9PT09PVxudXBsb2FkQmFua1N0YXRlbWVudChmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgLy8gVGhlIHNoZWV0IGlzIHBhcnNlZCBoZXJlIHdpdGggU2hlZXRKUyBhbmQgUE9TVGVkIGFzIEpTT04gcm93cyDigJQgdGhlIEFQSVxuICAvLyBuZXZlciByZWNlaXZlcyBmaWxlIGJ5dGVzOyBpdCB2YWxpZGF0ZXMgYW5kIGNsYXNzaWZpZXMgdGhlIHJvd3MuXG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiBzdWJzY3JpYmVyLmVycm9yKHJlYWRlci5lcnJvcik7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGxldCByb3dzOiBhbnlbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHJhdzp0cnVlIGtlZXBzIENTViBjZWxscyBhcyBwbGFpbiB0ZXh0OiB3aXRob3V0IGl0ICcwMS8wNC8yNidcbiAgICAgICAgLy8gKDEgQXByLCBERC9NTSkgaXMgY29lcmNlZCB0byBhIEphbi00IGRhdGUgY2VsbCAoVVMgTU0vREQpIHdoaWxlXG4gICAgICAgIC8vICcxOC8wNC8yNicgc3RheXMgdGV4dCDigJQgc2lsZW50bHkgY29ycnVwdGluZyBtaXhlZCBkYXRlcy5cbiAgICAgICAgLy8gU2hlZXRKUyB0eXBlOidhcnJheScgZXhwZWN0cyBhIGJ5dGUgYXJyYXkgKFVpbnQ4QXJyYXkpLCBub3QgdGhlIHJhd1xuICAgICAgICAvLyBBcnJheUJ1ZmZlciBGaWxlUmVhZGVyIHJldHVybnMg4oCUIHBhc3NpbmcgdGhlIEFycmF5QnVmZmVyIG1ha2VzIC54bHN4XG4gICAgICAgIC8vIHBhcnNlIHRvIGFuIGVtcHR5IHdvcmtib29rIGFuZCB0aGUgdXBsb2FkIFwiZmFpbHNcIi5cbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KHJlYWRlci5yZXN1bHQgYXMgQXJyYXlCdWZmZXIpO1xuICAgICAgICBjb25zdCB3YiA9IFhMU1gucmVhZChkYXRhLCB7IHR5cGU6ICdhcnJheScsIHJhdzogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3Qgc2hlZXQgPSB3Yi5TaGVldHNbd2IuU2hlZXROYW1lc1swXV07XG4gICAgICAgIHJvd3MgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24oc2hlZXQsIHsgaGVhZGVyOiAxLCBkZWZ2YWw6ICcnLCByYXc6IGZhbHNlIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHsgZXJyb3I6IHsgbWVzc2FnZTogJ0ZhaWxlZCB0byBwYXJzZSB0aGUgc3RhdGVtZW50IGZpbGUnIH0gfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7IGZpbGVOYW1lOiBmaWxlLm5hbWUsIHJvd3MgfTtcbiAgICAgIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYmFua1N0YXRlbWVudC91cGxvYWRgLCBwYXlsb2FkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzKSA9PiB7IHN1YnNjcmliZXIubmV4dChyZXMpOyBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVyciksXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgfSk7XG59XG5iYW5rVHJhbnNhY3Rpb25MaXN0KGZpbHRlcnM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2JhbmtTdGF0ZW1lbnQvbGlzdGAsIGZpbHRlcnMpXG59XG5iYW5rUmVzb2x2ZU9wdGlvbnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9iYW5rU3RhdGVtZW50L3Jlc29sdmVPcHRpb25zYClcbn1cbmJpbGxpbmdTdW1tYXJ5KGZpbHRlcnM/OiB7IGNzbT86IHN0cmluZzsgcHJvZHVjdD86IHN0cmluZzsgdmFyaWFuY2U/OiBzdHJpbmc7IHNlYXJjaD86IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgLy8gUE9TVCBzbyBmaWx0ZXJzIHRyYXZlbCBpbiB0aGUgYm9keSDigJQgYXZvaWRzIGFueSBxdWVyeS1zdHJpbmcgc3RyaXBwaW5nIC9cbiAgLy8gY2FjaGluZyBhbmQgbWF0Y2hlcyBob3cgdGhlIG90aGVyIGJpbGxpbmcgbGlzdCBlbmRwb2ludHMgc2VuZCBmaWx0ZXJzLlxuICBjb25zdCBib2R5ID0ge1xuICAgIGNzbTogZmlsdGVycz8uY3NtICYmIGZpbHRlcnMuY3NtICE9PSAnQWxsJyA/IGZpbHRlcnMuY3NtIDogJycsXG4gICAgcHJvZHVjdDogZmlsdGVycz8ucHJvZHVjdCAmJiBmaWx0ZXJzLnByb2R1Y3QgIT09ICdBbGwnID8gZmlsdGVycy5wcm9kdWN0IDogJycsXG4gICAgdmFyaWFuY2U6IGZpbHRlcnM/LnZhcmlhbmNlICYmIGZpbHRlcnMudmFyaWFuY2UgIT09ICdBbGwnID8gZmlsdGVycy52YXJpYW5jZSA6ICcnLFxuICAgIHNlYXJjaDogZmlsdGVycz8uc2VhcmNoIHx8ICcnLFxuICB9O1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9iaWxsaW5nU3VtbWFyeWAsIGJvZHkpXG59XG5iYW5rUmVzb2x2ZVRyYW5zYWN0aW9uKGRhdGE6IHsgdHhuSWQ6IHN0cmluZzsgYWN0aW9uOiBzdHJpbmc7IGludm9pY2VJZD86IHN0cmluZzsgaW52b2ljZUlkcz86IHN0cmluZ1tdOyBjbGllbnRJZD86IHN0cmluZzsgY2xpZW50TmFtZT86IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYmFua1N0YXRlbWVudC9yZXNvbHZlYCwgZGF0YSlcbn1cbmdldEFsbEJpbGxpbmdHcm91cHMoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vZ2V0LWFsbC1iaWxsaW5nLWdyb3Vwcz9jbGllbnRJZD0ke2NsaWVudElkfWApXG59XG4vLyA9PT09PSBQYXltZW50IFJlbWluZGVycyAoQmlsbGluZyBTZXR0aW5ncykgPT09PT1cbmdldFBheW1lbnRSZW1pbmRlcihjbGllbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9wYXltZW50LXJlbWluZGVyLyR7Y2xpZW50SWR9YClcbn1cbnNhdmVQYXltZW50UmVtaW5kZXIoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vcGF5bWVudC1yZW1pbmRlcmAsIGRhdGEpXG59XG5nZXRTdWJzY3JpYmVkU3RvcmVzKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJpbGxpbmdBcGlVcmx9L2dldC1zdWJzY3JpYmVkLXN0b3JlLWxpc3RgLCBkYXRhKVxufVxuY3JlYXRlQmlsbGluZ0dyb3VwKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJpbGxpbmdBcGlVcmx9L2NyZWF0ZS1ncm91cGAsIGRhdGEpXG59XG51cGRhdGVCaWxsaW5nR3JvdXAoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS91cGRhdGUtZ3JvdXBgLCBkYXRhKVxufVxuZGVsZXRlQmlsbGluZ0dyb3VwKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLmJpbGxpbmdBcGlVcmx9L2RlbGV0ZS1ncm91cD9faWQ9JHtpZH1gKVxufVxuXG4vLyBHU1RJTiBhZGRyZXNzIGxvb2t1cC4gQ3VycmVudGx5IHRoZSBiYWNrZW5kIHJldHVybnMgYSBkZXRlcm1pbmlzdGljIG1vY2tcbi8vIGJhc2VkIG9uIHRoZSBHU1RJTiBzdGF0ZS1jb2RlIHByZWZpeC4gV2hlbiB3aXJlZCB0byBhIHJlYWwgcHJvdmlkZXIsIHRoZVxuLy8gcmVzcG9uc2Ugc2hhcGUgc3RheXMgdGhlIHNhbWUgc28gY2FsbGVycyBkb24ndCBuZWVkIHRvIGNoYW5nZS5cbmxvb2t1cEdzdGluKGdzdGluOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmJpbGxpbmdBcGlVcmx9L2dzdC1sb29rdXAvJHtlbmNvZGVVUklDb21wb25lbnQoZ3N0aW4pfWApXG59XG51cGRhdGVEYWlseVByaWNpbmdXb3JraW5nRGF5cyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L3VwZGF0ZURhaWx5UHJpY2luZ1dvcmtpbmdEYXlzYCwgZGF0YSlcbn1cbnVwZGF0ZURhaWx5UHJpY2luZ1N0b3JlRmllbGQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS91cGRhdGVEYWlseVByaWNpbmdTdG9yZUZpZWxkYCwgZGF0YSlcbn1cbmdldENsaWVudEJpbGxpbmdJbmZvKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2dldENsaWVudEJpbGxpbmdJbmZvYCwgZGF0YSlcbn1cbmdldEludm9pY2VCeUlkKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2dldEludm9pY2UvJHtpZH1gKVxufVxuZ2V0SW52b2ljZUJhbmtEZXRhaWxzKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2ludm9pY2VCYW5rRGV0YWlscy8ke2lkfWApXG59XG5nZXRJbnZvaWNlQW5uZXh1cmUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vaW52b2ljZUFubmV4dXJlLyR7aWR9YClcbn1cbnVwZGF0ZUludm9pY2UoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS91cGRhdGVJbnZvaWNlYCwgZGF0YSlcbn1cbmNyZWF0ZUludm9pY2UoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vY3JlYXRlSW52b2ljZWAsIGRhdGEpXG59XG5nZXRDbGllbnRCYXNlUHJpY2luZyhjbGllbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9nZXRDbGllbnRCYXNlUHJpY2luZy8ke2NsaWVudElkfWApXG59XG5nZXRDbGllbnRQcm9kdWN0cyhjbGllbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9nZXRDbGllbnRQcm9kdWN0cy8ke2NsaWVudElkfWApXG59XG5kZWxldGVJbnZvaWNlKGludm9pY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9kZWxldGVJbnZvaWNlLyR7aW52b2ljZUlkfWApXG59XG5cbn1cbiJdfQ==
358
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLWJpbGxpbmcvc3JjL2xpYi9jb21wb25lbnRzL3NlcnZpY2VzL2JpbGxpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQThCLE1BQU0sTUFBTSxDQUFDO0FBQ25HLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDOzs7O0FBRTdCLE1BQU0sVUFBVSxHQUFHLGlGQUFpRixDQUFDO0FBQ3JHLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQztBQU1oQyxNQUFNLE9BQU8sY0FBYztJQVdMO0lBQTBCO0lBVjlDLGFBQWEsQ0FBUTtJQUNyQix5QkFBeUIsQ0FBSztJQUV0QixpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNoRSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXBELHNCQUFzQixHQUFHLElBQUksZUFBZSxDQUFNLEVBQUMsS0FBSyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQ3JGLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQTtJQUNoRCxhQUFhLENBQU07SUFDbkIsbUJBQW1CLENBQU07SUFDekIsWUFBb0IsSUFBZ0IsRUFBVSxFQUFzQjtRQUFoRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDbEUsSUFBSSxDQUFDLEVBQUUsQ0FB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Z0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQUNELG9CQUFvQixDQUFDLFFBQWdCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSx5QkFBeUIsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsUUFBZ0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLHNCQUFzQixRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzdFLENBQUM7SUFDRCxhQUFhLENBQUMsU0FBaUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLGtCQUFrQixTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQzdFLENBQUM7d0dBbFdZLGNBQWM7NEdBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlVW50aWwsIGNhdGNoRXJyb3IsIG1hcCx0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xuXG5jb25zdCBFWENFTF9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuY29uc3QgRVhDRUxfRVhURU5TSU9OID0gJy54bHN4JztcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xuIFxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQmlsbGluZ1NlcnZpY2Uge1xuICBpbnZvaWNlQXBpVXJsOnN0cmluZztcbiAgcGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybDphbnk7XG5cbiAgcHJpdmF0ZSByZWxvYWREYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWxvYWREYXRhJCA9IHRoaXMucmVsb2FkRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcGF5bWVudGludm9pY2VGb3JtRGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7dmFsdWU6bnVsbCwgdHlwZTpudWxsLCBmb3JtOm51bGx9KVxuICBkcm9wRG93blRyaWdnZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbClcbiAgYmlsbGluZ0FwaVVybDogYW55O1xuICBicmFuZHNCaWxsaW5nQXBpVXJsOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlKSB7XG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlbnYpID0+IHtcbiAgICAgIGlmIChlbnYpIHtcbiAgICAgICAgdGhpcy5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsID0gZW52LnBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmw7XG4gICAgICAgIHRoaXMuaW52b2ljZUFwaVVybCA9IGVudi5pbnZvaWNlQXBpVXJsXG4gICAgICAgIHRoaXMuYmlsbGluZ0FwaVVybCA9IGVudi5iaWxsaW5nQXBpVXJsXG4gICAgICAgIHRoaXMuYnJhbmRzQmlsbGluZ0FwaVVybCA9IGVudi5icmFuZHNCaWxsaW5nQXBpVXJsXG5cbiAgICAgICAgLy8gdGhpcy5jbGllbnRJZC5uZXh0KCcxMScpXG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gdGhpcy5ncy5zZWxlY3RlZENsaWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlOmFueSk9PntcbiAgICAvLyAgIGlmKGUpe1xuICAgIC8vICAgICBjb25zb2xlLmxvZyhlLCdlJyk7XG4gICAgLy8gICB9XG4gICAgLy8gfSlcbiAgfVxuICB0cmlnZ2VyUmVsb2FkKCkge1xuICAgIHRoaXMucmVsb2FkRGF0YVN1YmplY3QubmV4dCh0cnVlKTtcbiAgfVxuXG4gIFxuICBwdWJsaWMgZXhwb3J0QXNFeGNlbEZpbGUoanNvbjogYW55W10sIGV4Y2VsRmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHdvcmtzaGVldDogWExTWC5Xb3JrU2hlZXQgPSBYTFNYLnV0aWxzLmpzb25fdG9fc2hlZXQoanNvbik7XG4gICAgY29uc3Qgd29ya2Jvb2s6IFhMU1guV29ya0Jvb2sgPSB7IFNoZWV0czogeyAnZGF0YSc6IHdvcmtzaGVldCB9LCBTaGVldE5hbWVzOiBbJ2RhdGEnXSB9O1xuICAgIGNvbnN0IGV4Y2VsQnVmZmVyOiBhbnkgPSBYTFNYLndyaXRlKHdvcmtib29rLCB7IGJvb2tUeXBlOiAneGxzeCcsIHR5cGU6ICdhcnJheScgfSk7XG4gICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIGV4Y2VsRmlsZU5hbWUpO1xuICB9XG4gXG4gIHB1YmxpYyBzYXZlQXNFeGNlbEZpbGUoYnVmZmVyOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcbiAgICAgIHR5cGU6IEVYQ0VMX1RZUEVcbiAgICB9KTtcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIGZpbGVOYW1lICsgJ2xpc3QnKyBFWENFTF9FWFRFTlNJT04pO1xuICB9XG4gXG4gIHB1YmxpYyBzYXZlQXNUZW1wbGF0ZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xuICAgICAgdHlwZTogRVhDRUxfVFlQRVxuICAgIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyBFWENFTF9FWFRFTlNJT04pO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4vLyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbi8vICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuLy8gICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4vLyB9XG4vLyA9PT09PSBFc3RpbWF0ZXMgKEVzdGltYXRlIHRhYikgPT09PT1cbmVzdGltYXRlTGlzdChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS9saXN0YCwgZGF0YSlcbn1cbmVzdGltYXRlTGlzdEV4cG9ydChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS9saXN0YCwgZGF0YSwgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicgfSlcbn1cbmNyZWF0ZUVzdGltYXRlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlL2NyZWF0ZWAsIGRhdGEpXG59XG51cGRhdGVFc3RpbWF0ZShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS91cGRhdGVgLCBkYXRhKVxufVxuZ2V0RXN0aW1hdGUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vZXN0aW1hdGUvJHtpZH1gKVxufVxuZXN0aW1hdGVTdGF0dXNVcGRhdGUoZGF0YTogeyBlc3RpbWF0ZUlkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS9zdGF0dXNVcGRhdGVgLCBkYXRhKVxufVxuc2VuZEVzdGltYXRlKGVzdGltYXRlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlL3NlbmRgLCB7IGVzdGltYXRlSWQgfSlcbn1cbmRlbGV0ZUVzdGltYXRlKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlLyR7aWR9YClcbn1cbmRvd25sb2FkRXN0aW1hdGUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlL2Rvd25sb2FkLyR7aWR9YCwge30sIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXG59XG5pbnZvaWNlVGFibGVEYXRhKCBkYXRhOmFueSk6T2JzZXJ2YWJsZTxhbnk+e1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9jbGllbnRJbnZvaWNlTGlzdGAsIGRhdGEpXG59XG51cGRhdGVDbGllbnRGaWx0ZXJzKGZpbHRlcnM6YW55KXtcbiAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KGZpbHRlcnMpO1xufVxuaW52b2ljZVRhYmxlRGF0YUV4cG9ydCggZGF0YTphbnkpOk9ic2VydmFibGU8YW55PntcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vY2xpZW50SW52b2ljZUxpc3RgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmNsaWVudEJpbGxpbmdJbmZvKHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHBcbiAgICAuZ2V0KGAke3RoaXMucGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybH0vY2xpZW50QmlsbGluZ1N1YnNjcmlwdGlvbkluZm8vJHtwYXJhbXN9YClcbn1cbmludm9pY2VEb3dubG9hZChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9pbnZvaWNlRG93bmxvYWQvJHtkYXRhLl9pZH1gLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJ1bGtJbnZvaWNlRG93bmxvYWQoZGF0YTogeyBpbnZvaWNlSWRzOiBzdHJpbmdbXSB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vaW52b2ljZURvd25sb2FkL2J1bGtgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmFwcHJvdmVJbnZvaWNlQ3NtKGludm9pY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYXBwcm92ZUludm9pY2VDc21gLCB7IGludm9pY2VJZCB9KVxufVxuYXBwcm92ZUludm9pY2VGaW5hbmNlKGludm9pY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYXBwcm92ZUludm9pY2VGaW5hbmNlYCwgeyBpbnZvaWNlSWQgfSlcbn1cbmFwcHJvdmVJbnZvaWNlQXBwcm92YWwoaW52b2ljZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9hcHByb3ZlSW52b2ljZUFwcHJvdmFsYCwgeyBpbnZvaWNlSWQgfSlcbn1cbmdldEludm9pY2VIZWFkcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2dldEludm9pY2VIZWFkc2ApXG59XG51cGRhdGVJbnZvaWNlSGVhZHMoZGF0YTogeyByb2xlOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmcgfCBzdHJpbmdbXSB9W10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS91cGRhdGVJbnZvaWNlSGVhZHNgLCB7IGRhdGEgfSlcbn1cbmludm9pY2VyZWdlcmF0ZShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9yZWdlcmF0ZUludm9pY2VgLCBkYXRhKVxufVxuXG5wYXltZW50U3RhdHVzQ2hhbmdlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L3BheW1lbnRTdGF0dXNDaGFuZ2VgLCBkYXRhKVxufVxuXG4vLyBSZWNvcmQgYSBmdWxsIG9yIHBhcnRpYWwgcGF5bWVudCBhZ2FpbnN0IGFuIGludm9pY2UuIFNlcnZlciBhcHBlbmRzIHRvXG4vLyBwYXltZW50SGlzdG9yeSwgaW5jcmVtZW50cyBwYWlkQW1vdW50LCBhbmQgcmVjb21wdXRlcyBwYXltZW50U3RhdHVzXG4vLyAodW5wYWlkL3BhcnRpYWwvcGFpZCkuIFJldHVybnMgeyBwYWlkQW1vdW50LCBwZW5kaW5nQW1vdW50LCBwYXltZW50U3RhdHVzIH0uXG5yZWNvcmRQYXltZW50KGRhdGE6IHtcbiAgaW52b2ljZUlkOiBzdHJpbmc7XG4gIGFtb3VudDogbnVtYmVyO1xuICBkYXRlPzogc3RyaW5nIHwgRGF0ZTtcbiAgbWV0aG9kPzogc3RyaW5nO1xuICByZWZlcmVuY2U/OiBzdHJpbmc7XG4gIG5vdGVzPzogc3RyaW5nO1xufSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L3JlY29yZFBheW1lbnRgLCBkYXRhKTtcbn1cbmludm9pY2VTZW50KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2ludm9pY2VEb3dubG9hZC8ke2RhdGEuX2lkfWAsIGRhdGEpXG59XG5nZXRpbnZvaWNlKGlkPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsfS9jcmVkaXROb3Rlcy9pbnZvaWNlTGlzdC8ke2lkfWApXG59XG50cmFuc2FjdGlvbkxpc3QoZGF0YT86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2NyZWRpdFRyYW5zYWN0aW9ubGlzdGAsZGF0YSlcbn1cbnRyYW5zYWN0aW9uVGFibGVFeHBvcnQoZGF0YT86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2NyZWRpdFRyYW5zYWN0aW9ubGlzdGAsZGF0YSx7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmNyZWRpdG5vdGV1cGRhdGUoIGRhdGE6YW55KTpPYnNlcnZhYmxlPGFueT57XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmx9L2NyZWRpdE5vdGVzYCwgZGF0YSlcbn1cbmFwcGx5RGlzY291bnQoIGRhdGE6YW55KTpPYnNlcnZhYmxlPGFueT57XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2FwcGx5RGlzY291bnRgLCBkYXRhKVxufVxub25lVGltZUZlZSggZGF0YTphbnksaW52b2ljZUlkOmFueSk6T2JzZXJ2YWJsZTxhbnk+e1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9vbmV0aW1lLXBheW1lbnQvJHtpbnZvaWNlSWR9YCwgZGF0YSlcbn1cbnBlbmRpbmdJbnZvaWNlcyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9wZW5kaW5nSW52b2ljZXNgLCBkYXRhKVxufVxuYnJhbmRzQmlsbGluZ0xpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnJhbmRzQmlsbGluZ0xpc3RgLCBkYXRhKVxufVxuYnJhbmRzQmlsbGluZ0xpc3RFeHBvcnQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnJhbmRzQmlsbGluZ0xpc3RgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJyYW5kSW52b2ljZUxpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnJhbmRJbnZvaWNlTGlzdGAsIGRhdGEpXG59XG5icmFuZEludm9pY2VMaXN0RXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2JyYW5kSW52b2ljZUxpc3RgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmxhdGVzdERhaWx5UHJpY2luZyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9sYXRlc3REYWlseVByaWNpbmdgLCBkYXRhKVxufVxuLy8gQWRkaXRpb25hbCAobm9uLXN0YW5kYXJkKSBwcm9kdWN0cyBiaWxsZWQgcGVyIHN0b3JlIGZvciBhIHNwZWNpZmljIGNsaWVudFxuLy8gKGN1cnJlbnRseSBvbmx5IGNsaWVudElkIDExKS4gUmV0dXJucyB7IGN1cnJlbmN5LCBwcm9kdWN0c1tdIH0uXG5hZGRpdGlvbmFsUHJvZHVjdHMoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYWRkaXRpb25hbFByb2R1Y3RzP2NsaWVudElkPSR7Y2xpZW50SWR9YClcbn1cblxuLy8gUGVyLXByb2R1Y3QgZGV0YWlsZWQgRXhjZWwgZXhwb3J0IGZvciB0aGUgQWRkaXRpb25hbCBQcm9kdWN0cyBzZWN0aW9uLlxuLy8gZGF0ZSAoWVlZWS1NTS1ERCkgaXMgb3B0aW9uYWwg4oCUIHVzZWQgYnkgcHJvZHVjdHMgdGhhdCByZXBvcnQgYnkgYSBkYXkuXG5hZGRpdGlvbmFsUHJvZHVjdEV4cG9ydChjbGllbnRJZDogc3RyaW5nLCBwcm9kdWN0OiBzdHJpbmcsIGRhdGU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICBjb25zdCBkYXRlUGFyYW0gPSBkYXRlID8gYCZkYXRlPSR7ZGF0ZX1gIDogJyc7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYWRkaXRpb25hbFByb2R1Y3RFeHBvcnQ/Y2xpZW50SWQ9JHtjbGllbnRJZH0mcHJvZHVjdD0ke3Byb2R1Y3R9JHtkYXRlUGFyYW19YCwgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicgfSlcbn1cbmxhdGVzdERhaWx5UHJpY2luZ0V4cG9ydChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9sYXRlc3REYWlseVByaWNpbmdgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJyYW5kQmlsbGluZ0dyb3VwcyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9icmFuZEJpbGxpbmdHcm91cHNgLCBkYXRhKVxufVxuYnJhbmRCaWxsaW5nR3JvdXBzRXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2JyYW5kQmlsbGluZ0dyb3Vwc2AsIGRhdGEsIHtyZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcid9KVxufVxuYnVsa0Rvd25sb2FkQmlsbGluZ0dyb3VwcyhjbGllbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IGNsaWVudElkIH0pO1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2J1bGstZG93bmxvYWQtYmlsbGluZy1ncm91cHM/JHtwYXJhbXMudG9TdHJpbmcoKX1gLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJ1bGtVcGRhdGVCaWxsaW5nR3JvdXBzKGZpbGU6IEZpbGUsIGNsaWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAvLyBSZWFkIHRoZSBmaWxlIGFzIGJhc2U2NCBhbmQgUE9TVCBhcyBKU09OLiBNdWx0aXBhcnQvZm9ybS1kYXRhIHdhcyBoaXR0aW5nXG4gIC8vIG11bHRlciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGZvcm1cIiBlcnJvcnM7IHN3aXRjaGluZyB0byBKU09OIHNpZGVzdGVwcyB0aGVcbiAgLy8gbXVsdGVyIHBpcGVsaW5lIGVudGlyZWx5LiBCb2R5LXBhcnNlciBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgYXQgNTAwTUIuXG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiBzdWJzY3JpYmVyLmVycm9yKHJlYWRlci5lcnJvcik7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgLy8gZGF0YVVSTCBpcyBcImRhdGE6PG1pbWU+O2Jhc2U2NCw8cGF5bG9hZD5cIiDigJQgc3RyaXAgdGhlIHByZWZpeC5cbiAgICAgIGNvbnN0IGJhc2U2NCA9IHJlc3VsdC5pbmNsdWRlcygnLCcpID8gcmVzdWx0LnNwbGl0KCcsJylbMV0gOiByZXN1bHQ7XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBjbGllbnRJZCxcbiAgICAgICAgZmlsZW5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgZmlsZUJhc2U2NDogYmFzZTY0LFxuICAgICAgfTtcbiAgICAgIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnVsay11cGRhdGUtYmlsbGluZy1ncm91cHNgLCBwYXlsb2FkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzKSA9PiB7IHN1YnNjcmliZXIubmV4dChyZXMpOyBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVyciksXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICB9KTtcbn1cbi8vID09PT09IEJhbmstc3RhdGVtZW50IHJlY29uY2lsaWF0aW9uIChUcmFuc2FjdGlvbnMgdGFiKSA9PT09PVxudXBsb2FkQmFua1N0YXRlbWVudChmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgLy8gVGhlIHNoZWV0IGlzIHBhcnNlZCBoZXJlIHdpdGggU2hlZXRKUyBhbmQgUE9TVGVkIGFzIEpTT04gcm93cyDigJQgdGhlIEFQSVxuICAvLyBuZXZlciByZWNlaXZlcyBmaWxlIGJ5dGVzOyBpdCB2YWxpZGF0ZXMgYW5kIGNsYXNzaWZpZXMgdGhlIHJvd3MuXG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiBzdWJzY3JpYmVyLmVycm9yKHJlYWRlci5lcnJvcik7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGxldCByb3dzOiBhbnlbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHJhdzp0cnVlIGtlZXBzIENTViBjZWxscyBhcyBwbGFpbiB0ZXh0OiB3aXRob3V0IGl0ICcwMS8wNC8yNidcbiAgICAgICAgLy8gKDEgQXByLCBERC9NTSkgaXMgY29lcmNlZCB0byBhIEphbi00IGRhdGUgY2VsbCAoVVMgTU0vREQpIHdoaWxlXG4gICAgICAgIC8vICcxOC8wNC8yNicgc3RheXMgdGV4dCDigJQgc2lsZW50bHkgY29ycnVwdGluZyBtaXhlZCBkYXRlcy5cbiAgICAgICAgLy8gU2hlZXRKUyB0eXBlOidhcnJheScgZXhwZWN0cyBhIGJ5dGUgYXJyYXkgKFVpbnQ4QXJyYXkpLCBub3QgdGhlIHJhd1xuICAgICAgICAvLyBBcnJheUJ1ZmZlciBGaWxlUmVhZGVyIHJldHVybnMg4oCUIHBhc3NpbmcgdGhlIEFycmF5QnVmZmVyIG1ha2VzIC54bHN4XG4gICAgICAgIC8vIHBhcnNlIHRvIGFuIGVtcHR5IHdvcmtib29rIGFuZCB0aGUgdXBsb2FkIFwiZmFpbHNcIi5cbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KHJlYWRlci5yZXN1bHQgYXMgQXJyYXlCdWZmZXIpO1xuICAgICAgICBjb25zdCB3YiA9IFhMU1gucmVhZChkYXRhLCB7IHR5cGU6ICdhcnJheScsIHJhdzogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3Qgc2hlZXQgPSB3Yi5TaGVldHNbd2IuU2hlZXROYW1lc1swXV07XG4gICAgICAgIHJvd3MgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24oc2hlZXQsIHsgaGVhZGVyOiAxLCBkZWZ2YWw6ICcnLCByYXc6IGZhbHNlIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHsgZXJyb3I6IHsgbWVzc2FnZTogJ0ZhaWxlZCB0byBwYXJzZSB0aGUgc3RhdGVtZW50IGZpbGUnIH0gfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7IGZpbGVOYW1lOiBmaWxlLm5hbWUsIHJvd3MgfTtcbiAgICAgIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYmFua1N0YXRlbWVudC91cGxvYWRgLCBwYXlsb2FkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzKSA9PiB7IHN1YnNjcmliZXIubmV4dChyZXMpOyBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVyciksXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgfSk7XG59XG5iYW5rVHJhbnNhY3Rpb25MaXN0KGZpbHRlcnM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2JhbmtTdGF0ZW1lbnQvbGlzdGAsIGZpbHRlcnMpXG59XG5iYW5rUmVzb2x2ZU9wdGlvbnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9iYW5rU3RhdGVtZW50L3Jlc29sdmVPcHRpb25zYClcbn1cbmJpbGxpbmdTdW1tYXJ5KGZpbHRlcnM/OiB7IGNzbT86IHN0cmluZzsgcHJvZHVjdD86IHN0cmluZzsgdmFyaWFuY2U/OiBzdHJpbmc7IHNlYXJjaD86IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgLy8gUE9TVCBzbyBmaWx0ZXJzIHRyYXZlbCBpbiB0aGUgYm9keSDigJQgYXZvaWRzIGFueSBxdWVyeS1zdHJpbmcgc3RyaXBwaW5nIC9cbiAgLy8gY2FjaGluZyBhbmQgbWF0Y2hlcyBob3cgdGhlIG90aGVyIGJpbGxpbmcgbGlzdCBlbmRwb2ludHMgc2VuZCBmaWx0ZXJzLlxuICBjb25zdCBib2R5ID0ge1xuICAgIGNzbTogZmlsdGVycz8uY3NtICYmIGZpbHRlcnMuY3NtICE9PSAnQWxsJyA/IGZpbHRlcnMuY3NtIDogJycsXG4gICAgcHJvZHVjdDogZmlsdGVycz8ucHJvZHVjdCAmJiBmaWx0ZXJzLnByb2R1Y3QgIT09ICdBbGwnID8gZmlsdGVycy5wcm9kdWN0IDogJycsXG4gICAgdmFyaWFuY2U6IGZpbHRlcnM/LnZhcmlhbmNlICYmIGZpbHRlcnMudmFyaWFuY2UgIT09ICdBbGwnID8gZmlsdGVycy52YXJpYW5jZSA6ICcnLFxuICAgIHNlYXJjaDogZmlsdGVycz8uc2VhcmNoIHx8ICcnLFxuICB9O1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9iaWxsaW5nU3VtbWFyeWAsIGJvZHkpXG59XG5iYW5rUmVzb2x2ZVRyYW5zYWN0aW9uKGRhdGE6IHsgdHhuSWQ6IHN0cmluZzsgYWN0aW9uOiBzdHJpbmc7IGludm9pY2VJZD86IHN0cmluZzsgaW52b2ljZUlkcz86IHN0cmluZ1tdOyBjbGllbnRJZD86IHN0cmluZzsgY2xpZW50TmFtZT86IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYmFua1N0YXRlbWVudC9yZXNvbHZlYCwgZGF0YSlcbn1cbmdldEFsbEJpbGxpbmdHcm91cHMoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vZ2V0LWFsbC1iaWxsaW5nLWdyb3Vwcz9jbGllbnRJZD0ke2NsaWVudElkfWApXG59XG5cbi8vID09PT09IFB1cmNoYXNlIE9yZGVycyAoYnJhbmQtdmlldyBQdXJjaGFzZSBPcmRlciB0YWIpID09PT09XG5nZXRQdXJjaGFzZU9yZGVycyhjbGllbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9wdXJjaGFzZS1vcmRlcnM/Y2xpZW50SWQ9JHtjbGllbnRJZH1gKVxufVxuY3JlYXRlUHVyY2hhc2VPcmRlcihkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAvLyBkYXRhIGlzIEZvcm1EYXRhIChtYXkgaW5jbHVkZSBhIFBPIFBERiBmaWxlKS5cbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vcHVyY2hhc2Utb3JkZXJzYCwgZGF0YSlcbn1cblxuLy8gPT09PT0gUGF5bWVudCBSZW1pbmRlcnMgKEJpbGxpbmcgU2V0dGluZ3MpID09PT09XG5nZXRQYXltZW50UmVtaW5kZXIoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vcGF5bWVudC1yZW1pbmRlci8ke2NsaWVudElkfWApXG59XG5zYXZlUGF5bWVudFJlbWluZGVyKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJpbGxpbmdBcGlVcmx9L3BheW1lbnQtcmVtaW5kZXJgLCBkYXRhKVxufVxuZ2V0U3Vic2NyaWJlZFN0b3JlcyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9nZXQtc3Vic2NyaWJlZC1zdG9yZS1saXN0YCwgZGF0YSlcbn1cbmNyZWF0ZUJpbGxpbmdHcm91cChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9jcmVhdGUtZ3JvdXBgLCBkYXRhKVxufVxudXBkYXRlQmlsbGluZ0dyb3VwKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vdXBkYXRlLWdyb3VwYCwgZGF0YSlcbn1cbmRlbGV0ZUJpbGxpbmdHcm91cChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9kZWxldGUtZ3JvdXA/X2lkPSR7aWR9YClcbn1cblxuLy8gR1NUSU4gYWRkcmVzcyBsb29rdXAuIEN1cnJlbnRseSB0aGUgYmFja2VuZCByZXR1cm5zIGEgZGV0ZXJtaW5pc3RpYyBtb2NrXG4vLyBiYXNlZCBvbiB0aGUgR1NUSU4gc3RhdGUtY29kZSBwcmVmaXguIFdoZW4gd2lyZWQgdG8gYSByZWFsIHByb3ZpZGVyLCB0aGVcbi8vIHJlc3BvbnNlIHNoYXBlIHN0YXlzIHRoZSBzYW1lIHNvIGNhbGxlcnMgZG9uJ3QgbmVlZCB0byBjaGFuZ2UuXG5sb29rdXBHc3Rpbihnc3Rpbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9nc3QtbG9va3VwLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGdzdGluKX1gKVxufVxudXBkYXRlRGFpbHlQcmljaW5nV29ya2luZ0RheXMoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS91cGRhdGVEYWlseVByaWNpbmdXb3JraW5nRGF5c2AsIGRhdGEpXG59XG51cGRhdGVEYWlseVByaWNpbmdTdG9yZUZpZWxkKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vdXBkYXRlRGFpbHlQcmljaW5nU3RvcmVGaWVsZGAsIGRhdGEpXG59XG5nZXRDbGllbnRCaWxsaW5nSW5mbyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9nZXRDbGllbnRCaWxsaW5nSW5mb2AsIGRhdGEpXG59XG5nZXRJbnZvaWNlQnlJZChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9nZXRJbnZvaWNlLyR7aWR9YClcbn1cbmdldEludm9pY2VCYW5rRGV0YWlscyhpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9pbnZvaWNlQmFua0RldGFpbHMvJHtpZH1gKVxufVxuZ2V0SW52b2ljZUFubmV4dXJlKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2ludm9pY2VBbm5leHVyZS8ke2lkfWApXG59XG51cGRhdGVJbnZvaWNlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vdXBkYXRlSW52b2ljZWAsIGRhdGEpXG59XG5jcmVhdGVJbnZvaWNlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2NyZWF0ZUludm9pY2VgLCBkYXRhKVxufVxuZ2V0Q2xpZW50QmFzZVByaWNpbmcoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vZ2V0Q2xpZW50QmFzZVByaWNpbmcvJHtjbGllbnRJZH1gKVxufVxuZ2V0Q2xpZW50UHJvZHVjdHMoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vZ2V0Q2xpZW50UHJvZHVjdHMvJHtjbGllbnRJZH1gKVxufVxuZGVsZXRlSW52b2ljZShpbnZvaWNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMuaW52b2ljZUFwaVVybH0vZGVsZXRlSW52b2ljZS8ke2ludm9pY2VJZH1gKVxufVxuXG59XG4iXX0=