tango-app-ui-store-builder 1.0.47 → 1.0.49

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 (54) hide show
  1. package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +39 -19
  2. package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +233 -138
  3. package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +4 -2
  4. package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +4 -2
  5. package/esm2022/lib/components/fixture-template/template-basic-details/template-basic-details.component.mjs +40 -4
  6. package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +3 -3
  7. package/esm2022/lib/components/fixture-template/template-summary/template-summary.component.mjs +3 -3
  8. package/esm2022/lib/components/fixture-template/template-vms/template-vms.component.mjs +108 -79
  9. package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +7 -3
  10. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +4 -2
  11. package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +27 -4
  12. package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +3 -3
  13. package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +10 -14
  14. package/esm2022/lib/components/manage-store-plano/verification-feedback/editable-fixture/editable-fixture.component.mjs +3 -3
  15. package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +3 -3
  16. package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +4 -2
  17. package/esm2022/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.mjs +11 -5
  18. package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +14 -9
  19. package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.mjs +39 -7
  20. package/esm2022/lib/components/planogram/merch-compliance/zone-products/zone-products.component.mjs +18 -5
  21. package/esm2022/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.mjs +68 -0
  22. package/esm2022/lib/components/planogram/plano-analytics/date-range-picker/date-range-picker.component.mjs +5 -5
  23. package/esm2022/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.mjs +649 -0
  24. package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +1197 -25
  25. package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +14 -7
  26. package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +8 -4
  27. package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +17 -9
  28. package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +3 -3
  29. package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -2
  30. package/esm2022/lib/components/store-plano/store-plano.component.mjs +4 -2
  31. package/esm2022/lib/interfaces/fixture-library.interface.mjs +1 -1
  32. package/esm2022/lib/services/store-builder.service.mjs +4 -1
  33. package/esm2022/lib/tango-store-builder.module.mjs +8 -2
  34. package/fesm2022/tango-app-ui-store-builder.mjs +2996 -834
  35. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  36. package/lib/components/create-fixture/create-fixture.component.d.ts +15 -14
  37. package/lib/components/fixture-template/template-basic-details/template-basic-details.component.d.ts +2 -0
  38. package/lib/components/fixture-template/template-vms/template-vms.component.d.ts +12 -12
  39. package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +2 -2
  40. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +4 -4
  41. package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +2 -0
  42. package/lib/components/manage-store-plano/template-vms/template-vms.component.d.ts +0 -1
  43. package/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.d.ts +4 -2
  44. package/lib/components/planogram/merch-compliance/product-locator/product-locator.component.d.ts +3 -2
  45. package/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.d.ts +10 -3
  46. package/lib/components/planogram/merch-compliance/zone-products/zone-products.component.d.ts +4 -2
  47. package/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.d.ts +25 -0
  48. package/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.d.ts +94 -0
  49. package/lib/components/planogram/plano-analytics/plano-analytics.component.d.ts +76 -3
  50. package/lib/components/planogram/plano-details-parent/plano-details-parent.component.d.ts +3 -2
  51. package/lib/interfaces/fixture-library.interface.d.ts +1 -1
  52. package/lib/services/store-builder.service.d.ts +1 -0
  53. package/lib/tango-store-builder.module.d.ts +26 -24
  54. package/package.json +1 -1
@@ -796,7 +796,8 @@ export class StorePlanoTreeViewComponent {
796
796
  stroke: "transparent",
797
797
  fill: "transparent",
798
798
  });
799
- const bottomTextContent = new fabric.Textbox(`Shelves - ${mf.shelfConfig.length} . Products - ${mf.fixtureCapacity} . VM - ${mf.vmConfig.length}`, {
799
+ const actualShelfCount = mf?.shelfConfig?.filter((s) => s.shelfType != "vmonly")?.length ?? 0;
800
+ const bottomTextContent = new fabric.Textbox(`Shelves - ${actualShelfCount} . Products - ${mf.fixtureCapacity} . VM - ${mf.vmConfig.length}`, {
800
801
  left: bottomX + bottomWidth / 2,
801
802
  top: bottomY + bottomHeight / 2 + 4,
802
803
  fontSize: 5,
@@ -1197,4 +1198,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1197
1198
  type: ViewChild,
1198
1199
  args: ["templateCanvas", { static: false }]
1199
1200
  }] } });
1200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtcGxhbm8tdHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3N0b3JlLXBsYW5vL3N0b3JlLXBsYW5vLXRyZWUtdmlldy9zdG9yZS1wbGFuby10cmVlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvc3RvcmUtcGxhbm8vc3RvcmUtcGxhbm8tdHJlZS12aWV3L3N0b3JlLXBsYW5vLXRyZWUtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFTbkUsTUFBTSxPQUFPLDJCQUEyQjtJQTBCbEI7SUF2QlgsVUFBVSxDQUFRO0lBQ2pCLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFHckQsUUFBUSxDQUFpQztJQUV6QyxNQUFNLENBQWlCO0lBRXZCLGNBQWMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQVM7SUFFZixrQkFBa0IsR0FBVSxFQUFFLENBQUM7SUFDL0IsdUJBQXVCLEdBQVUsRUFBRSxDQUFDO0lBQ3BDLFlBQVksR0FBVSxFQUFFLENBQUM7SUFFekIsaUJBQWlCLENB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TSxDQUNMLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFlBQVksTUFBTSxDQUFDLEtBQUssSUFBSyxHQUFXLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FDekUsQ0FBQztRQUVKLElBQUksVUFBVSxFQUFFO1lBQ2QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQW5rRFUsMkJBQTJCOzRGQUEzQiwyQkFBMkIsMlNDdEJ4QyxpakRBNEJBOzs0RkROYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUk7dUZBS1AsVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBR1AsUUFBUTtzQkFEUCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0ICogYXMgZmFicmljIGZyb20gXCJmYWJyaWNcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJzdG9yZS1wbGFuby10cmVlLXZpZXdcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3N0b3JlLXBsYW5vLXRyZWUtdmlldy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vc3RvcmUtcGxhbm8tdHJlZS12aWV3LmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN0b3JlUGxhbm9UcmVlVmlld0NvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcclxue1xyXG4gIEBJbnB1dCgpIGFsbEZpeHR1cmU6IGFueVtdO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEluc3RhbmNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0ZW1wbGF0ZUNhbnZhc1wiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBjYW52YXNFbCE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG5cclxuICBjYW52YXMhOiBmYWJyaWMuQ2FudmFzO1xyXG5cclxuICB2ZXJ0aWNhbE1hcmdpbiA9ICgxLjI1IC8gMTAwKSAqIHRoaXMudG9QaXhlbHMoMTUyNCwgXCJtbVwiKTtcclxuICBjZG5Vcmw6IHN0cmluZztcclxuXHJcbiAgYWxsTWFzdGVyVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xyXG4gIHN1YlRlbXBsYXRlczogYW55W10gPSBbXTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cE5hbWU6IHN0cmluZyB8IG51bGw7XHJcbiAgc2VsZWN0ZWRNYXN0ZXJJZDogc3RyaW5nO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcmV2ZW50Q2xpY2s6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyB1c2VkIHRvIHJlc3RyaWN0IGZ1cnRoZXIgY2xpY2tzIG9uIGNhbnZhcyBpdGVtcyB3aGlsZSBhbiBBUEkgY2FsbCBpcyBpbiBwcm9ncmVzcy5cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSkge1xyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB0aGlzLmNkblVybCA9IGUucGxhbm9ncmFtQ0ROO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoYW5nZXNbXCJhbGxGaXh0dXJlXCJdPy5jdXJyZW50VmFsdWUgJiZcclxuICAgICAgIWNoYW5nZXNbXCJhbGxGaXh0dXJlXCJdPy5maXJzdENoYW5nZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYnVpbGRUcmVlVmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW52YXMgPSBuZXcgZmFicmljLkNhbnZhcyh0aGlzLmNhbnZhc0VsPy5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIHNlbGVjdGlvbkZ1bGx5Q29udGFpbmVkOiB0cnVlLFxyXG4gICAgICBwZXJQaXhlbFRhcmdldEZpbmQ6IHRydWUsXHJcbiAgICAgIHRhcmdldEZpbmRUb2xlcmFuY2U6IDUsXHJcbiAgICAgIGhlaWdodDogNjAwLFxyXG4gICAgICB3aWR0aDogODAwLFxyXG4gICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVzaXplQ2FudmFzVG9QYXJlbnRTaXplKCk7XHJcblxyXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgXCJyZXNpemVcIilcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNpemVDYW52YXNUb1BhcmVudFNpemUoKSk7XHJcblxyXG4gICAgdGhpcy5zZXR1cFpvb21IYW5kbGVycygpO1xyXG5cclxuICAgIHRoaXMuYnVpbGRUcmVlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgdG9QaXhlbHModmFsdWU6IG51bWJlciwgdW5pdDogc3RyaW5nLCBkcGkgPSAyLjgpOiBudW1iZXIge1xyXG4gICAgbGV0IHBpeGVsczogbnVtYmVyO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcihwaXhlbHMudG9GaXhlZCgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRHcm91cENlbnRlckJvdHRvbShncm91cDogZmFicmljLkdyb3VwKTogeyBneDogbnVtYmVyOyBneTogbnVtYmVyIH0ge1xyXG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuICAgIGNvbnN0IGNlbnRlclggPSBjZW50ZXIueDtcclxuICAgIGNvbnN0IGJvdHRvbVkgPSBncm91cC50b3AhICsgZ3JvdXAuaGVpZ2h0ITtcclxuICAgIHJldHVybiB7IGd4OiBjZW50ZXJYLCBneTogYm90dG9tWSB9O1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQWRhcHRpdmVUZXh0KFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICBmb250U2l6ZTogbnVtYmVyO1xyXG4gICAgICBtYXhIZWlnaHQ6IG51bWJlcjtcclxuICAgICAgd2lkdGg6IG51bWJlcjtcclxuICAgICAgbGVmdDogbnVtYmVyO1xyXG4gICAgICB0b3A6IG51bWJlcjtcclxuICAgICAgZmlsbDogc3RyaW5nO1xyXG4gICAgICBmb250V2VpZ2h0Pzogc3RyaW5nO1xyXG4gICAgfVxyXG4gICk6IGZhYnJpYy5UZXh0Ym94IHtcclxuICAgIGxldCBmb250U2l6ZSA9IG9wdGlvbnMuZm9udFNpemU7XHJcbiAgICBsZXQgdGV4dEVsZW1lbnQ6IGZhYnJpYy5UZXh0Ym94O1xyXG5cclxuICAgIGRvIHtcclxuICAgICAgdGV4dEVsZW1lbnQgPSBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogb3B0aW9ucy5mb250V2VpZ2h0IHx8IFwiNTAwXCIsXHJcbiAgICAgICAgZmlsbDogb3B0aW9ucy5maWxsLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG9wdGlvbnMud2lkdGgsXHJcbiAgICAgICAgbGVmdDogb3B0aW9ucy5sZWZ0LFxyXG4gICAgICAgIHRvcDogb3B0aW9ucy50b3AsXHJcbiAgICAgIH0pO1xyXG4gICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICB9IHdoaWxlICh0ZXh0RWxlbWVudC5oZWlnaHQgPiBvcHRpb25zLm1heEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgIHJldHVybiB0ZXh0RWxlbWVudDtcclxuICB9XHJcblxyXG4gIGJ1aWxkVHJlZVZpZXcoKSB7XHJcbiAgICB0aGlzLmNhbnZhcz8uY2xlYXIoKTtcclxuICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuICAgIHRoaXMuYWxsTWFzdGVyVGVtcGxhdGVzID0gdGhpcy5hbGxGaXh0dXJlO1xyXG5cclxuICAgIC8vIE9uY2UgdGhlIG1hc3RlciB0ZW1wbGF0ZSBpcyBmZXRjaGVkLCByZW5kZXIgdGhlIGdyb3VwIG5hbWVzLlxyXG4gICAgdGhpcy5yZW5kZXJHcm91cE5hbWVzKCk7XHJcbiAgfVxyXG5cclxuICBzZXR1cFpvb21IYW5kbGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6d2hlZWxcIiwgKG9wdDogZmFicmljLlRFdmVudDxXaGVlbEV2ZW50PikgPT4ge1xyXG4gICAgICBjb25zdCBlID0gb3B0LmU7XHJcblxyXG4gICAgICBpZiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xyXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5kZWx0YVk7XHJcbiAgICAgICAgbGV0IHpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICAgICAgem9vbSAqPSAwLjk5NSAqKiBkZWx0YTtcclxuXHJcbiAgICAgICAgem9vbSA9IE1hdGgubWF4KDAuMiwgTWF0aC5taW4oem9vbSwgMykpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy56b29tVG9Qb2ludChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgeDogZS5vZmZzZXRYLFxyXG4gICAgICAgICAgICB5OiBlLm9mZnNldFksXHJcbiAgICAgICAgICB9IGFzIGZhYnJpYy5Qb2ludCxcclxuICAgICAgICAgIHpvb21cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIGxldCBsYXN0UG9zWCA9IDA7XHJcbiAgICBsZXQgbGFzdFBvc1kgPSAwO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6ZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOm1vdmVcIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0RyYWdnaW5nICYmIHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtKSB7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtO1xyXG4gICAgICAgIHZwdFs0XSArPSBlLmNsaWVudFggLSBsYXN0UG9zWDtcclxuICAgICAgICB2cHRbNV0gKz0gZS5jbGllbnRZIC0gbGFzdFBvc1k7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOnVwXCIsICgpID0+IHtcclxuICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB6b29tSW4oKSB7XHJcbiAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbih6b29tICsgMC4yLCAzKTtcclxuICAgIHRoaXMuc21vb3RoWm9vbSh0YXJnZXRab29tKTtcclxuICB9XHJcblxyXG4gIHpvb21PdXQoKSB7XHJcbiAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1heCh6b29tIC0gMC4yLCAwLjIpO1xyXG4gICAgdGhpcy5zbW9vdGhab29tKHRhcmdldFpvb20pO1xyXG4gIH1cclxuXHJcbiAgc21vb3RoWm9vbSh0YXJnZXRab29tOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGNlbnRlciA9IG5ldyBmYWJyaWMuUG9pbnQoXHJcbiAgICAgIHRoaXMuY2FudmFzLmdldFdpZHRoKCkgLyAyLFxyXG4gICAgICB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKSAvIDJcclxuICAgICk7XHJcbiAgICBjb25zdCBjdXJyZW50Wm9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHN0ZXBzID0gMTA7XHJcbiAgICBjb25zdCBzdGVwU2l6ZSA9ICh0YXJnZXRab29tIC0gY3VycmVudFpvb20pIC8gc3RlcHM7XHJcbiAgICBsZXQgc3RlcCA9IDA7XHJcblxyXG4gICAgY29uc3QgYW5pbWF0ZSA9ICgpID0+IHtcclxuICAgICAgaWYgKHN0ZXAgPCBzdGVwcykge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KGNlbnRlciwgY3VycmVudFpvb20gKyBzdGVwU2l6ZSAqIChzdGVwICsgMSkpO1xyXG4gICAgICAgIHN0ZXArKztcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoY2VudGVyLCB0YXJnZXRab29tKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBhbmltYXRlKCk7XHJcbiAgfVxyXG5cclxuICByZXNpemVDYW52YXNUb1BhcmVudFNpemUoKSB7XHJcbiAgICBjb25zdCBjYW52YXNDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgXCJ0cmVlLWNhbnZhcy1jYXJkXCJcclxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoY2FudmFzQ29sKSB7XHJcbiAgICAgIGNvbnN0IHdpZHRoID0gY2FudmFzQ29sLm9mZnNldFdpZHRoIC0gMzI7XHJcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNhbnZhc0NvbC5vZmZzZXRIZWlnaHQgLSAzMjtcclxuICAgICAgdGhpcy5jaGFuZ2VDYW52YXNTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlQ2FudmFzU2l6ZShuZXdXaWR0aDogbnVtYmVyLCBuZXdIZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgY2FudmFzRWxlbWVudCA9IHRoaXMuY2FudmFzRWwubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICBjYW52YXNFbGVtZW50LndpZHRoID0gbmV3V2lkdGg7XHJcbiAgICBjYW52YXNFbGVtZW50LmhlaWdodCA9IG5ld0hlaWdodDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5zZXRXaWR0aChuZXdXaWR0aCk7XHJcbiAgICB0aGlzLmNhbnZhcy5zZXRIZWlnaHQobmV3SGVpZ2h0KTtcclxuICAgIHRoaXMuY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gUkVOREVSSU5HIE1FVEhPRFMgPT09PT09PT09PT09PT09PT09PT1cclxuICByZW5kZXJHcm91cE5hbWVzKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9IG51bGw7XHJcbiAgICBjb25zdCBtYXN0ZXJHcm91cE5hbWVzID0gW1xyXG4gICAgICAuLi5uZXcgU2V0KFxyXG4gICAgICAgIHRoaXMuYWxsTWFzdGVyVGVtcGxhdGVzXHJcbiAgICAgICAgICAuZmlsdGVyKChmKSA9PiBmLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIilcclxuICAgICAgICAgIC5tYXAoKG0pID0+IG0udGVtcGxhdGVHcm91cE5hbWUpXHJcbiAgICAgICksXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICghbWFzdGVyR3JvdXBOYW1lcy5sZW5ndGgpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgXCJAQCB+IHJlbmRlckdyb3VwTmFtZXMgW0VSUl06IChub2UgZ3JvdXAgbmFtZXMgZm91bmQpOiBcIixcclxuICAgICAgICBtYXN0ZXJHcm91cE5hbWVzXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID8/PSBtYXN0ZXJHcm91cE5hbWVzWzBdO1xyXG5cclxuICAgIGNvbnN0IHkgPSA1MDtcclxuICAgIGNvbnN0IGdyb3VwU3BhY2luZyA9IDIwO1xyXG5cclxuICAgIGNvbnN0IGdyb3VwczogZmFicmljLkdyb3VwW10gPSBbXTtcclxuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuXHJcbiAgICBtYXN0ZXJHcm91cE5hbWVzLmZvckVhY2goKGcpID0+IHtcclxuICAgICAgaWYgKCFnKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IGxhYmVsID0gZztcclxuICAgICAgY29uc3QgZm9udFNpemUgPSAxMjtcclxuICAgICAgY29uc3QgcGFkZGluZ1ggPSAzMDtcclxuICAgICAgY29uc3QgcGFkZGluZ1kgPSAxNjtcclxuXHJcbiAgICAgIGNvbnN0IG1haW5UZXh0ID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KGxhYmVsLCB7XHJcbiAgICAgICAgZm9udFNpemU6IGZvbnRTaXplLFxyXG4gICAgICAgIGZpbGw6IFwiIzM2M0Y3MlwiLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXIsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IG1haW5UZXh0LndpZHRoISArIDIgKiBwYWRkaW5nWDtcclxuICAgICAgY29uc3QgcmVjdEhlaWdodCA9IG1haW5UZXh0LmhlaWdodCEgKyAyICogcGFkZGluZ1k7XHJcbiAgICAgIGNvbnN0IHJlY3RMZWZ0ID0gMzA7XHJcbiAgICAgIGNvbnN0IHJlY3RUb3AgPSAxODtcclxuXHJcbiAgICAgIGNvbnN0IG1haW5SZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNixcclxuICAgICAgICByeTogNixcclxuICAgICAgICB3aWR0aDogcmVjdFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICBmaWxsOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiI0Y4RjlGQ1wiIDogXCIjZmZmXCIsXHJcbiAgICAgICAgc3Ryb2tlOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiI0FGQjVEOVwiIDogXCIjRDBENUREXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgbGVmdDogcmVjdExlZnQsXHJcbiAgICAgICAgdG9wOiByZWN0VG9wLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1haW5UZXh0LnNldCh7XHJcbiAgICAgICAgbGVmdDogcmVjdExlZnQgKyBwYWRkaW5nWCxcclxuICAgICAgICB0b3A6IHJlY3RUb3AgKyAocmVjdEhlaWdodCAtIG1haW5UZXh0LmhlaWdodCEpIC8gMixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBidWJibGVXID0gMzY7XHJcbiAgICAgIGNvbnN0IGJ1YmJsZUggPSAxODtcclxuICAgICAgY29uc3QgYnViYmxlTGVmdCA9IHJlY3RMZWZ0ICsgcmVjdFdpZHRoIC8gMiAtIGJ1YmJsZVcgLyAyO1xyXG4gICAgICBjb25zdCBidWJibGVUb3AgPSByZWN0SGVpZ2h0ICsgYnViYmxlSCAvIDI7XHJcblxyXG4gICAgICBjb25zdCBidWJibGVSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNCxcclxuICAgICAgICByeTogNCxcclxuICAgICAgICB3aWR0aDogYnViYmxlVyxcclxuICAgICAgICBoZWlnaHQ6IGJ1YmJsZUgsXHJcbiAgICAgICAgZmlsbDogdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwgPyBcIiM4Mzg5YzVcIiA6IFwiIzk4QTJCM1wiLFxyXG4gICAgICAgIGxlZnQ6IGJ1YmJsZUxlZnQsXHJcbiAgICAgICAgdG9wOiBidWJibGVUb3AsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZ3JvdXBDb3VudCA9IHRoaXMuYWxsTWFzdGVyVGVtcGxhdGVzLmZpbHRlcihcclxuICAgICAgICAobSkgPT4gbS50ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gZyAmJiBtLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIlxyXG4gICAgICApLmxlbmd0aDtcclxuXHJcbiAgICAgIGNvbnN0IG51bWJlclRleHQgPSBuZXcgZmFicmljLkZhYnJpY1RleHQoZ3JvdXBDb3VudC50b1N0cmluZygpLCB7XHJcbiAgICAgICAgZm9udFNpemU6IDgsXHJcbiAgICAgICAgZmlsbDogXCIjZmZmXCIsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlciwgQXJpYWwsIHNhbnMtc2VyaWZcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjcwMFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICBsZWZ0OiBidWJibGVMZWZ0ICsgYnViYmxlVyAvIDIsXHJcbiAgICAgICAgdG9wOiBidWJibGVUb3AgKyBidWJibGVIIC8gMixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoXHJcbiAgICAgICAgW21haW5SZWN0LCBtYWluVGV4dCwgYnViYmxlUmVjdCwgbnVtYmVyVGV4dF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgICAgIH1cclxuICAgICAgKSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgICAgZ3JvdXBOYW1lOiBzdHJpbmc7XHJcbiAgICAgICAgbWFzdGVyQ291bnQ6IG51bWJlcjtcclxuICAgICAgICBtYWluUmVjdDogZmFicmljLlJlY3Q7XHJcbiAgICAgICAgYnViYmxlUmVjdDogZmFicmljLlJlY3Q7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBncm91cC5ncm91cE5hbWUgPSBsYWJlbDtcclxuICAgICAgZ3JvdXAubWFzdGVyQ291bnQgPSBncm91cENvdW50O1xyXG4gICAgICBncm91cC5tYWluUmVjdCA9IG1haW5SZWN0O1xyXG4gICAgICBncm91cC5idWJibGVSZWN0ID0gYnViYmxlUmVjdDtcclxuXHJcbiAgICAgIGdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcmV2ZW50Q2xpY2spIHJldHVybjtcclxuICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IHByZXZHcm91cCA9IHRoaXMuY2FudmFzXHJcbiAgICAgICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgICAgICAuZmluZChcclxuICAgICAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgICAgICBvYmogaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXAgJiZcclxuICAgICAgICAgICAgICAob2JqIGFzIGFueSkuZ3JvdXBOYW1lID09PSB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lXHJcbiAgICAgICAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgICAgIG1haW5SZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgICAgIGJ1YmJsZVJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChwcmV2R3JvdXApIHtcclxuICAgICAgICAgIHByZXZHcm91cC5tYWluUmVjdC5zZXQoeyBmaWxsOiBcIiNmZmZmZmZcIiwgc3Ryb2tlOiBcIiNEMEQ1RERcIiB9KTtcclxuICAgICAgICAgIHByZXZHcm91cC5idWJibGVSZWN0LnNldCh7IGZpbGw6IFwiIzk4QTJCM1wiIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ3JvdXAubWFpblJlY3Quc2V0KHsgZmlsbDogXCIjRjhGOUZDXCIsIHN0cm9rZTogXCIjQUZCNUQ5XCIgfSk7XHJcbiAgICAgICAgZ3JvdXAuYnViYmxlUmVjdC5zZXQoeyBmaWxsOiBcIiM4Mzg5YzVcIiB9KTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgYm90aCBtYXN0ZXJzIGFuZCBzdWJzIGFycm93cywgYmVmb3JlIHJlbmRlcmluZyBuZXcgc2V0LlxyXG4gICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZEdyb3VwTmFtZSEpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZE1hc3RlcklkKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9IGxhYmVsO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gb3B0LnRhcmdldDtcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCkge1xyXG4gICAgICAgICAgY29uc3QgcGFyZW50R3JvdXAgPSB0YXJnZXQgYXMgZmFicmljLkdyb3VwO1xyXG4gICAgICAgICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20ocGFyZW50R3JvdXApO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJNYXN0ZXJGaXh0dXJlcyhneCwgZ3kgKyA1MCwgcGFyZW50R3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBncm91cHMucHVzaChncm91cCk7XHJcbiAgICAgIHRvdGFsV2lkdGggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdG90YWxXaWR0aCAtPSBncm91cFNwYWNpbmc7XHJcblxyXG4gICAgY29uc3QgY2FudmFzV2lkdGggPSB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgbGV0IHggPSAoY2FudmFzV2lkdGggLSB0b3RhbFdpZHRoKSAvIDI7XHJcblxyXG4gICAgZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XHJcbiAgICAgIGdyb3VwLnNldCh7IGxlZnQ6IHgsIHRvcDogeSB9KTtcclxuICAgICAgeCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICAgIHRoaXMuY2FudmFzLmFkZChncm91cCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwRmFicmljR3JvdXAgPSBncm91cHNbMF07XHJcblxyXG4gICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20oc2VsZWN0ZWRHcm91cEZhYnJpY0dyb3VwKTtcclxuICAgIHRoaXMucmVuZGVyTWFzdGVyRml4dHVyZXMoZ3gsIGd5ICsgNTAsIHNlbGVjdGVkR3JvdXBGYWJyaWNHcm91cCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJNYXN0ZXJGaXh0dXJlcyh4OiBudW1iZXIsIHk6IG51bWJlciwgZ3JvdXA/OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXMgPSB0aGlzLmFsbE1hc3RlclRlbXBsYXRlcy5maWx0ZXIoXHJcbiAgICAgIChmKSA9PlxyXG4gICAgICAgIGYudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiICYmXHJcbiAgICAgICAgZi50ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwTmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSB0aGlzLnNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzWzBdLl9pZDtcclxuICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcIm1hc3RlclwiKTtcclxuICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcInN1YlwiKTtcclxuXHJcbiAgICBjb25zdCBtYXN0ZXJzOiBhbnlbXSA9IGF3YWl0IHRoaXMucmVuZGVyRml4dHVyZXMoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXMsXHJcbiAgICAgIHgsXHJcbiAgICAgIHlcclxuICAgICk7XHJcblxyXG4gICAgbWFzdGVycy5mb3JFYWNoKChtKSA9PiB0aGlzLmRyYXdBcnJvdyhncm91cCwgbSwgZ3JvdXAuZ3JvdXBOYW1lKSk7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRNYXN0ZXJGYWJyaWNHcm91cCA9IG1hc3RlcnNbMF07XHJcbiAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShzZWxlY3RlZE1hc3RlckZhYnJpY0dyb3VwKTtcclxuICAgIHRoaXMucmVuZGVyU3ViRml4dHVyZXMoc2VsZWN0ZWRNYXN0ZXJGYWJyaWNHcm91cCwgZ3gsIGd5ICsgNTApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyU3ViRml4dHVyZXMoZ3JvdXA6IGFueSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgIHRoaXMuc3ViVGVtcGxhdGVzID1cclxuICAgICAgdGhpcy5hbGxGaXh0dXJlPy5maWx0ZXIoXHJcbiAgICAgICAgKGYpID0+IGYubWFzdGVyVGVtcGxhdGVJZCA9PT0gdGhpcy5zZWxlY3RlZE1hc3RlcklkXHJcbiAgICAgICkgPz8gW107XHJcbiAgICBpZiAodGhpcy5zdWJUZW1wbGF0ZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHN1YjogYW55W10gPSBhd2FpdCB0aGlzLnJlbmRlckZpeHR1cmVzKFxyXG4gICAgICAgIHRoaXMuc3ViVGVtcGxhdGVzLFxyXG4gICAgICAgIHgsXHJcbiAgICAgICAgeSxcclxuICAgICAgICBncm91cFxyXG4gICAgICApO1xyXG4gICAgICBzdWIuZm9yRWFjaCgobSkgPT4gdGhpcy5kcmF3QXJyb3coZ3JvdXAsIG0sIGdyb3VwLmZpeHR1cmVJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJldmVudENsaWNrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJGaXh0dXJlcyhcclxuICAgIHRlbXBsYXRlczogYW55W10sXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBwYXJlbnRGYWJyaWM/OiBhbnlcclxuICApIHtcclxuICAgIGNvbnN0IGdyb3VwU3BhY2luZyA9IDIwO1xyXG5cclxuICAgIHR5cGUgRml4dHVyZUdyb3VwID0gZmFicmljLkdyb3VwICYge1xyXG4gICAgICBmaXh0dXJlSWQ6IHN0cmluZztcclxuICAgICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiO1xyXG4gICAgICBncm91cE5hbWU6IHN0cmluZztcclxuICAgICAgdGVtcGxhdGVUeXBlOiBzdHJpbmc7XHJcbiAgICAgIG5hbWU6IHN0cmluZztcclxuICAgICAgcGFyZW50RmFicmljOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGdyb3VwczogRml4dHVyZUdyb3VwW10gPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgdGVtcGxhdGVzLm1hcChhc3luYyAobWYpID0+IHtcclxuICAgICAgICBjb25zdCBpc01hc3RlciA9IG1mLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIjtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgICAgIGNvbnN0IG1haW5Db250YWluZXIgPSB0aGlzLmNyZWF0ZU1haW5Db250YWluZXIobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuICAgICAgICBjb25zdCB0b3BDb250YWluZXIgPSB0aGlzLmNyZWF0ZVRvcENvbnRhaW5lcihtZiwgeCwgeSwgaXNNYXN0ZXIpO1xyXG4gICAgICAgIGNvbnN0IGlubmVyVG9wQm94ID0gdGhpcy5jcmVhdGVJbm5lclRvcEJveChtZiwgeCwgeSwgaXNNYXN0ZXIpO1xyXG4gICAgICAgIGNvbnN0IGlubmVyQm90dG9tQm94ID0gdGhpcy5jcmVhdGVJbm5lckJvdHRvbUJveChtZiwgeCwgeSwgaXNNYXN0ZXIpO1xyXG4gICAgICAgIGNvbnN0IG1pZENvbnRhaW5lciA9IHRoaXMuY3JlYXRlTWlkQ29udGFpbmVyKG1mLCB4LCB5LCBpc01hc3Rlcik7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3ggPSB0aGlzLmNyZWF0ZUZpcnN0Qm94KG1mLCB4LCB5LCBpc01hc3Rlcik7XHJcbiAgICAgICAgY29uc3QgbGFzdEJveCA9IHRoaXMuY3JlYXRlTGFzdEJveChtZiwgeCwgeSwgaXNNYXN0ZXIpO1xyXG4gICAgICAgIGNvbnN0IHsgY29udGFpbmVyOiBib3R0b21Db250YWluZXIsIHRleHQ6IGJvdHRvbVRleHRDb250ZW50IH0gPVxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVCb3R0b21Db250YWluZXIobWYsIHgsIHkpO1xyXG5cclxuICAgICAgICBjb25zdCB0b3BXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgICAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IHRvcFggPSB4ICsgKHdpZHRoIC0gdG9wV2lkdGgpIC8gMjtcclxuICAgICAgICBjb25zdCB0b3BZID0geSArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICAgICAgY29uc3QgaW5uZXJCb3hIZWlnaHQgPSB0b3BIZWlnaHQgLyAyO1xyXG5cclxuICAgICAgICBjb25zdCBpbm5lclRvcFRleHQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgICAgICBgRml4dHVyZSAke21mPy5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXJ9YCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdG9wOiB0b3BZICsgaW5uZXJCb3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGlubmVyQm94SGVpZ2h0LFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Vjb25kQm94WSA9IHRvcFkgKyBpbm5lckJveEhlaWdodDtcclxuICAgICAgICBjb25zdCB0ZXh0Q29udGVudCA9IGlzTWFzdGVyXHJcbiAgICAgICAgICA/IGAke21mPy5maXh0dXJlTmFtZX0gLSAke21mPy5maXh0dXJlQ2F0ZWdvcnl9IC0gJHttZj8uZml4dHVyZVdpZHRoLnZhbHVlfSAke21mPy5maXh0dXJlV2lkdGgudW5pdH1gXHJcbiAgICAgICAgICA6IGAke21mPy5maXh0dXJlTmFtZX1gO1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgYWRhcHRpdmUgdGV4dCBmb3IgaW5uZXIgYm90dG9tXHJcbiAgICAgICAgY29uc3QgaW5uZXJCb3R0b21UZXh0ID0gdGhpcy5jcmVhdGVBZGFwdGl2ZVRleHQodGV4dENvbnRlbnQsIHtcclxuICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgbWF4SGVpZ2h0OiBpbm5lckJveEhlaWdodCxcclxuICAgICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBmaWxsOiBcIiNGRkZGRkZcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBmaXJzdCBib3ggdGV4dCB3aXRoIGVsbGlwc2lzIGhhbmRsaW5nXHJcbiAgICAgICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICAgICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgICAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICAgICAgY29uc3QgbWlkWSA9IHRvcFkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgICAgIGNvbnN0IHNoZWxmQ291bnQgPSBtZi5zaGVsZkNvbmZpZz8ubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGJveEhlaWdodCA9IG1pZEhlaWdodCAvIChzaGVsZkNvdW50ICsgMik7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hZID0gbWlkWTtcclxuXHJcbiAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbWY/LmhlYWRlcj8ubGFiZWwgPz8gXCJcIjtcclxuICAgICAgICBsZXQgZGlzcGxheUxhYmVsID0gbGFiZWxUZXh0O1xyXG5cclxuICAgICAgICBpZiAobGFiZWxUZXh0KSB7XHJcbiAgICAgICAgICBsZXQgdGVtcFRleHRib3ggPSBuZXcgZmFicmljLlRleHRib3gobGFiZWxUZXh0LCB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplOiA3LFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmICh0ZW1wVGV4dGJveC5oZWlnaHQgPiBib3hIZWlnaHQpIHtcclxuICAgICAgICAgICAgbGV0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuICAgICAgICAgICAgbGV0IGxlZnQgPSAwO1xyXG4gICAgICAgICAgICBsZXQgcmlnaHQgPSBsYWJlbFRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKGxlZnQgPCByaWdodCkge1xyXG4gICAgICAgICAgICAgIGxldCBtaWQgPSBNYXRoLmZsb29yKChsZWZ0ICsgcmlnaHQpIC8gMik7XHJcbiAgICAgICAgICAgICAgbGV0IHRlc3RUZXh0ID0gbGFiZWxUZXh0LnNsaWNlKDAsIG1pZCkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgICB0ZW1wVGV4dGJveC5zZXQoeyB0ZXh0OiB0ZXN0VGV4dCB9KTtcclxuICAgICAgICAgICAgICBpZiAodGVtcFRleHRib3guaGVpZ2h0ID4gYm94SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICByaWdodCA9IG1pZDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGVmdCA9IG1pZCArIDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRpc3BsYXlMYWJlbCA9IGxhYmVsVGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHQgPSBuZXcgZmFicmljLlRleHRib3goZGlzcGxheUxhYmVsLCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBmaXJzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgZm9udFNpemU6IDcsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiMzNjNGNzJcIiA6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHNoZWx2ZXMgdXNpbmcgaGVscGVyIG1ldGhvZFxyXG4gICAgICAgIGNvbnN0IHNoZWx2ZXMgPSB0aGlzLmNyZWF0ZVNoZWx2ZXMobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuXHJcbiAgICAgICAgLy8gQWRkIFZNIGNvbmZpZ3VyYXRpb25zIHRvIHNoZWx2ZXMgaWYgdGhleSBleGlzdFxyXG4gICAgICAgIGlmIChtZj8udm1Db25maWc/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZi52bUNvbmZpZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZtID0gbWYudm1Db25maWdbaV07XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHZtLnN0YXJ0WVBvc2l0aW9uIC0gMTtcclxuICAgICAgICAgICAgICBjb25zdCBlbmRJbmRleCA9IHZtLmVuZFlQb3NpdGlvbiAtIDE7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2hlbGZUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZkhlaWdodFNwYW4gPSBib3hIZWlnaHQgKiAoZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgICAgIGxldCB2bUhlaWdodFB4OiBudW1iZXIgPSBzaGVsZkhlaWdodFNwYW47XHJcbiAgICAgICAgICAgICAgbGV0IHZtWTogbnVtYmVyID0gc2hlbGZUb3BZO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodm0ueVpvbmUgJiYgdm0ueVpvbmUgIT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICB2bUhlaWdodFB4ID0gc2hlbGZIZWlnaHRTcGFuIC8gMztcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodm0ueVpvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcInRvcFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZtWSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZtWSA9IHNoZWxmVG9wWSArIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICAgICAgICAgICAgICB2bVkgPSBzaGVsZlRvcFkgKyAyICogdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB2bVkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBsZXQgdm1YID0gbWlkWDtcclxuICAgICAgICAgICAgICBsZXQgdm1XaWR0aCA9IG1pZFdpZHRoO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoIXZtLnhab25lIHx8IHZtLnhab25lID09PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgdm1XaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgdm1YID0gbWlkWDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VjdGlvbldpZHRoID0gbWlkV2lkdGggLyAzO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh2bS54Wm9uZSkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZtV2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdm1YID0gbWlkWDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZtV2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdm1YID0gbWlkWCArIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdm1XaWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB2bVggPSBtaWRYICsgMiAqIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB2bVdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdm1YID0gbWlkWDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmICh2bS52bUltYWdlVXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCB2bUltYWdlOiBhbnkgPSBhd2FpdCBmYWJyaWMuRmFicmljSW1hZ2UuZnJvbVVSTChcclxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNkblVybH0ke3ZtLnZtSW1hZ2VVcmx9YCxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIHZtSW1hZ2Uuc2V0KHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB2bVggKyB2bVdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB0b3A6IHZtWSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBzY2FsZVg6IHZtV2lkdGggLyB2bUltYWdlLndpZHRoISxcclxuICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IHZtSGVpZ2h0UHggLyB2bUltYWdlLmhlaWdodCEsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godm1JbWFnZSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBgRXJyb3IgbG9hZGluZyBpbWFnZSBmb3IgVk06ICR7dm0udm1JbWFnZVVybH1gLFxyXG4gICAgICAgICAgICAgICAgICAgIGVyclxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2bUJveCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IHZtWCxcclxuICAgICAgICAgICAgICAgICAgdG9wOiB2bVksXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiB2bVdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IHZtSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw6IFwiIzY5MzhFRlwiLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB2bVRleHQgPSB0aGlzLmNyZWF0ZUFkYXB0aXZlVGV4dCh2bS52bU5hbWUgfHwgXCJcIiwge1xyXG4gICAgICAgICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiB2bUhlaWdodFB4LFxyXG4gICAgICAgICAgICAgICAgICB3aWR0aDogdm1XaWR0aCxcclxuICAgICAgICAgICAgICAgICAgbGVmdDogdm1YICsgdm1XaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIHRvcDogdm1ZICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUJveCwgdm1UZXh0KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJAQCB+IEVycm9yIGluIGRyYXdpbmcgVk06IFwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBsYXN0IGJveCB0ZXh0XHJcbiAgICAgICAgY29uc3QgbGFzdEJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc2hlbGZDb3VudCArIDEpO1xyXG4gICAgICAgIGNvbnN0IGxhc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYCR7bWY/LmZvb3Rlcj8ubGFiZWwgPyBtZi5mb290ZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogbGFzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiIzM2M0Y3MlwiIDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cENoaWxkcmVuID0gW1xyXG4gICAgICAgICAgbWFpbkNvbnRhaW5lcixcclxuICAgICAgICAgIC4uLighaXNNYXN0ZXIgPyBbdG9wQ29udGFpbmVyLCBpbm5lclRvcEJveCwgaW5uZXJUb3BUZXh0XSA6IFtdKSxcclxuICAgICAgICAgIGlubmVyQm90dG9tQm94LFxyXG4gICAgICAgICAgaW5uZXJCb3R0b21UZXh0LFxyXG4gICAgICAgICAgbWlkQ29udGFpbmVyLFxyXG4gICAgICAgICAgZmlyc3RCb3gsXHJcbiAgICAgICAgICBmaXJzdEJveFRleHQsXHJcbiAgICAgICAgICAuLi5zaGVsdmVzLFxyXG4gICAgICAgICAgbGFzdEJveCxcclxuICAgICAgICAgIGxhc3RCb3hUZXh0LFxyXG4gICAgICAgICAgYm90dG9tQ29udGFpbmVyLFxyXG4gICAgICAgICAgYm90dG9tVGV4dENvbnRlbnQsXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChncm91cENoaWxkcmVuLCB7XHJcbiAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgICAgICAvLyBhbmdsZTogbWYucmVsYXRpdmVQb3NpdGlvbj8uYW5nbGUgPz8gMFxyXG4gICAgICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICAgICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiO1xyXG4gICAgICAgICAgZ3JvdXBOYW1lOiBzdHJpbmc7XHJcbiAgICAgICAgICB0ZW1wbGF0ZVR5cGU6IHN0cmluZztcclxuICAgICAgICAgIG5hbWU6IHN0cmluZztcclxuICAgICAgICAgIHBhcmVudEZhYnJpYzogYW55O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGZpeHR1cmVHcm91cC5maXh0dXJlSWQgPSBtZi5faWQ7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLmZpeHR1cmVUeXBlID0gbWYuZml4dHVyZVR5cGU7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLmdyb3VwTmFtZSA9IG1mPy50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC50ZW1wbGF0ZVR5cGUgPSBtZj8udGVtcGxhdGVUeXBlID8/IFwic3ViXCI7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLm5hbWUgPSBtZi50ZW1wbGF0ZVR5cGUgPz8gXCJmaXh0dXJlXCI7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLnBhcmVudEZhYnJpYyA9IHBhcmVudEZhYnJpYztcclxuXHJcbiAgICAgICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2hpbGROYW1lID0gb3B0LnN1YlRhcmdldHM/LlswXT8ubmFtZTtcclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNoaWxkTmFtZSA9PT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIGlzTWFzdGVyICYmXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCAhPT0gbWYuX2lkICYmXHJcbiAgICAgICAgICAgICF0aGlzLnByZXZlbnRDbGlja1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkTWFzdGVySWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJzdWJcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCA9IG1mLl9pZDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU3ViRml4dHVyZXMoZml4dHVyZUdyb3VwLCBneCwgZ3kgKyA1MCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGZpeHR1cmVHcm91cC50ZW1wbGF0ZVR5cGUgPT09IFwic3ViXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluc3RhbmNlLmVtaXQobWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gZml4dHVyZUdyb3VwO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgdG90YWxXaWR0aCA9IDA7XHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgdG90YWxXaWR0aCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0b3RhbFdpZHRoIC09IGdyb3VwU3BhY2luZztcclxuICAgIGxldCBueCA9IHggLSB0b3RhbFdpZHRoIC8gMjtcclxuXHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgZ3JvdXAuc2V0KHsgbGVmdDogbngsIHRvcDogeSB9KTtcclxuICAgICAgbnggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTWFpbkNvbnRhaW5lcihcclxuICAgIG1mOiBhbnksXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBpc01hc3RlcjogYm9vbGVhblxyXG4gICk6IGZhYnJpYy5SZWN0IHtcclxuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgbGV0IG1haW5Db250YWluZXJIZWlnaHQgPSBoZWlnaHQgKyAxO1xyXG4gICAgaWYgKGlzTWFzdGVyKSB7XHJcbiAgICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICAgIG1haW5Db250YWluZXJIZWlnaHQgPSBoZWlnaHQgLSB0b3BIZWlnaHQgLyAyICsgMTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYWluQ29udGFpbmVyVG9wID0gaXNNYXN0ZXJcclxuICAgICAgPyB5ICsgKCgxNSAvIDEwMCkgKiBoZWlnaHQpIC8gMiAtIDFcclxuICAgICAgOiB5IC0gMTtcclxuXHJcbiAgICByZXR1cm4gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiBtYWluQ29udGFpbmVyVG9wLFxyXG4gICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgIGhlaWdodDogbWFpbkNvbnRhaW5lckhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVRvcENvbnRhaW5lcihcclxuICAgIG1mOiBhbnksXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBpc01hc3RlcjogYm9vbGVhblxyXG4gICk6IGZhYnJpYy5SZWN0IHtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRvcFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID1cclxuICAgICAgKDE1IC8gMTAwKSAqXHJcbiAgICAgIHRoaXMudG9QaXhlbHMobWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSwgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0KTtcclxuICAgIGNvbnN0IHRvcFggPSB4ICsgKHdpZHRoIC0gdG9wV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IHRvcFkgPSB5ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRvcFgsXHJcbiAgICAgIHRvcDogdG9wWSxcclxuICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRvcEhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUlubmVyVG9wQm94KFxyXG4gICAgbWY6IGFueSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGlzTWFzdGVyOiBib29sZWFuXHJcbiAgKTogZmFicmljLlBhdGgge1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICApO1xyXG4gICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPVxyXG4gICAgICAoMTUgLyAxMDApICpcclxuICAgICAgdGhpcy50b1BpeGVscyhtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLCBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQpO1xyXG4gICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgY29uc3QgcmFkaXVzID0gMztcclxuICAgIGNvbnN0IGlubmVyQm94SGVpZ2h0ID0gdG9wSGVpZ2h0IC8gMjtcclxuXHJcbiAgICByZXR1cm4gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIFEgJHt0b3BYfSAke3RvcFl9ICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUlubmVyQm90dG9tQm94KFxyXG4gICAgbWY6IGFueSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGlzTWFzdGVyOiBib29sZWFuXHJcbiAgKTogZmFicmljLlBhdGgge1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICApO1xyXG4gICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPVxyXG4gICAgICAoMTUgLyAxMDApICpcclxuICAgICAgdGhpcy50b1BpeGVscyhtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLCBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQpO1xyXG4gICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgY29uc3QgcmFkaXVzID0gMztcclxuICAgIGNvbnN0IGlubmVyQm94SGVpZ2h0ID0gdG9wSGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IHNlY29uZEJveFkgPSB0b3BZICsgaW5uZXJCb3hIZWlnaHQ7XHJcblxyXG4gICAgaWYgKGlzTWFzdGVyKSB7XHJcbiAgICAgIHJldHVybiBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgYE0gJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c30gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7XHJcbiAgICAgICAgICBzZWNvbmRCb3hZICsgcmFkaXVzXHJcbiAgICAgICAgfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke1xyXG4gICAgICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFh9ICR7XHJcbiAgICAgICAgICBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgICB9IFxyXG4gICAgICAgICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZfSAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmlsbDogXCIjMzYzRjcyXCIsXHJcbiAgICAgICAgICBzdHJva2U6IFwiIzcxN0JCQ1wiLFxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICBgTSAke3RvcFh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7XHJcbiAgICAgICAgICB0b3BYICsgdG9wV2lkdGggLSByYWRpdXNcclxuICAgICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgICAgIHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBaYCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWxsOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgIHN0cm9rZTogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVNaWRDb250YWluZXIoXHJcbiAgICBtZjogYW55LFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaXNNYXN0ZXI6IGJvb2xlYW5cclxuICApOiBmYWJyaWMuUmVjdCB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXRcclxuICAgICk7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkWCA9IHggKyAod2lkdGggLSBtaWRXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgbWlkWSA9IHkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgY29uc3QgcmFkaXVzID0gMztcclxuXHJcbiAgICByZXR1cm4gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgdG9wOiBtaWRZLFxyXG4gICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgIGhlaWdodDogbWlkSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRmlyc3RCb3goXHJcbiAgICBtZjogYW55LFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaXNNYXN0ZXI6IGJvb2xlYW5cclxuICApOiBmYWJyaWMuUGF0aCB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXRcclxuICAgICk7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkWCA9IHggKyAod2lkdGggLSBtaWRXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgbWlkWSA9IHkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKG1mLnNoZWxmQ29uZmlnPy5sZW5ndGggKyAyKTtcclxuICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcbiAgICBjb25zdCByYWRpdXMgPSAzO1xyXG5cclxuICAgIHJldHVybiBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRoIC0gcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyBtaWRXaWR0aH0gJHtcclxuICAgICAgICBmaXJzdEJveFkgKyByYWRpdXNcclxuICAgICAgfSBcclxuICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7bWlkWH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7bWlkWH0gJHtmaXJzdEJveFkgKyByYWRpdXN9IFxyXG4gICAgICAgICAgICBRICR7bWlkWH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiNFQUVDRjVcIiA6IFwiI0RBRjFGRlwiLFxyXG4gICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiNBRkI1RDlcIiA6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTGFzdEJveChtZjogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlciwgaXNNYXN0ZXI6IGJvb2xlYW4pOiBmYWJyaWMuUGF0aCB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXRcclxuICAgICk7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkWCA9IHggKyAod2lkdGggLSBtaWRXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgbWlkWSA9IHkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKG1mLnNoZWxmQ29uZmlnPy5sZW5ndGggKyAyKTtcclxuICAgIGNvbnN0IGxhc3RCb3hZID0gbWlkWSArIGJveEhlaWdodCAqIChtZi5zaGVsZkNvbmZpZz8ubGVuZ3RoICsgMSk7XHJcbiAgICBjb25zdCByYWRpdXMgPSAzO1xyXG5cclxuICAgIHJldHVybiBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHtcclxuICAgICAgICBtaWRYICsgbWlkV2lkdGggLSByYWRpdXNcclxuICAgICAgfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke21pZFggKyByYWRpdXN9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBRICR7bWlkWH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHttaWRYfSAke1xyXG4gICAgICAgIGxhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgIH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2xhc3RCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjRUFFQ0Y1XCIgOiBcIiNEQUYxRkZcIixcclxuICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjQUZCNUQ5XCIgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUJvdHRvbUNvbnRhaW5lcihcclxuICAgIG1mOiBhbnksXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXJcclxuICApOiB7IGNvbnRhaW5lcjogZmFicmljLlJlY3Q7IHRleHQ6IGZhYnJpYy5UZXh0Ym94IH0ge1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0XHJcbiAgICApO1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBib3R0b21XaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IGJvdHRvbUhlaWdodCA9ICgzIC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IGJvdHRvbVggPSB4ICsgKHdpZHRoIC0gYm90dG9tV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IGJvdHRvbVkgPSB5ICsgdG9wSGVpZ2h0ICsgbWlkSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgY29uc3QgYm90dG9tQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogYm90dG9tWCxcclxuICAgICAgdG9wOiBib3R0b21ZLFxyXG4gICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYm90dG9tVGV4dENvbnRlbnQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGBTaGVsdmVzIC0gJHttZi5zaGVsZkNvbmZpZy5sZW5ndGh9IC4gUHJvZHVjdHMgLSAgJHttZi5maXh0dXJlQ2FwYWNpdHl9IC4gVk0gLSAke21mLnZtQ29uZmlnLmxlbmd0aH1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogYm90dG9tWCArIGJvdHRvbVdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJvdHRvbVkgKyBib3R0b21IZWlnaHQgLyAyICsgNCxcclxuICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBib3R0b21XaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4geyBjb250YWluZXI6IGJvdHRvbUNvbnRhaW5lciwgdGV4dDogYm90dG9tVGV4dENvbnRlbnQgfTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVNoZWx2ZXMoXHJcbiAgICBtZjogYW55LFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaXNNYXN0ZXI6IGJvb2xlYW5cclxuICApOiBmYWJyaWMuT2JqZWN0W10ge1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0XHJcbiAgICApO1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IG1pZFkgPSB5ICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgIGNvbnN0IGJveEhlaWdodCA9IG1pZEhlaWdodCAvIChtZi5zaGVsZkNvbmZpZz8ubGVuZ3RoICsgMik7XHJcbiAgICBjb25zdCBmaXJzdEJveFkgPSBtaWRZO1xyXG5cclxuICAgIGNvbnN0IHNoZWx2ZXM6IGZhYnJpYy5PYmplY3RbXSA9IFtdO1xyXG5cclxuICAgIGlmIChtZi5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwxXCIpIHtcclxuICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodDtcclxuICAgICAgY29uc3Qgc2hlbGZIZWlnaHQgPSBtaWRIZWlnaHQgLSAyICogYm94SGVpZ2h0O1xyXG5cclxuICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHNoZWxmSGVpZ2h0LFxyXG4gICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCB0ZXh0ID0gbWY/LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgIC8vIFdyYXAgdGV4dCB3aXRoaW4gZml4dHVyZSB3aWR0aCBhbmQgc2hyaW5rIHRvIGZpdCBzaGVsZiBoZWlnaHRcclxuICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBzaGVsZkhlaWdodCAqIDAuODtcclxuICAgICAgbGV0IGZvbnRTaXplTDEgPSA2O1xyXG5cclxuICAgICAgY29uc3QgY3JlYXRlV3JhcHBlZFRleHRib3ggPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemVMMSA+IDIpIHtcclxuICAgICAgICBmb250U2l6ZUwxIC09IDAuNTtcclxuICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJveFkgKyBzaGVsZkhlaWdodCAvIDIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBNYXRoLm1pbihtYXhUZXh0V2lkdGgsIHdyYXBwZWRUZXh0LndpZHRoISkgKyBwYWRkaW5nLFxyXG4gICAgICAgIGhlaWdodDogd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyAyLFxyXG4gICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgcng6IDEsXHJcbiAgICAgICAgcnk6IDEsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmLCBiYWNrZ3JvdW5kLCB3cmFwcGVkVGV4dCk7XHJcbiAgICB9IGVsc2UgaWYgKG1mLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIikge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1mLnNoZWxmQ29uZmlnPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoaSArIDEpO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGYpO1xyXG5cclxuICAgICAgICBpZiAobWYuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IG1mLnNoZWxmQ29uZmlnPy5baV0udHJheVJvd3MgfHwgMTtcclxuICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgIFttaWRYLCBsaW5lWSwgbWlkWCArIG1pZFdpZHRoLCBsaW5lWV0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHQgPSBtZi5zaGVsZkNvbmZpZz8uW2ldLnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgLy8gU2luZ2xlLWxpbmUgZWxsaXBzaXMgd2l0aGluIHNoZWxmIHdpZHRoXHJcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFBhZGRpbmcgPSA2O1xyXG4gICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IE1hdGgubWF4KDAsIG1pZFdpZHRoIC0gaG9yaXpvbnRhbFBhZGRpbmcpO1xyXG4gICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBib3hIZWlnaHQgKiAwLjg7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbnRTaXplID0gNTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9ICh0OiBzdHJpbmcpID0+XHJcbiAgICAgICAgICBuZXcgZmFicmljLlRleHQodCwge1xyXG4gICAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGRpc3BsYXlUZXh0ID0gdGV4dDtcclxuICAgICAgICBsZXQgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuXHJcbiAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgY29uc3QgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG4gICAgICAgICAgbGV0IGxlZnRJZHggPSAwO1xyXG4gICAgICAgICAgbGV0IHJpZ2h0SWR4ID0gdGV4dC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgd2hpbGUgKGxlZnRJZHggPCByaWdodElkeCkge1xyXG4gICAgICAgICAgICBjb25zdCBtaWRJZHggPSBNYXRoLmZsb29yKChsZWZ0SWR4ICsgcmlnaHRJZHgpIC8gMik7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRleHQuc2xpY2UoMCwgbWlkSWR4KSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoY2FuZGlkYXRlKTtcclxuICAgICAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgICAgIHJpZ2h0SWR4ID0gbWlkSWR4O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxlZnRJZHggPSBtaWRJZHggKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkaXNwbGF5VGV4dCA9IHRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGVmdElkeCAtIDEpKSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogTWF0aC5taW4obWF4VGV4dEhlaWdodCwgbWVhc3VyZWQuaGVpZ2h0ID8/IDEwKSArIDIsXHJcbiAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbmFsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dChkaXNwbGF5VGV4dCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goYmFja2dyb3VuZCwgZmluYWxUZXh0KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChtZi5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwzXCIpIHtcclxuICAgICAgY29uc3Qgc2VxdWVudGlhbEdyb3VwczogeyB6b25lOiBzdHJpbmc7IHNoZWx2ZXM6IGFueVtdIH1bXSA9IFtdO1xyXG4gICAgICBsZXQgcHJldmlvdXNab25lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgc2hlbGYgb2YgbWYuc2hlbGZDb25maWcpIHtcclxuICAgICAgICBjb25zdCB6b25lID0gc2hlbGYuem9uZSB8fCBcIlVua25vd25cIjtcclxuICAgICAgICBpZiAoem9uZSAhPT0gcHJldmlvdXNab25lKSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzLnB1c2goeyB6b25lLCBzaGVsdmVzOiBbc2hlbGZdIH0pO1xyXG4gICAgICAgICAgcHJldmlvdXNab25lID0gem9uZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VxdWVudGlhbEdyb3Vwc1tzZXF1ZW50aWFsR3JvdXBzLmxlbmd0aCAtIDFdLnNoZWx2ZXMucHVzaChzaGVsZik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY3VycmVudFNoZWxmSW5kZXggPSAwO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBzZXF1ZW50aWFsR3JvdXBzKSB7XHJcbiAgICAgICAgY29uc3QgeyB6b25lLCBzaGVsdmVzOiBzaGVsdmVzSW5Hcm91cCB9ID0gZ3JvdXA7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBTdGFydEluZGV4ID0gY3VycmVudFNoZWxmSW5kZXg7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBMZW5ndGggPSBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGdyb3VwU3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tWSA9IGdyb3VwVG9wWSArIGJveEhlaWdodCAqIGdyb3VwTGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBzaGVsZkRhdGEgPSBzaGVsdmVzSW5Hcm91cFtqXTtcclxuICAgICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoY3VycmVudFNoZWxmSW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBzaGVsZlJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmUmVjdCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNoZWxmRGF0YS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gc2hlbGZEYXRhLnRyYXlSb3dzIHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RQZXJTaGVsZiA9IHNoZWxmRGF0YS5wcm9kdWN0UGVyU2hlbGYgfHwgMDtcclxuICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5TcGFjaW5nID0gbWlkV2lkdGggLyBwcm9kdWN0UGVyU2hlbGY7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuICAgICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgIFttaWRYLCBsaW5lWSwgbWlkWCArIG1pZFdpZHRoLCBsaW5lWV0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAxOyBjIDwgcHJvZHVjdFBlclNoZWxmOyBjKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWCA9IG1pZFggKyBjICogY29sdW1uU3BhY2luZztcclxuICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbExpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbGluZVgsIGJveFksIGxpbmVYLCBib3hZICsgYm94SGVpZ2h0XSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZlcnRpY2FsTGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGN1cnJlbnRTaGVsZkluZGV4Kys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBncm91cEJvdHRvbUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICBbbWlkWCwgZ3JvdXBCb3R0b21ZLCBtaWRYICsgbWlkV2lkdGgsIGdyb3VwQm90dG9tWV0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChncm91cEJvdHRvbUxpbmUpO1xyXG5cclxuICAgICAgICBpZiAobWYuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHpvbmUsIHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC0gbGFiZWxQYWRkaW5nLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQm90dG9tWSxcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjNzA3MDcwXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwicmlnaHRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChsYWJlbFRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJYID0gbWlkWCArIG1pZFdpZHRoIC8gMjtcclxuICAgICAgICBjb25zdCBncm91cENlbnRlclkgPSBncm91cFRvcFkgKyAoZ3JvdXBCb3R0b21ZIC0gZ3JvdXBUb3BZKSAvIDI7XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbkJyYW5kcyA9IG5ldyBTZXQoKTtcclxuXHJcbiAgICAgICAgc2hlbHZlc0luR3JvdXA/LmZvckVhY2goKHNoZWxmKSA9PiB7XHJcbiAgICAgICAgICBzaGVsZi5wcm9kdWN0QnJhbmROYW1lPy5mb3JFYWNoKChicmFuZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHNlY3Rpb25CcmFuZHMuYWRkKGJyYW5kKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoWy4uLnNlY3Rpb25CcmFuZHNdLmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgdGV4dCA9IFsuLi5zZWN0aW9uQnJhbmRzXS5qb2luKFwiICsgXCIpO1xyXG4gICAgICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IG1pZFdpZHRoICogMC45O1xyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IDIwO1xyXG5cclxuICAgICAgICAgIGxldCBmb250U2l6ZSA9IDY7XHJcbiAgICAgICAgICBsZXQgd3JhcHBlZFRleHQ7XHJcblxyXG4gICAgICAgICAgY29uc3QgY3JlYXRlVGV4dGJveCA9IChmczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI0MDBcIixcclxuICAgICAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICAgIHRvcDogZ3JvdXBDZW50ZXJZLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVRleHRib3goZm9udFNpemUpO1xyXG4gICAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgICB9IHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgICAgY29uc3QgcmVjdEhlaWdodCA9IHdyYXBwZWRUZXh0LmdldFNjYWxlZEhlaWdodCgpICsgcGFkZGluZztcclxuICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyVGV4dCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByeDogMSxcclxuICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBDZW50ZXJUZXh0LCB3cmFwcGVkVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNoZWx2ZXM7XHJcbiAgfVxyXG5cclxuICBjbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKHRlbXBsYXRlVHlwZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBncm91cHNUb1JlbW92ZSA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcihcclxuICAgICAgICAob2JqKSA9PlxyXG4gICAgICAgICAgb2JqIGluc3RhbmNlb2YgZmFicmljLkdyb3VwICYmXHJcbiAgICAgICAgICAob2JqIGFzIGFueSkudGVtcGxhdGVUeXBlID09PSB0ZW1wbGF0ZVR5cGVcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoZ3JvdXBzVG9SZW1vdmUpIHtcclxuICAgICAgZ3JvdXBzVG9SZW1vdmUuZm9yRWFjaCgoZ3JvdXApID0+IHRoaXMuY2FudmFzLnJlbW92ZShncm91cCkpO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmF3QXJyb3coZnJvbUdyb3VwOiBmYWJyaWMuR3JvdXAsIHRvR3JvdXA6IGZhYnJpYy5Hcm91cCwgYXJyb3dJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmcm9tID0gZnJvbUdyb3VwLmFDb29yZHMgPz8gZnJvbUdyb3VwLmNhbGNPQ29vcmRzKCk7XHJcbiAgICBjb25zdCB0byA9IHRvR3JvdXAuYUNvb3JkcyA/PyB0b0dyb3VwLmNhbGNPQ29vcmRzKCk7XHJcblxyXG4gICAgY29uc3QgZnJvbVggPSAoZnJvbS5ibC54ICsgZnJvbS5ici54KSAvIDI7XHJcbiAgICBjb25zdCBmcm9tWSA9IChmcm9tLmJsLnkgKyBmcm9tLmJyLnkpIC8gMjtcclxuXHJcbiAgICBjb25zdCB0b1ggPSAodG8udGwueCArIHRvLnRyLngpIC8gMjtcclxuICAgIGNvbnN0IHRvWSA9ICh0by50bC55ICsgdG8udHIueSkgLyAyO1xyXG5cclxuICAgIGNvbnN0IGhvcml6b250YWxPZmZzZXQgPSB0b1ggLSBmcm9tWDtcclxuICAgIGNvbnN0IHZlcnRpY2FsT2Zmc2V0ID0gdG9ZIC0gZnJvbVk7XHJcbiAgICBjb25zdCBjdXJ2ZVNpemUgPSAxNDtcclxuXHJcbiAgICBsZXQgcGF0aERhdGEgPSBcIlwiO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhob3Jpem9udGFsT2Zmc2V0KSA8IDUpIHtcclxuICAgICAgLy8gRGlyZWN0IHZlcnRpY2FsIGxpbmVcclxuICAgICAgcGF0aERhdGEgPSBgTSAke2Zyb21YfSAke2Zyb21ZfSBMICR7dG9YfSAke3RvWX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbWlkWSA9IGZyb21ZICsgdmVydGljYWxPZmZzZXQgLyAyO1xyXG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBob3Jpem9udGFsT2Zmc2V0ID4gMCA/IDEgOiAtMTtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnZlMVggPSBmcm9tWCArIGRpcmVjdGlvbiAqIGN1cnZlU2l6ZTtcclxuICAgICAgY29uc3QgY3VydmUyWCA9IHRvWCAtIGRpcmVjdGlvbiAqIGN1cnZlU2l6ZTtcclxuXHJcbiAgICAgIHBhdGhEYXRhID0gW1xyXG4gICAgICAgIGBNICR7ZnJvbVh9ICR7ZnJvbVl9YCxcclxuICAgICAgICBgTCAke2Zyb21YfSAke21pZFkgLSBjdXJ2ZVNpemV9YCxcclxuICAgICAgICBgUSAke2Zyb21YfSAke21pZFl9ICR7Y3VydmUxWH0gJHttaWRZfWAsXHJcbiAgICAgICAgYEwgJHtjdXJ2ZTJYfSAke21pZFl9YCxcclxuICAgICAgICBgUSAke3RvWH0gJHttaWRZfSAke3RvWH0gJHttaWRZICsgY3VydmVTaXplfWAsXHJcbiAgICAgICAgYEwgJHt0b1h9ICR7dG9ZfWAsXHJcbiAgICAgIF0uam9pbihcIiBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXJyb3dMaW5lID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIHN0cm9rZTogXCIjQUZCNUQ5XCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAxLjgsXHJcbiAgICAgIGZpbGw6IFwiXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFycm93aGVhZFxyXG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHRvWSAtICh0b1kgLSAxMCksIHRvWCAtIHRvWCk7XHJcbiAgICBjb25zdCBoZWFkbGVuID0gMTA7XHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIFtcclxuICAgICAgICBgTSAke3RvWH0gJHt0b1l9YCxcclxuICAgICAgICBgTCAke3RvWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyA1KX0gJHtcclxuICAgICAgICAgIHRvWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyA1KVxyXG4gICAgICAgIH1gLFxyXG4gICAgICAgIGBNICR7dG9YfSAke3RvWX1gLFxyXG4gICAgICAgIGBMICR7dG9YIC0gaGVhZGxlbiAqIE1hdGguY29zKGFuZ2xlICsgTWF0aC5QSSAvIDUpfSAke1xyXG4gICAgICAgICAgdG9ZIC0gaGVhZGxlbiAqIE1hdGguc2luKGFuZ2xlICsgTWF0aC5QSSAvIDUpXHJcbiAgICAgICAgfWAsXHJcbiAgICAgIF0uam9pbihcIiBcIiksXHJcbiAgICAgIHtcclxuICAgICAgICBzdHJva2U6IFwiI0FGQjVEOVwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLjgsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgLy8gR3JvdXBpbmcgYm90aCBsaW5lIGFuZCBhcnJvd2hlYWRcclxuICAgIGNvbnN0IGFycm93R3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFthcnJvd0xpbmUsIGFycm93SGVhZF0sIHtcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYgeyBhcnJvd0lkOiBzdHJpbmcgfTtcclxuXHJcbiAgICAvLyBBdHRhY2ggY3VzdG9tIGFycm93IElEXHJcbiAgICBhcnJvd0dyb3VwLmFycm93SWQgPSBhcnJvd0lkO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLmFkZChhcnJvd0dyb3VwKTtcclxuICB9XHJcblxyXG4gIGNsZWFyQXJyb3dCeUlkKGFycm93SWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgYXJyb3dHcm91cCA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcihcclxuICAgICAgICAob2JqKSA9PiBvYmogaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXAgJiYgKG9iaiBhcyBhbnkpLmFycm93SWQgPT09IGFycm93SWRcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoYXJyb3dHcm91cCkge1xyXG4gICAgICBhcnJvd0dyb3VwLmZvckVhY2goKGdyb3VwKSA9PiB0aGlzLmNhbnZhcy5yZW1vdmUoZ3JvdXApKTtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cInRyZWUtY2FudmFzLWNhcmRcIiBjbGFzcz1cInctMTAwIHAtNlwiPlxyXG4gIDxjYW52YXMgaWQ9XCJ0ZW1wbGF0ZS1jYW52YXNcIiAjdGVtcGxhdGVDYW52YXM+PC9jYW52YXM+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy0xMDBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTAgMTFcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibWUtMVwiPlxyXG4gICAgICAgIDxjaXJjbGUgY3g9XCI0Ljg0MzFcIiBjeT1cIjUuNDk5OTZcIiByPVwiNC44NDMxXCIgZmlsbD1cIiM2MTcyRjNcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPHAgY2xhc3M9XCJtLTAgbWUtM1wiPk1hc3RlciBUZW1wbGF0ZTwvcD5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMVwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxMSAxMVwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJtZS0xXCI+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjUuNDQ0NjZcIiBjeT1cIjUuNDk5OTZcIiByPVwiNC44NDMxXCIgZmlsbD1cIiMzM0I1RkZcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPHAgY2xhc3M9XCJtLTBcIj5GaXh0dXJlIEluc3RhbmNlPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiem9vbVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiem9vbS1pblwiIChjbGljayk9XCJ6b29tSW4oKVwiPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xMiA1VjE5TTUgMTJIMTlcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiem9vbS1vdXRcIiAoY2xpY2spPVwiem9vbU91dCgpXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTUgMTJIMTlcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
1201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtcGxhbm8tdHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3N0b3JlLXBsYW5vL3N0b3JlLXBsYW5vLXRyZWUtdmlldy9zdG9yZS1wbGFuby10cmVlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvc3RvcmUtcGxhbm8vc3RvcmUtcGxhbm8tdHJlZS12aWV3L3N0b3JlLXBsYW5vLXRyZWUtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFTbkUsTUFBTSxPQUFPLDJCQUEyQjtJQTBCbEI7SUF2QlgsVUFBVSxDQUFRO0lBQ2pCLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFHckQsUUFBUSxDQUFpQztJQUV6QyxNQUFNLENBQWlCO0lBRXZCLGNBQWMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQVM7SUFFZixrQkFBa0IsR0FBVSxFQUFFLENBQUM7SUFDL0IsdUJBQXVCLEdBQVUsRUFBRSxDQUFDO0lBQ3BDLFlBQVksR0FBVSxFQUFFLENBQUM7SUFFekIsaUJBQWlCLENB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LEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQWU7UUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU07YUFDM0IsVUFBVSxFQUFFO2FBQ1osTUFBTSxDQUNMLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDTixHQUFHLFlBQVksTUFBTSxDQUFDLEtBQUssSUFBSyxHQUFXLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FDbEUsQ0FBQztRQUVKLElBQUksVUFBVSxFQUFFO1lBQ2QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQXZrRFUsMkJBQTJCOzRGQUEzQiwyQkFBMkIsMlNDdEJ4QyxpakRBNEJBOzs0RkROYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUk7dUZBS1AsVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBR1AsUUFBUTtzQkFEUCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0ICogYXMgZmFicmljIGZyb20gXCJmYWJyaWNcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJzdG9yZS1wbGFuby10cmVlLXZpZXdcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3N0b3JlLXBsYW5vLXRyZWUtdmlldy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vc3RvcmUtcGxhbm8tdHJlZS12aWV3LmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN0b3JlUGxhbm9UcmVlVmlld0NvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcclxue1xyXG4gIEBJbnB1dCgpIGFsbEZpeHR1cmU6IGFueVtdO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEluc3RhbmNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0ZW1wbGF0ZUNhbnZhc1wiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBjYW52YXNFbCE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG5cclxuICBjYW52YXMhOiBmYWJyaWMuQ2FudmFzO1xyXG5cclxuICB2ZXJ0aWNhbE1hcmdpbiA9ICgxLjI1IC8gMTAwKSAqIHRoaXMudG9QaXhlbHMoMTUyNCwgXCJtbVwiKTtcclxuICBjZG5Vcmw6IHN0cmluZztcclxuXHJcbiAgYWxsTWFzdGVyVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xyXG4gIHN1YlRlbXBsYXRlczogYW55W10gPSBbXTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cE5hbWU6IHN0cmluZyB8IG51bGw7XHJcbiAgc2VsZWN0ZWRNYXN0ZXJJZDogc3RyaW5nO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcmV2ZW50Q2xpY2s6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyB1c2VkIHRvIHJlc3RyaWN0IGZ1cnRoZXIgY2xpY2tzIG9uIGNhbnZhcyBpdGVtcyB3aGlsZSBhbiBBUEkgY2FsbCBpcyBpbiBwcm9ncmVzcy5cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSkge1xyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB0aGlzLmNkblVybCA9IGUucGxhbm9ncmFtQ0ROO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoYW5nZXNbXCJhbGxGaXh0dXJlXCJdPy5jdXJyZW50VmFsdWUgJiZcclxuICAgICAgIWNoYW5nZXNbXCJhbGxGaXh0dXJlXCJdPy5maXJzdENoYW5nZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYnVpbGRUcmVlVmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW52YXMgPSBuZXcgZmFicmljLkNhbnZhcyh0aGlzLmNhbnZhc0VsPy5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIHNlbGVjdGlvbkZ1bGx5Q29udGFpbmVkOiB0cnVlLFxyXG4gICAgICBwZXJQaXhlbFRhcmdldEZpbmQ6IHRydWUsXHJcbiAgICAgIHRhcmdldEZpbmRUb2xlcmFuY2U6IDUsXHJcbiAgICAgIGhlaWdodDogNjAwLFxyXG4gICAgICB3aWR0aDogODAwLFxyXG4gICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVzaXplQ2FudmFzVG9QYXJlbnRTaXplKCk7XHJcblxyXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgXCJyZXNpemVcIilcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNpemVDYW52YXNUb1BhcmVudFNpemUoKSk7XHJcblxyXG4gICAgdGhpcy5zZXR1cFpvb21IYW5kbGVycygpO1xyXG5cclxuICAgIHRoaXMuYnVpbGRUcmVlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgdG9QaXhlbHModmFsdWU6IG51bWJlciwgdW5pdDogc3RyaW5nLCBkcGkgPSAyLjgpOiBudW1iZXIge1xyXG4gICAgbGV0IHBpeGVsczogbnVtYmVyO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcihwaXhlbHMudG9GaXhlZCgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRHcm91cENlbnRlckJvdHRvbShncm91cDogZmFicmljLkdyb3VwKTogeyBneDogbnVtYmVyOyBneTogbnVtYmVyIH0ge1xyXG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuICAgIGNvbnN0IGNlbnRlclggPSBjZW50ZXIueDtcclxuICAgIGNvbnN0IGJvdHRvbVkgPSBncm91cC50b3AhICsgZ3JvdXAuaGVpZ2h0ITtcclxuICAgIHJldHVybiB7IGd4OiBjZW50ZXJYLCBneTogYm90dG9tWSB9O1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQWRhcHRpdmVUZXh0KFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICBmb250U2l6ZTogbnVtYmVyO1xyXG4gICAgICBtYXhIZWlnaHQ6IG51bWJlcjtcclxuICAgICAgd2lkdGg6IG51bWJlcjtcclxuICAgICAgbGVmdDogbnVtYmVyO1xyXG4gICAgICB0b3A6IG51bWJlcjtcclxuICAgICAgZmlsbDogc3RyaW5nO1xyXG4gICAgICBmb250V2VpZ2h0Pzogc3RyaW5nO1xyXG4gICAgfSxcclxuICApOiBmYWJyaWMuVGV4dGJveCB7XHJcbiAgICBsZXQgZm9udFNpemUgPSBvcHRpb25zLmZvbnRTaXplO1xyXG4gICAgbGV0IHRleHRFbGVtZW50OiBmYWJyaWMuVGV4dGJveDtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgIHRleHRFbGVtZW50ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICBmb250U2l6ZTogZm9udFNpemUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IG9wdGlvbnMuZm9udFdlaWdodCB8fCBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IG9wdGlvbnMuZmlsbCxcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBvcHRpb25zLndpZHRoLFxyXG4gICAgICAgIGxlZnQ6IG9wdGlvbnMubGVmdCxcclxuICAgICAgICB0b3A6IG9wdGlvbnMudG9wLFxyXG4gICAgICB9KTtcclxuICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgfSB3aGlsZSAodGV4dEVsZW1lbnQuaGVpZ2h0ID4gb3B0aW9ucy5tYXhIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICByZXR1cm4gdGV4dEVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBidWlsZFRyZWVWaWV3KCkge1xyXG4gICAgdGhpcy5jYW52YXM/LmNsZWFyKCk7XHJcbiAgICB0aGlzLnByZXZlbnRDbGljayA9IHRydWU7XHJcbiAgICB0aGlzLmFsbE1hc3RlclRlbXBsYXRlcyA9IHRoaXMuYWxsRml4dHVyZTtcclxuXHJcbiAgICAvLyBPbmNlIHRoZSBtYXN0ZXIgdGVtcGxhdGUgaXMgZmV0Y2hlZCwgcmVuZGVyIHRoZSBncm91cCBuYW1lcy5cclxuICAgIHRoaXMucmVuZGVyR3JvdXBOYW1lcygpO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBab29tSGFuZGxlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOndoZWVsXCIsIChvcHQ6IGZhYnJpYy5URXZlbnQ8V2hlZWxFdmVudD4pID0+IHtcclxuICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG5cclxuICAgICAgaWYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHtcclxuICAgICAgICBjb25zdCBkZWx0YSA9IGUuZGVsdGFZO1xyXG4gICAgICAgIGxldCB6b29tID0gdGhpcy5jYW52YXMuZ2V0Wm9vbSgpO1xyXG4gICAgICAgIHpvb20gKj0gMC45OTUgKiogZGVsdGE7XHJcblxyXG4gICAgICAgIHpvb20gPSBNYXRoLm1heCgwLjIsIE1hdGgubWluKHpvb20sIDMpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHg6IGUub2Zmc2V0WCxcclxuICAgICAgICAgICAgeTogZS5vZmZzZXRZLFxyXG4gICAgICAgICAgfSBhcyBmYWJyaWMuUG9pbnQsXHJcbiAgICAgICAgICB6b29tLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgbGV0IGxhc3RQb3NYID0gMDtcclxuICAgIGxldCBsYXN0UG9zWSA9IDA7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTpkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIW9wdC50YXJnZXQpIHtcclxuICAgICAgICBpc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6bW92ZVwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzRHJhZ2dpbmcgJiYgdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0pIHtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm07XHJcbiAgICAgICAgdnB0WzRdICs9IGUuY2xpZW50WCAtIGxhc3RQb3NYO1xyXG4gICAgICAgIHZwdFs1XSArPSBlLmNsaWVudFkgLSBsYXN0UG9zWTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6dXBcIiwgKCkgPT4ge1xyXG4gICAgICBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHpvb21JbigpIHtcclxuICAgIGxldCB6b29tID0gdGhpcy5jYW52YXMuZ2V0Wm9vbSgpO1xyXG4gICAgY29uc3QgdGFyZ2V0Wm9vbSA9IE1hdGgubWluKHpvb20gKyAwLjIsIDMpO1xyXG4gICAgdGhpcy5zbW9vdGhab29tKHRhcmdldFpvb20pO1xyXG4gIH1cclxuXHJcbiAgem9vbU91dCgpIHtcclxuICAgIGxldCB6b29tID0gdGhpcy5jYW52YXMuZ2V0Wm9vbSgpO1xyXG4gICAgY29uc3QgdGFyZ2V0Wm9vbSA9IE1hdGgubWF4KHpvb20gLSAwLjIsIDAuMik7XHJcbiAgICB0aGlzLnNtb290aFpvb20odGFyZ2V0Wm9vbSk7XHJcbiAgfVxyXG5cclxuICBzbW9vdGhab29tKHRhcmdldFpvb206IG51bWJlcikge1xyXG4gICAgY29uc3QgY2VudGVyID0gbmV3IGZhYnJpYy5Qb2ludChcclxuICAgICAgdGhpcy5jYW52YXMuZ2V0V2lkdGgoKSAvIDIsXHJcbiAgICAgIHRoaXMuY2FudmFzLmdldEhlaWdodCgpIC8gMixcclxuICAgICk7XHJcbiAgICBjb25zdCBjdXJyZW50Wm9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHN0ZXBzID0gMTA7XHJcbiAgICBjb25zdCBzdGVwU2l6ZSA9ICh0YXJnZXRab29tIC0gY3VycmVudFpvb20pIC8gc3RlcHM7XHJcbiAgICBsZXQgc3RlcCA9IDA7XHJcblxyXG4gICAgY29uc3QgYW5pbWF0ZSA9ICgpID0+IHtcclxuICAgICAgaWYgKHN0ZXAgPCBzdGVwcykge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KGNlbnRlciwgY3VycmVudFpvb20gKyBzdGVwU2l6ZSAqIChzdGVwICsgMSkpO1xyXG4gICAgICAgIHN0ZXArKztcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoY2VudGVyLCB0YXJnZXRab29tKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBhbmltYXRlKCk7XHJcbiAgfVxyXG5cclxuICByZXNpemVDYW52YXNUb1BhcmVudFNpemUoKSB7XHJcbiAgICBjb25zdCBjYW52YXNDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgXCJ0cmVlLWNhbnZhcy1jYXJkXCIsXHJcbiAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKGNhbnZhc0NvbCkge1xyXG4gICAgICBjb25zdCB3aWR0aCA9IGNhbnZhc0NvbC5vZmZzZXRXaWR0aCAtIDMyO1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjYW52YXNDb2wub2Zmc2V0SGVpZ2h0IC0gMzI7XHJcbiAgICAgIHRoaXMuY2hhbmdlQ2FudmFzU2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZUNhbnZhc1NpemUobmV3V2lkdGg6IG51bWJlciwgbmV3SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSB0aGlzLmNhbnZhc0VsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgY2FudmFzRWxlbWVudC53aWR0aCA9IG5ld1dpZHRoO1xyXG4gICAgY2FudmFzRWxlbWVudC5oZWlnaHQgPSBuZXdIZWlnaHQ7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuc2V0V2lkdGgobmV3V2lkdGgpO1xyXG4gICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KG5ld0hlaWdodCk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFJFTkRFUklORyBNRVRIT0RTID09PT09PT09PT09PT09PT09PT09XHJcbiAgcmVuZGVyR3JvdXBOYW1lcygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPSBudWxsO1xyXG4gICAgY29uc3QgbWFzdGVyR3JvdXBOYW1lcyA9IFtcclxuICAgICAgLi4ubmV3IFNldChcclxuICAgICAgICB0aGlzLmFsbE1hc3RlclRlbXBsYXRlc1xyXG4gICAgICAgICAgLmZpbHRlcigoZikgPT4gZi50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCIpXHJcbiAgICAgICAgICAubWFwKChtKSA9PiBtLnRlbXBsYXRlR3JvdXBOYW1lKSxcclxuICAgICAgKSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKCFtYXN0ZXJHcm91cE5hbWVzLmxlbmd0aCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBcIkBAIH4gcmVuZGVyR3JvdXBOYW1lcyBbRVJSXTogKG5vZSBncm91cCBuYW1lcyBmb3VuZCk6IFwiLFxyXG4gICAgICAgIG1hc3Rlckdyb3VwTmFtZXMsXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID8/PSBtYXN0ZXJHcm91cE5hbWVzWzBdO1xyXG5cclxuICAgIGNvbnN0IHkgPSA1MDtcclxuICAgIGNvbnN0IGdyb3VwU3BhY2luZyA9IDIwO1xyXG5cclxuICAgIGNvbnN0IGdyb3VwczogZmFicmljLkdyb3VwW10gPSBbXTtcclxuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuXHJcbiAgICBtYXN0ZXJHcm91cE5hbWVzLmZvckVhY2goKGcpID0+IHtcclxuICAgICAgaWYgKCFnKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IGxhYmVsID0gZztcclxuICAgICAgY29uc3QgZm9udFNpemUgPSAxMjtcclxuICAgICAgY29uc3QgcGFkZGluZ1ggPSAzMDtcclxuICAgICAgY29uc3QgcGFkZGluZ1kgPSAxNjtcclxuXHJcbiAgICAgIGNvbnN0IG1haW5UZXh0ID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KGxhYmVsLCB7XHJcbiAgICAgICAgZm9udFNpemU6IGZvbnRTaXplLFxyXG4gICAgICAgIGZpbGw6IFwiIzM2M0Y3MlwiLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXIsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IG1haW5UZXh0LndpZHRoISArIDIgKiBwYWRkaW5nWDtcclxuICAgICAgY29uc3QgcmVjdEhlaWdodCA9IG1haW5UZXh0LmhlaWdodCEgKyAyICogcGFkZGluZ1k7XHJcbiAgICAgIGNvbnN0IHJlY3RMZWZ0ID0gMzA7XHJcbiAgICAgIGNvbnN0IHJlY3RUb3AgPSAxODtcclxuXHJcbiAgICAgIGNvbnN0IG1haW5SZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNixcclxuICAgICAgICByeTogNixcclxuICAgICAgICB3aWR0aDogcmVjdFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICBmaWxsOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiI0Y4RjlGQ1wiIDogXCIjZmZmXCIsXHJcbiAgICAgICAgc3Ryb2tlOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiI0FGQjVEOVwiIDogXCIjRDBENUREXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgbGVmdDogcmVjdExlZnQsXHJcbiAgICAgICAgdG9wOiByZWN0VG9wLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1haW5UZXh0LnNldCh7XHJcbiAgICAgICAgbGVmdDogcmVjdExlZnQgKyBwYWRkaW5nWCxcclxuICAgICAgICB0b3A6IHJlY3RUb3AgKyAocmVjdEhlaWdodCAtIG1haW5UZXh0LmhlaWdodCEpIC8gMixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBidWJibGVXID0gMzY7XHJcbiAgICAgIGNvbnN0IGJ1YmJsZUggPSAxODtcclxuICAgICAgY29uc3QgYnViYmxlTGVmdCA9IHJlY3RMZWZ0ICsgcmVjdFdpZHRoIC8gMiAtIGJ1YmJsZVcgLyAyO1xyXG4gICAgICBjb25zdCBidWJibGVUb3AgPSByZWN0SGVpZ2h0ICsgYnViYmxlSCAvIDI7XHJcblxyXG4gICAgICBjb25zdCBidWJibGVSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNCxcclxuICAgICAgICByeTogNCxcclxuICAgICAgICB3aWR0aDogYnViYmxlVyxcclxuICAgICAgICBoZWlnaHQ6IGJ1YmJsZUgsXHJcbiAgICAgICAgZmlsbDogdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwgPyBcIiM4Mzg5YzVcIiA6IFwiIzk4QTJCM1wiLFxyXG4gICAgICAgIGxlZnQ6IGJ1YmJsZUxlZnQsXHJcbiAgICAgICAgdG9wOiBidWJibGVUb3AsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZ3JvdXBDb3VudCA9IHRoaXMuYWxsTWFzdGVyVGVtcGxhdGVzLmZpbHRlcihcclxuICAgICAgICAobSkgPT4gbS50ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gZyAmJiBtLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIixcclxuICAgICAgKS5sZW5ndGg7XHJcblxyXG4gICAgICBjb25zdCBudW1iZXJUZXh0ID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KGdyb3VwQ291bnQudG9TdHJpbmcoKSwge1xyXG4gICAgICAgIGZvbnRTaXplOiA4LFxyXG4gICAgICAgIGZpbGw6IFwiI2ZmZlwiLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXIsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI3MDBcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgbGVmdDogYnViYmxlTGVmdCArIGJ1YmJsZVcgLyAyLFxyXG4gICAgICAgIHRvcDogYnViYmxlVG9wICsgYnViYmxlSCAvIDIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFxyXG4gICAgICAgIFttYWluUmVjdCwgbWFpblRleHQsIGJ1YmJsZVJlY3QsIG51bWJlclRleHRdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgICB0b3A6IDAsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgICB9LFxyXG4gICAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgICBncm91cE5hbWU6IHN0cmluZztcclxuICAgICAgICBtYXN0ZXJDb3VudDogbnVtYmVyO1xyXG4gICAgICAgIG1haW5SZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgICBidWJibGVSZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGdyb3VwLmdyb3VwTmFtZSA9IGxhYmVsO1xyXG4gICAgICBncm91cC5tYXN0ZXJDb3VudCA9IGdyb3VwQ291bnQ7XHJcbiAgICAgIGdyb3VwLm1haW5SZWN0ID0gbWFpblJlY3Q7XHJcbiAgICAgIGdyb3VwLmJ1YmJsZVJlY3QgPSBidWJibGVSZWN0O1xyXG5cclxuICAgICAgZ3JvdXAub24oXCJtb3VzZWRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPT09IGxhYmVsKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByZXZlbnRDbGljaykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgcHJldkdyb3VwID0gdGhpcy5jYW52YXNcclxuICAgICAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgICAgIC5maW5kKFxyXG4gICAgICAgICAgICAob2JqKSA9PlxyXG4gICAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCAmJlxyXG4gICAgICAgICAgICAgIChvYmogYXMgYW55KS5ncm91cE5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUsXHJcbiAgICAgICAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgICAgIG1haW5SZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgICAgIGJ1YmJsZVJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChwcmV2R3JvdXApIHtcclxuICAgICAgICAgIHByZXZHcm91cC5tYWluUmVjdC5zZXQoeyBmaWxsOiBcIiNmZmZmZmZcIiwgc3Ryb2tlOiBcIiNEMEQ1RERcIiB9KTtcclxuICAgICAgICAgIHByZXZHcm91cC5idWJibGVSZWN0LnNldCh7IGZpbGw6IFwiIzk4QTJCM1wiIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ3JvdXAubWFpblJlY3Quc2V0KHsgZmlsbDogXCIjRjhGOUZDXCIsIHN0cm9rZTogXCIjQUZCNUQ5XCIgfSk7XHJcbiAgICAgICAgZ3JvdXAuYnViYmxlUmVjdC5zZXQoeyBmaWxsOiBcIiM4Mzg5YzVcIiB9KTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgYm90aCBtYXN0ZXJzIGFuZCBzdWJzIGFycm93cywgYmVmb3JlIHJlbmRlcmluZyBuZXcgc2V0LlxyXG4gICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZEdyb3VwTmFtZSEpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZE1hc3RlcklkKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9IGxhYmVsO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gb3B0LnRhcmdldDtcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCkge1xyXG4gICAgICAgICAgY29uc3QgcGFyZW50R3JvdXAgPSB0YXJnZXQgYXMgZmFicmljLkdyb3VwO1xyXG4gICAgICAgICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20ocGFyZW50R3JvdXApO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJNYXN0ZXJGaXh0dXJlcyhneCwgZ3kgKyA1MCwgcGFyZW50R3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBncm91cHMucHVzaChncm91cCk7XHJcbiAgICAgIHRvdGFsV2lkdGggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdG90YWxXaWR0aCAtPSBncm91cFNwYWNpbmc7XHJcblxyXG4gICAgY29uc3QgY2FudmFzV2lkdGggPSB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgbGV0IHggPSAoY2FudmFzV2lkdGggLSB0b3RhbFdpZHRoKSAvIDI7XHJcblxyXG4gICAgZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XHJcbiAgICAgIGdyb3VwLnNldCh7IGxlZnQ6IHgsIHRvcDogeSB9KTtcclxuICAgICAgeCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICAgIHRoaXMuY2FudmFzLmFkZChncm91cCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwRmFicmljR3JvdXAgPSBncm91cHNbMF07XHJcblxyXG4gICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20oc2VsZWN0ZWRHcm91cEZhYnJpY0dyb3VwKTtcclxuICAgIHRoaXMucmVuZGVyTWFzdGVyRml4dHVyZXMoZ3gsIGd5ICsgNTAsIHNlbGVjdGVkR3JvdXBGYWJyaWNHcm91cCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJNYXN0ZXJGaXh0dXJlcyh4OiBudW1iZXIsIHk6IG51bWJlciwgZ3JvdXA/OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXMgPSB0aGlzLmFsbE1hc3RlclRlbXBsYXRlcy5maWx0ZXIoXHJcbiAgICAgIChmKSA9PlxyXG4gICAgICAgIGYudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiICYmXHJcbiAgICAgICAgZi50ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSxcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlc1swXS5faWQ7XHJcbiAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJtYXN0ZXJcIik7XHJcbiAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJzdWJcIik7XHJcblxyXG4gICAgY29uc3QgbWFzdGVyczogYW55W10gPSBhd2FpdCB0aGlzLnJlbmRlckZpeHR1cmVzKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzLFxyXG4gICAgICB4LFxyXG4gICAgICB5LFxyXG4gICAgKTtcclxuXHJcbiAgICBtYXN0ZXJzLmZvckVhY2goKG0pID0+IHRoaXMuZHJhd0Fycm93KGdyb3VwLCBtLCBncm91cC5ncm91cE5hbWUpKTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZE1hc3RlckZhYnJpY0dyb3VwID0gbWFzdGVyc1swXTtcclxuICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKHNlbGVjdGVkTWFzdGVyRmFicmljR3JvdXApO1xyXG4gICAgdGhpcy5yZW5kZXJTdWJGaXh0dXJlcyhzZWxlY3RlZE1hc3RlckZhYnJpY0dyb3VwLCBneCwgZ3kgKyA1MCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJTdWJGaXh0dXJlcyhncm91cDogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdWJUZW1wbGF0ZXMgPVxyXG4gICAgICB0aGlzLmFsbEZpeHR1cmU/LmZpbHRlcihcclxuICAgICAgICAoZikgPT4gZi5tYXN0ZXJUZW1wbGF0ZUlkID09PSB0aGlzLnNlbGVjdGVkTWFzdGVySWQsXHJcbiAgICAgICkgPz8gW107XHJcbiAgICBpZiAodGhpcy5zdWJUZW1wbGF0ZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHN1YjogYW55W10gPSBhd2FpdCB0aGlzLnJlbmRlckZpeHR1cmVzKFxyXG4gICAgICAgIHRoaXMuc3ViVGVtcGxhdGVzLFxyXG4gICAgICAgIHgsXHJcbiAgICAgICAgeSxcclxuICAgICAgICBncm91cCxcclxuICAgICAgKTtcclxuICAgICAgc3ViLmZvckVhY2goKG0pID0+IHRoaXMuZHJhd0Fycm93KGdyb3VwLCBtLCBncm91cC5maXh0dXJlSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByZXZlbnRDbGljayA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRml4dHVyZXMoXHJcbiAgICB0ZW1wbGF0ZXM6IGFueVtdLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgcGFyZW50RmFicmljPzogYW55LFxyXG4gICkge1xyXG4gICAgY29uc3QgZ3JvdXBTcGFjaW5nID0gMjA7XHJcblxyXG4gICAgdHlwZSBGaXh0dXJlR3JvdXAgPSBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgIGdyb3VwTmFtZTogc3RyaW5nO1xyXG4gICAgICB0ZW1wbGF0ZVR5cGU6IHN0cmluZztcclxuICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICBwYXJlbnRGYWJyaWM6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZ3JvdXBzOiBGaXh0dXJlR3JvdXBbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICB0ZW1wbGF0ZXMubWFwKGFzeW5jIChtZikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzTWFzdGVyID0gbWYudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCByYWRpdXMgPSAzO1xyXG5cclxuICAgICAgICBjb25zdCBtYWluQ29udGFpbmVyID0gdGhpcy5jcmVhdGVNYWluQ29udGFpbmVyKG1mLCB4LCB5LCBpc01hc3Rlcik7XHJcbiAgICAgICAgY29uc3QgdG9wQ29udGFpbmVyID0gdGhpcy5jcmVhdGVUb3BDb250YWluZXIobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuICAgICAgICBjb25zdCBpbm5lclRvcEJveCA9IHRoaXMuY3JlYXRlSW5uZXJUb3BCb3gobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuICAgICAgICBjb25zdCBpbm5lckJvdHRvbUJveCA9IHRoaXMuY3JlYXRlSW5uZXJCb3R0b21Cb3gobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuICAgICAgICBjb25zdCBtaWRDb250YWluZXIgPSB0aGlzLmNyZWF0ZU1pZENvbnRhaW5lcihtZiwgeCwgeSwgaXNNYXN0ZXIpO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94ID0gdGhpcy5jcmVhdGVGaXJzdEJveChtZiwgeCwgeSwgaXNNYXN0ZXIpO1xyXG4gICAgICAgIGNvbnN0IGxhc3RCb3ggPSB0aGlzLmNyZWF0ZUxhc3RCb3gobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuICAgICAgICBjb25zdCB7IGNvbnRhaW5lcjogYm90dG9tQ29udGFpbmVyLCB0ZXh0OiBib3R0b21UZXh0Q29udGVudCB9ID1cclxuICAgICAgICAgIHRoaXMuY3JlYXRlQm90dG9tQ29udGFpbmVyKG1mLCB4LCB5KTtcclxuXHJcbiAgICAgICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICAgICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgICAgICBjb25zdCB0b3BYID0geCArICh3aWR0aCAtIHRvcFdpZHRoKSAvIDI7XHJcbiAgICAgICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgICAgIGNvbnN0IGlubmVyQm94SGVpZ2h0ID0gdG9wSGVpZ2h0IC8gMjtcclxuXHJcbiAgICAgICAgY29uc3QgaW5uZXJUb3BUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYEZpeHR1cmUgJHttZj8uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyfWAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogdG9wWSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBpbm5lckJveEhlaWdodCxcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBzZWNvbmRCb3hZID0gdG9wWSArIGlubmVyQm94SGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gaXNNYXN0ZXJcclxuICAgICAgICAgID8gYCR7bWY/LmZpeHR1cmVOYW1lfSAtICR7bWY/LmZpeHR1cmVDYXRlZ29yeX0gLSAke21mPy5maXh0dXJlV2lkdGgudmFsdWV9ICR7bWY/LmZpeHR1cmVXaWR0aC51bml0fWBcclxuICAgICAgICAgIDogYCR7bWY/LmZpeHR1cmVOYW1lfWA7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBhZGFwdGl2ZSB0ZXh0IGZvciBpbm5lciBib3R0b21cclxuICAgICAgICBjb25zdCBpbm5lckJvdHRvbVRleHQgPSB0aGlzLmNyZWF0ZUFkYXB0aXZlVGV4dCh0ZXh0Q29udGVudCwge1xyXG4gICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICBtYXhIZWlnaHQ6IGlubmVyQm94SGVpZ2h0LFxyXG4gICAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIGZpbGw6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIGZpcnN0IGJveCB0ZXh0IHdpdGggZWxsaXBzaXMgaGFuZGxpbmdcclxuICAgICAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgICAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgICAgICBjb25zdCBtaWRZID0gdG9wWSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICAgICAgY29uc3Qgc2hlbGZDb3VudCA9IG1mLnNoZWxmQ29uZmlnPy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKHNoZWxmQ291bnQgKyAyKTtcclxuICAgICAgICBjb25zdCBmaXJzdEJveFkgPSBtaWRZO1xyXG5cclxuICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBtZj8uaGVhZGVyPy5sYWJlbCA/PyBcIlwiO1xyXG4gICAgICAgIGxldCBkaXNwbGF5TGFiZWwgPSBsYWJlbFRleHQ7XHJcblxyXG4gICAgICAgIGlmIChsYWJlbFRleHQpIHtcclxuICAgICAgICAgIGxldCB0ZW1wVGV4dGJveCA9IG5ldyBmYWJyaWMuVGV4dGJveChsYWJlbFRleHQsIHtcclxuICAgICAgICAgICAgZm9udFNpemU6IDcsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaWYgKHRlbXBUZXh0Ym94LmhlaWdodCA+IGJveEhlaWdodCkge1xyXG4gICAgICAgICAgICBsZXQgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG4gICAgICAgICAgICBsZXQgbGVmdCA9IDA7XHJcbiAgICAgICAgICAgIGxldCByaWdodCA9IGxhYmVsVGV4dC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgbGV0IG1pZCA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcclxuICAgICAgICAgICAgICBsZXQgdGVzdFRleHQgPSBsYWJlbFRleHQuc2xpY2UoMCwgbWlkKSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICAgIHRlbXBUZXh0Ym94LnNldCh7IHRleHQ6IHRlc3RUZXh0IH0pO1xyXG4gICAgICAgICAgICAgIGlmICh0ZW1wVGV4dGJveC5oZWlnaHQgPiBib3hIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWlkO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0ID0gbWlkICsgMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGlzcGxheUxhYmVsID0gbGFiZWxUZXh0LnNsaWNlKDAsIE1hdGgubWF4KDAsIGxlZnQgLSAxKSkgKyBlbGxpcHNpcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChkaXNwbGF5TGFiZWwsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGZpcnN0Qm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBmb250U2l6ZTogNyxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiIzM2M0Y3MlwiIDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgc2hlbHZlcyB1c2luZyBoZWxwZXIgbWV0aG9kXHJcbiAgICAgICAgY29uc3Qgc2hlbHZlcyA9IHRoaXMuY3JlYXRlU2hlbHZlcyhtZiwgeCwgeSwgaXNNYXN0ZXIpO1xyXG5cclxuICAgICAgICAvLyBBZGQgVk0gY29uZmlndXJhdGlvbnMgdG8gc2hlbHZlcyBpZiB0aGV5IGV4aXN0XHJcbiAgICAgICAgaWYgKG1mPy52bUNvbmZpZz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1mLnZtQ29uZmlnLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgdm0gPSBtZi52bUNvbmZpZ1tpXTtcclxuICAgICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdm0uc3RhcnRZUG9zaXRpb24gLSAxO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdm0uZW5kWVBvc2l0aW9uIC0gMTtcclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZlRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNoZWxmSGVpZ2h0U3BhbiA9IGJveEhlaWdodCAqIChlbmRJbmRleCAtIHN0YXJ0SW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IHZtSGVpZ2h0UHg6IG51bWJlciA9IHNoZWxmSGVpZ2h0U3BhbjtcclxuICAgICAgICAgICAgICBsZXQgdm1ZOiBudW1iZXIgPSBzaGVsZlRvcFk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh2bS55Wm9uZSAmJiB2bS55Wm9uZSAhPT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgICAgICAgIHZtSGVpZ2h0UHggPSBzaGVsZkhlaWdodFNwYW4gLyAzO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh2bS55Wm9uZSkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwidG9wXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdm1ZID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdm1ZID0gc2hlbGZUb3BZICsgdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZtWSA9IHNoZWxmVG9wWSArIDIgKiB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHZtWSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGxldCB2bVggPSBtaWRYO1xyXG4gICAgICAgICAgICAgIGxldCB2bVdpZHRoID0gbWlkV2lkdGg7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghdm0ueFpvbmUgfHwgdm0ueFpvbmUgPT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICB2bVdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgICB2bVggPSBtaWRYO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uV2lkdGggPSBtaWRXaWR0aCAvIDM7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZtLnhab25lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJsZWZ0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdm1XaWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB2bVggPSBtaWRYO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdm1XaWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB2bVggPSBtaWRYICsgc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgICAgICAgICAgICB2bVdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZtWCA9IG1pZFggKyAyICogc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHZtV2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB2bVggPSBtaWRYO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHZtLnZtSW1hZ2VVcmwpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZtSW1hZ2U6IGFueSA9IGF3YWl0IGZhYnJpYy5GYWJyaWNJbWFnZS5mcm9tVVJMKFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY2RuVXJsfSR7dm0udm1JbWFnZVVybH1gLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBcImFub255bW91c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIHZtSW1hZ2Uuc2V0KHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB2bVggKyB2bVdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB0b3A6IHZtWSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBzY2FsZVg6IHZtV2lkdGggLyB2bUltYWdlLndpZHRoISxcclxuICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IHZtSGVpZ2h0UHggLyB2bUltYWdlLmhlaWdodCEsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godm1JbWFnZSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBgRXJyb3IgbG9hZGluZyBpbWFnZSBmb3IgVk06ICR7dm0udm1JbWFnZVVybH1gLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycixcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgdm1Cb3ggPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgICAgICBsZWZ0OiB2bVgsXHJcbiAgICAgICAgICAgICAgICAgIHRvcDogdm1ZLFxyXG4gICAgICAgICAgICAgICAgICB3aWR0aDogdm1XaWR0aCxcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB2bUhlaWdodFB4LFxyXG4gICAgICAgICAgICAgICAgICBmaWxsOiBcIiM2OTM4RUZcIixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgdm1UZXh0ID0gdGhpcy5jcmVhdGVBZGFwdGl2ZVRleHQodm0udm1OYW1lIHx8IFwiXCIsIHtcclxuICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogdm1IZWlnaHRQeCxcclxuICAgICAgICAgICAgICAgICAgd2lkdGg6IHZtV2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IHZtWCArIHZtV2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICB0b3A6IHZtWSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godm1Cb3gsIHZtVGV4dCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBFcnJvciBpbiBkcmF3aW5nIFZNOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDcmVhdGUgbGFzdCBib3ggdGV4dFxyXG4gICAgICAgIGNvbnN0IGxhc3RCb3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHNoZWxmQ291bnQgKyAxKTtcclxuICAgICAgICBjb25zdCBsYXN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgICAgIGAke21mPy5mb290ZXI/LmxhYmVsID8gbWYuZm9vdGVyLmxhYmVsIDogXCJcIn1gLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IGxhc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiMzNjNGNzJcIiA6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2hpbGRyZW4gPSBbXHJcbiAgICAgICAgICBtYWluQ29udGFpbmVyLFxyXG4gICAgICAgICAgLi4uKCFpc01hc3RlciA/IFt0b3BDb250YWluZXIsIGlubmVyVG9wQm94LCBpbm5lclRvcFRleHRdIDogW10pLFxyXG4gICAgICAgICAgaW5uZXJCb3R0b21Cb3gsXHJcbiAgICAgICAgICBpbm5lckJvdHRvbVRleHQsXHJcbiAgICAgICAgICBtaWRDb250YWluZXIsXHJcbiAgICAgICAgICBmaXJzdEJveCxcclxuICAgICAgICAgIGZpcnN0Qm94VGV4dCxcclxuICAgICAgICAgIC4uLnNoZWx2ZXMsXHJcbiAgICAgICAgICBsYXN0Qm94LFxyXG4gICAgICAgICAgbGFzdEJveFRleHQsXHJcbiAgICAgICAgICBib3R0b21Db250YWluZXIsXHJcbiAgICAgICAgICBib3R0b21UZXh0Q29udGVudCxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKGdyb3VwQ2hpbGRyZW4sIHtcclxuICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgICAgIC8vIGFuZ2xlOiBtZi5yZWxhdGl2ZVBvc2l0aW9uPy5hbmdsZSA/PyAwXHJcbiAgICAgICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICAgICAgZml4dHVyZUlkOiBzdHJpbmc7XHJcbiAgICAgICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgICAgICBncm91cE5hbWU6IHN0cmluZztcclxuICAgICAgICAgIHRlbXBsYXRlVHlwZTogc3RyaW5nO1xyXG4gICAgICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICAgICAgcGFyZW50RmFicmljOiBhbnk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJZCA9IG1mLl9pZDtcclxuICAgICAgICBmaXh0dXJlR3JvdXAuZml4dHVyZVR5cGUgPSBtZi5maXh0dXJlVHlwZTtcclxuICAgICAgICBmaXh0dXJlR3JvdXAuZ3JvdXBOYW1lID0gbWY/LnRlbXBsYXRlR3JvdXBOYW1lID8/IFwiXCI7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLnRlbXBsYXRlVHlwZSA9IG1mPy50ZW1wbGF0ZVR5cGUgPz8gXCJzdWJcIjtcclxuICAgICAgICBmaXh0dXJlR3JvdXAubmFtZSA9IG1mLnRlbXBsYXRlVHlwZSA/PyBcImZpeHR1cmVcIjtcclxuICAgICAgICBmaXh0dXJlR3JvdXAucGFyZW50RmFicmljID0gcGFyZW50RmFicmljO1xyXG5cclxuICAgICAgICBmaXh0dXJlR3JvdXAub24oXCJtb3VzZWRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjaGlsZE5hbWUgPSBvcHQuc3ViVGFyZ2V0cz8uWzBdPy5uYW1lO1xyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgY2hpbGROYW1lID09PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgaXNNYXN0ZXIgJiZcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkICE9PSBtZi5faWQgJiZcclxuICAgICAgICAgICAgIXRoaXMucHJldmVudENsaWNrXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQXJyb3dCeUlkKHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcInN1YlwiKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gbWYuX2lkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20oZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJTdWJGaXh0dXJlcyhmaXh0dXJlR3JvdXAsIGd4LCBneSArIDUwKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZml4dHVyZUdyb3VwLnRlbXBsYXRlVHlwZSA9PT0gXCJzdWJcIikge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5zdGFuY2UuZW1pdChtZik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmaXh0dXJlR3JvdXA7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgdG90YWxXaWR0aCA9IDA7XHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgdG90YWxXaWR0aCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0b3RhbFdpZHRoIC09IGdyb3VwU3BhY2luZztcclxuICAgIGxldCBueCA9IHggLSB0b3RhbFdpZHRoIC8gMjtcclxuXHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgZ3JvdXAuc2V0KHsgbGVmdDogbngsIHRvcDogeSB9KTtcclxuICAgICAgbnggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTWFpbkNvbnRhaW5lcihcclxuICAgIG1mOiBhbnksXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBpc01hc3RlcjogYm9vbGVhbixcclxuICApOiBmYWJyaWMuUmVjdCB7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgbGV0IG1haW5Db250YWluZXJIZWlnaHQgPSBoZWlnaHQgKyAxO1xyXG4gICAgaWYgKGlzTWFzdGVyKSB7XHJcbiAgICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICAgIG1haW5Db250YWluZXJIZWlnaHQgPSBoZWlnaHQgLSB0b3BIZWlnaHQgLyAyICsgMTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYWluQ29udGFpbmVyVG9wID0gaXNNYXN0ZXJcclxuICAgICAgPyB5ICsgKCgxNSAvIDEwMCkgKiBoZWlnaHQpIC8gMiAtIDFcclxuICAgICAgOiB5IC0gMTtcclxuXHJcbiAgICByZXR1cm4gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiBtYWluQ29udGFpbmVyVG9wLFxyXG4gICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgIGhlaWdodDogbWFpbkNvbnRhaW5lckhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVRvcENvbnRhaW5lcihcclxuICAgIG1mOiBhbnksXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBpc01hc3RlcjogYm9vbGVhbixcclxuICApOiBmYWJyaWMuUmVjdCB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPVxyXG4gICAgICAoMTUgLyAxMDApICpcclxuICAgICAgdGhpcy50b1BpeGVscyhtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLCBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQpO1xyXG4gICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgY29uc3QgcmFkaXVzID0gMztcclxuXHJcbiAgICByZXR1cm4gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogdG9wWCxcclxuICAgICAgdG9wOiB0b3BZLFxyXG4gICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgIGhlaWdodDogdG9wSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlSW5uZXJUb3BCb3goXHJcbiAgICBtZjogYW55LFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaXNNYXN0ZXI6IGJvb2xlYW4sXHJcbiAgKTogZmFicmljLlBhdGgge1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRvcFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID1cclxuICAgICAgKDE1IC8gMTAwKSAqXHJcbiAgICAgIHRoaXMudG9QaXhlbHMobWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSwgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0KTtcclxuICAgIGNvbnN0IHRvcFggPSB4ICsgKHdpZHRoIC0gdG9wV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IHRvcFkgPSB5ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcbiAgICBjb25zdCBpbm5lckJveEhlaWdodCA9IHRvcEhlaWdodCAvIDI7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFl9ICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFkgKyByYWRpdXN9IFxyXG4gICAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHt0b3BYfSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHt0b3BYfSAke3RvcFkgKyByYWRpdXN9IFxyXG4gICAgICAgICAgICBRICR7dG9wWH0gJHt0b3BZfSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlSW5uZXJCb3R0b21Cb3goXHJcbiAgICBtZjogYW55LFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaXNNYXN0ZXI6IGJvb2xlYW4sXHJcbiAgKTogZmFicmljLlBhdGgge1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRvcFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID1cclxuICAgICAgKDE1IC8gMTAwKSAqXHJcbiAgICAgIHRoaXMudG9QaXhlbHMobWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSwgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0KTtcclxuICAgIGNvbnN0IHRvcFggPSB4ICsgKHdpZHRoIC0gdG9wV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IHRvcFkgPSB5ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcbiAgICBjb25zdCBpbm5lckJveEhlaWdodCA9IHRvcEhlaWdodCAvIDI7XHJcbiAgICBjb25zdCBzZWNvbmRCb3hZID0gdG9wWSArIGlubmVyQm94SGVpZ2h0O1xyXG5cclxuICAgIGlmIChpc01hc3Rlcikge1xyXG4gICAgICByZXR1cm4gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXN9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFl9ICR7dG9wWCArIHRvcFdpZHRofSAke1xyXG4gICAgICAgICAgICBzZWNvbmRCb3hZICsgcmFkaXVzXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7XHJcbiAgICAgICAgICAgIHRvcFggKyB0b3BXaWR0aCAtIHJhZGl1c1xyXG4gICAgICAgICAgfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFh9ICR7XHJcbiAgICAgICAgICAgIHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICAgICAgfSBcclxuICAgICAgICAgIEwgJHt0b3BYfSAke3NlY29uZEJveFkgKyByYWRpdXN9IFxyXG4gICAgICAgICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WX0gJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFl9IFpgLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpbGw6IFwiIzM2M0Y3MlwiLFxyXG4gICAgICAgICAgc3Ryb2tlOiBcIiM3MTdCQkNcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgIGBNICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgICAgICAgc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmlsbDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICBzdHJva2U6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgfSxcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZU1pZENvbnRhaW5lcihcclxuICAgIG1mOiBhbnksXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBpc01hc3RlcjogYm9vbGVhbixcclxuICApOiBmYWJyaWMuUmVjdCB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBtaWRZID0geSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICBjb25zdCByYWRpdXMgPSAzO1xyXG5cclxuICAgIHJldHVybiBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICB0b3A6IG1pZFksXHJcbiAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgaGVpZ2h0OiBtaWRIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGaXJzdEJveChcclxuICAgIG1mOiBhbnksXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBpc01hc3RlcjogYm9vbGVhbixcclxuICApOiBmYWJyaWMuUGF0aCB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBtaWRZID0geSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAobWYuc2hlbGZDb25maWc/Lmxlbmd0aCArIDIpO1xyXG4gICAgY29uc3QgZmlyc3RCb3hZID0gbWlkWTtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIG1pZFdpZHRofSAke1xyXG4gICAgICAgICAgICAgIGZpcnN0Qm94WSArIHJhZGl1c1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIFEgJHttaWRYfSAke2ZpcnN0Qm94WX0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiI0VBRUNGNVwiIDogXCIjREFGMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiI0FGQjVEOVwiIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTGFzdEJveChtZjogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlciwgaXNNYXN0ZXI6IGJvb2xlYW4pOiBmYWJyaWMuUGF0aCB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBtaWRZID0geSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAobWYuc2hlbGZDb25maWc/Lmxlbmd0aCArIDIpO1xyXG4gICAgY29uc3QgbGFzdEJveFkgPSBtaWRZICsgYm94SGVpZ2h0ICogKG1mLnNoZWxmQ29uZmlnPy5sZW5ndGggKyAxKTtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHttaWRYfSAke2xhc3RCb3hZfSBcclxuICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke1xyXG4gICAgICAgICAgICAgIG1pZFggKyBtaWRXaWR0aCAtIHJhZGl1c1xyXG4gICAgICAgICAgICB9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIHJhZGl1c30gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIFEgJHttaWRYfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke21pZFh9ICR7XHJcbiAgICAgICAgICAgICAgbGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgTCAke21pZFh9ICR7bGFzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiNFQUVDRjVcIiA6IFwiI0RBRjFGRlwiLFxyXG4gICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiNBRkI1RDlcIiA6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUJvdHRvbUNvbnRhaW5lcihcclxuICAgIG1mOiBhbnksXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgKTogeyBjb250YWluZXI6IGZhYnJpYy5SZWN0OyB0ZXh0OiBmYWJyaWMuVGV4dGJveCB9IHtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBib3R0b21XaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IGJvdHRvbUhlaWdodCA9ICgzIC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IGJvdHRvbVggPSB4ICsgKHdpZHRoIC0gYm90dG9tV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IGJvdHRvbVkgPSB5ICsgdG9wSGVpZ2h0ICsgbWlkSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgY29uc3QgYm90dG9tQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogYm90dG9tWCxcclxuICAgICAgdG9wOiBib3R0b21ZLFxyXG4gICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYWN0dWFsU2hlbGZDb3VudCA9XHJcbiAgICAgIG1mPy5zaGVsZkNvbmZpZz8uZmlsdGVyKChzOiBhbnkpID0+IHMuc2hlbGZUeXBlICE9IFwidm1vbmx5XCIpPy5sZW5ndGggPz8gMDtcclxuXHJcbiAgICBjb25zdCBib3R0b21UZXh0Q29udGVudCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYFNoZWx2ZXMgLSAke2FjdHVhbFNoZWxmQ291bnR9IC4gUHJvZHVjdHMgLSAgJHttZi5maXh0dXJlQ2FwYWNpdHl9IC4gVk0gLSAke21mLnZtQ29uZmlnLmxlbmd0aH1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogYm90dG9tWCArIGJvdHRvbVdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJvdHRvbVkgKyBib3R0b21IZWlnaHQgLyAyICsgNCxcclxuICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBib3R0b21XaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHsgY29udGFpbmVyOiBib3R0b21Db250YWluZXIsIHRleHQ6IGJvdHRvbVRleHRDb250ZW50IH07XHJcbiAgfVxyXG5cclxuICBjcmVhdGVTaGVsdmVzKFxyXG4gICAgbWY6IGFueSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGlzTWFzdGVyOiBib29sZWFuLFxyXG4gICk6IGZhYnJpYy5PYmplY3RbXSB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBtaWRZID0geSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAobWYuc2hlbGZDb25maWc/Lmxlbmd0aCArIDIpO1xyXG4gICAgY29uc3QgZmlyc3RCb3hZID0gbWlkWTtcclxuXHJcbiAgICBjb25zdCBzaGVsdmVzOiBmYWJyaWMuT2JqZWN0W10gPSBbXTtcclxuXHJcbiAgICBpZiAobWYucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMVwiKSB7XHJcbiAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcbiAgICAgIGNvbnN0IHNoZWxmSGVpZ2h0ID0gbWlkSGVpZ2h0IC0gMiAqIGJveEhlaWdodDtcclxuXHJcbiAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBzaGVsZkhlaWdodCxcclxuICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgdGV4dCA9IG1mPy5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAvLyBXcmFwIHRleHQgd2l0aGluIGZpeHR1cmUgd2lkdGggYW5kIHNocmluayB0byBmaXQgc2hlbGYgaGVpZ2h0XHJcbiAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoICogMC45O1xyXG4gICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gc2hlbGZIZWlnaHQgKiAwLjg7XHJcbiAgICAgIGxldCBmb250U2l6ZUwxID0gNjtcclxuXHJcbiAgICAgIGNvbnN0IGNyZWF0ZVdyYXBwZWRUZXh0Ym94ID0gKGZzOiBudW1iZXIpID0+XHJcbiAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBzaGVsZkhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgbGV0IHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgIHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplTDEgPiAyKSB7XHJcbiAgICAgICAgZm9udFNpemVMMSAtPSAwLjU7XHJcbiAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogTWF0aC5taW4obWF4VGV4dFdpZHRoLCB3cmFwcGVkVGV4dC53aWR0aCEpICsgcGFkZGluZyxcclxuICAgICAgICBoZWlnaHQ6IHdyYXBwZWRUZXh0LmdldFNjYWxlZEhlaWdodCgpICsgMixcclxuICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJ4OiAxLFxyXG4gICAgICAgIHJ5OiAxLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNoZWx2ZXMucHVzaChzaGVsZiwgYmFja2dyb3VuZCwgd3JhcHBlZFRleHQpO1xyXG4gICAgfSBlbHNlIGlmIChtZi5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwyXCIpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZi5zaGVsZkNvbmZpZz8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGkgKyAxKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuXHJcbiAgICAgICAgaWYgKG1mLnNoZWxmQ29uZmlnPy5baV0uc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBtZi5zaGVsZkNvbmZpZz8uW2ldLnRyYXlSb3dzIHx8IDE7XHJcbiAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG4gICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGV4dCA9IG1mLnNoZWxmQ29uZmlnPy5baV0ucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiArIFwiKSB8fCBcIlwiO1xyXG5cclxuICAgICAgICAvLyBTaW5nbGUtbGluZSBlbGxpcHNpcyB3aXRoaW4gc2hlbGYgd2lkdGhcclxuICAgICAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IDY7XHJcbiAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gTWF0aC5tYXgoMCwgbWlkV2lkdGggLSBob3Jpem9udGFsUGFkZGluZyk7XHJcbiAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IGJveEhlaWdodCAqIDAuODtcclxuICAgICAgICBjb25zdCBiYXNlRm9udFNpemUgPSA1O1xyXG5cclxuICAgICAgICBjb25zdCBtZWFzdXJlID0gKHQ6IHN0cmluZykgPT5cclxuICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dCh0LCB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgZGlzcGxheVRleHQgPSB0ZXh0O1xyXG4gICAgICAgIGxldCBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG5cclxuICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGxpcHNpcyA9IFwiLi4uXCI7XHJcbiAgICAgICAgICBsZXQgbGVmdElkeCA9IDA7XHJcbiAgICAgICAgICBsZXQgcmlnaHRJZHggPSB0ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICB3aGlsZSAobGVmdElkeCA8IHJpZ2h0SWR4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pZElkeCA9IE1hdGguZmxvb3IoKGxlZnRJZHggKyByaWdodElkeCkgLyAyKTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGV4dC5zbGljZSgwLCBtaWRJZHgpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShjYW5kaWRhdGUpO1xyXG4gICAgICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgcmlnaHRJZHggPSBtaWRJZHg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGVmdElkeCA9IG1pZElkeCArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRpc3BsYXlUZXh0ID0gdGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0SWR4IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihtYXhUZXh0SGVpZ2h0LCBtZWFzdXJlZC5oZWlnaHQgPz8gMTApICsgMixcclxuICAgICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgcng6IDEsXHJcbiAgICAgICAgICByeTogMSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZmluYWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0KGRpc3BsYXlUZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChiYWNrZ3JvdW5kLCBmaW5hbFRleHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG1mLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDNcIikge1xyXG4gICAgICBjb25zdCBzZXF1ZW50aWFsR3JvdXBzOiB7IHpvbmU6IHN0cmluZzsgc2hlbHZlczogYW55W10gfVtdID0gW107XHJcbiAgICAgIGxldCBwcmV2aW91c1pvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBzaGVsZiBvZiBtZi5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBzaGVsZi56b25lIHx8IFwiVW5rbm93blwiO1xyXG4gICAgICAgIGlmICh6b25lICE9PSBwcmV2aW91c1pvbmUpIHtcclxuICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHMucHVzaCh7IHpvbmUsIHNoZWx2ZXM6IFtzaGVsZl0gfSk7XHJcbiAgICAgICAgICBwcmV2aW91c1pvbmUgPSB6b25lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzW3NlcXVlbnRpYWxHcm91cHMubGVuZ3RoIC0gMV0uc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjdXJyZW50U2hlbGZJbmRleCA9IDA7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHNlcXVlbnRpYWxHcm91cHMpIHtcclxuICAgICAgICBjb25zdCB7IHpvbmUsIHNoZWx2ZXM6IHNoZWx2ZXNJbkdyb3VwIH0gPSBncm91cDtcclxuICAgICAgICBjb25zdCBncm91cFN0YXJ0SW5kZXggPSBjdXJyZW50U2hlbGZJbmRleDtcclxuICAgICAgICBjb25zdCBncm91cExlbmd0aCA9IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBncm91cFRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoZ3JvdXBTdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21ZID0gZ3JvdXBUb3BZICsgYm94SGVpZ2h0ICogZ3JvdXBMZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2hlbHZlc0luR3JvdXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IHNoZWxmRGF0YSA9IHNoZWx2ZXNJbkdyb3VwW2pdO1xyXG4gICAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChjdXJyZW50U2hlbGZJbmRleCArIDEpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHNoZWxmUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGZSZWN0KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2hlbGZEYXRhLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBzaGVsZkRhdGEudHJheVJvd3MgfHwgMDtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFBlclNoZWxmID0gc2hlbGZEYXRhLnByb2R1Y3RQZXJTaGVsZiB8fCAwO1xyXG4gICAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblNwYWNpbmcgPSBtaWRXaWR0aCAvIHByb2R1Y3RQZXJTaGVsZjtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHIgPSAxOyByIDwgdHJheVJvd3M7IHIrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAxOyBjIDwgcHJvZHVjdFBlclNoZWxmOyBjKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWCA9IG1pZFggKyBjICogY29sdW1uU3BhY2luZztcclxuICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbExpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbGluZVgsIGJveFksIGxpbmVYLCBib3hZICsgYm94SGVpZ2h0XSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjdXJyZW50U2hlbGZJbmRleCsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21MaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgW21pZFgsIGdyb3VwQm90dG9tWSwgbWlkWCArIG1pZFdpZHRoLCBncm91cEJvdHRvbVldLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGdyb3VwQm90dG9tTGluZSk7XHJcblxyXG4gICAgICAgIGlmIChtZi5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGNvbnN0IGxhYmVsUGFkZGluZyA9IDI7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBuZXcgZmFicmljLlRleHRib3goem9uZSwge1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLSBsYWJlbFBhZGRpbmcsXHJcbiAgICAgICAgICAgIHRvcDogZ3JvdXBCb3R0b21ZLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiM3MDcwNzBcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKGxhYmVsVGV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBncm91cENlbnRlclggPSBtaWRYICsgbWlkV2lkdGggLyAyO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWSA9IGdyb3VwVG9wWSArIChncm91cEJvdHRvbVkgLSBncm91cFRvcFkpIC8gMjtcclxuICAgICAgICBjb25zdCBzZWN0aW9uQnJhbmRzID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICBzaGVsdmVzSW5Hcm91cD8uZm9yRWFjaCgoc2hlbGYpID0+IHtcclxuICAgICAgICAgIHNoZWxmLnByb2R1Y3RCcmFuZE5hbWU/LmZvckVhY2goKGJyYW5kOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbkJyYW5kcy5hZGQoYnJhbmQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChbLi4uc2VjdGlvbkJyYW5kc10ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gWy4uLnNlY3Rpb25CcmFuZHNdLmpvaW4oXCIgKyBcIik7XHJcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gMjA7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNjtcclxuICAgICAgICAgIGxldCB3cmFwcGVkVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVUZXh0Ym94ID0gKGZzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjQwMFwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlVGV4dGJveChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyBwYWRkaW5nO1xyXG4gICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJUZXh0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IHJlY3RXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0SGVpZ2h0LFxyXG4gICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cENlbnRlclRleHQsIHdyYXBwZWRUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2hlbHZlcztcclxuICB9XHJcblxyXG4gIGNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXModGVtcGxhdGVUeXBlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyb3Vwc1RvUmVtb3ZlID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKFxyXG4gICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICBvYmogaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXAgJiZcclxuICAgICAgICAgIChvYmogYXMgYW55KS50ZW1wbGF0ZVR5cGUgPT09IHRlbXBsYXRlVHlwZSxcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoZ3JvdXBzVG9SZW1vdmUpIHtcclxuICAgICAgZ3JvdXBzVG9SZW1vdmUuZm9yRWFjaCgoZ3JvdXApID0+IHRoaXMuY2FudmFzLnJlbW92ZShncm91cCkpO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmF3QXJyb3coZnJvbUdyb3VwOiBmYWJyaWMuR3JvdXAsIHRvR3JvdXA6IGZhYnJpYy5Hcm91cCwgYXJyb3dJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmcm9tID0gZnJvbUdyb3VwLmFDb29yZHMgPz8gZnJvbUdyb3VwLmNhbGNPQ29vcmRzKCk7XHJcbiAgICBjb25zdCB0byA9IHRvR3JvdXAuYUNvb3JkcyA/PyB0b0dyb3VwLmNhbGNPQ29vcmRzKCk7XHJcblxyXG4gICAgY29uc3QgZnJvbVggPSAoZnJvbS5ibC54ICsgZnJvbS5ici54KSAvIDI7XHJcbiAgICBjb25zdCBmcm9tWSA9IChmcm9tLmJsLnkgKyBmcm9tLmJyLnkpIC8gMjtcclxuXHJcbiAgICBjb25zdCB0b1ggPSAodG8udGwueCArIHRvLnRyLngpIC8gMjtcclxuICAgIGNvbnN0IHRvWSA9ICh0by50bC55ICsgdG8udHIueSkgLyAyO1xyXG5cclxuICAgIGNvbnN0IGhvcml6b250YWxPZmZzZXQgPSB0b1ggLSBmcm9tWDtcclxuICAgIGNvbnN0IHZlcnRpY2FsT2Zmc2V0ID0gdG9ZIC0gZnJvbVk7XHJcbiAgICBjb25zdCBjdXJ2ZVNpemUgPSAxNDtcclxuXHJcbiAgICBsZXQgcGF0aERhdGEgPSBcIlwiO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhob3Jpem9udGFsT2Zmc2V0KSA8IDUpIHtcclxuICAgICAgLy8gRGlyZWN0IHZlcnRpY2FsIGxpbmVcclxuICAgICAgcGF0aERhdGEgPSBgTSAke2Zyb21YfSAke2Zyb21ZfSBMICR7dG9YfSAke3RvWX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbWlkWSA9IGZyb21ZICsgdmVydGljYWxPZmZzZXQgLyAyO1xyXG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBob3Jpem9udGFsT2Zmc2V0ID4gMCA/IDEgOiAtMTtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnZlMVggPSBmcm9tWCArIGRpcmVjdGlvbiAqIGN1cnZlU2l6ZTtcclxuICAgICAgY29uc3QgY3VydmUyWCA9IHRvWCAtIGRpcmVjdGlvbiAqIGN1cnZlU2l6ZTtcclxuXHJcbiAgICAgIHBhdGhEYXRhID0gW1xyXG4gICAgICAgIGBNICR7ZnJvbVh9ICR7ZnJvbVl9YCxcclxuICAgICAgICBgTCAke2Zyb21YfSAke21pZFkgLSBjdXJ2ZVNpemV9YCxcclxuICAgICAgICBgUSAke2Zyb21YfSAke21pZFl9ICR7Y3VydmUxWH0gJHttaWRZfWAsXHJcbiAgICAgICAgYEwgJHtjdXJ2ZTJYfSAke21pZFl9YCxcclxuICAgICAgICBgUSAke3RvWH0gJHttaWRZfSAke3RvWH0gJHttaWRZICsgY3VydmVTaXplfWAsXHJcbiAgICAgICAgYEwgJHt0b1h9ICR7dG9ZfWAsXHJcbiAgICAgIF0uam9pbihcIiBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXJyb3dMaW5lID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIHN0cm9rZTogXCIjQUZCNUQ5XCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAxLjgsXHJcbiAgICAgIGZpbGw6IFwiXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFycm93aGVhZFxyXG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHRvWSAtICh0b1kgLSAxMCksIHRvWCAtIHRvWCk7XHJcbiAgICBjb25zdCBoZWFkbGVuID0gMTA7XHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIFtcclxuICAgICAgICBgTSAke3RvWH0gJHt0b1l9YCxcclxuICAgICAgICBgTCAke3RvWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyA1KX0gJHtcclxuICAgICAgICAgIHRvWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyA1KVxyXG4gICAgICAgIH1gLFxyXG4gICAgICAgIGBNICR7dG9YfSAke3RvWX1gLFxyXG4gICAgICAgIGBMICR7dG9YIC0gaGVhZGxlbiAqIE1hdGguY29zKGFuZ2xlICsgTWF0aC5QSSAvIDUpfSAke1xyXG4gICAgICAgICAgdG9ZIC0gaGVhZGxlbiAqIE1hdGguc2luKGFuZ2xlICsgTWF0aC5QSSAvIDUpXHJcbiAgICAgICAgfWAsXHJcbiAgICAgIF0uam9pbihcIiBcIiksXHJcbiAgICAgIHtcclxuICAgICAgICBzdHJva2U6IFwiI0FGQjVEOVwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLjgsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEdyb3VwaW5nIGJvdGggbGluZSBhbmQgYXJyb3doZWFkXHJcbiAgICBjb25zdCBhcnJvd0dyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbYXJyb3dMaW5lLCBhcnJvd0hlYWRdLCB7XHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHsgYXJyb3dJZDogc3RyaW5nIH07XHJcblxyXG4gICAgLy8gQXR0YWNoIGN1c3RvbSBhcnJvdyBJRFxyXG4gICAgYXJyb3dHcm91cC5hcnJvd0lkID0gYXJyb3dJZDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoYXJyb3dHcm91cCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFycm93QnlJZChhcnJvd0lkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFycm93R3JvdXAgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCAmJiAob2JqIGFzIGFueSkuYXJyb3dJZCA9PT0gYXJyb3dJZCxcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoYXJyb3dHcm91cCkge1xyXG4gICAgICBhcnJvd0dyb3VwLmZvckVhY2goKGdyb3VwKSA9PiB0aGlzLmNhbnZhcy5yZW1vdmUoZ3JvdXApKTtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cInRyZWUtY2FudmFzLWNhcmRcIiBjbGFzcz1cInctMTAwIHAtNlwiPlxyXG4gIDxjYW52YXMgaWQ9XCJ0ZW1wbGF0ZS1jYW52YXNcIiAjdGVtcGxhdGVDYW52YXM+PC9jYW52YXM+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy0xMDBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTAgMTFcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibWUtMVwiPlxyXG4gICAgICAgIDxjaXJjbGUgY3g9XCI0Ljg0MzFcIiBjeT1cIjUuNDk5OTZcIiByPVwiNC44NDMxXCIgZmlsbD1cIiM2MTcyRjNcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPHAgY2xhc3M9XCJtLTAgbWUtM1wiPk1hc3RlciBUZW1wbGF0ZTwvcD5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMVwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxMSAxMVwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJtZS0xXCI+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjUuNDQ0NjZcIiBjeT1cIjUuNDk5OTZcIiByPVwiNC44NDMxXCIgZmlsbD1cIiMzM0I1RkZcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPHAgY2xhc3M9XCJtLTBcIj5GaXh0dXJlIEluc3RhbmNlPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiem9vbVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiem9vbS1pblwiIChjbGljayk9XCJ6b29tSW4oKVwiPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xMiA1VjE5TTUgMTJIMTlcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiem9vbS1vdXRcIiAoY2xpY2spPVwiem9vbU91dCgpXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTUgMTJIMTlcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=